home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols200 / vol228 / modes.c < prev    next >
Encoding:
Text File  |  1986-02-10  |  3.0 KB  |  223 lines

  1.  
  2.  
  3. /*
  4. **   modes.c
  5. **
  6. **       public domain use only   Mark Ellington   1984
  7. **
  8. **  This program provides easy menu selection of some options
  9. **  of the Epson RX-80 and compatible printers.  
  10. **
  11. */
  12.  
  13.  
  14.  
  15. /* printer modes */
  16.  
  17.  
  18. main()
  19. {
  20.     char s[3];
  21.         int n;
  22.  
  23.     putchar(0x1a);
  24.  
  25.     puts("Printer mode selection:\n\n");
  26.  
  27.     puts("0: Exit.\n");
  28.     
  29.     puts("1: Emphasized mode on.\n");
  30.  
  31.     puts("2: Emphasized mode off.\n");
  32.  
  33.     puts("3: Double-strike on.\n");
  34.  
  35.     puts("4: Double-strike off.\n");
  36.  
  37.     puts("5: Elite mode on.\n");
  38.  
  39.     puts("6: Elite mode off.\n");
  40.  
  41.     puts("7: Compressed mode on.\n");
  42.  
  43.     puts("8: Compressed mode off.\n");
  44.  
  45.     puts("9: Set tabs.\n");
  46.  
  47.     puts("10: Skip-over-perforation OFF.\n");
  48.  
  49.     puts("11: Graphics character set on.\n");
  50.  
  51.     puts("12: Graphics character set off.\n");
  52.  
  53.     puts("13: Reset.\n"); 
  54.  
  55.     n = 1;
  56.         while (n != 0) {
  57.         gets(s);
  58.         n = atoi(s); 
  59.         switch(n) {
  60.             case 1: newmode('E');
  61.                 break;    
  62.             case 2: newmode('F');
  63.                 break;    
  64.             case 3: newmode('G');
  65.                 break;
  66.             case 4: newmode('H');
  67.                 break;    
  68.             case 5: newmode('M');
  69.                 break;    
  70.             case 6: newmode('P');
  71.                 break;
  72.             case 7: nbr(15);
  73.                 break;
  74.             case 8: nbr(18);
  75.                 break;    
  76.             case 9: tabs();
  77.                 break;
  78.             case 10: newmode('O');
  79.                 break;
  80.             case 11:  
  81.                                    newmode('m');
  82.                 nbr(4);
  83.                 break;
  84.             case 12:  
  85.                                    newmode('m');
  86.                 nbr(0);
  87.                 break;
  88.             case 13: newmode(64);
  89.                 break;
  90.             default: break; 
  91.           }
  92.     }
  93. }
  94.  
  95.  
  96. /* single byte to printer */
  97.  
  98. nbr(n)
  99. char n;
  100. {
  101.     bdos(5,n);
  102. }
  103.  
  104.  
  105.  
  106. /* escape sequence to printer  "ESC byte" */
  107.  
  108. newmode(c)
  109. char c;        /* byte */
  110. {
  111.     bdos(5,27);    /* ESC */
  112.     bdos(5,c);    /* command char */
  113. }
  114.  
  115.  
  116.  
  117.  
  118. tabs()
  119. {
  120.     char n;
  121.     char s[4];
  122.  
  123.     puts("\nEnter number spaces per tab: ");
  124.     gets(s);
  125.     n = atoi(s);
  126.  
  127.     bdos(5,27);        /* ESC */
  128.     bdos(5,'e');        /* e */
  129.     bdos(5,'0');        /* 0 */
  130.     bdos(5,n);        /* n spaces */
  131.  
  132. }
  133.  
  134.  
  135.  
  136.  
  137.  
  138. /* get string of input into array */
  139.  
  140. gets(stri)
  141. char stri[80];
  142. char c;
  143. int i;
  144.  
  145.     while ((c = getchar()) != '\n') {
  146.         stri[i++] = c;
  147.     }    
  148.     stri[i] = '\0';
  149.  
  150.     return(stri[0]);    /* return 1st char */
  151. }
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158. /* convert byte string to integer */
  159.  
  160. atoi(s)  char s[8];  
  161. {
  162.     int i;
  163.     unsigned int n;
  164.  
  165.     n = 0;
  166.     for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
  167.         n = 10 * n + s[i] - '0';
  168.     return(n);
  169. }
  170.  
  171.  
  172.  
  173.  
  174. /* CP/M direct system call routine */
  175.  
  176. bdos(funct,value)    
  177. int funct, value;
  178. {
  179. funct;    /* pass C reg data */
  180. #asm
  181. ;
  182. ;  machine code CP/M system BDOS call 
  183. ;
  184. BDOS    EQU    0005H    ;BDOS entry
  185. ;
  186.     MOV    C,L
  187. ;
  188. #endasm
  189.  
  190. value;
  191. #asm
  192.     MOV    E,L
  193.     MOV    D,H
  194. ;
  195.     CALL    BDOS    ;CALL CP/M 
  196.     MOV    L,A
  197.     MVI    H,0    
  198.     RET    
  199. #endasm
  200. }
  201.  
  202.  
  203.  
  204.  
  205.  
  206. /* string to console */
  207.  
  208. puts(s)
  209. char *s;
  210. {
  211.  
  212.     while (*s) putchar(*s++);
  213.  
  214. }
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.