[comp.sources.misc] v06i055: dvi2tty patch 2

allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc) (03/08/89)

Posting-number: Volume 6, Issue 55
Submitted-by: marcel@nluug.nl (Marcel Mol)
Archive-name: dvi2tty.patch2


Thsi patch fixes some bugs in the check for the .dvi extension
in a given filename, and some dependencies on argument evaluation order.
Furthermore, ligatures are treated better.
Also bugs in the disdvi program are fixed: the given offset in the
file was not always right.

- Marcel

======================================================================
*** ORG/disdvi.c
--- disdvi.c
**************
*** 68,74
              exit(2);
          }
          if ((i >= 5) && (argv[1][i-4] == '.') && (argv[1][i-3] == 'd') &&
!               (argv[1][i-2] = 'v') && (argv[1][i-1] = 'i'))
              dvi_name = argv[1];
          else {
              dvi_name = malloc((i+4) * sizeof(char));
--- 68,74 -----
              exit(2);
          }
          if ((i >= 5) && (argv[1][i-4] == '.') && (argv[1][i-3] == 'd') &&
!               (argv[1][i-2] == 'v') && (argv[1][i-1] == 'i'))
              dvi_name = argv[1];
          else {
              dvi_name = malloc((i+5) * sizeof(char));
**************
*** 71,77
                (argv[1][i-2] = 'v') && (argv[1][i-1] = 'i'))
              dvi_name = argv[1];
          else {
!             dvi_name = malloc((i+4) * sizeof(char));
              strcpy(dvi_name, argv[1]);
              strcat(dvi_name, ".dvi");
          }
--- 71,77 -----
                (argv[1][i-2] == 'v') && (argv[1][i-1] == 'i'))
              dvi_name = argv[1];
          else {
!             dvi_name = malloc((i+5) * sizeof(char));
              strcpy(dvi_name, argv[1]);
              strcat(dvi_name, ".dvi");
          }
**************
*** 111,118
                  case SET4     : printf("SET%d:    %ld\n", opcode - SET1 + 1,
                                                         num(opcode - SET1 + 1));
                                  break;
!                 case SET_RULE : printf("SET_RULE: %ld, %ld\n", sget4(),
!                                                                 sget4());
                                  break;
                  case PUT1     :
                  case PUT2     :
--- 111,119 -----
                  case SET4     : printf("SET%d:    %ld\n", opcode - SET1 + 1,
                                                         num(opcode - SET1 + 1));
                                  break;
!                 case SET_RULE : printf("SET_RULE: height: %ld\n", sget4());
!                                 printf("%06ld: ", pc);
!                                 printf("          length: %ld\n", sget4());
                                  break;
                  case PUT1     :
                  case PUT2     :
**************
*** 120,127
                  case PUT4     : printf("PUT%d:     %ld\n", opcode - PUT1 + 1,
                                                         num(opcode - PUT1 + 1));
                                  break;
!                 case PUT_RULE : printf("PUT_RULE: %ld, %ld\n", sget4(),
!                                                                 sget4());
                                  break;
                  case NOP      : printf("NOP\n");  break;
                  case BOP      : bop();            break;
--- 121,129 -----
                  case PUT4     : printf("PUT%d:     %ld\n", opcode - PUT1 + 1,
                                                         num(opcode - PUT1 + 1));
                                  break;
!                 case PUT_RULE : printf("PUT_RULE: height: %ld\n", sget4());
!                                 printf("%06ld: ", pc);
!                                 printf("          length: %ld\n", sget4());
                                  break;
                  case NOP      : printf("NOP\n");  break;
                  case BOP      : bop();            break;
