|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T f
Length: 20347 (0x4f7b) Types: TextFile Names: »fmtdump.c«
└─⟦060c9c824⟧ Bits:30007080 DKUUG TeX 2/12/89 └─⟦this⟧ »./tex82/fmtdump/fmtdump.c«
/* * Fmtdump: read a .fmt file and produce C corresponding initialization * statements. * * Based on the idea of fmt2init, described in TUGboat, for TurboTeX. * * Usage: fmtdump [format_file [init_file.c]] * * Tim Morgan 4/20/88 */ #define EXTERN #include "texd.h" extern char *sprintf(); char my_buffer[100], tbuf[100]; int blen = 0, buflimit; #define SMALL_LIMIT 40 #define BIG_LIMIT 75 do_bool(n,v) char *n; int v; { if (v) (void) printf("boolean %s=true;\n", n); } do_integer(n,v) char *n; integer v; { if (v) (void) printf("integer %s= %ldL;\n", n, v); } void do_halfword(n, v) char *n; halfword v; { if (v) (void) printf("halfword %s=%u;\n", n, v); } void do_schar(n, v) char *n; schar v; { if (v) (void) printf("schar %s= %d;\n", n, v); } void do_short(n, v) char *n; short v; { if (v) (void) printf("short %s= %d;\n", n, v); } void do_quarterword(n, v) char *n; quarterword v; { if (v) (void) printf("quarterword %s=%u;\n", n, v); } boolean loadfmtfile () { /* 6666 10 */ register boolean Result; loadfmtfile_regmem integer j, k ; halfword p, q ; integer x ; getfmtint ( x ) ; if ( x != 67218746L ) goto lab6666 ; getfmtint ( x ) ; if ( x != 0 ) goto lab6666 ; getfmtint ( x ) ; if ( x != memtop ) goto lab6666 ; getfmtint ( x ) ; if ( x != 5976 ) goto lab6666 ; getfmtint ( x ) ; if ( x != 2551 ) goto lab6666 ; getfmtint ( x ) ; if ( x != 307 ) goto lab6666 ; { getfmtint ( x ) ; if ( x < 0 ) goto lab6666 ; if ( x > poolsize ) { wakeupterminal () ; (void) fprintf( stdout , "%s%s\n", "---! Must increase the " , "string pool size" ) ; goto lab6666 ; } else poolptr = x ; } { getfmtint ( x ) ; if ( x < 0 ) goto lab6666 ; if ( x > maxstrings ) { wakeupterminal () ; (void) fprintf( stdout , "%s%s\n", "---! Must increase the " , "max strings" ) ; goto lab6666 ; } else strptr = x ; } undumpthings ( strstart [ 0 ] , strptr + 1 ) ; undumpthings ( strpool [ 0 ] , poolptr ) ; { getfmtint ( x ) ; if ( ( x < 1019 ) || ( x > memtop - 14 ) ) goto lab6666 ; else lomemmax = x ; } { getfmtint ( x ) ; if ( ( x < 20 ) || ( x > lomemmax ) ) goto lab6666 ; else rover = x ; } p = 0 ; q = rover ; x = 0 ; do { undumpthings ( mem [ p ] , q + 2 - p ) ; p = q + mem [ q ] .hh .v.LH ; if ( ( p > lomemmax ) || ( ( q >= mem [ q + 1 ] .hh .v.RH ) && ( mem [ q + 1 ] .hh .v.RH != rover ) ) ) goto lab6666 ; q = mem [ q + 1 ] .hh .v.RH ; } while ( ! ( q == rover ) ) ; undumpthings ( mem [ p ] , lomemmax + 1 - p ) ; if ( memmin < -2 ) { p = mem [ rover + 1 ] .hh .v.LH ; q = memmin + 1 ; mem [ memmin ] .hh .v.RH = 0 ; mem [ memmin ] .hh .v.LH = 0 ; mem [ p + 1 ] .hh .v.RH = q ; mem [ rover + 1 ] .hh .v.LH = q ; mem [ q + 1 ] .hh .v.RH = rover ; mem [ q + 1 ] .hh .v.LH = p ; mem [ q ] .hh .v.RH = 65535L ; mem [ q ] .hh .v.LH = -0 - q ; } { getfmtint ( x ) ; if ( ( x < lomemmax + 1 ) || ( x > memtop - 13 ) ) goto lab6666 ; else himemmin = x ; } { getfmtint ( x ) ; if ( ( x < 0 ) || ( x > memtop ) ) goto lab6666 ; else avail = x ; } memend = memtop ; undumpthings ( mem [ himemmin ] , memend + 1 - himemmin ) ; getfmtint ( varused ) ; getfmtint ( dynused ) ; k = 1 ; do { getfmtint ( x ) ; if ( ( x < 1 ) || ( k + x > 5977 ) ) goto lab6666 ; undumpthings ( eqtb [ k ] , x ) ; k = k + x ; getfmtint ( x ) ; if ( ( x < 0 ) || ( k + x > 5977 ) ) goto lab6666 ; {register integer for_end; j = k ; for_end = k + x - 1 ; if ( j <= for_end) do eqtb [ j ] = eqtb [ k - 1 ] ; while ( j++ < for_end ) ; } k = k + x ; } while ( ! ( k > 5976 ) ) ; { getfmtint ( x ) ; if ( ( x < 258 ) || ( x > 3258 ) ) goto lab6666 ; else parloc = x ; } partoken = 4096 + parloc ; { getfmtint ( x ) ; if ( ( x < 258 ) || ( x > 3258 ) ) goto lab6666 ; else writeloc = x ; } { getfmtint ( x ) ; if ( ( x < 258 ) || ( x > 3258 ) ) goto lab6666 ; else hashused = x ; } p = 257 ; do { { getfmtint ( x ) ; if ( ( x < p + 1 ) || ( x > hashused ) ) goto lab6666 ; else p = x ; } getfmthh ( hash [ p ] ) ; } while ( ! ( p == hashused ) ) ; undumpthings ( hash [ hashused + 1 ] , 3524 - hashused ) ; getfmtint ( cscount ) ; { getfmtint ( x ) ; if ( x < 7 ) goto lab6666 ; if ( x > fontmemsize ) { wakeupterminal () ; (void) fprintf( stdout , "%s%s\n", "---! Must increase the " , "font mem size" ) ; goto lab6666 ; } else fmemptr = x ; } { undumpthings ( fontinfo [ 0 ] , fmemptr ) ; { getfmtint ( x ) ; if ( x < 0 ) goto lab6666 ; if ( x > fontmax ) { wakeupterminal () ; (void) fprintf( stdout , "%s%s\n", "---! Must increase the " , "font max" ) ; goto lab6666 ; } else fontptr = x ; } undumpthings ( fontcheck [ 0 ] , fontptr + 1 ) ; undumpthings ( fontsize [ 0 ] , fontptr + 1 ) ; undumpthings ( fontdsize [ 0 ] , fontptr + 1 ) ; undumpthings ( fontparams [ 0 ] , fontptr + 1 ) ; undumpthings ( hyphenchar [ 0 ] , fontptr + 1 ) ; undumpthings ( skewchar [ 0 ] , fontptr + 1 ) ; undumpthings ( fontname [ 0 ] , fontptr + 1 ) ; undumpthings ( fontarea [ 0 ] , fontptr + 1 ) ; undumpthings ( fontbc [ 0 ] , fontptr + 1 ) ; undumpthings ( fontec [ 0 ] , fontptr + 1 ) ; undumpthings ( charbase [ 0 ] , fontptr + 1 ) ; undumpthings ( widthbase [ 0 ] , fontptr + 1 ) ; undumpthings ( heightbase [ 0 ] , fontptr + 1 ) ; undumpthings ( depthbase [ 0 ] , fontptr + 1 ) ; undumpthings ( italicbase [ 0 ] , fontptr + 1 ) ; undumpthings ( ligkernbase [ 0 ] , fontptr + 1 ) ; undumpthings ( kernbase [ 0 ] , fontptr + 1 ) ; undumpthings ( extenbase [ 0 ] , fontptr + 1 ) ; undumpthings ( parambase [ 0 ] , fontptr + 1 ) ; undumpthings ( fontglue [ 0 ] , fontptr + 1 ) ; } { getfmtint ( x ) ; if ( ( x < 0 ) || ( x > 307 ) ) goto lab6666 ; else hyphcount = x ; } {register integer for_end; k = 1 ; for_end = hyphcount ; if ( k <= for_end) do { { getfmtint ( x ) ; if ( ( x < 0 ) || ( x > 307 ) ) goto lab6666 ; else j = x ; } { getfmtint ( x ) ; if ( ( x < 0 ) || ( x > strptr ) ) goto lab6666 ; else hyphword [ j ] = x ; } { getfmtint ( x ) ; if ( ( x < 0 ) || ( x > 65535L ) ) goto lab6666 ; else hyphlist [ j ] = x ; } } while ( k++ < for_end ) ; } { getfmtint ( x ) ; if ( x < 0 ) goto lab6666 ; if ( x > triesize ) { wakeupterminal () ; (void) fprintf( stdout , "%s%s\n", "---! Must increase the " , "trie size" ) ; goto lab6666 ; } else triemax = x ; } undumpthings ( trie [ 0 ] , triemax + 1 ) ; { getfmtint ( x ) ; if ( ( x < 0 ) || ( x > 255 ) ) goto lab6666 ; else trieopptr = x ; } undumpthings ( hyfdistance [ 1 ] , trieopptr - 0 ) ; undumpthings ( hyfnum [ 1 ] , trieopptr - 0 ) ; undumpthings ( hyfnext [ 1 ] , trieopptr - 0 ) ; { getfmtint ( x ) ; if ( ( x < 0 ) || ( x > 3 ) ) goto lab6666 ; else interaction = x ; } { getfmtint ( x ) ; if ( ( x < 0 ) || ( x > strptr ) ) goto lab6666 ; else formatident = x ; } getfmtint ( x ) ; if ( ( x != 69069L ) || eof ( fmtfile ) ) goto lab6666 ; Result = true ; return(Result) ; lab6666: wakeupterminal () ; (void) fprintf( stdout , "%s\n", "(Fatal format file error; I'm stymied)" ) ; Result = false ; return(Result) ; } void add_buf() { register int len; len = strlen(tbuf); if (len + blen > buflimit) { if (buflimit == BIG_LIMIT) fputs(" ", stdout); /* indent */ puts(my_buffer); blen = 0; buflimit = BIG_LIMIT; } (void) strcpy(&my_buffer[blen], tbuf); blen += len; } void flush_buf() { if (blen > 0) { puts(my_buffer); blen = 0; } } void do_integer_array(n, v, s, decsize) char *n; integer v[]; long s, decsize; { register long i; for (--s; s >= 0 && v[s] == 0; --s); if (s < 0) return; (void) printf("integer %s[%ld]={", n, decsize); buflimit = SMALL_LIMIT; for (i=0; i<=s; ) { (void) sprintf(tbuf, "%dL,", v[i++]); add_buf(); } flush_buf(); puts("};"); } void do_halfword_array(n, v, s, decsize) char *n; halfword v[]; long s, decsize; { register long i; for (--s; s >= 0 && v[s] == 0; --s); if (s < 0) return; (void) printf("halfword %s[%ldL]={", n, decsize); buflimit = 40; for (i=0; i<=s; ) { (void) sprintf(tbuf, "%u,", v[i++]); add_buf(); } flush_buf(); puts("};"); } do_uchar_array(n, v, s, decsize) char *n; unsigned char v[]; long s, decsize; { register long i; for (--s; s >= 0 && v[s] == 0; --s); if (s < 0) return; (void) printf("quarterword %s[%d]={", n, decsize); buflimit = 40; for (i=0; i<=s; ) { (void) sprintf(tbuf, "%u,", v[i++]); add_buf(); } flush_buf(); puts("};"); } do_char_array(n, v, s, decsize) char *n; char v[]; int s, decsize; { register int i; for (--s; s >= 0 && v[s] == 0; --s); if (s < 0) return; (void) printf("char %s[%d]={", n, decsize); buflimit = 40; for (i=0; i<=s; ) { (void) sprintf(tbuf, "%d,", v[i++]); add_buf(); } flush_buf(); puts("};"); } #define do_ASCIIcode_array(n,v,s,d) do_uchar_array(n, v, (long) s, (long) d) #define do_eightbits_array(n,v,s,d) do_uchar_array(n, v, (long) s, (long) d) #define do_quarterword_array(n,v,s,d) do_uchar_array(n, v, (long) s, (long) d) do_schar_array(n, v, s, decsize) char *n; schar v[]; long s, decsize; { register long i; for (--s; s >= 0 && v[s] == 0; --s); if (s < 0) return; (void) printf("schar %s[%ldL]={", n, decsize); buflimit = 40; for (i=0; i<=s; ) { (void) sprintf(tbuf, "%d,", v[i++]); add_buf(); } flush_buf(); puts("};"); } /* This is a kludge */ do_memword_array(n, v, s, decsize) char *n; memoryword v[]; long s, decsize; { register long i; for (--s; s >= 0 && v[s].cint == 0; --s); if (s < 0) return; (void) printf("long %s[%ldL]={", n, decsize); buflimit = 40; for (i=0; i<=s;) { (void) sprintf(tbuf, "%ldL,", v[i++].cint); add_buf(); } flush_buf(); puts("};"); } do_four_array(n, v, s, decsize) char *n; fourquarters v[]; long s, decsize; { register long i; for (--s; s >= 0 && v[s].b0 == 0 && v[s].b1 == 0 && v[s].b2 == 0 && v[s].b3 == 0; --s); if (s < 0) return; (void) printf("fourquarters %s[%ldL]={", n, decsize); buflimit = 40; for (i=0; i<=s; i++) { (void) sprintf(tbuf,"{{%u,%u},%u,%u}", v[i].b0, v[i].b1, v[i].b2, v[i].b3); if (i < s) (void) strcat(tbuf, ","); add_buf(); } flush_buf(); puts("};"); } /* This is a kludge */ do_twohalves_array(n, v, s, decsize) char *n; twohalves v[]; long s, decsize; { register long i; for (--s; v[s].v.RH || v[s].v.LH; --s); if (s < 0) return; (void) printf("unsigned long %s[%ldL]={", n, decsize); buflimit = 40; for (i=0; i<=s; i++) { (void) sprintf(tbuf, "%lu,", (v[i].v.RH << 16) | v[i].v.LH); add_buf(); } flush_buf(); puts("};"); } dump_fmt() { puts("typedef unsigned short halfword;"); puts("typedef unsigned char quarterword;"); puts("#include \"tex.h\""); puts("#include \"memory.h\"\n"); do_integer("poolptr", poolptr); do_integer("strptr", strptr); do_halfword("lomemmax", lomemmax); do_halfword("himemmin", himemmin); do_integer("varused", varused); do_integer("dynused", dynused); do_halfword("avail", avail); do_halfword("memend", memend); do_halfword("parloc", parloc); do_halfword("partoken", partoken); do_halfword("writeloc", writeloc); do_halfword("hashused", hashused); do_integer("cscount", cscount); do_integer("fmemptr", fmemptr); do_quarterword("trieopptr", trieopptr); do_schar("interaction", interaction); do_integer("formatident", formatident); do_ASCIIcode_array("strpool", strpool, poolptr, sizeof(strpool)/sizeof(strpool[0])); do_integer_array("strstart", strstart, (long) (strptr+1), (long) (maxstrings+1)); do_twohalves_array("zzzae", zzzae, (long) (sizeof(zzzae)/sizeof(zzzae[0])), (long) (sizeof(zzzae)/sizeof(zzzae[0])));/* hash */ do_memword_array("zzzaa", zzzaa, (long) (sizeof(zzzaa)/sizeof(zzzaa[0])), (long) (sizeof(zzzaa)/sizeof(zzzaa[0])));/* mem */ do_memword_array("zeqtb", zeqtb, (long) (sizeof(zeqtb)/sizeof(zeqtb[0])), (long) (sizeof(zeqtb)/sizeof(zeqtb[0])));/* eqtb */ do_memword_array("fontinfo", fontinfo, fmemptr, (long) (fontmemsize+1)); do_four_array("fontcheck", fontcheck, fontptr+1, (long) (fontmax+1)); do_integer_array("fontsize", fontsize, fontptr+1, (long) (fontmax+1)); do_integer_array("fontdsize", fontdsize, fontptr+1, (long) (fontmax+1)); do_halfword_array("fontparams", fontparams, fontptr+1, (long) (fontmax+1)); do_integer_array("hyphenchar", hyphenchar, fontptr+1, (long) (fontmax+1)); do_integer_array("skewchar", skewchar, fontptr+1, (long) (fontmax+1)); do_integer_array("fontname", fontname, fontptr+1, (long) (fontmax+1)); do_integer_array("fontarea", fontarea, fontptr+1, (long) (fontmax+1)); do_eightbits_array("fontec", fontec, fontptr+1, (long) (fontmax+1)); do_eightbits_array("fontbc", fontbc, fontptr+1, (long) (fontmax+1)); do_integer_array("charbase", charbase, fontptr+1, (long) (fontmax+1)); do_integer_array("widthbase", widthbase, fontptr+1, (long) (fontmax+1)); do_integer_array("heightbase", heightbase, fontptr+1, (long) (fontmax+1)); do_integer_array("depthbase", depthbase, fontptr+1,(long) (fontmax+1)); do_integer_array("italicbase", italicbase, fontptr+1, (long) (fontmax+1)); do_integer_array("ligkernbase", ligkernbase, fontptr+1, (long) (fontmax+1)); do_integer_array("kernbase", kernbase, fontptr+1, (long) (fontmax+1)); do_integer_array("extenbase", extenbase, fontptr+1, (long) (fontmax+1)); do_integer_array("parambase", parambase, fontptr+1, (long) (fontmax+1)); do_halfword_array("fontglue", fontglue, fontptr+1, (long) (fontmax+1)); do_short("hyphcount", hyphcount); do_integer_array("hyphword", hyphword, (long) (sizeof(hyphword)/sizeof(hyphword[0])), (long) (sizeof(hyphword)/sizeof(hyphword[0]))); do_halfword_array("hyphlist", hyphlist, (long) (sizeof(hyphlist)/sizeof(hyphlist[0])), (long) (sizeof(hyphlist)/sizeof(hyphlist[0]))); do_integer("triemax", triemax); do_twohalves_array("trie", trie, (long) (sizeof(trie)/sizeof(trie[0])), (long) (sizeof(trie)/sizeof(trie[0]))); do_schar_array("hyfdistance", hyfdistance, (long) (sizeof(hyfdistance)/sizeof(hyfdistance[0])), (long) (sizeof(hyfdistance)/sizeof(hyfdistance[0]))); do_schar_array("hyfnum", hyfnum, (long) (sizeof(hyfnum)/sizeof(hyfnum[0])), (long) (sizeof(hyfnum)/sizeof(hyfnum[0]))); do_quarterword_array("hyfnext", hyfnext, (long) (sizeof(hyfnext)/sizeof(hyfnext[0])), (long) (sizeof(hyfnext)/sizeof(hyfnext[0]))); do_integer("readyalready", 314159L); } wakeupterminal() { } /* * This routine initializes things to the same values as the initialization() * routine in TeX, then writes the values to stdout. If TeX's initialization * routine is changed, then those changes must be entered here as well. */ void dump_initializations() { register int i; do_bool("deletionsallowed", true); do_bool("OKtointerrupt", true); do_halfword("pagetail", (halfword) (memtop-2)); do_halfword("lastglue", (halfword) 65535); printf("char *TEXformatdefault=\" plain.fmt\";\n"); do_integer("dvilimit", (integer) dvibufsize); do_integer("halfbuf", (integer) (dvibufsize/2)); do_integer("curs", -1L); do_integer("lastbop", -1L); do_bool("nonewcontrolsequence", true); do_quarterword("curlevel", 1); for (i=5267; i<=5976; i++) xeqlevel[i] = 1; do_quarterword_array("zzzad", zzzad, sizeof(zzzad)/sizeof(zzzad[0]), (long) (5976-5267+1)); for (i=0; i<=16; i++) readopen[i] = 2; do_schar_array("readopen", readopen, (long) (sizeof(readopen)/sizeof(readopen[0])), (long) (16-0+1)); /* The following code was copied directly from the C version of TeX */ xchr [ 32 ] = ' ' ; xchr [ 33 ] = '!' ; xchr [ 34 ] = '"' ; xchr [ 35 ] = '#' ; xchr [ 36 ] = '$' ; xchr [ 37 ] = '%' ; xchr [ 38 ] = '&' ; xchr [ 39 ] = '\'' ; xchr [ 40 ] = '(' ; xchr [ 41 ] = ')' ; xchr [ 42 ] = '*' ; xchr [ 43 ] = '+' ; xchr [ 44 ] = ',' ; xchr [ 45 ] = '-' ; xchr [ 46 ] = '.' ; xchr [ 47 ] = '/' ; xchr [ 48 ] = '0' ; xchr [ 49 ] = '1' ; xchr [ 50 ] = '2' ; xchr [ 51 ] = '3' ; xchr [ 52 ] = '4' ; xchr [ 53 ] = '5' ; xchr [ 54 ] = '6' ; xchr [ 55 ] = '7' ; xchr [ 56 ] = '8' ; xchr [ 57 ] = '9' ; xchr [ 58 ] = ':' ; xchr [ 59 ] = ';' ; xchr [ 60 ] = '<' ; xchr [ 61 ] = '=' ; xchr [ 62 ] = '>' ; xchr [ 63 ] = '?' ; xchr [ 64 ] = '@' ; xchr [ 65 ] = 'A' ; xchr [ 66 ] = 'B' ; xchr [ 67 ] = 'C' ; xchr [ 68 ] = 'D' ; xchr [ 69 ] = 'E' ; xchr [ 70 ] = 'F' ; xchr [ 71 ] = 'G' ; xchr [ 72 ] = 'H' ; xchr [ 73 ] = 'I' ; xchr [ 74 ] = 'J' ; xchr [ 75 ] = 'K' ; xchr [ 76 ] = 'L' ; xchr [ 77 ] = 'M' ; xchr [ 78 ] = 'N' ; xchr [ 79 ] = 'O' ; xchr [ 80 ] = 'P' ; xchr [ 81 ] = 'Q' ; xchr [ 82 ] = 'R' ; xchr [ 83 ] = 'S' ; xchr [ 84 ] = 'T' ; xchr [ 85 ] = 'U' ; xchr [ 86 ] = 'V' ; xchr [ 87 ] = 'W' ; xchr [ 88 ] = 'X' ; xchr [ 89 ] = 'Y' ; xchr [ 90 ] = 'Z' ; xchr [ 91 ] = '[' ; xchr [ 92 ] = '\\' ; xchr [ 93 ] = ']' ; xchr [ 94 ] = '^' ; xchr [ 95 ] = '_' ; xchr [ 96 ] = '`' ; xchr [ 97 ] = 'a' ; xchr [ 98 ] = 'b' ; xchr [ 99 ] = 'c' ; xchr [ 100 ] = 'd' ; xchr [ 101 ] = 'e' ; xchr [ 102 ] = 'f' ; xchr [ 103 ] = 'g' ; xchr [ 104 ] = 'h' ; xchr [ 105 ] = 'i' ; xchr [ 106 ] = 'j' ; xchr [ 107 ] = 'k' ; xchr [ 108 ] = 'l' ; xchr [ 109 ] = 'm' ; xchr [ 110 ] = 'n' ; xchr [ 111 ] = 'o' ; xchr [ 112 ] = 'p' ; xchr [ 113 ] = 'q' ; xchr [ 114 ] = 'r' ; xchr [ 115 ] = 's' ; xchr [ 116 ] = 't' ; xchr [ 117 ] = 'u' ; xchr [ 118 ] = 'v' ; xchr [ 119 ] = 'w' ; xchr [ 120 ] = 'x' ; xchr [ 121 ] = 'y' ; xchr [ 122 ] = 'z' ; xchr [ 123 ] = '{' ; xchr [ 124 ] = '|' ; xchr [ 125 ] = '}' ; xchr [ 126 ] = '~' ; xchr [ 0 ] = ' ' ; xchr [ 127 ] = ' ' ; {register integer for_end; i = 1 ; for_end = 31 ; if ( i <= for_end) do xchr [ i ] = chr ( i ) ; while ( i++ < for_end ) ; } {register integer for_end; i = 0 ; for_end = 127 ; if ( i <= for_end) do xord [ chr ( i ) ] = 127 ; while ( i++ < for_end ) ; } {register integer for_end; i = 1 ; for_end = 126 ; if ( i <= for_end) do xord [ xchr [ i ] ] = i ; while ( i++ < for_end ) ; } /* End of copied code */ do_quarterword_array("xord", xord, sizeof(xord), sizeof(xord)); do_char_array("xchr", xchr, sizeof(xchr), sizeof(xchr)); printf("liststaterecord curlist={1,%ldL,%ldL,0,-65536000L,0};\n", (long) (memtop-1), (long) (memtop-1)); } main(argc, argv) char *argv[]; { char *fmtfilename; if (argc > 3) { (void) fprintf(stderr, "usage: %s fmt_file [init_file.c]\n", argv[0]); exit(1); } if (argc > 1) fmtfilename = argv[1]; else fmtfilename = "plain.fmt"; fmtfile = fopen(fmtfilename, "r"); if (!fmtfile) perror(fmtfilename), exit(1); if (argc > 2) { if (freopen(argv[2], "w", stdout) == NULL) perror(argv[2]), exit(1); } if (loadfmtfile()) { dump_fmt(); dump_initializations(); exit(0); } else { exit(1); } /*NOTREACHED*/ }