home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_100 / 183_01 / gem.c < prev    next >
C/C++ Source or Header  |  1979-12-31  |  8KB  |  369 lines

  1. /* #include <stdio.h>  ... included here */
  2. /* stdio.h */
  3.  
  4. /* a 'FILE' is simply an integer is this implementation */
  5. typedef int  FILE;
  6.  
  7. #define stdin    0
  8. #define stdout    1
  9. #define stderr    2
  10.  
  11. #define NULL    0
  12. #define TRUE    1
  13. #define FALSE    0
  14. #define EOF    (-1)
  15. #define ERR    (-1)
  16. #define ERROR    (-1)
  17.  
  18. /* Control Key Translations */
  19. #define UP_CHAR 30
  20. #define DOWN_CHAR 31
  21. #define LEFT_CHAR 29
  22. #define RIGHT_CHAR 28
  23. #define HOME_CHAR 200
  24. #define END_CHAR 201
  25. #define PAGEUP_CHAR 202
  26. #define PAGEDOWN_CHAR 203
  27. #define CHOME_CHAR 204        /* ^HOME */
  28. #define CEND_CHAR 205        /* ^END  */
  29. #define INS_CHAR 206
  30. #define DEL_CHAR 207
  31. #define CLEFT_CHAR 208        /* ^LEFT  */
  32. #define CRIGHT_CHAR 209     /* ^RIGHT */
  33.  
  34. /* Function Keys */
  35. #define M1 210
  36. #define M2 211
  37. #define M3 212
  38. #define M4 213
  39. #define M5 214
  40. #define M6 215
  41. #define M7 216
  42. #define M8 217
  43. #define M9 218
  44. #define M10 219
  45.  
  46. /* Screen Attributes */
  47. #define R_VIDEO 0x70
  48. #define BLINK    0x80
  49. #define LIGHT    0x08
  50. #define NRML    0x07
  51. #define F_BLK    0x00
  52. #define F_BLU    0x01
  53. #define F_GRN    0x02
  54. #define F_CYA    0x03
  55. #define F_RED    0x04
  56. #define F_MAG    0x05
  57. #define F_BRN    0x06
  58. #define B_BLK    0x00
  59. #define B_BLU    0x10
  60. #define B_GRN    0x20
  61. #define B_CYA    0x30
  62. #define B_RED    0x40
  63. #define B_MAG    0x50
  64. #define B_BRN    0x60
  65.  
  66. /* MS-DOS 'INT 21H' Functions */
  67. #define AUXI_FUNC  3         /* Auxiliary Input     */
  68. #define AUXO_FUNC  4         /* Auxiliary Output    */
  69. #define PRTR_FUNC  5         /* Printer Output        */
  70. #define SCH1_FUNC 17         /* Search First        */
  71. #define SCHN_FUNC 18         /* Search Next        */
  72. #define CURD_FUNC 24         /* Current Disk        */
  73. #define ATBL_FUNC 26         /* Allocation Tbl. Addr.    */
  74. #define SVEC_FUNC 37         /* Set Vector        */
  75. #define GDAT_FUNC 42         /* Get Date        */
  76. #define SDAT_FUNC 43         /* Set Date        */
  77. #define GTIM_FUNC 44         /* Get Time        */
  78. #define STIM_FUNC 45         /* Set Time        */
  79.  
  80. /* End of stdio.h */
  81.  
  82. #define BANNER_1  "Printer ATTRibutes"
  83. #define BANNER_1A " gemini-10X "
  84. #define BANNER_1B "            "
  85. #define AUTHOR      "by Robert J. Molloy"
  86.  
  87. /* right arrow character */
  88. #define OPTION_ON   "\020"
  89. /* space */
  90. #define OPTION_OFF  "\040"
  91.  
  92. /* Note: '\377' (0xFF) converted to 0x00 in print
  93.      routine. */
  94. #define STR_INIT    "\021\033@"
  95. #define STR_10CPI    "\033B\001"
  96. #define STR_12CPI    "\033B\002"
  97. #define STR_17CPI    "\033B\003"
  98. #define STR_DBLW_ON    "\033W\001"
  99. #define STR_CMP_ON    "\017"
  100. #define STR_SUP_ON    "\033S\377"
  101. #define STR_SUB_ON    "\033S\001"
  102. #define STR_ITA_ON    "\033\064"
  103. #define STR_DBLS_ON    "\033G"
  104. #define STR_EMP_ON    "\033E"
  105. #define STR_LF16    "\033\062"
  106. #define STR_LF18    "\033\060"
  107. #define STR_LF772    "\033\061"
  108.  
  109. main()
  110. {
  111. char c;
  112. unsigned opt_cpi10   =     FALSE;
  113. unsigned opt_cpi12   =     FALSE;
  114. unsigned opt_cpi17   =     FALSE;
  115. unsigned opt_dblw    =     FALSE;
  116. unsigned opt_cmp     =     FALSE;
  117. unsigned opt_sup     =     FALSE;
  118. unsigned opt_sub     =     FALSE;
  119. unsigned opt_ita     =     FALSE;
  120. unsigned opt_dbls    =     FALSE;
  121. unsigned opt_emp     =     FALSE;
  122. unsigned opt_lf16    =     FALSE;
  123. unsigned opt_lf18    =     FALSE;
  124. unsigned opt_lf772   =     FALSE;
  125.  
  126.     scr_clr();
  127.     scr_setmode(1);    /* 40X25 Color */
  128.     scr_cursoff();
  129.  
  130.     scr_puts(1,(40-strlen(BANNER_1))/2,(LIGHT|NRML),BANNER_1);
  131.     scr_puts(6,(40-strlen(AUTHOR))/2,(LIGHT|NRML),AUTHOR);
  132.     scr_puts(2,(40-strlen(BANNER_1B))/2,(NRML|B_RED|LIGHT),BANNER_1B);
  133.     scr_puts(3,(40-strlen(BANNER_1A))/2,(NRML|B_RED|LIGHT),BANNER_1A);
  134.     scr_puts(4,(40-strlen(BANNER_1B))/2,(NRML|B_RED|LIGHT),BANNER_1B);
  135.     scr_puts(8,2,NRML,"[A] 10 CPI");
  136.     scr_puts(10,2,NRML,"[B] 12 CPI");
  137.     scr_puts(12,2,NRML,"[C] 17 CPI");
  138.     scr_puts(14,2,NRML,"[D] Double-wide");
  139.     scr_puts(16,2,NRML,"[E] Compress");
  140.     scr_puts(18,2,NRML,"[F] Superscript");
  141.     scr_puts(20,2,NRML,"[G] Subscript");
  142.     scr_puts(8,22,NRML,"[H] Italics");
  143.     scr_puts(10,22,NRML,"[I] Double Strike");
  144.     scr_puts(12,22,NRML,"[J] Emphasize");
  145.     scr_puts(14,22,NRML,"[K] LF=1/6\"");
  146.     scr_puts(16,22,NRML,"[L] LF=1/8\"");
  147.     scr_puts(18,22,NRML,"[M] LF=7/72\"");
  148.  
  149.     opt_query();
  150.     while ((c=toupper(ci())) != 'X')
  151.     switch (c)  {
  152.     case 'A':
  153.         if (opt_cpi10=~(opt_cpi10))
  154.         opt_onturn(8,1);
  155.         else
  156.         opt_offturn(8,1);
  157.         opt_cpi12=FALSE;
  158.         opt_offturn(10,1);
  159.         opt_cpi17=FALSE;
  160.         opt_offturn(12,1);
  161.         opt_query();
  162.         break;
  163.     case 'B':
  164.         if (opt_cpi12=~(opt_cpi12))
  165.         opt_onturn(10,1);
  166.         else
  167.         opt_offturn(10,1);
  168.         opt_cpi10=FALSE;
  169.         opt_offturn(8,1);
  170.         opt_cpi17=FALSE;
  171.         opt_offturn(12,1);
  172.         opt_query();
  173.         break;
  174.     case 'C':
  175.         if (opt_cpi17=~(opt_cpi17))
  176.         opt_onturn(12,1);
  177.         else
  178.         opt_offturn(12,1);
  179.         opt_cpi12=FALSE;
  180.         opt_offturn(10,1);
  181.         opt_cpi10=FALSE;
  182.         opt_offturn(8,1);
  183.         opt_query();
  184.         break;
  185.     case 'D':
  186.         if (opt_dblw=~(opt_dblw))
  187.         opt_onturn(14,1);
  188.         else
  189.         opt_offturn(14,1);
  190.         opt_query();
  191.         break;
  192.     case 'E':
  193.         if (opt_cmp=~(opt_cmp))
  194.         opt_onturn(16,1);
  195.         else
  196.         opt_offturn(16,1);
  197.         opt_query();
  198.         break;
  199.     case 'F':
  200.         if (opt_sup=~(opt_sup))
  201.         opt_onturn(18,1);
  202.         else
  203.         opt_offturn(18,1);
  204.         opt_sub=FALSE;
  205.         opt_offturn(20,1);
  206.         opt_query();
  207.         break;
  208.     case 'G':
  209.         if (opt_sub=~(opt_sub))
  210.         opt_onturn(20,1);
  211.         else
  212.         opt_offturn(20,1);
  213.         opt_sup=FALSE;
  214.         opt_offturn(18,1);
  215.         opt_query();
  216.         break;
  217.     case 'H':
  218.         if (opt_ita=~(opt_ita))
  219.         opt_onturn(8,21);
  220.         else
  221.         opt_offturn(8,21);
  222.         opt_query();
  223.         break;
  224.     case 'I':
  225.         if (opt_dbls=~(opt_dbls))
  226.         opt_onturn(10,21);
  227.         else
  228.         opt_offturn(10,21);
  229.         opt_query();
  230.         break;
  231.     case 'J':
  232.         if (opt_emp=~(opt_emp))
  233.         opt_onturn(12,21);
  234.         else
  235.         opt_offturn(12,21);
  236.         opt_query();
  237.         break;
  238.     case 'K':
  239.         if (opt_lf16=~(opt_lf16))
  240.         opt_onturn(14,21);
  241.         else
  242.         opt_offturn(14,21);
  243.         opt_lf18=FALSE;
  244.         opt_offturn(16,21);
  245.         opt_lf772=FALSE;
  246.         opt_offturn(18,21);
  247.         opt_query();
  248.         break;
  249.     case 'L':
  250.         if (opt_lf18=~(opt_lf18))
  251.         opt_onturn(16,21);
  252.         else
  253.         opt_offturn(16,21);
  254.         opt_lf16=FALSE;
  255.         opt_offturn(14,21);
  256.         opt_lf772=FALSE;
  257.         opt_offturn(18,21);
  258.         opt_query();
  259.         break;
  260.     case 'M':
  261.         if (opt_lf772=~(opt_lf772))
  262.         opt_onturn(18,21);
  263.         else
  264.         opt_offturn(18,21);
  265.         opt_lf18=FALSE;
  266.         opt_offturn(16,21);
  267.         opt_lf16=FALSE;
  268.         opt_offturn(14,21);
  269.         opt_query();
  270.         break;
  271.     default:
  272.         break;
  273.     }
  274.     lprintf(STR_INIT);
  275.     if (opt_cpi12)
  276.     lprintf(STR_12CPI);
  277.     else if (opt_cpi17)
  278.     lprintf(STR_17CPI);
  279.     if (opt_dblw)
  280.     lprintf(STR_DBLW_ON);
  281.     if (opt_cmp)
  282.     lprintf(STR_CMP_ON);
  283.     if (opt_sup)
  284.     lprintf(STR_SUP_ON);
  285.     else if (opt_sub)
  286.     lprintf(STR_SUB_ON);
  287.     if (opt_ita)
  288.     lprintf(STR_ITA_ON);
  289.     if (opt_dbls)
  290.     lprintf(STR_DBLS_ON);
  291.     if (opt_emp)
  292.     lprintf(STR_EMP_ON);
  293.     if (opt_lf18)
  294.     lprintf(STR_LF18);
  295.     else if (opt_lf772)
  296.     lprintf(STR_LF772);
  297.     scr_setmode(3);    /* 80X25 Color */
  298. }
  299.  
  300. opt_query()
  301. {
  302.     scr_puts(24,10,F_GRN,"  (X to Exit)");
  303.     scr_puts(23,10,F_GRN,"Select Option: ");
  304.     scr_curson();
  305. }
  306.  
  307. opt_onturn(row,col)
  308. int row, col;
  309. {
  310.     scr_puts(row,col,(LIGHT|BLINK|F_BLU),OPTION_ON);
  311. }
  312.  
  313. opt_offturn(row,col)
  314. int row, col;
  315. {
  316.     scr_puts(row,col,NRML,OPTION_OFF);
  317. }
  318.  
  319. /*
  320.     LPRINTF     formatted output to the list device.
  321.             Usage:  lprintf(format,arg1,arg2,...)
  322.                 char *format;
  323. */
  324. lprintf(format)
  325. char *format;
  326. {
  327.     char txtlin[132];
  328.     _spr(txtlin,&format);
  329.     lputs(txtlin);
  330. }
  331.  
  332. /*
  333.     LPUTS        put a line to the list device.
  334.             Usage:  lputs(str)
  335.                 char *str;
  336. */
  337. lputs(str)
  338. char *str;
  339. {
  340.     char c;
  341.     while (c = *str++)    {
  342.     if (c == '\n') _os(PRTR_FUNC,'\r');
  343.     if (c == '\377') _os(PRTR_FUNC,'\000');
  344.     else _os(PRTR_FUNC,c);
  345.     }
  346. }
  347.  
  348. /*
  349.     SCR_PUTS    write string with attribute at location.
  350.             Usage:  scr_puts(row,col,attr,p)
  351.                 int row, col, attr;
  352.                 char *p;
  353. */
  354. scr_puts(row,col,attr,p)
  355. int row, col, attr;
  356. char *p;
  357. {
  358.     extern char scr_attr;
  359.     char c, save;
  360.  
  361.     save = scr_attr;
  362.     scr_attr = attr;
  363.     while (c=*p++)  {
  364.     scr_rowcol(row,col++);
  365.     scr_putch(c);
  366.     }
  367.     scr_attr = save;
  368. }
  369.