This is preview.c in view mode; [Download] [Up]
/*
* This software is Copyright 1988 by Radical Eye Software.
* All Rights Reserved.
*/
/*
* dviamiga.c of dviamiga software package.
*
* This is a preliminary main routine.
*/
#include "structures.h"
#include <string.h>
/*
* Our globals:
*/
TeXfontdesctype *TeXfonts[256] ; /* font pointers */
TeXfontdesctype *TeXfontlist ;
fontdesctype *fontlist = NULL ; /* list of resident fonts */
Boolean landscape = 0 ; /* are we in landscape? */
FILE *dvifile, *pkfile ; /* files for input and output */
integer curpos ; /* dvi file position */
integer thispage ; /* where this page is */
integer rthispage ;
integer prevpage ; /* previous page */
integer pagenum, seq ; /* page number */
real conv, pxlconv ; /* to pixel conversion factors */
integer iconv ; /* integer to pixel conversion factor */
real vconv ; /* these are for the half mode */
integer viconv ;
real alpha ; /* conversion ratio, DVI unit per TFM unit */
integer mag ; /* the magnification of this document */
real screendpi = 100.0 ; /* current screen resolution */
shalfword hh, vv ; /* current pixel position */
shalfword fnt ; /* current font (0-255) */
fontdesctype *curfnt ; /* current font (pointer) */
char *resident ; /* where to find configuration info */
char defaultfont[256] ; /* the default font name, size */
frametype frames[MAXFRAME] ; /* stack for virtual fonts */
quarterword *virpos ; /* current position in virtual character packet */
quarterword *virlim ; /* final byte in virtual character packet */
fontmaptype *ffont ; /* first font in current frame */
shalfword hhoffset, vvoffset ; /* the horizontal and vertical off */
shalfword hhmin, hhmax, vvmin, vvmax ; /* the borders of the screen */
real hsize = 8.5, vsize = 11.0, hmarg = 1.0, vmarg = 1.0 ;
/* the page and margin size */
real defhsize = 8.5, defvsize = 11.0, defhmarg = 1.0, defvmarg = 1.0 ;
shalfword hhsize, vvsize, hhmarg, vvmarg ;
shalfword rhhsize, rvvsize, rhhmarg, rvvmarg ;
shalfword hbody, vbody, hpos, vpos ;
integer hpot = 32768, vpot = 0 ;
shalfword vscreen = 380 ; /* screen size vertical */
shalfword vwindow, vwindowheight, hwindow, hwindowwidth ;
integer dvimag, num, den ; /* sizes from dvi file */
integer memalloc = 0 ;
integer numalloc = 0 ;
Boolean pageinterrupted = 0 ;
integer messagebit ; /* the bit to wait for on IDCMP */
real possibmag[] = { /* possible screen dots per inch */
33.4898, /* this one is writeable */
16.1506, 17.6921, 19.3807, 21.2305, 23.2568,
25.4766, 27.9082, 30.5719, 33.4898, 36.6862,
40.1878, 44.0235, 48.2253, 52.8282,
57.8704, 63.3938, 69.4444, 76.0726, 83.3333,
91.2871, 100.0000, 109.5445, 120.0000, 131.4534,
144.0000, 157.7441, 172.8000, 189.2929, 300.0000,
400.0000, 0.0000 } ;
int existsize100[] = { 0, 69, 76, 83, 91, 100, 110, 120,
131, 144, 158, 173, 189, 207, 227, 249, 273, 299, 327, 358, 393,
430, 471, 516, 565, 619, 678, 743, 814, 892, 977, 1070, 32767 } ;
int existsize300[] = { 0, 300, 329, 360, 432, 518, 622, 746, 896,
1075, 1290, 1548, 32767 } ;
int existsize400[] = { 0, 400, 438, 480, 576, 691, 829, 995, 1194,
1433, 1720, 2064, 32767 } ;
int *existsize = existsize100 ;
real userdpi[] = { 91.2871, 120.0000 } ;
int debugon = 0 ;
int paranoia = 0 ;
Boolean borderson = 1 ;
Boolean dualpage = 0 ;
Boolean orientationset = 0 ;
Boolean reopenscreen = 0 ;
shalfword vscreenheight = 400 ;
Boolean interlaceon = 1 ;
int first ;
int x, y ;
int tracking ;
Boolean zoomed = 0 ;
Boolean mocked = 0 ;
char realname[400] ;
char safebuf[400], filenamebuf[400] ;
int redrawbars = 0 ;
int turnitoff = 0 ;
int nloc ;
integer spage, sno ;
Boolean redrawpage ;
int rowsize, colsize ;
Boolean autofront=1, autoactivate ;
int actualdpi = 100 ;
extern char pagebuf[] ;
extern Boolean usersetsizes ;
extern char defaulttitle[] ;
extern char safebuf[] ;
/*
* The external routines we call:
*/
extern void dopage() ;
extern void initialize() ;
extern shalfword skipnop() ;
extern void skipover() ;
extern Boolean seekpage() ;
extern void exit() ;
extern void recalculate() ;
extern int NXAlert() ;
extern int NXRunAlertPanel() ;
extern int NXGetAlertPanel() ;
extern void TPSbop(), TPSeop() ;
extern void texflush() ;
extern void display() ;
int dviOpenFile() ;
extern void writeconsole() ;
/*
* Pops and deletes an alert panel to get around a bug.
*/
void fixalertbug() {
#ifdef BADKLUDGE
NXRunAlertPanel("Howdy!", "This is TeXview 0.0\nCopyright 1989 Radical Eye Software\nAll Rights Reserved",
NULL, NULL, NULL) ;
#endif
}
/*
* error is called on all errors. It prints the message, and exits
* if the error starts with !.
*/
char temperrorbuf[380] ;
extern char lastfile[] ;
Boolean erroronscreen = 0 ;
void error(s)
register char *s ;
{
fflush(stdout) ;
writeconsole(s) ;
NXRunAlertPanel(NULL, s, "OK", NULL, NULL) ;
if (*s=='!') {
if (lastfile[0])
NXRunAlertPanel(NULL, "Last font was %s\n", "OK", NULL, NULL, lastfile) ; /* jvc */
exit(1) ;
}
}
/*
* Our main routine will get a file name from the command line. First,
* a routine to check if we need to quit.
*/
int checkformessage() {
return(0) ;
}
int gargc ;
void more_main (argc, argv)
int argc ;
char *argv[] ;
{
if (argc > 1 && argv[1][0]=='-' && argv[1][1]=='d') {
if (argv[1][2] <= '9' && argv[1][2] >= '0')
debugon = argv[1][2] - '0' ;
else
debugon = 1 ;
argc-- ; argv++ ;
}
while (argc > 1 && argv[1][0]=='-') {
argc-- ; argv++ ;
}
screendpi = userdpi[zoomed] ;
dvifile = NULL ;
usersetsizes = 0 ;
hsize = 8.5 ;
vsize = 11.0 ;
hmarg = 1.0 ;
vmarg = 1.0 ;
gargc = argc ;
initialize() ;
curpos = 0 ;
recalculate() ;
if (argc > 1) {
char *p, *last ;
last = 0 ;
strcpy(realname, argv[1]) ;
for (p=realname; *p; p++)
if (*p == '.')
last = p ;
else if (*p == '/')
last = 0 ;
if (last == 0)
strcat(realname, ".dvi") ;
if (dviOpenFile(realname) == 1)
display() ;
} else
display() ;
}
/*
* This is where we fix the environment variable problem
* caused by the fact that the WorkSpace environment
* doesn't get environment variables.
*/
#undef getenv
char *getenv(), *malloc() ;
char *mgetenv(s)
char *s ;
{
static int envinit = 0 ;
static struct envpair {
struct envpair *next ;
char *name, *val ;
char s[1] ;
} *envbase = 0 ;
char inbuf[1000] ;
char *p ;
struct envpair *tp ;
if (envinit == 0) {
FILE *f = popen("csh -c printenv", "r") ;
if (f) {
while (fgets(inbuf, 1000, f))
if (strlen(inbuf) > 3) {
inbuf[strlen(inbuf)-1] = 0 ;
for (p=inbuf; *p && *p != '='; p++) ;
if (*p == '=') {
tp = (struct envpair *)
malloc(sizeof(struct envpair) + strlen(inbuf)) ;
tp->next = envbase ;
strcpy(tp->s, inbuf) ;
p = tp->s + (p - inbuf) ;
tp->name = tp->s ;
tp->val = p + 1 ;
*p = 0 ;
envbase = tp ;
}
}
pclose(f) ;
}
envinit = 1 ;
}
p = getenv(s) ;
if (p)
return p ;
for (tp = envbase; tp; tp = tp->next)
if (strcmp(s, tp->name)==0)
return tp->val ;
return 0 ;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.