Removed almost all warnings on origin2000.
[charm.git] / src / ck-core / debug-message.C
1 #include <converse.h>
2 #include <charm.h>
3 #ifdef CMK_OPTIMIZE
4 #define NDEBUG
5 #endif
6 #include <assert.h>
7 #include "envelope.h"
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <string.h>
11 #include "fifo.h"
12 #include "queueing.h"
13
14 #if CMK_DEBUG_MODE
15
16 #define NUM_MESSAGES 100
17
18 extern "C" void  CpdInitializeHandlerArray(void);
19 extern void handlerArrayRegister(int, hndlrIDFunction, hndlrIDFunction);
20 extern char* genericViewMsgFunction(char *msg, int type);
21 extern char* getMsgListSched(void);
22 extern char* getMsgListPCQueue(void);
23 extern char* getMsgListFIFO(void);
24 extern char* getMsgListDebug(void);
25 extern char* getMsgContentsSched(int index);
26 extern char* getMsgContentsPCQueue(int index);
27 extern char* getMsgContentsFIFO(int index);
28 extern char* getMsgContentsDebug(int index);
29 extern void  msgListCache(void);
30 extern void  msgListCleanup(void);
31 extern int   getCharmMsgHandlers(int *handleArray);
32 extern char* getEnvInfo(envelope *env);
33 extern char* getSymbolTableInfo(void);
34
35 extern "C" void  CqsEnumerateQueue(Queue, void ***);
36 extern "C" void  FIFO_Enumerate(FIFO_QUEUE*, void***);
37
38 CpvDeclare(handlerType, handlerArray);
39
40 void **schedQueue=0;
41 void **FIFOQueue=0;
42 void **DQueue=0;
43
44 int schedIndex;
45 int debugIndex;
46 int FIFOIndex;
47
48 void msgListCleanup(void)
49 {
50   if(schedQueue != 0) CmiFree(schedQueue);
51   if(FIFOQueue != 0) free(FIFOQueue);
52   if(DQueue != 0) free(DQueue);
53   schedIndex = 0;
54   FIFOIndex = 0;
55   debugIndex = 0;
56
57   schedQueue = 0;
58   FIFOQueue = 0;
59   DQueue = 0;
60 }
61
62 void msgListCache(void)
63 {
64   CqsEnumerateQueue((Queue)CpvAccess(CsdSchedQueue), &schedQueue);
65   FIFO_Enumerate((FIFO_QUEUE *)CpvAccess(CmiLocalQueue), &FIFOQueue);
66   schedIndex = 0;
67   FIFOIndex = 0;
68   debugIndex = 0;
69 }
70
71 extern "C"
72 void CpdInitializeHandlerArray(void){
73   int i;
74
75   CpvInitialize(handlerType, handlerArray);
76   for(i = 0; i < MAX_NUM_HANDLERS; i++){
77     CpvAccess(handlerArray)[i][0] = 0;
78     CpvAccess(handlerArray)[i][1] = 0;
79   }
80 }
81
82 void handlerArrayRegister(int hndlrID, hndlrIDFunction fHeader, 
83                                        hndlrIDFunction fContent){
84     CpvAccess(handlerArray)[hndlrID][0] = fHeader;
85     CpvAccess(handlerArray)[hndlrID][1] = fContent;
86 }
87
88 static const char *HeaderUnknownFormat =
89 "<HEADER>:Unknown Format #"
90 ;
91
92 // type = 0 header required
93 //      = 1 contents required
94 char* genericViewMsgFunction(char *msg, int type){
95   int hndlrID;
96   char *temp;
97   hndlrIDFunction f;
98
99   hndlrID = CmiGetHandler(msg);
100   f = CpvAccess(handlerArray)[hndlrID][type];
101   if(f == 0){
102     // Undefined Content/Header function
103     temp = (char *)malloc(strlen(HeaderUnknownFormat)+1);
104     strcpy(temp, HeaderUnknownFormat);
105     return(temp);
106   } else{
107     return((*f)(msg));
108   }
109 }
110
111 char* getMsgListSched(void)
112 {
113   int ending;
114   int count = 0;
115   char *list;
116   char t[10];
117   int maxLength;
118
119   ending = NUM_MESSAGES;
120   if ( (ending + schedIndex) > ((Queue)(CpvAccess(CsdSchedQueue)))->length) {
121     ending = (((Queue)(CpvAccess(CsdSchedQueue)))->length) - schedIndex;
122   }
123   maxLength = ending * sizeof(char) * 20 + 1;
124   list = (char *)malloc(maxLength);
125   strcpy(list, "");
126
127   for(int i = schedIndex; i < ending + schedIndex; i++){
128     char *temp = genericViewMsgFunction((char *)schedQueue[i], 0);
129     if(strlen(list) + strlen(temp) + 10 > maxLength){ 
130       free(temp);
131       break;
132     }
133     strcat(list, temp);
134     strcat(list, "#");
135     sprintf(t, "%d", i);
136     strcat(list, t);
137     strcat(list, "#");
138     count++;
139     free(temp);
140   }
141   schedIndex += count;
142   return(list);
143 }
144
145 static const char *NotImpl = "Not Implemented";
146
147 char* getMsgListPCQueue(void)
148 {
149   char *list;
150
151   list = (char *)malloc(strlen(NotImpl)+1);
152   strcpy(list, NotImpl);
153   return(list);
154 }
155
156 char* getMsgListFIFO(void)
157 {
158   int ending;
159   char *temp;
160   int count = 0;
161   char *list;
162   char t[10];
163   int maxLength;
164
165   ending = NUM_MESSAGES;
166   if ( (ending+FIFOIndex) > ((FIFO_QUEUE *)(CpvAccess(CmiLocalQueue)))->fill) {
167     ending = (((FIFO_QUEUE *)(CpvAccess(CmiLocalQueue)))->fill) - FIFOIndex;
168   }
169   maxLength = ending * sizeof(char) * 20 + 1;
170   list = (char *)malloc(maxLength);
171   strcpy(list, "");
172
173   for(int i=FIFOIndex; i < FIFOIndex+ending; i++){
174     temp = genericViewMsgFunction((char *)FIFOQueue[i], 0);
175     if(strlen(list) + strlen(temp) + 10 > maxLength){
176       free(temp); 
177       break;
178     }
179     strcat(list, temp);
180     strcat(list, "#");
181     sprintf(t, "%d", i);
182     strcat(list, t);
183     strcat(list, "#");
184     count++;
185     free(temp);
186   }
187   FIFOIndex += count;
188   return(list);
189 }
190
191 char* getMsgListDebug(void)
192 {
193   int ending;
194   int count = 0;
195   char *list;
196   char t[10];
197   int maxLength;
198   char *temp;
199
200   ending = NUM_MESSAGES;
201   if ( (ending+debugIndex) > ((FIFO_QUEUE *)(CpvAccess(debugQueue)))->fill) {
202       ending = (((FIFO_QUEUE *)(CpvAccess(debugQueue)))->fill) - debugIndex;
203   }
204   maxLength = ending * sizeof(char) * 20 + 1;
205   list = (char *)malloc(maxLength);
206   strcpy(list, "");
207
208   if(DQueue != 0) free(DQueue);
209   FIFO_Enumerate((FIFO_QUEUE *)CpvAccess(debugQueue), &DQueue);
210
211   for(int i=debugIndex; i < ending+debugIndex; i++){
212     temp = genericViewMsgFunction((char *)DQueue[i], 0);
213     if(strlen(list) + strlen(temp) + 10 > maxLength){ 
214       free(temp);
215       break;
216     }
217     strcat(list, temp);
218     strcat(list, "#");
219     sprintf(t, "%d", i);
220     strcat(list, t);
221     strcat(list, "#");
222     count++;
223     free(temp);
224   }
225   debugIndex += count;
226   return(list);
227 }
228
229 char* getMsgContentsSched(int index)
230 {
231   return genericViewMsgFunction((char *)schedQueue[index], 1);
232 }
233
234 char* getMsgContentsPCQueue(int index)
235 {
236   char *temp;
237   temp = (char *)malloc(strlen(NotImpl)+1);
238   strcpy(temp, NotImpl);
239   return(temp);
240 }
241
242 char* getMsgContentsFIFO(int index)
243 {
244   return genericViewMsgFunction((char *)FIFOQueue[index], 1);
245 }
246
247 char* getMsgContentsDebug(int index)
248 {
249   return genericViewMsgFunction((char *)DQueue[index], 1);
250 }
251
252 #endif