summaryrefslogtreecommitdiff
path: root/fonts/poorman/pmfont.c
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/poorman/pmfont.c
Initial commit
Diffstat (limited to 'fonts/poorman/pmfont.c')
-rw-r--r--fonts/poorman/pmfont.c159
1 files changed, 159 insertions, 0 deletions
diff --git a/fonts/poorman/pmfont.c b/fonts/poorman/pmfont.c
new file mode 100644
index 0000000000..0fd5387532
--- /dev/null
+++ b/fonts/poorman/pmfont.c
@@ -0,0 +1,159 @@
+/* pmfont.c */
+/* Copyright 1990 Humanities and Arts Computing Center */
+/* may be used under terms of HACC software general public license */
+/* see the file license for details */
+/* usage: pmfont inputfile outputtag [skipto] */
+/* watch out! no errorchecking on i/o operations */
+/* improvements to ridgeway@blackbox.hacc.washington.edu */
+
+/* history: */
+/* v. 0.8 released 12/03/1990 */
+/* misc. earlier versions also known as CCLIB2MF and JIS2MF */
+/* those were never PUBLICLY released */
+
+#include <stdio.h>
+#include <string.h>
+#define CHARHT 24
+#define CHARWD 24
+#define BYTES_IN_ROW 3
+/* to do a 16x16 we say instead CHARHT 16, CHARWD 16, BYTES_IN_ROW 2 */
+
+
+/* the charblock structure is used for processing each character */
+typedef struct {
+ unsigned char column[CHARWD];
+ } videorow;
+typedef struct {
+ videorow row[CHARHT];
+ } charblock;
+
+/* the JIS font is a naked 24x24 bitmap some 7000 chars deep */
+typedef struct {
+ unsigned char bitmap[CHARHT*BYTES_IN_ROW];
+ } jischar;
+
+
+/* globally accessible area */
+charblock editchar;
+jischar thischar;
+/* global vars and strings */
+char outfilename[128],mffilename[128];
+char cmdline[256];
+char outfiletag[80];
+
+/* functions */
+jumpout() { exit(1); }
+
+void copyright()
+{
+ puts("pmfont 24x24 font --> METAFONT code generator\n");
+ puts("HUMANITIES AND ARTS COMPUTING CENTER, DR-10");
+ puts("UNIVERSITY OF WASHINGTON, SEATTLE WA 98195 USA\n");
+ puts("Copyright 1990 Humanities and Arts Computing Center\n");
+ puts("This software may be used, modified, and redistributed free of any");
+ puts("fee or royalty, provided that this copyright and 'free software' notice");
+ puts("remains intact in any copies redistributed, and that you may charge no fee");
+ puts("of any sort whatsoever without the written permission of the Humanities");
+ puts("and Arts Computing Center.");
+ return;
+}
+
+
+void makedisplay()
+{
+ int temp,mask,i,j,k,hold;
+ for (i=0; i<CHARHT; i++) {
+ for (j=0; j<BYTES_IN_ROW; j++) {
+ temp=thischar.bitmap[(i*BYTES_IN_ROW)+j];
+ mask=0x80;
+ for (k=0; k<8; k++) {
+ hold=temp & mask;
+ if (hold==0) editchar.row[i].column[k+(8*j)]=0;
+ else editchar.row[i].column[k+(8*j)]=1;
+ mask=mask / 2;
+ } /* endfor k */
+ } /* endfor j */
+ } /* endfor i */
+ return;
+}
+
+
+main(int argc, char *argv[])
+{
+ FILE *f1,*f2;
+ int done,ch,i,k,codeout,fontpart,skipcount,stepper;
+ char quote,percent;
+ skipcount=0;
+ quote=34;
+ percent=37;
+ /* yes, yes! we are assuming the ASCII character set */
+ if (argc < 3) {
+ printf("\nUsage: pmfont inputfontfile outputfiletag [skipto]\n");
+ jumpout();
+ }
+ if (argc > 3) sscanf(argv[3],"%02x",&skipcount);
+ copyright();
+ f1 = fopen(argv[1],"rb");
+ strcpy(outfiletag,argv[2]);
+/* no error checking ---- this is quickest and dirtiest */
+ fontpart=160;
+ if (skipcount > (fontpart+1)) {
+ /* skip to desired starting block if indicated */
+ skipcount=skipcount-fontpart-1;
+ fontpart=fontpart+skipcount;
+ for (stepper=0; stepper < skipcount; stepper++) {
+ for (ch=161; ch<255; ch++) {
+ fread(&thischar,sizeof(jischar),1,f1);
+ }
+ }
+ }
+while (!feof(f1)) {
+ fontpart++;
+ sprintf(outfilename,"%s%02x.mf",outfiletag,fontpart);
+ sprintf(mffilename,"%s%02x",outfiletag,fontpart);
+ printf("\nJIS2MF: attempting to open %s for output.\n",outfilename);
+ f2 = fopen(outfilename,"w");
+ fprintf(f2,"%c This is %s generated by pmfont.\n",percent,outfilename);
+ fprintf(f2,"input poorman;\n");
+ printf("Now processing character ");
+ for (ch=161; ch<255; ch++) {
+ /* generate code for character ch */
+ fread(&thischar,sizeof(jischar),1,f1);
+/* no error checking right? our last file may have a lot of garbage in it */
+ /* actually this doesn't happen: but it could */
+ printf("[%d] ",ch);
+ fprintf(f2,"\njc(%d);\n",ch);
+ makedisplay();
+ codeout=0;
+ for(i=0; i < CHARHT; i++) {
+ for(k=0; k<CHARWD; k++) {
+ if (editchar.row[i].column[k] != 0) {
+ fprintf(f2,"jd(%d,%d); ",i,k);
+ codeout++;
+ if (codeout > 4) {
+ fprintf(f2,"\n");
+ codeout=0;
+ }
+ } /* endif set dot on */
+ } /* end k */
+ if (codeout > 0) {
+ fprintf(f2,"\n");
+ codeout=0;
+ }
+ } /* endfor i */
+ fprintf(f2,"enddef; endjc;\n");
+ if ( ( ch % 16 ) == 0 ) printf("\n");
+ } /* endfor ch */
+ fprintf(f2,"\nbye.\n");
+ fclose(f2); /* close this output file */
+/* MakeFont should be a script file to call METAFONT to generate the font */
+/* move the tfm and bitmap files to the right locations and delete the */
+/* no longer needed .mf source code, .log files etc. */
+/* the contents of MakeFont will be very system dependent */
+ sprintf(cmdline,"%s %s%02x","MakeFont",outfiletag,fontpart);
+ system(cmdline);
+} /* end while not eof() on input file */
+ printf("\npmfont is done. Good luck with your new fonts.\n");
+ fclose(f2);
+}
+