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

This is pots.c in view mode; [Download] [Up]

/*
 *   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[], existsize600[] ;
/*
 *   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|| screendpi == 600.0) {
      actualdpi = screendpi ;
	  if (screendpi == 300.0) existsize = existsize300 ;
	  if (screendpi == 400.0) existsize = existsize400 ;
	  if (screendpi == 600.0) existsize = existsize600 ;
   } 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[] ;

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.