⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 generic.c

📁 早期freebsd实现
💻 C
字号:
/* * Copyright (c) 1984, 1985, 1986 Xerox Corp. * *  create Generic font files * * HISTORY * 03-Sep-86  Lee Moore (lee) at Xerox Webster Research Center *	Created from tex.c . * * 11-Feb-86  Lee Moore (lee) at Xerox Webster Research Center *	Added the creation of an extra text file which contains information *	on how to access characters in other character-sets than zero (0). * * 15-Dec-85  Lee Moore (lee) at Xerox Webster Research Center *	Created. * */#include <stdio.h>#include <math.h>#include "stack.h"#include "token.h"#include "config.h"#include "ipmetrics.h"#include "generic.h"#define TRUE	1#define FALSE	0#define public#define private	staticextern unsigned char **getvector();public char *malloc();public char *DeviceName,	    *LibraryDirectory;publicCleanUpGeneric(configChain)    struct FontConfig *configChain; {	struct FontConfig *p;	WriteGenericInstallFile(configChain);	WriteGenericCleanUpFile(configChain);	for( p = configChain; p != NULL; p = p->Next )		if( !p->SeenFlag )			printf("couldn't find: %s/%s/%s\n",				p->FontPt1, p->FontPt2, p->FontPt3);}privateWriteGenericInstallFile(configChain)    struct FontConfig *configChain; {	FILE *installFile;	struct FontConfig *p;	if( (installFile = fopen(INSTALLNAME, "w")) == NULL ) {	    fprintf(stderr, "can't open the file 'install' for writing\n");	    return; }	fprintf(installFile, "#! /bin/sh\n");	fprintf(installFile, "if test ! -d %s/fonts/%s\n", LibraryDirectory, DeviceName);	fprintf(installFile, "  then\n");	fprintf(installFile, "    mkdir %s/fonts/%s\n", LibraryDirectory, DeviceName);	fprintf(installFile, "  fi\n");	fprintf(installFile, "if test ! -d %s/fonts/%s/generic\n", LibraryDirectory, DeviceName);	fprintf(installFile, "  then\n");	fprintf(installFile, "    mkdir %s/fonts/%s/generic\n", LibraryDirectory, DeviceName);	fprintf(installFile, "  fi\n");	for( p = configChain; p != NULL; p = p->Next )		if( p->SeenFlag )	    		fprintf(installFile, "cp %s.generic %s/fonts/%s/generic\n",				p->TargetName, LibraryDirectory, DeviceName);	fprintf(installFile, "cd %s/fonts/%s/generic\n", LibraryDirectory,			DeviceName);	(void) fclose(installFile);	(void) chmod(INSTALLNAME, 0755); }/* * write a file that rm's all the files created by this program */privateWriteGenericCleanUpFile(configChain)    struct FontConfig *configChain; {	FILE *cleanupFile;	struct FontConfig *p;	if( (cleanupFile = fopen(CLEANUPNAME, "w")) == NULL ) {	    fprintf(stderr, "can't open the file 'cleanup' for writing\n");	    return; }	fprintf(cleanupFile, "#! /bin/sh\n");	for( p = configChain; p != NULL; p = p->Next )		if( p->SeenFlag )	    		fprintf(cleanupFile, "rm %s.generic\n", p->TargetName);	fprintf(cleanupFile, "rm %s\n", CLEANUPNAME);	fprintf(cleanupFile, "rm %s\n", INSTALLNAME);	(void) fclose(cleanupFile);	(void) chmod(CLEANUPNAME, 0755); }PerGenericFont(configChain, fontDescVec)struct FontConfig *configChain;unsigned char *fontDescVec; {	unsigned char *charMetricsProperty,		      *width,		      **array;	char *fontName[40],	     metricFileName[40];	FILE *descFile;	struct FontConfig *p;	int n,	    depth;	double xWidth;	if( !GetFontNameProperty(fontDescVec, fontName) ) {		fprintf(stderr, "ipmetrics: can't get font name\n");		return;	}	if( (charMetricsProperty = GetStringProp("characterMetrics", fontDescVec))			== NULL ) {		printf("ipmetrics: can't find 'characterMetrics' property\n");		return;	}	for( p = configChain; p != NULL; p = p->Next ) {		if( !(strcmp(p->FontPt1,  fontName[0]) == 0 &&			    strcmp(p->FontPt2,  fontName[1]) == 0 &&			    strcmp(p->FontPt3,  fontName[2]) == 0) )			continue;		(void) sprintf(metricFileName, "%s.generic", p->TargetName);		if( (descFile = fopen(metricFileName, "w")) == NULL ) {			printf("ipmetrics: can't open %s for writing\n", metricFileName);			return;}			p->SeenFlag = TRUE;			fprintf(descFile, "# %s/%s/%s for Interpress device %s\n", p->FontPt1, p->FontPt2, p->FontPt3, DeviceName);		fprintf(descFile, "# for interpress device '%s'\n", DeviceName);		fprintf(descFile, "#\n");		fprintf(descFile, "# character\n");		fprintf(descFile, "#   index\twidth\n");		fprintf(descFile, "# (decimal)\t(ems)\n");		if( gettype(charMetricsProperty) != type_vector ) {			printf("ipmetrics: characterMetrics not a vector\n");			return;}		if( getsubtype(charMetricsProperty) != subtype_general ) {			printf("ipmetrics: characterMetrics subtype != general\n");			return;}		if( (depth = getdepth(charMetricsProperty)) & 01 ) {			printf("ipmetrics: characterMetrics vector is odd length\n");			return;}		array = getvector(charMetricsProperty);		for (n = 0; n < depth; n += 2 ) {			if( ! checktype(array[n], type_number, subtype_integer)) {				printf("ipmetrics: property of incorrect type\n");				return;}			if( (width = GetStringProp("widthX", array[n+1])) == NULL ){				printf("ipmetrics: can't find widthX property");				continue;}			if( gettype(width) != type_number ) {				printf("width not of type number\n");				continue;}			if( getsubtype(width) != subtype_rational ) {				printf("ipmetrics: width not of type rational\n");				continue;}			xWidth = ((float) getnumerator(width)) / ((float) getdenominator(width));			fprintf(descFile, "%8d\t%7.5f\n", getint(array[n]), xWidth);		}		free((char *) array);		(void) fclose(descFile); }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -