home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / glass / glass.lha / GLASS / glue / tc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-02-07  |  4.5 KB  |  206 lines

  1. /*
  2.  
  3.     This file is a part of the GLASS source distribution 
  4.     and therefore subjected to the copy notice below. 
  5.     
  6.     Copyright (C) 1989,1990  S.J. Klaver, R Doesborg
  7.               email: simon@sagan.nl
  8.  
  9.     This program is free software; you can redistribute it and/or modify
  10.     it under the terms of the GNU General Public License as published by
  11.     the Free Software Foundation version 1
  12.  
  13.     This program is distributed in the hope that it will be useful,
  14.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.     GNU General Public License for more details.
  17.  
  18.     You should have received a copy of the GNU General Public License
  19.     along with this program; if not, write to the Free Software
  20.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21. */
  22. /* File: tc.c  (termcap routines)
  23.    Author: Simon Klaver
  24.    
  25.    Functions for cursor-key recognition and screen attributes
  26. */
  27.  
  28. #include <curses.h>
  29. #include "tctypes.h"
  30.  
  31. extern char *malloc();
  32.  
  33. void addkeystring (ks, keystr, keyid)
  34.   keystrings ks;
  35.   char *keystr;
  36.   int keyid;
  37. {
  38.   ks->keystr[ks->n] = (char *) malloc (10);
  39.   strcpy (ks->keystr[ks->n], keystr); 
  40.   ks->keyid[ks->n] = keyid;
  41.   ks->n = ks->n + 1;
  42. }
  43.  
  44. void initkeystrings (ks, termcapbuf)
  45.   keystrings *ks;
  46.   char **termcapbuf;   /* pointer to pointer to termcap buffer */
  47. {
  48.   char *kl, *kr, *kd, *ku;
  49.   *ks = (keystrings) malloc(sizeof(**ks));
  50.   (*ks)->n = 0;
  51.   kl = (char*) tgetstr ("kl", termcapbuf);
  52.   kr = (char*) tgetstr ("kr", termcapbuf);
  53.   kd = (char*) tgetstr ("kd", termcapbuf);
  54.   ku = (char*) tgetstr ("ku", termcapbuf);
  55.   addkeystring (*ks, (kl+1), KEY_LEFT);
  56.   addkeystring (*ks, (kr+1), KEY_RIGHT);
  57.   addkeystring (*ks, (kd+1), KEY_DOWN);
  58.   addkeystring (*ks, (ku+1), KEY_UP);
  59. #include "keystrings.h"
  60.   /* printf ("Initkeystrings: %d key definitions stored.\n", (*ks)->n); */
  61. }
  62.  
  63.  
  64. void printwithesc (s)
  65.   char *s;
  66. {
  67.   char *str;
  68.   str = s;
  69.   while (*str != '\0') {
  70.     if (((int)(*str))==27)
  71.       printf ("^[");
  72.     else
  73.       printf ("%c", *str);
  74.     str = str + 1;
  75.   }
  76. }
  77.  
  78. void printkeystrings (ks)
  79.   keystrings ks;
  80. {
  81.   int i;
  82.   printf ("Keystrings are:\n");
  83.   for (i=0; i<ks->n; i++) {
  84.     printwithesc (ks->keystr[i]);
  85.     printf ("  : keycode %d", ks->keyid[i]);
  86.     printf ("\n");
  87.   }
  88. }
  89.  
  90. bool contains (str1, str2)
  91.   char *str1, *str2;
  92. /* Is str2 a beginning of str1 ? */
  93. {
  94.   bool equal;
  95.   int i;
  96.   equal = TRUE;
  97.   i = 0;
  98.   while ( (str1[i] != (char) 0) &&
  99.           (str2[i] != (char) 0) &&
  100.           (str1[i] == str2[i])
  101.         ) {
  102.     i = i + 1;
  103.   } 
  104.   if ( (str1[i] != str2[i]) &&
  105.        (str2[i] != (char) 0)
  106.      ) 
  107.     return (FALSE);
  108.   else
  109.     return (TRUE);
  110. }
  111.  
  112.  
  113. void findkeystr (ks, keystr, keyid, found, maybefound)
  114.   keystrings ks;
  115.   char *keystr;
  116.   int  *keyid;
  117.   bool *found, *maybefound; 
  118. {
  119.   int i;
  120.   i = 0;
  121.   printf ("Findkeystr: \"%s\" ", keystr);
  122.   *found = FALSE;
  123.   *maybefound = FALSE;
  124.   while ( (i<ks->n) &&
  125.           (*found == FALSE)
  126.         ) {
  127.     if (contains (ks->keystr[i], keystr) == TRUE)
  128.       *maybefound = TRUE;  
  129.     if (strcmp (ks->keystr[i], keystr) == 0) {
  130.       *found = TRUE;
  131.       *keyid = ks->keyid[i];
  132.     }
  133.     i = i + 1;
  134.   }
  135.   printf (" keyid = %d, ", *keyid);
  136.   if (*found == TRUE) printf ("found = TRUE");
  137.                else  printf ("found = FALSE");
  138.   if (*maybefound == TRUE) printf (", maybefound = TRUE");
  139.                else  printf (", maybefound = FALSE");
  140.   printf ("\n");
  141. }
  142.  
  143.  
  144. static attrstrings as;
  145.  
  146. void printattrstrings ()
  147. {
  148.   printf ("Enter blinking: ");
  149.   printwithesc (as->mb); printf ("\n");
  150.   printf ("Enter bold: ");
  151.   printwithesc (as->md); printf ("\n");
  152.   printf ("Turn off all attributes: ");
  153.   printwithesc (as->me); printf ("\n");
  154.   printf ("Enter reverse: ");
  155.   printwithesc (as->mr); printf ("\n");
  156. }
  157.  
  158. void initattrstrings (termcapbuf)
  159.   char **termcapbuf;
  160. {
  161.   as = (attrstrings) malloc(sizeof(*as));
  162.   as->mb = (char *) tgetstr ("mb", termcapbuf);
  163.   as->md = (char *) tgetstr ("md", termcapbuf);
  164.   as->me = (char *) tgetstr ("me", termcapbuf);
  165.   as->mr = (char *) tgetstr ("mr", termcapbuf);
  166. }
  167.  
  168. #ifdef SUN 
  169. bool isdigit (c)
  170.   char c;
  171.   if ( (c >= '0') &&
  172.        (c <= '9')
  173.      )
  174.     return(TRUE);
  175.   else
  176.     return(FALSE);
  177. }
  178. #endif
  179.  
  180. void printtermcapstr (s)
  181.   char *s;
  182. {
  183.   int i, padcount;
  184.   padcount = 0;
  185.   i = 0;
  186.   while (isdigit(s[i]) == TRUE) {
  187.     padcount = 10*padcount + (int)s[i] - (int)'0';
  188.     i = i + 1;
  189.   }
  190.   addstr (s+i);
  191.   for (i=0; i<padcount; i++) addstr ("\0"); 
  192. }
  193.  
  194.  
  195. void beep()
  196. {
  197.   printf (BEEP);
  198. }
  199.  
  200. void flash()
  201. {
  202.   printf (FLASH);
  203. }
  204.  
  205.