1: /*
   2:  * High level routines dealing with the output to the screen.
   3:  */
   4: 
   5: #include "less.h"
   6: 
   7: extern int sigs;
   8: extern int sc_width, sc_height;
   9: extern int ul_width, ue_width;
  10: extern int so_width, se_width;
  11: extern int tabstop;
  12: extern int twiddle;
  13: extern char *line;
  14: extern char *first_cmd;
  15: 
  16: /*
  17:  * Display the line which is in the line buffer.
  18:  */
  19:     public void
  20: put_line()
  21: {
  22:     register char *p;
  23:     register int c;
  24:     register int column;
  25:     extern int auto_wrap, ignaw;
  26: 
  27:     if (sigs)
  28:         /*
  29: 		 * Don't output if a signal is pending.
  30: 		 */
  31:         return;
  32: 
  33:     if (line == NULL)
  34:         line = (twiddle) ? "~" : "";
  35: 
  36:     column = 0;
  37:     for (p = line;  *p != '\0';  p++)
  38:     {
  39:         switch (c = *p)
  40:         {
  41:         case UL_CHAR:
  42:             ul_enter();
  43:             column += ul_width;
  44:             break;
  45:         case UE_CHAR:
  46:             ul_exit();
  47:             column += ue_width;
  48:             break;
  49:         case '\t':
  50:             do
  51:             {
  52:                 putc(' ');
  53:                 column++;
  54:             } while ((column % tabstop) != 0);
  55:             break;
  56:         case '\b':
  57:             putbs();
  58:             column--;
  59:             break;
  60:         default:
  61:             if (c & 0200)
  62:             {
  63:                 putc('^');
  64:                 putc(c & 0177);
  65:                 column += 2;
  66:             } else
  67:             {
  68:                 putc(c);
  69:                 column++;
  70:             }
  71:         }
  72:     }
  73:     if (column < sc_width || !auto_wrap || ignaw)
  74:         putc('\n');
  75: }
  76: 
  77: /*
  78:  * Is a given character a "control" character?
  79:  * {{ ASCII DEPENDENT }}
  80:  */
  81:     public int
  82: control_char(c)
  83:     int c;
  84: {
  85:     return (c < ' ' || c == '\177');
  86: }
  87: 
  88: /*
  89:  * Return the printable character used to identify a control character
  90:  * (printed after a carat; e.g. '\3' => "^C").
  91:  * {{ ASCII DEPENDENT }}
  92:  */
  93:     public int
  94: carat_char(c)
  95:     int c;
  96: {
  97:     return ((c == '\177') ? '?' : (c | 0100));
  98: }
  99: 
 100: 
 101: static char obuf[1024];
 102: static char *ob = obuf;
 103: 
 104: /*
 105:  * Flush buffered output.
 106:  */
 107:     public void
 108: flush()
 109: {
 110:     write(1, obuf, ob-obuf);
 111:     ob = obuf;
 112: }
 113: 
 114: /*
 115:  * Discard buffered output.
 116:  */
 117:     public void
 118: dropout()
 119: {
 120:     ob = obuf;
 121: }
 122: 
 123: /*
 124:  * Output a character.
 125:  */
 126:     public void
 127: putc(c)
 128:     int c;
 129: {
 130:     if (ob >= &obuf[sizeof(obuf)])
 131:         flush();
 132:     *ob++ = c;
 133: }
 134: 
 135: /*
 136:  * Output a string.
 137:  */
 138:     public void
 139: puts(s)
 140:     register char *s;
 141: {
 142:     while (*s != '\0')
 143:         putc(*s++);
 144: }
 145: 
 146: /*
 147:  * Output a message in the lower left corner of the screen
 148:  * and wait for carriage return.
 149:  */
 150: 
 151: static char return_to_continue[] = "  (press RETURN)";
 152: 
 153:     public void
 154: error(s)
 155:     char *s;
 156: {
 157:     register int c;
 158:     static char buf[2];
 159: 
 160:     lower_left();
 161:     clear_eol();
 162:     so_enter();
 163:     puts(s);
 164:     puts(return_to_continue);
 165:     so_exit();
 166: 
 167: #if ONLY_RETURN
 168:     while ((c = getc()) != '\n' && c != '\r')
 169:         bell();
 170: #else
 171:     c = getc();
 172:     if (c != '\n' && c != '\r' && c != ' ')
 173:     {
 174:         buf[0] = c;
 175:         first_cmd = buf;
 176:     }
 177: #endif
 178: 
 179:     if (strlen(s) > sc_width)
 180:         repaint();
 181: }
 182: 
 183:     public int
 184: error_width()
 185: {
 186:     /*
 187: 	 * Don't use the last position, because some terminals
 188: 	 * will scroll if you write in the last char of the last line.
 189: 	 */
 190:     return (sc_width -
 191:         (sizeof(return_to_continue) + so_width + se_width + 1));
 192: }

Defined functions

carat_char defined in line 93; never used
control_char defined in line 81; never used
dropout defined in line 117; never used
error defined in line 153; never used
error_width defined in line 183; never used
flush defined in line 107; used 1 times
put_line defined in line 19; never used
putc defined in line 126; used 6 times
puts defined in line 138; used 2 times

Defined variables

ob defined in line 102; used 5 times
obuf defined in line 101; used 7 times
public defined in line 126; never used
return_to_continue defined in line 151; used 2 times
Last modified: 1986-04-21
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: ?E00
Valid CSS Valid XHTML 1.0 Strict