inline virtual size_t receive () { void *data; size_t size; zmq::free_fn *ffn; bool ok = kernel.receive (&data, &size, &ffn); assert (ok); if (ffn && data) ffn (data); return size; }
/* 30 */ unsigned char cc ; unsigned char zz ; unsigned char y ; integer key ; integer t ; if ( hashptr == hashsize ) goto lab30 ; k = 4 * ( ligkernbase + ( i ) ) ; y = tfm [k + 1 ]; t = tfm [k + 2 ]; cc = 0 ; zz = tfm [k + 3 ]; if ( t >= 128 ) zz = y ; else { switch ( t ) {case 0 : case 6 : ; break ; case 5 : case 11 : zz = y ; break ; case 1 : case 7 : cc = 1 ; break ; case 2 : cc = 2 ; break ; case 3 : cc = 3 ; break ; } } key = 256 * c + y + 1 ; h = ( 1009 * key ) % hashsize ; while ( hash [h ]> 0 ) { if ( hash [h ]<= key ) { if ( hash [h ]== key ) goto lab30 ; t = hash [h ]; hash [h ]= key ; key = t ; t = classvar [h ]; classvar [h ]= cc ; cc = t ; t = ligz [h ]; ligz [h ]= zz ; zz = t ; } if ( h > 0 ) h = h - 1 ; else h = hashsize ; } hash [h ]= key ; classvar [h ]= cc ; ligz [h ]= zz ; hashptr = hashptr + 1 ; hashlist [hashptr ]= h ; lab30: ; } #ifdef notdef indextype zffn ( indextype h , indextype x , indextype y ) { register indextype Result; ; return Result ; } #endif /* notdef */ indextype zeval ( indextype x , indextype y ) { register indextype Result; integer key ; key = 256 * x + y + 1 ; h = ( 1009 * key ) % hashsize ; while ( hash [h ]> key ) if ( h > 0 ) h = h - 1 ; else h = hashsize ; if ( hash [h ]< key ) Result = y ; else Result = ffn ( h , x , y ) ; return Result ; }
void mainbody( void ) { initialize () ; if ( ! organize () ) uexit ( 1 ) ; dosimplethings () ; if ( nl > 0 ) { {register integer for_end; ai = 0 ;for_end = nl - 1 ; if ( ai <= for_end) do activity [ai ]= 0 ; while ( ai++ < for_end ) ;} if ( tfm [4 * ( ligkernbase + ( 0 ) ) ]== 255 ) { left () ; Fputs ( plfile , "BOUNDARYCHAR" ) ; boundarychar = tfm [4 * ( ligkernbase + ( 0 ) ) + 1 ]; outchar ( boundarychar ) ; right () ; activity [0 ]= 1 ; } if ( tfm [4 * ( ligkernbase + ( nl - 1 ) ) ]== 255 ) { r = 256 * tfm [4 * ( ligkernbase + ( nl - 1 ) ) + 2 ]+ tfm [4 * ( ligkernbase + ( nl - 1 ) ) + 3 ]; if ( r >= nl ) { perfect = false ; { putc ( ' ' , stderr ); putc ( '\n', stderr ); } Fputs ( stderr , "Ligature/kern starting index for boundarychar is too large;" ) ; fprintf ( stderr , "%s\n", "so I removed it." ) ; } else { labelptr = 1 ; labeltable [1 ].cc = 256 ; labeltable [1 ].rr = r ; bcharlabel = r ; activity [r ]= 2 ; } activity [nl - 1 ]= 1 ; } } {register integer for_end; c = bc ;for_end = ec ; if ( c <= for_end) do if ( ( tfm [4 * ( charbase + c ) + 2 ]% 4 ) == 1 ) { r = tfm [4 * ( charbase + c ) + 3 ]; if ( r < nl ) { if ( tfm [4 * ( ligkernbase + ( r ) ) ]> 128 ) { r = 256 * tfm [4 * ( ligkernbase + ( r ) ) + 2 ]+ tfm [4 * ( ligkernbase + ( r ) ) + 3 ]; if ( r < nl ) { if ( activity [tfm [4 * ( charbase + c ) + 3 ]]== 0 ) activity [tfm [4 * ( charbase + c ) + 3 ]]= 1 ; } } } if ( r >= nl ) { perfect = false ; { putc ( ' ' , stderr ); putc ( '\n', stderr ); } Fputs ( stderr , "Ligature/kern starting index for character " ) ; printoctal ( c ) ; fprintf ( stderr , "%s\n", " is too large;" ) ; fprintf ( stderr , "%s\n", "so I removed it." ) ; tfm [4 * ( charbase + c ) + 2 ]= 4 * ( tfm [4 * ( charbase + c ) + 2 ]/ 4 ) + 0 ; } else { sortptr = labelptr ; while ( labeltable [sortptr ].rr > r ) { labeltable [sortptr + 1 ]= labeltable [sortptr ]; sortptr = sortptr - 1 ; } labeltable [sortptr + 1 ].cc = c ; labeltable [sortptr + 1 ].rr = r ; labelptr = labelptr + 1 ; activity [r ]= 2 ; } } while ( c++ < for_end ) ;} labeltable [labelptr + 1 ].rr = ligsize ; if ( nl > 0 ) { left () ; Fputs ( plfile , "LIGTABLE" ) ; outln () ; {register integer for_end; ai = 0 ;for_end = nl - 1 ; if ( ai <= for_end) do if ( activity [ai ]== 2 ) { r = tfm [4 * ( ligkernbase + ( ai ) ) ]; if ( r < 128 ) { r = r + ai + 1 ; if ( r >= nl ) { { perfect = false ; if ( charsonline > 0 ) { putc ( ' ' , stderr ); putc ( '\n', stderr ); } charsonline = 0 ; fprintf ( stderr , "%s%s%ld%s\n", "Bad TFM file: " , "Ligature/kern step " , (long)ai , " skips too far;" ) ; } fprintf ( stderr , "%s\n", "I made it stop." ) ; tfm [4 * ( ligkernbase + ( ai ) ) ]= 128 ; } else activity [r ]= 2 ; } } while ( ai++ < for_end ) ;} sortptr = 1 ; {register integer for_end; acti = 0 ;for_end = nl - 1 ; if ( acti <= for_end) do if ( activity [acti ]!= 1 ) { i = acti ; if ( activity [i ]== 0 ) { if ( level == 1 ) { left () ; Fputs ( plfile , "COMMENT THIS PART OF THE PROGRAM IS NEVER USED!" ) ; outln () ; } } else if ( level == 2 ) right () ; while ( i == labeltable [sortptr ].rr ) { left () ; Fputs ( plfile , "LABEL" ) ; if ( labeltable [sortptr ].cc == 256 ) Fputs ( plfile , " BOUNDARYCHAR" ) ; else outchar ( labeltable [sortptr ].cc ) ; right () ; sortptr = sortptr + 1 ; } { k = 4 * ( ligkernbase + ( i ) ) ; if ( tfm [k ]> 128 ) { if ( 256 * tfm [k + 2 ]+ tfm [k + 3 ]>= nl ) { perfect = false ; if ( charsonline > 0 ) { putc ( ' ' , stderr ); putc ( '\n', stderr ); } charsonline = 0 ; fprintf ( stderr , "%s%s\n", "Bad TFM file: " , "Ligature unconditional stop command address is too big." ) ; } } else if ( tfm [k + 2 ]>= 128 ) { if ( ( ( tfm [k + 1 ]< bc ) || ( tfm [k + 1 ]> ec ) || ( tfm [ 4 * ( charbase + tfm [k + 1 ]) ]== 0 ) ) ) { if ( tfm [k + 1 ]!= boundarychar ) { perfect = false ; if ( charsonline > 0 ) { putc ( ' ' , stderr ); putc ( '\n', stderr ); } charsonline = 0 ; fprintf ( stderr , "%s%s%s", "Bad TFM file: " , "Kern step for" , " nonexistent character " ) ; printoctal ( tfm [k + 1 ]) ; { putc ( '.' , stderr ); putc ( '\n', stderr ); } tfm [k + 1 ]= bc ; } } left () ; Fputs ( plfile , "KRN" ) ; outchar ( tfm [k + 1 ]) ; r = 256 * ( tfm [k + 2 ]- 128 ) + tfm [k + 3 ]; if ( r >= nk ) { { perfect = false ; if ( charsonline > 0 ) { putc ( ' ' , stderr ); putc ( '\n', stderr ); } charsonline = 0 ; fprintf ( stderr , "%s%s\n", "Bad TFM file: " , "Kern index too large." ) ; } Fputs ( plfile , " R 0.0" ) ; } else outfix ( 4 * ( kernbase + r ) ) ; right () ; } else { if ( ( ( tfm [k + 1 ]< bc ) || ( tfm [k + 1 ]> ec ) || ( tfm [ 4 * ( charbase + tfm [k + 1 ]) ]== 0 ) ) ) { if ( tfm [k + 1 ]!= boundarychar ) { perfect = false ; if ( charsonline > 0 ) { putc ( ' ' , stderr ); putc ( '\n', stderr ); } charsonline = 0 ; fprintf ( stderr , "%s%s%s", "Bad TFM file: " , "Ligature step for" , " nonexistent character " ) ; printoctal ( tfm [k + 1 ]) ; { putc ( '.' , stderr ); putc ( '\n', stderr ); } tfm [k + 1 ]= bc ; } } if ( ( ( tfm [k + 3 ]< bc ) || ( tfm [k + 3 ]> ec ) || ( tfm [ 4 * ( charbase + tfm [k + 3 ]) ]== 0 ) ) ) { perfect = false ; if ( charsonline > 0 ) { putc ( ' ' , stderr ); putc ( '\n', stderr ); } charsonline = 0 ; fprintf ( stderr , "%s%s%s", "Bad TFM file: " , "Ligature step produces the" , " nonexistent character " ) ; printoctal ( tfm [k + 3 ]) ; { putc ( '.' , stderr ); putc ( '\n', stderr ); } tfm [k + 3 ]= bc ; } left () ; r = tfm [k + 2 ]; if ( ( r == 4 ) || ( ( r > 7 ) && ( r != 11 ) ) ) { fprintf ( stderr , "%s\n", "Ligature step with nonstandard code changed to LIG" ) ; r = 0 ; tfm [k + 2 ]= 0 ; } if ( r % 4 > 1 ) putc ( '/' , plfile ); Fputs ( plfile , "LIG" ) ; if ( odd ( r ) ) putc ( '/' , plfile ); while ( r > 3 ) { putc ( '>' , plfile ); r = r - 4 ; } outchar ( tfm [k + 1 ]) ; outchar ( tfm [k + 3 ]) ; right () ; } if ( tfm [k ]> 0 ) { if ( level == 1 ) { if ( tfm [k ]>= 128 ) Fputs ( plfile , "(STOP)" ) ; else { count = 0 ; {register integer for_end; ai = i + 1 ;for_end = i + tfm [k ]; if ( ai <= for_end) do if ( activity [ai ]== 2 ) count = count + 1 ; while ( ai++ < for_end ) ;} fprintf ( plfile , "%s%ld%c", "(SKIP D " , (long)count , ')' ) ; } outln () ; } } } } while ( acti++ < for_end ) ;} if ( level == 2 ) right () ; right () ; hashptr = 0 ; yligcycle = 256 ; {register integer for_end; hh = 0 ;for_end = hashsize ; if ( hh <= for_end) do hash [hh ]= 0 ; while ( hh++ < for_end ) ;} {register integer for_end; c = bc ;for_end = ec ; if ( c <= for_end) do if ( ( tfm [4 * ( charbase + c ) + 2 ]% 4 ) == 1 ) { i = tfm [4 * ( charbase + c ) + 3 ]; if ( tfm [4 * ( ligkernbase + ( i ) ) ]> 128 ) i = 256 * tfm [4 * ( ligkernbase + ( i ) ) + 2 ]+ tfm [4 * ( ligkernbase + ( i ) ) + 3 ]; do { hashinput () ; k = tfm [4 * ( ligkernbase + ( i ) ) ]; if ( k >= 128 ) i = nl ; else i = i + 1 + k ; } while ( ! ( i >= nl ) ) ; } while ( c++ < for_end ) ;} if ( bcharlabel < nl ) { c = 256 ; i = bcharlabel ; do { hashinput () ; k = tfm [4 * ( ligkernbase + ( i ) ) ]; if ( k >= 128 ) i = nl ; else i = i + 1 + k ; } while ( ! ( i >= nl ) ) ; } if ( hashptr == hashsize ) { fprintf ( stderr , "%s\n", "Sorry, I haven't room for so many ligature/kern pairs!" ) ; uexit ( 1 ) ; } {register integer for_end; hh = 1 ;for_end = hashptr ; if ( hh <= for_end) do { r = hashlist [hh ]; if ( classvar [r ]> 0 ) r = ffn ( r , ( hash [r ]- 1 ) / 256 , ( hash [r ]- 1 ) % 256 ) ; } while ( hh++ < for_end ) ;} if ( yligcycle < 256 ) { Fputs ( stderr , "Infinite ligature loop starting with " ) ; if ( xligcycle == 256 ) Fputs ( stderr , "boundary" ) ; else printoctal ( xligcycle ) ; Fputs ( stderr , " and " ) ; printoctal ( yligcycle ) ; { putc ( '!' , stderr ); putc ( '\n', stderr ); } Fputs ( plfile , "(INFINITE LIGATURE LOOP MUST BE BROKEN!)" ) ; uexit ( 1 ) ; } } if ( ne > 0 ) {register integer for_end; c = 0 ;for_end = ne - 1 ; if ( c <= for_end) do {register integer for_end; d = 0 ;for_end = 3 ; if ( d <= for_end) do { k = 4 * ( extenbase + c ) + d ; if ( ( tfm [k ]> 0 ) || ( d == 3 ) ) { if ( ( ( tfm [k ]< bc ) || ( tfm [k ]> ec ) || ( tfm [4 * ( charbase + tfm [k ]) ]== 0 ) ) ) { { perfect = false ; if ( charsonline > 0 ) { putc ( ' ' , stderr ); putc ( '\n', stderr ); } charsonline = 0 ; fprintf ( stderr , "%s%s%s", "Bad TFM file: " , "Extensible recipe involves the" , " nonexistent character " ) ; printoctal ( tfm [k ]) ; { putc ( '.' , stderr ); putc ( '\n', stderr ); } } if ( d < 3 ) tfm [k ]= 0 ; } } } while ( d++ < for_end ) ;} while ( c++ < for_end ) ;} docharacters () ; if ( verbose ) { putc ( '.' , stderr ); putc ( '\n', stderr ); } if ( level != 0 ) fprintf ( stderr , "%s\n", "This program isn't working!" ) ; if ( ! perfect ) { Fputs ( plfile , "(COMMENT THE TFM FILE WAS BAD, SO THE DATA HAS BEEN CHANGED!)" ) ; putc ('\n', plfile ); } }