**************
*** 198,207
  {
      int i;
  
!     printf("BOP       page number      : %ld\n", sget4());
!     for (i=0; i < 3; i++) {
!         printf("%06ld: ", pc - 1);
!         printf("          %6ld  %6ld  %6ld\n", sget4(), sget4(), sget4()); 
      }
      printf("%06ld: ", pc - 1);
      printf("          prev page offset : %06ld\n", sget4()); 
--- 200,210 -----
  {
      int i;
  
!     printf("BOP       page number      : %ld", sget4());
!     for (i=0; i < 9; i++) {
!         if (i % 3 == 0)
!             printf("\n%06ld:         ", pc);
!         printf("  %6ld", sget4()); 
      }
      printf("\n%06ld: ", pc);
      printf("          prev page offset : %06ld\n", sget4()); 
**************
*** 203,209
          printf("%06ld: ", pc - 1);
          printf("          %6ld  %6ld  %6ld\n", sget4(), sget4(), sget4()); 
      }
!     printf("%06ld: ", pc - 1);
      printf("          prev page offset : %06ld\n", sget4()); 
  
  } /* bop */
--- 206,212 -----
              printf("\n%06ld:         ", pc);
          printf("  %6ld", sget4()); 
      }
!     printf("\n%06ld: ", pc);
      printf("          prev page offset : %06ld\n", sget4()); 
  
  } /* bop */
**************
*** 215,221
  {
  
      printf("POST      last page offset : %06ld\n", sget4());
!     printf("%06ld: ", pc - 1);
      printf("          numerator        : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          denominator      : %ld\n", get4());
--- 218,224 -----
  {
  
      printf("POST      last page offset : %06ld\n", sget4());
!     printf("%06ld: ", pc);
      printf("          numerator        : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          denominator      : %ld\n", get4());
**************
*** 217,223
      printf("POST      last page offset : %06ld\n", sget4());
      printf("%06ld: ", pc - 1);
      printf("          numerator        : %ld\n", get4());
!     printf("%06ld: ", pc - 1);
      printf("          denominator      : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          magnification    : %ld\n", get4());
--- 220,226 -----
      printf("POST      last page offset : %06ld\n", sget4());
      printf("%06ld: ", pc);
      printf("          numerator        : %ld\n", get4());
!     printf("%06ld: ", pc);
      printf("          denominator      : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          magnification    : %ld\n", get4());
**************
*** 219,225
      printf("          numerator        : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          denominator      : %ld\n", get4());
!     printf("%06ld: ", pc - 1);
      printf("          magnification    : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          max page height  : %ld\n", get4());
--- 222,228 -----
      printf("          numerator        : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          denominator      : %ld\n", get4());
!     printf("%06ld: ", pc);
      printf("          magnification    : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          max page height  : %ld\n", get4());
**************
*** 221,227
      printf("          denominator      : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          magnification    : %ld\n", get4());
!     printf("%06ld: ", pc - 1);
      printf("          max page height  : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          max page width   : %ld\n", get4());
--- 224,230 -----
      printf("          denominator      : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          magnification    : %ld\n", get4());
!     printf("%06ld: ", pc);
      printf("          max page height  : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          max page width   : %ld\n", get4());
**************
*** 223,229
      printf("          magnification    : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          max page height  : %ld\n", get4());
!     printf("%06ld: ", pc - 1);
      printf("          max page width   : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          stack size needed: %d\n", (int) get2());
--- 226,232 -----
      printf("          magnification    : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          max page height  : %ld\n", get4());
!     printf("%06ld: ", pc);
      printf("          max page width   : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          stack size needed: %d\n", (int) get2());
**************
*** 225,231
      printf("          max page height  : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          max page width   : %ld\n", get4());
!     printf("%06ld: ", pc - 1);
      printf("          stack size needed: %d\n", (int) get2());
      printf("%06ld: ", pc - 1);
      printf("          number of pages  : %d\n", (int) get2());
--- 228,234 -----
      printf("          max page height  : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          max page width   : %ld\n", get4());
!     printf("%06ld: ", pc);
      printf("          stack size needed: %d\n", (int) get2());
      printf("%06ld: ", pc);
      printf("          number of pages  : %d\n", (int) get2());
**************
*** 227,233
      printf("          max page width   : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          stack size needed: %d\n", (int) get2());
!     printf("%06ld: ", pc - 1);
      printf("          number of pages  : %d\n", (int) get2());
  
  } /* postamble */
--- 230,236 -----
      printf("          max page width   : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          stack size needed: %d\n", (int) get2());
!     printf("%06ld: ", pc);
      printf("          number of pages  : %d\n", (int) get2());
  
  } /* postamble */
