1: #include <X/mit-copyright.h>
   2: 
   3: /* Copyright    Massachusetts Institute of Technology    1984	*/
   4: 
   5: /* resize.c */
   6: 
   7: #include <stdio.h>
   8: #include <sgtty.h>
   9: #include <strings.h>
  10: #include <sys/ioctl.h>
  11: 
  12: #ifndef lint
  13: static char *rcsid_resize_c = "$Header: resize.c,v 10.5 86/02/01 16:06:55 tony Rel $";
  14: #endif
  15: 
  16: char *myname;
  17: 
  18: char *strindex (), *index (), *rindex();
  19: 
  20: main (argc, argv)
  21: char **argv;
  22: /*
  23:    resets termcap string to reflect current screen size
  24:  */
  25: {
  26:     int rows, cols;
  27:     char *size = "\0337\033[r\033[999;999H\033[6n";
  28:     struct sgttyb sg, sgorig;
  29:     char termcap [1024];
  30:     char newtc [1024];
  31:     char *setname = "";
  32:     register char *ptr, *env;
  33:     char *getenv();
  34: #ifdef TIOCSWINSZ
  35:     struct winsize ws;
  36: #endif
  37:     tgetent (termcap, "xterm");
  38: 
  39:     if(ptr = rindex(myname = argv[0], '/'))
  40:         myname = ptr + 1;
  41:     if((env = getenv("TERMCAP")) && *env)
  42:         strcpy(termcap, env);
  43:     else {
  44:         if(!(env = getenv("TERM")) || !*env) {
  45:             env = "xterm";
  46:             setname = "setenv TERM xterm;\n";
  47:         }
  48:         if(tgetent (termcap, env) <= 0) {
  49:             fprintf(stderr, "%s: Can't get entry \"%s\"\n",
  50:              myname, env);
  51:             exit(1);
  52:         }
  53:     }
  54: 
  55:     ioctl ( 0, TIOCGETP, &sgorig);
  56:     sg = sgorig;
  57:     sg.sg_flags |= RAW;
  58:     ioctl ( 0, TIOCSETP, &sg);
  59: 
  60:     write ( 0, size, strlen (size));
  61:     scanf ("\033[%d;%dR", &rows, &cols);
  62:     write ( 0, "\0338", 2);
  63: 
  64:     ioctl ( 0, TIOCSETP, &sgorig);
  65: 
  66:     /* update termcap string */
  67:     /* first do columns */
  68:     if ((ptr = strindex (termcap, "co#")) == NULL) {
  69:         fprintf(stderr, "%s: No `co#'\n", myname);
  70:         exit (1);
  71:     }
  72:     strncpy (newtc, termcap, ptr - termcap + 3);
  73:     sprintf (newtc + strlen (newtc), "%d", cols);
  74:     ptr = index (ptr, ':');
  75:     strcat (newtc, ptr);
  76: 
  77:     /* now do lines */
  78:     if ((ptr = strindex (newtc, "li#")) == NULL) {
  79:         fprintf(stderr, "%s: No `li#'\n", myname);
  80:         exit (1);
  81:     }
  82:     strncpy (termcap, newtc, ptr - newtc + 3);
  83:     sprintf (termcap + ((int) ptr - (int) newtc + 3), "%d", rows);
  84:     ptr = index (ptr, ':');
  85:     strcat (termcap, ptr);
  86: 
  87:     printf ("set noglob;\n%ssetenv TERMCAP '%s';\nunset noglob;\n",
  88:      setname, termcap);
  89: #ifdef TIOCGWINSZ
  90:     /* finally, set the tty's window size */
  91:     if (ioctl (0, TIOCGWINSZ, &ws) != -1) {
  92:         /* we don't have any way of directly finding out
  93: 	       the current height & width of the window in pixels.  We try
  94: 	       our best by computing the font height and width from the "old"
  95: 	       struct winsize values, and multiplying by these ratios...*/
  96:         if (ws.ws_xpixel != 0)
  97:             ws.ws_xpixel = cols*(ws.ws_xpixel/ws.ws_col);
  98:         if (ws.ws_ypixel != 0)
  99:             ws.ws_ypixel = rows*(ws.ws_ypixel/ws.ws_row);
 100:         ws.ws_row = rows;
 101:         ws.ws_col = cols;
 102:         ioctl (0, TIOCSWINSZ, &ws);
 103:         }
 104: #endif
 105:     exit(0);
 106: }
 107: 
 108: char *strindex (s1, s2)
 109: /*
 110:    returns a pointer to the first occurrence of s2 in s1, or NULL if there are
 111:    none.
 112:  */
 113: char *s1, *s2;
 114: {
 115:     char *s3;
 116: 
 117:     while ((s3 = index (s1, *s2)) != NULL)
 118:     {
 119:         if (strncmp (s3, s2, strlen (s2)) == 0) return (s3);
 120:         s1 = ++s3;
 121:     }
 122:     return (NULL);
 123: }

Defined functions

main defined in line 20; never used
strindex defined in line 108; used 3 times

Defined variables

myname defined in line 16; used 5 times
rcsid_resize_c defined in line 13; never used
Last modified: 1986-02-01
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1309
Valid CSS Valid XHTML 1.0 Strict