diff -cr xdvi-17.orig/Imakefile xdvi/Imakefile
*** xdvi-17.orig/Imakefile	Thu Nov 11 23:02:12 1993
--- xdvi/Imakefile	Fri Nov 12 22:45:36 1993
***************
*** 10,15 ****
--- 10,16 ----
  #define	Use_MARKPAGE
  #define	Use_TOC
  #define	Use_PRINTDVI
+ #define	Use_PAGENUM
  
  #include "XDvi.defs"
  #include "XDvi.rules"
***************
*** 93,98 ****
--- 94,106 ----
  TOC_DEFS=
  #endif	/* Use_TOC */
  
+ #ifdef Use_PAGENUM
+ PAGE_DEFS=-DPAGENUM
+ #else
+ PAGE_DEFS=
+ #endif /* Use_PAGENUM */
+ 
+ 
  #ifdef	Use_PRINTDVI
  /* Print-out command templates */
  PRCMDALL="(cd %d; dvi2ps %F) | lpr -P%p -J'%F'"
***************
*** 127,133 ****
       -DUSE_PK -DUSE_GF -DUSE_PXL -DBUTTONS -DGREY -UTEXXET \
       -DSEARCH_SUBDIRECTORIES -UXDVIFONTS_ONLY \
       $(SELFILE_DEFS) $(KANJI_DEFS) $(ZEIT_DEFS) $(PS_DEFS) \
!      $(MARKPAGE_DEFS) $(TOC_DEFS) $(PRINT_DEFS)
  
  CDEBUGFLAGS=-g
  
--- 135,141 ----
       -DUSE_PK -DUSE_GF -DUSE_PXL -DBUTTONS -DGREY -UTEXXET \
       -DSEARCH_SUBDIRECTORIES -UXDVIFONTS_ONLY \
       $(SELFILE_DEFS) $(KANJI_DEFS) $(ZEIT_DEFS) $(PS_DEFS) \
!      $(MARKPAGE_DEFS) $(TOC_DEFS) $(PRINT_DEFS) $(PAGE_DEFS)
  
  CDEBUGFLAGS=-g
  
diff -cr xdvi-17.orig/dvi_draw.c xdvi/dvi_draw.c
*** xdvi-17.orig/dvi_draw.c	Thu Nov 11 23:01:30 1993
--- xdvi/dvi_draw.c	Fri Nov 12 16:30:08 1993
***************
*** 1352,1358 ****
--- 1352,1363 ----
  	put_border(ROUNDUP(unshrunk_paper_w, shrink_factor) + 1,
  	    ROUNDUP(unshrunk_paper_h, shrink_factor) + 1);
  
+ #ifdef PAGENUM
+ 	(void) lseek(fileno(dvi_file), page_index[current_page+1].offset,
+ 		     SEEK_SET);
+ #else
  	(void) lseek(fileno(dvi_file), page_offset[current_page], SEEK_SET);
+ #endif /* PAGENUM */
  
  	bzero((char *) &currinf.data, sizeof(currinf.data));
  	currinf.tn_head = tn_head;
diff -cr xdvi-17.orig/dvi_init.c xdvi/dvi_init.c
*** xdvi-17.orig/dvi_init.c	Thu Nov 11 23:01:31 1993
--- xdvi/dvi_init.c	Fri Nov 12 16:25:37 1993
***************
*** 669,675 ****
--- 669,693 ----
  prepare_pages()
  {
  	int i;
+ 	     
+ #ifdef PAGENUM
+ 	long offset;
+ 
+ 	page_index = (PAGE_INDEX *)xmalloc((unsigned)(total_pages + 1)
+ 					   * sizeof(PAGE_INDEX),
+ 					   "page directory");
+ 	for (offset = last_page_offset, i = total_pages; i > 0; --i) {
+ 	    Fseek(dvi_file, offset, 0);
+ 	    if (one(dvi_file) != BOP) {
+ 		dvi_oops("page doesn't begin with BOP");
+ 	    }
+ 	    page_index[i].offset = offset;
+ 	    page_index[i].number = four(dvi_file); /* Read c[0] */
  
+ 	    Fseek(dvi_file, (long)(9*4), 1);
+ 	    offset = four(dvi_file);
+ 	}
+ #else
  	page_offset = (long *) xmalloc((unsigned) total_pages * sizeof(long),
  	    "page directory");
  	i = total_pages;
***************
*** 683,688 ****
--- 701,707 ----
  	    Fseek(dvi_file, (long) (1+4+(9*4)), 1);
  	    Fseek(dvi_file, page_offset[--i] = four(dvi_file), 0);
  	}
