diff options
author | Denis Bitouzé <dbitouze@wanadoo.fr> | 2021-02-25 18:23:07 +0000 |
---|---|---|
committer | Denis Bitouzé <dbitouze@wanadoo.fr> | 2021-02-25 18:23:07 +0000 |
commit | c6101f91d071883b48b1b4b51e5eba0f36d9a78d (patch) | |
tree | 1bf7f5a881d7a4f5c5bf59d0b2821943dd822372 /Build/source/texk/dvipsk/t1part.c | |
parent | 07ee7222e389b0777456b427a55c22d0e6ffd267 (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/dvipsk/t1part.c')
-rw-r--r-- | Build/source/texk/dvipsk/t1part.c | 2756 |
1 files changed, 0 insertions, 2756 deletions
diff --git a/Build/source/texk/dvipsk/t1part.c b/Build/source/texk/dvipsk/t1part.c deleted file mode 100644 index 6b867940c36..00000000000 --- a/Build/source/texk/dvipsk/t1part.c +++ /dev/null @@ -1,2756 +0,0 @@ -/* - * T1part.c version 1.59 beta Copyright (C)1994, 1996 - * by Sergey Lesenko - * lesenko@mx.ihep.su - * - * It is distributed with no warranty of any kind. - * You may modify and use this program. It can be included - * in any distribution, commercial or otherwise, so long as - * copyright notice be preserved on all copies. - */ -#include "dvips.h" -#include "t1part.h" -#ifndef SEEK_SET -#define SEEK_SET (0) -#endif - -#ifdef BORLANDC -void huge *UniGetMem(size) -ub4 size; -{ - void huge *tmp; - if ((tmp =(void huge*) farcalloc(1L, size)) == NULL) - { - fprintf(stderr,"Error allocating far memory\n"); - exit(1); - } - return tmp; -} -#else -#define UniGetMem getmem -#endif - -#ifdef WIN32 -/* CHAR is typedef'd by <windows.h> -- popineau@esemetz.ese-metz.fr. */ -#define CHAR CHARACTER -#endif - -typedef struct Char -{ - unsigned char *name; - int length; - int num; - int choose; - struct Char *NextChar; -} -CHAR; - -typedef struct String -{ - unsigned char *name; - int num; - struct String *NextStr; -} -STRING; - -static STRING *FirstStr; -static STRING *RevStr; - -static CHAR *FirstChar; -static CHAR *FirstCharA; -CHAR *FirstCharB; -static CHAR *FirstCharW; - -int CharCount; -int GridCount; -int ind_ref; - -static unsigned char CDeCrypt(unsigned char, unsigned int *); -static void CorrectGrid(void); -static void OutHEX(FILE *); -static int Afm(void); -static int LoadVector(int, CHAR *); -static int ChooseVect(CHAR *); -static void ErrorOfScan(int err); -static void NameOfProgram(void); - -typedef struct -{ - int num[4]; - int select; -} -def_ref; - -def_ref refer[10]; - -#ifndef min -#define min(a, b) ((a) < (b) ? (a) : (b)) -#endif - -#ifndef max -#define max(a, b) ((a) > (b) ? (a) : (b)) -#endif - - -#define PFA 1 -#define PFB 2 - - -#define NOTHING 0 -#define FLG_ASCII 1 -#define FLG_BINARY 2 -#define FLG_EOF 3 -#define FLG_ZERO_LINE 4 - -#define FLG_OUT_STR (-1) -#define CHAR_NOT_DEF (-1) -#define SEAC_NOT_END (-2) - -#define FLG_LOAD_BASE (1) - -#define STANDARD_ENC (1) -#define SPECIAL_ENC (2) -#define AFM_ENC (4) - - -#define FLG_REENCODE (4) - - -#define BYTES_PER_LINE 32 - -#ifndef KPATHSEA_TYPES_H -#define TRUE 1 -#define FALSE 0 -#endif /* not KPATHSEA_TYPES_H */ - -#define LENIV 0 -#define SUBRS 1 -#define CHARSTRINGS 2 - -#define ERR_FIRST_NUM (-1) -#define ERR_SECOND_NUM (-2) -#define ERR_FIRST_TOK (-3) -#define ERR_SECOND_TOK (-4) -#define ERR_STACK (-5) -#define ERR_NUM_CHAR (-6) -#define ERR_NAME_CHAR (-7) - -#define SUBR_STR 1 -#define CHAR_STR -1 -#define CHAR_SEAC -2 -#define SKIP_ON_DUP 3 - -#define C1 52845 -#define C2 22719 -#define EDR 55665 -#define EER 55665 -#define CDR 4330 - -#define MAX_ESCAPE 33 - -#define HSTEM 1 -#define VSTEM 3 -#define VMOVETO 4 -#define CHARS_RLINETO 5 -#define HLINETO 6 -#define VLINETO 7 -#define RRCURVETO 8 -#define CHARS_CLOSEPATH 9 -#define CALLSUBR 10 -#define RETURN 11 -#define ESCAPE 12 -#define HSBW 13 -#define ENDCHAR 14 -#define CHARS_RMOVETO 21 -#define HMOVETO 22 -#define VHCURVETO 30 -#define HVCURVETO 31 - -#define DOTSECTION 0 -#define VSTEM3 1 -#define HSTEM3 2 -#define SEAC 6 -#define SBW 7 -#define CHARS_DIV 12 -#define CALLOTHERSUBR 16 -#define POP 17 -#define SETCURRENTPOINT 33 - -typetemp BORLAND_HUGE *temp; -typetemp BORLAND_HUGE *begin_of_scan; -typetemp BORLAND_HUGE *end_of_scan; -unsigned char *line; -unsigned char *tmpline; -unsigned char token[64]; -unsigned char notdef[]="/.notdef"; -unsigned char grid[256]; -unsigned char tmpgrid[256]; -unsigned char psfontfile[500]; /* really should dynamically allocate */ -unsigned char psvectfile[500]; -unsigned char basevect[]="ad.enc"; -unsigned char version[] = "v1.59 beta (c)1994, 1996"; -unsigned char tmp_token[64]; -/* static int j = 0; */ -static int stack[128]; - -ub1 buf[BUFSIZ]; - -int loadbase = 0; -static int encode; -static int reencode; - -int find_encod; -int lastpart=0; -int keep_flg=0; -int keep_num=0; - -int number; -int offset; -long value; -int lenIV = 4; - -static int grow=0; -static int level; -static int flg_seac=0; - -typedef struct -{ - const char *command; - int code; -} -tablecommand; - -tablecommand TableCommand[] = -{ - {"callsubr", CALLSUBR}, {"callothersubr", CALLOTHERSUBR}, - {"pop", POP }, {"seac", SEAC}, {""} -}; - -typedef struct -{ - const char *extension; - int num; -} -typefonts; - - -typefonts TypeFonts[] = -{ - {".pfa", PFA}, {".pfb", PFB}, - {".PFA", PFA}, {".PFB", PFB}, {""} -}; - -static char Dup[]="dup"; - -typedef struct -{ - typetemp BORLAND_HUGE *begin; - int length; - int type; - int offset; - int oldnum; - int newnum; -} -def_key; - -def_key keyword[6]; - -int FirstKey, current; - -int subrs, char_str; - - -typedef struct -{ - const char *name; - int num; -} -type_key; - - -type_key Key[] = -{ - {"/LenIV", LENIV}, {"/Subrs", SUBRS}, {"/CharStrings", CHARSTRINGS}, {""} -}; - - -struct def_label -{ - typetemp BORLAND_HUGE *begin; - unsigned char skip; - int length; - short select; - int num; -}; - -struct def_label label[NUM_LABEL]; - - - -static int -DefTypeFont(unsigned char *name) -{ - int i; - - for(i=0;*TypeFonts[i].extension;i++) - { - if(strstr((char *)name,TypeFonts[i].extension)!=0) - return(TypeFonts[i].num); - } - return -1; -} - -static int -GetZeroLine(unsigned char *str) -{ - int token_type=0; - if(*str!='0') - { - return (token_type=0); - } - while(*str=='0') - { - str++; - } - - if(*str=='\n' || *str=='\r') - token_type= -1; - else - token_type=0; - return(token_type); -} - -/* We get token type and its content for ASCII code */ - -static int -GetWord(unsigned char *mem) -{ - int token_type=0; - register unsigned char *tmp; - tmp=mem; - *tmp= *line; - while((*line!='\0')&&(*line!='%')) - { - if(*line=='-') - { - *tmp++= *line++; - } - - if(isdigit(*line)) - { - while(isdigit(*line)) - { - *tmp++= *line++; - } - *tmp = '\0'; - return 5; - } - - if(*line=='/') - { - *tmp++= *line++; token_type=1; - } - if(*line=='.') - { - *tmp++= *line++; - - if(token_type==1) - { - if(*line==' ') - { - *tmp = '\0'; - return(token_type=token_type+2); - } - } - } - if(isalpha(*line)) - { - *tmp++ = *line++; - while(!isspace(*line) && *line != '/') - *tmp++= *line++; - *tmp = '\0'; - return(token_type=token_type+2); - } - - token_type=0; - tmp=mem; - line++; - } - return(token_type= -1); -} - -/* We get token type and its content for BINARY code */ - -static int -GetToken(void) -{ - register unsigned char *tmp; - int token_type=0; - - tmp=token; - - *tmp= *temp; - while(temp<end_of_scan) - { - if(*temp=='/') - { - *tmp++= *temp++; token_type=1; - } - - if(*temp=='.') - { - *tmp++= *temp++; - token_type++; - } - - if(isalpha(*temp)) - { - while(isalnum(*temp) || *temp == '.') - *tmp++= *temp++; - - *tmp = '\0'; - - return(token_type=token_type+2); - } - token_type=0; - tmp=token; - temp++; - } - return(token_type= -1); -} - -static int -GetNum(void) -{ - unsigned char *tmp; - tmp=token; - *tmp= *temp; - - while(temp<end_of_scan) - { - if(isdigit(*temp)) - { - while(isdigit(*temp)) - *tmp++= *temp++; - *tmp = '\0'; - return(atoi((char *)token)); - } - temp++; - } - - return -1; -} - -/* We pass token without definition its type, it's for speed */ - -static int -PassToken(void) -{ - while(temp < end_of_scan) - { - if(!isspace(*temp)) - { - while(!isspace(*temp)) - temp++; - return 1; - } - temp++; - } - return -1; -} - -/* */ -/* Simple pass off without charstring decrypting */ -/* */ - -static int -PassString(unsigned char flg) -{ - int len_str; - - len_str=GetNum(); - if(len_str<0) - { - return ERR_SECOND_NUM; - } - - if(PassToken()<0) - return ERR_FIRST_TOK; - - - if(flg==1) - { - label[number].length = len_str; - label[number].skip = temp - label[number].begin; - } - - temp= temp+1+len_str; - - if(PassToken()<0) - return ERR_SECOND_TOK; - return 1; -} - -void * -getmem(unsigned size) -{ - void *tmp; - if ((tmp = calloc(1, size)) == NULL) - { - fprintf(stderr,"Error allocating memory\n"); - exit(1); - } - return tmp; -} - -static CHAR * -AddChar(CHAR *TmpChar, unsigned char *CharName, int num) -{ - int length; - - CHAR *ThisChar = (CHAR*) getmem(sizeof(CHAR)); - length = strlen((char *) CharName); - ThisChar->name = (unsigned char *) getmem(length+1); - strcpy((char *) ThisChar->name, (char *) CharName); - ThisChar->length= length; - ThisChar->num=num; - ThisChar->NextChar = TmpChar; - TmpChar = ThisChar; - return TmpChar; -} - - -static void -AddStr(unsigned char *name, int num) -{ - int length; - - STRING *ThisStr = (STRING *) getmem(sizeof(STRING)); - length = strlen((char *) name); - ThisStr->name = (unsigned char *) getmem(length+1); - strcpy((char *) ThisStr->name, (char *) name); - ThisStr->num=num; - - ThisStr->NextStr = FirstStr; - FirstStr = ThisStr; -} - - -/* We prepare own encoding vector for output */ - -static void -RevChar(CHAR *TmpChar) -{ - int i; - CHAR *ThisChar = TmpChar; - - while (ThisChar != NULL) - { - for(i=keyword[char_str].offset-1; i < number; i++) - { - if(ThisChar->num == label[i].num) - { - if (label[i].select==FLG_BINARY) - { - CHAR *Rev_Char = (CHAR *) getmem(sizeof(CHAR)); - Rev_Char->name = ThisChar->name; - Rev_Char->num = ThisChar->num; - - Rev_Char->NextChar = FirstCharW; - FirstCharW = Rev_Char; - break; - } - } - } - ThisChar = ThisChar->NextChar; - } -} - -/* And here we produce own resulting encoding vector for partial font */ - -static void -OutChar(CHAR *TmpChar, FILE *fout) -{ - - CHAR *ThisChar = TmpChar; - - while (ThisChar != NULL) - { - CHAR *tm = ThisChar; - if (ThisChar->num >= 0) -#ifdef SHIFTLOWCHARS - fprintf(fout, "dup %d %s put\n",T1Char(ThisChar->num),ThisChar->name); -#else - fprintf(fout, "dup %d %s put\n",ThisChar->num,ThisChar->name); -#endif - ThisChar = ThisChar->NextChar; - free(tm); - } - - FirstCharW = NULL; -} - - - - -/* We prepare strings list for output */ - -static void -Reeverse(STRING *TmpStr) -{ - - int tmp; - - if(encode==AFM_ENC) - tmp = -2; - else - tmp=0; - - - while (TmpStr != NULL) - { - - if(TmpStr->num < tmp) - { - STRING *ThisStr = (STRING *) getmem(sizeof(STRING)); - ThisStr->name = TmpStr->name; - - ThisStr->NextStr = RevStr; - RevStr = ThisStr; - } - TmpStr = TmpStr->NextStr; - } -} - - -/* And here we post strings to out */ - -static void -OutStr(STRING *TmpStr, FILE *fout) -{ - STRING *ThisStr = TmpStr; - if(encode==AFM_ENC) - fprintf(fout, "readonly def\n"); - while (ThisStr != NULL) - { - STRING *tm = ThisStr; - fprintf(fout, "%s",ThisStr->name); - ThisStr = ThisStr->NextStr; - free(tm); - } - RevStr = NULL; -} - - - - - - -static void -PrintChar(CHAR *TmpChar) -{ - CHAR *ThisChar = TmpChar; - while (ThisChar != NULL) - { - if(ThisChar->choose==1) - { - fprintf_str(stderr, " Debug: Char %d '%s'\n", - ThisChar->num,ThisChar->name); - } - ThisChar = ThisChar->NextChar; - } - -} - - -static int -ClearB(void) -{ - CHAR *ThisChar = FirstCharB; - while (ThisChar != NULL) - { - ThisChar->choose=0; - ThisChar = ThisChar->NextChar; - } - return 1; -} - -/* We mark chars in encoding vector thanks same names from -reencoding vector */ - -static int -ChooseChar(unsigned char *name, CHAR *TmpChar) -{ - int length; - CHAR *ThisChar = TmpChar; - length=strlen((char *) name); - while (ThisChar != NULL) - { - CHAR *NextChar = ThisChar->NextChar; - if(ThisChar->length==length) - { - if (strcmp((char *) name, (char *) ThisChar->name) == 0) - { - ThisChar->choose=1; - return 1; - } - } -/* - * If we couldn't find it, NextChar is NULL here. We fake up an entry - * (assuming it really does exist in the font). Fix is from Melissa - * O'Neill; bugs in application of fix due to me. - */ - if (NextChar == 0) { - NextChar = (CHAR *) getmem(sizeof(CHAR)); - NextChar->name = (unsigned char *) getmem(length + 1); - strcpy((char *) NextChar->name, (char *) name); - NextChar->length = length; - NextChar->num = -1; - NextChar->NextChar = 0; - NextChar->choose = 1; - ThisChar->NextChar = NextChar; - } - ThisChar = NextChar; - } -/* - * Can't ever get here. - */ - return -1; -} - -/* We find index in label array for char, wich is required -for compose char, if it uses SEAC command */ - -static int -FindSeac(int num) -{ - int i; - - for(i=keyword[char_str].offset-1; i < number; i++) - { - if(label[i].num==num) - { - return i; - } - } - return -1; -} - - -static void ClearCW(CHAR *); - -static int -FindCharW(unsigned char *name, int length) -{ - CHAR *ThisChar = FirstCharW; - - int find = 0; - int keep_char = 0; - int tmp = 0; - int tmp_num = 0; - - int ddd = 0; - -#ifdef DEBUG - if(dd(D_VIEW_VECTOR)) - { - ddd = 1; - } -#endif - - while (ThisChar != NULL) - { - /* since ClearCW may free ThisChar, follow the pointer now. */ - CHAR *NextChar = ThisChar->NextChar; - - if(ThisChar->length==length) - { - if (strcmp((char *) name, (char *) ThisChar->name) == 0) - { - if(ThisChar->choose==1) - { - if(find !=2) - { - find = 2; - tmp=FLG_BINARY; - label[number].num=ThisChar->num; - } - } - else - { - keep_char = 0; - if(find != 2) - { - find = 1; - tmp_num = ThisChar->num; - } - } - - - if(keep_char == 0) - { - ClearCW(ThisChar); - } - - if((find == 2)&&(ddd == 1)) - keep_char = 1; - } - } - ThisChar = NextChar; - } - - if(find == 1) - { - tmp=NOTHING; - label[number].num=tmp_num; - } - return tmp; -} - - -static void -ClearCW(CHAR *ThisChar) -{ - - if (ThisChar == FirstCharW) - FirstCharW = ThisChar->NextChar; - else - { - CHAR *tm = FirstCharW; - while (tm != NULL) - { - if (ThisChar == tm->NextChar) - { - tm->NextChar = ThisChar->NextChar; - break; - } - tm = tm->NextChar; - } - } - free(ThisChar); -} - - -/* We build temporary 'work' encoding vector only for searching -needed chars */ - -static int -WorkVect(CHAR *TmpChar) -{ - while (TmpChar != NULL) { - { - CHAR *ThisChar = (CHAR *) getmem(sizeof(CHAR)); - ThisChar->name = TmpChar->name; - ThisChar->length = TmpChar->length; - ThisChar->num = TmpChar->num; - ThisChar->choose = TmpChar->choose; - - ThisChar->NextChar = FirstCharW; - FirstCharW = ThisChar; - } - TmpChar = TmpChar->NextChar; - } - return 0; -} - - -static void -UnDefineCharsW(void) -{ - CHAR *ThisChar = FirstCharW; - while (ThisChar != NULL) - { - CHAR *tm = ThisChar; - ThisChar = ThisChar->NextChar; - free(tm); - } - FirstCharW = NULL; - CharCount = 0; -} - -CHAR * -UnDefineChars(CHAR *TmpChar) -{ - CHAR *ThisChar = TmpChar; - while (ThisChar != NULL) - { - CHAR *tm = ThisChar; - free(ThisChar->name); - ThisChar = ThisChar->NextChar; - free(tm); - } - TmpChar = NULL; - CharCount = 0; - return TmpChar; -} - - - -static void -UnDefineStr(void) -{ - STRING *ThisStr = FirstStr; - while (ThisStr != NULL) - { - STRING *tm = ThisStr; - free(ThisStr->name); - ThisStr = ThisStr->NextStr; - free(tm); - } - FirstStr = NULL; -} - - - -/* */ -/* We mark subroutines without charstring decrypting */ -/* */ - -static void -ScanSubrs(int i) -{ - int err_num; - int word_type = 0; - int len_dup; - int num_err=0; - int test=0; - - len_dup = strlen(Dup); - - for(; number < keyword[i].oldnum + keyword[i].offset;) - { - if((word_type=GetToken())>0) - { - if(word_type==2) - { - if(!strcmp((char *) token,Dup)) - { - if(test==0) - test=1; - label[number].begin = temp-len_dup; - - err_num=GetNum(); - if(err_num<0) - ; - else - { - if(err_num<4) - { - label[number].select=FLG_BINARY; - keyword[i].newnum++; - - } - } - - label[number].num=err_num; - - num_err=PassString(1); - - if(num_err<0) - { - ErrorOfScan(num_err); - fprintf(stderr,"in %d Subr string", number - 1); - exit(1); - } - if(test>1) - PassToken(); - - number++; - } - else - { - if(test>=1) - test++; - } - } - } - else - { - ErrorOfScan(0); - fprintf(stderr, - "Token 'def' not found in %d Subr string ", number - 1); - exit(1); - } - } -} - -static void -ViewReturnCall(int num_err, int top, int *pstack, - int j, int depth) -{ - int k,m; - -#ifdef DEBUG - if((dd(D_CALL_SUBR))&&(num_err>0)) - { - if(grow==1) - { - grow=0; - fprintf(stderr, "\n Top: "); - } - else - fprintf(stderr, " Back: "); - } - -#endif - - if(num_err<0) - { - if(grow==1) - { - grow=0; - fprintf(stderr, "\n ERROR: "); - ErrorOfScan(num_err); - } - else - fprintf(stderr, " Back: "); - } - - fprintf(stderr, " %d Subr \n", top); - - fprintf(stderr," %dth level> STACK: ", level); - - for(m=0; m < j; m++, pstack++) - { - if(depth>(j-(m+1))) - { - for(k=0; - TableCommand[k].command; - k++) - { - if(TableCommand[k].code==*pstack) - { - fprintf_str(stderr," %s", - TableCommand[k].command); - k=0; - break; - } - } - if(k!=0) - fprintf(stderr," (%d)", *pstack); - } - else - fprintf(stderr, " %d", *pstack); - } - fprintf(stderr, " \n"); -} - -/* */ -/* We decrypt charstring with recursive descent */ -/* */ - -static int -DeCodeStr(int num, int numseac) -{ - unsigned int loccr; - unsigned char byte; - static int j; - int i; - unsigned char jj,k; - int tmpnum; - int depth = 0; - int num_err = 0; - int len_str; - typetemp BORLAND_HUGE *loc; - typetemp BORLAND_HUGE *end_str; - int pstack[64]; - int last_subr; - - if(num > CHAR_STR) - { - last_subr=keyword[subrs].offset+keyword[subrs].oldnum; - - for(tmpnum=keyword[subrs].offset; tmpnum<last_subr; tmpnum++) - { - if(label[tmpnum].num==num) - break; - } - - if(tmpnum==last_subr) - { - fprintf(stderr, " Error: %d Subr not found \n", num); - exit(1); - } - if(label[tmpnum].select==FLG_BINARY) - { - if(j==0) - return 1; - } - else - { - label[tmpnum].select=FLG_BINARY; - if(num+1 > keyword[subrs].newnum ) /* max num of subr */ - keyword[subrs].newnum = num+1; - } - loc = label[tmpnum].begin + label[tmpnum].skip; - len_str=label[tmpnum].length; - } - else - { - j=0; - - if(num == CHAR_SEAC) - { - if(label[numseac].select!=FLG_BINARY) - { - label[numseac].select=FLG_BINARY; - keyword[char_str].newnum++; - temp = label[numseac].begin; - } - else return 1; - } - len_str=GetNum(); - - if(len_str < 0) - { - return ERR_SECOND_NUM; - } - num_err = PassToken(); - if(num_err < 0) - { - return ERR_FIRST_TOK; - } - loc=temp; - } - loc++; - - end_str=loc+len_str; - - loccr = CDR; - - for (i = 0; i < lenIV; i++,loc++) - { - byte = CDeCrypt(*loc, &loccr); - } - for (; loc < end_str;) - { - byte = CDeCrypt(*loc++, &loccr); - if (byte == RETURN) - { - j=0; - break; - } - else if (byte == ESCAPE) - { - byte = CDeCrypt(*loc++, &loccr); - if (byte > MAX_ESCAPE) - fprintf_str(stderr, - "Error: not_defined_e%d in %s", byte, psfontfile); - else - { - switch(byte) - { - case DOTSECTION : j=0; break; - case VSTEM3 : j=0; break; - case HSTEM3 : j=0; break; - case SEAC : - stack[j++]=byte; - grow=1; - level++; - jj=j; - for(k=0;k<jj;k++) - pstack[k]=stack[k]; - num_err=FindSeac(pstack[jj-3]); - if(num_err<0) - { - flg_seac=1; - CharCount++; - keyword[char_str].newnum--; - if(flg_seac > -3) - label[number].select=SEAC_NOT_END; - grow=0; - level=0; - j=0; - break; - } - - num_err=DeCodeStr(CHAR_SEAC, num_err); - level--; - -#ifdef DEBUG - if((num_err<0)||(dd(D_CALL_SUBR))) -#else - if(num_err<0) -#endif - ViewReturnCall - (num_err, pstack[jj-3],pstack,jj,1); - grow=1; - level++; - num_err=FindSeac(pstack[jj-2]); - if(num_err<0) - { - flg_seac=1; - CharCount++; - keyword[char_str].newnum--; - keyword[char_str].newnum--; - if(flg_seac > -3) - label[number].select=SEAC_NOT_END; - grow=0; - level=0; - j=0; - break; - } - num_err=DeCodeStr(CHAR_SEAC, num_err); - level--; -#ifdef DEBUG - if((num_err<0)||(dd(D_CALL_SUBR))) -#else - if(num_err<0) -#endif - - ViewReturnCall - (num_err, pstack[jj-2],pstack,jj,1); - - if(num_err<0) - return ERR_STACK; - j=0; break; - case SBW : j=0; break; - case CHARS_DIV : j=0; break; - case CALLOTHERSUBR : stack[j++]=byte; - depth=depth+2; - break; - case POP : stack[j++]=byte; - depth=depth+2; - break; - case SETCURRENTPOINT : j=0; break; - } - } - continue; - } - else if (byte < 32) - { - switch(byte) - { - case HSTEM : j=0; break; - case VSTEM : j=0; break; - case VMOVETO : j=0; break; - case CHARS_RLINETO : j=0; break; - case HLINETO : j=0; break; - case VLINETO : j=0; break; - case RRCURVETO : j=0; break; - case CHARS_CLOSEPATH : j=0; break; - case CALLSUBR : stack[j++]=byte; - depth=depth+2; - level++; - grow=1; - jj=j; - j=j-depth; - for(k=0;k<jj;k++) - pstack[k]=stack[k]; - - num_err = DeCodeStr(stack[j],0); - - level--; -#ifdef DEBUG - if((num_err<0)||(dd(D_CALL_SUBR))) -#else - if(num_err<0) -#endif - ViewReturnCall - (num_err, pstack[jj-depth], pstack,jj,depth/2); - - if(num_err<0) - return ERR_STACK; - else - { - depth=0; - break; - } - case RETURN : j=0; break; - case ESCAPE : break; - case HSBW : j=0; break; - case ENDCHAR : j=0; break; - case CHARS_RMOVETO : j=0; break; - case HMOVETO : j=0; break; - case VHCURVETO : j=0; break; - case HVCURVETO : j=0; break; - } - } - if (byte >= 32) - { - if (byte <= 246) - { - value= byte - 139; - stack[j++]=value; - } - else if ((byte >= 247) && (byte <= 250)) - { - value= (byte - 247) * 256 + CDeCrypt(*loc++, &loccr) + 108; - stack[j++]=value; - } - else if ((byte >= 251) && (byte <= 254)) - { - value= -(byte - 251) * 256 - CDeCrypt(*loc++, &loccr) - 108; - stack[j++]=value; - } - else if (byte == 255) - { - value = CDeCrypt(*loc++, &loccr); - value <<= 8; - value += CDeCrypt(*loc++, &loccr); - value <<= 8; - value += CDeCrypt(*loc++, &loccr); - value <<= 8; - value += CDeCrypt(*loc++, &loccr); - stack[j++]=value; - } - } - } - if(num == CHAR_STR) - { - temp=loc; - num_err = PassToken(); - if(num_err<0) - { - return ERR_SECOND_TOK; - } - } - return 1; -} - -/* */ -/* We mark only necessary charstring */ -/* */ - - -static void -ScanChars(int i) -{ - - int word_type=0; - int found; - int str_len; - int max_num; - int counter; - int num_err = 0; - typetemp BORLAND_HUGE *tmptemp; - - - CharCount++; - counter=number; - max_num = keyword[i].offset+keyword[i].oldnum; - - while( number < max_num ) - { - if((word_type=GetToken())>0) - { - if(word_type>=3) - { - strcpy((char *) tmp_token, (char *) token); - str_len = strlen((char *) token); - - - if(CharCount!=0) - { - - num_err=FindCharW(token, str_len); - - if(num_err==FLG_BINARY) - { - CharCount--; - found=num_err; - keyword[i].newnum++; - } - else - { -#ifdef DEBUG - - if(dd(D_VIEW_VECTOR)&&(num_err==-1)) - { - fprintf_str(stderr, - " Debug: Char '%s' not used in WorkVector\n", token); - - } -#endif - if(word_type>3) - { - if(strstr((char *) token, (char *) notdef)!=NULL) - { - CharCount--; - label[number].num = -2; - found=FLG_BINARY; - keyword[i].newnum++; - } - else - found=NOTHING; - } - else - found=NOTHING; - } - } - else - { - found=NOTHING; - } - - label[number].begin = temp-str_len; - label[number].select = found; - - switch(found) - { - case FLG_BINARY: - tmptemp=temp; - for(subrs=FirstKey; subrs<char_str; subrs++) - { - level=0; - if(subrs!=FirstKey) - { - temp=tmptemp; - } - - num_err=DeCodeStr(CHAR_STR,0); - - } -#ifdef DEBUG - if(dd(D_CALL_SUBR)) - { - if(num_err>0) - fprintf_str(stderr, - " Debug for Char '%s'\n", tmp_token); - } -#endif - break; - case NOTHING: - - num_err=PassString(0); - break; - } - - if(num_err<0) - { - ErrorOfScan(num_err); - fprintf_str(stderr,"in Char string of '%s'", tmp_token); - exit(1); - } - number++; - } - } - else - { - fprintf_str(stderr, - "\n File <%s> ended before all chars have been found.", psfontfile); - - fprintf(stderr, - "\n We scan %d Chars from %d", - counter - (2 + keyword[subrs].oldnum), - keyword[i].oldnum); - - if(tmp_token!=NULL) - { - fprintf_str(stderr, "\n Last seen token was '%s'\n", tmp_token); - } - exit(1); - } - } - - if(flg_seac!=0) - { - tmptemp=temp; - flg_seac--; - for(; counter<max_num; counter++) - { - if((int) label[counter].select==SEAC_NOT_END) - { - for(subrs=FirstKey; subrs<char_str; subrs++) - { - level=0; - temp=label[counter].begin; - num_err=DeCodeStr(CHAR_STR,0); - } - if(num_err<0) - { - fprintf(stderr," Warning: %d char not choose during SEAC\n", - label[counter].num); - } - else - { - CharCount--; - label[counter].select=FLG_BINARY; - if(CharCount==0) - break; - } - } - } - - temp=tmptemp; - } - - if(CharCount!=0) - { - fprintf(stderr," WARNING: Not all chars found."); - PrintChar(FirstCharW); - - } -} - -static void -LastLook(void) -{ - label[number].begin = temp; - label[number].select = FLG_BINARY; - number++; -} - -static int -FindKeyWord(int First_Key, int lastkey) -{ - int word_type=0; - int i; - int tmp_num=0; - - for(;;) - { - if((word_type=GetToken())>0) - { - if(word_type==3) - { - for(i=First_Key; i<=lastkey; i++) - { - if(!strcmp((char *) token, Key[i].name)) - { - tmp_num = GetNum(); - if(tmp_num<0) - { - fprintf_str(stderr, - "\n ERROR: Number not found for '%s' in <%s>", - Key[i].name, psfontfile); - exit(1); - } - keyword[current].oldnum = tmp_num; - keyword[current].length=strlen((char *) token); - keyword[current].begin=temp - keyword[current].length; - return i; - } - } - } - } - else - { - fprintf_str(stderr, - "\n ERROR: In <%s> keyword not found:", psfontfile); - - for(i=First_Key; i<=lastkey; i++) - fprintf_str(stderr,"\n %dth > '%s' ",i,Key[i].name); - exit(1); - } - } -} - -/* To increase scan speed we use dynamic range of keywords */ - -static int -ScanBinary(void) -{ - int i; - int firstnum, lastnum; - firstnum= LENIV; - lastnum=SUBRS; - - number=0; - label[number].begin = begin_of_scan; - temp = label[number].begin; - label[number].select = FLG_BINARY; - offset= ++number; - - for (current=0, FirstKey=current;; current++) - { - i=FindKeyWord(firstnum,lastnum); - switch(i) - { - case LENIV: - FirstKey++; - firstnum=SUBRS; - lastnum=SUBRS; - lenIV=keyword[current].oldnum; - keyword[current].type=Key[0].num; - break; - case SUBRS: - firstnum=SUBRS; - lastnum= CHARSTRINGS; - keyword[current].offset=number; - keyword[current].newnum=0; - keyword[current].type=Key[1].num; - ScanSubrs(current); - LastLook(); - break; - case CHARSTRINGS: - char_str=current; - keyword[current].offset=number; - keyword[current].newnum=0; - keyword[current].type=Key[2].num; - ScanChars(current); - LastLook(); -#ifdef DEBUG - if(dd(D_CALL_SUBR)) - { - for(i=0;i<=2;i++) - { - if(keyword[i].oldnum!=0) - fprintf_str(stderr, " Result for <%s>: %s %d (instead %d) \n", - psfontfile, Key[keyword[i].type].name,keyword[i].newnum, keyword[i].oldnum); - } - - } -#endif - return 1; - } - } -} - -static unsigned char * -itoasp(int n, unsigned char *s, int len) -{ - static int i, j; - - j++; - if(n/10) - itoasp(n/10,s,len); - else - i=0; - s[i++]=abs(n)%10+'0'; - j--; - if(j==0) - { - for(; i<len;) - s[i++]=' '; - s[i]='\0'; - return s; - } - return NULL; -} - -static void -SubstNum(void) -{ - int i, j; - - for(i=FirstKey;i<=char_str;i++) - { - itoasp(keyword[i].newnum,token,keyword[i].length); - temp=keyword[i].begin; - for(j=0;token[j];++j,++temp) - { - *temp=token[j]; - } - temp=keyword[i].begin; - } -} - -static ub4 -little4(ub1 *buff) -{ - return (ub4) buff[0] + - ((ub4) buff[1] << 8) + - ((ub4) buff[2] << 16) + - ((ub4) buff[3] << 24); -} - -unsigned short int c1 = C1, c2 = C2; -unsigned short int edr; - - -static unsigned char -CDeCrypt(unsigned char cipher, unsigned int *lcdr) -{ - register unsigned char plain; - - plain = (cipher ^ (*lcdr >> 8)); - *lcdr = (cipher + *lcdr) * c1 + c2; - return plain; -} - -unsigned short int eer; - -/* We find end of own vector with non StandardEncoding, - - -*/ - - -static int -EndOfEncoding(int err_num) -{ - - int j; - int i = 0; - int flg_get_word=0; - - - static const char *RefKey[] = - { - "readonly", - "getinterval", - "exch", - "def", - "" - }; - - for(;;) - { - if(flg_get_word==0) - flg_get_word = 1; - else - { - err_num=GetWord(token); - - } - - if(err_num <= 0) - return -1; - - if(err_num==5) - refer[ind_ref].num[i++]=atoi((char *) token); - else - { - for(j=0; *RefKey[j]; j++) - { - if(strcmp((char *) token, RefKey[j]) ==0) - break; - } - switch(j) - { - case 0: - case 3: - find_encod=1; - keep_num = -2; - if(ind_ref!=0) - { - CorrectGrid(); - } - return 1; - - case 1: - break; - - case 2: - if(i==1) - { - refer[ind_ref].num[1] = 1; - refer[ind_ref].num[2] = refer[ind_ref].num[0]; - GetWord(token); - refer[ind_ref].num[0]= atoi((char *) token); - } - i=0; - refer[ind_ref].select=1; - ind_ref++; - break; - default: - break; - } - } - } - -} - -/* We rebuild grid for case - "dup dup 161 10 getinterval 0 exch putinterval - dup dup 173 23 getinterval 10 exch putinterval - dup dup 127 exch 196 get put readonly def" -in non StandardEncoding */ - - -static void -CorrectGrid(void) -{ - int i, j, k, imax; - - - for(j=0; j<=ind_ref; j++){ - if(refer[j].select==1){ - imax= refer[j].num[1] + refer[j].num[2]; - - for(k=0, i=refer[j].num[2]; i< imax; k++,i++){ - if(grid[i]==1){ - grid[i]=0; - grid[k+refer[j].num[0]]=1; - } - } - } - } -} - /* We build vector for non StandardEncoding */ - -static int -CharEncoding(void) -{ - int err_token=0; - int num=0; - int seen = 0; - - while (1) { - err_token=GetWord(token); - - if(err_token==2) - { - if(strcmp((char *) token, Dup) ==0) - { - err_token=GetWord(token); - if(err_token<0) - return ERR_NUM_CHAR; - - if(err_token!=2) /* define "dup word" */ - { - num=atoi((char *) token); - - err_token=GetWord(token); - if(err_token<0) - { - return ERR_NAME_CHAR; - } - FirstChar=AddChar(FirstChar,token, num); - keep_num=num; - keep_flg=1; - seen++; - err_token = GetWord(token); - } - } else { - - if(keep_flg==1) - { - keep_num=FLG_OUT_STR; - - if(EndOfEncoding(err_token)<0) - { - return -1; - } - } - } - } else - return seen; - } -} - - - -static void -FindEncoding(void) -{ - int num_err=0; - int tmpnum; - - line=tmpline; - - if(encode==0) - { - - while((num_err=GetWord(token))>=0) - { - if(num_err==3) - { - if (strcmp((char *) token,"/Encoding") == 0) - { - - tmpnum=GetWord(token); - - if(tmpnum==5) - { - encode=SPECIAL_ENC; - } - - else - { - find_encod=1; - encode=STANDARD_ENC; - } - return; - } - } - } - } - - else - { - num_err= CharEncoding(); - if(num_err<0) - { - ErrorOfScan(num_err); - fprintf_str(stderr, - "\n ERROR in encoding vector in <%s>", psfontfile); - exit(1); - } - } -} - -/* Before parse in BINARY portion of font we should mark needed chars, -reencode them if there is reencoding vector for this case and -build work vector */ - -static void -CheckChoosing(void) -{ - - CHAR *TmpChar; - int err_num, i; - - if(encode==STANDARD_ENC) - { - TmpChar = FirstCharB; - } - else - { - if(encode==SPECIAL_ENC) - { - TmpChar = FirstChar; - } - else - { - fprintf_str(stderr, - "WARNING: '/Encoding' not found in <%s>\n", psfontfile); - exit(1); - } - } - - if(reencode==FLG_REENCODE) - err_num=LoadVector(reencode, TmpChar); - else - err_num=ChooseVect(TmpChar); - - if(err_num<0) - { - Afm(); - encode=AFM_ENC; - - TmpChar = FirstCharA; - - for(i=0;i<=255;i++) - grid[i]=tmpgrid[i]; - - - if(reencode==FLG_REENCODE) - err_num=LoadVector(reencode, TmpChar); - else - err_num=ChooseVect(TmpChar); - - if(err_num<0) - { - fprintf(stderr, - "\n Warning: after loading AFM file \n"); - - fprintf_str(stderr, - " only %d chars found instead %d for <%s>\n", - CharCount, GridCount, psfontfile); - } - - } - WorkVect(TmpChar); - -#ifdef DEBUG - - if(dd(D_VIEW_VECTOR)) - { - fprintf(stderr, "\n"); - if(encode==1) - fprintf(stderr, " Encoding: standard \n"); - else - fprintf(stderr, " Encoding: not standard \n"); - - if(reencode==FLG_REENCODE) - fprintf_str(stderr, " with reencode vector <%s>\n", psvectfile); - - PrintChar(FirstCharW); - } -#endif - -} - -/* - * As we write the output file, we search for /UniqueID, and if we find - * such, we munge it. We need to do this because the font is only partial, - * and if we send out a valid UniqueID, this well may mess up future jobs - * that use this font, but characters that we do not include. We munge - * the string from /UniqueID to /UniqueXX just to make it more clear - * what we've done. - */ - -static char * -KillUnique(char *s) -{ - char *r = strstr(s, "/UniqueID"); - if (r) { - r[7] = 'X'; - r[8] = 'X'; - } - return s; -} - -static void -OutASCII(FILE *fout, ub1 *buff, ub4 len) -{ - ub4 i; - - for (i = 0; i < len; i++) - { - if ((*buff == 10)||(*buff == 13)) - { - buff++; - *line++='\n'; - *line='\0'; - - if((find_encod==0)&&(lastpart==0)) - { - FindEncoding(); - } - - line=(unsigned char *) KillUnique((char *) tmpline); - - if(keep_flg==0) - fprintf(fout,"%s", line); - else - { - if(keep_num<0) - { - AddStr(line,keep_num); - if(keep_num==-2) - keep_num = -3; - } - - } - } - else - { - *line++ = *buff++; - } - } -} - -/* It's eexec decription for PFB format */ - -static void -BinEDeCrypt(ub1 *buff, ub4 len) -{ - ub4 i; - - for (i = 0; i < len; i++, temp++, buff++) - { - *temp = (*buff ^ (edr >> 8)); - edr = (*buff + edr) * c1 + c2; - } -} - -/* And it's eexec decription for PFA format */ - - -static void -HexEDeCrypt(unsigned char *mem) -{ - int ch1, ch2, cipher; - - - for(;*mem!='\n' && *mem!='\r'; temp++) - { - ch1= *mem++; - ch2= *mem++; - - if ('A' <= ch1 && ch1 <= 'F') - ch1 -= 'A' - 10; - else if ('a' <= ch1 && ch1 <= 'f') - ch1 -= 'a' - 10; - else - ch1 -= '0'; - ch1<<=4; - - if ('A' <= ch2 && ch2 <= 'F') - ch2 -= 'A' - 10; - else if ('a' <= ch2 && ch2 <= 'f') - ch2 -= 'a' - 10; - else - ch2 -= '0'; - - cipher = ch1 + ch2; - - *temp = (cipher ^ (edr >> 8)); - edr = (cipher + edr) * c1 + c2; - - } -} - -static int -PartialPFA(FILE *fin, FILE *fout) -{ - ub1 type; - ub4 memory, addmemory, length, add_of_len; - unsigned char *mem = tmpline; - int check_vect=0; - - tmpline=buf; - edr = EDR; - type = FLG_ASCII; - memory = BASE_MEM; - addmemory= ADD_MEM; - length=0; - temp=(typetemp *) UniGetMem(memory); - begin_of_scan=temp; - - for(;;) - { - if(fgets((char *)buf,BUFSIZ,fin)==NULL) - break; - switch (type) - { - case FLG_ASCII: - if(strstr((char *)buf,"currentfile eexec") != NULL) - { - type=FLG_BINARY; - } - - if((find_encod==0)&&(lastpart==0)) - { - FindEncoding(); - } - - if(keep_flg==0) - fprintf(fout,"%s", KillUnique((char *)buf)); - else - { - AddStr(buf,keep_num); - } - break; - - case FLG_BINARY: - if(check_vect==0) - { - tmpline=mem; - CheckChoosing(); - check_vect=1; - } - - if(GetZeroLine(buf)<0) - { - type = FLG_ZERO_LINE; - end_of_scan=temp; - ScanBinary(); - SubstNum(); - if(keep_flg==1) - { - keep_flg=0; - lastpart=1; - if(encode!=1) - { - UnDefineCharsW(); - if(encode==4) - RevChar(FirstCharA); - else - RevChar(FirstChar); - - OutChar(FirstCharW, fout); - } - Reeverse(FirstStr); - OutStr(RevStr, fout); - } - - OutHEX(fout); - UniFree(begin_of_scan); - fprintf(fout, "%s", KillUnique((char*) buf)); - break; - } - - add_of_len=strlen((char *) buf)/2; - length=length + add_of_len; - - if(length>memory) - { - memory = memory + addmemory; -/* Using "memory = length;" retains minimum */ -/* of memory but it will be more slowly */ - begin_of_scan = (typetemp*) UniRealloc(begin_of_scan, memory); - temp = begin_of_scan + length - add_of_len; - } - HexEDeCrypt(buf); - break; - case FLG_ZERO_LINE: - fprintf(fout, "%s", buf); - break; - } - } - if(type == FLG_ZERO_LINE) - return TRUE; - else return FALSE; -} - -#define FIRST_ASCII 1 -#define FIRST_BINARY 2 -#define NEXT_BINARY 3 -#define NEXT_ASCII 4 - -static int -PartialPFB(FILE *fin, FILE *fout) -{ - ub1 type; - ub4 t_length, length, nread; - int nbytes, rc; - int check_vect = 0; - int sub_type = FIRST_ASCII; - - line=tmpline; - edr = EDR; - -/* To find summary length of multiple binary parts we prescan font file */ - - t_length = 0L; - - for (;;) - { - if ((rc = fread((char *) buf, 1, 6, fin)) < 2) - { - return FALSE; - } - - if (buf[0] != 128) - return FALSE; - - type = buf[1]; - - if (type == FLG_EOF) - { - break; - } - - if (rc != 6) - return FALSE; - - length = little4(&buf[2]); - - if(type==FLG_BINARY) - { - t_length = (ub4)(length + t_length); - } - fseek(fin, ftell(fin) + length, SEEK_SET); - } - -/* Here we start real parsing */ - - sub_type = FIRST_BINARY; - - fseek(fin, 0L, SEEK_SET); - - for (;;) - { - if ((rc = fread((char *) buf, 1, 6, fin)) < 2) - { - return FALSE; - } - if (buf[0] != 128) - return FALSE; - - type = buf[1]; - - if (type == FLG_EOF) - { - return TRUE; - } - - if (rc != 6) - return FALSE; - - length = little4(&buf[2]); - - if(type==FLG_BINARY) - { - if(sub_type == FIRST_BINARY) - { - sub_type = NEXT_BINARY; - temp=(typetemp*) UniGetMem(t_length); - begin_of_scan=temp; - } - } - else - { - if( sub_type == NEXT_BINARY) - { - sub_type = NEXT_ASCII; - end_of_scan=temp; - ScanBinary(); - SubstNum(); - if(keep_flg==1) - { - keep_flg=0; - lastpart=1; - if(encode!=1) - { - UnDefineCharsW(); - if(encode==4) - RevChar(FirstCharA); - else - RevChar(FirstChar); - - OutChar(FirstCharW, fout); - } - - Reeverse(FirstStr); - OutStr(RevStr, fout); - } - OutHEX(fout); - UniFree(begin_of_scan); - } - } - - for (nread = 0; nread < length; nread += rc) - { - nbytes = min(BUFSIZ, length - nread); - - if ((rc = fread((char *) buf, 1, nbytes, fin)) == 0) - { - return FALSE; - } - switch (type) - { - case FLG_ASCII: - OutASCII(fout, buf, (ub4) rc); - break; - case FLG_BINARY: - if(check_vect==0) - { - CheckChoosing(); - check_vect=1; - } - BinEDeCrypt(buf, (ub4) rc); - break; - default: - return FALSE; - } - } - } -} - -static void -OutHEX(FILE *fout) -{ - int i=0; - int num; - static const char *hexstr = "0123456789abcdef"; - int bin; - - line=tmpline; - eer = EER; - label[number].begin = end_of_scan; - label[number].select = NOTHING; - number++; - - for(num=0; num < number; num++) - { - switch(label[num].select) - { - case NOTHING: - break; - case FLG_BINARY: - label[num].select=NOTHING; - for(temp=label[num].begin; temp<label[num+1].begin; temp++,i++) - { - bin = (*temp ^ (eer >> 8)); /* Eexec encryption */ - eer = ((bin + eer) * c1 + c2); - - *line++= hexstr[(bin&0xf0)>>4]; - *line++= hexstr[bin&0xf]; - - if (!((i + 1) % BYTES_PER_LINE)) - { - *line++='\0'; - line =tmpline; - fprintf(fout, "%s\n",line); - } - } - break; - } - } - if (i % BYTES_PER_LINE) - { - *line++='\0'; - line =tmpline; - fprintf(fout, "%s\n",line); - } -} - -/* We parse AFM file only if we've received errors after -parsing of own vector */ - -static int -Afm(void) -{ - unsigned char afmfile[100]; - FILE *fafm; - int err_num=0; - int i,j,k,num=0; - unsigned char name[40]; - - static const char *AfmKey[] = - { - "StartCharMetrics", - "EndCharMetrics", - "" - }; - - static const char *InfoKey[] = - { - "C", - "N", - "" - }; - - for(i=0; psfontfile[i]; i++) - { - if(psfontfile[i] == '.') - break; - else - afmfile[i]=psfontfile[i]; - } - - afmfile[i]='\0'; - strcat((char *) afmfile,".afm"); - fprintf_str(stderr, "<%s>", afmfile); - - if ((fafm = psfopen((char *) afmfile, "r")) == NULL) - { - NameOfProgram(); - perror((char *) afmfile); - return -1; - } - - for(j=0;;) - { - line = tmpline; - - if(fgets((char *) line,BUFSIZ,fafm)==NULL) - break; - - if(strstr((char *) line, AfmKey[j])!=NULL) - { - if(j==0) - { - j++; - continue; - } - else - { - fclose(fafm); - return 1; - } - } - - if(j==1) - { - for(k=0; err_num>=0; ) - { - err_num=GetWord(token); - if(err_num==2) - { - if(strcmp((char *) token,InfoKey[k])==0) - { - if(k==0) - { - err_num=GetWord(token); - num=atoi((char *) token); - k=1; - continue; - } - else - { - err_num=GetWord(token); - name[0]='/'; - name[1]='\0'; - strcat((char *) name, (char *) token); - if(num>=0) - FirstCharA=AddChar(FirstCharA, name, num); - break; - } - } - } - - } - } - } - return -2; -} - -int -FontPart(FILE *fout, unsigned char *fontfile, - unsigned char *vectfile) -{ - FILE *fin=0; - int num; - int rc; - int i; - - ind_ref=0; - reencode=0; - encode=0; - lastpart=0; - keep_flg=0; - flg_seac=0; - strcpy((char *) psfontfile, (char *) fontfile); - find_encod=0; - CharCount=0; - - if(loadbase != 1) - { - for(i=offset; i < NUM_LABEL; i++) - label[i].num=CHAR_NOT_DEF; - - - strcpy((char *) psvectfile, (char *) basevect); - -#ifdef DEBUG - if(dd(D_VIEW_VECTOR)) - fprintf_str(stderr, " Base vector <%s>.", basevect); -#endif - - if(LoadVector(1, FirstCharB)==1) - { - loadbase = FLG_LOAD_BASE; - - } - else - exit(1); - } - - if(vectfile) - { - reencode=FLG_REENCODE; - strcpy((char *) psvectfile, (char *) vectfile); - } - - for(num=0;num<NUM_LABEL;num++) - label[num].select = NOTHING; - - switch(DefTypeFont(fontfile)) - { - case PFA: - if ((fin = psfopen((char *) fontfile, "r"))==NULL) - { - NameOfProgram(); - perror((char *) fontfile); - return -1; - } - rc = PartialPFA(fin,fout); - if (rc == FALSE) - { - NameOfProgram(); - (void) fprintf_str(stderr, - "Error: %s is not a valid PFA file\n", fontfile); - return -1; - } - - break; - case PFB: - if ((fin = psfopen((char *) fontfile, OPEN_READ_BINARY))==NULL) - { - NameOfProgram(); - perror((char *) fontfile); - return -1; - } - rc = PartialPFB(fin,fout); - if (rc==FALSE) - { - NameOfProgram(); - (void) fprintf_str(stderr, - "Error: %s is not a valid PFB file\n", fontfile); - return -1; - } - break; - case -1: - NameOfProgram(); - fprintf_str(stderr, - "Error: %s has neither PFA nor PFB extension", fontfile); - return -1; - } - - UnDefineCharsW(); - - if(encode==AFM_ENC) - FirstCharA=UnDefineChars(FirstCharA); - - if(encode!=1) - { - UnDefineStr(); - } - - FirstChar=UnDefineChars(FirstChar); - - fclose(fin); - - for(i=0; i < number; i++) - label[i].num=CHAR_NOT_DEF; - - ClearB(); - return 1; -} - - - -static int -LoadVector(int num, CHAR *TmpChar) -{ - - FILE *fvect; - int i = 0; - int j = 0; - int end_vect=0; - int index_grid = 0; - - CharCount = 0; - - if ((fvect = psfopen((char *) psvectfile, "r")) == NULL) - { - NameOfProgram(); - perror((char *) psvectfile); - return -1; - } - - for(;;) - { - line = tmpline; - - if((fgets((char*)line,BUFSIZ,fvect)==NULL)||(end_vect!=0)) - break; - - for(;;) - { - j=GetWord(token); - if(j==3) - { - if(i==0) - { - i++; - continue; - } - - if(num==4) - { - if(grid[index_grid]==1) - { - if(ChooseChar(token, TmpChar)> 0) - CharCount++; - else - { - fprintf_str(stderr, - "Error: '%s' not found in reencoding vector <%s> for <%s>\n", - token,psvectfile, psfontfile); - } - } - index_grid++; - } - else - { - if(num==1) /* Build base vector */ - { - FirstCharB=AddChar(FirstCharB,token, CharCount); - CharCount++; - } - } - continue; - } - if(j== -1) - break; - if(j==2) - { - i=0; - end_vect = 1; - break; - } - } - } - - if(j==2) - { - if((index_grid!=256)&&(CharCount!=256)) - { - fclose(fvect); - fprintf_str(stderr,"Error during Load Vector in <%s> \n", - psvectfile); - fprintf(stderr, - "Found %d chars instead 256\n", max(index_grid,CharCount)); - return -3; - } - - if(CharCount>0) - { - fclose(fvect); - return 1; - } - else - { - fclose(fvect); - fprintf_str(stderr, - "\n Warning: Vector from <%s> for <%s> doesn't load\n", - psvectfile, psfontfile); - return -1; - } - } - else - { - fprintf_str(stderr,"\n Error: ending token 'def' not found in <%s> \n", - psvectfile); - return -2; - } -} - -static int -ChooseVect(CHAR *tmpChar) -{ - CHAR *ThisChar = tmpChar; - - CharCount=0; - while (ThisChar != NULL) - { - ThisChar->choose= grid[ThisChar->num]; - if(grid[ThisChar->num]==1) - { - CharCount++; - } - ThisChar = ThisChar->NextChar; - } - - if(CharCount<GridCount) - return -1; - else - return 1; - -} - -static void -ErrorOfScan(int err) -{ - switch(err) - { - - case 0: break; - - case ERR_FIRST_NUM: - fprintf(stderr, " First number not found "); - break; - case ERR_SECOND_NUM: - fprintf(stderr, " Second number not found "); - break; - - case ERR_FIRST_TOK: - fprintf(stderr, " First token not found "); - break; - - case ERR_SECOND_TOK: - fprintf(stderr, " Second token not found "); - break; - - case ERR_STACK: - fprintf(stderr, " End of stack "); - break; - - case ERR_NUM_CHAR: - fprintf(stderr, " Number of char not found "); - break; - - case ERR_NAME_CHAR: - fprintf(stderr, " Name of char not found "); - break; - } -} - -static void -NameOfProgram(void) -{ -#ifdef DVIPS - fprintf(stderr,"This is DVIPS, t1part module \n"); -#else - fprintf(stderr,"This is t1part, %s by Sergey Lesenko\n", version); -#endif -} - - |