home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 3 / Meeting_Pearls_III.iso / Pearls / texmf / source / driver / show / skippage.c < prev    next >
C/C++ Source or Header  |  1994-07-10  |  2KB  |  138 lines

  1. /*** skippage.c        -> move over a page    (hes) 31.05.90 ***/
  2.  
  3.  
  4. #include "defines.h"
  5.  
  6. #include <stdio.h>
  7. #include <ctype.h>
  8.  
  9. #include "commands.h"
  10. #include "globals.h"
  11. #include "flmt.h"
  12. #include "new_font.h"
  13. #include "dvihand.h"
  14.  
  15. #ifdef ANSI
  16. #  include <string.h>
  17. #  include <stdlib.h>
  18. #endif
  19.  
  20. #ifdef AZTEC_C
  21. #  include <functions.h>
  22. #endif
  23.  
  24. #include "globals.i"
  25. #include "dvihand.i"
  26. #include "liste.i"
  27. #include "new_font.i"
  28. #include "dospecia.i"
  29.  
  30.  
  31. extern long PreLoad;
  32.  
  33.  
  34. int skippage(DVIFILE *fp, long *cpagep, long *ppagep,
  35.         long *current_page, long *current_page_phy)
  36. {
  37.   short command;
  38.   long i;
  39.   unsigned long len;
  40.   int endoffile = FALSE;
  41.  
  42.   while (!DVIfeof(fp) && !endoffile && (command=Read1Byte(fp)) != EOP) {
  43.     switch (command) {
  44.     case BOP:
  45.         *cpagep = DVIftell(fp) - 1;
  46.  
  47.         *current_page = Read4Byte(fp);
  48.         for (i=1; i<=9; i++) {
  49.           (void)Read4Byte(fp);
  50.         }
  51.         *ppagep = Read4Byte(fp);
  52.  
  53.                      /* each new page should be marked */
  54.         if ( take_pptr(*current_page, *cpagep, 0L, FALSE)==0L ) {
  55.           in_list(*current_page,*cpagep, 0L);
  56.         }
  57.         *current_page_phy = get_phy_number(*cpagep);
  58.         break;
  59.  
  60.     case POST:
  61.         endoffile = TRUE;
  62.         break;
  63.  
  64.     case XXX1:
  65.     case XXX2:
  66.     case XXX3:
  67.     case XXX4:
  68.         len = NoSignExtend(fp, command-XXX1+1);
  69.         SkipDoSpecial(fp, len);
  70.         break;
  71.  
  72.         case SET2:    case SET3:    case SET4:
  73.         case PUT2:    case PUT3:    case PUT4:
  74.     case FNT2:    case FNT3:    case FNT4:
  75.     case FNT_DEF2:    case FNT_DEF3:    case FNT_DEF4:
  76.     case PRE:
  77.     case POST_POST:
  78.     case 250: case 251: case 252: case 253: case 254: case 255:
  79.         FatalStr(5,"unexpected command (%d) in DVI file!",command);
  80.         break;
  81.     case SET_RULE:
  82.     case PUT_RULE:
  83.         (void)Read4Byte(fp);
  84.     case RIGHT4:
  85.     case W4:
  86.     case X4:
  87.     case DOWN4:
  88.     case Y4:
  89.     case Z4:
  90.         (void)Read4Byte(fp);
  91.         break;
  92.     case RIGHT3:
  93.     case W3:
  94.     case X3:
  95.     case DOWN3:
  96.     case Y3:
  97.     case Z3:
  98.         (void)Read3Byte(fp);
  99.         break;
  100.     case RIGHT2:
  101.     case W2:
  102.     case X2:
  103.     case DOWN2:
  104.     case Y2:
  105.     case Z2:
  106.         (void)Read2Byte(fp);
  107.         break;
  108.     case SET1:
  109.     case PUT1:
  110.     case RIGHT1:
  111.     case W1:
  112.     case X1:
  113.     case DOWN1:
  114.     case Y1:
  115.     case Z1:
  116.     case FNT1:
  117.         (void)Read1Byte(fp);
  118.         break;
  119.     case FNT_DEF1:
  120.         i = NoSignExtend(fp, command-FNT_DEF1+1);
  121.         if (HasBeenRead(i)) {
  122.             SkipFontDef ();
  123.         }
  124.         else {
  125.             ReadFontDef (i, FALSE);        /* only define ! */
  126.         }
  127.         break;
  128.     default:
  129.         break;
  130.     }
  131.   }
  132.   if (DVIfeof(fp)) {
  133.     endoffile = TRUE;
  134.   }
  135.   
  136.   return endoffile;
  137. }
  138.