📄 newobj.c
字号:
/* * newobj.c * * This file is part of the ttf2pk package. * * Copyright 1997-1999, 2000, 2002 by * Frederic Loyer <loyer@ensta.fr> * Werner Lemberg <wl@gnu.org> */#include <stdlib.h>#include <stddef.h> /* for size_t */#include <string.h>#include "newobj.h"#include "ttf2tfm.h"#include "errormsg.h"#include "texenc.h"void *mymalloc(size_t len){ void *p;#ifdef SMALLMALLOC if (len > 65500L) oops("Cannot allocate more than 64kByte.");#endif if (len) p = malloc(len); else p = malloc(1); if (p == NULL) oops("Out of memory."); return p;}void *myrealloc(void *oldp, size_t len){ void *p;#ifdef SMALLMALLOC if (len > 65500L) oops("Cannot allocate more than 64kByte.");#endif if (len) p = realloc(oldp, len); else p = realloc(oldp, 1); if (p == NULL) oops("Out of memory."); return p;}/* * This routine gets a line from a file, supporting continuation with * '\' as the last character on the line. * * In case of error, NULL is returned. If EOF is reached a pointer to * a null string is returned. The final newline will be retained. */char *get_line(FILE *f){ size_t linelen, len; char *buffer; int c; linelen = 80; len = 0; buffer = (char *)mymalloc(linelen); while (1) { c = fgetc(f); buffer[len++] = c; if (len == linelen - 1) { linelen += 80; buffer = (char *)myrealloc(buffer, linelen); } again: switch (c) { case '\\': c = fgetc(f); if (c == '\n') { len--; break; } else { buffer[len++] = c; goto again; } case '\n': buffer[len] = '\0'; return buffer; case EOF: buffer[len - 1] = '\0'; if (feof(f)) return buffer; else return NULL; default: break; } }}/* * getline() is a wrapper function for get_line(). It returns `False' in * case of error and expects a pointer to a buffer to store the current * line. Additionally, the final newline character is stripped. */Booleangetline(char **bufferp, FILE *f){ size_t l; *bufferp = get_line(f); if (!(*bufferp && **bufferp)) return 0; l = strlen(*bufferp); if (l > 0) (*bufferp)[l - 1] = '\0'; return 1;}char *newstring(char *s){ char *q; if (s) { q = mymalloc(strlen(s) + 1); (void)strcpy(q, s); return q; } else return NULL;}ttfinfo *newchar(Font *fnt){ register ttfinfo *ti; ti = (ttfinfo *)mymalloc(sizeof (ttfinfo)); ti->next = fnt->charlist; ti->charcode = -1; ti->glyphindex = -1; ti->incode = -1; ti->outcode = -1; ti->adobename = NULL; ti->width = -1; ti->llx = -1; ti->lly = -1; ti->urx = -1; ti->ury = -1; ti->ligs = NULL; ti->kerns = NULL; ti->kern_equivs = NULL; ti->pccs = NULL; ti->constructed = False; ti->wptr = 0; ti->hptr = 0; ti->dptr = 0; ti->iptr = 0; fnt->charlist = ti; return ti;}kern *newkern(void){ register kern *nk; nk = (kern *)mymalloc(sizeof (kern)); nk->next = NULL; nk->succ = NULL; nk->delta = 0; return nk;}pcc *newpcc(void){ register pcc *np; np = (pcc *)mymalloc(sizeof (pcc)); np->next = NULL; np->partname = NULL; np->xoffset = 0; np->yoffset = 0; return np;}lig *newlig(void){ register lig *nl; nl = (lig *)mymalloc(sizeof (lig)); nl->next = NULL; nl->succ = NULL; nl->sub = NULL; nl->op = 0; /* the default =: op */ nl->boundleft = 0; return nl;}stringlist *newstringlist(void){ register stringlist *sl; sl = (stringlist *)mymalloc(sizeof (stringlist)); sl->next = NULL; sl->old_name = NULL; sl->new_name = NULL; sl->single_replacement = False; return sl;}voidinit_font_structure(Font *fnt){ int i; fnt->ttfname = NULL; fnt->tfm_path = NULL; fnt->tfm_ext = NULL; fnt->outname = NULL; fnt->subfont_name = NULL; fnt->outname_postfix = NULL; fnt->fullname = NULL; fnt->vplout = NULL; fnt->tfmout = NULL; fnt->inencname = NULL; fnt->inencoding = NULL; fnt->replacements = NULL; fnt->replacementname = NULL; fnt->outencname = NULL; fnt->outencoding = NULL; fnt->sfdname = NULL; fnt->sawligkern = False; fnt->subfont_ligs = False; fnt->ligname = NULL; fnt->write_enc = False; fnt->charlist = NULL; fnt->boundarychar = -1; fnt->codingscheme = default_codingscheme; fnt->titlebuf = NULL; fnt->units_per_em = 0; fnt->italicangle = 0.0; fnt->fixedpitch = 0; fnt->fontindex = 0; fnt->pid = 3; fnt->eid = 1; fnt->xheight = 0; fnt->fontspace = 0; fnt->y_offset = 0.25; fnt->efactor = 1.0; fnt->slant = 0; fnt->capheight = 0.8; fnt->PSnames = No; fnt->rotate = No; fnt->efactorparam = NULL; fnt->slantparam = NULL; fnt->fontindexparam = NULL; fnt->pidparam = NULL; fnt->eidparam = NULL; fnt->y_offsetparam = NULL; for (i = 0; i < 256; i++) { fnt->inencptrs[i] = NULL; fnt->outencptrs[i] = NULL; fnt->uppercase[i] = NULL; fnt->lowercase[i] = NULL; fnt->sf_code[i] = -1; fnt->nextout[i] = -1; /* encoding chains have length 0 */ }}/* end */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -