ridderbusch.pad@nixdorf.com (Frank Ridderbusch, PXD-S4) (11/20/90)
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}.}
@<Constants...@>=
! @!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}.}
@<Constants...@>=
! @!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