1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
/* $Log: openpkfile.c,v $
* Revision 0.8 92/11/23 19:46:50 19:46:50 bt (Bo Thide')
* Fixed resolution bug. Portable downloading. Added/changed options. PJXL color support
*
* Revision 0.7 92/11/13 02:41:35 02:41:35 bt (Bo Thide')
* More bug fixes and improvements. Support for PaintJet XL
*
* Revision 0.6 92/11/10 21:47:51 21:47:51 bt (Bo Thide')
* Bug fixes. Added -R option. Better font handling.
*
* Revision 0.5 92/11/09 16:25:38 16:25:38 bt (Bo Thide')
* Rewrite of dospecial.c. Extended \special support
*
* Revision 0.4 92/11/08 02:45:54 02:45:54 bt (Bo Thide')
* Changed to portable bit manipulations. Replaced strrstr for non-POSIX compliant C. Fixed numerous bugs. Added support for more \special's.
*
* Revision 0.3 92/08/24 12:45:45 12:45:45 bt (Bo Thide')
* Fixed 8 bit (dc font) support.
*
* Revision 0.2 92/08/23 17:28:58 17:28:58 bt (Bo Thide')
* Source cleaned up. Changed certain function calls. Removed globals.
*
* Revision 0.1 92/08/22 23:58:48 23:58:48 bt (Bo Thide')
* First Release.
* */
#include <stdio.h>
#include <string.h>
#include "globals.h"
#include "paths.h"
static char rcsid[] = "$Header: openpkfile.c,v 0.8 92/11/23 19:46:50 bt Exp $";
FILE *openpkfile()
{
FILE *fileptr;
char *fptr, *nptr, *pptr;
char *pt_chrs = "0123456789", *pt_ptr;
int pt_value;
nptr = &names[font->name];
fptr = pkname;
pptr = fontpath;
if(*nptr)
while(*nptr)
*fptr++ = *nptr++;
else
while(*pptr)
*fptr++ = *pptr++;
nptr++;
/* Find the pt size from the font name string */
pt_ptr = strpbrk(nptr, pt_chrs);
sscanf(pt_ptr, "%d", &pt_value);
/* Look for the pk fonts in pk300/10pt/cmr10.300pk etc.*/
sprintf(fptr,"/%dpt/%s.%dpk", pt_value, nptr, font->dir_size);
/* Try to open pk font file */
if((fileptr = fopen(pkname,"r")) != NULL)
return fileptr;
/* Look for the pk fonts in pk300/cmr10.300pk etc.*/
sprintf(fptr,"/%s.%dpk", nptr, font->dir_size);
if((fileptr = fopen(pkname,"r")) != NULL)
return fileptr;
fprintf(stderr,"Cannot find pk font file %s\n",pkname);
/* Try to substitute at base resolution */
font->dir_size = pt_value = RESOLUTION;
sprintf(fptr, "/%dpt/%s.%dpk", pt_value,nptr, font->dir_size);
if((fileptr = fopen(pkname,"r")) != NULL){
fprintf(stderr,"Substituting %s at %d points\n", nptr,pt_value);
return fileptr;
}
sprintf(fptr, "/%s.%dpk",nptr,font->dir_size);
if((fileptr = fopen(pkname,"r")) != NULL){
fprintf(stderr,"Substituting %s at %d points\n", nptr,pt_value);
return fileptr;
}
fprintf(stderr,"Substituting cmr10 at ten points . . .\n");
if ((fileptr = fopen(defaultpk,"r")) != NULL)
return 0;
fprintf(stderr, "Killed in openpkfile()\n");
exit(-1);
}
|