.ds f. intro.2 .sh 1 Variables .pp Many variables which are used to describe the terminal environment are available to the programmer. They are: .TS .if \n+(b.=1 .nr d. \n(.c-\n(c.-1 .de 35 .ps \n(.s .vs \n(.vu .in \n(.iu .if \n(.u .fi .if \n(.j .ad .if \n(.j=0 .na .. .nf .nr #~ 0 .if n .nr #~ 0.6n .ds #d .d .if \(ts\n(.z\(ts\(ts .ds #d nl .fc .nr 33 \n(.s .rm 80 81 82 .nr 34 \n(.lu .eo .am 82 .br .di a+ .35 .ft \n(.f .ll 50nn .if \n(.l<\n(82 .ll \n(82u .in 0 .fi current version of the screen (terminal screen). .br .di .nr a| \n(dn .nr a- \n(dl .. .ec \ .eo .am 82 .br .di b+ .35 .ft \n(.f .ll 50nn .if \n(.l<\n(82 .ll \n(82u .in 0 standard screen. Most updates are usually done here. .br .di .nr b| \n(dn .nr b- \n(dl .. .ec \ .eo .am 82 .br .di c+ .35 .ft \n(.f .ll 50nn .if \n(.l<\n(82 .ll \n(82u .in 0 default terminal type if type cannot be determined .br .di .nr c| \n(dn .nr c- \n(dl .. .ec \ .eo .am 82 .br .di d+ .35 .ft \n(.f .ll 50nn .if \n(.l<\n(82 .ll \n(82u .in 0 use the terminal specification in \fIDef\*_term\fR as terminal, irrelevant of real terminal type .br .di .nr d| \n(dn .nr d- \n(dl .. .ec \ .eo .am 82 .br .di e+ .35 .ft \n(.f .ll 50nn .if \n(.l<\n(82 .ll \n(82u .in 0 full name of the current terminal. .br .di .nr e| \n(dn .nr e- \n(dl .. .ec \ .eo .am 82 .br .di f+ .35 .ft \n(.f .ll 50nn .if \n(.l<\n(82 .ll \n(82u .in 0 number of lines on the terminal .br .di .nr f| \n(dn .nr f- \n(dl .. .ec \ .eo .am 82 .br .di g+ .35 .ft \n(.f .ll 50nn .if \n(.l<\n(82 .ll \n(82u .in 0 number of columns on the terminal .br .di .nr g| \n(dn .nr g- \n(dl .. .ec \ .eo .am 82 .br .di h+ .35 .ft \n(.f .ll 50nn .if \n(.l<\n(82 .ll \n(82u .in 0 error flag returned by routines on a fail. .br .di .nr h| \n(dn .nr h- \n(dl .. .ec \ .eo .am 82 .br .di i+ .35 .ft \n(.f .ll 50nn .if \n(.l<\n(82 .ll \n(82u .in 0 error flag returned by routines when things go right. .br .di .nr i| \n(dn .nr i- \n(dl .. .ec \ .35 .nf .ll \n(34u .nr 80 0 .nr 38 \wtype .if \n(80<\n(38 .nr 80 \n(38 .nr 38 \wWINDOW * .if \n(80<\n(38 .nr 80 \n(38 .nr 38 \wWINDOW * .if \n(80<\n(38 .nr 80 \n(38 .nr 38 \wchar * .if \n(80<\n(38 .nr 80 \n(38 .nr 38 \wbool .if \n(80<\n(38 .nr 80 \n(38 .nr 38 \wchar * .if \n(80<\n(38 .nr 80 \n(38 .nr 38 \wint .if \n(80<\n(38 .nr 80 \n(38 .nr 38 \wint .if \n(80<\n(38 .nr 80 \n(38 .nr 38 \wint .if \n(80<\n(38 .nr 80 \n(38 .nr 38 \wint .if \n(80<\n(38 .nr 80 \n(38 .80 .rm 80 .nr 38 6mn .if \n(80<\n(38 .nr 80 \n(38 .nr 81 0 .nr 38 \wname .if \n(81<\n(38 .nr 81 \n(38 .nr 38 \wcurscr .if \n(81<\n(38 .nr 81 \n(38 .nr 38 \wstdscr .if \n(81<\n(38 .nr 81 \n(38 .nr 38 \wDef\*_term .if \n(81<\n(38 .nr 81 \n(38 .nr 38 \wMy\*_term .if \n(81<\n(38 .nr 81 \n(38 .nr 38 \wttytype .if \n(81<\n(38 .nr 81 \n(38 .nr 38 \wLINES .if \n(81<\n(38 .nr 81 \n(38 .nr 38 \wCOLS .if \n(81<\n(38 .nr 81 \n(38 .nr 38 \wERR .if \n(81<\n(38 .nr 81 \n(38 .nr 38 \wOK .if \n(81<\n(38 .nr 81 \n(38 .81 .rm 81 .nr 38 8nn .if \n(81<\n(38 .nr 81 \n(38 .nr 82 0 .nr 38 \wdescription .if \n(82<\n(38 .nr 82 \n(38 .82 .rm 82 .nr 38 \n(a- .if \n(82<\n(38 .nr 82 \n(38 .nr 38 \n(b- .if \n(82<\n(38 .nr 82 \n(38 .nr 38 \n(c- .if \n(82<\n(38 .nr 82 \n(38 .nr 38 \n(d- .if \n(82<\n(38 .nr 82 \n(38 .nr 38 \n(e- .if \n(82<\n(38 .nr 82 \n(38 .nr 38 \n(f- .if \n(82<\n(38 .nr 82 \n(38 .nr 38 \n(g- .if \n(82<\n(38 .nr 82 \n(38 .nr 38 \n(h- .if \n(82<\n(38 .nr 82 \n(38 .nr 38 \n(i- .if \n(82<\n(38 .nr 82 \n(38 .nr 38 50nn .if \n(82<\n(38 .nr 82 \n(38 .35 .nf .ll \n(34u .nr 38 0+\n(80+\n(81+\n(82 .nr 38 \n(.l-\n(38 .nr 38 \n(38/6 .if \n(38<0 .nr 38 0 .nr 79 0 .nr 40 \n(79+(0*\n(38) .nr 80 +\n(40 .nr 41 \n(80+(3*\n(38) .nr 81 +\n(41 .nr 42 \n(81+(3*\n(38) .nr 82 +\n(42 .nr TW \n(82 .if t .if (\n(TW+\n(.o)>7.65i .tm Table at line 39 file intro.2 is too wide - \n(TW units .fc   .nr #T 0-1 .nr #a 0-1 .eo .de T# .ds #d .d .if \(ts\n(.z\(ts\(ts .ds #d nl .mk ## .nr ## -1v .ls 1 .ls .. .ec .ta \n(80u \n(81u \n(82u .nr 31 \n(.f .nr 35 1m \&\h'|\n(40u'type\h'|\n(41u'name\h'|\n(42u'description .nr 36 \n(.v .vs \n(.vu-\n(.sp \h'|0'\s\n(33\l'|\n(TWu\(ul'\s0 .vs \n(36u .ne \n(a|u+\n(.Vu .if (\n(a|+\n(#^-1v)>\n(#- .nr #- +(\n(a|+\n(#^-\n(#--1v) .ta \n(80u \n(81u \n(82u .nr 31 \n(.f .nr 35 1m \&\h'|\n(40u'WINDOW *\h'|\n(41u'curscr\h'|\n(42u' .mk ## .nr 31 \n(## .sp |\n(##u-1v .nr 37 \n(42u .in +\n(37u .a+ .in -\n(37u .mk 32 .if \n(32>\n(31 .nr 31 \n(32 .sp |\n(31u .ne \n(b|u+\n(.Vu .if (\n(b|+\n(#^-1v)>\n(#- .nr #- +(\n(b|+\n(#^-\n(#--1v) .ta \n(80u \n(81u \n(82u .nr 31 \n(.f .nr 35 1m \&\h'|\n(40u'WINDOW *\h'|\n(41u'stdscr\h'|\n(42u' .mk ## .nr 31 \n(## .sp |\n(##u-1v .nr 37 \n(42u .in +\n(37u .b+ .in -\n(37u .mk 32 .if \n(32>\n(31 .nr 31 \n(32 .sp |\n(31u .ne \n(c|u+\n(.Vu .if (\n(c|+\n(#^-1v)>\n(#- .nr #- +(\n(c|+\n(#^-\n(#--1v) .ta \n(80u \n(81u \n(82u .nr 31 \n(.f .nr 35 1m \&\h'|\n(40u'char *\h'|\n(41u'Def\*_term\h'|\n(42u' .mk ## .nr 31 \n(## .sp |\n(##u-1v .nr 37 \n(42u .in +\n(37u .c+ .in -\n(37u .mk 32 .if \n(32>\n(31 .nr 31 \n(32 .sp |\n(31u .ne \n(d|u+\n(.Vu .if (\n(d|+\n(#^-1v)>\n(#- .nr #- +(\n(d|+\n(#^-\n(#--1v) .ta \n(80u \n(81u \n(82u .nr 31 \n(.f .nr 35 1m \&\h'|\n(40u'bool\h'|\n(41u'My\*_term\h'|\n(42u' .mk ## .nr 31 \n(## .sp |\n(##u-1v .nr 37 \n(42u .in +\n(37u .d+ .in -\n(37u .mk 32 .if \n(32>\n(31 .nr 31 \n(32 .sp |\n(31u .ne \n(e|u+\n(.Vu .if (\n(e|+\n(#^-1v)>\n(#- .nr #- +(\n(e|+\n(#^-\n(#--1v) .ta \n(80u \n(81u \n(82u .nr 31 \n(.f .nr 35 1m \&\h'|\n(40u'char *\h'|\n(41u'ttytype\h'|\n(42u' .mk ## .nr 31 \n(## .sp |\n(##u-1v .nr 37 \n(42u .in +\n(37u .e+ .in -\n(37u .mk 32 .if \n(32>\n(31 .nr 31 \n(32 .sp |\n(31u .ne \n(f|u+\n(.Vu .if (\n(f|+\n(#^-1v)>\n(#- .nr #- +(\n(f|+\n(#^-\n(#--1v) .ta \n(80u \n(81u \n(82u .nr 31 \n(.f .nr 35 1m \&\h'|\n(40u'int\h'|\n(41u'LINES\h'|\n(42u' .mk ## .nr 31 \n(## .sp |\n(##u-1v .nr 37 \n(42u .in +\n(37u .f+ .in -\n(37u .mk 32 .if \n(32>\n(31 .nr 31 \n(32 .sp |\n(31u .ne \n(g|u+\n(.Vu .if (\n(g|+\n(#^-1v)>\n(#- .nr #- +(\n(g|+\n(#^-\n(#--1v) .ta \n(80u \n(81u \n(82u .nr 31 \n(.f .nr 35 1m \&\h'|\n(40u'int\h'|\n(41u'COLS\h'|\n(42u' .mk ## .nr 31 \n(## .sp |\n(##u-1v .nr 37 \n(42u .in +\n(37u .g+ .in -\n(37u .mk 32 .if \n(32>\n(31 .nr 31 \n(32 .sp |\n(31u .ne \n(h|u+\n(.Vu .if (\n(h|+\n(#^-1v)>\n(#- .nr #- +(\n(h|+\n(#^-\n(#--1v) .ta \n(80u \n(81u \n(82u .nr 31 \n(.f .nr 35 1m \&\h'|\n(40u'int\h'|\n(41u'ERR\h'|\n(42u' .mk ## .nr 31 \n(## .sp |\n(##u-1v .nr 37 \n(42u .in +\n(37u .h+ .in -\n(37u .mk 32 .if \n(32>\n(31 .nr 31 \n(32 .sp |\n(31u .ne \n(i|u+\n(.Vu .if (\n(i|+\n(#^-1v)>\n(#- .nr #- +(\n(i|+\n(#^-\n(#--1v) .ta \n(80u \n(81u \n(82u .nr 31 \n(.f .nr 35 1m \&\h'|\n(40u'int\h'|\n(41u'OK\h'|\n(42u' .mk ## .nr 31 \n(## .sp |\n(##u-1v .nr 37 \n(42u .in +\n(37u .i+ .in -\n(37u .mk 32 .if \n(32>\n(31 .nr 31 \n(32 .sp |\n(31u .fc .nr T. 1 .T# 1 .35 .rm a+ .rm b+ .rm c+ .rm d+ .rm e+ .rm f+ .rm g+ .rm h+ .rm i+ .TE .if \n-(b.=0 .nr c. \n(.c-\n(d.-34 .pp There are also several .q #define constants and types which are of general usefulness: .sp .ev 1 .ta 11n .(b L .nf reg storage class ``register'' (e.g., \fIreg int i;\fR\|) bool boolean type, actually a ``char'' (e.g., \fIbool doneit;\fR\|) TRUE boolean ``true'' flag (1). FALSE boolean ``false'' flag (0). .fi .ev .)b .lp