Initial import of the CDE 2.1.30 sources from the Open Group.
This commit is contained in:
731
cde/lib/DtTerm/util/lineToData.c
Normal file
731
cde/lib/DtTerm/util/lineToData.c
Normal file
@@ -0,0 +1,731 @@
|
||||
#ifndef lint
|
||||
#ifdef VERBOSE_REV_INFO
|
||||
static char rcs_id[] = "$XConsortium: lineToData.c /main/1 1996/04/21 19:20:58 drk $";
|
||||
#endif /* VERBOSE_REV_INFO */
|
||||
#endif /* lint */
|
||||
|
||||
/* *
|
||||
* (c) Copyright 1993, 1994 Hewlett-Packard Company *
|
||||
* (c) Copyright 1993, 1994 International Business Machines Corp. *
|
||||
* (c) Copyright 1993, 1994 Sun Microsystems, Inc. *
|
||||
* (c) Copyright 1993, 1994 Novell, Inc. *
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "TermPrimLineFontP.h"
|
||||
|
||||
int ParseChar(char **str);
|
||||
int parseCoord(char **str, char *val, signed char *offset);
|
||||
char * parseToken(char **str);
|
||||
void displayErrorString(FILE *f, char *orig, char *remain);
|
||||
static void DumpChar(FILE *f, int charNum, charType *charList, int charListMax,
|
||||
rect *rectList, int rectListMax, line *lineList, int lineListMax,
|
||||
line *stippleList, int stippleListMax);
|
||||
static void DumpGlyphs(FILE *f, char *prefix,
|
||||
GlyphInfo glyphList, int glyphListMax);
|
||||
static int parseLine(char **bufPtr, line *line);
|
||||
static int parseRectangle(char **bufPtr, rect *rectangle);
|
||||
static void order(char *p1, char *p2, signed char *offset1, signed char *offset2);
|
||||
static char *vis(char val);
|
||||
|
||||
int
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
int charNum = 0;
|
||||
char buffer[BUFSIZ];
|
||||
char *bufPtr;
|
||||
char orig[BUFSIZ];
|
||||
register int i;
|
||||
register char *c;
|
||||
FILE *f;
|
||||
FILE *tmp;
|
||||
extern int getopt();
|
||||
extern int optind;
|
||||
extern char *optarg;
|
||||
extern int opterr;
|
||||
int resolution = 75; /* dots per inch */
|
||||
int points;
|
||||
char *prefix = "_Term";
|
||||
|
||||
charType *charList = (charType *) 0;
|
||||
int charListSize = 0;
|
||||
int charListMax = 0;
|
||||
|
||||
rect *rectList = (rect *) 0;
|
||||
int rectListSize = 0;
|
||||
int rectListMax = 0;
|
||||
|
||||
line *stippleList = (line *) 0;
|
||||
int stippleListSize = 0;
|
||||
int stippleListMax = 0;
|
||||
|
||||
line *lineList = (line *) 0;
|
||||
int lineListSize = 0;
|
||||
int lineListMax = 0;
|
||||
|
||||
GlyphInfo glyphList = (GlyphInfo) 0;
|
||||
int glyphListSize = 0;
|
||||
int glyphListMax = 0;
|
||||
|
||||
int charCount = 0; /* total number of chars in font*/
|
||||
|
||||
char *datafilename = "linegen.data";
|
||||
int dummyInt;
|
||||
int error;
|
||||
|
||||
while (EOF != (i = getopt(argc, argv, "p:f:"))) {
|
||||
switch (i) {
|
||||
case 'f' :
|
||||
datafilename = optarg;
|
||||
break;
|
||||
|
||||
case 'p' :
|
||||
prefix = optarg;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (NULL == (f = fopen(datafilename, "r"))) {
|
||||
(void) perror(datafilename);
|
||||
(void) exit(1);
|
||||
}
|
||||
|
||||
/* read through the file and generate each character...
|
||||
*/
|
||||
while (fgets(buffer, sizeof(buffer), f)) {
|
||||
/* null out '\n'... */
|
||||
buffer[strlen(buffer) - 1] = '\0';
|
||||
|
||||
/* if the line begins with '#', ignore it... */
|
||||
if (*buffer == '#')
|
||||
continue;
|
||||
|
||||
/* if the line begins with a '!', just print it out (with the
|
||||
* '!' removed... */
|
||||
|
||||
if (*buffer == '!') {
|
||||
(void) fputs(buffer + 1, stdout);
|
||||
(void) putc('\n', stdout);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* back up buffer... */
|
||||
(void) strcpy(orig, buffer);
|
||||
|
||||
bufPtr = buffer;
|
||||
|
||||
/* pull off token... */
|
||||
c = parseToken(&bufPtr);
|
||||
|
||||
/* ignore blank lines... */
|
||||
if (!c || !*c)
|
||||
continue;
|
||||
|
||||
/* process the token... */
|
||||
if (!strcmp(c, "char")) {
|
||||
/* dump the previous character... */
|
||||
if (charListMax > 0) {
|
||||
(void) DumpChar(stdout, charCount++, charList, charListMax,
|
||||
rectList, rectListMax, lineList, lineListMax,
|
||||
stippleList, stippleListMax);
|
||||
lineListMax = 0;
|
||||
rectListMax = 0;
|
||||
stippleListMax = 0;
|
||||
}
|
||||
|
||||
/* grow the glyph list if necessary... */
|
||||
if (glyphListMax + 1 > glyphListSize) {
|
||||
glyphListSize += 10;
|
||||
glyphList = (GlyphInfo) realloc(glyphList,
|
||||
glyphListSize * sizeof(GlyphInfoRec));
|
||||
}
|
||||
/* bump count. We need to remember that this is one high
|
||||
* when we use it as an index...
|
||||
*/
|
||||
glyphList[glyphListMax].numRects = 0;
|
||||
glyphList[glyphListMax].numLines = 0;
|
||||
glyphList[glyphListMax].numStipples = 0;
|
||||
(void) glyphListMax++;
|
||||
|
||||
/* this is a list of characters... */
|
||||
charListMax = 0;
|
||||
charListSize = 10;
|
||||
charList = (charType *)
|
||||
malloc((unsigned) (charListSize * sizeof(charType)));
|
||||
|
||||
while (*bufPtr) {
|
||||
/* extend the charList if we need to (the 2 is 1 for this
|
||||
* entry and 1 for the terminating 0...
|
||||
*/
|
||||
if (charListMax + 2 > charListSize) {
|
||||
charListSize += 10;
|
||||
charList = (charType *) realloc(charList,
|
||||
charListSize * sizeof(charType));
|
||||
}
|
||||
|
||||
if (0 == (charList[charListMax++] = ParseChar(&bufPtr))) {
|
||||
(void) fprintf(stderr, "invalid \"char\" specification:\n");
|
||||
(void) displayErrorString(stderr, orig, bufPtr);
|
||||
(void) exit(1);
|
||||
}
|
||||
|
||||
if (bufPtr && *bufPtr) {
|
||||
if (*bufPtr == ',') {
|
||||
/* additional stuff... */
|
||||
(void) bufPtr++;
|
||||
/* skip whitespace... */
|
||||
while (*bufPtr && strchr(" \t", *bufPtr))
|
||||
(void) bufPtr++;
|
||||
} else {
|
||||
/* error -- invalid character... */
|
||||
(void) fprintf(stderr,
|
||||
"invalid \"char\" specification:\n");
|
||||
(void) displayErrorString(stderr, orig, bufPtr);
|
||||
(void) exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* null term the list... */
|
||||
charList[charListMax] = 0;
|
||||
|
||||
/* save away the char list... */
|
||||
glyphList[glyphListMax - 1].chars = charList;
|
||||
|
||||
} else if (!strcmp(c, "rect")) {
|
||||
if (rectListMax + 1 > rectListSize) {
|
||||
rectListSize += 10;
|
||||
rectList = (rect *) realloc(rectList,
|
||||
rectListSize * sizeof(rect));
|
||||
}
|
||||
|
||||
if (parseRectangle(&bufPtr, &rectList[rectListMax])) {
|
||||
(void) fprintf(stderr, "invalid \"rect\" specification:\n");
|
||||
(void) displayErrorString(stderr, orig, bufPtr);
|
||||
(void) exit(1);
|
||||
}
|
||||
|
||||
/* increment line count... */
|
||||
(void) rectListMax++;
|
||||
|
||||
/* save away the rect list... */
|
||||
glyphList[glyphListMax - 1].rects = rectList;
|
||||
glyphList[glyphListMax - 1].numRects = rectListMax;
|
||||
|
||||
} else if (!strcmp(c, "line")) {
|
||||
if (lineListMax + 1 > lineListSize) {
|
||||
lineListSize += 10;
|
||||
lineList = (line *) realloc(lineList,
|
||||
lineListSize * sizeof(line));
|
||||
}
|
||||
|
||||
/* did we error?... */
|
||||
if (parseLine(&bufPtr, &lineList[lineListMax])) {
|
||||
(void) fprintf(stderr, "invalid \"line\" specification:\n");
|
||||
(void) displayErrorString(stderr, orig, bufPtr);
|
||||
(void) exit(1);
|
||||
}
|
||||
|
||||
/* increment line count... */
|
||||
(void) lineListMax++;
|
||||
|
||||
/* save away the line list... */
|
||||
glyphList[glyphListMax - 1].lines = lineList;
|
||||
glyphList[glyphListMax - 1].numLines = lineListMax;
|
||||
|
||||
} else if (!strcmp(c, "stipple")) {
|
||||
if (stippleListMax + 1 > stippleListSize) {
|
||||
stippleListSize += 10;
|
||||
stippleList = (line *) realloc(stippleList,
|
||||
stippleListSize * sizeof(line));
|
||||
}
|
||||
|
||||
if (parseLine(&bufPtr, &stippleList[stippleListMax])) {
|
||||
(void) fprintf(stderr, "invalid \"stipple\" specification:\n");
|
||||
(void) displayErrorString(stderr, orig, bufPtr);
|
||||
(void) exit(1);
|
||||
}
|
||||
|
||||
|
||||
/* increment line count... */
|
||||
(void) stippleListMax++;
|
||||
|
||||
/* save away the line list... */
|
||||
glyphList[glyphListMax - 1].stipples = stippleList;
|
||||
glyphList[glyphListMax - 1].numStipples = stippleListMax;
|
||||
|
||||
} else {
|
||||
/* unknown token... */
|
||||
(void) fprintf(stderr, "invalid token:\n");
|
||||
(void) displayErrorString(stderr, orig, orig);
|
||||
(void) exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/* dump out the last character(s)... */
|
||||
if (charListMax > 0) {
|
||||
(void) DumpChar(stdout, charCount++, charList, charListMax,
|
||||
rectList, rectListMax, lineList, lineListMax,
|
||||
stippleList, stippleListMax);
|
||||
lineListMax = 0;
|
||||
rectListMax = 0;
|
||||
stippleListMax = 0;
|
||||
charListMax = 0;
|
||||
}
|
||||
|
||||
/* build the final structure... */
|
||||
(void) DumpGlyphs(stdout, prefix, glyphList, glyphListMax);
|
||||
|
||||
(void) exit(0);
|
||||
}
|
||||
|
||||
int
|
||||
ParseChar(char **str)
|
||||
{
|
||||
register char *c = *str;
|
||||
char *ptr;
|
||||
int ret = 0;
|
||||
|
||||
while (*c && strchr(" \t", *c))
|
||||
c++;
|
||||
|
||||
if (*c == '\'') {
|
||||
/* char format (i.e., 'c')...
|
||||
*/
|
||||
|
||||
/* skip over '\''... */
|
||||
(void) c++;
|
||||
if (*c == '\\') {
|
||||
/* quoted character... */
|
||||
/* skip over '\\'... */
|
||||
(void) c++;
|
||||
switch (*c++) {
|
||||
case 'n' :
|
||||
ret = '\n';
|
||||
break;
|
||||
case 'f' :
|
||||
ret = '\f';
|
||||
break;
|
||||
case 'r' :
|
||||
ret = '\r';
|
||||
break;
|
||||
case 'b' :
|
||||
ret = '\b';
|
||||
break;
|
||||
case 't' :
|
||||
ret = '\t';
|
||||
break;
|
||||
case '\'' :
|
||||
ret = '\'';
|
||||
break;
|
||||
case '\\' :
|
||||
ret = '\\';
|
||||
break;
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
/* backup... */
|
||||
(void) c--;
|
||||
ret = (int) strtol(c, &ptr, 8);
|
||||
c = ptr;
|
||||
break;
|
||||
default :
|
||||
/* error... */
|
||||
*str = c - 1;
|
||||
return(0);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
/* unquoted char... */
|
||||
ret = *c++;
|
||||
}
|
||||
|
||||
/* need to finish parsing the closing quote... */
|
||||
if (*c++ != '\'') {
|
||||
*str = c - 1;
|
||||
return(0);
|
||||
}
|
||||
} else if ((*c >= '0') || (*c <= '9')) {
|
||||
/* a number...
|
||||
*/
|
||||
ret = (int) strtol(c, &ptr, 0);
|
||||
}
|
||||
|
||||
/* skip over whitespace... */
|
||||
while (*c && strchr(" \t", *c))
|
||||
c++;
|
||||
|
||||
/* update the pointer... */
|
||||
*str = c;
|
||||
return(ret);
|
||||
}
|
||||
|
||||
int
|
||||
parseCoord(char **str, char *val, signed char *offset)
|
||||
{
|
||||
register char *c = *str;
|
||||
char *ptr;
|
||||
int sign = 1;
|
||||
|
||||
/* skip over whitespace... */
|
||||
while (*c && strchr(" \t", *c))
|
||||
c++;
|
||||
|
||||
/* end of line?... */
|
||||
if (!*c) {
|
||||
*str = (char *) 0;
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/* parse off number... */
|
||||
*val = (char) strtol(c, &ptr, 0);
|
||||
c = ptr;
|
||||
|
||||
/* skip over whitespace... */
|
||||
while (c && *c && strchr(" \t", *c))
|
||||
c++;
|
||||
|
||||
/* parse off offset... */
|
||||
if (c && ((*c == '-') || (*c == '+'))) {
|
||||
if (*c == '-')
|
||||
sign = -1;
|
||||
/* skip over sign... */
|
||||
(void) c++;
|
||||
/* skip over shitespace... */
|
||||
while (*c && strchr(" \t", *c))
|
||||
c++;
|
||||
|
||||
/* parse off offset... */
|
||||
*offset = (char) strtol(c, &ptr, 0);
|
||||
c = ptr;
|
||||
|
||||
/* set sign of offset... */
|
||||
*offset *= sign;
|
||||
|
||||
/* skip over whitespace... */
|
||||
while (c && *c && strchr(" \t", *c))
|
||||
c++;
|
||||
} else {
|
||||
*offset = 0;
|
||||
}
|
||||
|
||||
/* set up return ptr... */
|
||||
*str = c;
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
char *
|
||||
parseToken(char **str)
|
||||
{
|
||||
register char *c = *str;
|
||||
char *ret;
|
||||
|
||||
/* skip white space... */
|
||||
while (*c && strchr(" \t", *c))
|
||||
c++;
|
||||
|
||||
/* we hit start of token... */
|
||||
ret = c;
|
||||
while (*c && !strchr(" \t", *c))
|
||||
c++;
|
||||
|
||||
/* null out the first whitespace... */
|
||||
if (*c)
|
||||
*c++ = '\0';
|
||||
|
||||
/* skip white space... */
|
||||
while (*c && strchr(" \t", *c))
|
||||
c++;
|
||||
|
||||
*str = c;
|
||||
return(ret);
|
||||
}
|
||||
|
||||
void
|
||||
displayErrorString(FILE *f, char *orig, char *remain)
|
||||
{
|
||||
register int col;
|
||||
|
||||
(void) fprintf(f, " %s\n", orig);
|
||||
if (!remain || !*remain) {
|
||||
col = strlen(orig);
|
||||
} else {
|
||||
col = strlen(orig) - strlen(remain);
|
||||
if (col < 0)
|
||||
/* this should not happen... */
|
||||
col = 0;
|
||||
}
|
||||
|
||||
/* add 8 for the indent... */
|
||||
col += 8;
|
||||
|
||||
/* output space... */
|
||||
while (col-- > 0)
|
||||
(void) putc(' ', f);
|
||||
/* output an '^'... */
|
||||
(void) putc('^', f);
|
||||
(void) putc('\n', f);
|
||||
}
|
||||
|
||||
static int
|
||||
parseLine(char **bufPtr, line *line)
|
||||
{
|
||||
signed char dummyChar;
|
||||
int error = 0;
|
||||
|
||||
/* set the bits that correspond to this line... */
|
||||
/* parse off x1... */
|
||||
error = parseCoord(bufPtr, &(line->x1),
|
||||
&(line->x1Offset));
|
||||
|
||||
/* parse off y1... */
|
||||
if (!error)
|
||||
error = parseCoord(bufPtr, &(line->y1),
|
||||
&(line->y1Offset));
|
||||
|
||||
/* parse off x2... */
|
||||
if (!error)
|
||||
error = parseCoord(bufPtr, &(line->x2),
|
||||
&(line->x2Offset));
|
||||
|
||||
/* parse off y2... */
|
||||
if (!error)
|
||||
error = parseCoord(bufPtr, &(line->y2),
|
||||
&(line->y2Offset));
|
||||
|
||||
/* parse off lineWidth... */
|
||||
if (!error)
|
||||
error = parseCoord(bufPtr, &(line->width),
|
||||
&dummyChar);
|
||||
|
||||
/* did we error?... */
|
||||
if (error) {
|
||||
return(1);
|
||||
}
|
||||
|
||||
/* order x and y coords... */
|
||||
(void) order(&(line->x1),
|
||||
&(line->x2),
|
||||
&(line->x1Offset),
|
||||
&(line->x2Offset));
|
||||
(void) order(&(line->y1),
|
||||
&(line->y2),
|
||||
&(line->y1Offset),
|
||||
&(line->y2Offset));
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
static int
|
||||
parseRectangle(char **bufPtr, rect *rectangle)
|
||||
{
|
||||
int error = 0;
|
||||
|
||||
/* parse off x1... */
|
||||
error = parseCoord(bufPtr, &(rectangle->x1),
|
||||
&(rectangle->x1Offset));
|
||||
|
||||
/* parse off y1... */
|
||||
if (!error)
|
||||
error = parseCoord(bufPtr, &(rectangle->y1),
|
||||
&(rectangle->y1Offset));
|
||||
|
||||
/* parse off x2... */
|
||||
if (!error)
|
||||
error = parseCoord(bufPtr, &(rectangle->x2),
|
||||
&(rectangle->x2Offset));
|
||||
|
||||
/* parse off y2... */
|
||||
if (!error)
|
||||
error = parseCoord(bufPtr, &(rectangle->y2),
|
||||
&(rectangle->y2Offset));
|
||||
|
||||
/* did we error?... */
|
||||
if (error) {
|
||||
return(1);
|
||||
}
|
||||
|
||||
/* order x and y coords... */
|
||||
(void) order(&(rectangle->x1),
|
||||
&(rectangle->x2),
|
||||
&(rectangle->x1Offset),
|
||||
&(rectangle->x2Offset));
|
||||
(void) order(&(rectangle->y1),
|
||||
&(rectangle->y2),
|
||||
&(rectangle->y1Offset),
|
||||
&(rectangle->y2Offset));
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
static void
|
||||
order(char *p1, char *p2, signed char *offset1, signed char *offset2)
|
||||
{
|
||||
char swap;
|
||||
|
||||
/* order coords... */
|
||||
if (*p1 > *p2) {
|
||||
/* swap p1 & p1 */
|
||||
swap = *p1;
|
||||
*p1 = *p2;
|
||||
*p2 = swap;
|
||||
|
||||
swap = *offset1;
|
||||
*offset1 = *offset2;
|
||||
*offset2 = swap;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
DumpGlyphs(FILE *f, char *prefix, GlyphInfo glyphList, int glyphListMax)
|
||||
{
|
||||
int i1;
|
||||
int i2;
|
||||
|
||||
/* print the full glyph array... */
|
||||
|
||||
(void) fprintf(f, "int %sNumGlyphs = %d;\n", prefix, glyphListMax);
|
||||
(void) fprintf(f, "GlyphInfoRec %sGlyphs[] = {\n", prefix);
|
||||
for (i1 = 0; i1 < glyphListMax; i1++) {
|
||||
/* print the characters this is for... */
|
||||
(void) fputs(" /* data for ", f);
|
||||
for (i2 = 0; glyphList[i1].chars[i2] != 0; i2++) {
|
||||
if (i2 > 0) {
|
||||
(void) putc(',', f);
|
||||
}
|
||||
(void) fputs(vis(glyphList[i1].chars[i2]), f);
|
||||
(void) putc(' ', f);
|
||||
}
|
||||
(void) fputs("*/\n", f);
|
||||
(void) fprintf(f, " {\n");
|
||||
|
||||
(void) fprintf(f, " chars%03d, /* char list */\n",
|
||||
i1);
|
||||
|
||||
if (glyphList[i1].numRects > 0) {
|
||||
(void) fprintf(f, " rects%03d, %2d,", i1,
|
||||
glyphList[i1].numRects);
|
||||
} else {
|
||||
(void) fprintf(f, " (rect *) 0, 0,");
|
||||
}
|
||||
(void) fprintf(f, " /* rectangle list */\n");
|
||||
|
||||
if (glyphList[i1].numLines > 0) {
|
||||
(void) fprintf(f, " lines%03d, %2d,", i1,
|
||||
glyphList[i1].numLines);
|
||||
} else {
|
||||
(void) fprintf(f, " (line *) 0, 0,");
|
||||
}
|
||||
(void) fprintf(f, " /* line list */\n");
|
||||
|
||||
if (glyphList[i1].numStipples > 0) {
|
||||
(void) fprintf(f, " stipples%03d, %2d,", i1,
|
||||
glyphList[i1].numStipples);
|
||||
} else {
|
||||
(void) fprintf(f, " (line *) 0, 0,");
|
||||
}
|
||||
(void) fprintf(f, " /* stipple list */\n");
|
||||
(void) printf(" },\n\n");
|
||||
}
|
||||
(void) printf("};\n");
|
||||
}
|
||||
|
||||
static void
|
||||
DumpChar(FILE *f, int charCount, charType *charList, int charListMax,
|
||||
rect *rectList, int rectListMax, line *lineList, int lineListMax,
|
||||
line *stippleList, int stippleListMax)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* print the characters this is for... */
|
||||
(void) fputs("/* data for ", f);
|
||||
for (i = 0; i < charListMax; i++) {
|
||||
if (i > 0) {
|
||||
(void) putc(',', f);
|
||||
}
|
||||
(void) fputs(vis(charList[i]), f);
|
||||
(void) putc(' ', f);
|
||||
}
|
||||
(void) fputs("*/\n", f);
|
||||
|
||||
(void) fprintf(f, "static charType chars%03d[] = {", charCount);
|
||||
for (i = 0; i < charListMax; i++) {
|
||||
(void) fprintf(f, "0%03o, ", (int) charList[i]);
|
||||
}
|
||||
(void) fprintf(f, "0};\n");
|
||||
|
||||
if (rectListMax > 0) {
|
||||
(void) fprintf(f, "static rect rects%03d[] = {\n", charCount);
|
||||
for (i = 0; i < rectListMax; i++) {
|
||||
(void) fprintf(f, " {%d, %d, %d, %d, %d, %d, %d, %d},\n",
|
||||
rectList[i].x1, rectList[i].x1Offset,
|
||||
rectList[i].y1, rectList[i].y1Offset,
|
||||
rectList[i].x2, rectList[i].x2Offset,
|
||||
rectList[i].y2, rectList[i].y2Offset);
|
||||
}
|
||||
(void) fprintf(f, "};\n");
|
||||
}
|
||||
|
||||
if (lineListMax > 0) {
|
||||
(void) fprintf(f, "static line lines%03d[] = {\n", charCount);
|
||||
for (i = 0; i < lineListMax; i++) {
|
||||
(void) fprintf(f, " {%d, %d, %d, %d, %d, %d, %d, %d, %d},\n",
|
||||
lineList[i].x1, lineList[i].x1Offset,
|
||||
lineList[i].y1, lineList[i].y1Offset,
|
||||
lineList[i].x2, lineList[i].x2Offset,
|
||||
lineList[i].y2, lineList[i].y2Offset,
|
||||
lineList[i].width);
|
||||
}
|
||||
(void) fprintf(f, "};\n");
|
||||
}
|
||||
|
||||
if (stippleListMax > 0) {
|
||||
(void) fprintf(f, "static line stipples%03d[] = {\n", charCount);
|
||||
for (i = 0; i < stippleListMax; i++) {
|
||||
(void) fprintf(f, " {%d, %d, %d, %d, %d, %d, %d, %d, %d},\n",
|
||||
stippleList[i].x1, stippleList[i].x1Offset,
|
||||
stippleList[i].y1, stippleList[i].y1Offset,
|
||||
stippleList[i].x2, stippleList[i].x2Offset,
|
||||
stippleList[i].y2, stippleList[i].y2Offset,
|
||||
stippleList[i].width);
|
||||
}
|
||||
(void) fprintf(f, "};\n");
|
||||
}
|
||||
(void) fprintf(f, "\n");
|
||||
}
|
||||
|
||||
static char *
|
||||
vis(char val)
|
||||
{
|
||||
char buffer[BUFSIZ];
|
||||
|
||||
if (isprint(val)) {
|
||||
if (val == '^') {
|
||||
(void) strcpy(buffer, "'^^'");
|
||||
} else if (val == '\\') {
|
||||
(void) strcpy(buffer, "'\\\\'");
|
||||
} else if (val == '\'') {
|
||||
(void) strcpy(buffer, "'\\\''");
|
||||
} else {
|
||||
(void) sprintf(buffer, "'%c'", val);
|
||||
}
|
||||
} else if (iscntrl(val)) {
|
||||
(void) sprintf(buffer, "'^%c'", val);
|
||||
} else {
|
||||
(void) sprintf(buffer, "'\\%03o'", val);
|
||||
}
|
||||
|
||||
return(strdup(buffer));
|
||||
}
|
||||
Reference in New Issue
Block a user