Sync with 5.4.0
[deliverable/titan.core.git] / repgen / repgen.c
1 ///////////////////////////////////////////////////////////////////////////////
2 // Copyright (c) 2000-2015 Ericsson Telecom AB
3 // All rights reserved. This program and the accompanying materials
4 // are made available under the terms of the Eclipse Public License v1.0
5 // which accompanies this distribution, and is available at
6 // http://www.eclipse.org/legal/epl-v10.html
7 ///////////////////////////////////////////////////////////////////////////////
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <unistd.h>
11 #include <dirent.h>
12 #include <time.h>
13 #include <string.h>
14 #include <sys/stat.h>
15
16 #include "repgen.h"
17
18 #ifndef LOGFORMAT
19 #define LOGFORMAT "ttcn3_logformat -s"
20 #endif /* LOGFORMAT */
21
22 static const unsigned char logo[] = {
23 0x47, 0x49, 0x46, 0x38, 0x37, 0x61, 0x64, 0x00, 0x1B, 0x00,
24 0xF2, 0x00, 0x00, 0x40, 0x66, 0xCC, 0x80, 0x99, 0xCC, 0xA2,
25 0xA8, 0xE9, 0xBF, 0xCC, 0xFF, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF,
26 0xFF, 0xE1, 0xE9, 0xF3, 0x4E, 0x92, 0xCB, 0x2C, 0x00, 0x00,
27 0x00, 0x00, 0x64, 0x00, 0x1B, 0x00, 0x00, 0x03, 0xFE, 0x08,
28 0xBA, 0xDC, 0xFE, 0x30, 0xCA, 0x49, 0xAB, 0xBD, 0x38, 0xEB,
29 0xCD, 0xBB, 0xFF, 0x60, 0x28, 0x8E, 0x64, 0x69, 0x9E, 0x68,
30 0x3A, 0x0A, 0x83, 0xA1, 0xBE, 0xE1, 0x31, 0x10, 0x34, 0x21,
31 0xC0, 0xB8, 0xD6, 0xD2, 0x45, 0x41, 0x07, 0xB9, 0xE0, 0x24,
32 0x50, 0xE3, 0x11, 0x0C, 0x37, 0xA1, 0xF2, 0x41, 0x2C, 0xDA,
33 0x0E, 0x00, 0xA8, 0x26, 0xC0, 0x1A, 0xB0, 0x92, 0x03, 0xAB,
34 0x15, 0x08, 0x08, 0x0C, 0xB8, 0x00, 0x81, 0xA1, 0x95, 0xF4,
35 0x8E, 0xCB, 0xAD, 0xEC, 0xC2, 0x8C, 0x5C, 0x54, 0xDD, 0x83,
36 0x48, 0x93, 0xF0, 0x8D, 0x8A, 0x09, 0x05, 0xB0, 0x45, 0xE0,
37 0x8C, 0xF3, 0x8F, 0x06, 0x34, 0x50, 0x3F, 0x5D, 0x34, 0x63,
38 0x33, 0x00, 0x33, 0x36, 0x2D, 0x85, 0x74, 0x62, 0x0A, 0x8A,
39 0x77, 0x04, 0x0A, 0x35, 0x2E, 0x00, 0x34, 0x12, 0x01, 0x5C,
40 0x01, 0x81, 0x45, 0x71, 0x18, 0x33, 0x49, 0x6E, 0x47, 0x0A,
41 0x81, 0x40, 0x34, 0x37, 0x34, 0x9F, 0x0B, 0xAA, 0x0C, 0x81,
42 0xAB, 0x8D, 0x52, 0xAF, 0x97, 0x3E, 0x04, 0xA7, 0x04, 0x52,
43 0x10, 0x5E, 0x4E, 0x86, 0xB9, 0x16, 0x33, 0x48, 0x54, 0x40,
44 0x7C, 0x06, 0x9A, 0x84, 0xA8, 0x44, 0x05, 0xBE, 0x89, 0x3E,
45 0x75, 0x61, 0x3E, 0xC5, 0x0A, 0x02, 0x05, 0x96, 0xCF, 0x2E,
46 0x78, 0x81, 0xD7, 0x93, 0x11, 0x9D, 0xB5, 0xAA, 0x7A, 0x17,
47 0x33, 0x3D, 0xCD, 0x5D, 0xB5, 0x3D, 0x5C, 0x78, 0x02, 0x01,
48 0x3E, 0x0F, 0x81, 0x3D, 0x96, 0x8A, 0x3E, 0x32, 0x74, 0x6B,
49 0xEC, 0x3F, 0xA8, 0xF2, 0x10, 0x7F, 0x3E, 0x05, 0xCE, 0x54,
50 0x1A, 0x7C, 0xBE, 0x68, 0x82, 0x32, 0xCD, 0x56, 0x27, 0x4A,
51 0x36, 0x92, 0x81, 0x1B, 0x95, 0x47, 0xC1, 0x81, 0x26, 0x2C,
52 0x48, 0x49, 0xA3, 0x46, 0xEB, 0xC0, 0x34, 0x03, 0xEC, 0x74,
53 0x61, 0xDB, 0xA4, 0x7C, 0xC8, 0x46, 0x86, 0x19, 0x03, 0xA0,
54 0x48, 0xF9, 0x13, 0x85, 0x10, 0xC6, 0x1B, 0xD9, 0xF4, 0x48,
55 0x39, 0x80, 0x47, 0x13, 0xAB, 0x84, 0x84, 0x00, 0xF8, 0x48,
56 0x65, 0x8B, 0x56, 0x4C, 0x08, 0x22, 0x77, 0x8C, 0xA3, 0x87,
57 0x81, 0x8F, 0xB7, 0x49, 0x24, 0x01, 0xCC, 0x0A, 0x74, 0xE3,
58 0x40, 0xA7, 0x1A, 0x42, 0x9D, 0x24, 0x72, 0x02, 0x45, 0x11,
59 0x46, 0x89, 0x78, 0xA0, 0x24, 0xDB, 0x16, 0xE1, 0x8F, 0x91,
60 0x99, 0x53, 0xB2, 0x64, 0x11, 0x70, 0xC3, 0x0B, 0x9A, 0x1B,
61 0x2C, 0xC0, 0xB0, 0x38, 0xD4, 0x45, 0xAB, 0x00, 0xA9, 0x66,
62 0x73, 0x99, 0xB1, 0x02, 0x07, 0xCE, 0xD9, 0x08, 0xBC, 0xE8,
63 0x2C, 0x5C, 0xB2, 0xC4, 0xEA, 0x91, 0xB7, 0x74, 0xF3, 0x36,
64 0x40, 0xA6, 0xB7, 0xAF, 0xDF, 0xBF, 0x80, 0x03, 0x0B, 0x1E,
65 0x4C, 0xB8, 0xB0, 0xE1, 0xC3, 0x12, 0x12, 0x00, 0x00, 0x3B };
66
67
68
69
70
71 static int GetIndent ( char *buf, int buflen, int indent, int comment )
72 {
73 /* char *ctemp;*/
74 int i;
75
76
77 for ( i = 0; i < buflen; i++ )
78 {
79 switch ( buf[i] )
80 {
81 case '/':
82 if ( ( i < buflen ) && ( buf[++i] == '*') ) comment++;
83 if ( ( i < buflen ) && ( buf[i+1] == '/') ) return indent;
84 break;
85
86 case '*':
87 if ( ( i < buflen ) && ( buf[++i] == '/') ) comment--;
88 break;
89
90 case '{':
91 if ( ! comment ) indent++;
92 break;
93
94 case '}':
95 if ( ! comment ) indent--;
96 break;
97 }
98 }
99
100 return indent;
101 }
102
103
104 static int TruncateLine ( char *inbuf, int inbuflen, int tablen, int fillcol, FILE *wfile )
105 {
106 int i, colnum = 0, bufpos;
107 char *buf = malloc(inbuflen+20*tablen+1);
108 if(buf == NULL) {
109 fprintf(stderr, "malloc() failed.\n");
110 exit(2);
111 }
112
113 bufpos = 0;
114 for ( i = 0; i < inbuflen; i++ )
115 {
116 buf[bufpos] = inbuf[i];
117 if ( buf[bufpos] == ' ' ) colnum = bufpos + 1;
118 else if ( buf[bufpos] == '\n' )
119 {
120 buf[bufpos+1] = '\0';
121 fputs ( buf, wfile );
122 colnum = 0;
123 bufpos = -1;
124 }
125 else if ( buf[bufpos] == '\t' )
126 {
127 int j;
128 for ( j = 0; j < tablen; j++ ) buf[bufpos+j] = ' ';
129 colnum += tablen;
130 bufpos += tablen-1;
131 }
132 if ( ( bufpos >= fillcol ) && colnum )
133 {
134 buf[colnum-1] = '\0';
135 fputs ( buf, wfile );
136 putc ( '\n', wfile );
137 bufpos -= colnum;
138 strncpy ( buf, buf + colnum, bufpos + 1 );
139 colnum = 0;
140 }
141 bufpos++;
142 }
143 free(buf);
144 return 0;
145 }
146
147
148 int WriteCode ( struct listentry *first, char *code_srcdir, char *code_dstdir, int tablen, int fillcol )
149 {
150 char *ctemp;
151 /* char dirname[256];*/
152 DIR *opdir;
153 struct listentry *tclist;
154 struct dirent *dp;
155
156 if ( code_srcdir[strlen(code_srcdir)-1] == '/' ) code_srcdir[strlen(code_srcdir)-1] = '\0';
157
158 opdir = opendir ( code_srcdir );
159 if ( !opdir )
160 {
161 perror ( code_srcdir );
162 return -1;
163 }
164
165 for ( dp = readdir ( opdir ); dp != NULL; dp = readdir ( opdir ) )
166 {
167 ctemp = strrchr ( dp->d_name, '.' );
168 if ( ctemp && ( strcmp ( ctemp, ".ttcn" ) == 0 ) )
169 {
170 char fullname[MAXLEN];
171 char inbuf[1024];
172 FILE *rfile, *wfile;
173
174 sprintf ( fullname, "%s/%s", code_srcdir, dp->d_name );
175 if ( ( rfile = fopen ( fullname, "rt") ) == NULL )
176 {
177 perror ( fullname );
178 return -1;
179 }
180
181 while ( fgets ( inbuf, sizeof ( inbuf ), rfile ) != NULL )
182 {
183 ctemp = strchr ( inbuf, 't' );
184 if ( ctemp && ( strncmp ( ctemp, "testcase", 8 ) == 0 ) )
185 {
186 tclist = first;
187 while ( tclist->next != NULL )
188 {
189 ctemp = strchr ( inbuf, tclist->tcname[0] );
190 if ( ctemp && ( strncmp ( ctemp, tclist->tcname, strlen ( tclist->tcname ) ) == 0 ) )
191 {
192 int indent = 0, comment = 0;
193 int started = 0, needed = 1;
194
195 sprintf ( fullname, "%s/%s.ttcn", code_dstdir, tclist->tcname );
196 if ( ( wfile = fopen ( fullname, "wt") ) == NULL )
197 {
198 perror ( fullname );
199 return -1;
200 }
201
202 indent = GetIndent ( inbuf, strlen ( inbuf ), indent, comment );
203 if ( indent ) started = 1;
204 TruncateLine ( inbuf, strlen ( inbuf ), tablen, fillcol, wfile );
205 while ( needed )
206 {
207 if ( fgets ( inbuf, sizeof ( inbuf ), rfile ) == NULL ) break;
208 indent = GetIndent ( inbuf, strlen ( inbuf ), indent, comment );
209 if ( ! started && indent ) started = 1;
210 if ( started && ! indent ) needed = 0;
211 TruncateLine ( inbuf, strlen ( inbuf ), tablen, fillcol, wfile );
212 }
213 fclose ( wfile );
214 }
215 tclist = tclist->next;
216 }
217 }
218 }
219
220 fclose ( rfile );
221 }
222 }
223
224 if ( closedir ( opdir ) != 0 )
225 {
226 perror ( code_srcdir );
227 return -1;
228 }
229
230 return 0;
231 }
232
233
234 int WriteLog ( struct listentry *first, char *log_srcdir, char *log_dstdir )
235 {
236 char cwd[MAXLEN], command[MAXLEN], log_absrcdir[MAXLEN];
237 char oldname[MAXLEN], newname[MAXLEN], tempdir[MAXLEN];
238 int used;
239 DIR *opdir;
240 struct listentry *tclist;
241 struct dirent *dp;
242
243 sprintf ( tempdir, "%s/temp", log_dstdir );
244 mkdir ( tempdir
245 #ifndef MINGW
246 , S_IRWXU
247 #endif
248 );
249
250 if ( getcwd ( cwd, sizeof ( cwd ) ) == NULL )
251 {
252 remove ( tempdir );
253 perror ( "getcwd" );
254 return -1;
255 }
256
257 if ( ( log_srcdir[0] == '.' ) && ( ( log_srcdir[1] == '/' ) || ( log_srcdir[1] == '\0' ) ) )
258 {
259 char *ctemp;
260 ctemp = &log_srcdir[1];
261 strcpy (log_absrcdir, cwd);
262 strcat (log_absrcdir, ctemp);
263 }
264 else strcpy ( log_absrcdir, log_srcdir );
265
266 if ( log_absrcdir[strlen(log_absrcdir)-1] == '/' ) log_absrcdir[strlen(log_absrcdir)-1] = '\0';
267
268 opdir = opendir ( log_absrcdir );
269 if ( !opdir )
270 {
271 remove ( tempdir );
272 perror ( log_absrcdir );
273 return -1;
274 }
275
276 if ( chdir ( tempdir ) == -1 )
277 {
278 remove ( tempdir );
279 perror ( tempdir );
280 return -1;
281 }
282
283 for ( dp = readdir ( opdir ); dp != NULL; dp = readdir ( opdir ) )
284 {
285 char *ctemp;
286
287 ctemp = strrchr ( dp->d_name, '.' );
288 if ( ctemp && ( strcmp ( ctemp, ".log" ) == 0 ) )
289 {
290 sprintf ( command, LOGFORMAT " %s/%s >/dev/null 2>&1", log_absrcdir, dp->d_name);
291 if ( system ( command ) == -1 )
292 {
293 remove ( tempdir );
294 perror ( command );
295 return -1;
296 }
297 }
298 }
299
300 closedir ( opdir );
301
302 if ( chdir ( cwd ) == -1 )
303 {
304 remove ( tempdir );
305 perror ( cwd );
306 return -1;
307 }
308
309 opdir = opendir ( tempdir );
310 if ( !opdir )
311 {
312 remove ( tempdir );
313 perror ( tempdir );
314 return -1;
315 }
316
317 for ( dp = readdir ( opdir ); dp != NULL; dp = readdir ( opdir ) )
318 {
319 used = 0;
320
321 if ( ( strcmp ( dp->d_name, ".." ) == 0 ) || ( strcmp ( dp->d_name, "." ) == 0 ) ) continue;
322
323 tclist = first;
324 while ( ( tclist->next != NULL ) && !used )
325 {
326 if ( strcmp ( dp->d_name, tclist->tcname ) == 0 )
327 {
328 used = 1;
329 sprintf ( oldname, "%s/temp/%s", log_dstdir, tclist->tcname );
330 sprintf ( newname, "%s/%s.ttcnlog", log_dstdir, tclist->tcname );
331 if ( rename ( oldname, newname ) == -1 )
332 {
333 remove ( tempdir );
334 perror ( "rename" );
335 return -1;
336 }
337 }
338 tclist = tclist->next;
339 }
340
341 if ( ! used )
342 {
343 sprintf ( oldname, "%s/temp/%s", log_dstdir, dp->d_name );
344 remove ( oldname );
345 }
346 }
347
348 if ( remove ( tempdir ) == -1 )
349 {
350 perror ( tempdir );
351 return -1;
352 }
353
354 if ( closedir ( opdir ) != 0 )
355 {
356 perror ( log_srcdir );
357 return -1;
358 }
359
360 return 0;
361 }
362
363
364 int WriteDump ( struct listentry *first, char *dump_srcdir, char *dump_dstdir, int tablen, int fillcol )
365 {
366 /* char *ctemp;
367 char dirname[256];*/
368 char fullname[MAXLEN];
369 DIR *opdir;
370 struct listentry *tclist;
371 struct dirent *dp;
372
373 if ( dump_srcdir[strlen(dump_srcdir)-1] == '/' ) dump_srcdir[strlen(dump_srcdir)-1] = '\0';
374
375 opdir = opendir ( dump_srcdir );
376 if ( !opdir )
377 {
378 perror ( dump_srcdir );
379 return -1;
380 }
381
382 for ( dp = readdir ( opdir ); dp != NULL; dp = readdir ( opdir ) )
383 {
384 if ( ( strcmp ( dp->d_name, ".." ) == 0 ) || ( strcmp ( dp->d_name, "." ) == 0 ) ) continue;
385
386 tclist = first;
387 while ( tclist->next != NULL )
388 {
389 sprintf ( fullname, "%s.dump", tclist->tcname );
390 if ( strcmp ( dp->d_name, fullname ) == 0 )
391 {
392 char inbuf[1024];
393 FILE *rfile, *wfile;
394
395 sprintf ( fullname, "%s/%s", dump_srcdir, dp->d_name );
396 if ( ( rfile = fopen ( fullname, "rt") ) == NULL )
397 {
398 perror ( fullname );
399 return -1;
400 }
401
402 sprintf ( fullname, "%s/%s.dump", dump_dstdir, tclist->tcname );
403 if ( ( wfile = fopen ( fullname, "wt") ) == NULL )
404 {
405 perror ( fullname );
406 return -1;
407 }
408
409 while ( fgets ( inbuf, sizeof ( inbuf ), rfile ) != NULL )
410 {
411 GetIndent ( inbuf, strlen ( inbuf ), 0, 0 );
412 TruncateLine ( inbuf, strlen ( inbuf ), tablen, fillcol, wfile );
413 }
414 fclose ( rfile );
415 fclose ( wfile );
416 }
417 tclist = tclist->next;
418 }
419 }
420
421 if ( closedir ( opdir ) != 0 )
422 {
423 perror ( dump_srcdir );
424 return -1;
425 }
426
427 return 0;
428 }
429
430
431 int Genhtml ( struct listentry *first, char *title, char *data_dstdir )
432 {
433 char *ctemp;
434 char dirname[MAXLEN], filename[MAXLEN], buf[1024];
435 time_t tval;
436 struct listentry *tclist;
437 FILE *rfile, *wfile;
438 /* int i;*/
439
440 sprintf ( buf, "%s.html", data_dstdir );
441 if ( ( wfile = fopen ( buf, "wt" ) ) == NULL )
442 {
443 perror ( buf );
444 return -1;
445 }
446
447 ctemp = strrchr ( data_dstdir, '/' );
448 strcpy ( dirname, ctemp + 1 );
449
450 fprintf(wfile, "<html>\n"
451 "<head>\n"
452 "<title>TTCN-3 Test report</title>\n"
453 "</head>\n"
454 "<body>\n"
455 " <IMG src=\"%s/logo.gif\">\n"
456 " <script type=\"text/javascript\">\n", dirname);
457
458 fputs ( "adatok = new Array (", wfile );
459
460 tclist = first;
461 while ( tclist->next != NULL )
462 {
463 sprintf ( buf, "\"%s\", ", tclist->tcname );
464 fputs ( buf, wfile );
465
466 sprintf ( filename, "%s/%s.short", data_dstdir, tclist->tcname );
467 sprintf ( buf, "\"./%s/%s.short\", ", dirname, tclist->tcname );
468 if ( access ( filename, R_OK ) == 0 ) fputs ( buf, wfile );
469 else fputs ( "\"\", ", wfile );
470
471 sprintf ( filename, "%s/%s.long", data_dstdir, tclist->tcname );
472 sprintf ( buf, "\"./%s/%s.long\", ", dirname, tclist->tcname );
473 if ( access ( filename, R_OK ) == 0 ) fputs ( buf, wfile );
474 else fputs ( "\"\", ", wfile );
475
476 sprintf ( filename, "%s/%s.ttcn", data_dstdir, tclist->tcname );
477 sprintf ( buf, "\"./%s/%s.ttcn\", ", dirname, tclist->tcname );
478 if ( access ( filename, R_OK ) == 0 ) fputs ( buf, wfile );
479 else fputs ( "\"\", ", wfile );
480
481 sprintf ( filename, "%s/%s.ttcnlog", data_dstdir, tclist->tcname );
482 sprintf ( buf, "\"./%s/%s.ttcnlog\", ", dirname, tclist->tcname );
483 if ( access ( filename, R_OK ) == 0 ) fputs ( buf, wfile );
484 else fputs ( "\"\", ", wfile );
485
486 sprintf ( filename, "%s/%s.dump", data_dstdir, tclist->tcname );
487 sprintf ( buf, "\"./%s/%s.dump\",\n", dirname, tclist->tcname );
488 if ( access ( filename, R_OK ) == 0 ) fputs ( buf, wfile );
489 else fputs ( "\"\",\n", wfile );
490
491 tclist = tclist->next;
492 }
493
494 fprintf ( wfile, "\"\" );\nmtitle=\"Test suite: %s\";\n", title );
495
496 fputs (" egyelem=6;\n"
497 " tcszam=(adatok.length-1) / egyelem;\n"
498 " kijelolt=new Array(1,1,1,1);\n"
499 "\n"
500 " function tcChange()\n"
501 " {\n"
502 " document.myForm.showOption.length=0;\n"
503 " index=document.myForm.testchoose.selectedIndex;\n"
504 " if (index!=-1)\n"
505 " {\n"
506 " if (adatok[index*egyelem+2]!=\"\")\n"
507 " {\n"
508 " elem = new Option(\"Detailed description\", adatok[index*egyelem+2], false, kijelolt[0]);\n"
509 " document.myForm.showOption.options[document.myForm.showOption.length]=elem;\n"
510 " }\n"
511 " if (adatok[index*egyelem+3]!=\"\")\n"
512 " {\n"
513 " elem = new Option(\"TTCN-3 code\", adatok[index*egyelem+3], false, kijelolt[1]);\n"
514 " document.myForm.showOption.options[document.myForm.showOption.length]=elem;\n"
515 " }\n"
516 " if (adatok[index*egyelem+4]!=\"\")\n"
517 " {\n"
518 " elem = new Option(\"TTCN-3 executor's log\", adatok[index*egyelem+4], false, kijelolt[2]);\n"
519 " document.myForm.showOption.options[document.myForm.showOption.length]=elem;\n"
520 " }\n"
521 " if (adatok[index*egyelem+5]!=\"\")\n"
522 " {\n"
523 " elem = new Option(\"Other type of log\", adatok[index*egyelem+5], false, kijelolt[3]);\n"
524 " document.myForm.showOption.options[document.myForm.showOption.length]=elem;\n"
525 " }\n"
526 " }\n"
527 " }\n"
528 "\n"
529 " function goNext()\n"
530 " {\n"
531 " if (document.myForm.testchoose.selectedIndex<document.myForm.testchoose.length-1)\n"
532 " {\n"
533 " itemsSelected();\n"
534 " document.myForm.testchoose.selectedIndex++;\n"
535 " tcChange();\n"
536 " }\n"
537 " }\n"
538 "\n"
539 " function goPrev()\n"
540 " {\n"
541 " if (document.myForm.testchoose.selectedIndex>0)\n"
542 " {\n"
543 " itemsSelected();\n"
544 " document.myForm.testchoose.selectedIndex--;\n"
545 " tcChange();\n"
546 " }\n"
547 " }\n"
548 "\n"
549 " function itemsSelected()\n"
550 " {\n"
551 " if (document.myForm.showOption.length)\n"
552 " {\n"
553 " for (b=0;b<4;b++)\n"
554 " for (i=0;i<document.myForm.showOption.length;i++)\n"
555 " if (document.myForm.showOption.options[i].value==adatok[index*egyelem+b+2])\n"
556 " {\n"
557 " if (!document.myForm.showOption.options[i].selected)\n"
558 " kijelolt[b]=0;\n"
559 " else\n"
560 " kijelolt[b]=1;\n"
561 " }\n"
562 " }\n"
563 " }\n"
564 "\n"
565 "\n"
566 " function windShow()\n"
567 " {\n"
568 " index=document.myForm.testchoose.selectedIndex;\n"
569 " selectnumb=0;\n"
570 " for (i=0; i<document.myForm.showOption.length; i++)\n"
571 " if (document.myForm.showOption.options[i].selected) selectnumb++;\n"
572 " if (selectnumb>0)\n"
573 " {\n"
574 " mywin=window.open(\"\",index,\"toolbar,width=180,resizable=yes,scrollbars=no\");\n"
575 " mywin.document.write(\"<html> <HEAD> <TITLE> Test Case: \"+document.myForm.testchoose.options[index].text+\"</TITLE> </HEAD> <frameset rows=\\\"\");\n"
576 " csillag=\"1\";\n"
577 " for (i=0; i<selectnumb; i++)\n"
578 " csillag=\"*,\"+csillag;\n"
579 " mywin.document.write(csillag+\"\\\">\");\n"
580 " for (i=0; i<document.myForm.showOption.length; i++)\n"
581 " if (document.myForm.showOption.options[i].selected)\n"
582 " mywin.document.write(\"<frame src=\\\"\"+document.myForm.showOption.options[i].value+\"\\\">\");\n"
583 " mywin.document.write(\"</frameset></html>\");\n"
584 " mywin.document.close();\n"
585 " }\n"
586 " }\n"
587 "\n"
588 " function summaryShow()\n"
589 " {\n"
590 " mywin=window.open(\"\",index,\"toolbar,resizable=yes,scrollbars=yes\");\n"
591 " mywin.document.writeln(\"<html> <HEAD> <TITLE> Summary </TITLE> </HEAD><body>\");\n"
592 " mywin.document.writeln(\"<br>\");\n"
593 " mywin.document.write(\"<P align=\\\"center\\\"><font size=\\\"10\\\">\");\n"
594 " mywin.document.write(mtitle);\n"
595 " mywin.document.writeln(\"</P>\");\n"
596 " mywin.document.write(\"<font size=\\\"5\\\">\");\n"
597 " mywin.document.writeln(\"\");\n"
598 "mywin.document.writeln(\"<hr>\");\n"
599 "mywin.document.writeln(\"<br>\");\n"
600 " mywin.document.write(\"<table border=\\\"2\\\" cellpading=\\\"5\\\" cellspacing=\\\"2\\\"><tr><th scope=\\\"col\\\">&nbsp Test Case &nbsp</th><th scope=\\\"col\\\">&nbsp Short Description &nbsp</th><th scope=\\\"col\\\">&nbsp Verdict &nbsp</th>\");\n", wfile);
601
602 tclist = first;
603 while ( tclist->next != NULL )
604 {
605 sprintf ( buf, "mywin.document.writeln(\"<tr><td>&nbsp %s &nbsp</td><td>", tclist->tcname );
606 fputs ( buf, wfile );
607
608 sprintf ( filename, "%s/%s.short", data_dstdir, tclist->tcname );
609
610 if ( ( rfile = fopen ( filename, "rt" ) ) == NULL ) fputs ( "No description found!", wfile );
611 else
612 {
613 int c;
614
615 while ( ( c = getc ( rfile ) ) != EOF )
616 {
617 if ( c == '\n' ) putc ( ' ', wfile );
618 else if ( c == '"' )
619 {
620 putc ( '\\', wfile );
621 putc ( c, wfile );
622 }
623 else putc ( c, wfile );
624 }
625 fclose ( rfile );
626 }
627 fputs ( "</td><td ALIGN=\\\"CENTER\\\">&nbsp ", wfile );
628
629 sprintf ( filename, "%s/%s.ttcnlog", data_dstdir, tclist->tcname );
630 if ( ( rfile = fopen ( filename, "rt" ) ) == NULL ) fputs ( "none", wfile );
631 else
632 {
633 while ( fgets ( buf, sizeof ( buf ), rfile ) != NULL )
634 {
635 ctemp = strchr ( buf, 'V' );
636 while ( ctemp != NULL )
637 {
638 if ( strncmp ( ctemp, "Verdict: ", 9 ) == 0 )
639 {
640 if ( ctemp[strlen(ctemp)-1] == '\n' ) ctemp[strlen(ctemp)-1] = '\0';
641 fputs ( ctemp + 9, wfile );
642 ctemp = NULL;
643 }
644 else ctemp = strchr ( ctemp+1, 'V' );
645 }
646 }
647 fclose ( rfile );
648 }
649
650 fputs ( " &nbsp</td></tr>\");\n", wfile );
651
652 tclist = tclist->next;
653 }
654
655 tval = time ( NULL );
656 ctemp = ctime ( &tval );
657 if ( ctemp[strlen(ctemp)-1] == '\n' ) ctemp[strlen(ctemp)-1] = '\0';
658
659 fprintf(wfile, " mywin.document.write(\"</tr></table>\");\n"
660 " mywin.document.writeln(\"<br>\");\n"
661 " mywin.document.write(\"<font size=\\\"3\\\">\");\n"
662 " mywin.document.write(\"Date : \")\n"
663 " mywin.document.writeln(\"%s\");\n"
664 " mywin.document.write(\"</body></html>\");\n"
665 " mywin.document.close();\n"
666 " }\n"
667 "\n"
668 " document.write(\"<P align=\\\"center\\\"><font size=\\\"10\\\">\");\n"
669 " document.write(mtitle);\n"
670 " document.write(\"<font size=\\\"5\\\">\");\n"
671 "\n"
672 " </script>\n"
673 " <form name=\"myForm\">\n"
674 " <hr><br><SELECT size=\"12\" NAME=\"testchoose\" onChange=\"itemsSelected();tcChange()\">\n"
675 " <OPTION> Blank testcase Name ....................\n"
676 " </SELECT>\n"
677 " <SELECT multiple size=\"12\" NAME=\"showOption\" >\n"
678 " <OPTION SELECTED> Blank options Name ........................................\n"
679 " </SELECT>\n"
680 " <p>\n"
681 " <input type=\"button\" name=\"PrevButt\" value=\"Previous\" onClick=\"goPrev()\">\n"
682 " <input type=\"button\" name=\"nextButt\" value=\"Next\" onClick=\"goNext()\">\n"
683 " <input type=\"button\" name=\"newWind\" value=\"Show\" onClick=\"windShow()\">\n"
684 " <input type=\"button\" name=\"summary\" value=\"Summary\" onClick=\"summaryShow()\">\n"
685 " </p>\n"
686 " </form>\n"
687 " <script type=\"text/javascript\">\n"
688 " for (i=0; i<tcszam; i++)\n"
689 " {\n"
690 " elem = new Option(adatok[i*egyelem], \"\", false, false);\n"
691 " document.myForm.testchoose.options[i]=elem;\n"
692 " }\n"
693 " document.myForm.testchoose.selectedIndex=0;\n"
694 " tcChange();\n"
695 " document.writeln(tcszam);"
696 " </script>\n"
697 " Testcases altogether <p></p>\n"
698 " <font size=-1>Date: %s <p></p>\n"
699 " </body>\n"
700 "</html>\n", ctemp, ctemp);
701
702 fclose ( wfile );
703
704 sprintf ( filename, "%s/logo.gif", data_dstdir );
705 if ( ( wfile = fopen ( filename, "wt" ) ) == NULL )
706 {
707 perror ( filename );
708 return -1;
709 }
710
711 fwrite ( &logo, sizeof ( logo ), 1, wfile );
712
713 fclose ( wfile );
714
715 return 0;
716 }
This page took 0.093733 seconds and 5 git commands to generate.