This is dviAccessors.c in view mode; [Download] [Up]
#include "structures.h" #include <sys/types.h> #include <sys/stat.h> #include <string.h> extern int debugon ; extern integer pagenum, seq ; extern integer curpos ; extern void upformats(), dviseek() ; extern void getpagenum() ; extern int seekpage(), relativepage() ; extern int processbop() ; extern void skippage() ; extern void dopage(), error(), newdpi(), dviinit() ; extern void display() ; extern upmock() ; extern void reportname() ; extern Boolean zoomed, mocked ; 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() ; extern void unhide() ; extern void myasyncsystem() ; extern void consoletofront() ; extern void qstatus() ; long dvitime ; extern integer fakeeof ; int dviLastPage(void) { if (dvifile == NULL) return(0) ; seekpage(0, 999999) ; pagedrawn = 0 ; display() ; return(1) ; } char Tbasename[2000], oldbasename[2000] ; char LastFormat[2000], CustomFormat[2000] ; char *gotocdof(s) char *s ; { char tempname[2000] ; 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(Tbasename, p) ; last = 0 ; for (p=Tbasename; *p; p++) if (*p == '.') last = p ; if (last) { *last = 0 ; return last + 1 ; } else return "" ; } void dviSaveFormat(s) const char *s ; { char *p ; while (*s <= ' ' && *s != 0) s++ ; if (*s == '%') strcpy(LastFormat, CustomFormat) ; else if (*s > 0) strcpy(LastFormat, s) ; p = LastFormat ; while (*p > ' ') p++ ; *p = 0 ; upformats() ; } /* * We also save away the last format used, so when we run again, we * use it automatically. This is useful for `open' and such. */ void reTeXit(s) char *s ; { char comline[2000] ; char *p = comline ; char *q ; if (Tbasename[0]) { for (p = Tbasename; *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, Tbasename) ; p += strlen(p) ; break ; case 'L': strcpy(p, LastFormat) ; p += strlen(p) ; break ; case 'C': strcpy(p, CustomFormat) ; p += strlen(p) ; break ; default: *p++ = *s ; break ; } s += 2 ; } else { *p++ = *s++ ; } } *p = 0 ; myasyncsystem(comline) ; p = comline ; while (*p <= ' ' && *p != 0) p++ ; q = p ; while (*p > ' ') p++ ; *p = 0 ; if (strcmp(q, "bibtex") != 0) strcpy(LastFormat, q) ; upformats() ; } } static char pageseq[25] ; static integer seek1, seek2 ; void gottapage(void) { pageseq[0] = 0 ; } void checkmatch(void) { if (pageseq[0] != 0) { while (processbop()) { if (pagenum == seek1 && seq == seek2) { gottapage() ; pagedrawn = 0 ; display() ; return ; } else skippage() ; } } } extern int fromipc ; int dviOpenFile(char *filename) { FILE *newfile ; char *suffix ; if (LastFormat[0] == 0) strcpy(LastFormat, "tex") ; newfile = fopen(filename, "r") ; if (newfile) { if (dvifile) { strcpy(oldbasename, Tbasename) ; getpagenum(pageseq) ; } else pageseq[0] = 0 ; unhide() ; suffix = gotocdof(filename) ; if (dvifile) fclose(dvifile) ; if (strcmp(suffix, "dvi") == 0) { dvifile = newfile ; dviinit() ; reportname(filename) ; if (strcmp(Tbasename, oldbasename)==0 && pageseq[0]) { void dviGotoPage(char *) ; switch (sscanf(pageseq, "%ld.%ld", &seek1, &seek2)) { case 1: seek2 = 0 ; break ; case 2: break ; default: pageseq[0] = 0 ; break ; } if (pageseq[0] == 0 || (pagenum == seek1 && seq == seek2)) { gottapage() ; display() ; return (0) ; } else if (! fromipc) { /* change when we get 1gig dvi files */ dviGotoPage(pageseq) ; } else { pagedrawn = 1 ; /* fake it out */ } } else display() ; } else { dvifile = 0 ; display() ; if (strcmp(suffix, "latex") == 0 || strcmp(suffix, "ltx") == 0) reTeXit("latex -v \"%s\"") ; else reTeXit("%L -v \"%s\"") ; } } else { sprintf(temperrorbuf, "Couldn't open %s\n", filename) ; error(temperrorbuf) ; return(1) ; } return(0) ; } int dviReOpenFile(void) { char tempname[2000] ; if (Tbasename[0]) { strcpy(tempname, Tbasename) ; 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 dviCloseFile(void) { if (dvifile == NULL) return ; reportname(NOFILETITLE) ; Tbasename[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() ; } }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.