home *** CD-ROM | disk | FTP | other *** search
-
- #include "intuition/intuitionbase.h"
- #include "libraries/dosextens.h"
- #include "libraries/diskfont.h"
-
- #define Wr(fh,string) Write(fh,string,(long)sizeof(string))
- #define Wrlen(fh,string) Write(fh,string,(long)strlen(string))
-
- #define FBUFSIZE 40
-
- long DiskfontBase = 0;
-
- struct TextAttr ta =
- {
- 0, /* name must be installed manually */
- 8,
- 0,
- FPF_DISKFONT
- };
-
- struct NewWindow nwindow =
- {
- 0,0,30,30,
- 0,0,
- NULL,
- RMBTRAP | SMART_REFRESH | NOCAREREFRESH | BORDERLESS,
- NULL, NULL,
- NULL,
- NULL, NULL, -1, -1, -1, -1, WBENCHSCREEN
- };
-
- char plea[] = "Please use Kickstart/Workbench 1.2 for latest ";
-
- struct IntuitionBase *IntuitionBase=NULL;
- struct GfxBase *GfxBase=NULL;
-
- char charcodes[] = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`~!@#$%^&*()-=\\_+|[{]};:'\",<.>/?";
-
- void _wb_parse() {}
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- register struct RastPort *rp;
- register int count, x;
-
- UBYTE buffer[8];
- register UBYTE *buf = buffer;
- register char *charcode = charcodes;
-
- struct FileHandle *fp=NULL;
- struct Window *w = NULL; /* this is the one I open */
-
- struct FileHandle *Output();
- struct FileHandle *out = Output();
-
- char filename[128];
-
- struct TextFont *oldfont,*font=NULL;
- UBYTE fontname[40];
-
- if (argc == 2)
- {
- strncpy(fontname, argv[1], FBUFSIZE);
- strncat(fontname, ".font", FBUFSIZE);
- }
- else
- {
- Wr(out,"\nUsage: snipgen <fontname>\nYou must have the font present in FONTS:\nPut the output file in current directory or in S: for SNIP to use.\n");
- goto breakpoint;
- }
-
- if (!(IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",33L)))
- {
- Wrlen(out,plea);
- Wr(out,"Intuition.\n");
- goto breakpoint;
- }
-
- if (!(GfxBase=(struct GfxBase *) OpenLibrary("graphics.library",33L)))
- {
- Wrlen(out,plea);
- Wr(out,"Graphics.\n");
- goto breakpoint;
- }
-
- if (!(DiskfontBase = (long)OpenLibrary("diskfont.library", 33L)))
- {
- Wrlen(out,plea);
- Wr(out,"Fonts.\n");
- goto breakpoint;
- }
-
- ta.ta_Name = fontname;
-
- if (!(font = OpenDiskFont(&ta)))
- {
- Wr(out,"Can't open font\n");
- goto breakpoint;
- }
-
- strcpy(filename,argv[1]);
- strcat(filename,".fontdef");
-
- if (!(fp = Open(filename,MODE_NEWFILE)))
- {
- Wr(out, "Unable to open output file\n");
- goto breakpoint;
- }
-
- if (!(w = OpenWindow(&nwindow)))
- {
- Wr(out,"Can't open window\n");
- goto breakpoint;
- }
-
- rp = w->RPort;
-
- oldfont = rp->Font;
-
- /* If the SetFont() works, on cleanup, CloseFont(oldfont) */
-
- if (SetFont(rp, font))
- font = oldfont;
-
- Wr(out,"Encoding 95 characters (should be 760 bytes)\n");
- Wr(out,"Saving in file ");
- Wrlen(out,filename);
- Wr(out,"\n");
-
- for (count = 0; count < 95; count++)
- {
- SetAPen(rp,0L);
- SetDrMd(rp,JAM1);
- RectFill(rp,10L,10L,18L,18L);
- SetAPen(rp,1L);
- Move(rp,10L,16L);
- Text(rp,&charcode[count],1L);
- get_byte(rp,10,10,buf);
- for (x = 0; x < 8; x++)
- {
- Write(fp,&buf[x],1L);
- }
- }
-
- breakpoint:
- if (fp) Close(fp);
- if (w) CloseWindow(w);
- if (IntuitionBase) CloseLibrary(IntuitionBase);
- if (GfxBase) CloseLibrary(GfxBase);
- if (font) CloseFont(font);
- if (DiskfontBase) CloseLibrary(DiskfontBase);
- exit(0);
- }
-
- /*
- * Given the (x,y) coordinate of the upper left of an 8x8 character position
- * within a window, this fills the 8-byte buffer with the bitmap of the
- * character at that position.
- *
- */
-
- get_byte(rp, xstart, ystart, buf)
- register struct RastPort *rp;
- register int xstart, ystart;
- register UBYTE buf[8];
- {
- register int x,y;
- register UBYTE tx_byte;
-
- for (y=0; y<8; y++)
- {
- tx_byte = 0;
-
- for (x=0; x<8; x++)
- {
- /* NB: I match _any_ colour here */
-
- if (ReadPixel(rp, (long)(xstart+x), (long)(ystart+y)))
- {
- tx_byte |= (1 << (7-x));
- }
- }
-
- buf[y] = tx_byte;
- }
- }
-
-