home *** CD-ROM | disk | FTP | other *** search
- /* -mt -f -A -K -G -O -w */
- /* Compile with Turbo-C 2.0 */
- /*
- This program generates METAFONT code from a Bitmaps file JIS24
-
- Author: Francois Jalbert
- '
- Date: November 1990
-
- Version: 1.0
-
- Date: April 1991
-
- Version: 2.00
-
- Modifications: - Added four kanjis.
- - Fixed incorrect VGA resolution.
- - Command line parameter now supported.
- - Added automatic mode.
- - Added batch mode.
- - Updated and improved run-time messages.
- - Long triangles added by Mr. Masatoshi Watanabe. Fantastic!
- - Fixed and proportional parameters added.
- - Standard and dictionary parameters added.
- - JIS24 now accessed through low-level I/O channel for speed.
-
- Error Levels: 0 - Normal termination.
- 1 - Error.
- 2 - All fonts generated (batch).
- */
-
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
- #ifdef __TURBOC__
- #include <process.h>
- #endif
-
- #define True 1
- #define False 0
- /* Number of Bitmaps in JIS24 */
- #define BitmapMax 7806
- /* Size of each square Bitmap */
- #define SizeMax 24
- #define SizeMax1 25
- /* DOS file name length */
- #define FileNameDOS 250 /* includes path */
- #define TotalNameDOS 254
- /* DOS Record Size */
- #define RecSize 72 /* SizeMax*SizeMax/8 */
- /* Parameter flag */
- #define Flag1 '/' /* DOS style */
- #define Flag2 '-' /* UNIX style */
- /* Parameter keywords */
- #define ParamMax 20
- char FixedX1[]="FIXEDWIDTH";
- char FixedX2[]="FIXEDX";
- char FixedX3[]="NOPROPORTIONALWIDTH";
- char FixedX4[]="NOPROPORTIONALX";
- char NoFixedX1[]="NOFIXEDWIDTH";
- char NoFixedX2[]="NOFIXEDX";
- char NoFixedX3[]="PROPORTIONALWIDTH";
- char NoFixedX4[]="PROPORTIONALX";
- char FixedY1[]="FIXEDHEIGHT";
- char FixedY2[]="FIXEDY";
- char FixedY3[]="NOPROPORTIONALHEIGHT";
- char FixedY4[]="NOPROPORTIONALY";
- char NoFixedY1[]="NOFIXEDHEIGHT";
- char NoFixedY2[]="NOFIXEDY";
- char NoFixedY3[]="PROPORTIONALHEIGHT";
- char NoFixedY4[]="PROPORTIONALY";
- char Standard1[]="STANDARD";
- char NoStandard1[]="DICTIONARY";
- char Batch1[]="BATCH";
- /* Answer maximum length */
- #define AnswerMax 254
-
- typedef char FileNameType[FileNameDOS+1];
- typedef char TotalNameType[TotalNameDOS+1];
- typedef char ParamType[ParamMax+1];
- typedef char AnswerType[AnswerMax+1];
- /* Buffer for the Bitmap Data */
- struct ColumnType {
- unsigned char Data1,Data2,Data3;
- };
- typedef struct ColumnType BufferType[SizeMax]; /* start at 0 because of fread */
- /* The Bitmap array is defined larger to simplify the forthcoming code */
- typedef int BitmapType[SizeMax1+1][SizeMax1+1];
- struct BitmapsType {
- BitmapType Bitmap;
- int XMin,XMax,YMin,YMax;
- };
- /* Run time parameters */
- struct RunTimeType {
- FileNameType FileName;
- /* Batch mode */
- int Batch;
- /* Automatic mode for JemTeX fonts only */
- int Automatic;
- /* Fixed or proportional fonts */
- int FixedX,FixedY;
- /* Standard or dictionary fonts */
- int Standard;
- };
-
- void Delete(char *String, int Length)
- /* Delete the first Length characters of String */
- {
- int Index;
-
- Index=0;
- do String[Index]=String[Index+Length];
- while (String[++Index]!='\0');
- }
-
- /*------------------------------- GetParameters -----------------------------*/
-
- void SimpleQuery(char Title[], char ChoiceA[], char ChoiceB[], int *Answer)
- {
- char JChar[2];
- int Valid;
-
- do {
- Valid=True;
- printf("%s:\n",Title);
- printf(" a) %s\n",ChoiceA);
- printf(" b) %s\n",ChoiceB);
- printf("Your choice? ");
- if (ferror(stdout)) exit(1);
- if (gets(JChar)==NULL) exit(1);
- if (strlen(JChar)>1) exit(1);
- JChar[0]=toupper(JChar[0]);
- if (JChar[0]=='A') *Answer=True;
- else
- if (JChar[0]=='B') *Answer=False;
- else {
- Valid=False;
- if (putchar('\7')==EOF) exit(1);
- }
- } while (!Valid);
- printf("\n");
- if (ferror(stdout)) exit(1);
- }
-
- void GetMode(struct RunTimeType *RunTime)
- /* Determines if the desired font is a JemTeX font */
- {
- RunTime->Automatic=False;
- if (toupper(RunTime->FileName[0])=='K')
- if (toupper(RunTime->FileName[1])=='A')
- if (toupper(RunTime->FileName[2])=='N')
- if (toupper(RunTime->FileName[3])=='J')
- if (toupper(RunTime->FileName[4])=='I')
- if(('A'<=toupper(RunTime->FileName[5]))&&(toupper(RunTime->FileName[5])<='H'))
- if(('A'<=toupper(RunTime->FileName[6]))&&(toupper(RunTime->FileName[6])<='H'))
- if (strlen(RunTime->FileName)==7)
- if (toupper(RunTime->FileName[5])<='G') RunTime->Automatic=True;
- else
- if (toupper(RunTime->FileName[6])<='E') RunTime->Automatic=True;
- }
-
- void EchoParameters(struct RunTimeType *RunTime)
- /* Echoes the current parameters */
- {
- printf("Font=%s",RunTime->FileName);
- if (RunTime->FixedX) printf(" Fixed Width");
- else printf(" Prop. Width");
- if (RunTime->FixedY) printf(" Fixed Height");
- else printf(" Prop. Height");
- if (RunTime->Standard) printf(" Standard");
- else printf(" Dictionary");
- if (RunTime->Automatic) printf(" Automatic");
- else printf(" Manual");
- if (RunTime->Batch) printf(" Batch");
- printf(".\n");
- if (ferror(stdout)) exit(1);
- }
-
- void Manual(struct RunTimeType *RunTime)
- /* Get parameters from user */
- {
- printf("METAFONT file name? ");
- if (ferror(stdout)) exit(1);
- if (gets(RunTime->FileName)==NULL) exit(1);
- if (strlen(RunTime->FileName)>FileNameDOS) {
- /* File name too long */
- printf("\7File name too long: %s...",RunTime->FileName);
- exit(1);
- }
- printf("\n");
- if (ferror(stdout)) exit(1);
- SimpleQuery("Fixed or proportional font width","Fixed","Proportional",
- &RunTime->FixedX);
- SimpleQuery("Fixed or proportional font height","Fixed","Proportional",
- &RunTime->FixedY);
- SimpleQuery("Standard or dictionary font","Standard","Dictionary",
- &RunTime->Standard);
- /* Batch mode intrinsically isn't manual */
- RunTime->Batch=False;
- }
-
- void FindBefore(FileNameType FileName)
- /* No check for before kanjiaa */
- {
- if (FileName[6]=='a') {
- FileName[6]='h';
- FileName[5]--;
- }
- else
- FileName[6]--;
- }
-
- void FindAfter(FileNameType FileName)
- /* No check for above kanjihe */
- {
- if (FileName[6]=='h') {
- FileName[6]='a';
- FileName[5]++;
- }
- else
- FileName[6]++;
- }
-
- void ScanMF(FileNameType FileName)
- /* Scans backwards for the last JemTeX font generated */
- /* Looks first for a .TFM and then for an .MF */
- /* If no more fonts to generate, stops with error level 2 */
- {
- FILE *TestFile;
- TotalNameType TotalName;
- int Found;
-
- strcpy(FileName,"kanjihf");
- do {
- FindBefore(FileName);
- strcpy(TotalName,FileName);
- strcat(TotalName,".tfm");
- TestFile=fopen(TotalName,"r");
- Found=(TestFile!=NULL);
- if (!Found) {
- strcpy(TotalName,FileName);
- strcat(TotalName,".mf");
- TestFile=fopen(TotalName,"r");
- Found=(TestFile!=NULL);
- }
- } while (!Found && strcmp(FileName,"kanjiaa"));
- if (Found) {
- if (fclose(TestFile)==EOF) exit(1);
- if (strcmp(FileName,"kanjihe")) FindAfter(FileName);
- else {
- printf("\7All JemTeX fonts generated!\n");
- exit(2);
- }
- }
- }
-
- void Automate(struct RunTimeType *RunTime, int argc, char *argv[])
- /* Get parameters from command line */
- /* Finds the next font to be generated if in batch mode */
- {
- int ParamIndex,ParamLength,Index;
- ParamType Param;
-
- /* Defaults */
- strcpy(RunTime->FileName,"kanjiaa");
- RunTime->FixedX=False;
- RunTime->FixedY=False;
- RunTime->Standard=True;
- RunTime->Batch=False;
- /* Scan command line parameters */
- /* 0th is program's name, last is NULL */
- for (ParamIndex=1 ; ParamIndex<argc ; ParamIndex++) {
- ParamLength=strlen(argv[ParamIndex]);
- if (ParamLength>ParamMax) {
- /* Keyword too long */
- printf("\7Invalid command line parameter: %s...",argv[ParamIndex]);
- exit(1);
- }
- strcpy(Param,argv[ParamIndex]);
- if ((Param[0]==Flag1) || (Param[0]==Flag2)) {
- /* Not a font name */
- /* Delete 1 char at the 1st position */
- Delete(Param,1);
- /* Convert to upper case */
- for (Index=0 ; Index<ParamLength ; Index++)
- Param[Index]=toupper(Param[Index]);
- /* Scan known keywords */
- if ((!strcmp(Param,FixedX1)) || (!strcmp(Param,FixedX2)) ||
- (!strcmp(Param,FixedX3)) || (!strcmp(Param,FixedX4)))
- RunTime->FixedX=True;
- else
- if ((!strcmp(Param,NoFixedX1)) || (!strcmp(Param,NoFixedX2)) ||
- (!strcmp(Param,NoFixedX3)) || (!strcmp(Param,NoFixedX4)))
- RunTime->FixedX=False;
- else
- if ((!strcmp(Param,FixedY1)) || (!strcmp(Param,FixedY2)) ||
- (!strcmp(Param,FixedY3)) || (!strcmp(Param,FixedY4)))
- RunTime->FixedY=True;
- else
- if ((!strcmp(Param,NoFixedY1)) || (!strcmp(Param,NoFixedY2)) ||
- (!strcmp(Param,NoFixedY3)) || (!strcmp(Param,NoFixedY4)))
- RunTime->FixedY=False;
- else
- if (!strcmp(Param,Standard1))
- RunTime->Standard=True;
- else
- if (!strcmp(Param,NoStandard1))
- RunTime->Standard=False;
- else
- if (!strcmp(Param,Batch1))
- RunTime->Batch=True;
- else {
- /* Unknown keyword */
- printf("\7Invalid command line parameter: %s...\n",Param);
- exit(1);
- }
- }
- else {
- /* Must be a font name */
- if (ParamLength>FileNameDOS) {
- /* File name too long */
- printf("\7File name too long: %s...\n",Param);
- exit(1);
- }
- strcpy(RunTime->FileName,Param);
- }
- }
- if (RunTime->Batch) ScanMF(RunTime->FileName);
- }
-
- void GetParameters(struct RunTimeType *RunTime, int argc, char *argv[])
- /* Get parameters from user or command line */
- {
- /* 0th is program's name, last is NULL */
- if (argc==1) Manual(RunTime);
- else Automate(RunTime,argc,argv);
- GetMode(RunTime);
- EchoParameters(RunTime);
- printf("\n");
- if (ferror(stdout)) exit(1);
- }
-
- /*---------------------------------- Output ---------------------------------*/
-
- void BeginOut(FILE *OutFile, struct RunTimeType *RunTime)
- /* Writes initial METAFONT header */
- /* Co-author is Mr. Masatoshi Watanabe */
- {
- fprintf(OutFile,"%%JIS2MF Version 2.00 of 14 April 1991.\n");
- fprintf(OutFile,"\n");
- fprintf(OutFile,"%% Font=%s\n",RunTime->FileName);
- if (RunTime->FixedX) fprintf(OutFile,"%% Fixed Width\n");
- else fprintf(OutFile,"%% Proportional Width\n");
- if (RunTime->FixedY) fprintf(OutFile,"%% Fixed Height\n");
- else fprintf(OutFile,"%% Proportional Height\n");
- if (RunTime->Standard) fprintf(OutFile,"%% Standard Positioning\n");
- else fprintf(OutFile,"%% Dictionary Positioning\n");
- fprintf(OutFile,"\n");
- fprintf(OutFile,"tracingstats:=1;\n");
- fprintf(OutFile,"screen_cols:=640; %%VGA\n");
- fprintf(OutFile,"screen_rows:=480; %%VGA\n");
- fprintf(OutFile,"font_size 10pt#;\n");
- if (RunTime->Standard) {
- fprintf(OutFile,"u#:=12.7/36pt#;\n");
- fprintf(OutFile,"body_height#:=23.25u#;\n");
- fprintf(OutFile,"desc_depth#:=4.75u#;\n");
- }
- else {
- fprintf(OutFile,"u#:=13/36pt#;\n");
- fprintf(OutFile,"body_height#:=21u#;\n");
- fprintf(OutFile,"desc_depth#:=7u#;\n");
- }
- fprintf(OutFile,"\n");
- fprintf(OutFile,"letter_fit#:=0pt#;\n");
- fprintf(OutFile,"asc_height#:=0pt#;\n");
- fprintf(OutFile,"cap_height#:=0pt#;\n");
- fprintf(OutFile,"fig_height#:=0pt#;\n");
- fprintf(OutFile,"x_height#:=0pt#;\n");
- fprintf(OutFile,"math_axis#:=0pt#;\n");
- fprintf(OutFile,"bar_height#:=0pt#;\n");
- fprintf(OutFile,"comma_depth#:=0pt#;\n");
- fprintf(OutFile,"crisp#:=0pt#;\n");
- fprintf(OutFile,"tiny#:=0pt#;\n");
- fprintf(OutFile,"fine#:=0pt#;\n");
- fprintf(OutFile,"thin_join#:=0pt#;\n");
- fprintf(OutFile,"hair#:=1pt#;\n");
- fprintf(OutFile,"stem#:=1pt#;\n");
- fprintf(OutFile,"curve#:=1pt#;\n");
- fprintf(OutFile,"flare#:=1pt#;\n");
- fprintf(OutFile,"dot_size#:=0pt#;\n");
- fprintf(OutFile,"cap_hair#:=1pt#;\n");
- fprintf(OutFile,"cap_stem#:=1pt#;\n");
- fprintf(OutFile,"cap_curve#:=1pt#;\n");
- fprintf(OutFile,"rule_thickness#:=0pt#;\n");
- fprintf(OutFile,"vair#:=0pt#;\n");
- fprintf(OutFile,"notch_cut#:=0pt#;\n");
- fprintf(OutFile,"bar#:=1pt#;\n");
- fprintf(OutFile,"slab#:=1pt#;\n");
- fprintf(OutFile,"cap_bar#:=1pt#;\n");
- fprintf(OutFile,"cap_band#:=1pt#;\n");
- fprintf(OutFile,"cap_notch_cut#:=0pt#;\n");
- fprintf(OutFile,"serif_drop#:=0pt#;\n");
- fprintf(OutFile,"stem_corr#:=0pt#;\n");
- fprintf(OutFile,"vair_corr#:=0pt#;\n");
- fprintf(OutFile,"o#:=0pt#;\n");
- fprintf(OutFile,"apex_o#:=0pt#;\n");
- fprintf(OutFile,"hefty:=true;\n");
- fprintf(OutFile,"serifs:=true;\n");
- fprintf(OutFile,"monospace:=false;\n");
- fprintf(OutFile,"math_fitting:=false;\n");
- fprintf(OutFile,"\n");
- fprintf(OutFile,"mode_setup;\n");
- fprintf(OutFile,"font_setup;\n");
- fprintf(OutFile,"\n");
- fprintf(OutFile,"pair z;\n");
- fprintf(OutFile,"\n");
- fprintf(OutFile,"def s(expr col,row)= %%square\n");
- fprintf(OutFile," z:=((col*u),(row*u));\n");
- fprintf(OutFile," fill unitsquare scaled u shifted z;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def sul(expr col,row)= %%upper left square\n");
- fprintf(OutFile," z:=((col*u),(row*u)+.5u);\n");
- fprintf(OutFile," fill unitsquare scaled .5u shifted z;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def sur(expr col,row)= %%upper right square\n");
- fprintf(OutFile," z:=((col*u)+.5u,(row*u)+.5u);\n");
- fprintf(OutFile," fill unitsquare scaled .5u shifted z;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def sbr(expr col,row)= %%bottom right square\n");
- fprintf(OutFile," z:=((col*u)+.5u,(row*u));\n");
- fprintf(OutFile," fill unitsquare scaled .5u shifted z;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def sbl(expr col,row)= %%bottom left square\n");
- fprintf(OutFile," z:=((col*u),(row*u));\n");
- fprintf(OutFile," fill unitsquare scaled .5u shifted z;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"\n");
- fprintf(OutFile,"def c(expr col,row)= %%circle\n");
- fprintf(OutFile," z:=((col*u)+.5u,(row*u)+.5u);\n");
- fprintf(OutFile," fill fullcircle scaled u shifted z;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def cul(expr col,row)= %%upper left circle\n");
- fprintf(OutFile," z:=((col*u)+.5u,(row*u)+.5u);\n");
- fprintf(OutFile," fill z--quartercircle rotated 90 scaled u shifted z--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def cur(expr col,row)= %%upper right circle\n");
- fprintf(OutFile," z:=((col*u)+.5u,(row*u)+.5u);\n");
- fprintf(OutFile," fill z--quartercircle scaled u shifted z--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def cbr(expr col,row)= %%bottom right circle\n");
- fprintf(OutFile," z:=((col*u)+.5u,(row*u)+.5u);\n");
- fprintf(OutFile," fill z--quartercircle rotated 270 scaled u shifted z--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def cbl(expr col,row)= %%bottom left circle\n");
- fprintf(OutFile," z:=((col*u)+.5u,(row*u)+.5u);\n");
- fprintf(OutFile," fill z--quartercircle rotated 180 scaled u shifted z--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"\n");
- fprintf(OutFile,"def tul(expr col,row)= %%upper left triangle\n");
- fprintf(OutFile," z:=((col*u)+.5u,(row*u)+.5u);\n");
- fprintf(OutFile," fill z--z+(0,.5u)--z-(.5u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def tur(expr col,row)= %%upper right triangle\n");
- fprintf(OutFile," z:=((col*u)+.5u,(row*u)+.5u);\n");
- fprintf(OutFile," fill z--z+(0,.5u)--z+(.5u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def tbr(expr col,row)= %%bottom right triangle\n");
- fprintf(OutFile," z:=((col*u)+.5u,(row*u)+.5u);\n");
- fprintf(OutFile," fill z--z-(0,.5u)--z+(.5u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def tbl(expr col,row)= %%bottom left triangle\n");
- fprintf(OutFile," z:=((col*u)+.5u,(row*u)+.5u);\n");
- fprintf(OutFile," fill z--z-(0,.5u)--z-(.5u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"\n");
- fprintf(OutFile,"def rul(expr col,row)= %%upper left reverse triangle\n");
- fprintf(OutFile," z:=((col*u),(row*u)+u);\n");
- fprintf(OutFile," fill z--z-(0,.5u)--z+(.5u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def rur(expr col,row)= %%upper right reverse triangle\n");
- fprintf(OutFile," z:=((col*u)+u,(row*u)+u);\n");
- fprintf(OutFile," fill z--z-(0,.5u)--z-(.5u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def rbr(expr col,row)= %%bottom right reverse triangle\n");
- fprintf(OutFile," z:=((col*u)+u,(row*u));\n");
- fprintf(OutFile," fill z--z+(0,.5u)--z-(.5u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def rbl(expr col,row)= %%bottom left reverse triangle\n");
- fprintf(OutFile," z:=((col*u),(row*u));\n");
- fprintf(OutFile," fill z--z+(0,.5u)--z+(.5u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"\n");
- fprintf(OutFile,"def tuul(expr col,row)= %%upper left long triangle\n");
- fprintf(OutFile," z:=((col*u)+u,(row*u)+.5u);\n");
- fprintf(OutFile," fill z--z+(0,.5u)--z-(u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def tull(expr col,row)= %%upper left long triangle\n");
- fprintf(OutFile," z:=((col*u)+.5u,(row*u));\n");
- fprintf(OutFile," fill z--z+(0,u)--z-(.5u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def tuur(expr col,row)= %%upper right long triangle\n");
- fprintf(OutFile," z:=((col*u),(row*u)+.5u);\n");
- fprintf(OutFile," fill z--z+(0,.5u)--z+(u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def turr(expr col,row)= %%upper right long triangle\n");
- fprintf(OutFile," z:=((col*u)+.5u,(row*u));\n");
- fprintf(OutFile," fill z--z+(0,u)--z+(.5u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def tbbr(expr col,row)= %%bottom right long triangle\n");
- fprintf(OutFile," z:=((col*u),(row*u)+.5u);\n");
- fprintf(OutFile," fill z--z-(0,.5u)--z+(u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def tbrr(expr col,row)= %%bottom right long triangle\n");
- fprintf(OutFile," z:=((col*u)+.5u,(row*u)+u);\n");
- fprintf(OutFile," fill z--z-(0,u)--z+(.5u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def tbbl(expr col,row)= %%bottom left long triangle\n");
- fprintf(OutFile," z:=((col*u)+u,(row*u)+.5u);\n");
- fprintf(OutFile," fill z--z-(0,.5u)--z-(u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def tbll(expr col,row)= %%bottom left long triangle\n");
- fprintf(OutFile," z:=((col*u)+.5u,(row*u)+u);\n");
- fprintf(OutFile," fill z--z-(0,u)--z-(.5u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"\n");
- fprintf(OutFile,"def ruul(expr col,row)= %%upper left reverse long triangle\n");
- fprintf(OutFile," z:=((col*u),(row*u)+u);\n");
- fprintf(OutFile," fill z--z-(0,u)--z+(.5u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def rull(expr col,row)= %%upper left reverse long triangle\n");
- fprintf(OutFile," z:=((col*u),(row*u)+u);\n");
- fprintf(OutFile," fill z--z-(0,.5u)--z+(u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def ruur(expr col,row)= %%upper right reverse long triangle\n");
- fprintf(OutFile," z:=((col*u)+u,(row*u)+u);\n");
- fprintf(OutFile," fill z--z-(0,u)--z-(.5u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def rurr(expr col,row)= %%upper right reverse long triangle\n");
- fprintf(OutFile," z:=((col*u)+u,(row*u)+u);\n");
- fprintf(OutFile," fill z--z-(0,.5u)--z-(u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def rbbr(expr col,row)= %%bottom right reverse long triangle\n");
- fprintf(OutFile," z:=((col*u)+u,(row*u));\n");
- fprintf(OutFile," fill z--z+(0,u)--z-(.5u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def rbrr(expr col,row)= %%bottom right reverse long triangle\n");
- fprintf(OutFile," z:=((col*u)+u,(row*u));\n");
- fprintf(OutFile," fill z--z+(0,.5u)--z-(u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def rbbl(expr col,row)= %%bottom left reverse long triangle\n");
- fprintf(OutFile," z:=((col*u),(row*u));\n");
- fprintf(OutFile," fill z--z+(0,u)--z+(.5u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"def rbll(expr col,row)= %%bottom left reverse long triangle\n");
- fprintf(OutFile," z:=((col*u),(row*u));\n");
- fprintf(OutFile," fill z--z+(0,.5u)--z+(u,0)--cycle;\n");
- fprintf(OutFile,"enddef;\n");
- fprintf(OutFile,"\n");
- if (ferror(OutFile)) exit(1);
- }
-
- void ActiveBitmap(FILE *OutFile, BitmapType Bitmap, int X, int Y, int XX,
- float YY)
- /* Writes METAFONT code for an active cell */
- /* Co-author is Mr. Masatoshi Watanabe */
- {
- int SquareUR,SquareUL,SquareBR,SquareBL;
- int CircleUR,CircleUL,CircleBR,CircleBL;
- int LTryUUR,LTryURR,LTryUUL,LTryULL;
- int LTryBBR,LTryBRR,LTryBBL,LTryBLL;
-
- SquareUL=(Bitmap[X-1][Y] || Bitmap[X-1][Y+1] || Bitmap[X][Y+1]);
- SquareUR=(Bitmap[X+1][Y] || Bitmap[X+1][Y+1] || Bitmap[X][Y+1]);
- SquareBL=(Bitmap[X-1][Y] || Bitmap[X-1][Y-1] || Bitmap[X][Y-1]);
- SquareBR=(Bitmap[X+1][Y] || Bitmap[X+1][Y-1] || Bitmap[X][Y-1]);
- CircleUL=(!Bitmap[X-1][Y-1] && !Bitmap[X-1][Y] && !Bitmap[X-1][Y+1] &&
- !Bitmap[X][Y+1] && !Bitmap[X+1][Y+1]);
- CircleUR=(!Bitmap[X+1][Y-1] && !Bitmap[X+1][Y] && !Bitmap[X+1][Y+1] &&
- !Bitmap[X][Y+1] && !Bitmap[X-1][Y+1]);
- CircleBL=(!Bitmap[X-1][Y+1] && !Bitmap[X-1][Y] && !Bitmap[X-1][Y-1] &&
- !Bitmap[X][Y-1] && !Bitmap[X+1][Y-1]);
- CircleBR=(!Bitmap[X+1][Y+1] && !Bitmap[X+1][Y] && !Bitmap[X+1][Y-1] &&
- !Bitmap[X][Y-1] && !Bitmap[X-1][Y-1]);
- LTryUUL=(Bitmap[X-1][Y-1] && !Bitmap[X-1][Y] && !Bitmap[X-1][Y+1] &&
- !Bitmap[X][Y+1] && !Bitmap[X+1][Y+1] && Bitmap[X+1][Y]);
- LTryUUR=(Bitmap[X+1][Y-1] && !Bitmap[X+1][Y] && !Bitmap[X+1][Y+1] &&
- !Bitmap[X][Y+1] && !Bitmap[X-1][Y+1] && Bitmap[X-1][Y]);
- LTryBBL=(Bitmap[X-1][Y+1] && !Bitmap[X-1][Y] && !Bitmap[X-1][Y-1] &&
- !Bitmap[X][Y-1] && !Bitmap[X+1][Y-1] && Bitmap[X+1][Y]);
- LTryBBR=(Bitmap[X+1][Y+1] && !Bitmap[X+1][Y] && !Bitmap[X+1][Y-1] &&
- !Bitmap[X][Y-1] && !Bitmap[X-1][Y-1] && Bitmap[X-1][Y]);
- LTryULL=(!Bitmap[X-1][Y-1] && !Bitmap[X-1][Y] && !Bitmap[X-1][Y+1] &&
- !Bitmap[X][Y+1] && Bitmap[X+1][Y+1] && Bitmap[X][Y-1]);
- LTryURR=(!Bitmap[X+1][Y-1] && !Bitmap[X+1][Y] && !Bitmap[X+1][Y+1] &&
- !Bitmap[X][Y+1] && Bitmap[X-1][Y+1] && Bitmap[X][Y-1]);
- LTryBLL=(!Bitmap[X-1][Y+1] && !Bitmap[X-1][Y] && !Bitmap[X-1][Y-1] &&
- !Bitmap[X][Y-1] && Bitmap[X+1][Y-1] && Bitmap[X][Y+1]);
- LTryBRR=(!Bitmap[X+1][Y+1] && !Bitmap[X+1][Y] && !Bitmap[X+1][Y-1] &&
- !Bitmap[X][Y-1] && Bitmap[X-1][Y-1] && Bitmap[X][Y+1]);
- if (LTryUUL) fprintf(OutFile,"tuul(%d,%4.2f);",XX,YY);
- if (LTryULL) fprintf(OutFile,"tull(%d,%4.2f);",XX,YY);
- if (LTryUUR) fprintf(OutFile,"tuur(%d,%4.2f);",XX,YY);
- if (LTryURR) fprintf(OutFile,"turr(%d,%4.2f);",XX,YY);
- if (LTryBBL) fprintf(OutFile,"tbbl(%d,%4.2f);",XX,YY);
- if (LTryBLL) fprintf(OutFile,"tbll(%d,%4.2f);",XX,YY);
- if (LTryBBR) fprintf(OutFile,"tbbr(%d,%4.2f);",XX,YY);
- if (LTryBRR) fprintf(OutFile,"tbrr(%d,%4.2f);",XX,YY);
- if (SquareUL && SquareUR && SquareBL && SquareBR)
- fprintf(OutFile,"s(%d,%4.2f);",XX,YY);
- else
- if (CircleUL && CircleUR && CircleBL && CircleBR)
- fprintf(OutFile,"c(%d,%4.2f);",XX,YY);
- else {
- if (!LTryUUL && !LTryULL && !LTryUUR && !LTryBLL)
- if (SquareUL) fprintf(OutFile,"sul(%d,%4.2f);",XX,YY);
- else
- if (CircleUL) fprintf(OutFile,"cul(%d,%4.2f);",XX,YY);
- else fprintf(OutFile,"tul(%d,%4.2f);",XX,YY);
- if (!LTryUUL && !LTryURR && !LTryUUR && !LTryBRR)
- if (SquareUR) fprintf(OutFile,"sur(%d,%4.2f);",XX,YY);
- else
- if (CircleUR) fprintf(OutFile,"cur(%d,%4.2f);",XX,YY);
- else fprintf(OutFile,"tur(%d,%4.2f);",XX,YY);
- if (!LTryBBL && !LTryULL && !LTryBBR && !LTryBLL)
- if (SquareBL) fprintf(OutFile,"sbl(%d,%4.2f);",XX,YY);
- else
- if (CircleBL) fprintf(OutFile,"cbl(%d,%4.2f);",XX,YY);
- else fprintf(OutFile,"tbl(%d,%4.2f);",XX,YY);
- if (!LTryBBL && !LTryURR && !LTryBBR && !LTryBRR)
- if (SquareBR) fprintf(OutFile,"sbr(%d,%4.2f);",XX,YY);
- else
- if (CircleBR) fprintf(OutFile,"cbr(%d,%4.2f);",XX,YY);
- else fprintf(OutFile,"tbr(%d,%4.2f);",XX,YY);
- }
- if (ferror(OutFile)) exit(1);
- }
-
- void InactiveBitmap(FILE *OutFile, BitmapType Bitmap, int X, int Y, int XX,
- float YY, int *Active)
- /* Writes METAFONT code for an inactive cell */
- /* Co-author is Mr. Masatoshi Watanabe */
- {
- if (Bitmap[X-1][Y] && Bitmap[X][Y+1])
- if (Bitmap[X-1][Y-1] && !Bitmap[X+1][Y+1])
- { *Active=True; fprintf(OutFile,"ruul(%d,%4.2f);",XX,YY); }
- else
- if (Bitmap[X+1][Y+1] && !Bitmap[X-1][Y-1])
- { *Active=True; fprintf(OutFile,"rull(%d,%4.2f);",XX,YY); }
- else
- { *Active=True; fprintf(OutFile,"rul(%d,%4.2f);",XX,YY); }
- if (Bitmap[X+1][Y] && Bitmap[X][Y+1])
- if (Bitmap[X+1][Y-1] && !Bitmap[X-1][Y+1])
- { *Active=True; fprintf(OutFile,"ruur(%d,%4.2f);",XX,YY); }
- else
- if (Bitmap[X-1][Y+1] && !Bitmap[X+1][Y-1])
- { *Active=True; fprintf(OutFile,"rurr(%d,%4.2f);",XX,YY); }
- else
- { *Active=True; fprintf(OutFile,"rur(%d,%4.2f);",XX,YY); }
- if (Bitmap[X-1][Y] && Bitmap[X][Y-1])
- if (Bitmap[X-1][Y+1] && !Bitmap[X+1][Y-1])
- { *Active=True; fprintf(OutFile,"rbbl(%d,%4.2f);",XX,YY); }
- else
- if (Bitmap[X+1][Y-1] && !Bitmap[X-1][Y+1])
- { *Active=True; fprintf(OutFile,"rbll(%d,%4.2f);",XX,YY); }
- else
- { *Active=True; fprintf(OutFile,"rbl(%d,%4.2f);",XX,YY); }
- if (Bitmap[X+1][Y] && Bitmap[X][Y-1])
- if (Bitmap[X+1][Y+1] && !Bitmap[X-1][Y-1])
- { *Active=True; fprintf(OutFile,"rbbr(%d,%4.2f);",XX,YY); }
- else
- if (Bitmap[X-1][Y-1] && !Bitmap[X+1][Y+1])
- { *Active=True; fprintf(OutFile,"rbrr(%d,%4.2f);",XX,YY); }
- else
- { *Active=True; fprintf(OutFile,"rbr(%d,%4.2f);",XX,YY); }
- if (ferror(OutFile)) exit(1);
- }
-
- void MiddleOut(FILE *OutFile, struct BitmapsType *Bitmaps, int Number,
- int Standard)
- /* Writes METAFONT code for a given Bitmap */
- {
- int X,Y;
- int Active;
-
- fprintf(OutFile,"beginchar(%d,%du#,",Number,Bitmaps->XMax-Bitmaps->XMin+1);
- if (Standard) {
- if (Bitmaps->YMax>0.75) fprintf(OutFile,"%4.2fu#,",Bitmaps->YMax-0.75);
- else fprintf(OutFile,"0,");
- if (5.75>Bitmaps->YMin) fprintf(OutFile,"%4.2fu#);\n",5.75-Bitmaps->YMin);
- else fprintf(OutFile,"0);\n");
- }
- else {
- if (Bitmaps->YMax>3) fprintf(OutFile,"%du#,",Bitmaps->YMax-3);
- else fprintf(OutFile,"0,");
- if (8>Bitmaps->YMin) fprintf(OutFile,"%du#);\n",8-Bitmaps->YMin);
- else fprintf(OutFile,"0);\n");
- }
- fprintf(OutFile,"normal_adjust_fit(2u#,2u#);\n");
- for (X=Bitmaps->XMin ; X<=Bitmaps->XMax ; X++)
- for (Y=1 ; Y<=SizeMax ; Y++) {
- Active=Bitmaps->Bitmap[X][Y];
- if (Active)
- /* Current pixel is on */
- if (Standard)
- ActiveBitmap(OutFile,Bitmaps->Bitmap,X,Y,X-Bitmaps->XMin,Y-3.75);
- else
- ActiveBitmap(OutFile,Bitmaps->Bitmap,X,Y,X-Bitmaps->XMin,Y-6);
- else
- /* Current pixel is off */
- if (Standard)
- InactiveBitmap(OutFile,Bitmaps->Bitmap,X,Y,X-Bitmaps->XMin,Y-3.75,
- &Active);
- else
- InactiveBitmap(OutFile,Bitmaps->Bitmap,X,Y,X-Bitmaps->XMin,Y-6,
- &Active);
- /* Avoid METAFONT buffer overflow */
- if (Active) fprintf(OutFile,"\n");
- }
- fprintf(OutFile,"endchar;\n");
- fprintf(OutFile,"\n");
- if (ferror(OutFile)) exit(1);
- }
-
- void EndOut(FILE *OutFile, struct RunTimeType *RunTime)
- /* Writes final METAFONT header */
- {
- fprintf(OutFile,"font_identifier \"%s\";\n",RunTime->FileName);
- if (RunTime->Standard)
- fprintf(OutFile,"font_coding_scheme \"JemTeX Standard\";\n");
- else
- fprintf(OutFile,"font_coding_scheme \"JemTeX Dictionary\";\n");
- fprintf(OutFile,"font_slant slant;\n");
- fprintf(OutFile,"font_normal_space 8u#;\n");
- fprintf(OutFile,"font_normal_stretch 4u#;\n");
- fprintf(OutFile,"font_normal_shrink 3u#;\n");
- fprintf(OutFile,"font_x_height 24u#; %%ex\n");
- fprintf(OutFile,"font_quad 24u#; %%em\n");
- fprintf(OutFile,"font_extra_space 0u#;\n");
- fprintf(OutFile,"\n");
- /* Must end with CR/LF because of a bug(?) in emTeX METAFONT */
- fprintf(OutFile,"bye\n");
- if (ferror(OutFile)) exit(1);
- }
-
- /*--------------------------------- Generate --------------------------------*/
-
- void FindWantedBitmap(int Automatic, int *First, int *WantedBitmap, int *Number)
- /* Finds number of the next desired Bitmap either automatically or manually */
- /* The characters 0 and 1 in the first font kanjiaa are both set to Bitmap 1 */
- {
- int Valid;
- AnswerType Answer;
-
- if (Automatic)
- /* Find automatically */
- if (*First)
- /* Early in font kanjiaa */
- if (*WantedBitmap==-1) *WantedBitmap=1;
- else {
- *WantedBitmap=1;
- *First=False;
- }
- else
- if ( (*Number==128) || (*WantedBitmap==BitmapMax) ) *WantedBitmap=0;
- else (*WantedBitmap)++;
- else
- /* Find manually */
- do {
- printf("Bitmap number? ");
- if (ferror(stdout)) exit(1);
- if (gets(Answer)==NULL) exit(1);
- if (1!=sscanf(Answer,"%d",WantedBitmap)) exit(1);
- Valid=( (0<=*WantedBitmap) && (*WantedBitmap<=BitmapMax) );
- if (!Valid) {
- printf("\7Bitmap %d out of range...\n",*WantedBitmap);
- if (ferror(stdout)) exit(1);
- }
- } while (!Valid);
- printf("Bitmap number %d.\n",*WantedBitmap);
- if (ferror(stdout)) exit(1);
- }
-
- void ScanBitmap(FILE *InFile, BitmapType Bitmap, int *Empty)
- /* Reads the Bitmap in a logical grid */
- /* (0,0) is the lower left corner of the Bitmap */
- {
- int Y;
- BufferType Buffer;
- struct ColumnType *Column;
-
- /* Read the Bitmap */
- if (fread(Buffer,(unsigned)RecSize,1U,InFile)!=1U) exit(1);
- /* Find if the Bitmap is empty */
- *Empty=True;
- for (Y=1 ; Y<=SizeMax ; Y++) {
- Column=&Buffer[Y-1];
- if ( (Column->Data1!=(unsigned char)'\x00') ||
- (Column->Data2!=(unsigned char)'\x00') ||
- (Column->Data3!=(unsigned char)'\x00') ) {
- *Empty=False;
- break;
- }
- }
- /* Update logical grid */
- if (!*Empty)
- for (Y=1 ; Y<=SizeMax ; Y++) {
- Column=&Buffer[SizeMax-Y];
- Bitmap[ 1][Y]=(int)(Column->Data1 & (unsigned char)'\x80');
- Bitmap[ 2][Y]=(int)(Column->Data1 & (unsigned char)'\x40');
- Bitmap[ 3][Y]=(int)(Column->Data1 & (unsigned char)'\x20');
- Bitmap[ 4][Y]=(int)(Column->Data1 & (unsigned char)'\x10');
- Bitmap[ 5][Y]=(int)(Column->Data1 & (unsigned char)'\x08');
- Bitmap[ 6][Y]=(int)(Column->Data1 & (unsigned char)'\x04');
- Bitmap[ 7][Y]=(int)(Column->Data1 & (unsigned char)'\x02');
- Bitmap[ 8][Y]=(int)(Column->Data1 & (unsigned char)'\x01');
- Bitmap[ 9][Y]=(int)(Column->Data2 & (unsigned char)'\x80');
- Bitmap[10][Y]=(int)(Column->Data2 & (unsigned char)'\x40');
- Bitmap[11][Y]=(int)(Column->Data2 & (unsigned char)'\x20');
- Bitmap[12][Y]=(int)(Column->Data2 & (unsigned char)'\x10');
- Bitmap[13][Y]=(int)(Column->Data2 & (unsigned char)'\x08');
- Bitmap[14][Y]=(int)(Column->Data2 & (unsigned char)'\x04');
- Bitmap[15][Y]=(int)(Column->Data2 & (unsigned char)'\x02');
- Bitmap[16][Y]=(int)(Column->Data2 & (unsigned char)'\x01');
- Bitmap[17][Y]=(int)(Column->Data3 & (unsigned char)'\x80');
- Bitmap[18][Y]=(int)(Column->Data3 & (unsigned char)'\x40');
- Bitmap[19][Y]=(int)(Column->Data3 & (unsigned char)'\x20');
- Bitmap[20][Y]=(int)(Column->Data3 & (unsigned char)'\x10');
- Bitmap[21][Y]=(int)(Column->Data3 & (unsigned char)'\x08');
- Bitmap[22][Y]=(int)(Column->Data3 & (unsigned char)'\x04');
- Bitmap[23][Y]=(int)(Column->Data3 & (unsigned char)'\x02');
- Bitmap[24][Y]=(int)(Column->Data3 & (unsigned char)'\x01');
- }
- }
-
- void ScanSides(struct BitmapsType *Bitmaps, int FixedX, int FixedY)
- /* Determines the minimal size of the Bitmap for proportional spacing */
- {
- int X,Y;
-
- if (FixedX) {
- Bitmaps->XMin=1;
- Bitmaps->XMax=SizeMax;
- }
- else {
- Bitmaps->XMin=SizeMax1;
- for (X=SizeMax ; X>=1 ; X--)
- for (Y=1 ; Y<=SizeMax ; Y++)
- if (Bitmaps->Bitmap[X][Y]) Bitmaps->XMin=X;
- Bitmaps->XMax=0;
- for (X=1 ; X<=SizeMax ; X++)
- for (Y=1 ; Y<=SizeMax ; Y++)
- if (Bitmaps->Bitmap[X][Y]) Bitmaps->XMax=X;
- }
- if (FixedY) {
- Bitmaps->YMin=1;
- Bitmaps->YMax=SizeMax;
- }
- else {
- Bitmaps->YMin=SizeMax1;
- for (Y=SizeMax ; Y>=1 ; Y--)
- for (X=1 ; X<=SizeMax ; X++)
- if (Bitmaps->Bitmap[X][Y]) Bitmaps->YMin=Y;
- Bitmaps->YMax=0;
- for (Y=1 ; Y<=SizeMax ; Y++)
- for (X=1 ; X<=SizeMax ; X++)
- if (Bitmaps->Bitmap[X][Y]) Bitmaps->YMax=Y;
- }
- }
-
- void Generate(FILE *InFile, FILE *OutFile, int *Number,
- struct RunTimeType *RunTime)
- /* Generates the METAFONT code for the selected font */
- {
- /* Bitmap pointers */
- int CurrentBitmap,WantedBitmap;
- /* Current Bitmap and its dimensions */
- struct BitmapsType Bitmaps;
- int X,Y;
- /* Indicates early in font kanjiaa */
- int First;
- /* Indicates current Bitmap is empty */
- int Empty;
-
- /* Clear the area outside the Bitmap once and for all */
- for (X=0 ; X<=SizeMax1 ; X++) {
- Bitmaps.Bitmap[X][0]=False; Bitmaps.Bitmap[X][SizeMax1]=False; }
- for (Y=1 ; Y<=SizeMax ; Y++) {
- Bitmaps.Bitmap[0][Y]=False; Bitmaps.Bitmap[SizeMax1][Y]=False; }
- /* Number of the Bitmap ready to be read */
- CurrentBitmap=1;
- /* First METAFONT character number */
- *Number=0;
- /* First Bitmap wanted */
- if (RunTime->Automatic) {
- WantedBitmap=1024 * ( toupper(RunTime->FileName[5])-'A' ) +
- 128 * ( toupper(RunTime->FileName[6])-'A' ) - 1;
- First=(WantedBitmap==-1);
- }
- do {
- FindWantedBitmap(RunTime->Automatic,&First,&WantedBitmap,Number);
- if (WantedBitmap) {
- /* Position pointer */
- if (WantedBitmap!=CurrentBitmap) {
- if ( fseek(InFile , ((WantedBitmap-1L)*RecSize) , 0) ) exit(1);
- CurrentBitmap=WantedBitmap;
- }
- printf("Reading Bitmap");
- if (ferror(stdout)) exit(1);
- ScanBitmap(InFile,Bitmaps.Bitmap,&Empty);
- CurrentBitmap++;
- printf(".\n");
- if (ferror(stdout)) exit(1);
- /* Process Bitmap */
- if (Empty) printf("Bitmap is empty, no METAFONT code %d.\n",*Number);
- else {
- printf("Writing METAFONT code %d",*Number);
- ScanSides(&Bitmaps,RunTime->FixedX,RunTime->FixedY);
- MiddleOut(OutFile,&Bitmaps,*Number,RunTime->Standard);
- printf(".\n");
- }
- printf("\n");
- if (ferror(stdout)) exit(1);
- /* Ready to generate next METAFONT character */
- (*Number)++;
- }
- } while (WantedBitmap);
- }
-
- /*----------------------------------- Main ----------------------------------*/
-
- main(int argc, char *argv[])
- {
- /* JIS24 and METAFONT file names */
- FILE *InFile;
- FILE *OutFile;
- TotalNameType TotalName;
- /* Current METAFONT character number */
- int Number;
- /* Run time parameters */
- struct RunTimeType RunTime;
-
- printf("\n");
- printf("Bitmaps to METAFONT Conversion Program.\n"); /*To make Borland happy*/
- printf("Version 2.00 Copyright F. Jalbert 1991.\n");
- printf("\n");
- if (ferror(stdout)) exit(1);
-
- printf("Opening Bitmap file JIS24");
- InFile=fopen("jis24","rb");
- if (InFile==NULL) exit(1);
- printf(".\n");
- printf("\n");
- if (ferror(stdout)) exit(1);
-
- GetParameters(&RunTime,argc,argv);
- strcpy(TotalName,RunTime.FileName);
- strcat(TotalName,".mf");
- printf("Creating METAFONT file %s",TotalName);
- OutFile=fopen(TotalName,"wt");
- if (OutFile==NULL) exit(1);
- printf(".\n");
- printf("\n");
- if (ferror(stdout)) exit(1);
-
- printf("Writing initial METAFONT header");
- #ifndef __TURBOC__
- printf("\n");
- #endif
- BeginOut(OutFile,&RunTime);
- printf(".\n");
- printf("\n");
- Generate(InFile,OutFile,&Number,&RunTime);
- printf("\n");
- if (ferror(stdout)) exit(1);
-
- printf("Writing final METAFONT header");
- #ifndef __TURBOC__
- printf("\n");
- #endif
- EndOut(OutFile,&RunTime);
- printf(".\n");
- printf("Closing METAFONT file %s",TotalName);
- if (fclose(OutFile)==EOF) exit(1);
- printf(".\n");
- printf("Closing Bitmap file JIS24");
- if (fclose(InFile)==EOF) exit(1);
- printf(".\n");
- printf("\n");
- if (ferror(stdout)) exit(1);
-
- printf("METAFONT code for %d Bitmap(s) generated.\n",Number);
- printf("\n");
- if (ferror(stdout)) exit(1);
-
- return(0);
- }
-