|
|
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 p
Length: 63928 (0xf9b8)
Types: TextFile
Names: »pltotf.c«
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
└─⟦af5ba6c8e⟧ »unix3.0/DVIWARE.tar.Z«
└─⟦ca79c7339⟧
└─⟦this⟧ »DVIware/laser-setters/dvi-to-ps/TeXPS/pltotf/pltotf.c«
#include "web2c.h"
#define bufsize 60
#define maxheaderbytes 100
#define maxparamwords 30
typedef unsigned char byte ;
typedef schar ASCIIcode ;
typedef struct {
byte b0 ;
byte b1 ;
byte b2 ;
byte b3 ;
} fourbytes ;
typedef integer fixword ;
typedef integer headerindex ;
typedef short pointer ;
text plfile ;
file_ptr /* of unsigned char */ tfmfile ;
char tfmname[101], plname[101] ;
ASCIIcode xord[128] ;
integer line ;
integer goodindent ;
integer indent ;
integer level ;
boolean leftln, rightln ;
integer limit ;
integer loc ;
char buffer[bufsize + 1] ;
boolean inputhasended ;
schar charsonline ;
ASCIIcode curchar ;
short start[67] ;
ASCIIcode dictionary[501] ;
schar startptr ;
short dictptr ;
ASCIIcode curname[21] ;
schar namelength ;
schar nameptr ;
schar hash[101] ;
schar curhash ;
byte equiv[67] ;
byte curcode ;
fourbytes curbytes ;
integer fractiondigits[8] ;
byte headerbytes[maxheaderbytes + 1] ;
headerindex headerptr ;
fixword designsize ;
fixword designunits ;
boolean sevenbitsafeflag ;
fourbytes ligkern[512] ;
short nl ;
boolean unusedlabel ;
fixword kern[257] ;
short nk ;
fourbytes exten[256] ;
short ne ;
fixword param[maxparamwords + 1] ;
integer np ;
boolean checksumspecified ;
fixword memory[1033] ;
pointer memptr ;
pointer link[1033] ;
pointer charwd[256] ;
pointer charht[256] ;
pointer chardp[256] ;
pointer charic[256] ;
schar chartag[256] ;
unsigned char charremainder[256] ;
fixword nextd ;
byte index[1033] ;
byte c ;
short krnptr ;
boolean sevenunsafe ;
short ligptr ;
fixword delta ;
byte bc ;
byte ec ;
byte lh ;
short lf ;
boolean notfound ;
fixword tempwidth ;
integer j ;
pointer p ;
schar q ;
integer parptr ;
#include "pltotf.h"
initialize () {
schar k ;
schar h ;
headerindex d ;
byte c ;
(void) fprintf(stdout, "%s\n", "This is PLtoTF, C Version 2.3" ) ;
if ( argc < 3 )
{
(void) fprintf(stdout, "%s\n", "Usage: pltotf <pl-file> <tfm-file>" ) ;
uexit ( 1 ) ;
}
argv ( 1 , plname ) ;
reset ( plfile , plname ) ;
argv ( 2 , tfmname ) ;
rewrite ( tfmfile , tfmname ) ;
{register integer for_end; k = 0 ; for_end = 127 ; if ( k <= for_end) do
xord [ chr ( k ) ] = 127 ;
while ( k++ < for_end ) ; }
xord [ ' ' ] = 32 ;
xord [ '!' ] = 33 ;
xord [ '"' ] = 34 ;
xord [ '#' ] = 35 ;
xord [ '$' ] = 36 ;
xord [ '%' ] = 37 ;
xord [ '&' ] = 38 ;
xord [ '\'' ] = 39 ;
xord [ '(' ] = 40 ;
xord [ ')' ] = 41 ;
xord [ '*' ] = 42 ;
xord [ '+' ] = 43 ;
xord [ ',' ] = 44 ;
xord [ '-' ] = 45 ;
xord [ '.' ] = 46 ;
xord [ '/' ] = 47 ;
xord [ '0' ] = 48 ;
xord [ '1' ] = 49 ;
xord [ '2' ] = 50 ;
xord [ '3' ] = 51 ;
xord [ '4' ] = 52 ;
xord [ '5' ] = 53 ;
xord [ '6' ] = 54 ;
xord [ '7' ] = 55 ;
xord [ '8' ] = 56 ;
xord [ '9' ] = 57 ;
xord [ ':' ] = 58 ;
xord [ ';' ] = 59 ;
xord [ '<' ] = 60 ;
xord [ '=' ] = 61 ;
xord [ '>' ] = 62 ;
xord [ '?' ] = 63 ;
xord [ '@' ] = 64 ;
xord [ 'A' ] = 65 ;
xord [ 'B' ] = 66 ;
xord [ 'C' ] = 67 ;
xord [ 'D' ] = 68 ;
xord [ 'E' ] = 69 ;
xord [ 'F' ] = 70 ;
xord [ 'G' ] = 71 ;
xord [ 'H' ] = 72 ;
xord [ 'I' ] = 73 ;
xord [ 'J' ] = 74 ;
xord [ 'K' ] = 75 ;
xord [ 'L' ] = 76 ;
xord [ 'M' ] = 77 ;
xord [ 'N' ] = 78 ;
xord [ 'O' ] = 79 ;
xord [ 'P' ] = 80 ;
xord [ 'Q' ] = 81 ;
xord [ 'R' ] = 82 ;
xord [ 'S' ] = 83 ;
xord [ 'T' ] = 84 ;
xord [ 'U' ] = 85 ;
xord [ 'V' ] = 86 ;
xord [ 'W' ] = 87 ;
xord [ 'X' ] = 88 ;
xord [ 'Y' ] = 89 ;
xord [ 'Z' ] = 90 ;
xord [ '[' ] = 91 ;
xord [ '\\' ] = 92 ;
xord [ ']' ] = 93 ;
xord [ '^' ] = 94 ;
xord [ '_' ] = 95 ;
xord [ '`' ] = 96 ;
xord [ 'a' ] = 97 ;
xord [ 'b' ] = 98 ;
xord [ 'c' ] = 99 ;
xord [ 'd' ] = 100 ;
xord [ 'e' ] = 101 ;
xord [ 'f' ] = 102 ;
xord [ 'g' ] = 103 ;
xord [ 'h' ] = 104 ;
xord [ 'i' ] = 105 ;
xord [ 'j' ] = 106 ;
xord [ 'k' ] = 107 ;
xord [ 'l' ] = 108 ;
xord [ 'm' ] = 109 ;
xord [ 'n' ] = 110 ;
xord [ 'o' ] = 111 ;
xord [ 'p' ] = 112 ;
xord [ 'q' ] = 113 ;
xord [ 'r' ] = 114 ;
xord [ 's' ] = 115 ;
xord [ 't' ] = 116 ;
xord [ 'u' ] = 117 ;
xord [ 'v' ] = 118 ;
xord [ 'w' ] = 119 ;
xord [ 'x' ] = 120 ;
xord [ 'y' ] = 121 ;
xord [ 'z' ] = 122 ;
xord [ '{' ] = 123 ;
xord [ '|' ] = 124 ;
xord [ '}' ] = 125 ;
xord [ '~' ] = 126 ;
line = 0 ;
goodindent = 0 ;
indent = 0 ;
level = 0 ;
limit = 0 ;
loc = 0 ;
leftln = true ;
rightln = true ;
inputhasended = false ;
charsonline = 0 ;
startptr = 1 ;
start [ 1 ] = 0 ;
dictptr = 0 ;
{register integer for_end; h = 0 ; for_end = 100 ; if ( h <= for_end) do
hash [ h ] = 0 ;
while ( h++ < for_end ) ; }
checksumspecified = false ;
{register integer for_end; d = 0 ; for_end = 18 * 4 - 1 ; if ( d <=
for_end) do
headerbytes [ d ] = 0 ;
while ( d++ < for_end ) ; }
headerbytes [ 8 ] = 11 ;
headerbytes [ 9 ] = 85 ;
headerbytes [ 10 ] = 78 ;
headerbytes [ 11 ] = 83 ;
headerbytes [ 12 ] = 80 ;
headerbytes [ 13 ] = 69 ;
headerbytes [ 14 ] = 67 ;
headerbytes [ 15 ] = 73 ;
headerbytes [ 16 ] = 70 ;
headerbytes [ 17 ] = 73 ;
headerbytes [ 18 ] = 69 ;
headerbytes [ 19 ] = 68 ;
{register integer for_end; d = 48 ; for_end = 59 ; if ( d <= for_end) do
headerbytes [ d ] = headerbytes [ d - 40 ] ;
while ( d++ < for_end ) ; }
designsize = 10 * 1048576L ;
designunits = 1048576L ;
sevenbitsafeflag = false ;
headerptr = 18 * 4 ;
nl = 0 ;
unusedlabel = false ;
nk = 0 ;
ne = 0 ;
np = 0 ;
{register integer for_end; c = 0 ; for_end = 255 ; if ( c <= for_end) do
{
charwd [ c ] = 0 ;
charht [ c ] = 0 ;
chardp [ c ] = 0 ;
charic [ c ] = 0 ;
chartag [ c ] = 0 ;
charremainder [ c ] = 0 ;
}
while ( c++ < for_end ) ; }
memory [ 0 ] = 2147483647L ;
memory [ 1 ] = 0 ;
link [ 1 ] = 0 ;
memory [ 2 ] = 0 ;
link [ 2 ] = 0 ;
memory [ 3 ] = 0 ;
link [ 3 ] = 0 ;
memory [ 4 ] = 0 ;
link [ 4 ] = 0 ;
memptr = 4 ;
}
showerrorcontext () {
integer k ;
(void) fprintf(stdout, "%s%ld%s\n", " (line " , (long)line , ")." ) ;
if ( ! leftln )
(void) Fputs(stdout, "..." ) ;
{register integer for_end; k = 1 ; for_end = loc ; if ( k <= for_end) do
(void) fprintf(stdout, "%ld", (long)buffer [ k ] ) ;
while ( k++ < for_end ) ; }
(void) fprintf(stdout, "%c\n", ' ' ) ;
if ( ! leftln )
(void) Fputs(stdout, " " ) ;
{register integer for_end; k = 1 ; for_end = loc ; if ( k <= for_end) do
(void) putc(' ' , stdout);
while ( k++ < for_end ) ; }
{register integer for_end; k = loc + 1 ; for_end = limit ; if ( k <=
for_end) do
(void) fprintf(stdout, "%ld", (long)buffer [ k ] ) ;
while ( k++ < for_end ) ; }
if ( rightln )
(void) fprintf(stdout, "%c\n", ' ' ) ;
else
(void) fprintf(stdout, "%s\n", "..." ) ;
charsonline = 0 ;
}
fillbuffer () {
leftln = rightln ;
limit = 0 ;
loc = 0 ;
if ( leftln )
{
if ( line > 0 )
readln ( plfile ) ;
line = line + 1 ;
}
if ( eof ( plfile ) )
{
limit = 1 ;
buffer [ 1 ] = ')' ;
rightln = false ;
inputhasended = true ;
}
else {
while ( ( limit < bufsize - 1 ) && ( ! eoln ( plfile ) ) ) {
limit = limit + 1 ;
read ( plfile , buffer [ limit ] ) ;
}
buffer [ limit + 1 ] = ' ' ;
rightln = eoln ( plfile ) ;
if ( leftln )
{
while ( ( loc < limit ) && ( buffer [ loc + 1 ] == ' ' ) ) loc = loc + 1
;
if ( loc < limit )
{
if ( level == 0 )
if ( loc == 0 )
goodindent = goodindent + 1 ;
else {
if ( goodindent >= 10 )
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "Warning: Indented line occurred at level zero" ) ;
showerrorcontext () ;
}
goodindent = 0 ;
indent = 0 ;
}
else if ( indent == 0 )
if ( ( loc / level ) * level == loc )
{
indent = loc / level ;
goodindent = 1 ;
}
else goodindent = 0 ;
else if ( indent * level == loc )
goodindent = goodindent + 1 ;
else {
if ( goodindent >= 10 )
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) fprintf(stdout, "%s%s%ld", "Warning: Inconsistent indentation; " , "you are at parenthesis level " , (long)level ) ;
showerrorcontext () ;
}
goodindent = 0 ;
indent = 0 ;
}
}
}
}
}
getletterordigit () {
while ( ( loc == limit ) && ( ! rightln ) ) fillbuffer
() ;
if ( loc == limit )
curchar = 32 ;
else {
curchar = xord [ buffer [ loc + 1 ] ] ;
if ( curchar >= 97 )
curchar = curchar - 32 ;
if ( ( ( curchar >= 48 ) && ( curchar <= 57 ) ) || ( ( curchar >= 65 ) &&
( curchar <= 90 ) ) )
loc = loc + 1 ;
else curchar = 32 ;
}
}
getnext () {
while ( loc == limit ) fillbuffer () ;
loc = loc + 1 ;
curchar = xord [ buffer [ loc ] ] ;
if ( curchar >= 97 )
if ( curchar <= 122 )
curchar = curchar - 32 ;
else {
if ( curchar == 127 )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "Illegal character in the file" ) ;
showerrorcontext () ;
}
curchar = 63 ;
}
}
else if ( ( curchar <= 41 ) && ( curchar >= 40 ) )
loc = loc - 1 ;
}
skiptoendofitem () {
integer l ;
l = level ;
while ( level >= l ) {
while ( loc == limit ) fillbuffer () ;
loc = loc + 1 ;
if ( buffer [ loc ] == ')' )
level = level - 1 ;
else if ( buffer [ loc ] == '(' )
level = level + 1 ;
}
if ( inputhasended )
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "File ended unexpectedly: No closing \")\"" ) ;
showerrorcontext () ;
}
curchar = 32 ;
}
finishtheproperty () {
while ( curchar == 32 ) getnext () ;
if ( curchar != 41 )
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "Junk after property value will be ignored" ) ;
showerrorcontext () ;
}
skiptoendofitem () ;
}
lookup () {
schar k ;
short j ;
boolean notfound ;
curhash = curname [ 1 ] ;
{register integer for_end; k = 2 ; for_end = namelength ; if ( k <=
for_end) do
curhash = ( curhash + curhash + curname [ k ] ) % 101 ;
while ( k++ < for_end ) ; }
notfound = true ;
while ( notfound ) {
if ( curhash == 0 )
curhash = 100 ;
else curhash = curhash - 1 ;
if ( hash [ curhash ] == 0 )
notfound = false ;
else {
j = start [ hash [ curhash ] ] ;
if ( start [ hash [ curhash ] + 1 ] == j + namelength )
{
notfound = false ;
{register integer for_end; k = 1 ; for_end = namelength ; if ( k <=
for_end) do
if ( dictionary [ j + k - 1 ] != curname [ k ] )
notfound = true ;
while ( k++ < for_end ) ; }
}
}
}
nameptr = hash [ curhash ] ;
}
zentername ( v )
byte v ;
{schar k ;
{register integer for_end; k = 1 ; for_end = namelength ; if ( k <=
for_end) do
curname [ k ] = curname [ k + 20 - namelength ] ;
while ( k++ < for_end ) ; }
lookup () ;
hash [ curhash ] = startptr ;
equiv [ startptr ] = v ;
{register integer for_end; k = 1 ; for_end = namelength ; if ( k <=
for_end) do
{
dictionary [ dictptr ] = curname [ k ] ;
dictptr = dictptr + 1 ;
}
while ( k++ < for_end ) ; }
startptr = startptr + 1 ;
start [ startptr ] = dictptr ;
}
getname () {
loc = loc + 1 ;
level = level + 1 ;
curchar = 32 ;
while ( curchar == 32 ) getnext () ;
if ( ( curchar > 41 ) || ( curchar < 40 ) )
loc = loc - 1 ;
namelength = 0 ;
getletterordigit () ;
while ( curchar != 32 ) {
if ( namelength == 20 )
curname [ 1 ] = 88 ;
else namelength = namelength + 1 ;
curname [ namelength ] = curchar ;
getletterordigit () ;
}
lookup () ;
if ( nameptr == 0 )
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "Sorry, I don't know that property name" ) ;
showerrorcontext () ;
}
curcode = equiv [ nameptr ] ;
}
byte getbyte () {
register byte Result; integer acc ;
ASCIIcode t ;
do {
getnext () ;
} while ( ! ( curchar != 32 ) ) ;
t = curchar ;
acc = 0 ;
do {
getnext () ;
} while ( ! ( curchar != 32 ) ) ;
if ( t == 67 )
if ( ( curchar >= 33 ) && ( curchar <= 126 ) && ( ( curchar < 40 ) || (
curchar > 41 ) ) )
acc = xord [ buffer [ loc ] ] ;
else {
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "\"C\" value must be standard ASCII and not a paren" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
else if ( t == 68 )
{
while ( ( curchar >= 48 ) && ( curchar <= 57 ) ) {
acc = acc * 10 + curchar - 48 ;
if ( acc > 255 )
{
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "This value shouldn't exceed 255" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
acc = 0 ;
curchar = 32 ;
}
else getnext () ;
}
{
if ( ( curchar > 41 ) || ( curchar < 40 ) )
loc = loc - 1 ;
}
}
else if ( t == 79 )
{
while ( ( curchar >= 48 ) && ( curchar <= 55 ) ) {
acc = acc * 8 + curchar - 48 ;
if ( acc > 255 )
{
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "This value shouldn't exceed '377" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
acc = 0 ;
curchar = 32 ;
}
else getnext () ;
}
{
if ( ( curchar > 41 ) || ( curchar < 40 ) )
loc = loc - 1 ;
}
}
else if ( t == 72 )
{
while ( ( ( curchar >= 48 ) && ( curchar <= 57 ) ) || ( ( curchar >= 65 )
&& ( curchar <= 70 ) ) ) {
if ( curchar >= 65 )
curchar = curchar - 7 ;
acc = acc * 16 + curchar - 48 ;
if ( acc > 255 )
{
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "This value shouldn't exceed \"FF" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
acc = 0 ;
curchar = 32 ;
}
else getnext () ;
}
{
if ( ( curchar > 41 ) || ( curchar < 40 ) )
loc = loc - 1 ;
}
}
else if ( t == 70 )
{
if ( curchar == 66 )
acc = 2 ;
else if ( curchar == 76 )
acc = 4 ;
else if ( curchar != 77 )
acc = 18 ;
getnext () ;
if ( curchar == 73 )
acc = acc + 1 ;
else if ( curchar != 82 )
acc = 18 ;
getnext () ;
if ( curchar == 67 )
acc = acc + 6 ;
else if ( curchar == 69 )
acc = acc + 12 ;
else if ( curchar != 82 )
acc = 18 ;
if ( acc >= 18 )
{
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "Illegal face code, I changed it to MRR" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
acc = 0 ;
}
}
else {
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "You need \"C\" or \"D\" or \"O\" or \"H\" or \"F\" here" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
curchar = 32 ;
Result = acc ;
return(Result) ;
}
getfourbytes () {
integer c ;
integer r ;
integer q ;
do {
getnext () ;
} while ( ! ( curchar != 32 ) ) ;
r = 0 ;
curbytes .b0 = 0 ;
curbytes .b1 = 0 ;
curbytes .b2 = 0 ;
curbytes .b3 = 0 ;
if ( curchar == 72 )
r = 16 ;
else if ( curchar == 79 )
r = 8 ;
else {
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "An octal (\"O\") or hex (\"H\") value is needed here" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
if ( r > 0 )
{
q = 256 / r ;
do {
getnext () ;
} while ( ! ( curchar != 32 ) ) ;
while ( ( ( curchar >= 48 ) && ( curchar <= 57 ) ) || ( ( curchar >= 65 )
&& ( curchar <= 70 ) ) ) {
if ( curchar >= 65 )
curchar = curchar - 7 ;
c = ( r * curbytes .b0 ) + ( curbytes .b1 / q ) ;
if ( c > 255 )
{
curbytes .b0 = 0 ;
curbytes .b1 = 0 ;
curbytes .b2 = 0 ;
curbytes .b3 = 0 ;
if ( r == 8 )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "Sorry, the maximum octal value is O 37777777777" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
else {
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "Sorry, the maximum hex value is H FFFFFFFF" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
}
else if ( curchar >= 48 + r )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "Illegal digit" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
else {
curbytes .b0 = c ;
curbytes .b1 = ( r * ( curbytes .b1 % q ) ) + ( curbytes .b2 / q ) ;
curbytes .b2 = ( r * ( curbytes .b2 % q ) ) + ( curbytes .b3 / q ) ;
curbytes .b3 = ( r * ( curbytes .b3 % q ) ) + curchar - 48 ;
getnext () ;
}
}
}
}
fixword getfix () {
register fixword Result; boolean negative ;
integer acc ;
integer intpart ;
schar j ;
do {
getnext () ;
} while ( ! ( curchar != 32 ) ) ;
negative = false ;
acc = 0 ;
if ( ( curchar != 82 ) && ( curchar != 68 ) )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "An \"R\" or \"D\" value is needed here" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
else {
do {
getnext () ;
if ( curchar == 45 )
{
curchar = 32 ;
negative = true ;
}
else if ( curchar == 43 )
curchar = 32 ;
} while ( ! ( curchar != 32 ) ) ;
while ( ( curchar >= 48 ) && ( curchar <= 57 ) ) {
acc = acc * 10 + curchar - 48 ;
if ( acc >= 1024 )
{
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "Real constants must be less than 1024" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
acc = 0 ;
curchar = 32 ;
}
else getnext () ;
}
intpart = acc ;
acc = 0 ;
if ( curchar == 46 )
{
j = 0 ;
getnext () ;
while ( ( curchar >= 48 ) && ( curchar <= 57 ) ) {
if ( j < 7 )
{
j = j + 1 ;
fractiondigits [ j ] = 2097152L * ( curchar - 48 ) ;
}
getnext () ;
}
acc = 0 ;
while ( j > 0 ) {
acc = fractiondigits [ j ] + ( acc / 10 ) ;
j = j - 1 ;
}
acc = ( acc + 10 ) / 20 ;
}
if ( ( acc >= 1048576L ) && ( intpart == 1023 ) )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "Real constants must be less than 1024" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
else acc = intpart * 1048576L + acc ;
}
if ( negative )
Result = - (integer) acc ;
else Result = acc ;
return(Result) ;
}
pointer zsortin ( h , d )
pointer h ;
fixword d ;
{register pointer Result; pointer p ;
if ( ( d == 0 ) && ( h != 1 ) )
Result = 0 ;
else {
p = h ;
while ( d >= memory [ link [ p ] ] ) p = link [ p ] ;
if ( ( d == memory [ p ] ) && ( p != h ) )
Result = p ;
else if ( memptr == 1032 )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "Memory overflow: more than 1028 widths, etc" ) ;
showerrorcontext () ;
}
(void) fprintf(stdout, "%s\n", "Congratulations! It's hard to make this error." ) ;
Result = p ;
}
else {
memptr = memptr + 1 ;
memory [ memptr ] = d ;
link [ memptr ] = link [ p ] ;
link [ p ] = memptr ;
memory [ h ] = memory [ h ] + 1 ;
Result = memptr ;
}
}
return(Result) ;
}
integer zmincover ( h , d )
pointer h ;
fixword d ;
{register integer Result; pointer p ;
fixword l ;
integer m ;
m = 0 ;
p = link [ h ] ;
nextd = memory [ 0 ] ;
while ( p != 0 ) {
m = m + 1 ;
l = memory [ p ] ;
while ( memory [ link [ p ] ] <= l + d ) p = link [ p ] ;
p = link [ p ] ;
if ( memory [ p ] - l < nextd )
nextd = memory [ p ] - l ;
}
Result = m ;
return(Result) ;
}
fixword zshorten ( h , m )
pointer h ;
integer m ;
{register fixword Result; fixword d ;
integer k ;
if ( memory [ h ] > m )
{
k = mincover ( h , 0 ) ;
d = nextd ;
do {
d = d + d ;
k = mincover ( h , d ) ;
} while ( ! ( k <= m ) ) ;
d = d / 2 ;
k = mincover ( h , d ) ;
while ( k > m ) {
d = nextd ;
k = mincover ( h , d ) ;
}
Result = d ;
}
else Result = 0 ;
return(Result) ;
}
zsetindices ( h , d )
pointer h ;
fixword d ;
{pointer p ;
pointer q ;
byte m ;
fixword l ;
q = h ;
p = link [ q ] ;
m = 0 ;
while ( p != 0 ) {
m = m + 1 ;
l = memory [ p ] ;
index [ p ] = m ;
while ( memory [ link [ p ] ] <= l + d ) {
p = link [ p ] ;
index [ p ] = m ;
}
link [ q ] = p ;
memory [ p ] = ( l + memory [ p ] ) / 2 ;
q = p ;
p = link [ p ] ;
}
memory [ h ] = m ;
}
junkerror () {
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "There's junk here that is not in parentheses" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
zreadfourbytes ( l )
headerindex l ;
{getfourbytes () ;
headerbytes [ l ] = curbytes .b0 ;
headerbytes [ l + 1 ] = curbytes .b1 ;
headerbytes [ l + 2 ] = curbytes .b2 ;
headerbytes [ l + 3 ] = curbytes .b3 ;
}
zreadBCPL ( l , n )
headerindex l ;
byte n ;
{headerindex k ;
k = l ;
while ( curchar == 32 ) getnext () ;
while ( ( curchar != 40 ) && ( curchar != 41 ) ) {
if ( k < l + n )
k = k + 1 ;
if ( k < l + n )
headerbytes [ k ] = curchar ;
getnext () ;
}
if ( k == l + n )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) fprintf(stdout, "%s%ld%s", "String is too long; its first " , (long)n - 1 , " characters will be kept" ) ;
showerrorcontext () ;
}
k = k - 1 ;
}
headerbytes [ l ] = k - l ;
while ( k < l + n - 1 ) {
k = k + 1 ;
headerbytes [ k ] = 0 ;
}
}
zchecktag ( c )
byte c ;
{switch ( chartag [ c ] )
{case 0 :
;
break ;
case 1 :
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "This character already appeared in a LIGTABLE LABEL" ) ;
showerrorcontext () ;
}
break ;
case 2 :
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "This character already has a NEXTLARGER spec" ) ;
showerrorcontext () ;
}
break ;
case 3 :
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "This character already has a VARCHAR spec" ) ;
showerrorcontext () ;
}
break ;
}
}
zprintoctal ( c )
byte c ;
{(void) fprintf(stdout, "%c%ld%ld%ld", '\'' , (long)( c / 64 ) , (long)( ( c / 8 ) % 8 ) , (long)( c % 8 ) ) ;
}
zoutscaled ( x )
fixword x ;
{real z ;
byte n ;
unsigned short m ;
if ( fabs ( x / ((double) designunits ) ) >= 16.0 )
{
(void) Fputs(stdout, "The relative dimension" ) ;
printreal ( x / ((double) 1048576L ) , 1 , 3 ) ;
(void) fprintf(stdout, "%s\n", " is too large." ) ;
(void) Fputs(stdout, " (Must be less than 16*designsize" ) ;
if ( designunits != 1048576L )
{
(void) Fputs(stdout, " =" ) ;
printreal ( designunits / ((double) 65536L ) , 1 , 3 ) ;
(void) Fputs(stdout, " designunits" ) ;
}
(void) fprintf(stdout, "%c\n", ')' ) ;
x = 0 ;
}
if ( x < 0 )
putbyte ( 255 , tfmfile ) ;
else putbyte ( 0 , tfmfile ) ;
if ( designunits == 1048576L )
{
if ( x < 0 )
x = x + 16777216L ;
n = x / 65536L ;
m = x % 65536L ;
}
else {
z = ( x / ((double) designunits ) ) * 16.0 ;
if ( z < 0 )
z = z + 256.0 ;
n = trunc ( z ) ;
m = trunc ( 65536.0 * ( z - n ) ) ;
}
putbyte ( n , tfmfile ) ;
putbyte ( m / 256 , tfmfile ) ;
putbyte ( m % 256 , tfmfile ) ;
}
paramenter () {
namelength = 5 ;
curname [ 16 ] = 83 ;
curname [ 17 ] = 76 ;
curname [ 18 ] = 65 ;
curname [ 19 ] = 78 ;
curname [ 20 ] = 84 ;
entername ( 21 ) ;
namelength = 5 ;
curname [ 16 ] = 83 ;
curname [ 17 ] = 80 ;
curname [ 18 ] = 65 ;
curname [ 19 ] = 67 ;
curname [ 20 ] = 69 ;
entername ( 22 ) ;
namelength = 7 ;
curname [ 14 ] = 83 ;
curname [ 15 ] = 84 ;
curname [ 16 ] = 82 ;
curname [ 17 ] = 69 ;
curname [ 18 ] = 84 ;
curname [ 19 ] = 67 ;
curname [ 20 ] = 72 ;
entername ( 23 ) ;
namelength = 6 ;
curname [ 15 ] = 83 ;
curname [ 16 ] = 72 ;
curname [ 17 ] = 82 ;
curname [ 18 ] = 73 ;
curname [ 19 ] = 78 ;
curname [ 20 ] = 75 ;
entername ( 24 ) ;
namelength = 7 ;
curname [ 14 ] = 88 ;
curname [ 15 ] = 72 ;
curname [ 16 ] = 69 ;
curname [ 17 ] = 73 ;
curname [ 18 ] = 71 ;
curname [ 19 ] = 72 ;
curname [ 20 ] = 84 ;
entername ( 25 ) ;
namelength = 4 ;
curname [ 17 ] = 81 ;
curname [ 18 ] = 85 ;
curname [ 19 ] = 65 ;
curname [ 20 ] = 68 ;
entername ( 26 ) ;
namelength = 10 ;
curname [ 11 ] = 69 ;
curname [ 12 ] = 88 ;
curname [ 13 ] = 84 ;
curname [ 14 ] = 82 ;
curname [ 15 ] = 65 ;
curname [ 16 ] = 83 ;
curname [ 17 ] = 80 ;
curname [ 18 ] = 65 ;
curname [ 19 ] = 67 ;
curname [ 20 ] = 69 ;
entername ( 27 ) ;
namelength = 4 ;
curname [ 17 ] = 78 ;
curname [ 18 ] = 85 ;
curname [ 19 ] = 77 ;
curname [ 20 ] = 49 ;
entername ( 28 ) ;
namelength = 4 ;
curname [ 17 ] = 78 ;
curname [ 18 ] = 85 ;
curname [ 19 ] = 77 ;
curname [ 20 ] = 50 ;
entername ( 29 ) ;
namelength = 4 ;
curname [ 17 ] = 78 ;
curname [ 18 ] = 85 ;
curname [ 19 ] = 77 ;
curname [ 20 ] = 51 ;
entername ( 30 ) ;
namelength = 6 ;
curname [ 15 ] = 68 ;
curname [ 16 ] = 69 ;
curname [ 17 ] = 78 ;
curname [ 18 ] = 79 ;
curname [ 19 ] = 77 ;
curname [ 20 ] = 49 ;
entername ( 31 ) ;
namelength = 6 ;
curname [ 15 ] = 68 ;
curname [ 16 ] = 69 ;
curname [ 17 ] = 78 ;
curname [ 18 ] = 79 ;
curname [ 19 ] = 77 ;
curname [ 20 ] = 50 ;
entername ( 32 ) ;
namelength = 4 ;
curname [ 17 ] = 83 ;
curname [ 18 ] = 85 ;
curname [ 19 ] = 80 ;
curname [ 20 ] = 49 ;
entername ( 33 ) ;
namelength = 4 ;
curname [ 17 ] = 83 ;
curname [ 18 ] = 85 ;
curname [ 19 ] = 80 ;
curname [ 20 ] = 50 ;
entername ( 34 ) ;
namelength = 4 ;
curname [ 17 ] = 83 ;
curname [ 18 ] = 85 ;
curname [ 19 ] = 80 ;
curname [ 20 ] = 51 ;
entername ( 35 ) ;
namelength = 4 ;
curname [ 17 ] = 83 ;
curname [ 18 ] = 85 ;
curname [ 19 ] = 66 ;
curname [ 20 ] = 49 ;
entername ( 36 ) ;
namelength = 4 ;
curname [ 17 ] = 83 ;
curname [ 18 ] = 85 ;
curname [ 19 ] = 66 ;
curname [ 20 ] = 50 ;
entername ( 37 ) ;
namelength = 7 ;
curname [ 14 ] = 83 ;
curname [ 15 ] = 85 ;
curname [ 16 ] = 80 ;
curname [ 17 ] = 68 ;
curname [ 18 ] = 82 ;
curname [ 19 ] = 79 ;
curname [ 20 ] = 80 ;
entername ( 38 ) ;
namelength = 7 ;
curname [ 14 ] = 83 ;
curname [ 15 ] = 85 ;
curname [ 16 ] = 66 ;
curname [ 17 ] = 68 ;
curname [ 18 ] = 82 ;
curname [ 19 ] = 79 ;
curname [ 20 ] = 80 ;
entername ( 39 ) ;
namelength = 6 ;
curname [ 15 ] = 68 ;
curname [ 16 ] = 69 ;
curname [ 17 ] = 76 ;
curname [ 18 ] = 73 ;
curname [ 19 ] = 77 ;
curname [ 20 ] = 49 ;
entername ( 40 ) ;
namelength = 6 ;
curname [ 15 ] = 68 ;
curname [ 16 ] = 69 ;
curname [ 17 ] = 76 ;
curname [ 18 ] = 73 ;
curname [ 19 ] = 77 ;
curname [ 20 ] = 50 ;
entername ( 41 ) ;
namelength = 10 ;
curname [ 11 ] = 65 ;
curname [ 12 ] = 88 ;
curname [ 13 ] = 73 ;
curname [ 14 ] = 83 ;
curname [ 15 ] = 72 ;
curname [ 16 ] = 69 ;
curname [ 17 ] = 73 ;
curname [ 18 ] = 71 ;
curname [ 19 ] = 72 ;
curname [ 20 ] = 84 ;
entername ( 42 ) ;
namelength = 20 ;
curname [ 1 ] = 68 ;
curname [ 2 ] = 69 ;
curname [ 3 ] = 70 ;
curname [ 4 ] = 65 ;
curname [ 5 ] = 85 ;
curname [ 6 ] = 76 ;
curname [ 7 ] = 84 ;
curname [ 8 ] = 82 ;
curname [ 9 ] = 85 ;
curname [ 10 ] = 76 ;
curname [ 11 ] = 69 ;
curname [ 12 ] = 84 ;
curname [ 13 ] = 72 ;
curname [ 14 ] = 73 ;
curname [ 15 ] = 67 ;
curname [ 16 ] = 75 ;
curname [ 17 ] = 78 ;
curname [ 18 ] = 69 ;
curname [ 19 ] = 83 ;
curname [ 20 ] = 83 ;
entername ( 28 ) ;
namelength = 13 ;
curname [ 8 ] = 66 ;
curname [ 9 ] = 73 ;
curname [ 10 ] = 71 ;
curname [ 11 ] = 79 ;
curname [ 12 ] = 80 ;
curname [ 13 ] = 83 ;
curname [ 14 ] = 80 ;
curname [ 15 ] = 65 ;
curname [ 16 ] = 67 ;
curname [ 17 ] = 73 ;
curname [ 18 ] = 78 ;
curname [ 19 ] = 71 ;
curname [ 20 ] = 49 ;
entername ( 29 ) ;
namelength = 13 ;
curname [ 8 ] = 66 ;
curname [ 9 ] = 73 ;
curname [ 10 ] = 71 ;
curname [ 11 ] = 79 ;
curname [ 12 ] = 80 ;
curname [ 13 ] = 83 ;
curname [ 14 ] = 80 ;
curname [ 15 ] = 65 ;
curname [ 16 ] = 67 ;
curname [ 17 ] = 73 ;
curname [ 18 ] = 78 ;
curname [ 19 ] = 71 ;
curname [ 20 ] = 50 ;
entername ( 30 ) ;
namelength = 13 ;
curname [ 8 ] = 66 ;
curname [ 9 ] = 73 ;
curname [ 10 ] = 71 ;
curname [ 11 ] = 79 ;
curname [ 12 ] = 80 ;
curname [ 13 ] = 83 ;
curname [ 14 ] = 80 ;
curname [ 15 ] = 65 ;
curname [ 16 ] = 67 ;
curname [ 17 ] = 73 ;
curname [ 18 ] = 78 ;
curname [ 19 ] = 71 ;
curname [ 20 ] = 51 ;
entername ( 31 ) ;
namelength = 13 ;
curname [ 8 ] = 66 ;
curname [ 9 ] = 73 ;
curname [ 10 ] = 71 ;
curname [ 11 ] = 79 ;
curname [ 12 ] = 80 ;
curname [ 13 ] = 83 ;
curname [ 14 ] = 80 ;
curname [ 15 ] = 65 ;
curname [ 16 ] = 67 ;
curname [ 17 ] = 73 ;
curname [ 18 ] = 78 ;
curname [ 19 ] = 71 ;
curname [ 20 ] = 52 ;
entername ( 32 ) ;
namelength = 13 ;
curname [ 8 ] = 66 ;
curname [ 9 ] = 73 ;
curname [ 10 ] = 71 ;
curname [ 11 ] = 79 ;
curname [ 12 ] = 80 ;
curname [ 13 ] = 83 ;
curname [ 14 ] = 80 ;
curname [ 15 ] = 65 ;
curname [ 16 ] = 67 ;
curname [ 17 ] = 73 ;
curname [ 18 ] = 78 ;
curname [ 19 ] = 71 ;
curname [ 20 ] = 53 ;
entername ( 33 ) ;
}
nameenter () {
equiv [ 0 ] = 0 ;
namelength = 8 ;
curname [ 13 ] = 67 ;
curname [ 14 ] = 72 ;
curname [ 15 ] = 69 ;
curname [ 16 ] = 67 ;
curname [ 17 ] = 75 ;
curname [ 18 ] = 83 ;
curname [ 19 ] = 85 ;
curname [ 20 ] = 77 ;
entername ( 1 ) ;
namelength = 10 ;
curname [ 11 ] = 68 ;
curname [ 12 ] = 69 ;
curname [ 13 ] = 83 ;
curname [ 14 ] = 73 ;
curname [ 15 ] = 71 ;
curname [ 16 ] = 78 ;
curname [ 17 ] = 83 ;
curname [ 18 ] = 73 ;
curname [ 19 ] = 90 ;
curname [ 20 ] = 69 ;
entername ( 2 ) ;
namelength = 11 ;
curname [ 10 ] = 68 ;
curname [ 11 ] = 69 ;
curname [ 12 ] = 83 ;
curname [ 13 ] = 73 ;
curname [ 14 ] = 71 ;
curname [ 15 ] = 78 ;
curname [ 16 ] = 85 ;
curname [ 17 ] = 78 ;
curname [ 18 ] = 73 ;
curname [ 19 ] = 84 ;
curname [ 20 ] = 83 ;
entername ( 3 ) ;
namelength = 12 ;
curname [ 9 ] = 67 ;
curname [ 10 ] = 79 ;
curname [ 11 ] = 68 ;
curname [ 12 ] = 73 ;
curname [ 13 ] = 78 ;
curname [ 14 ] = 71 ;
curname [ 15 ] = 83 ;
curname [ 16 ] = 67 ;
curname [ 17 ] = 72 ;
curname [ 18 ] = 69 ;
curname [ 19 ] = 77 ;
curname [ 20 ] = 69 ;
entername ( 4 ) ;
namelength = 6 ;
curname [ 15 ] = 70 ;
curname [ 16 ] = 65 ;
curname [ 17 ] = 77 ;
curname [ 18 ] = 73 ;
curname [ 19 ] = 76 ;
curname [ 20 ] = 89 ;
entername ( 5 ) ;
namelength = 4 ;
curname [ 17 ] = 70 ;
curname [ 18 ] = 65 ;
curname [ 19 ] = 67 ;
curname [ 20 ] = 69 ;
entername ( 6 ) ;
namelength = 16 ;
curname [ 5 ] = 83 ;
curname [ 6 ] = 69 ;
curname [ 7 ] = 86 ;
curname [ 8 ] = 69 ;
curname [ 9 ] = 78 ;
curname [ 10 ] = 66 ;
curname [ 11 ] = 73 ;
curname [ 12 ] = 84 ;
curname [ 13 ] = 83 ;
curname [ 14 ] = 65 ;
curname [ 15 ] = 70 ;
curname [ 16 ] = 69 ;
curname [ 17 ] = 70 ;
curname [ 18 ] = 76 ;
curname [ 19 ] = 65 ;
curname [ 20 ] = 71 ;
entername ( 7 ) ;
namelength = 6 ;
curname [ 15 ] = 72 ;
curname [ 16 ] = 69 ;
curname [ 17 ] = 65 ;
curname [ 18 ] = 68 ;
curname [ 19 ] = 69 ;
curname [ 20 ] = 82 ;
entername ( 8 ) ;
namelength = 9 ;
curname [ 12 ] = 70 ;
curname [ 13 ] = 79 ;
curname [ 14 ] = 78 ;
curname [ 15 ] = 84 ;
curname [ 16 ] = 68 ;
curname [ 17 ] = 73 ;
curname [ 18 ] = 77 ;
curname [ 19 ] = 69 ;
curname [ 20 ] = 78 ;
entername ( 9 ) ;
namelength = 8 ;
curname [ 13 ] = 76 ;
curname [ 14 ] = 73 ;
curname [ 15 ] = 71 ;
curname [ 16 ] = 84 ;
curname [ 17 ] = 65 ;
curname [ 18 ] = 66 ;
curname [ 19 ] = 76 ;
curname [ 20 ] = 69 ;
entername ( 10 ) ;
namelength = 9 ;
curname [ 12 ] = 67 ;
curname [ 13 ] = 72 ;
curname [ 14 ] = 65 ;
curname [ 15 ] = 82 ;
curname [ 16 ] = 65 ;
curname [ 17 ] = 67 ;
curname [ 18 ] = 84 ;
curname [ 19 ] = 69 ;
curname [ 20 ] = 82 ;
entername ( 11 ) ;
namelength = 9 ;
curname [ 12 ] = 80 ;
curname [ 13 ] = 65 ;
curname [ 14 ] = 82 ;
curname [ 15 ] = 65 ;
curname [ 16 ] = 77 ;
curname [ 17 ] = 69 ;
curname [ 18 ] = 84 ;
curname [ 19 ] = 69 ;
curname [ 20 ] = 82 ;
entername ( 20 ) ;
namelength = 6 ;
curname [ 15 ] = 67 ;
curname [ 16 ] = 72 ;
curname [ 17 ] = 65 ;
curname [ 18 ] = 82 ;
curname [ 19 ] = 87 ;
curname [ 20 ] = 68 ;
entername ( 51 ) ;
namelength = 6 ;
curname [ 15 ] = 67 ;
curname [ 16 ] = 72 ;
curname [ 17 ] = 65 ;
curname [ 18 ] = 82 ;
curname [ 19 ] = 72 ;
curname [ 20 ] = 84 ;
entername ( 52 ) ;
namelength = 6 ;
curname [ 15 ] = 67 ;
curname [ 16 ] = 72 ;
curname [ 17 ] = 65 ;
curname [ 18 ] = 82 ;
curname [ 19 ] = 68 ;
curname [ 20 ] = 80 ;
entername ( 53 ) ;
namelength = 6 ;
curname [ 15 ] = 67 ;
curname [ 16 ] = 72 ;
curname [ 17 ] = 65 ;
curname [ 18 ] = 82 ;
curname [ 19 ] = 73 ;
curname [ 20 ] = 67 ;
entername ( 54 ) ;
namelength = 10 ;
curname [ 11 ] = 78 ;
curname [ 12 ] = 69 ;
curname [ 13 ] = 88 ;
curname [ 14 ] = 84 ;
curname [ 15 ] = 76 ;
curname [ 16 ] = 65 ;
curname [ 17 ] = 82 ;
curname [ 18 ] = 71 ;
curname [ 19 ] = 69 ;
curname [ 20 ] = 82 ;
entername ( 55 ) ;
namelength = 7 ;
curname [ 14 ] = 86 ;
curname [ 15 ] = 65 ;
curname [ 16 ] = 82 ;
curname [ 17 ] = 67 ;
curname [ 18 ] = 72 ;
curname [ 19 ] = 65 ;
curname [ 20 ] = 82 ;
entername ( 56 ) ;
namelength = 3 ;
curname [ 18 ] = 84 ;
curname [ 19 ] = 79 ;
curname [ 20 ] = 80 ;
entername ( 57 ) ;
namelength = 3 ;
curname [ 18 ] = 77 ;
curname [ 19 ] = 73 ;
curname [ 20 ] = 68 ;
entername ( 58 ) ;
namelength = 3 ;
curname [ 18 ] = 66 ;
curname [ 19 ] = 79 ;
curname [ 20 ] = 84 ;
entername ( 59 ) ;
namelength = 3 ;
curname [ 18 ] = 82 ;
curname [ 19 ] = 69 ;
curname [ 20 ] = 80 ;
entername ( 60 ) ;
namelength = 3 ;
curname [ 18 ] = 69 ;
curname [ 19 ] = 88 ;
curname [ 20 ] = 84 ;
entername ( 60 ) ;
namelength = 7 ;
curname [ 14 ] = 67 ;
curname [ 15 ] = 79 ;
curname [ 16 ] = 77 ;
curname [ 17 ] = 77 ;
curname [ 18 ] = 69 ;
curname [ 19 ] = 78 ;
curname [ 20 ] = 84 ;
entername ( 0 ) ;
namelength = 5 ;
curname [ 16 ] = 76 ;
curname [ 17 ] = 65 ;
curname [ 18 ] = 66 ;
curname [ 19 ] = 69 ;
curname [ 20 ] = 76 ;
entername ( 70 ) ;
namelength = 3 ;
curname [ 18 ] = 76 ;
curname [ 19 ] = 73 ;
curname [ 20 ] = 71 ;
entername ( 71 ) ;
namelength = 3 ;
curname [ 18 ] = 75 ;
curname [ 19 ] = 82 ;
curname [ 20 ] = 78 ;
entername ( 72 ) ;
namelength = 4 ;
curname [ 17 ] = 83 ;
curname [ 18 ] = 84 ;
curname [ 19 ] = 79 ;
curname [ 20 ] = 80 ;
entername ( 73 ) ;
paramenter () ;
}
readligkern () {
short krnptr ;
byte c ;
{
while ( level == 1 ) {
while ( curchar == 32 ) getnext () ;
if ( curchar == 40 )
{
getname () ;
if ( curcode == 0 )
skiptoendofitem () ;
else if ( ( curcode < 70 ) || ( curcode > 73 ) )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "This property name doesn't belong in a LIGTABLE list" ) ;
showerrorcontext () ;
}
skiptoendofitem () ;
}
else {
switch ( curcode )
{case 70 :
{
c = getbyte () ;
checktag ( c ) ;
if ( nl > 255 )
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "LIGTABLE with more than 255 commands cannot have further labels" ) ;
showerrorcontext () ;
}
else {
chartag [ c ] = 1 ;
charremainder [ c ] = nl ;
unusedlabel = true ;
}
}
break ;
case 71 :
{
ligkern [ nl ] .b0 = 0 ;
ligkern [ nl ] .b1 = getbyte () ;
ligkern [ nl ] .b2 = 0 ;
ligkern [ nl ] .b3 = getbyte () ;
if ( nl == 511 )
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "LIGTABLE should never exceed 511 LIG/KRN commands" )
;
showerrorcontext () ;
}
else nl = nl + 1 ;
unusedlabel = false ;
}
break ;
case 72 :
{
ligkern [ nl ] .b0 = 0 ;
ligkern [ nl ] .b1 = getbyte () ;
ligkern [ nl ] .b2 = 128 ;
kern [ nk ] = getfix () ;
krnptr = 0 ;
while ( kern [ krnptr ] != kern [ nk ] ) krnptr = krnptr + 1 ;
if ( krnptr == nk )
{
if ( nk < 256 )
nk = nk + 1 ;
else {
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "At most 256 different kerns are allowed" ) ;
showerrorcontext () ;
}
krnptr = 255 ;
}
}
ligkern [ nl ] .b3 = krnptr ;
if ( nl == 511 )
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "LIGTABLE should never exceed 511 LIG/KRN commands" )
;
showerrorcontext () ;
}
else nl = nl + 1 ;
unusedlabel = false ;
}
break ;
case 73 :
{
if ( nl == 0 )
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "Why STOP? You haven't started" ) ;
showerrorcontext () ;
}
else {
if ( unusedlabel )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "STOP after LABEL invalidates the label" ) ;
showerrorcontext () ;
}
{register integer for_end; c = 0 ; for_end = 255 ; if ( c
<= for_end) do
if ( ( chartag [ c ] == 1 ) && ( charremainder [ c ] == nl
) )
chartag [ c ] = 0 ;
while ( c++ < for_end ) ; }
unusedlabel = false ;
}
ligkern [ nl - 1 ] .b0 = 128 ;
}
}
break ;
}
finishtheproperty () ;
}
}
else if ( curchar == 41 )
skiptoendofitem () ;
else junkerror () ;
}
{
loc = loc - 1 ;
level = level + 1 ;
curchar = 41 ;
}
}
}
readcharinfo () {
{
c = getbyte () ;
{
if ( charsonline == 8 )
{
(void) fprintf(stdout, "%c\n", ' ' ) ;
charsonline = 1 ;
}
else {
if ( charsonline > 0 )
(void) putc(' ' , stdout);
charsonline = charsonline + 1 ;
}
printoctal ( c ) ;
}
while ( level == 1 ) {
while ( curchar == 32 ) getnext () ;
if ( curchar == 40 )
{
getname () ;
if ( curcode == 0 )
skiptoendofitem () ;
else if ( ( curcode < 51 ) || ( curcode > 56 ) )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "This property name doesn't belong in a CHARACTER list" )
;
showerrorcontext () ;
}
skiptoendofitem () ;
}
else {
switch ( curcode )
{case 51 :
charwd [ c ] = sortin ( 1 , getfix () ) ;
break ;
case 52 :
charht [ c ] = sortin ( 2 , getfix () ) ;
break ;
case 53 :
chardp [ c ] = sortin ( 3 , getfix () ) ;
break ;
case 54 :
charic [ c ] = sortin ( 4 , getfix () ) ;
break ;
case 55 :
{
checktag ( c ) ;
chartag [ c ] = 2 ;
charremainder [ c ] = getbyte () ;
}
break ;
case 56 :
{
if ( ne == 256 )
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "At most 256 VARCHAR specs are allowed" ) ;
showerrorcontext () ;
}
else {
checktag ( c ) ;
chartag [ c ] = 3 ;
charremainder [ c ] = ne ;
exten [ ne ] .b0 = 0 ;
exten [ ne ] .b1 = 0 ;
exten [ ne ] .b2 = 0 ;
exten [ ne ] .b3 = 0 ;
while ( level == 2 ) {
while ( curchar == 32 ) getnext () ;
if ( curchar == 40 )
{
getname () ;
if ( curcode == 0 )
skiptoendofitem () ;
else if ( ( curcode < 57 ) || ( curcode > 60 ) )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "This property name doesn't belong in a VARCHAR list" ) ;
showerrorcontext () ;
}
skiptoendofitem () ;
}
else {
switch ( curcode - ( 57 ) )
{case 0 :
exten [ ne ] .b0 = getbyte () ;
break ;
case 1 :
exten [ ne ] .b1 = getbyte () ;
break ;
case 2 :
exten [ ne ] .b2 = getbyte () ;
break ;
case 3 :
exten [ ne ] .b3 = getbyte () ;
break ;
}
finishtheproperty () ;
}
}
else if ( curchar == 41 )
skiptoendofitem () ;
else junkerror () ;
}
ne = ne + 1 ;
{
loc = loc - 1 ;
level = level + 1 ;
curchar = 41 ;
}
}
}
break ;
}
finishtheproperty () ;
}
}
else if ( curchar == 41 )
skiptoendofitem () ;
else junkerror () ;
}
if ( charwd [ c ] == 0 )
charwd [ c ] = sortin ( 1 , 0 ) ;
{
loc = loc - 1 ;
level = level + 1 ;
curchar = 41 ;
}
}
}
readinput () {
curchar = 32 ;
do {
while ( curchar == 32 ) getnext () ;
if ( curchar == 40 )
{
getname () ;
if ( curcode == 0 )
skiptoendofitem () ;
else if ( curcode > 11 )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "This property name doesn't belong on the outer level" ) ;
showerrorcontext () ;
}
skiptoendofitem () ;
}
else {
switch ( curcode )
{case 1 :
{
checksumspecified = true ;
readfourbytes ( 0 ) ;
}
break ;
case 2 :
{
nextd = getfix () ;
if ( ( nextd < 1048576L ) || ( nextd >= 1073741824L ) )
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "The design size must be between 1 and 1024" ) ;
showerrorcontext () ;
}
else designsize = nextd ;
}
break ;
case 3 :
{
nextd = getfix () ;
if ( nextd <= 0 )
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "The number of units per design size must be positive" )
;
showerrorcontext () ;
}
else designunits = nextd ;
}
break ;
case 4 :
readBCPL ( 8 , 40 ) ;
break ;
case 5 :
readBCPL ( 48 , 20 ) ;
break ;
case 6 :
headerbytes [ 71 ] = getbyte () ;
break ;
case 7 :
{
while ( curchar == 32 ) getnext () ;
if ( curchar == 84 )
sevenbitsafeflag = true ;
else if ( curchar == 70 )
sevenbitsafeflag = false ;
else {
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "The flag value should be \"TRUE\" or \"FALSE\"" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
break ;
case 8 :
{
c = getbyte () ;
if ( c < 18 )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "HEADER indices should be 18 or more" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
else if ( 4 * c + 4 > maxheaderbytes )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "This HEADER index is too big for my present table size" ) ;
showerrorcontext () ;
}
do {
getnext () ;
} while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ;
}
else {
while ( headerptr < 4 * c ) {
headerbytes [ headerptr ] = 0 ;
headerptr = headerptr + 1 ;
}
readfourbytes ( 4 * c ) ;
headerptr = 4 * c + 4 ;
}
}
break ;
case 9 :
{
while ( level == 1 ) {
while ( curchar == 32 ) getnext () ;
if ( curchar == 40 )
{
getname () ;
if ( curcode == 0 )
skiptoendofitem () ;
else if ( ( curcode < 20 ) || ( curcode >= 51 ) )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "This property name doesn't belong in a FONTDIMEN list" )
;
showerrorcontext () ;
}
skiptoendofitem () ;
}
else {
if ( curcode == 20 )
c = getbyte () ;
else c = curcode - 20 ;
if ( c == 0 )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "PARAMETER index must not be zero" ) ;
showerrorcontext () ;
}
skiptoendofitem () ;
}
else if ( c > maxparamwords )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "This PARAMETER index is too big for my present table size" ) ;
showerrorcontext () ;
}
skiptoendofitem () ;
}
else {
while ( np < c ) {
np = np + 1 ;
param [ np ] = 0 ;
}
param [ c ] = getfix () ;
finishtheproperty () ;
}
}
}
else if ( curchar == 41 )
skiptoendofitem () ;
else junkerror () ;
}
{
loc = loc - 1 ;
level = level + 1 ;
curchar = 41 ;
}
}
break ;
case 10 :
readligkern () ;
break ;
case 11 :
readcharinfo () ;
break ;
}
finishtheproperty () ;
}
}
else if ( ( curchar == 41 ) && ! inputhasended )
{
{
if ( charsonline > 0 )
(void) fprintf(stdout, "%c\n", ' ' ) ;
(void) Fputs(stdout, "Extra right parenthesis" ) ;
showerrorcontext () ;
}
loc = loc + 1 ;
curchar = 32 ;
}
else if ( ! inputhasended )
junkerror () ;
} while ( ! ( inputhasended ) ) ;
}
corrandcheck () {
byte c ;
short ligptr ;
byte g ;
if ( unusedlabel )
{
{register integer for_end; c = 0 ; for_end = 255 ; if ( c <= for_end) do
if ( ( chartag [ c ] == 1 ) && ( charremainder [ c ] == nl ) )
chartag [ c ] = 0 ;
while ( c++ < for_end ) ; }
(void) fprintf(stdout, "%s\n", "Last LIGTABLE LABEL was not used." ) ;
}
if ( nl > 0 )
ligkern [ nl - 1 ] .b0 = 128 ;
sevenunsafe = false ;
{register integer for_end; c = 0 ; for_end = 255 ; if ( c <= for_end) do
if ( charwd [ c ] != 0 )
switch ( chartag [ c ] )
{case 0 :
;
break ;
case 1 :
{
if ( charwd [ c ] == 0 )
{
(void) Fputs(stdout, "There's a LABEL but no CHARACTER spec for " ) ;
printoctal ( c ) ;
(void) fprintf(stdout, "%c\n", '.' ) ;
charwd [ c ] = sortin ( 1 , 0 ) ;
}
ligptr = charremainder [ c ] ;
do {
if ( ligkern [ ligptr ] .b2 < 128 )
{
{
g = ligkern [ ligptr ] .b1 ;
if ( ( g >= 128 ) && ( c < 128 ) )
sevenunsafe = true ;
if ( charwd [ g ] == 0 )
{
charwd [ g ] = sortin ( 1 , 0 ) ;
(void) fprintf(stdout, "%s%c", "LIG character generated by" , ' ' ) ;
printoctal ( c ) ;
(void) fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ;
}
}
{
g = ligkern [ ligptr ] .b3 ;
if ( ( g >= 128 ) && ( c < 128 ) )
sevenunsafe = true ;
if ( charwd [ g ] == 0 )
{
charwd [ g ] = sortin ( 1 , 0 ) ;
(void) fprintf(stdout, "%s%c", "LIG character generated by" , ' ' ) ;
printoctal ( c ) ;
(void) fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ;
}
}
}
else {
g = ligkern [ ligptr ] .b1 ;
if ( ( g >= 128 ) && ( c < 128 ) )
sevenunsafe = true ;
if ( charwd [ g ] == 0 )
{
charwd [ g ] = sortin ( 1 , 0 ) ;
(void) fprintf(stdout, "%s%c", "KRN character generated by" , ' ' ) ;
printoctal ( c ) ;
(void) fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ;
}
}
ligptr = ligptr + 1 ;
} while ( ! ( ligkern [ ligptr - 1 ] .b0 == 128 ) ) ;
}
break ;
case 2 :
{
g = charremainder [ c ] ;
if ( ( g >= 128 ) && ( c < 128 ) )
sevenunsafe = true ;
if ( charwd [ g ] == 0 )
{
charwd [ g ] = sortin ( 1 , 0 ) ;
(void) fprintf(stdout, "%s%c", "The character NEXTLARGER than" , ' ' ) ;
printoctal ( c ) ;
(void) fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ;
}
}
break ;
case 3 :
{
if ( exten [ charremainder [ c ] ] .b0 > 0 )
{
g = exten [ charremainder [ c ] ] .b0 ;
if ( ( g >= 128 ) && ( c < 128 ) )
sevenunsafe = true ;
if ( charwd [ g ] == 0 )
{
charwd [ g ] = sortin ( 1 , 0 ) ;
(void) fprintf(stdout, "%s%c", "TOP piece of character" , ' ' ) ;
printoctal ( c ) ;
(void) fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ;
}
}
if ( exten [ charremainder [ c ] ] .b1 > 0 )
{
g = exten [ charremainder [ c ] ] .b1 ;
if ( ( g >= 128 ) && ( c < 128 ) )
sevenunsafe = true ;
if ( charwd [ g ] == 0 )
{
charwd [ g ] = sortin ( 1 , 0 ) ;
(void) fprintf(stdout, "%s%c", "MID piece of character" , ' ' ) ;
printoctal ( c ) ;
(void) fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ;
}
}
if ( exten [ charremainder [ c ] ] .b2 > 0 )
{
g = exten [ charremainder [ c ] ] .b2 ;
if ( ( g >= 128 ) && ( c < 128 ) )
sevenunsafe = true ;
if ( charwd [ g ] == 0 )
{
charwd [ g ] = sortin ( 1 , 0 ) ;
(void) fprintf(stdout, "%s%c", "BOT piece of character" , ' ' ) ;
printoctal ( c ) ;
(void) fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ;
}
}
{
g = exten [ charremainder [ c ] ] .b3 ;
if ( ( g >= 128 ) && ( c < 128 ) )
sevenunsafe = true ;
if ( charwd [ g ] == 0 )
{
charwd [ g ] = sortin ( 1 , 0 ) ;
(void) fprintf(stdout, "%s%c", "REP piece of character" , ' ' ) ;
printoctal ( c ) ;
(void) fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ;
}
}
}
break ;
}
while ( c++ < for_end ) ; }
if ( sevenbitsafeflag && sevenunsafe )
(void) fprintf(stdout, "%s\n", "The font is not really seven-bit-safe!" ) ;
if ( nl > 0 )
{register integer for_end; ligptr = 0 ; for_end = nl - 1 ; if ( ligptr <=
for_end) do
if ( ligkern [ ligptr ] .b2 < 128 )
{
c = ligkern [ ligptr ] .b3 ;
if ( charwd [ c ] == 0 )
{
ligkern [ ligptr ] .b3 = 0 ;
if ( charwd [ 0 ] == 0 )
charwd [ 0 ] = sortin ( 1 , 0 ) ;
(void) fprintf(stdout, "%s%s%s", "Unused " , "LIG step" , " refers to nonexistent character " )
;
printoctal ( c ) ;
(void) fprintf(stdout, "%c\n", '!' ) ;
}
}
else {
c = ligkern [ ligptr ] .b1 ;
if ( charwd [ c ] == 0 )
{
ligkern [ ligptr ] .b1 = 0 ;
if ( charwd [ 0 ] == 0 )
charwd [ 0 ] = sortin ( 1 , 0 ) ;
(void) fprintf(stdout, "%s%s%s", "Unused " , "KRN step" , " refers to nonexistent character " )
;
printoctal ( c ) ;
(void) fprintf(stdout, "%c\n", '!' ) ;
}
}
while ( ligptr++ < for_end ) ; }
if ( ne > 0 )
{register integer for_end; g = 0 ; for_end = ne - 1 ; if ( g <= for_end) do
{
{
c = exten [ g ] .b0 ;
if ( c > 0 )
if ( charwd [ c ] == 0 )
{
exten [ g ] .b0 = 0 ;
if ( charwd [ 0 ] == 0 )
charwd [ 0 ] = sortin ( 1 , 0 ) ;
(void) fprintf(stdout, "%s%s%s", "Unused " , "VARCHAR TOP" , " refers to nonexistent character " ) ;
printoctal ( c ) ;
(void) fprintf(stdout, "%c\n", '!' ) ;
}
}
{
c = exten [ g ] .b1 ;
if ( c > 0 )
if ( charwd [ c ] == 0 )
{
exten [ g ] .b1 = 0 ;
if ( charwd [ 0 ] == 0 )
charwd [ 0 ] = sortin ( 1 , 0 ) ;
(void) fprintf(stdout, "%s%s%s", "Unused " , "VARCHAR MID" , " refers to nonexistent character " ) ;
printoctal ( c ) ;
(void) fprintf(stdout, "%c\n", '!' ) ;
}
}
{
c = exten [ g ] .b2 ;
if ( c > 0 )
if ( charwd [ c ] == 0 )
{
exten [ g ] .b2 = 0 ;
if ( charwd [ 0 ] == 0 )
charwd [ 0 ] = sortin ( 1 , 0 ) ;
(void) fprintf(stdout, "%s%s%s", "Unused " , "VARCHAR BOT" , " refers to nonexistent character " ) ;
printoctal ( c ) ;
(void) fprintf(stdout, "%c\n", '!' ) ;
}
}
{
c = exten [ g ] .b3 ;
if ( charwd [ c ] == 0 )
{
exten [ g ] .b3 = 0 ;
if ( charwd [ 0 ] == 0 )
charwd [ 0 ] = sortin ( 1 , 0 ) ;
(void) fprintf(stdout, "%s%s%s", "Unused " , "VARCHAR REP" , " refers to nonexistent character " ) ;
printoctal ( c ) ;
(void) fprintf(stdout, "%c\n", '!' ) ;
}
}
}
while ( g++ < for_end ) ; }
{register integer for_end; c = 0 ; for_end = 255 ; if ( c <= for_end) do
if ( chartag [ c ] == 2 )
{
g = charremainder [ c ] ;
while ( ( g < c ) && ( chartag [ g ] == 2 ) ) g = charremainder [ g ] ;
if ( g == c )
{
chartag [ c ] = 0 ;
(void) Fputs(stdout, "A cycle of NEXTLARGER characters has been broken at " ) ;
printoctal ( c ) ;
(void) fprintf(stdout, "%c\n", '.' ) ;
}
}
while ( c++ < for_end ) ; }
delta = shorten ( 1 , 255 ) ;
setindices ( 1 , delta ) ;
if ( delta > 0 )
{
(void) fprintf(stdout, "%s%s%s", "I had to round some " , "width" , "s by" ) ;
printreal ( ( ( ( delta + 1 ) / 2 ) / ((double) 1048576L ) ) , 1 , 7 ) ;
(void) fprintf(stdout, "%s\n", " units." ) ;
}
delta = shorten ( 2 , 15 ) ;
setindices ( 2 , delta ) ;
if ( delta > 0 )
{
(void) fprintf(stdout, "%s%s%s", "I had to round some " , "height" , "s by" ) ;
printreal ( ( ( ( delta + 1 ) / 2 ) / ((double) 1048576L ) ) , 1 , 7 ) ;
(void) fprintf(stdout, "%s\n", " units." ) ;
}
delta = shorten ( 3 , 15 ) ;
setindices ( 3 , delta ) ;
if ( delta > 0 )
{
(void) fprintf(stdout, "%s%s%s", "I had to round some " , "depth" , "s by" ) ;
printreal ( ( ( ( delta + 1 ) / 2 ) / ((double) 1048576L ) ) , 1 , 7 ) ;
(void) fprintf(stdout, "%s\n", " units." ) ;
}
delta = shorten ( 4 , 63 ) ;
setindices ( 4 , delta ) ;
if ( delta > 0 )
{
(void) fprintf(stdout, "%s%s%s", "I had to round some " , "italic correction" , "s by" ) ;
printreal ( ( ( ( delta + 1 ) / 2 ) / ((double) 1048576L ) ) , 1 , 7 ) ;
(void) fprintf(stdout, "%s\n", " units." ) ;
}
}
main_body() {
initialize () ;
nameenter () ;
readinput () ;
(void) fprintf(stdout, "%c\n", '.' ) ;
corrandcheck () ;
lh = headerptr / 4 ;
notfound = true ;
bc = 0 ;
while ( notfound ) if ( ( charwd [ bc ] > 0 ) || ( bc == 255 ) )
notfound = false ;
else bc = bc + 1 ;
notfound = true ;
ec = 255 ;
while ( notfound ) if ( ( charwd [ ec ] > 0 ) || ( ec == 0 ) )
notfound = false ;
else ec = ec - 1 ;
if ( bc > ec )
bc = 1 ;
memory [ 1 ] = memory [ 1 ] + 1 ;
memory [ 2 ] = memory [ 2 ] + 1 ;
memory [ 3 ] = memory [ 3 ] + 1 ;
memory [ 4 ] = memory [ 4 ] + 1 ;
lf = 6 + lh + ( ec - bc + 1 ) + memory [ 1 ] + memory [ 2 ] + memory [ 3 ] +
memory [ 4 ] + nl + nk + ne + np ;
putbyte ( ( lf ) / 256 , tfmfile ) ;
putbyte ( ( lf ) % 256 , tfmfile ) ;
putbyte ( ( lh ) / 256 , tfmfile ) ;
putbyte ( ( lh ) % 256 , tfmfile ) ;
putbyte ( ( bc ) / 256 , tfmfile ) ;
putbyte ( ( bc ) % 256 , tfmfile ) ;
putbyte ( ( ec ) / 256 , tfmfile ) ;
putbyte ( ( ec ) % 256 , tfmfile ) ;
putbyte ( ( memory [ 1 ] ) / 256 , tfmfile ) ;
putbyte ( ( memory [ 1 ] ) % 256 , tfmfile ) ;
putbyte ( ( memory [ 2 ] ) / 256 , tfmfile ) ;
putbyte ( ( memory [ 2 ] ) % 256 , tfmfile ) ;
putbyte ( ( memory [ 3 ] ) / 256 , tfmfile ) ;
putbyte ( ( memory [ 3 ] ) % 256 , tfmfile ) ;
putbyte ( ( memory [ 4 ] ) / 256 , tfmfile ) ;
putbyte ( ( memory [ 4 ] ) % 256 , tfmfile ) ;
putbyte ( ( nl ) / 256 , tfmfile ) ;
putbyte ( ( nl ) % 256 , tfmfile ) ;
putbyte ( ( nk ) / 256 , tfmfile ) ;
putbyte ( ( nk ) % 256 , tfmfile ) ;
putbyte ( ( ne ) / 256 , tfmfile ) ;
putbyte ( ( ne ) % 256 , tfmfile ) ;
putbyte ( ( np ) / 256 , tfmfile ) ;
putbyte ( ( np ) % 256 , tfmfile ) ;
if ( ! checksumspecified )
{
curbytes .b0 = bc ;
curbytes .b1 = ec ;
curbytes .b2 = bc ;
curbytes .b3 = ec ;
{register integer for_end; c = bc ; for_end = ec ; if ( c <= for_end) do
if ( charwd [ c ] > 0 )
{
tempwidth = memory [ charwd [ c ] ] ;
if ( designunits != 1048576L )
tempwidth = trunc ( ( tempwidth / ((double) designunits ) ) *
1048576.0 ) ;
tempwidth = tempwidth + ( c + 4 ) * 4194304L ;
curbytes .b0 = ( curbytes .b0 + curbytes .b0 + tempwidth ) % 255 ;
curbytes .b1 = ( curbytes .b1 + curbytes .b1 + tempwidth ) % 253 ;
curbytes .b2 = ( curbytes .b2 + curbytes .b2 + tempwidth ) % 251 ;
curbytes .b3 = ( curbytes .b3 + curbytes .b3 + tempwidth ) % 247 ;
}
while ( c++ < for_end ) ; }
headerbytes [ 0 ] = curbytes .b0 ;
headerbytes [ 1 ] = curbytes .b1 ;
headerbytes [ 2 ] = curbytes .b2 ;
headerbytes [ 3 ] = curbytes .b3 ;
}
headerbytes [ 4 ] = designsize / 16777216L ;
headerbytes [ 5 ] = ( designsize / 65536L ) % 256 ;
headerbytes [ 6 ] = ( designsize / 256 ) % 256 ;
headerbytes [ 7 ] = designsize % 256 ;
if ( ! sevenunsafe )
headerbytes [ 68 ] = 128 ;
{register integer for_end; j = 0 ; for_end = headerptr - 1 ; if ( j <=
for_end) do
putbyte ( headerbytes [ j ] , tfmfile ) ;
while ( j++ < for_end ) ; }
index [ 0 ] = 0 ;
{register integer for_end; c = bc ; for_end = ec ; if ( c <= for_end) do
{
putbyte ( index [ charwd [ c ] ] , tfmfile ) ;
putbyte ( index [ charht [ c ] ] * 16 + index [ chardp [ c ] ] , tfmfile
) ;
putbyte ( index [ charic [ c ] ] * 4 + chartag [ c ] , tfmfile ) ;
putbyte ( charremainder [ c ] , tfmfile ) ;
}
while ( c++ < for_end ) ; }
{register integer for_end; q = 1 ; for_end = 4 ; if ( q <= for_end) do
{
putbyte ( 0 , tfmfile ) ;
putbyte ( 0 , tfmfile ) ;
putbyte ( 0 , tfmfile ) ;
putbyte ( 0 , tfmfile ) ;
p = link [ q ] ;
while ( p > 0 ) {
outscaled ( memory [ p ] ) ;
p = link [ p ] ;
}
}
while ( q++ < for_end ) ; }
if ( nl > 0 )
{register integer for_end; ligptr = 0 ; for_end = nl - 1 ; if ( ligptr <=
for_end) do
{
putbyte ( ligkern [ ligptr ] .b0 , tfmfile ) ;
putbyte ( ligkern [ ligptr ] .b1 , tfmfile ) ;
putbyte ( ligkern [ ligptr ] .b2 , tfmfile ) ;
putbyte ( ligkern [ ligptr ] .b3 , tfmfile ) ;
}
while ( ligptr++ < for_end ) ; }
if ( nk > 0 )
{register integer for_end; krnptr = 0 ; for_end = nk - 1 ; if ( krnptr <=
for_end) do
outscaled ( kern [ krnptr ] ) ;
while ( krnptr++ < for_end ) ; }
if ( ne > 0 )
{register integer for_end; c = 0 ; for_end = ne - 1 ; if ( c <= for_end) do
{
putbyte ( exten [ c ] .b0 , tfmfile ) ;
putbyte ( exten [ c ] .b1 , tfmfile ) ;
putbyte ( exten [ c ] .b2 , tfmfile ) ;
putbyte ( exten [ c ] .b3 , tfmfile ) ;
}
while ( c++ < for_end ) ; }
{register integer for_end; parptr = 1 ; for_end = np ; if ( parptr <=
for_end) do
{
if ( parptr == 1 )
{
if ( param [ 1 ] < 0 )
{
param [ 1 ] = param [ 1 ] + 1073741824L ;
putbyte ( ( param [ 1 ] / 16777216L ) + 192 , tfmfile ) ;
}
else putbyte ( param [ 1 ] / 16777216L , tfmfile ) ;
putbyte ( ( param [ 1 ] / 65536L ) % 256 , tfmfile ) ;
putbyte ( ( param [ 1 ] / 256 ) % 256 , tfmfile ) ;
putbyte ( param [ 1 ] % 256 , tfmfile ) ;
}
else outscaled ( param [ parptr ] ) ;
}
while ( parptr++ < for_end ) ; }
(void) fprintf(stdout, "%c\n", ' ' ) ;
}