home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / gnu / djgpp / src / libgplus.5 / libgplus / etc / lf / screen.cc < prev    next >
Encoding:
C/C++ Source or Header  |  1992-11-18  |  1.5 KB  |  70 lines

  1. /* Handles screen manipulations for screen width and inverse mode. */
  2. #include "screen.h"
  3.  
  4. #ifndef hpux
  5. extern "C" int tgetent(void *, const char *);
  6. extern "C" int tgetnum(const char*);
  7. extern "C" char *tgetstr(const char *, char**);
  8. typedef int (*int_func)(int);
  9. extern "C" void tputs(char *, int, int_func);
  10. #endif
  11.  
  12. /* Initializes the current screen width via
  13.    the terminal independent operation routines. */
  14.  
  15. char   Screen_Handler::term_entry[1024]; 
  16. char   Screen_Handler::temp_buf[100];
  17. int    Screen_Handler::width; 
  18. char * Screen_Handler::current_ptr;
  19. char * Screen_Handler::inverse_start;
  20. char * Screen_Handler::inverse_end;
  21.  
  22. Screen_Handler::Screen_Handler (void)
  23. {
  24.   if (tgetent (term_entry, getenv ("TERM")) != 1)
  25.     {
  26.       perror ("main");
  27.       exit (1);
  28.     }
  29.   else
  30.     {
  31.       width         = tgetnum ("co") - 1;
  32.       current_ptr   = temp_buf;
  33.       inverse_start = tgetstr("so", ¤t_ptr);
  34.       inverse_end   = tgetstr("se", ¤t_ptr);
  35.     }
  36. }
  37.  
  38.  
  39. static int fputchar (int i)
  40. {
  41.   return putchar (i);
  42. }
  43.  
  44. /* Prints out leading blanks so as to center buf 
  45.    assuming a screen width of width. */
  46.  
  47. void 
  48. Screen_Handler::center (char *buf)
  49. {
  50.   int offset;
  51.   int len = strlen (buf);
  52.  
  53.   offset = width - len >> 1;
  54.  
  55.   for (int i = 0; i < offset; i++)
  56.     putchar (' ');
  57. }
  58.  
  59. /* Centers, ``inverse-videos'' and prints buf. */
  60.  
  61. void 
  62. Screen_Handler::print_inverse_centered (char *buf)
  63. {
  64.   putchar ('\n');
  65.   center (buf);
  66.   tputs (inverse_start, 1, fputchar);
  67.   printf ("%s\n\n", buf);
  68.   tputs (inverse_end, 1, fputchar);
  69. }
  70.