+ #endif /* PAGENUM */
  }
  
  void
***************
*** 765,771 ****
--- 784,795 ----
  		    Fclose(dvi_file);
  		    if (list_fonts) Putchar('\n');
  		}
+ #ifdef PAGENUM
+ 		free((char *) page_index);
+ #else
  		free((char *) page_offset);
+ #endif /* PAGENUM */
+ 
  		free_vf_chain(tn_head);
  		tn_head = NULL;
  		for (fontp = font_head; fontp != NULL; fontp = fontp->next)
diff -cr xdvi-17.orig/toc.c xdvi/toc.c
*** xdvi-17.orig/toc.c	Fri Nov 12 22:42:41 1993
--- xdvi/toc.c	Fri Nov 12 22:49:04 1993
***************
*** 91,111 ****
--- 91,129 ----
      if (ThisPageIsMarked(i)) {
        sprintf(s, "%c %*d%c",
  	      i==LastMarkPage() ? LASTMRKPAGESYM : MRKPAGESYM,
+ #ifdef PAGENUM
+ 	      get_Page_size(), page_index[i+pageno_correct].number,
+ #else
  	      get_Page_size(), i+pageno_correct,
+ #endif /* PAGENUM */
  	      i==current_page   ? CURPAGESYM     : NORMALPAGESYM);
      }
      else {
        sprintf(s, "%c %*d%c",
  	      NORMALPAGESYM,
+ #ifdef PAGENUM
+ 	      get_Page_size(), page_index[i+pageno_correct].number,
+ #else
  	      get_Page_size(), i+pageno_correct,
+ #endif /* PAGENUM */
  	      i==current_page   ? CURPAGESYM     : NORMALPAGESYM);
      }
  #else
      if(i==current_page) {
+ #ifdef PAGENUM
+       sprintf(s, "  %*d<", get_Page_size(),
+ 	      page_index[i+pageno_correct].number);
+ #else
        sprintf(s, "  %*d<", get_Page_size(), i+pageno_correct);
+ #endif /* PAGENUM */
      }
      else {
+ #ifdef PAGENUM
+       sprintf(s, "  %*d ", get_Page_size(),
+ 	      page_index[i+pageno_correct].number);
+ #else
        sprintf(s, "  %*d ", get_Page_size(), i+pageno_correct);
+ #endif /* PAGENUM */
      }
  #endif /* MARKPAGE */
      toc[i] = (char *)strdup(s);
diff -cr xdvi-17.orig/xdvi.h xdvi/xdvi.h
*** xdvi-17.orig/xdvi.h	Fri Nov 12 22:42:42 1993
--- xdvi/xdvi.h	Fri Nov 12 15:36:44 1993
***************
*** 262,268 ****
--- 262,282 ----
   * Table of page offsets in DVI file, indexed by page number - 1.
   * Initialized in prepare_pages().
   */
+ 
+ #ifdef PAGENUM
+ 
+ typedef struct {
+     long offset;
+     int number;
+ } PAGE_INDEX;
+ 
+ EXTERN PAGE_INDEX *page_index;
+ 
+ #else /* not PAGENUM */
+ 
  EXTERN	long	*page_offset;
+ 
+ #endif /* PAGENUM */
  
  /*
   * Mechanism for reducing repeated warning about specials, lost characters, etc.
