home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / filutl / tprint1.arc / TPRINT1.C next >
Text File  |  1985-11-14  |  7KB  |  221 lines

  1.  
  2. /****************************************************************
  3. *                                                                *
  4. *                        P R I N T                               *
  5. *                                                                *
  6. *                ASCII file transfer to PRN device.              *
  7. *                                                                *
  8. *        T. Jennings 6 Nov. 82                                   *
  9. *          created 23 Sept. 82                                   *
  10. *                                                                *
  11. *          revised 14 Nov.  85    Steve Ripley                   *
  12. *                                                                *
  13. ****************************************************************/
  14.  
  15. #include <stdio.h>
  16. #include <ctype.h>
  17.  
  18. #define  NUL     0x00
  19. #define  CR      0x0d
  20. #define  LF      0x0a
  21. #define  HT      0x09
  22. #define  FF      0x0c
  23. #define  DEL     0x7f
  24.  
  25. #define  PAGELEN 66
  26. #define  BOTTOM  58
  27.  
  28. struct srv {int ax,bx,cx,dx,si,di,ds,es;};
  29.  
  30. struct srv reg;
  31.  
  32. char *months[] = {
  33.                "Januaary ",
  34.                "February ",
  35.                "March ",
  36.                "April ",
  37.                "May ",
  38.                "June ",
  39.                "July ",
  40.                "August ",
  41.                "September ",
  42.                "October ",
  43.                "November ",
  44.                "December "
  45.                };
  46.  
  47. FILE *printfile, *fopen();
  48. FILE *printer;
  49. char cin, temp[5];
  50. int line,column;
  51. int tabwidth;
  52. int formfeed;
  53. int number,lineno;
  54. int brackets,brkt_level;
  55. int pageno;
  56. int printable;
  57. int titles;
  58. int margin;
  59. int i;
  60. char filename[12];
  61. char  *date,
  62.       hour,minute,second;
  63.  
  64. main(argc,argv)
  65. int argc;
  66. char **argv;
  67. {
  68.       getdate();
  69.       gettime();
  70.         fprintf(stderr,"\nFile Print Utility 6 Nov. 82\n");
  71.         number =0;               /* dont number lines */
  72.         titles= 0;               /* no top of page title */
  73.         margin= 0;               /* no left margin tab */
  74.         brackets =0;             /* dont count brackets */
  75.         brkt_level =0;
  76.         column =0;
  77.         line =0; 
  78.         tabwidth =8;
  79.         formfeed =1;
  80.         lineno =0;               /* current line number, */
  81.         pageno =1;
  82.         printable =0;
  83.  
  84.         if (--argc) {
  85.                 if ((printfile=fopen(*++argv,"r")) ==NULL) {
  86.                         fprintf(stderr,"PRINT: Can't find file '%s'.\n",*argv);
  87.                         exit();
  88.                 }
  89.                 strcpy(filename,*argv);          /* save filename for title */
  90.                 upper(filename);
  91.  
  92.                 if ((printer= fopen("PRN","w")) ==NULL) {
  93.                         fprintf(stderr,"PRINT: Can't open LST device\n");
  94.                         exit();
  95.                 }
  96.                 while (--argc) {         /* look for options */
  97.                         cin= **++argv;
  98.                         switch(tolower(cin)) {
  99.                         case 't':
  100.                                 fprintf(stderr,"\t-Page headers\n");
  101.                                 titles= 1;
  102.                                 break;
  103.                         case 'n':                /* line numbers */
  104.                                 fprintf(stderr,"\t-Line numbers\n");
  105.                                 number =1;
  106.                                 break;
  107.                         case 'c':                /* C source */
  108.                                 fprintf(stderr,"\t-'C' source\n");
  109.                                 brackets =1;
  110.                                 break;
  111.                         case 'm':
  112.                                 fprintf(stderr,"\t-Left margin\n");
  113.                                 margin= 1;
  114.                                 break;
  115.                         default:
  116.                                 fprintf(stderr,"Illegal option: '%s'\n",*argv);
  117.                                 break;
  118.                         }
  119.                 }
  120.                 title();
  121.                 printchar(LF);
  122.                 while ((i=fgetc(printfile)) !=EOF) {
  123.                         cin=i;                     /* type conversion, */
  124.                         printchar(cin);            /* print character, */
  125.                         if (cin =='{')             /* count bracket levels, */
  126.                                 ++brkt_level;
  127.                         if (cin == '}') {          /* if closing bracket, and */
  128.                                 if ((--brkt_level ==0) && brackets) {
  129.                                         printchar(FF); /* top level, formfeed */
  130.                                 }
  131.                         }
  132.                 }
  133.                 fputc(LF,printer);
  134.                 fputc(FF,printer);               /* do a formfeed, */
  135.                 fprintf(printer,"\033J");        /* motor off, */
  136.                 exit();
  137.         }
  138.         fprintf(stderr,"\nYou must specify a file, followed by any options");
  139.         fprintf(stderr,"\n\tT\tTop of page headers");
  140.         fprintf(stderr,"\n\tN\tLine numbers");
  141.         fprintf(stderr,"\n\tC\tC source");
  142.         fprintf(stderr,"\n\tM\tLeft margin");
  143.         fprintf(stderr,"\nExample:  PRINT <filename> N C T M");
  144.         exit();
  145. }
  146. /* Print character <C> to the printer. */
  147.  
  148. printchar(c)
  149. char c;
  150. {
  151.         switch (c) {
  152.         case LF:
  153.                 ++lineno;
  154.                 fputc(CR,printer);
  155.                 fputc(c,printer);                /* then line feed, */
  156.                 if (++line >= BOTTOM)            /* if bottom margin, */
  157.                         printchar(FF);           /* formfeed, */
  158.                 if (number) 
  159.                         fprintf(printer,"%3d: \t",lineno);
  160.                 if (margin)
  161.                         printchar(HT);           /* left margins */
  162.                 break;
  163.         case FF:
  164.                 fputc(LF,printer);
  165.                 fputc(c,printer);
  166.                 line =0; ++pageno;
  167.                 title();
  168.                 break;
  169.         default:
  170.                 fputc(c,printer);
  171.                 break;
  172.         }
  173.         return;
  174. }
  175. /* If the title flag is set, type the title across the top of the page. */
  176.  
  177. title() {
  178.    if (titles) {
  179.        fprintf(printer,
  180.            "\015Date: %s   Time: %02d:%02d:%02d   File: %-12s   %sPage %d",
  181.            date,hour,minute,second,filename," ",pageno);
  182.        fprintf(printer,
  183.            "\015Date: %s   Time: %02d:%02d:%02d   File: %-12s   %sPage %d\n",
  184.            date,hour,minute,second,filename," ",pageno);
  185.       ++line;
  186.    }
  187.    else
  188.       if (pageno == 1) {
  189.        fprintf(printer,"\015Date: %s   Time: %02d:%02d:%02d   File: %-12s",
  190.            date,hour,minute,second,filename);
  191.        fprintf(printer,"\015Date: %s   Time: %02d:%02d:%02d   File: %-12s\n",
  192.            date,hour,minute,second,filename);
  193.        ++line;
  194.       }
  195.    return;
  196. }
  197.  
  198. getdate()
  199. {
  200.    date = calloc(1,25);
  201.    reg.ax = 0x2a << 8;
  202.    sysint21(®,®);
  203.    strcpy(date,months[(reg.dx >> 8) - 1]);
  204.    itoa(reg.dx & 0xff,temp);
  205.    strcat(date,temp);
  206.    strcat(date,", ");
  207.    itoa(reg.cx,temp);
  208.    strcat(date,temp);
  209.    return;
  210. }
  211. gettime()
  212. {
  213.    reg.ax = 0x2c << 8;
  214.    sysint21(®,®);
  215.    hour = reg.cx >> 8;
  216.    minute = reg.cx & 0xff;
  217.    second = reg.dx >> 8;
  218.    return;
  219. }
  220. 
  221.