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.