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