This is dviAccessors.c in view mode; [Download] [Up]
#include "structures.h" #include <sys/types.h> #include <sys/stat.h> extern int seekpage(), relativepage() ; extern void dopage(), error(), newdpi(), dviinit() ; extern void display() ; extern upmock(), upstat() ; extern void reportname() ; extern Boolean zoomed, mocked ; extern Boolean startHidden ; extern integer autostat ; extern real screendpi, userdpi[], possibmag[] ; extern int *existsize, existsize100[], existsize300[], existsize400[] ; extern int actualdpi ; extern FILE *dvifile ; extern Boolean pagedrawn ; extern char temperrorbuf[] ; extern long atol() ; extern int chdir(), strlen(), strcmp() ; extern char *strcpy(), *strcat() ; extern void unhide() ; extern void myasyncsystem() ; extern void consoletofront() ; extern void qstatus() ; long dvitime ; int dviLastPage(void) { if (dvifile == NULL) return(0) ; seekpage(0, 999999) ; pagedrawn = 0 ; display() ; return(1) ; } static char basename[100] ; char *gotocdof(s) char *s ; { char tempname[100] ; register char *last, *p ; strcpy(tempname, s) ; last = NULL ; for (p=tempname; *p; p++) if (*p == '/') last = p ; if (last) { *last = 0 ; chdir(tempname) ; p = last + 1 ; } else p = tempname ; strcpy(basename, p) ; last = 0 ; for (p=basename; *p; p++) if (*p == '.') last = p ; if (last) { *last = 0 ; return last + 1 ; } else return "" ; } void reTeXit(s) char *s ; { char comline[200] ; char *p = comline ; if (basename[0]) { for (p = basename; *p; p++) if (*p == ' ') { error("TeX does not accept file names with spaces in them.") ; return ; } p = comline ; qstatus("Running command") ; while (*s) { if (*s == '%') { switch(s[1]) { case 0: s-- ; break ; case 's': strcpy(p, basename) ; p += strlen(p) ; break ; default: *p++ = *s ; break ; } s += 2 ; } else { *p++ = *s++ ; } } *p = 0 ; myasyncsystem(comline) ; } } int dviOpenFile(char *filename) { FILE *newfile ; char *suffix ; newfile = fopen(filename, "r") ; if (newfile) { unhide() ; suffix = gotocdof(filename) ; if (dvifile) fclose(dvifile) ; if (strcmp(suffix, "dvi") == 0) { dvifile = newfile ; dviinit() ; reportname(filename) ; display() ; } else { dvifile = 0 ; display() ; if (strcmp(suffix, "latex") == 0 || strcmp(suffix, "ltx") == 0) reTeXit("latex -v \"%s\"") ; else reTeXit("tex -v \"%s\"") ; } } else { sprintf(temperrorbuf, "Couldn't open %s\n", filename) ; error(temperrorbuf) ; return(1) ; } return(0) ; } int dviReOpenFile(void) { char tempname[100] ; if (basename[0]) { strcpy(tempname, basename) ; strcat(tempname, ".dvi") ; dviOpenFile(tempname) ; } return 1 ; } int dviNextPage(void) { if (dvifile == NULL) return 0 ; if (relativepage(1)) { display() ; return 1 ; } else return 0 ; } void dviFirstPage(void) { if (dvifile == NULL) return ; relativepage(-2) ; display() ; } int dviPrevPage(void) { if (dvifile == NULL) return 0 ; if (relativepage(-1)) { display() ; return 1 ; } else return 0 ; } void dviUnzoom(void) { zoomed = 0 ; screendpi = userdpi[zoomed] ; newdpi() ; display() ; } void dviZoom(void) { zoomed = 1 ; screendpi = userdpi[zoomed] ; newdpi() ; display() ; } void dviZoomUnzoom(void) { zoomed = ! zoomed ; screendpi = userdpi[zoomed] ; newdpi() ; display() ; return ; } void dviMock(int doit) { if (doit == 0 || doit == 1) mocked = doit ; else mocked = ! mocked ; upmock() ; display() ; } void dviStat(int doit) { autostat = doit ; upstat() ; display() ; } void dviCloseFile(void) { if (dvifile == NULL) return ; reportname(NOFILETITLE) ; basename[0] = 0 ; display() ; } void dviGotoPage(char *pagenum) { int pnum, pno ; int i ; if (dvifile == NULL) return ; i = sscanf(pagenum, "%d.%d", &pnum, &pno) ; if (i==0) { error("didn't understand that panumber") ; return ; } if (i==1) pno = 0 ; seekpage(pnum, pno) ; display() ; } void todpi(s) char *s ; { int dpi ; real ndpi ; dpi = atol(s) ; if (dpi == 300 || dpi == 400) { existsize = ((dpi == 300) ? existsize300 : existsize400) ; actualdpi = dpi ; ndpi = dpi ; } else { int i ; existsize = existsize100 ; actualdpi = 100 ; for (i=1; i<20; i++) if (dpi==existsize[i]) break ; ndpi = possibmag[i + 16] ; } if (screendpi != ndpi) { userdpi[zoomed] = ndpi ; screendpi = ndpi ; newdpi() ; pagedrawn = 0 ; display() ; } } void getcurstat(void) { return ; /* struct stat statbuf ; if (dvifile) { fstat(fileno(dvifile), &statbuf) ; dvitime = statbuf.st_mtime ; } */ } void checkstat(void) { /* int doit = 0 ; long textime = 0 ; struct stat statbuf ; */ if (basename[0] == 0) return ; switch(autostat) { case 0: return ; case 1: dviReOpenFile() ; break ; case 2: reTeXit("tex -v \"%s\"") ; break ; case 3: reTeXit("latex -v \"%s\"") ; break ; case 4: reTeXit("slitex -v \"%s\"") ; break ; default: break ; } } void dviHid(int doit) { startHidden = doit ; return ; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.