home *** CD-ROM | disk | FTP | other *** search
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
- * |_o_o|\\ Copyright (c) 1987 The Software Distillery. All Rights Reserved *
- * |. o.| || Written by Doug Walker *
- * | . | || The Software Distillery *
- * | o | || 235 Trillingham Lane *
- * | . |// Cary, NC 27511 *
- * ====== BBS:(919)-471-6436 *
- \* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- #include "mydebug.h"
-
- #include "exec/types.h"
- #include "exec/memory.h"
- #include "intuition/intuition.h"
- #include "stdio.h"
-
- #include "hackicon.h"
-
- extern struct iconfont *fonts[2];
- extern struct IntuiText MiscText[];
- extern int fontnum;
- extern USHORT colormap[];
- extern struct Window *Window;
- extern struct ViewPort *ViewPort;
-
- LoadFont(name, num)
- char *name;
- int num;
- {
- FILE *fp;
- int i;
- register struct Image *curimage;
- register struct iconfont *ifont;
- register USHORT *dataptr, *endptr;
-
- if(name == NULL) return(1);
-
- BUG(1, ("LoadFont: Enter, name=%s, num=%d\n", name, num))
-
- if(num<0)
- {
- for(num=0; num<MAXFONTS && fonts[num]; num++);
- if(num >= MAXFONTS)
- {
- AutoRequest(Window, &MiscText[4], NULL, &MiscText[2], 0, 0, 410, 90);
- return(1);
- }
- }
- if(fonts[num]) FreeMem(fonts[num], sizeof(struct iconfont));
- fontnum = num;
-
- if(!(ifont = fonts[num] = (struct iconfont *)
- AllocMem(sizeof(struct iconfont), MEMF_CHIP | MEMF_CLEAR)))
- {
- AutoRequest(Window, &MiscText[3], NULL, &MiscText[2], 0, 0, 410, 90);
- return(1);
- }
-
- strcpy(ifont->filename, name);
-
- if(NULL == (fp = fopen(name, "rb")))
- {
- BUG(4, ("LoadFont: Null fp, initializing font.\n"))
- movmem(colormap, ifont->colormap, 16*sizeof(USHORT));
- ifont->firstchar = 255;
- ifont->lastchar = 0;
- }
- else
- {
- BUG(4, ("LoadFont: reading color data.\n"))
- for(i=0; i<16; i++)
- {
- colormap[i] = ifont->colormap[i] = (getc(fp) << 8) | getc(fp);
- BUG(9, ("LoadFont: colormap[%d] = %4x\n", i, colormap[i]))
- }
- LoadRGB4(ViewPort, colormap, 16);
-
- ifont->firstchar = getc(fp);
- ifont->lastchar = getc(fp);
- }
-
- BUG(2, ("LoadFont: firstchar=%d, lastchar=%d\n",ifont->firstchar,ifont->lastchar))
-
- for(i=0, curimage=ifont->images, dataptr = ifont->idata;
- i<256;
- i++, curimage++, dataptr += ILENGTH)
- {
- curimage->NextImage = (i < 255 ? curimage+1 : NULL);
- curimage->LeftEdge = IXCALC(i);
- curimage->TopEdge = IYCALC(i);
- curimage->Width = IWIDTH;
- curimage->Height = IHEIGHT;
- curimage->Depth = IDEPTH;
- curimage->ImageData = dataptr;
- curimage->PlanePick = 0x0F;
- curimage->PlaneOnOff = 0x00;
- }
- BUG(8, ("LoadFont: Done calculating image structs\n"))
-
- if(fp)
- {
- for(dataptr= ifont->idata + (ILENGTH*ifont->firstchar),
- endptr = ifont->idata + (ILENGTH*ifont->lastchar);
- dataptr <= endptr;
- dataptr += ILENGTH)
- for(i=0; i<ILENGTH; i++) dataptr[i] = (getc(fp) << 8);
-
- fclose(fp);
- }
-
- DrawImage(Window->RPort, ifont->images, 0, 0);
- SetWindowTitles(Window, name, name);
-
-
- BUG(1, ("LoadFont: Exit\n"))
- return(0);
- }
-
- SaveFont(name)
- char *name;
- {
- FILE *fp, *fopen();
- int i, j;
- unsigned char *cptr;
-
- if(name == NULL) name = fonts[fontnum]->filename;
-
- BUG(1, ("SaveFont: save %s as %s\n", fonts[fontnum]->filename, name))
-
- if(!strcmp(name, fonts[fontnum]->filename)
- && !(fonts[fontnum]->flags & CHANGED) ) return(0);
-
- if(!(fp=fopen(name, "wb")))
- {
- AutoRequest(Window, MiscText, NULL, &MiscText[2], 0, 0, 410, 90);
- return(1);
- }
-
- for(i=0, cptr= (unsigned char *)colormap; i<16; i++)
- {
- putc(*(cptr++), fp);
- putc(*(cptr++), fp);
- }
-
- for(i = fonts[fontnum]->firstchar; i<=fonts[fontnum]->lastchar; i++)
- {
- for(cptr=(unsigned char *)(fonts[fontnum]->idata+(ILENGTH*i)), j=0;
- j<ILENGTH && !(*cptr);
- j++, cptr++);
- if(j >= ILENGTH) fonts[fontnum]->firstchar++;
- else break;
- }
- for(i = fonts[fontnum]->lastchar; i>=fonts[fontnum]->firstchar; i--)
- {
- for(cptr=(unsigned char *)(fonts[fontnum]->idata+(ILENGTH*i)), j=0;
- j<ILENGTH && !(*cptr);
- j++, cptr++);
- if(j >= ILENGTH) fonts[fontnum]->lastchar--;
- else break;
- }
-
-
- putc(fonts[fontnum]->firstchar, fp);
- putc(fonts[fontnum]->lastchar, fp);
-
- for(i=fonts[fontnum]->firstchar,
- cptr=(unsigned char *)(fonts[fontnum]->idata+(ILENGTH*i));
- i<=fonts[fontnum]->lastchar;
- i++)
- for(j=0; j<ILENGTH; j++, cptr+=sizeof(USHORT))
- putc(*cptr, fp);
-
- fclose(fp);
-
- fonts[fontnum]->flags &= (~CHANGED);
-
- return(0);
- }
-
-