**************
*** 237,243
      register int i;
  
      printf("PRE       version          : %d\n", (int) get1());
!     printf("%06ld: ", pc - 1);
      printf("          numerator        : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          denominator      : %ld\n", get4());
--- 240,246 -----
      register int i;
  
      printf("PRE       version          : %d\n", (int) get1());
!     printf("%06ld: ", pc);
      printf("          numerator        : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          denominator      : %ld\n", get4());
**************
*** 239,245
      printf("PRE       version          : %d\n", (int) get1());
      printf("%06ld: ", pc - 1);
      printf("          numerator        : %ld\n", get4());
!     printf("%06ld: ", pc - 1);
      printf("          denominator      : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          magnification    : %ld\n", get4());
--- 242,248 -----
      printf("PRE       version          : %d\n", (int) get1());
      printf("%06ld: ", pc);
      printf("          numerator        : %ld\n", get4());
!     printf("%06ld: ", pc);
      printf("          denominator      : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          magnification    : %ld\n", get4());
**************
*** 241,247
      printf("          numerator        : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          denominator      : %ld\n", get4());
!     printf("%06ld: ", pc - 1);
      printf("          magnification    : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      i = (int) get1();
--- 244,250 -----
      printf("          numerator        : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          denominator      : %ld\n", get4());
!     printf("%06ld: ", pc);
      printf("          magnification    : %ld\n", get4());
      printf("%06ld: ", pc);
      i = (int) get1();
**************
*** 243,249
      printf("          denominator      : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          magnification    : %ld\n", get4());
!     printf("%06ld: ", pc - 1);
      i = (int) get1();
      printf("          job name (%03d)   :", i);
      while (i-- > 0)
--- 246,252 -----
      printf("          denominator      : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          magnification    : %ld\n", get4());
!     printf("%06ld: ", pc);
      i = (int) get1();
      printf("          job name (%3d)   :", i);
      while (i-- > 0)
**************
*** 245,251
      printf("          magnification    : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      i = (int) get1();
!     printf("          job name (%03d)   :", i);
      while (i-- > 0)
          putchar((int) get1());
      putchar('\n');
--- 248,254 -----
      printf("          magnification    : %ld\n", get4());
      printf("%06ld: ", pc);
      i = (int) get1();
!     printf("          job name (%3d)   :", i);
      while (i-- > 0)
          putchar((int) get1());
      putchar('\n');
**************
*** 258,264
      register int i;
   
      printf("POSTPOST  postamble offset : %06ld\n", get4());
!     printf("%06ld: ", pc - 1);
      printf("          version          : %d\n", (int) get1());
      while ((i = (int) get1()) == TRAILER) {
          printf("%06d: ", pc - 1);
--- 261,267 -----
      register int i;
   
      printf("POSTPOST  postamble offset : %06ld\n", get4());
!     printf("%06ld: ", pc);
      printf("          version          : %d\n", (int) get1());
      while ((i = (int) get1()) == TRAILER) {
          printf("%06d: ", pc - 1);
**************
*** 282,288
  
      len = num(x);
      printf("XXX%d:     %ld bytes\n", x, len);
!     printf("%06ld: ", pc - 1);
      for (i = 0; i < len; i++)
          putchar((int) get1());
      putchar('\n');
--- 285,291 -----
  
      len = num(x);
      printf("XXX%d:     %ld bytes\n", x, len);
!     printf("%06ld: ", pc);
      for (i = 0; i < len; i++)
          putchar((int) get1());
      putchar('\n');
**************
*** 297,303
      register int i;
  
      printf("FNT_DEF%d: %ld\n", x, num(x));
!     printf("%06ld: ", pc - 1);
      printf("          checksum         : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          scale            : %ld\n", get4());
--- 300,306 -----
      register int i;
  
      printf("FNT_DEF%d: %ld\n", x, num(x));
!     printf("%06ld: ", pc);
      printf("          checksum         : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          scale            : %ld\n", get4());
**************
*** 299,305
      printf("FNT_DEF%d: %ld\n", x, num(x));
      printf("%06ld: ", pc - 1);
      printf("          checksum         : %ld\n", get4());
!     printf("%06ld: ", pc - 1);
      printf("          scale            : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          design           : %ld\n", get4());
--- 302,308 -----
      printf("FNT_DEF%d: %ld\n", x, num(x));
      printf("%06ld: ", pc);
      printf("          checksum         : %ld\n", get4());
!     printf("%06ld: ", pc);
      printf("          scale            : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          design           : %ld\n", get4());
**************
*** 301,307
      printf("          checksum         : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          scale            : %ld\n", get4());
!     printf("%06ld: ", pc - 1);
      printf("          design           : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          name             : ");
--- 304,310 -----
      printf("          checksum         : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          scale            : %ld\n", get4());
!     printf("%06ld: ", pc);
      printf("          design           : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          name             : ");
**************
*** 303,309
      printf("          scale            : %ld\n", get4());
      printf("%06ld: ", pc - 1);
      printf("          design           : %ld\n", get4());
!     printf("%06ld: ", pc - 1);
      printf("          name             : ");
      for (i = (int) get1() + (int) get1(); i > 0; i--)
          putchar((int) get1());
--- 306,312 -----
      printf("          scale            : %ld\n", get4());
      printf("%06ld: ", pc);
      printf("          design           : %ld\n", get4());
!     printf("%06ld: ", pc);
      printf("          name             : ");
      for (i = (int) get1() + (int) get1(); i > 0; i--)
          putchar((int) get1());
*** ORG/dvi2tty.c
--- dvi2tty.c
**************
*** 1,4
  /******************************************************************************
   * Marcel Mol: 1989-01-19  (UUCP: duteca!marcel)
   *               Changed in option handling, no change
   *               in user interface (only the undocumented 
--- 1,9 -----
  /******************************************************************************
+  * Marcel Mol: 1989-02-14  (UUCP: duteca!marcel)
+  *               Fixed check for .dvi extension.
+  *               Allowed more ligatures.
+  *               Fixed side effect bugs (2 gets as function arguments).
+  *               Version 3.2.
   * Marcel Mol: 1989-01-19  (UUCP: duteca!marcel)
   *               Changed in option handling, no change
   *               in user interface (only the undocumented 
**************
*** 118,124
  #define onepp  8                /* only one page list allowed        */
  #define noarg  9                /* argument expected                 */
  
! char *dvi2tty = "@(#) dvi2tty.c  3.1 23/01/89 M.J.E. Mol (c) 1989";
  
  /*---------------------------------------------------------------------------*/
  
--- 123,129 -----
  #define onepp  8                /* only one page list allowed        */
  #define noarg  9                /* argument expected                 */
  
! char *dvi2tty = "@(#) dvi2tty.c  3.2 14/02/89 M.J.E. Mol (c) 1989";
  
  /*---------------------------------------------------------------------------*/
  
**************
*** 455,461
          usage(ign);
      strcpy(DVIfilename, str);
      if (!((i >= 5) && (str[i-1] == 'i') && (str[i-2] == 'v') &&
!           (str[i-3] = 'd') && (str[i-4] = '.'))) {
          strcat(DVIfilename, ".dvi");
      }
  
--- 460,466 -----
          usage(ign);
      strcpy(DVIfilename, str);
      if (!((i >= 5) && (str[i-1] == 'i') && (str[i-2] == 'v') &&
!           (str[i-3] == 'd') && (str[i-4] == '.'))) {
          strcat(DVIfilename, ".dvi");
      }
  
*** ORG/dvistuff.c
--- dvistuff.c
**************
*** 1,5
  
- 
  #include "dvi2tty.h"
  #include <sys/types.h>
  #include <sys/stat.h>
--- 1,4 -----
  
  #include "dvi2tty.h"
  #include <sys/types.h>
  #include <sys/stat.h>
**************
*** 39,45
  #define sget3()         snum(3)
  #define sget4()         snum(4)
  
! char *dvistuff = "@(#) dvistuff.c  3.1 23/01/89 M.J.E. Mol (c) 1989";
  
  /*---------------------------------------------------------------------------*/
  
--- 38,44 -----
  #define sget3()         snum(3)
  #define sget4()         snum(4)
  
! char *dvistuff = "@(#) dvistuff.c  3.2 14/02/89 M.J.E. Mol (c) 1989";
  
  /*---------------------------------------------------------------------------*/
  
**************
*** 293,299
                  case SET2     : setchar(get2()); break;
                  case SET3     : setchar(get3()); break;
                  case SET4     : setchar(get4()); break;
!                 case SET_RULE : rule(MOVE, sget4(), sget4()); break;
                  case PUT1     : putcharacter(get1()); break;
                  case PUT2     : putcharacter(get2()); break;
                  case PUT3     : putcharacter(get3()); break;
--- 292,300 -----
                  case SET2     : setchar(get2()); break;
                  case SET3     : setchar(get3()); break;
                  case SET4     : setchar(get4()); break;
!                 case SET_RULE : { long height = sget4();
!                                   rule(MOVE, sget4(), height); break;
!                                 }
                  case PUT1     : putcharacter(get1()); break;
                  case PUT2     : putcharacter(get2()); break;
                  case PUT3     : putcharacter(get3()); break;
**************
*** 298,304
                  case PUT2     : putcharacter(get2()); break;
                  case PUT3     : putcharacter(get3()); break;
                  case PUT4     : putcharacter(get4()); break;
!                 case PUT_RULE : rule(STAY, sget4(), sget4()); break;
                  case NOP      : break;  /* no-op */
                  case BOP      : errorexit(bdbop); break;
  /*              case EOP      : break;  strange place to have EOP */
--- 299,307 -----
                  case PUT2     : putcharacter(get2()); break;
                  case PUT3     : putcharacter(get3()); break;
                  case PUT4     : putcharacter(get4()); break;
!                 case PUT_RULE : { long height = sget4();
!                                   rule(STAY, sget4(), height); break;
!                                 }
                  case NOP      : break;  /* no-op */
                  case BOP      : errorexit(bdbop); break;
  /*              case EOP      : break;  strange place to have EOP */
**************
*** 746,751
                      else
                          ch = 'O';
                      break;
  #if 0
          case 92  :  ch = '"'; break;                /* beginning qoute  */
          case 123 :  ch = '-'; break;
--- 749,760 -----
                      else
                          ch = 'O';
                      break;
+         case 92  :  ch = '"'; break;  /* \ from `` */
+         case 123 :  ch = '-'; break;  /* { from -- */
+         case 124 :  ch = '_'; break;  /* | from --- */
+         case 125 :  ch = '"'; break;  /* } from \H */
+         case 126 :  ch = '"'; break;  /* ~ from \~ */
+         case 127 :  ch = '"'; break;  /* DEL from \" */
  #if 0
          case 18  :  ch = '`'; break   /* from \` */
          case 19  :  ch = ''''; break  /* from \' */
**************
*** 747,757
                          ch = 'O';
                      break;
  #if 0
!         case 92  :  ch = '"'; break;                /* beginning qoute  */
!         case 123 :  ch = '-'; break;
!         case 124 :  ch = '_'; break;
!         case 125 :  ch = '"'; break;
!         case 126 :  ch = '"'; break;
  #endif
      }
  #if 0
--- 756,769 -----
          case 126 :  ch = '"'; break;  /* ~ from \~ */
          case 127 :  ch = '"'; break;  /* DEL from \" */
  #if 0
!         case 18  :  ch = '`'; break   /* from \` */
!         case 19  :  ch = ''''; break  /* from \' */
!         case 20  :  ch = '~'; break   /* from \v */
!         case 21  :  ch = '~'; break   /* from \u */
!         case 22  :  ch = '~'; break   /* from \= */
!         case 24  :  ch = ','; break   /* from \c */
!         case 94  :  ch = '^'; break   /* ^ from \^ */
!         case 95  :  ch = '`'; break   /* _ from \. */
  #endif
      }
  #if 0
-- 
#########################################
# Marcel J.E. Mol                       # They hate you if your're clever
# Delft, University of Technology       # And they despise the fool
# The Netherlands                       # Till you're so fucking crazy
# UUCP: marcel@duteca.UUCP              # You can't follow the rules.
#       duteca!marcel                  	#
#########################################			 - Lennon