home *** CD-ROM | disk | FTP | other *** search
- /*
- * We need some routines to update pot values and hoffset/voffset pairs.
- */
- #include "structures.h"
- /*
- * These are all the externals we use.
- */
- extern real conv, pxlconv ;
- extern real possibmag[] ;
- extern integer iconv ;
- extern real vconv ;
- extern integer viconv ;
- extern real screendpi ;
- extern shalfword hhoffset, vvoffset ;
- extern shalfword colsize ;
- extern real hsize, vsize, hmarg, vmarg ;
- extern real defhsize, defvsize, defhmarg, defvmarg ;
- extern shalfword hhsize, vvsize, hhmarg, vvmarg ;
- extern shalfword rhhsize, rvvsize, rhhmarg, rvvmarg ;
- extern shalfword vscreen ;
- extern shalfword hwindow, vwindow, hwindowwidth, vwindowwidth ;
- extern shalfword vvmax, hhmax ;
- extern shalfword vvmin, hhmin ;
- extern FILE *dvifile ;
- extern integer dvimag, num, den ;
- extern shalfword vscreenheight ;
- extern shalfword vwindowheight ;
- extern Boolean dualpage, pagedrawn ;
- extern void reportnewdpi() ;
- extern void TPSdefres() ;
- extern int actualdpi ;
- extern int *existsize, existsize100[], existsize300[], existsize400[] ;
- /*
- * functions we use
- */
- extern void recalculate(), recalc(), fontinit() ;
- extern void makenewdoc() ;
- extern void notifysizes() ;
- /*
- * A Boolean to indicate that the user set the sizes, so we shouldn't
- * muck with them.
- */
- Boolean usersetsizes ;
- Boolean landscape ;
- Boolean landset ;
- /*
- * Some variables setting the dimensions we work in.
- *
- * inches, cm, picas, points
- */
- int dimstyle ;
- real intostyle[4] = { 1.0, 2.54, 6.0225, 72.27 } ;
- real intos ;
- /*
- * Here we set the sizes back to their default sizes.
- */
- void resetsizes() {
- landscape = 0 ;
- landset = 0 ;
- usersetsizes = 0 ;
- hsize = defhsize ;
- vsize = defvsize ;
- hmarg = defhmarg ;
- vmarg = defvmarg ;
- if (dualpage)
- hsize += hsize ;
- recalculate() ;
- }
- /*
- * If we get a landscape special, we call this to reset things.
- */
- void tolandscape() {
- register real t ;
-
- if (! landset) {
- landset = 1 ;
- usersetsizes = 0 ;
- if (dualpage) {
- t = hsize ;
- hsize = vsize * 2.0 ;
- vsize = hsize / 2.0 ;
- } else {
- t = hsize ;
- hsize = vsize ;
- vsize = t ;
- }
- t = hmarg ;
- hmarg = vmarg ;
- vmarg = t ;
- if (dualpage)
- hsize += hsize ;
- recalculate() ;
- }
- pagedrawn = 0 ;
- }
-
- void todualornot() {
- if (dualpage)
- hsize += hsize ;
- else
- hsize = hsize / 2.0 ;
- recalculate() ;
- }
-
- void newpapersize(h, v)
- long h, v ;
- {
- hsize = h / 4736286.72 ;
- vsize = v / 4736286.72 ;
- if (dualpage) {
- hsize = hsize * 2.0 ;
- }
- hmarg = 1.0 ;
- vmarg = 1.0 ;
- recalculate() ;
- pagedrawn = 0 ;
- }
- /*
- * Here we recalculate various things when hsize or most anything else
- * changes.
- */
- void
- recalculate() {
- #define MARG (8)
- vvsize = vsize * screendpi + 0.5 ;
- vvmarg = vmarg * screendpi + 0.5 ;
- hhsize = hsize * screendpi + 0.5 ;
- hhmarg = hmarg * screendpi + 0.5 ;
- rhhsize = hhsize + 2 * MARG ;
- rvvsize = vvsize + 2 * MARG ;
- rhhmarg = hhmarg + MARG ;
- rvvmarg = vvmarg + MARG ;
- hhoffset = rhhmarg ;
- vvoffset = rvvmarg ;
- hhmin = -MARG ;
- hhmax = hhsize + MARG ;
- vvmin = -MARG ;
- vvmax = vvsize + MARG ;
- notifysizes() ;
- }
- /*
- * If the dots per inch change, we call this to redo everything.
- */
- void newdpi() {
- if (screendpi == 300.0 || screendpi == 400.0) {
- actualdpi = screendpi ;
- existsize = ((screendpi == 300.0) ? existsize300 : existsize400) ;
- } else {
- actualdpi = 100 ;
- existsize = existsize100 ;
- }
- recalculate() ;
- TPSdefres((double)screendpi) ;
- if (dvifile != NULL) {
- conv = num * screendpi * dvimag / ( den * 254000000.0 ) ;
- pxlconv = dvimag * screendpi / 1000.0 ;
- iconv = 1.0 / conv + 0.5 ;
- vconv = conv ;
- viconv = 1.0 / vconv + 0.5 ;
- fontinit() ;
- }
- pagedrawn = 0 ;
- reportnewdpi() ;
- }
- /*
- * Here we calculate the dpi needed to draw the entire page on the
- * current list.
- */
-
- void newfullsize() {
- register int i ;
- register real temp, newdpi ;
-
- temp = ((real)(hwindow - 2 * MARG)) / hsize ;
- newdpi = ((real)(vwindow - 2 * MARG)) / vsize ;
- if (temp < newdpi)
- newdpi = temp ;
- for (i=1; possibmag[i] != 0.0 && possibmag[i] < newdpi; i++) ;
- if (i==1)
- newdpi = possibmag[1] ;
- else
- newdpi = possibmag[i-1] ;
- possibmag[0] = newdpi ;
- }
- extern char temperrorbuf[] ;
-