ftp.nice.ch/pub/next/text/tex/apps/TeXview-kp0.25.s.tar.gz#/TeXview-grey/dviAccessors.c

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[], existsize600[] ;
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 || dpi == 600) {
	  if (dpi == 300) existsize = existsize300 ;
	  if (dpi == 400) existsize = existsize400 ;
	  if (dpi == 600) existsize = existsize600 ;
      actualdpi = dpi ;
      ndpi = dpi ;
   } else {
      int i ;
      existsize = existsize100 ;
      actualdpi = 100 ;
      for (i=1; i<28; i++)
         if (dpi==existsize[i])
            break ;
      ndpi = possibmag[i + 13] ;
   }
   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.