home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume8 / kurses / kurses.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-02-08  |  8.9 KB  |  350 lines

  1.  
  2.  
  3. /*
  4.  * File name:        x %I%
  5.  * By:                  Marc Ries
  6.  * Latest change:    Thursday, November 13, 1986
  7.  * Purpose of this file:
  8.  *     Screen manipulations via a shell 
  9.  * 
  10.  */
  11. #include <curses.h>
  12. #ifndef BSD
  13. #include <term.h>
  14. #endif BSD
  15.  
  16. void exit();
  17. char *tparm();
  18.  
  19. outc (c)
  20. int  c;
  21. {
  22.     (void) putchar(c);
  23. }
  24.  
  25. main(argc, argv)
  26. int argc;
  27. char *argv[];
  28. {
  29.     char c1, c2, *s;
  30.     char *i_xy;
  31.     int x, y, errret;
  32.  
  33.     if (--argc <= 0) {
  34.         (void) fprintf(stderr,"Usage: kurses -xx ...\n");
  35.         exit(1);
  36.     }
  37. #ifndef BSD
  38.     if ((setupterm(0,1,&errret)) == -1) {
  39.         (void) fprintf(stderr, "Unknown terminfo terminal type!\n");
  40.         exit(1);
  41.     }
  42. #else
  43.     initscr();
  44. #endif BSD
  45.     while (--argc >= 0) {
  46.         ++argv;
  47.         if ((*argv)[0] == '-') {
  48.         c1 = (*argv)[1];
  49.         if ((c1 >= 'A') && (c1 <= 'Z')) c1 = c1+'a'-'A';
  50.         c2 = (*argv)[2];
  51.         if ((c2 >= 'A') && (c2 <= 'Z')) c2 = c2+'a'-'A';
  52.  
  53.         if ((c1 == 'x') && (c2 == 'x')) {
  54.             (void) printf("Legal options are:\n");
  55.             (void) printf("al,bc,bt,cd,ce,cl,cm,dc,dl,dm,do,ed,ei,ho\n");
  56.             (void) printf("ic,im,ip,ll,ma,nd,pc,se,sf,so,sr,ta,te,ti\n");
  57.             (void) printf("uc,ue,ul,us,vb,ve,vs\n");
  58.             (void) printf("Numeric valued capabilities:\n");
  59.             (void) printf("li and co\n");
  60.         }
  61.         else if ((c1 == 'a') && (c2 == 'l')) {
  62. #ifndef BSD
  63.                         tputs(key_il, 1, outc);
  64. #else
  65.                         tputs(AL, 1, outc);
  66. #endif BSD
  67.                 }
  68. #ifndef BSD
  69.         else if ((c1 == 'b') && (c2 == 'c')) {
  70.             (void) printf("%s",cursor_left); 
  71.         }
  72.         else if ((c1 == 'b') && (c2 == 't')) {
  73.                         tputs(back_tab, 1, outc);
  74.         }
  75. #else
  76.         else if ((c1 == 'b') && (c2 == 'c')) (void) printf("%s",BC);
  77.         else if ((c1 == 'b') && (c2 == 't')) (void) printf("%s",BT);
  78. #endif BSD
  79.         else if ((c1 == 'c') && (c2 == 'd')) {
  80. #ifndef BSD
  81.                         tputs(clr_eos, 1, outc);
  82. #else
  83.                         tputs(CD, 1, outc);
  84. #endif BSD
  85.                 }
  86.         else if ((c1 == 'c') && (c2 == 'e')) {
  87. #ifndef BSD
  88.                         putp(clr_eol);
  89. #else
  90.                         tputs(CE, 1, outc);
  91. #endif BSD
  92.                 }
  93.         else if ((c1 == 'c') && (c2 == 'l')) {
  94. #ifndef BSD
  95.                         putp(clear_screen);
  96. #else
  97.                         tputs(CL, 1, outc);
  98. #endif BSD
  99.                 }
  100.         else if ((c1 == 'c') && (c2 == 'm')) {
  101.             if ((argc -= 2) < 0) {
  102.                 (void) fprintf(stderr,"Usage: kurses -cm X Y\n");
  103.                 exit(1);
  104.             }
  105.             x = (char)atoi(*++argv);
  106.             y = (char)atoi(*++argv);
  107. #ifndef BSD
  108.              i_xy = (tparm(cursor_address,y,x));
  109.              tputs(i_xy,0,outc);
  110. #else
  111.             movecursor(x,y);
  112. #endif BSD
  113.         }
  114. #ifndef BSD
  115.         else if ((c1 == 'c') && (c2 == 'o')) (void) printf("%d", columns);
  116. #else
  117.         else if ((c1 == 'c') && (c2 == 'o')) (void) printf("%d", COLS);
  118. #endif BSD
  119.         else if ((c1 == 'd') && (c2 == 'c')) {
  120. #ifndef BSD
  121.                         tputs(parm_dch, 1, outc);
  122. #else
  123.                         tputs(DC, 1, outc);
  124. #endif BSD
  125.                 }
  126.         else if ((c1 == 'd') && (c2 == 'l')) {
  127. #ifndef BSD
  128.                         tputs(key_dl, 1, outc);
  129. #else
  130.                         tputs(DL, 1, outc);
  131. #endif BSD
  132.                 }
  133. #ifndef BSD
  134.         else if ((c1 == 'd') && (c2 == 'm')) {
  135.             (void) printf("%s",enter_delete_mode);
  136. #else
  137.         else if ((c1 == 'd') && (c2 == 'm')) (void) printf("%s",DM);
  138.         else if ((c1 == 'd') && (c2 == 'o')) (void) printf("%s",DO);
  139.         else if ((c1 == 'e') && (c2 == 'd')) (void) printf("%s",ED);
  140.         else if ((c1 == 'e') && (c2 == 'i')) (void) printf("%s",EI);
  141.         else if ((c1 == 'h') && (c2 == 'o')) {
  142.             if (*HO != '\0') (void) printf("%s",HO);
  143.             else movecursor(0,0);
  144. #endif BSD
  145.         }
  146. #ifndef BSD
  147.         else if ((c1 == 'd') && (c2 == 'o')) {
  148.             (void) printf("%s",cursor_down); 
  149.         }
  150.         else if ((c1 == 'e') && (c2 == 'd')) {
  151.             (void) printf("%s",exit_delete_mode); 
  152.         }
  153.         else if ((c1 == 'e') && (c2 == 'i')) {
  154.             (void) printf("%s",exit_insert_mode); 
  155.         }
  156.         else if ((c1 == 'h') && (c2 == 'o')) { 
  157.             putp(cursor_home);
  158.         }
  159. #endif BSD
  160.         else if ((c1 == 'i') && (c2 == 'c')) {
  161. #ifndef BSD
  162.                         tputs(insert_character, 1, outc);
  163. #else
  164.                         tputs(IC, 1, outc);
  165. #endif BSD
  166.                 }
  167. #ifndef BSD
  168.         else if ((c1 == 'i') && (c2 == 'm')) {
  169.             (void) printf("%s",enter_insert_mode);
  170.         }
  171. #else
  172.         else if ((c1 == 'i') && (c2 == 'm')) (void) printf("%s",IM);
  173. #endif BSD
  174.         else if ((c1 == 'i') && (c2 == 'p')) {
  175. #ifndef BSD
  176.                         tputs(insert_padding, 1, outc);
  177. #else
  178.                         tputs(IP, 1, outc);
  179. #endif BSD
  180.                 }
  181. #ifndef BSD
  182.         else if ((c1 == 'l') && (c2 == 'l')) { 
  183.             if (*cursor_to_ll != '\0') {
  184.                 putp(cursor_to_ll);
  185.             }
  186.              i_xy = (tparm(cursor_address,lines-1,0));
  187.              tputs(i_xy,0,outc);
  188. #else
  189.         else if ((c1 == 'l') && (c2 == 'l')) {
  190.             if (*LL != '\0') (void) printf("%s",LL);
  191.             else movecursor(0,LINES-1);
  192. #endif BSD
  193.         }
  194. #ifndef BSD
  195.         else if ((c1 == 'l') && (c2 == 'i')) {
  196.             (void) printf("%d", lines);
  197.         }
  198.         else if ((c1 == 'n') && (c2 == 'd')) {
  199.             (void) printf("%s",cursor_right);
  200.         }
  201.         else if ((c1 == 'p') && (c2 == 'c')) {
  202.             (void) printf("%s",pad_char);
  203.         }
  204.         else if ((c1 == 's') && (c2 == 'e')) {
  205.                         tputs(exit_standout_mode, 1, outc);
  206.         }
  207. #else
  208.         else if ((c1 == 'l') && (c2 == 'i')) (void) printf("%d", LINES);
  209.         else if ((c1 == 'm') && (c2 == 'a')) (void) printf("%s",MA);
  210.         else if ((c1 == 'n') && (c2 == 'd')) (void) printf("%s",ND);
  211.         else if ((c1 == 'p') && (c2 == 'c')) (void) printf("%s",PC);
  212.         else if ((c1 == 's') && (c2 == 'e')) (void) printf("%s",SE);
  213. #endif BSD
  214.         else if ((c1 == 's') && (c2 == 'f')) {
  215. #ifndef BSD
  216.                         tputs(scroll_forward, 1, outc);
  217. #else
  218.                         tputs(SF, 1, outc);
  219. #endif BSD
  220.                 }
  221. #ifndef BSD
  222.         else if ((c1 == 's') && (c2 == 'o')) {
  223.                         tputs(enter_standout_mode, 1, outc);
  224.         }
  225.         else if ((c1 == 's') && (c2 == 'r')) { 
  226. #else
  227.         else if ((c1 == 's') && (c2 == 'o')) (void) printf("%s",SO);
  228.         else if ((c1 == 's') && (c2 == 'r')) {
  229. #endif BSD
  230. #ifndef BSD
  231.                         *scroll_reverse = tputs(scroll_reverse, 1, outc);
  232.                         (void) printf("%s",scroll_reverse);
  233. #else
  234.                         *SR = tputs(SR, 1, outc);
  235.                         (void) printf("%s",SR);
  236. #endif BSD
  237.                 }
  238.         else if ((c1 == 't') && (c2 == 'a')) {
  239. #ifndef BSD
  240.                         tputs(tab, 1, outc);
  241. #else
  242.                         tputs(TA, 1, outc);
  243. #endif BSD
  244.                 }
  245. #ifndef BSD
  246.         else if ((c1 == 't') && (c2 == 'e')) {
  247.             (void) printf("%s",exit_ca_mode); 
  248.         }
  249.         else if ((c1 == 't') && (c2 == 'i')) {
  250.             (void) printf("%s",enter_ca_mode); 
  251.         }
  252.         else if ((c1 == 'u') && (c2 == 'c')) {
  253.                         tputs(underline_char, 1, outc);
  254.         }
  255.         else if ((c1 == 'u') && (c2 == 'e')) {
  256.                         tputs(exit_underline_mode, 1, outc);
  257.         }
  258.         else if ((c1 == 'u') && (c2 == 'l')) {
  259.             (void) printf("%s",transparent_underline);
  260.         }
  261.         else if ((c1 == 'u') && (c2 == 's')) {
  262.                         tputs(enter_underline_mode, 1, outc);
  263.         }
  264.         else if ((c1 == 'v') && (c2 == 'b')) {
  265.                         tputs(flash_screen, 1, outc);
  266.         }
  267.         else if ((c1 == 'v') && (c2 == 'e')) {
  268.                         tputs(cursor_normal, 1, outc);
  269.         }
  270.         else if ((c1 == 'v') && (c2 == 's')) {
  271.                         tputs(cursor_visible, 1, outc);
  272.         }
  273. #else
  274.         else if ((c1 == 't') && (c2 == 'e')) (void) printf("%s",TE);
  275.         else if ((c1 == 't') && (c2 == 'i')) (void) printf("%s",TI);
  276.         else if ((c1 == 'u') && (c2 == 'c')) (void) printf("%s",UC);
  277.         else if ((c1 == 'u') && (c2 == 'e')) (void) printf("%s",UE);
  278.         else if ((c1 == 'u') && (c2 == 'l')) (void) printf("%s",UL);
  279.         else if ((c1 == 'u') && (c2 == 's')) (void) printf("%s",US);
  280.         else if ((c1 == 'v') && (c2 == 'b')) (void) printf("%s",VB);
  281.         else if ((c1 == 'v') && (c2 == 'e')) (void) printf("%s",VE);
  282.         else if ((c1 == 'v') && (c2 == 's')) (void) printf("%s",VS);
  283. #endif BSD
  284.         else (void) fprintf(stderr,"kurses: unknown option %s\n",*argv);
  285.         }
  286.         else for (s = argv[0]; *s != '\0'; s++) (void) putchar(*s);
  287.     }
  288. #ifndef BSD
  289.     resetterm();
  290.     exit(0);
  291. #else
  292.     endwin();
  293. #endif BSD
  294. }
  295.  
  296. #ifdef BSD
  297. movecursor(x,y)
  298. int x, y;
  299. {
  300.     char n, *s;
  301.     int i = 0, rev = 0;
  302.  
  303.     for (s = CM; *s != '\0'; s++) {
  304.               while (*s >= '0' && *s <= '9') *s++; /* strip padding nums */
  305.                 
  306.         if (*s != '%') (void) putchar(*s);
  307.         else {
  308.             switch (i) {
  309.                 case 0:    n = (rev?x:y);
  310.                     break;
  311.                 case 1:    n = (rev?y:x);
  312.                     break;
  313.                 default: n = '\0';
  314.             }
  315.             switch(*++s) {
  316.                 case 'd':    (void) printf("%d",n);
  317.                         i++;
  318.                         break;
  319.                 case '2':    (void) printf("%2d",n);
  320.                         i++;
  321.                         break;
  322.                 case '3':    (void) printf("%3d",n);
  323.                         i++;
  324.                         break;
  325.                 case '+':    n += (int)*++s;
  326.                 case '.':    (void) printf("%c",(char)n);
  327.                         i++;
  328.                         break;
  329.                 case '>':    if (n > (int)*++s) n+=(int)*++s;
  330.                         else *++s;
  331.                         break;
  332.                 case 'i':    x++; y++;
  333.                         break;
  334.                 case 'n':    x ^= 0140; y ^= 0140;
  335.                         break;
  336.                 case 'B':    x = (16*(x/10))+(x%10);
  337.                         y = (16*(y/10))+(y%10);
  338.                         break;
  339.                 case 'D':    x = (x-2*(x%16));
  340.                         y = (y-2*(y%16));
  341.                 case 'r':    rev++;
  342.                         break;
  343.                 default:    *--s;
  344.                 case '%':    break;
  345.             }
  346.         }
  347.     }
  348. }
  349. #endif BSD
  350.