/* This program converts HP48 GROBs (ported to a PC) to a series of PIXON */ /* statements that can be read into the DRAW48 program from Preston Brown */ /* You will need a copy of DRAW48 to see how the GROB2DRW program works. */ /* DRAW48 is available in DL13 of the HP-Forum on CIS */ #include #include #include FILE *gr_fl, *drw_fl; main(int argc, char **argv) { char table[17]="0123456789ABCDEF"; char *pos, *strchr(); int table_offs; int count=0; int white=1; int ch,w,h,i,mask; if(argc != 3) { printf("Usage: GR2DRAW GROBfilename DRAWfilename"); exit(1); } if((gr_fl=fopen(argv[1],"r"))==NULL) { printf("Can't open GROB file %s ", argv[1]); exit(1); } if((drw_fl=fopen(argv[2],"w"))==NULL) { printf("Trouble opening DRAW file %s", argv[2]);exit(1); } else /* put the first line in the Draw file. */ { fputs("%%HP:T(3)A(D)F(.);\\<< ERASE { #0 #0 } PVIEW 7 FREEZE RAD ", drw_fl); fputs("\n",drw_fl); } clrscr(); printf("Now processing: one moment..."); w=0; h=0; while ((ch=getc(gr_fl)) != EOF) /* read in the GROB FILE one */ /* character at a time */ { switch(ch) /* count the white spaces */ /* until you reach more than */ { /* 5. This starts the GROB string.*/ case ' ': case '\t': case '\n' : white++; break; default: if (white){ white=0; count++;} } if (count > 5) { pos=strchr(table,ch); /* get pointer to position in*/ /* the lookup table */ table_offs=pos-table; /* calculate the offset into */ /* the table. This converts */ mask=1; /* the ASCII char to a hex */ for(i=0;i<4;i++) /* value. */ { if((mask & table_offs)!=0)/* if the pixel is on then */ fprintf(drw_fl,"{ #%d #%d } PIXON\n",w,h); /* put this in the DRAW file */ mask<<=1; /* shift the mask left by 1 */ if(w++ > 134) {h++;w=0;} /* incr w, check if > width */ /* if yes, incr h:reset w */ } /* Do this 4 times. Then get */ } /* the next character from */ } /* the GROB string. */ fputs("\\>>",drw_fl); fputs("\n",drw_fl); fclose(drw_fl); fclose(gr_fl); printf("\n\n Finished processing: start Draw48 and Get %s",argv[2]); }