|
|
researchv10 Norman
#include <stdio.h>
#include "jerq.h"
#include "commands.h"
#include "io.h"
#define ISIZE(n) ((n+1)*sizeof(Fontchar))
#define FNTsize 20
Font *fntab[FNTsize];
FILE *inf;
extern int Jin, Jout;
int lookUpFont(f) Font *f;
{ int i;
for (i=0; i<FNTsize && fntab[i]!=(Font *)NULL && fntab[i]!=f; i++) ;
if (i >= FNTsize) {
fprintf(stderr,"out of room in font table\n");
exit();
}
else if (fntab[i] == (Font *) NULL) {
fprintf(stderr,"unknown font referenced. DEFONT substituted.\n");
return(0);
}
else return(i);
}
void ffree(f) Font *f;
{ int i,j;
sendCommand(CCFFREE);
i = lookUpFont(f);
sendInt(i);
/*close the hole*/
for (j=i+1; j<FNTsize; j++) fntab[j-1] = fntab[j];
fntab[FNTsize] = (Font *) NULL;
}
static ngetc(n, base) int n; char **base;
{ int x, i;
i = 0;
do {
x = getc(inf);
(*base)[i++] = x;
if(x == -1)
return(1);
} while (--n > 0);
return(0);
}
Font *loadFont(fname) char *fname;
{ short n, in;
Font *f;
char *temp;
if((inf = fopen(fname, "r")) == (FILE *)NULL) return((Font *) NULL);
temp = (char *)∈
if (ngetc(2, &temp)) f = (Font *) NULL;
else {
swab(temp, (char*)&n, 2);
if ((f = (Font *) malloc(sizeof(Font)+ISIZE(n)))!=(Font *)NULL) {
f->n = n;
temp = 2 + (char *)f;
if (ngetc(6, &temp)) {
free(f);
f = (Font *) NULL;
}
else {
temp = (char *)f->info;
if (ngetc(ISIZE(n), &temp)) {
free(f);
f = (Font *) NULL;
}
}
}
}
fclose(inf);
return(f);
}
Font *getfont(fname) char *fname;
{ int i, j, n;
FILE *fp;
char fbuf[4096];
if ((fp=fopen(fname,"r"))==(FILE *)NULL) {
fprintf(stderr,"font not found: %s\n",fname);
return((Font *)NULL);
}
sendCommand(CCGETFONT);
for (i=0; i<FNTsize && fntab[i]!=(Font *) NULL; i++) ;
if (i>=FNTsize) i=1;
sendInt(i);
flush();
while((n=fread(fbuf,sizeof(char),sizeof(fbuf),fp)) > 0)
/* for (j=0; j<n; j++) put(fbuf[j]); */
write(Jout,fbuf,n);
fclose(fp);
fntab[i] = loadFont(fname);
return(fntab[i]);
}
strwidth(f,s) Font *f; unsigned char *s;
{
int wid=0;
int n = f->n;
Fontchar *info;
info = f->info;
for(; *s; s++)
if(*s < n) wid+=info[*s].width;
return(wid);
}
jstrwidth(s)
char *s;
{
return(strwidth(&defont,s));
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.