/*@@ @file Groups.c @date Wed Sep 14 23:47:43 2000 @author Gabrielle Allen @desc Pages about groups @enddesc @version $Header$ @@*/ #include #include "cctk.h" #include "util_String.h" #include "http_Request.h" #include "http_Content.h" static char *rcsid = "$Header$"; CCTK_FILEVERSION(DevThorns_httpd_Groups_c) /******************************************************************** ********************* Local Data Types *********************** ********************************************************************/ /******************************************************************** ********************* Local Routine Prototypes ********************* ********************************************************************/ static int GroupsPage(cGH *cctkGH, httpRequest *request, void *data); static int watch[1024]; /******************************************************************** ********************* Other Routine Prototypes ********************* ********************************************************************/ /******************************************************************** ********************* Local Data ***************************** ********************************************************************/ /******************************************************************** ********************* External Routines ********************** ********************************************************************/ /*@@ @routine HTTPi_RegisterGroupPages @date Wed Sep 14 11:29:43 2000 @author Gabrielle Allen @desc Httpd utils registration routine. @enddesc @calls @calledby @history @endhistory @@*/ int HTTPi_RegisterGroupsPages(void) { /* Register the group info page. */ HTTP_RegisterPage("/Groups", GroupsPage, NULL); HTTP_ContentLink("/Groups/index.html", "Groups and Variables", "Information about grid variables and groups", HTTP_QUICKLINK); return 0; } /******************************************************************** ********************* Local Routines ************************* ********************************************************************/ /****************************************************************************** ***************************** Groups Page ************************************** ******************************************************************************/ /*@@ @routine GroupsPage @date Thu Sep 14 23:47:43 2000 @author Gabrielle Allen @desc Displays the group description page. @enddesc @calls @calledby @@*/ static int GroupsPage(cGH *cctkGH, httpRequest *request, void *data) { int retval; char message[4098]; int i,j; int ngroups,nvars; cGroup gdata; char *groupname; /* Status message */ strcpy(message,"HTTP/1.0 200 OK\r\n"); HTTP_Write(request, message, strlen(message)); /* Content-Type */ strcpy(message,"Content-Type: text/html\r\n\r\n"); HTTP_Write(request, message, strlen(message)); /* Start the page */ strcpy(message,"Cactus Simulation Group Information\n"); HTTP_Write(request, message, strlen(message)); /* HTTP_Write out the header part. */ HTTP_ContentHeader(cctkGH,0,strlen(message),message,NULL); retval = HTTP_Write(request, message, strlen(message)); ngroups = CCTK_NumGroups(); strcpy(message, "

Groups and Grid Variables

" "

These pages describe the grid variables and groups " "active in this simulation.

"); retval = HTTP_Write(request, message, strlen(message)); sprintf(message,"

This simulation contains %d groups, and %d variables, " "set in %d-space dimensions. Groups for which storage is " "currently assigned are written in red. " "The numbers in square brackets are the group and variable indices." "

", CCTK_NumGroups(),CCTK_NumVars(), CCTK_MaxDim()); retval = HTTP_Write(request, message, strlen(message)); strcpy(message,"
\n"); retval = HTTP_Write(request, message, strlen(message)); strcpy(message,"
" "" ""); retval = HTTP_Write(request, message, strlen(message)); for(i=0; i < ngroups; i++) { strcpy(message,""); groupname = CCTK_GroupName(i); if (CCTK_QueryGroupStorageI(cctkGH,i)) { sprintf(message,"%s " "\n", message, i, groupname); } else { sprintf(message,"%s \n", message, i, groupname); } free(groupname); HTTP_Write(request, message, strlen(message)); /* Group Description */ sprintf(message,""); nvars = CCTK_NumVarsInGroupI(i); strcat(message,""); HTTP_Write(request, message, strlen(message)); /* strcpy(message,"",message); HTTP_Write(request, message, strlen(message)); */ } strcpy(message,"
GroupsGroup PropertiesVariables
[%d] %s[%d] %s"); if (CCTK_GroupData(i,&gdata)>-1) { switch (CCTK_GroupTypeI(i)) { case CCTK_SCALAR: strcat(message,"Grid scalar"); break; case CCTK_ARRAY: strcat(message,"Grid array"); break; case CCTK_GF: strcat(message,"Grid function"); break; } sprintf(message, "%s %s
(%d bytes)", message, CCTK_VarTypeName(gdata.vartype),CCTK_VarTypeSize(gdata.vartype)); if (!(CCTK_GroupTypeI(i) == CCTK_SCALAR)) { sprintf(message,"%s
Dimension %d",message,gdata.dim); sprintf(message, "%s
Timelevels %d",message, gdata.numtimelevels); } HTTP_Write(request, message, strlen(message)); } strcpy(message,"
"); for(j=CCTK_FirstVarIndexI(i); j < CCTK_FirstVarIndexI(i)+nvars; j++) { sprintf(message,"%s
[%d] %s\n", message, j, CCTK_VarName(j) ); } strcat(message,"
"); if (CCTK_GroupTypeI(i) == CCTK_SCALAR) { for(j=CCTK_FirstVarIndexI(i); j < CCTK_FirstVarIndexI(i)+nvars; j++) { sprintf(message,"%s " "
", message,j,watch[j] ? "checked" : "unchecked"); } } else { strcat(message," "); } sprintf(message,"%s
\n"); HTTP_Write(request, message, strlen(message)); /* Write out the footer part. */ HTTP_ContentFooter(cctkGH,0,strlen(message),message); retval = HTTP_Write(request, message, strlen(message)); return retval; }