summaryrefslogtreecommitdiff
path: root/Build/source/texk/ps2pk/pkin.c
diff options
context:
space:
mode:
authorDenis Bitouzé <dbitouze@wanadoo.fr>2021-02-25 18:23:07 +0000
committerDenis Bitouzé <dbitouze@wanadoo.fr>2021-02-25 18:23:07 +0000
commitc6101f91d071883b48b1b4b51e5eba0f36d9a78d (patch)
tree1bf7f5a881d7a4f5c5bf59d0b2821943dd822372 /Build/source/texk/ps2pk/pkin.c
parent07ee7222e389b0777456b427a55c22d0e6ffd267 (diff)
French translation for tlmgr updated
git-svn-id: svn://tug.org/texlive/trunk@57912 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/ps2pk/pkin.c')
-rw-r--r--Build/source/texk/ps2pk/pkin.c435
1 files changed, 0 insertions, 435 deletions
diff --git a/Build/source/texk/ps2pk/pkin.c b/Build/source/texk/ps2pk/pkin.c
deleted file mode 100644
index be295a00b48..00000000000
--- a/Build/source/texk/ps2pk/pkin.c
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
- * NAME
- * pkin.c - implementation of readchar()
- * DESCRIPTION
- * This implementation of readchar() uses parts of the program dvips
- * written by Tomas Rokicki--the inventor of the pkformat--(loadfont.c,
- * download.c and unpack.c). Dvips in turn is derived from pktype.
- * Pktype(TeX) is described in debt in ``The PKtype processor'',
- * which is available as pktype.weave as part of the METAFONTware.
- * What was needed to implement readchar() is rearranged in pkfile.c to
- * get more modularity in the style of MODULA2.
- * REDESIGN
- * Piet Tutelaers
- */
-
-#ifdef HAVE_CONFIG_H
-#include "c-auto.h"
-#endif
-
-#ifdef DEBUG
-#include <stdio.h>
-#endif
-
-#include <stdlib.h> /* malloc() */
-#include "basics.h" /* basic definitions */
-#include "pkin.h"
-
-/*
- * Now we have some routines to get stuff from the pk file. pkbyte returns
- * the next byte from the pk file.
- */
-
-static FILE *pkfile ;
-
-static shalfword
-pkbyte(void)
-{
- register shalfword i ;
-
- if ((i=getc(pkfile))==EOF)
- fatal("unexpected eof in pk file\n") ;
- return(i) ;
-}
-
-static shalfword
-pksbyte(void)
-{
- register shalfword i ;
-
- i = pkbyte() ;
- return i > 127 ? i -256 : i ;
-}
-
-static integer
-pkquad(void)
-{
- register integer i ;
-
- i = pksbyte() ;
- i = i * 256 + pkbyte() ;
- i = i * 256 + pkbyte() ;
- i = i * 256 + pkbyte() ;
- return(i) ;
-}
-
-static integer
-pktrio(void)
-{
- register integer i ;
-
- i = pkbyte() ;
- i = i * 256 + pkbyte() ;
- i = i * 256 + pkbyte() ;
- return(i) ;
-}
-
-static integer
-pkpair(void)
-{
- register integer i ;
-
- i = pkbyte() ;
- i = i * 256 + pkbyte() ;
- return (i);
-}
-
-static integer
-pkspair(void)
-{
- register integer i ;
-
- i = pksbyte() ;
- i = i * 256 + pkbyte();
- return (i);
-}
-
-/*
- * pkopen opens the pk file. This is system dependent.
- */
-
-static Boolean
-pkopen(const char *name)
-{
- if ((pkfile=fopen(name, RB))==NULL) {
- fatal("Could not open %s\n", name) ;
- } else
- return(1) ;
-}
-
-/*
- * The next part is devoted to unpacking the character data.
- */
-
-/*
- * We need procedures to get a nybble, bit, and packed word from the
- * packed data structure.
- */
-
-static halfword inputbyte, flagbyte ;
-static halfword bitweight ;
-static halfword dynf ;
-static halfword repeatcount ;
-
-static shalfword
-getnyb (void)
-{ halfword temp;
- if ( bitweight == 0 )
- { bitweight = 16 ;
- inputbyte = pkbyte();
- temp = inputbyte >> 4 ;
- } else {
- bitweight = 0 ;
- temp = inputbyte & 15 ;
- }
- return(temp);
-}
-
-static Boolean
-getbit (void)
-{
- bitweight >>= 1 ;
- if ( bitweight == 0 )
- { inputbyte = pkbyte();
- bitweight = 128 ;
- }
- return(inputbyte & bitweight) ;
-}
-
-static halfword (*realfunc)() ;
-long PKremainder ;
-static halfword handlehuge(halfword i, halfword k) ;
-
-static halfword
-pkpackednum (void)
-{
-register halfword i, j ;
- i = getnyb () ;
- if ( i == 0 )
- { do { j = getnyb () ;
- i++ ;
- } while ( ! ( j != 0 ) ) ;
- if ( i > 3 ) {
-/*
- * Damn, we got a huge count! We *fake* it by giving an artificially
- * large repeat count.
- */
- return( handlehuge ( i , j ) ) ;
- } else {
- while ( i > 0 )
- { j = j * 16 + getnyb () ;
- 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 ( i == 14 ) repeatcount = pkpackednum () ;
- else repeatcount = 1 ;
-#ifdef DEBUG
- printf("[%d]", repeatcount);
-#endif
- return ( (*realfunc)() ) ;
- }
- }
-
-static halfword rest (void)
-{
- halfword i ;
-
- if (PKremainder < 0) {
- PKremainder = - PKremainder ;
- return ( 0 ) ;
- } else if (PKremainder > 0) {
- if (PKremainder > 4000) {
- PKremainder = 4000 - PKremainder ;
- return ( 4000 ) ;
- } else {
- i = PKremainder ;
- PKremainder = 0 ;
- realfunc = pkpackednum ;
- return ( i ) ;
- }
- } else {
- fatal("shouldn't happen\n") ;
- }
-
- /*NOTREACHED*/
- return 0;
-}
-
-static halfword
-handlehuge (halfword i, halfword k)
-{
- register long j = k ;
-
- while (i) {
- j = (j << 4L) + getnyb() ;
- i-- ;
- }
- PKremainder = j - 15 + ( 13 - dynf ) * 16 + dynf ;
- realfunc = rest ;
- return ( rest() ) ;
-}
-
-/*
- * And now we have our unpacking routine.
- */
-
-static halfword gpower[17] = { 0 , 1 , 3 , 7 , 15 , 31 , 63 , 127 ,
- 255 , 511 , 1023 , 2047 , 4095 , 8191 , 16383 , 32767 , 65535 } ;
-
-static void
-unpack(chardesc *cd)
-{
- register integer i, j ;
- register halfword word, wordweight ;
- halfword *raster;
- shalfword rowsleft ;
- Boolean turnon ;
- shalfword hbit ;
- halfword count ;
- shalfword wordwidth ;
-
- wordwidth = (cd->cwidth + 15) / 16 ;
- i = 2 * cd->cheight * (long)wordwidth ;
- if (i <= 0)
- i = 2 ;
- cd->raster = (halfword *)malloc((unsigned)i) ;
- if (cd->raster == NULL)
- fatal("out of memory during allocation\n") ;
- raster = cd->raster;
- realfunc = pkpackednum ;
- dynf = flagbyte / 16 ;
- turnon = flagbyte & 8 ;
- if ( dynf == 14 )
- { bitweight = 0 ;
- for ( i = 1 ; i <= cd->cheight ; i ++ )
- { word = 0 ;
- wordweight = 32768 ;
- for ( j = 1 ; j <= cd->cwidth ; j ++ )
- { if ( getbit () ) word += wordweight ;
- wordweight >>= 1 ;
- if ( wordweight == 0 )
- { *raster++ = word ;
- word = 0 ;
- wordweight = 32768 ;
- }
- }
- if ( wordweight != 32768 )
- *raster++ = word ;
- }
- } else {
- rowsleft = cd->cheight ;
- hbit = cd->cwidth ;
- repeatcount = 0 ;
- wordweight = 16 ;
- word = 0 ;
- bitweight = 0 ;
- while ( rowsleft > 0 )
- { count = (*realfunc)() ;
-#ifdef DEBUG
- if (turnon) printf("(%d) ",count);
- else printf("%d ",count);
-#endif
- while ( count != 0 )
- { if ( ( count < wordweight ) && ( count < hbit ) )
- { if ( turnon ) word += gpower [ wordweight ] - gpower
- [ wordweight - count ] ;
- hbit -= count ;
- wordweight -= count ;
- count = 0 ;
- }
- else if ( ( count >= hbit ) && ( hbit <= wordweight ) )
- { if ( turnon )
- word += gpower [ wordweight ] - gpower
- [ wordweight - hbit ] ;
- *raster++ = word ;
- for ( i = 1 ; i <= repeatcount ; i ++ ) {
- for ( j = 1 ; j <= wordwidth ; j ++ ) {
- *raster = *(raster - wordwidth) ;
- raster++ ;
- }
- }
- rowsleft -= repeatcount + 1 ;
- repeatcount = 0 ;
- word = 0 ;
- wordweight = 16 ;
- count -= hbit ;
- hbit = cd->cwidth ;
- }
- else
- { if ( turnon ) word += gpower [ wordweight ] ;
- *raster++ = word ;
- word = 0 ;
- count -= wordweight ;
- hbit -= wordweight ;
- wordweight = 16 ;
- }
- }
- turnon = ! turnon ;
- }
- putchar('\n') ;
- if ( ( rowsleft != 0 ) || ( hbit != cd->cwidth ) )
- fatal( "error while unpacking; more bits than required\n" ) ;
- }
-}
-
-/*
- * readchar(): the main routine
- * Reads the character definition of character `c' into `cd' if available,
- * return FALSE (0) otherwise.
- */
-int
-readchar(char *name, integer c, chardesc *cd)
-{
- register shalfword i ;
- register integer k ;
- register integer length = 0;
-
- if (!pkopen(name)) return(0);
-/*
- * Check the preamble of the pkfile
- */
- if (pkbyte()!=247)
- fatal("bad pk file, expected pre\n") ;
- if (pkbyte()!=89)
- fatal("bad version of pk file\n") ;
- for(i=pkbyte(); i>0; i--) /* creator of pkfile */
- (void)pkbyte() ;
- (void) pkquad() ; /* design size */
- (void) pkquad() ; /* checksum */
- (void) pkquad() ; /* hppp */
- (void) pkquad() ; /* vppp */
-/*
- * Now we skip to the desired character definition
- */
- while ((flagbyte=pkbyte())!=245) {
- if (flagbyte < 240) {
- switch (flagbyte & 7) {
-case 0: case 1: case 2: case 3:
- length = (flagbyte & 7) * 256 + pkbyte() - 4 ;
- cd->charcode = pkbyte() ;
- (void) pktrio() ; /* TFMwidth */
- (void) pkbyte() ; /* pixel width */
- break ;
-case 4: case 5: case 6:
- length = (flagbyte & 3) * 65536 + pkpair() * 256 - 5 ;
- cd->charcode = pkbyte() ;
- (void) pktrio() ; /* TFMwidth */
- (void) pkpair() ; /* pixelwidth */
- break ;
-case 7:
- length = pkquad() - 12 ;
- cd->charcode = pkquad() ;
- (void) pkquad() ; /* TFMwidth */
- (void) pkquad(); /* pixelwidth */
- (void) pkquad(); /* pixelheight */
- }
- if (length <= 0)
- fatal("packet length (%d) too small\n", length) ;
- if (cd->charcode == c) {
- if (flagbyte & 4) {
- if ((flagbyte & 7) == 7) { /* long format */
- cd->cwidth = pkquad() ;
- cd->cheight = pkquad() ;
- cd->xoff = pkquad() ;
- cd->yoff = pkquad() ;
- } else { /* extended format */
- cd->cwidth = pkpair(); ;
- cd->cheight = pkpair() ;
- cd->xoff = pkspair() ;
- cd->yoff = pkspair() ;
- }
- } else { /* short format */
- cd->cwidth = pkbyte() ;
- cd->cheight = pkbyte() ;
- cd->xoff = pksbyte() ;
- cd->yoff = pksbyte() ;
- }
- unpack(cd);
- (void)fclose(pkfile) ;
- return(1);
- }
- for (; length>0; length--) /* skip this character */
- (void) pkbyte() ;
- } else {
- k = 0 ;
- switch (flagbyte) {
-case 243:
- k = pksbyte() ;
-case 242:
- k = k * 256 + pkbyte() ;
-case 241:
- k = k * 256 + pkbyte() ;
-case 240:
- k = k * 256 + pkbyte() ;
- while (k-- > 0)
- i = pkbyte() ;
- break ;
-case 244:
- k = pkquad() ;
- break ;
-case 246:
- break ;
-default:
- fatal("unexpected command (%d)\n", flagbyte) ;
- }
- }
- }
- (void)fclose(pkfile) ;
- return(0); /* character not found */
-}