DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T i

⟦6a960c991⟧ TextFile

    Length: 3023 (0xbcf)
    Types: TextFile
    Names: »interact.c«

Derivation

└─⟦060c9c824⟧ Bits:30007080 DKUUG TeX 2/12/89
    └─⟦this⟧ »./DVIware/crt-viewers/dviapollo/interact.c« 
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
    └─⟦af5ba6c8e⟧ »unix3.0/DVIWARE.tar.Z« 
        └─⟦ca79c7339⟧ 
            └─⟦this⟧ »DVIware/crt-viewers/dviapollo/interact.c« 

TextFile

#include "genwindow.h"
#define NULL 0
int curpage; /* The page currently displayed. */
static int downx = 0; /* The X,Y coordinates when a button last went */
		      /* down. */ 
static int downy = 0;
static int xscreen = 0;
static int yscreen = 0;
static DVIW dviw = NULL; /* The DVI window to display. */
char *curfilename ();
enum buttontype {quit, load, bottom, top, next, previous};
struct buttonrec {char *name; int width; int x; int y;
		  enum buttontype callout; };
static struct buttonrec buttons [] =
{{"Quit",     4, 31, 0, quit},
 {"Load",     4, 31, 1, load},
 {"Bottom",   8, 37, 0, bottom},
 {"Top",      8, 47, 0, top},
 {"Next",     8, 37, 1, next},
 {"Previous", 8, 47, 1, previous},
 {0}};

void redisplay ()
{
  if (dviw) {
    curpage = ShowDviPage (&dviw, curpage, xscreen, yscreen);
    show_slider (dviw -> pages);
    update_slider (curpage);
  } else {
    clearscreen ();
    show_slider (1);
  }
}

/* Reset page offset.  This does NOT refresh the screen, so the caller */
 /* should do it.*/ 
void reset_scroll ()
{
  xscreen = -RESOLUTION;
  yscreen = -RESOLUTION;
}

void load_proc ()
{
  reset_scroll ();
  dviw = ReOpenDvi (dviw, curfilename ());
  curpage = 1;
  redisplay ();
}

void next_proc ()
{
  reset_scroll ();
  curpage++;
  redisplay ();  
}

void previous_proc ()
{
  reset_scroll ();
  curpage --;
  redisplay ();  
}

void refresh_proc ()
{
  redisplay ();
}     

void top_proc ()
{
  reset_scroll ();
  redisplay ();
}

void bottom_proc ()
{
  xscreen = -RESOLUTION;
  /* The number 10 is below because pages are 8.5 x 11, and there is a */
  /* one inch margin between the top and the (0,0) dvi coordinate. */
  yscreen = (10 * RESOLUTION) - screen_height ();
  redisplay ();
}

void quit_proc ()
{
  exit (0);
}

void buttondown (x, y)
{
  downx = x;
  downy = y;
}

void buttonup (x, y)
{
  xscreen += downx - x;
  yscreen += downy - y;
  redisplay ();
}

/* This routine calls create_a_button once for each record in */
 /* buttonrec.  This allows us to only say once where each button is */
 /* for both the sunview and the X implementations. */
void create_buttons ()
{
  struct buttonrec *thisbutton;
  void (* callout) ();
  
  thisbutton = buttons;
  while (thisbutton -> name) {
    switch (thisbutton -> callout) {
    case quit:
      callout = quit_proc; break;
    case load:
      callout = load_proc; break;
    case bottom:
      callout = bottom_proc; break;
    case top:
      callout = top_proc; break;
    case next:
      callout = next_proc; break;
    case previous:
      callout = previous_proc; break;
    default:
      fprintf (stderr, "Lost miserably while creating buttons.\n");
      exit (1);
      break;
    }
    create_a_button (thisbutton -> name,
		     thisbutton -> width,
		     thisbutton -> x,
		     thisbutton -> y, callout);
    thisbutton ++;
  };
  return;
}

/* This routine should be called to move to page pagenum.*/
void goto_page (pagenum)
   int pagenum;
{
  reset_scroll ();
  curpage = pagenum;
  redisplay ();
}