Annotation of researchv10no/libj/font.c, revision 1.1

1.1     ! root        1: #include <stdio.h>
        !             2: #include "jerq.h"
        !             3: #include "commands.h"
        !             4: #include "io.h"
        !             5: 
        !             6: #define ISIZE(n)       ((n+1)*sizeof(Fontchar))
        !             7: 
        !             8: #define FNTsize 20
        !             9: Font *fntab[FNTsize];
        !            10: FILE *inf;
        !            11: extern int Jin, Jout;
        !            12: 
        !            13: int lookUpFont(f)  Font *f;
        !            14: {      int i;
        !            15:        for (i=0; i<FNTsize && fntab[i]!=(Font *)NULL && fntab[i]!=f; i++) ;
        !            16:        if (i >= FNTsize) {
        !            17:                fprintf(stderr,"out of room in font table\n");
        !            18:                exit();
        !            19:        }
        !            20:        else if (fntab[i] == (Font *) NULL) {
        !            21:                fprintf(stderr,"unknown font referenced.  DEFONT substituted.\n");
        !            22:                return(0);
        !            23:        }
        !            24:        else return(i);
        !            25: }
        !            26: 
        !            27: void ffree(f) Font *f;
        !            28: {      int i,j;
        !            29:        sendCommand(CCFFREE);
        !            30:        i = lookUpFont(f);
        !            31:        sendInt(i);
        !            32:        /*close the hole*/
        !            33:        for (j=i+1; j<FNTsize; j++) fntab[j-1] = fntab[j];
        !            34:        fntab[FNTsize] = (Font *) NULL;
        !            35: }
        !            36: 
        !            37: static ngetc(n, base) int n; char **base;
        !            38: {      int x, i;
        !            39: 
        !            40:        i = 0;
        !            41:        do {
        !            42:                x = getc(inf);
        !            43:                (*base)[i++] = x;
        !            44:                if(x == -1)
        !            45:                        return(1);
        !            46:        } while (--n > 0);
        !            47:        return(0);
        !            48: }
        !            49: 
        !            50: 
        !            51: Font *loadFont(fname) char *fname;
        !            52: {      short n, in;
        !            53:        Font *f;
        !            54:        char *temp;
        !            55: 
        !            56:        if((inf = fopen(fname, "r")) == (FILE *)NULL) return((Font *) NULL);
        !            57: 
        !            58:        temp = (char *)&in;
        !            59:        if (ngetc(2, &temp)) f = (Font *) NULL;
        !            60:        else {
        !            61:                swab(temp, (char*)&n, 2);
        !            62:                if ((f = (Font *) malloc(sizeof(Font)+ISIZE(n)))!=(Font *)NULL) {
        !            63:                        f->n = n;
        !            64:                        temp = 2 + (char *)f;
        !            65:                        if (ngetc(6, &temp)) {
        !            66:                                free(f);
        !            67:                                f = (Font *) NULL;
        !            68:                        }
        !            69:                        else {
        !            70:                                temp = (char *)f->info;
        !            71:                                if (ngetc(ISIZE(n), &temp)) {
        !            72:                                        free(f);
        !            73:                                        f = (Font *) NULL;
        !            74:                                }
        !            75:                        }
        !            76:                }
        !            77:        }
        !            78: 
        !            79:        fclose(inf);
        !            80:        return(f);
        !            81: }
        !            82: 
        !            83: Font *getfont(fname) char *fname;
        !            84: {      int i, j, n; 
        !            85:        FILE *fp;
        !            86:        char fbuf[4096];
        !            87: 
        !            88:        if ((fp=fopen(fname,"r"))==(FILE *)NULL) {
        !            89:                fprintf(stderr,"font not found: %s\n",fname);
        !            90:                return((Font *)NULL);
        !            91:        }
        !            92:        sendCommand(CCGETFONT);
        !            93:        for (i=0; i<FNTsize && fntab[i]!=(Font *) NULL; i++) ;
        !            94:        if (i>=FNTsize) i=1;
        !            95:        sendInt(i);
        !            96:        flush();
        !            97:        while((n=fread(fbuf,sizeof(char),sizeof(fbuf),fp)) > 0) 
        !            98: /*             for (j=0; j<n; j++) put(fbuf[j]); */
        !            99:                write(Jout,fbuf,n); 
        !           100:        fclose(fp);
        !           101:        fntab[i] = loadFont(fname);
        !           102:        return(fntab[i]);
        !           103: }
        !           104: 
        !           105: strwidth(f,s) Font *f; unsigned char *s;
        !           106: {
        !           107:        int wid=0;
        !           108:        int n = f->n;
        !           109:        Fontchar *info;
        !           110: 
        !           111:        info = f->info;
        !           112:        for(; *s; s++)
        !           113:                if(*s < n) wid+=info[*s].width;
        !           114:        return(wid);
        !           115: }
        !           116: 
        !           117: jstrwidth(s)
        !           118:        char *s;
        !           119: {
        !           120:        return(strwidth(&defont,s));
        !           121: }
        !           122: 
        !           123: 
        !           124: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.