|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T d
Length: 4243 (0x1093) Types: TextFile Names: »dvitypext.c«
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12 └─⟦c319c2751⟧ »unix3.0/TeX3.0.tar.Z« └─⟦036c765ac⟧ └─⟦this⟧ »TeX3.0/texware/dvitypext.c«
/* External procedures for dvitype. Originally written by: Howard Trickey, 2/19/83 (adapted from TeX's ext.c). Common procedures to texware.c removed: Karl Berry, 11/30/89. */ #include <stdio.h> #include "site.h" #define TRUE 1 #define FALSE 0 #ifdef ANSI void setpaths(void); int testaccess(int,int); void packrealnameoffile(char * *); extern void exit(int); extern char *getenv(char*); extern int creat(char *, int); extern int access(char *, int); extern int close(int); #else /* ! ANSI */ extern char *getenv(); void packrealnameoffile(); #endif /* ANSI */ #ifdef MS_DOS #define PATH_DELIM ';' #else #define PATH_DELIM ':' #endif static char *fontpath; /* * setpaths is called to set up the pointer fontpath * as follows: if the user's environment has a value for TEXFONTS * then use it; otherwise, use defaultfontpath. */ void setpaths() { register char *envpath; if ((envpath = getenv("TEXFONTS")) != NULL) fontpath = envpath; else fontpath = TEXFONTS; } extern char curname[],realnameoffile[]; /* these have size FILENAMESIZE. */ /* * testaccess(amode,filepath) * * Test whether or not the file whose name is in the global curname * can be opened for reading (if mode=READACCESS) * or writing (if mode=WRITEACCESS). * * The filepath argument is one of the ...FILEPATH constants defined below. * If the filename given in curname does not begin with '/', we try * prepending all the ':'-separated* areanames in the appropriate path to the * filename until access can be made, if it ever can. * * The realnameoffile global array will contain the name that yielded an * access success. * * This now uses the constant PATH_DELIM #define'd above as DOS uses a ';' * to separate path elements. */ #define READACCESS 4 #define WRITEACCESS 2 #define NOFILEPATH 0 #define FONTFILEPATH 3 testaccess(amode,filepath) int amode,filepath; { register boolean ok; register char *p; char *curpathplace; int f; switch(filepath) { case NOFILEPATH: curpathplace = NULL; break; case FONTFILEPATH: curpathplace = fontpath; break; } if (curname[0]=='/') /* file name has absolute path */ curpathplace = NULL; do { packrealnameoffile(&curpathplace); if (amode==READACCESS) /* use system call "access" to see if we could read it */ if (access(realnameoffile,READACCESS)==0) ok = TRUE; else ok = FALSE; else { /* WRITEACCESS: use creat to see if we could create it, but close the file again if we're OK, to let pc open it for real */ f = creat(realnameoffile,0666); ok = (char) (f >= 0); if (ok) (void) close(f); } } while (!ok && curpathplace != NULL); if (ok) { /* pad realnameoffile with blanks, as Pascal wants */ for (p = realnameoffile; *p != '\0'; p++) /* nothing: find end of string */ ; while (p < &(realnameoffile[FILENAMESIZE])) *p++ = ' '; } return (ok); } /* * packrealnameoffile(cpp) makes realnameoffile contain the directory at *cpp, * followed by '/', followed by the characters in curname up until the * first blank there, and finally a '\0'. The cpp pointer is left pointing * at the next directory in the path. * But: if *cpp == NULL, then we are supposed to use curname as is. */ void packrealnameoffile(cpp) char **cpp; { register char *p,*realname; realname = realnameoffile; if ((p = *cpp)!=NULL) { while ((*p != PATH_DELIM) && (*p != '\0')) { *realname++ = *p++; if (realname == &(realnameoffile[FILENAMESIZE-1])) break; } if (*p == '\0') *cpp = NULL; /* at end of path now */ else *cpp = p+1; /* else get past PATH_DELIM */ *realname++ = '/'; /* separate the area from the name to follow */ } /* now append curname to realname... */ p = curname + 1; while (*p != ' ') { if (realname >= &(realnameoffile[FILENAMESIZE-1])) { (void) fprintf(stderr,"! Full file name is too long\n"); break; } *realname++ = *p++; } *realname = '\0'; } \f extern FILE *dvityout; /* Print real number r in format n:m on the DVItype output file. */ void dviprintreal(r, n, m) double r; int n,m; { char fmt[50]; (void) sprintf(fmt, "%%%d.%df", n, m); (void) fprintf(dvityout, fmt, r); }