|
|
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: 12612 (0x3144)
Types: TextFile
Names: »pktype.c«
└─⟦060c9c824⟧ Bits:30007080 DKUUG TeX 2/12/89
└─⟦this⟧ »./tex82/mfware/CMFware/pktype.c«
/* pktype.c by tomas rokicki */
#include <stdio.h>
#define namelength 80
#define terminallinelength 132
#define incr(a) a++
#define decr(a) a--
#define true (1)
#define false (0)
#define round(a) ((int)(a+.5))
#define sendout(a,b) zsendout((boolean)(a),(integer)(b))
typedef int integer ;
typedef unsigned char quarterword ;
typedef char boolean ;
typedef float real ;
typedef quarterword ASCIIcode ;
typedef FILE *textfile ;
typedef quarterword eightbits ;
typedef FILE *bytefile ;
ASCIIcode xord[128] ;
char xchr[256] ;
textfile typfile ;
bytefile pkfile ;
char pkname[81] ;
integer pkloc ;
integer termpos ;
integer magnification ;
integer designsize ;
integer checksum ;
integer hppp, vppp ;
integer i, j ;
integer flagbyte ;
integer endofpacket ;
integer width, height ;
integer xoff, yoff ;
integer tfmwidth ;
integer tfms[256] ;
integer dx, dy ;
integer dxs[256], dys[256] ;
boolean status[256] ;
integer dynf ;
integer car ;
integer packetlength ;
eightbits inputbyte ;
eightbits bitweight ;
eightbits nybble ;
integer repeatcount ;
integer rowsleft ;
boolean turnon ;
integer hbit ;
integer count ;
integer gargc ;
char **gargv ;
initialize () { integer i ;
for ( i = 0 ; i <= 31 ; i ++ ) xchr [ i ] = '?' ;
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 ] = '~' ;
for ( i = 127 ; i <= 255 ; i ++ ) xchr [ i ] = '?' ;
for ( i = 0 ; i <= 127 ; i ++ ) xord [ ( i ) ] = 32 ;
for ( i = 32 ; i <= 126 ; i ++ ) xord [ xchr [ i ] ] = i ;
}
jumpout () { exit ( 1 ) ;
}
opentypfile () { ;
}
openpkfile () { pkfile = fopen ( pkname , "r" ) ;
if (pkfile==NULL) {
printf("%s does not exist\n", pkname) ;
jumpout() ;
}
pkloc = 0 ;
}
eightbits pkbyte () { eightbits temp ;
incr ( pkloc ) ;
return ( getc ( pkfile ) ) ;
}
integer get16 () { integer a ;
a = pkbyte () ;
return ( a * 256 + pkbyte () ) ;
}
integer get32 () { integer a ;
a = get16 () ;
if ( a > 32767 ) a = a - 65536 ;
return ( a * 65536 + get16 () ) ;
}
integer getnyb () { eightbits temp ;
if ( bitweight == 0 )
{ inputbyte = pkbyte () ;
bitweight = 16 ;
}
temp = inputbyte / bitweight ;
inputbyte = inputbyte - temp * bitweight ;
bitweight = bitweight / 16 ;
return ( temp ) ;
}
boolean getbit () { boolean temp ;
bitweight = bitweight / 2 ;
if ( bitweight == 0 )
{ inputbyte = pkbyte () ;
bitweight = 128 ;
}
temp = inputbyte >= bitweight ;
if ( temp ) inputbyte = inputbyte - bitweight ;
return ( temp ) ;
}
zsendout ( repeatcount , value )
boolean repeatcount ;
integer value ;
{ integer i, len ;
i = 10 ;
len = 1 ;
while ( value >= i )
{ incr ( len ) ;
i = i * 10 ;
}
if ( repeatcount || ! turnon ) len = len + 2 ;
if ( termpos + len > 78 )
{ termpos = len + 2 ;
printf ( "\n" ) ;
printf ( " " ) ;
}
else termpos = termpos + len ;
if ( repeatcount ) printf ( "[%d]" , value ) ;
else if ( turnon ) printf ( "%d", value ) ;
else printf ( "(%d)" , value ) ;
}
integer pkpackednum () { integer i, j, k ;
i = getnyb () ;
if ( i == 0 )
{ do { j = getnyb () ;
incr ( i ) ;
} while ( ! ( j != 0 ) ) ;
while ( i > 0 )
{ j = j * 16 + getnyb () ;
decr ( i ) ;
}
return ( j - 15 + ( 13 - dynf ) * 16 + dynf ) ;
}
else if ( i <= dynf ) return ( i ) ;
else if ( i < 14 ) return ( ( i - dynf - 1 ) * 16 + getnyb () + dynf + 1
) ;
else
{ if ( repeatcount != 0 )
{ ;
printf ( " Second repeat count for this row!\n" ) ;
jumpout () ;
}
if ( i == 14 ) repeatcount = pkpackednum () ;
else repeatcount = 1 ;
sendout ( true , repeatcount ) ;
return ( pkpackednum () ) ;
}
}
skipspecials () { integer i, j, k ;
do { flagbyte = pkbyte () ;
if ( flagbyte >= 240 ) switch ( flagbyte )
{ case 240 :
case 241 :
case 242 :
case 243 :
{ printf ( "%d: Special: '" , pkloc - 1 ) ;
i = 0 ;
for ( j = 240 ; j <= flagbyte ; j ++ ) i = 256 * i + pkbyte () ;
for ( j = 1 ; j <= i ; j ++ ) putchar ( xchr [ pkbyte () ] ) ;
printf ( "'\n" ) ;
}
break ;
case 244 :
printf ( "%d: Num special: %d\n" , pkloc - 1 , get32 () ) ;
break ;
case 245 :
printf ( "%d: Postamble\n" , pkloc - 1 ) ;
break ;
case 246 :
printf ( "%d: No op\n" , pkloc - 1 ) ;
break ;
case 247 :
case 248 :
case 249 :
case 250 :
case 251 :
case 252 :
case 253 :
case 254 :
case 255 :
{ ;
printf ( " Unexpected %d!\n" , flagbyte ) ;
jumpout () ;
}
break ;
} } while ( ! ( ( flagbyte < 240 ) || ( flagbyte == 245 ) ) ) ;
}
dialog () { if ( gargc != 2 )
{ ;
printf ( " Usage: pktype pkfile\n" ) ;
jumpout () ;
}
strcpy ( pkname , gargv [ 1 ] ) ;
}
main (argc, argv)
int argc ;
char *argv[] ;
{ gargc = argc ;
gargv = argv ;
initialize () ;
dialog () ;
openpkfile () ;
opentypfile () ;
printf ( "This is PKtype, C Version 2.3\n" ) ;
printf ( "Input file: %s\n" , pkname ) ;
if ( pkbyte () != 247 )
{ ;
printf ( " Bad pk file! pre command missing.\n" ) ;
jumpout () ;
}
if ( pkbyte () != 89 )
{ ;
printf ( " Wrong version of packed file!.\n" ) ;
jumpout () ;
}
j = pkbyte () ;
printf ( "'" ) ;
for ( i = 1 ; i <= j ; i ++ ) putchar ( xchr [ pkbyte () ] ) ;
printf ( "'\n" ) ;
designsize = get32 () ;
printf ( "Design size = %d\n" , designsize ) ;
checksum = get32 () ;
printf ( "Checksum = %d\n" , checksum ) ;
hppp = get32 () ;
vppp = get32 () ;
printf ( "Resolution: horizontal = %d vertical = %d" , hppp , vppp ) ;
magnification = round ( hppp * 72.27 / 65536 ) ;
printf ( " (%d dpi)\n" , magnification ) ;
if ( hppp != vppp ) ;
skipspecials () ;
while ( flagbyte != 245 )
{ printf ( "%d: Flag byte = %d" , pkloc - 1 , flagbyte ) ;
dynf = flagbyte / 16 ;
flagbyte = flagbyte % 16 ;
turnon = flagbyte >= 8 ;
if ( turnon ) flagbyte = flagbyte - 8 ;
if ( flagbyte == 7 )
{ packetlength = get32 () ;
car = get32 () ;
endofpacket = packetlength + pkloc ;
packetlength = packetlength + 9 ;
tfmwidth = get32 () ;
dx = get32 () ;
dy = get32 () ;
width = get32 () ;
height = get32 () ;
xoff = get32 () ;
yoff = get32 () ;
}
else if ( flagbyte > 3 )
{ packetlength = ( flagbyte - 4 ) * 65536 + get16 () ;
car = pkbyte () ;
endofpacket = packetlength + pkloc ;
packetlength = packetlength + 4 ;
i = pkbyte () ;
tfmwidth = i * 65536 + get16 () ;
dx = get16 () * 65536 ;
dy = 0 ;
width = get16 () ;
height = get16 () ;
xoff = get16 () ;
yoff = get16 () ;
if ( xoff > 32767 ) xoff = xoff - 65536 ;
if ( yoff > 32767 ) yoff = yoff - 65536 ;
}
else
{ packetlength = flagbyte * 256 + pkbyte () ;
car = pkbyte () ;
endofpacket = packetlength + pkloc ;
packetlength = packetlength + 3 ;
i = pkbyte () ;
tfmwidth = i * 65536 + get16 () ;
dx = pkbyte () * 65536 ;
dy = 0 ;
width = pkbyte () ;
height = pkbyte () ;
xoff = pkbyte () ;
yoff = pkbyte () ;
if ( xoff > 127 ) xoff = xoff - 256 ;
if ( yoff > 127 ) yoff = yoff - 256 ;
}
printf ( " Character = %d Packet length = %d\n" , car , packetlength
) ;
printf ( " Dynamic packing variable = %d\n" , dynf ) ;
printf ( " TFM width = %d dx = %d" , tfmwidth , dx ) ;
if ( dy != 0 ) printf ( " dy = %d\n" , dy ) ;
else printf ( "\n" ) ;
printf ( " Height = %d Width = %d X-offset = %d Y-offset = %d\n" ,
height , width , xoff , yoff ) ;
bitweight = 0 ;
if ( dynf == 14 )
{ for ( i = 1 ; i <= height ; i ++ )
{ printf ( " " ) ;
for ( j = 1 ; j <= width ; j ++ ) if ( getbit () ) printf ( "*" )
;
else printf ( "." ) ;
printf ( "\n" ) ;
}
}
else
{ termpos = 2 ;
printf ( " " ) ;
rowsleft = height ;
hbit = width ;
repeatcount = 0 ;
while ( rowsleft > 0 )
{ count = pkpackednum () ;
sendout ( false , count ) ;
if ( count >= hbit )
{ rowsleft = rowsleft - repeatcount - 1 ;
repeatcount = 0 ;
count = count - hbit ;
hbit = width ;
rowsleft = rowsleft - count / width ;
count = count % width ;
}
hbit = hbit - count ;
turnon = ! turnon ;
}
printf ( "\n" ) ;
if ( ( rowsleft != 0 ) || ( hbit != width ) )
{ ;
printf ( " Bad pk file---more bits than required!\n" ) ;
jumpout () ;
}
}
if ( endofpacket != pkloc )
{ ;
printf ( " Bad pk file! Bad packet length.\n" ) ;
jumpout () ;
}
skipspecials () ;
}
j = 0 ;
i = pkbyte () ;
while ( ! feof ( pkfile ) )
{ if ( i != 246 )
{ ;
printf ( " Bad byte at end of file: %d\n" , i ) ;
jumpout () ;
}
incr(j) ;
printf ( "%d: No op\n" , pkloc - 1 ) ;
i = pkbyte () ;
}
pkloc -- ;
printf ( "%d bytes read from packed file.\n" , pkloc ) ;
lab9999 : ;
}