Xref: utzoo comp.sys.atari.st:32710 comp.text.tex:3987 Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!swrinde!zaphod.mps.ohio-state.edu!think.com!linus!nixbur!nixpbe!ugun13!ridderbusch.pad From: ridderbusch.pad@nixdorf.com (Frank Ridderbusch, PXD-S4) Newsgroups: comp.sys.atari.st,comp.text.tex Subject: TeX 3.1 and Metafont 2.7 also runs on Atari ST's Message-ID: Date: 20 Nov 90 09:49:35 GMT Sender: news@ugun13.UUCP Reply-To: ridderbusch.pad@nixdorf.com (Frank Ridderbusch, STO XS 141) Followup-To: comp.sys.atari.st Organization: Siemens Nixdorf Informationssysteme GmbH, Paderborn, West Germany Lines: 236 Hallo TeXperts and TeXnicians. In TeXhax digest 90 Karl Berry announced, that he had released web2c version 5.8a (that's TeX 3.1 + Metafont 2.7). This version also works for the Atari ST with very minor changes. I build the Atari version with a GNU cross compiler on my local UN*X box. I don't know, if all files will compile on every ST (due to lack of memory); I recompiled only two or three files on my ST, which is equipped with 2,5 MB. People with 4 MB should have no problems at all. In every case, the conversion from WEB to C should be done a UN*X system. You have to build a normal sized TeX and Metafont. Metafont additionally requires to decrease some constants. The resulting object have the following sizes. tex/initex: text size 202840 data size 1228 bss size 1125404 symbol size 16954 File is relocatable tex/virtex: text size 187828 data size 1228 bss size 681552 symbol size 16548 File is relocatable mf/inimf: text size 201992 data size 1268 bss size 291232 symbol size 16660 File is relocatable mf/virmf: text size 194020 data size 1268 bss size 291228 symbol size 16562 File is relocatable I used the GNU C library from J.R. Bammi and E.R.Smith (thanks to both of them for their good work) with patchlevel 58. The required getl() routine in the library contains a bug, because a variable is anded with 0xff instead with 0xffff. The following is the correct version. long getl(fp) register FILE *fp; { register long n, c; if((c = getw(fp)) == EOF) return(EOF); n = (c << 16); if((c = getw(fp)) == EOF) return(EOF); n |= (c & 0xFFFF); /* the original contained 0xff */ return(n); } Following are the contex diffs to the original web2c 5.8a. BTW, you should be aware of the setting of the UNIXMODE environment variable. I've set it, so that all path specifications are given with a device prefix (/dev/F/tex or /dev/D/metafont/mfinputs/cmr) and the default open mode is binary. And now have fun. -------------------- cut here -------------------- *** /tmp/,RCSt1a00206 Tue Nov 20 09:36:05 1990 --- extra.c Thu Nov 15 11:03:14 1990 *************** *** 666,674 **** make_c_string (&name); ! if (*name == '/' ! || (*name == '.' && *(name + 1) == '/') ! || (*name == '.' && *(name + 1) == '.' && *(name + 2) == '/')) ok = READABLE_FILE (name); else { --- 673,684 ---- make_c_string (&name); ! if ((*name == '/' || *name == '\\') ! || (*name == '.' && (*(name + 1) == '/' || *(name + 1) == '\\')) ! || (*name == '.' && *(name + 1) == '.' ! && (*(name + 2) == '/' || *(name + 2) == '\\')) ! || (((*name >= 'a' && *name <= 'z') ! || (*name >= 'A' && *name <= 'Z')) && *(name + 1) == ':')) ok = READABLE_FILE (name); else { *** /tmp/,RCSt1a00206 Tue Nov 20 09:36:06 1990 --- fileio.c Tue Nov 20 08:49:37 1990 *************** *** 86,92 **** /* If we found the file in the current directory, don't leave the `./' at the beginning of `nameoffile', since it looks dumb when TeX says `(./foo.tex ... )', and analogously for Metafont. */ ! if (nameoffile[1] == '.' && nameoffile[2] == '/') { unsigned i; for (i = 1; nameoffile[i]; i++) --- 86,93 ---- /* If we found the file in the current directory, don't leave the `./' at the beginning of `nameoffile', since it looks dumb when TeX says `(./foo.tex ... )', and analogously for Metafont. */ ! if (nameoffile[1] == '.' && (nameoffile[2] == '/' ! || nameoffile[2] == '\\')) { unsigned i; for (i = 1; nameoffile[i]; i++) *** /tmp/,RCSt1a00206 Tue Nov 20 09:36:07 1990 --- main.c Thu Nov 15 15:17:29 1990 *************** *** 10,15 **** --- 10,18 ---- /* Referenced from the Pascal, so not static. */ integer argc; + #ifdef atarist + int _stksize = -1L; + #endif /* The entry point for all the programs except TeX and Metafont, which have more to do. We just have to set up the command line. Pascal's *** /tmp/,RCSt1a00206 Tue Nov 20 09:36:08 1990 --- texmf.c Tue Nov 20 08:49:44 1990 *************** *** 60,65 **** --- 60,69 ---- + #ifdef atarist + int _stksize = -1L; + #endif + /* The main program, etc. */ /* What we were invoked as and with. */ *************** *** 207,213 **** --- 211,220 ---- #endif while (last < bufsize && (i = getc (f)) != EOF && i != '\n') + { + if (i == '\r') continue; buffer[last++] = i; + } if (i == EOF && last == first) return false; *** /tmp/,RCSt1a00206 Tue Nov 20 09:36:10 1990 --- texmf.h Mon Nov 19 10:23:18 1990 *************** *** 119,126 **** --- 119,131 ---- sizeof (x_val), 1, dump_file); } #define undumpint(x) fread ((char *) &(x), sizeof (x), 1, dump_file) #else + #ifdef atarist + #define dumpint(x) (void) putl ((int) (x), dump_file) + #define undumpint(x) (x) = getl (dump_file) + #else #define dumpint(x) (void) putw ((int) (x), dump_file) #define undumpint(x) (x) = getw (dump_file) + #endif #endif *** /tmp/,RCSt1a00228 Tue Nov 20 09:44:11 1990 --- cmf.ch Mon Nov 19 10:11:30 1990 *************** *** 143,149 **** @d file_name_size == FILENAMESIZE {Get value from \.{site.h}.} @= ! @!mem_max=60000; {greatest index in \MF's internal |mem| array; must be strictly less than |max_halfword|; must be equal to |mem_top| in \.{INIMF}, otherwise |>=mem_top|} @!max_internal=100; {maximum number of internal quantities} --- 143,149 ---- @d file_name_size == FILENAMESIZE {Get value from \.{site.h}.} @= ! @!mem_max=30000; {greatest index in \MF's internal |mem| array; must be strictly less than |max_halfword|; must be equal to |mem_top| in \.{INIMF}, otherwise |>=mem_top|} @!max_internal=100; {maximum number of internal quantities} *************** *** 166,172 **** length of \MF's own strings, which is currently about 22000} @!move_size=5000; {space for storing moves in a single octant} @!max_wiggle=300; {number of autorounded points per cycle} ! @!gf_buf_size=16384; {size of the output buffer, must be a multiple of 8} @!pool_name='mf.pool'; {string of length |file_name_size|; tells where the string pool appears} @!path_size=300; {maximum number of knots between breakpoints of a path} --- 166,172 ---- length of \MF's own strings, which is currently about 22000} @!move_size=5000; {space for storing moves in a single octant} @!max_wiggle=300; {number of autorounded points per cycle} ! @!gf_buf_size=4096; {size of the output buffer, must be a multiple of 8} @!pool_name='mf.pool'; {string of length |file_name_size|; tells where the string pool appears} @!path_size=300; {maximum number of knots between breakpoints of a path} *************** *** 177,183 **** at least 255 and at most 32510} @!max_kerns=500; {maximum number of distinct kern amounts} @!max_font_dimen=50; {maximum number of \&{fontdimen} parameters} ! @!mem_top=60000; {largest index in the |mem| array dumped by \.{INIMF}; must be substantially larger than |mem_min| and not greater than |mem_max|} @z --- 177,183 ---- at least 255 and at most 32510} @!max_kerns=500; {maximum number of distinct kern amounts} @!max_font_dimen=50; {maximum number of \&{fontdimen} parameters} ! @!mem_top=30000; {largest index in the |mem| array dumped by \.{INIMF}; must be substantially larger than |mem_min| and not greater than |mem_max|} @z -------------------- cut here -------------------- -- MfG/Regards /==== Siemens Nixdorf Informationssysteme AG / Ridderbusch, STO / , Heinz Nixdorf Ring / /./ 4790 Paderborn, West Germany /=== /,== ,===/ /,==, // Tel.: (+49) 5251/104685 / // / / // / / \ NERV:ridderbusch.pad / / `==/\ / / / \ BIX:fridder BTX:0525467066-0001 UUCP: !USA: ridderbusch.pad@nixdorf.de USA: ridderbusch.pad@nixdorf.com