Subversion Repositories tendra.SVN

Rev

Rev 124 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 124 Rev 125
Line 2... Line 2...
2
 
2
 
3
###############################################################################
3
###############################################################################
4
$[    = 1 ;
4
$[    = 0 ;
5
$prog = $0;
5
$prog = $0;
6
($tmp = rindex ($prog, "/")) && ($prog = substr ($prog, $tmp + 1));
6
($tmp = rindex ($prog, "/")) && ($prog = substr ($prog, $tmp + 0 ));
7
###############################################################################
7
###############################################################################
8
 
8
 
9
sub fatal {
9
sub fatal {
10
    print STDERR ($prog, ": fatal: ", @_, "\n");
10
    print STDERR ($prog, ": fatal: ", @_, "\n");
11
    exit (1);
11
    exit (1);
Line 90... Line 90...
90
	    (($lexer'line = <INFILE>), ($lexer'line_num ++)));
90
	    (($lexer'line = <INFILE>), ($lexer'line_num ++)));
91
	(defined ($lexer'line)) ||
91
	(defined ($lexer'line)) ||
92
	    &ifatal ("unexpected end of file in program segment");
92
	    &ifatal ("unexpected end of file in program segment");
93
 
93
 
94
	if ($index = index ($lexer'line, "]\$")) {
94
	if ($index = index ($lexer'line, "]\$")) {
95
	    $tmp        = substr ($lexer'line, 1, $index - 1);
95
	    $tmp        = substr ($lexer'line, 0, $index - 1);
96
	    $lexer'line = substr ($lexer'line, $index + 2);
96
	    $lexer'line = substr ($lexer'line, $index + 1);
97
	    $tmp        =~ s/^[ \t]*//;
97
	    $tmp        =~ s/^[ \t]*//;
98
	    $program   .= $tmp;
98
	    $program   .= $tmp;
99
	} else {
99
	} else {
100
	    $program   .= $lexer'line;
100
	    $program   .= $lexer'line;
101
	    $lexer'line = "";
101
	    $lexer'line = "";
Line 109... Line 109...
109
    local ($token, $data);
109
    local ($token, $data);
110
 
110
 
111
    get_token: {
111
    get_token: {
112
	(($lexer'line eq "") &&
112
	(($lexer'line eq "") &&
113
	    (($lexer'line = <INFILE>), ($lexer'line_num ++)));
113
	    (($lexer'line = <INFILE>), ($lexer'line_num ++)));
-
 
114
 
-
 
115
    printf( "IIIIIIIIIIIIII %s - %d\n", $lexer'line,$lexer'line_num );
-
 
116
 
114
	(defined ($lexer'line)) || return ($TOK_EOF, 0);
117
	(defined ($lexer'line)) || return ($TOK_EOF, 0);
115
	$lexer'line =~ s/^[ \t\n]*(#.*$)?\n?//;
118
	$lexer'line =~ s/^[ \t\n]*(#.*$)?\n?//;
116
	($lexer'line eq "") && redo get_token;
119
	($lexer'line eq "") && redo get_token;
-
 
120
    printf( "XIIIIIIIIIIIIII %s - %d\n", $lexer'line,$lexer'line_num );
117
 
121
 
118
	if ($lexer'line =~ s/^{//) {
122
	if ($lexer'line =~ s/^{//) {
119
	    $token = $TOK_OPEN_BRACE;
123
	    $token = $TOK_OPEN_BRACE;
120
	    $data  = 0;
124
	    $data  = 0;
121
	} elsif ($lexer'line =~ s/^}//) {
125
	} elsif ($lexer'line =~ s/^}//) {
Line 202... Line 206...
202
 
206
 
203
sub basename {
207
sub basename {
204
    local ($name) = @_;
208
    local ($name) = @_;
205
    local ($tmp);
209
    local ($tmp);
206
 
210
 
207
    ($tmp = rindex ($name, "/")) && ($name = substr ($name, $tmp + 1));
211
    ($tmp = rindex ($name, "/")) && ($name = substr ($name, $tmp + 0));
208
    $name;
212
    $name;
209
}
213
}
210
 
214
 
211
sub find_tags {
215
sub find_tags {
212
    local ($mesg) = @_;
216
    local ($mesg) = @_;
Line 364... Line 368...
364
    local ($error, *tag_types, *tag_names, *tag_order) = @_;
368
    local ($error, *tag_types, *tag_names, *tag_order) = @_;
365
    local ($header, $def, $i, $tag, $type, $name, $indent, $tmp);
369
    local ($header, $def, $i, $tag, $type, $name, $indent, $tmp);
366
 
370
 
367
    if ($#tag_order) {
371
    if ($#tag_order) {
368
	$def = (" {\n");
372
	$def = (" {\n");
369
	for ($i = 1; $i <= $#tag_order; $i ++) {
373
	for ($i = 0; $i < $#tag_order; $i ++) {
370
	    $tag    = $tag_order [$i];
374
	    $tag    = $tag_order [$i];
371
	    $type   = $tag_types{$tag};
375
	    $type   = $tag_types{$tag};
372
	    $name   = $tag_names{$tag};
376
	    $name   = $tag_names{$tag};
373
	    $indent = &indent_to ("    " . $type, 30);
377
	    $indent = &indent_to ("    " . $type, 30);
374
	    $def   .= ("    " . $type . $indent . $name . ";\n");
378
	    $def   .= ("    " . $type . $indent . $name . ";\n");
Line 390... Line 394...
390
    local ($header, $def, $i, $tag, $code, $index, $name, $struct);
394
    local ($header, $def, $i, $tag, $code, $index, $name, $struct);
391
 
395
 
392
    if (defined ($struct = $error_struct_name{$error})) {
396
    if (defined ($struct = $error_struct_name{$error})) {
393
	$def    = ("{\n    " . $struct . " *closure = (" . $struct .
397
	$def    = ("{\n    " . $struct . " *closure = (" . $struct .
394
		   " *)gclosure;\n\n");
398
		   " *)gclosure;\n\n");
395
	for ($i = 1; $i <= $#tag_order; $i ++) {
399
	for ($i = 0; $i < $#tag_order; $i ++) {
396
	    $tag   = $tag_order [$i];
400
	    $tag   = $tag_order [$i];
397
	    $name  = $tag_names{$tag};
401
	    $name  = $tag_names{$tag};
398
	    $code  = $tag_code{$tag};
402
	    $code  = $tag_code{$tag};
399
	    $index = $error_tags{$tag};
403
	    $index = $error_tags{$tag};
400
	    if ($i == 1) {
404
	    if ($i == 1) {
Line 427... Line 431...
427
    local ($dec, $i, $tag, $type, $sep, $args, $param);
431
    local ($dec, $i, $tag, $type, $sep, $args, $param);
428
 
432
 
429
    $sep  = undef;
433
    $sep  = undef;
430
    $dec  = ("extern void E_" . $munged_name . "(");
434
    $dec  = ("extern void E_" . $munged_name . "(");
431
    $args = 0;
435
    $args = 0;
432
    for ($i = 1; $i <= $#param_order; $i ++) {
436
    for ($i = 0; $i < $#param_order; $i ++) {
433
	$param = $param_order [$i];
437
	$param = $param_order [$i];
434
	$type  = $param_types{$param};
438
	$type  = $param_types{$param};
435
	if (defined ($sep)) {
439
	if (defined ($sep)) {
436
	    $dec .= $sep;
440
	    $dec .= $sep;
437
	}
441
	}
438
	$dec .= $type;
442
	$dec .= $type;
439
	$sep  = ", ";
443
	$sep  = ", ";
440
	$args ++;
444
	$args ++;
441
    }
445
    }
442
    for ($i = 1; $i <= $#tag_order; $i ++) {
446
    for ($i = 0; $i < $#tag_order; $i ++) {
443
	$tag  = $tag_order [$i];
447
	$tag  = $tag_order [$i];
444
	$type = $tag_types{$tag};
448
	$type = $tag_types{$tag};
445
	if (!defined ($tag_init{$tag})) {
449
	if (!defined ($tag_init{$tag})) {
446
	    if (defined ($sep)) {
450
	    if (defined ($sep)) {
447
		$dec .= $sep;
451
		$dec .= $sep;
Line 467... Line 471...
467
    $def     = ("void\nE_" . $munged_name);
471
    $def     = ("void\nE_" . $munged_name);
468
    $tmp_def = "";
472
    $tmp_def = "";
469
    $col     = (length ($munged_name) + 2);
473
    $col     = (length ($munged_name) + 2);
470
    $args    = 0;
474
    $args    = 0;
471
    $sep     = undef;
475
    $sep     = undef;
472
    for ($i = 1; $i <= $#param_order; $i ++) {
476
    for ($i = 0; $i < $#param_order; $i ++) {
473
	$param = $param_order [$i];
477
	$param = $param_order [$i];
474
	if (defined ($sep)) {
478
	if (defined ($sep)) {
475
	    $tmp_def .= $sep;
479
	    $tmp_def .= $sep;
476
	}
480
	}
477
	$args ++;
481
	$args ++;
478
    }
482
    }
479
    for ($i = 1; $i <= $#tag_order; $i ++) {
483
    for ($i = 0; $i < $#tag_order; $i ++) {
480
	$tag  = $tag_order [$i];
484
	$tag  = $tag_order [$i];
481
	$name = $tag_names{$tag};
485
	$name = $tag_names{$tag};
482
	if (!defined ($tag_init{$tag})) {
486
	if (!defined ($tag_init{$tag})) {
483
	    if (defined ($sep)) {
487
	    if (defined ($sep)) {
484
		$tmp_def .= $sep;
488
		$tmp_def .= $sep;
Line 492... Line 496...
492
    if ($args == 0) {
496
    if ($args == 0) {
493
	$def .= "(void)\n";
497
	$def .= "(void)\n";
494
    } else {
498
    } else {
495
	$def .= $tmp_def;
499
	$def .= $tmp_def;
496
	$sep  = undef;
500
	$sep  = undef;
497
	for ($i = 1; $i <= $#param_order; $i ++) {
501
	for ($i = 0; $i < $#param_order; $i ++) {
498
	    $param = $param_order [$i];
502
	    $param = $param_order [$i];
499
	    $type  = $param_types{$param};
503
	    $type  = $param_types{$param};
500
	    if (defined ($sep)) {
504
	    if (defined ($sep)) {
501
		$def .= $sep;
505
		$def .= $sep;
502
	    }
506
	    }
503
	    $def .= ($type . " " . $param);
507
	    $def .= ($type . " " . $param);
504
	    $sep  = (",\n" . &indent_to ("", $col));
508
	    $sep  = (",\n" . &indent_to ("", $col));
505
	}
509
	}
506
	for ($i = 1; $i <= $#tag_order; $i ++) {
510
	for ($i = 0; $i < $#tag_order; $i ++) {
507
	    $tag  = $tag_order [$i];
511
	    $tag  = $tag_order [$i];
508
	    $name = $tag_names{$tag};
512
	    $name = $tag_names{$tag};
509
	    $type = $tag_types{$tag};
513
	    $type = $tag_types{$tag};
510
	    if (!defined ($tag_init{$tag})) {
514
	    if (!defined ($tag_init{$tag})) {
511
		if (defined ($sep)) {
515
		if (defined ($sep)) {
Line 524... Line 528...
524
	$def .= ")\n";
528
	$def .= ")\n";
525
    }
529
    }
526
    $def .= "{\n";
530
    $def .= "{\n";
527
    if (defined ($struct = $error_struct_name{$error})) {
531
    if (defined ($struct = $error_struct_name{$error})) {
528
	$def .= ("    " . $struct . " closure;\n\n");
532
	$def .= ("    " . $struct . " closure;\n\n");
529
	for ($i = 1; $i <= $#tag_order; $i ++) {
533
	for ($i = 0; $i < $#tag_order; $i ++) {
530
	    $tag  = $tag_order [$i];
534
	    $tag  = $tag_order [$i];
531
	    $name = $tag_names{$tag};
535
	    $name = $tag_names{$tag};
532
	    if (defined ($init = $tag_init{$tag})) {
536
	    if (defined ($init = $tag_init{$tag})) {
533
		$def .= $init;
537
		$def .= $init;
534
	    } else {
538
	    } else {
Line 637... Line 641...
637
    print OUTFILE ("#include \"error.h\"\n");
641
    print OUTFILE ("#include \"error.h\"\n");
638
    print OUTFILE ("#include \"ostream.h\"\n\n");
642
    print OUTFILE ("#include \"ostream.h\"\n\n");
639
    print OUTFILE ($error_c_header, "\n");
643
    print OUTFILE ($error_c_header, "\n");
640
 
644
 
641
    print OUTFILE ("static ETagDataT ET[] = {\n");
645
    print OUTFILE ("static ETagDataT ET[] = {\n");
642
    for ($i = 1; $i <= $#error_tag_order; $i ++) {
646
    for ($i = 0; $i < $#error_tag_order; $i ++) {
643
	$tag = $error_tag_order [$i];
647
	$tag = $error_tag_order [$i];
644
	print OUTFILE ("    UB \"", $tag, "\" UE,\n");
648
	print OUTFILE ("    UB \"", $tag, "\" UE,\n");
645
    }
649
    }
646
    print OUTFILE ("    ERROR_END_TAG_LIST\n");
650
    print OUTFILE ("    ERROR_END_TAG_LIST\n");
647
    print OUTFILE ("};\n\n");
651
    print OUTFILE ("};\n\n");
648
 
652
 
649
    print OUTFILE ("static ErrorDataT EE[] = {\n");
653
    print OUTFILE ("static ErrorDataT EE[] = {\n");
650
    for ($i = 1; $i <= $#error_order; $i ++) {
654
    for ($i = 0; $i < $#error_order; $i ++) {
651
	$error = $error_order [$i];
655
	$error = $error_order [$i];
652
	print OUTFILE ("    UB {\n\t\"", $error, "\",\n\t",
656
	print OUTFILE ("    UB {\n\t\"", $error, "\",\n\t",
653
		       $error_severities{$error}, ",\n\t\"",
657
		       $error_severities{$error}, ",\n\t\"",
654
		       $error_messages{$error}, "\",\n\t",
658
		       $error_messages{$error}, "\",\n\t",
655
		       $error_client_data{$error}, "\n    } UE,\n");
659
		       $error_client_data{$error}, "\n    } UE,\n");
656
    }
660
    }
657
    print OUTFILE ("    ERROR_END_ERROR_LIST\n");
661
    print OUTFILE ("    ERROR_END_ERROR_LIST\n");
658
    print OUTFILE ("};\n\n");
662
    print OUTFILE ("};\n\n");
659
 
663
 
660
    for ($i = 1; $i <= $#error_structures; $i ++) {
664
    for ($i = 0; $i < $#error_structures; $i ++) {
661
	print OUTFILE ($error_structures [$i]);
665
	print OUTFILE ($error_structures [$i]);
662
    }
666
    }
663
    print OUTFILE ("\n");
667
    print OUTFILE ("\n");
664
 
668
 
665
    for ($i = 1; $i <= $#error_tag_procs; $i ++) {
669
    for ($i = 0; $i < $#error_tag_procs; $i ++) {
666
	print OUTFILE ($error_tag_procs [$i]);
670
	print OUTFILE ($error_tag_procs [$i]);
667
    }
671
    }
668
    print OUTFILE ("\n");
672
    print OUTFILE ("\n");
669
 
673
 
670
    for ($i = 1; $i <= $#error_order; $i ++) {
674
    for ($i = 0; $i < $#error_order; $i ++) {
671
	$error = $error_order [$i];
675
	$error = $error_order [$i];
672
	print OUTFILE ($error_proc_defs{$error});
676
	print OUTFILE ($error_proc_defs{$error});
673
    }
677
    }
674
    $name = &munge_name (&basename ($outfile));
678
    $name = &munge_name (&basename ($outfile));
675
    print OUTFILE ("\nvoid\n", $name, "_init_errors(void)\n",
679
    print OUTFILE ("\nvoid\n", $name, "_init_errors(void)\n",
Line 683... Line 687...
683
    print OUTFILE ("/* Automatically generated by '", $prog, "' */\n\n");
687
    print OUTFILE ("/* Automatically generated by '", $prog, "' */\n\n");
684
    print OUTFILE ("#include \"os-interface.h\"\n\n");
688
    print OUTFILE ("#include \"os-interface.h\"\n\n");
685
    print OUTFILE ($error_header, "\n");
689
    print OUTFILE ($error_header, "\n");
686
 
690
 
687
    print OUTFILE ("/* Error function declarations */\n\n");
691
    print OUTFILE ("/* Error function declarations */\n\n");
688
    for ($i = 1; $i <= $#error_order; $i ++) {
692
    for ($i = 0; $i < $#error_order; $i ++) {
689
	$error = $error_order [$i];
693
	$error = $error_order [$i];
690
	print OUTFILE ($error_proc_decs{$error});
694
	print OUTFILE ($error_proc_decs{$error});
691
    }
695
    }
692
    print OUTFILE ("\nextern void ", &munge_name (&basename ($outfile)),
696
    print OUTFILE ("\nextern void ", &munge_name (&basename ($outfile)),
693
		   "_init_errors(void);\n");
697
		   "_init_errors(void);\n");