summaryrefslogtreecommitdiffstats
path: root/lib/libncurses/doc/manual.doc
blob: 5ae7d39f5023657c8ca508f7f7901769229627d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361









			  The Curses Reference Manual

			       Pavel Curtis 1982
			     Zeyd M. Ben-Halim 1993
			       zmbenhal@netcom.com






	Caveat Emptor:
		I'm slowly  but surely updating the documentation of
	ncurses to reflect the current status of the code.  The text
	below  may  refer  to  yet  to  be implemented  functions or
	missing  functionality.	 Description  of  functions  may  be 
	missing or out of date. ncurses is aimed at being compatible
	with AT&T curses as defined in SysVR4.

	There is no ?roff sources for this document. I may one day
	go nuts and create one, but don't hold your breath :-)

	1.  Introduction

	Terminfo  is a database describing many capabilities of over
	150 different terminals.  Curses  is  a  subroutine  package
	which presents a high level screen  model to the programmer,
	while dealing with issues such as terminal  differences  and
	optimization of output to change one screenfull of text into
	another.
	Terminfo is based on Berkeley's termcap database,  but  con-
	tains a number of improvements and extensions. Parameterized 
	strings are introduced, making it possible to  describe such
	capabilities  as video  attributes,  and to handle  far more
	unusual terminals than possible with termcap.
	Curses is also based on Berkeley's curses package, with many
	improvements.  The  package  makes  use  of  the  insert and
	delete line and character features of terminals so equipped,
	and  determines  how to optimally use these features with no
	help from the programmer.  It allows arbitrary  combinations
	of  video attributes to be displayed, even on terminals that
	leave  ``magic cookies'' on the screen to  mark  changes  in
	attributes.+

	2.  An Overview of the Package

	2.1. Terminology
	
		In  this document, the following terminology is kept
	to with reasonable consistency:

	window	  An internal representation containing an image  of
		  what  a  section  of  the terminal screen may look
		  like at some point in time.  This  subsection  can
		  either  encompass  the  entire terminal screen, or
		  any smaller portion down  to  a  single  character
		  within that screen.
	terminal  Sometimes  called  terminal  screen. The package's
		  idea of what the terminal's screen currently looks
		  like,  i.e.,  what the  user sees  now.  This is a
		  special screen.
	screen	  This is a subset of windows which are as large  as
		  the terminal screen, i.e., they start at the upper
		  left hand  corner and  encompass  the  lower right
		  hand  corner.  One of these,  stdscr, is automati-
		  cally provided for the programmer.

	2.2. Compiling Programs using the Package
	
		In order to use the library, it is necessary to have
	certain  types  and  variables defined.  Therefore, the pro-
	grammer must have a line:
		  #include <ncurses.h>
	at  the  top  of  the  program  source.  The  screen package 
	uses  the  Standard I/O  library,  so  <ncurses.h>  includes  
	<stdio.h>. Ncurses also includes <termios.h>, <termio.h>, or
	<sgtty.h>  depending on  your system.  It is redundant  (but 
	harmless) for the programmer to do it,  too. In linking with
	ncurses you need to have  `-lncurses' in your LDFLAGS or  on
	the command line.  There is no need for any other libraries.

	2.3. Updating the Screen
	
		In  order to  update  the  screen  optimally,  it is
	necessary for the routines to know what the screen currently
	looks like and what  the programmer wants  it to  look  like
	next. For this purpose, a data type (structure) named WINDOW
	is defined which describes a window image to  the  routines,
	including  its  starting position  on the screen (the (y, x)
	coordinates of  the upper left hand  corner)  and  its size.
	One of these (called curscr, for current screen) is a screen
	image of what the  terminal  currently  looks like.  Another 
	screen (called  stdscr,  for standard screen) is provided by
	default to make changes on.
	         A window is a purely internal representation. It is
	used to  build  and store a potential  image of a portion of
	the terminal.  It doesn't bear  any  necessary  relation  to
	what is  really on  the terminal screen.  It is more like an
	array of characters on which to make changes.
	     When one has a window which describes what some part of
	the terminal screen should look like,  the routine refresh()
	(or wrefresh()  if the  window is  not  stdscr)  is  called.
	Refresh()  in the area covered by the window, look like that
	window.  Note, therefore, that changing something on a  win-
	dow  does  not  change  the terminal.  Actual updates to the
	terminal screen are made only by calling refresh()  or  wre-
	fresh().  This  allows  the programmer  to maintain  several
	different ideas of  what a  portion  of the  terminal screen
	should  look like.  Also,  changes can be made to windows in
	any order, without regard to motion  efficiency.   Then,  at
	will, the programmer can effectively say ``make it look like
	this,'' and let the  package worry about the best way to  do
	this.

	2.4. Naming Conventions

	     As  hinted above, the routines can use several windows,
	but two are automatically given: curscr,  which  knows  what
	the  terminal looks like, and stdscr, which is what the pro-
	grammer wants  the terminal to  look  like  next.  The  user
	should  never really access curscr directly.  Changes should
	be made to the appropriate  screen,  and  then  the  routine
	refresh() (or wrefresh()) should be called.
	      Many  functions are  set  up  to deal with stdscr as a
	default screen.  For example, to add a character to  stdscr,
	one  calls addch() with the desired character.  If a differ-
	ent  window  is  to  be  used,  the  routine  waddch()  (for
	`w'indow-specific  addch()) is provided.  This convention of
	prepending function names with a  ``w'' when they are to  be
	applied  to  specific windows  is consistent.  The only rou-
	tines which do not do this are those to which a window  must
	always be specified.
	     In  order  to  move the current (y, x) coordinates from
	one point to another, the routines move()  and  wmove()  are
	provided.  However,  it is often desirable to first move and
	then perform some I/O operation.  In order to avoid  clumsy-
	ness,  most I/O routines can be preceded by the prefix  'mv'
	and the desired (y,  x) coordinates then can be added to the
	arguments to the function.  For example, the calls
		  move(y, x);
		  addch(ch);
	can be replaced by
		  mvaddch(y, x, ch);
	and
		  wmove(win, y, x);
		  waddch(win, ch);
	can be replaced by
		  mvwaddch(win, y, x, ch);
	Note that the window description pointer (win)  comes before
	the added  (y, x) coordinates.  If such  pointers  are need,
	they are always the first parameters passed.

	3.  Variables

	      Many variables which are used to describe the terminal
	environment are available to the programmer. They are:

  type  name	description
  ------------------------------------------------------------------
  WINDOW *curscr  current version of the screen (terminal screen).
  WINDOW *stdscr  standard screen. Most updates are done here.
  int    LINES	  number of lines on the terminal
  int    COLS	  number of columns on the terminal

	There are also several `#define' constants and types which
	are of general usefulness:
	
	bool 	boolean type, actually a `char' (e.g., bool doneit;)
	TRUE 	boolean `true' flag (1).
	FALSE	boolean `false' flag (0).
	ERR 	-1	error flag returned by routines on a fail.
	OK 	0	error flag returned by routines when things
	  		go right.

	4.  Usage
	
	     This is a description of how to actually use the screen
	package.  In it, we assume all updating,  reading,  etc.  is
	applied  to  stdscr.  All instructions will work on any win-
	dow, with changing the function name and parameters as  men-
	tioned above.

	4.1. Starting up

	     In  order  to use the screen package, the routines must
	know about  terminal  characteristics,  and  the  space  for
	curscr  and  stdscr  must be allocated.  These functions are
	performed by initscr(). Since it must allocate space for the  
	windows, it can overflow memory when attempting to do so. On  
	this  rather  rare  occasion, initscr() returns ERR.
	initscr() must  always be called before any of  the routines
	which  affect windows  are used.  If it is not,  the program
	will  core  dump  as soon  as either  curscr  or  stdscr are
	referenced.  However,  it is usually best to wait to call it
	until  after  you  are  sure  you  will need it,  like after 
	checking  for  startup  errors.   Terminal  status  changing 
	routines  like nl()  and  cbreak()  should  be  called after
	initscr().
	     Now  that  the  screen windows have been allocated, you
	can set them up for the run.  If you want to, say, allow the
	window to scroll, use scrollok().  If you want the cursor to
	be left after the last change, use leaveok().  If this isn't
	done, refresh() will move the cursor to the window's current
	(y, x) coordinates after updating it.  New windows  of  your
	own can  be created,  too,  by using the functions newwin(), 
	derwin(),  and subwin().  delwin() will allow you to get rid 
	of old windows.

	4.2. Output
	
	     Now  that  we have set things up, we will want to actu-
	ally update the  terminal.   The  basic  functions  used  to
	change  what will  go  on  a window  are addch() and move().
	addch() adds a character at the current (y, x)  coordinates,
	returning  ERR  if  it  would cause  the window to illegally
	scroll, i.e., printing a character in the  lower  right-hand
	corner	of   a  terminal  which   automatically  scrolls  if
	scrolling is not allowed.  move() changes the current (y, x)
	coordinates to whatever you want them to be.  It returns ERR
	if you try to move off the window.  As mentioned above,  you
	can  combine  the  two  into mvaddch() to  do both things at
	once.
	       The  other  output  functions, such  as addstr()  and
	printw(),  all call addch() to add characters to the window.
	      After you have put on the window what you  want there,
	when you  want  the portion of  the terminal  covered by the
	window to be made to look like it, you must call  refresh().
	In order to optimize finding changes, refresh() assumes that
	any part of the window not changed since the last  refresh()
	of  that  window has not been changed on the terminal, i.e.,
	that you  have not refreshed a portion of the terminal  with
	an overlapping window.  If this is not the case, the routine
	touchwin() is provided to make it look like the entire  win-
	dow  has been changed, thus making refresh() check the whole
	subsection of the terminal for changes.
	     If you call wrefresh() with curscr(), it will make  the
	screen  look like curscr thinks it looks like.  This is use-
	ful for implementing a command which would redraw the screen
	in case it get messed up.

	4.3. Input

	     Input  is  essentially  a  mirror image of output.  The
	complementary function to addch() is getch() which, if  echo
	is  set, will call addch() to echo the character.  Since the
	screen package needs to know what is on the terminal at  all
	times,  if  characters  are to be echoed, the tty must be in
	raw or cbreak mode.   Since initially the terminal has echo-
	ing enable  and is in nocreak  mode, one or the other has to
	changed before calling getch(). The result of not doing this
	is unpredictable output.

	4.4. Miscellaneous
	
	     A plethora of other functions exist for maintaining and
	changing  information about the windows.  For the most part,
	the descriptions in section 5 should suffice.

	4.5. Finishing Up
	
	     In order to do certain optimizations, and, on some ter-
	minals,  to work at all, some things must be done before the
	screen routines  start up.  In order to clean up  after  the
	routines, the routine endwin() is provided.  It restores tty
	modes to  what they were  when initscr()  was first  called,
	moves the cursor down to the lower-left corner, etc.   Thus,
	anytime after the call to initscr, endwin() should be called
	before exiting.

	5.  Descriptions of the Functions

	This section describes  all the  functions  available to the
	programmer in the curses package.  For an alphabetical list,
	see the manual page ncurses(3).

	5.1. Initialization
	
	These functions are called when initializing a program.

	initscr()
	The  first  function called should  always be initscr.  This
	will determine the terminal type and initialize curses  data
	structures. initscr also  arranges   that  the first call to
	refresh will clear the screen.  If an error occurs a message
	is writen to standard error and the program exits. Otherwise
	it returns a pointer to stdscr.  Some function may be called
	before initscr (slk_init,  filter, ripofflines, use_env, and
	if you are using multiple terminals newterm.) 

	endwin()
	A  program  should  always  call  endwin  before  exiting or 
	shelling out of the program. This function  will restore tty 
	modes,  move  the  cursor to  the lower  left corner  of the 
	screen,  reset the terminal into the proper  nonvisual mode.
	Calling  refresh() or  doupdate()  after a  temporary escape
	from  the program will  restore the  screen to  its original
	status.
	
	newterm(type, ofp, ifp)
	A program which outputs to more than one terminal should use
	newterm instead of initscr.  newterm should be  called  once
	for  each  terminal.  It  returns a variable  of type SCREEN
	* which should be saved as a reference to that terminal. The 
	arguments are the type of the terminal  (a string) and  FILE 
	pointers for the output and input of the  terminal.  If type
	is NULL then the environment variable $TERM is used.  endwin
	must called for each terminal opened using this function.

	set_term(new)
	This function  is  used  to switch to a  different terminal.
	The screen reference for the new terminal is passed  as  the
	parameter.   The  previous terminal is returned by the func-
	tion. All other calls affect only the current terminal.

	delscreen(sp)

	longname()
	This function returns a pointer to a static area  containing
	a verbose description of the current terminal. It is defined 
	only after a call to initscr or newterm.

	termattrs()

	termname()

	5.2. Option Setting

	These  functions  set options within curses.  In  each case,
	win  is  the window affected,  and bf is a boolean flag with
	value TRUE or FALSE indicating whether to enable or  disable
	the  option.  All  options  are initially  FALSE.  It is not
	necessary to turn these options off before calling endwin.

	clearok(win,bf)
	If set, the next call to  wrefresh  with  this  window  will
	clear the  screen  and redraw the entire  screen.  If win is
	curscr, the next call to wrefresh with any window will cause
	the  screen to be cleared.  This is useful when the contents
	of the screen are uncertain, or in some  cases  for  a  more
	pleasing visual effect.

	idlok(win,bf)
	If  enabled,  curses   will  consider   using  the  hardware
	insert/delete  line feature  of  terminals  so equipped.  If
	disabled,  curses will not  use this  feature.  Enable  this 
	option only  if your  application needs  insert/delete line,
	for example, for a screen editor.  It is disabled by default 
	because insert/delete line is visually annoying when used in
	applications where it isn't really needed.

	idcok(win,bf)
	This option  allows curses  will use  inset/delete character
	capabilities  if any  are  defined.  This  option  is on  be 
	default.

	immedok(win,bf)
	If this  option is enabled any  change in the window's image
	causes a call to wrefresh.  Enabling this option can degrade
	performance; it is disabled by default.

	keypad(win,bf)
	This option  enables  the keypad of the  users terminal.  If
	enabled, the user can press a function key (such as an arrow
	key) and  getch will return a single  value representing the
	function key. If disabled,  curses will not  treat  function
	keys specially.  If the keypad in the terminal can be turned
	on (made to transmit) and off (made to work locally),  turn-
	ing on this option will turn on the terminal keypad. All the
	possible function keys are defined in ncurses.h as KEY_*.

	leaveok(win,bf)
	Normally, the hardware cursor is left at the location of the
	window cursor being refreshed.  This option allows the  cur-
	sor  to be left wherever the update happens to leave it.  It
	is useful for  applications  where the cursor  is  not used,
	since it  saves cursor motions.  If possible,  the cursor is
	made invisible when this option is enabled.

	meta(win,bf)
	If enabled, characters returned  by  getch  are  transmitted
	with all  8 bits,  instead of stripping the highest bit.  It
	is useful for extending the non-text command set in applica-
	tions where the  terminal  has  a  meta shift key,   such as
	EMACS.  NOTE: This function is currently unsupported.

	notimeout(win,bf)
	This option  controls whether a timer is set  when wgetch is
	trying to interpret an input sequence. See keypad.

	scrollok(win,bf)
	This option controls what happens when the cursor of a  win-
	dow  is moved off the edge of the window, either from a new-
	line on the bottom line, or typing the last character of the
	last line.  If  disabled,  the cursor is left  on the bottom
	line. If enabled, wrefresh is called on the window, and then 
	the physical terminal and window are scrolled up one line.

	setscrreg(t,b)
	wsetscrreg(win,t,b)
	These functions allow the user to set a  software  scrolling
	region in a window win or stdscr.  t and b are the line num-
	bers of the top and bottom margin of the  scrolling  region.
	(Line 0  is the top line of the screen.)  If this option and
	scrollok are enabled, an attempt to move off the bottom mar-
	gin  line  will  cause  all lines in the scrolling region to
	scroll up one line.  Note that this has nothing to  do  with
	use  of a physical scrolling region capability in the termi-
	nal, like that in the VT100.  Only the text of the window is
	scrolled.
	The  scrolling region really acts as a sort of barrier, lim-
	iting the  area of a window over  which changes  take place.
	For  this reason, an attempt to create a scrolling region in
	an area of the screen which does not contain the current (y,
	x)  coordinates  for that  window  is an  error.  Similarly,
	attempts to move the (y, x)  coordinates out  of  the region
	will also fail with an ERR return.
	When a scrolling region is in place, all changes are limited
	to the region.  For example,  erase() will  only  erase  the
	area inside the  region;  insertln()  will  only shift lines
	down to the  bottom of the region, etc.  It  is  anticipated
	that this  method  of  controlling  the area  of change will
	prove quite handy in a number of applications.
	To disable the scrolling region,  once defined, simply rede-
	fine it to be the whole window.  For example, to disable the
	scrolling region on stdscr,  the  following  call  would  be
	used:
		  setscrreg(0, LINES - 1)
	For  other  windows, the height of the window should be used
	instead of (LINES - 1).

	5.3. Terminal Mode Setting

	These functions are used to set modes in the tty driver. The
	initial mode usually depends on the setting when the program
	was called: the initial modes documented here represenet the
	normal situation.

	cbreak()
	nocbreak()
	crmode()
	nocrmode()
	These  functions  put  the terminal into  and out  of CBREAK 
	mode. In this mode, characters typed by the user are immedi-
	ately available  to  the program. When out of this mode, the
	device driver will buffer characters typed until  newline is
	typed.  Interrupt and flow control characters are unaffected
	by this mode.  Initially the terminal is not in CBREAK mode.
	Most interactive  programs using  curses will set this mode. 
	The functions  crmode() and  nocrmode() are the result of an
	accident in  the first  version of  curses and  are retained
	solely  for upward  compatibility.  crmode() is the  same as
	cbreak() and nocrmode()  is the same as nocbreak().  See 4.3
	for a important note on using these functions.

	raw()
	noraw()
	These functions  put the terminal into  and out of RAW mode.
	RAW mode is just like CBREAK mode  except  that  no  special
	character  processing is done (e.g.  the interrupt character
	will be passed through to  the  program,  uninterpreted,  as
	will the  kill character, etc.)  and all 8 bits of the input
	character are retained; in CBREAK mode, the  eighth  bit  is
	stripped  off before it is given to the program.  Because of
	the lack of interpretation of special characters, it is  not
	recommended that programs use this mode.

	echo()
	noecho()
	These functions control whether characters typed by the user
	are echoed as typed. Initially,  characters typed are echoed
	by  the  teletype  driver.  Authors of most interactive pro-
	grams prefer to do their own echoing in a controlled area of
	the  screen, or not to echo at all, so they disable echoing.

	halfdelay(t)
	This options is similar to cbreak mode except that if after
	blocking for t tenth of a seconds no input is received ERR
	is returned. t must between 1 and 255. Use nocbreak to leave
	this mode.

	nodelay(win,bf)
	This option  causes getch to be a non-blocking call.  If  no
	input is  ready,  getch will return ERR. If disabled,  getch
	will hang until a key is pressed.

	timeout(t)
	wtimeout(win,t)
	These functions offer control  over the blocking action of a
	read.  If t is negative,  reading will  block until there is
	input.  If t is zero,  no blocking will occur,  read returns
	ERR if no input is  available.  If t is posistive,  the read
	will  block for  t milliseconds and  return ERR if  there is
	still no input.
	These routines offer better and finer control than nodelay()
	and halfdelay() and their use is recommended. 

	nl()
	nonl()
	These functions control whether newline is  translated  into
	carriage  return  and linefeed on output, and whether return
	is translated into newline on input.   Initially, the trans-
	lations  do  occur.  By disabling these translations, curses
	is able  to make  better  use  of  the linefeed  capability,
	resulting in faster cursor motion.

	savetty()
	resetty()
	These functions save and restore the state of the tty modes.
	savetty  saves  the  current  state  in  a  buffer,  resetty
	restores the state to what it  was at the last call to save-
	tty. 

	5.4. Window Manipulation

	newwin(num_lines, num_cols, begy, begx)
	Create  a new  window with  the given  number of  lines  and
	columns.  The  upper left  corner of the window  is  at line
	begy column begx.  If either num_lines  or num_cols is zero,
	they will  be defaulted to  LINES-begy and COLS-begx.  A new
	full-screen window is created by calling newwin(0,0,0,0).

	subwin(orig, num_lines, num_cols, begy, begx)
	Create  a new  window with  the given  number of  lines  and
	columns.  The  window  is  at  position  (begy, begx) on the
	screen.  (It is relative to the screen, not orig.) The  win-
	dow  is  made in  the  middle  of  the window orig,  so that
	changes made to one window will affect both  windows.	When
	using  this  function,  often it  will be  necessary to call
	touchwin before calling wrefresh.

	derwin(orig, num_lines, num_cols, begy, begx)
	Is similar to subwin only the new window is created relative
	to the original window, not the screen.

	delwin(win)
	Deletes the named window, freeing up all  memory  associated
	with it.  In the case of sub-windows, they should be deleted
	before the main window.

	dupwin(win)
	
	mvderwin(win,y,x)

	syncok(win,bf)
	wsyncup(win)
	wcursyncup(win)
	wsyncdown(win)
	
	mvwin(win, by, bx)
	Move the window  so that the upper left  corner  will be  at
	position (by, bx).  If the move would cause the window to be
	off the screen, it is an error and the window is not moved.

	touchline(win,start,count)
	touchwin(win)
	Throw away all optimization information about which parts of
	the window have been touched, by pretending the entire  win-
	dow  has  been  drawn on.  This is  sometimes necessary when
	using overlapping windows, since a change to one window will
	affect the other window, but the optimization records of the
	other window will not reflect the change.

	wtouchln(win,y,n,changed)
	Throw away  optimization information,  or mark as unchanged,
	n lines starting at y, depending on the value of changed.

	untouchwin(win)
	Mark the whole window as unchcnged since the lat wrefresh.

	is_linetouched(win,line)
	is_wintouched(win)
	These routines are  used to  check if the  given line/window
	has been modified since the last wrefresh.  They will return
	TRUE is  that is the case,  FALSE otherwise.  is_linetouched
	will return ERR if there is no such line.
	
	overlay(win1, win2)
	overwrite(win1, win2)
	These functions  overlay win1 on top of win2, that  is,  all
	text in  win1  is copied into win2,  after lining up the two
	windows' origins.  The difference  between the functions  is
	that overlay is nondestructive (blanks are not copied) while
	overwrite is destructive.

	copywin(win,win,sminrow,smincol,dminrow,dmincol,dmaxrow,
		dmaxcol,overlay)
	Low level function used to implement overlay/overwrite.

	5.5. Causing Output to the Terminal
	
	refresh()
	wrefresh(win)
	These functions must be called to actually get any output on
	the  terminal,  as  other  routines  merely  manipulate data
	structures.  wrefresh copies the named window  to the physi-
	cal  terminal screen,  taking  into account  what is already
	there in  order to  do optimizations.  refresh is  the same,
	using stdscr as  a default screen.   Unless leaveok has been
	enabled, the physical cursor of the terminal is left at  the
	location of the window's cursor.

	doupdate()
	wnoutrefresh(win)
	These two  functions allow multiple  updates with more effi-
	ciency than  wrefresh.  To  use  them,  it  is important  to
	understand  how curses works.  In addition to all the window
	structures,  curses keeps two data  structures  representing
	the  terminal screen:  a physical screen, describing what is
	actually on the screen, and  a  virtual  screen,  describing
	what the  programmer wants  to have on the screen.  wrefresh
	works by first copying  the  named  window  to  the  virtual
	screen  (wnoutrefresh),  and  then  calling  the  routine to
	update the screen (doupdate).  If the programmer  wishes  to
	output  several  windows  at once, a series of calls to wre-
	fresh will result in alternating calls to  wnoutrefresh  and
	doupdate,  causing  several  bursts of output to the screen.
	By calling wnoutrefresh for each window, it is then possible
	to  call  doupdate once, resulting in only one burst of out-
	put, with probably fewer total characters transmitted.

	redrawwin(win)
	wredrawln(win,start,count)
	
	5.6. Writing on Window Structures

	These routines are used  to ``draw'' text on windows. In all
	cases, a missing win is taken to be stdscr.  y and x are the
	row and column,  respectively.  The  upper  left  corner  is
	always  (0, 0) not (1, 1).  The mv functions imply a call to
	move before the call to the other function.

	5.6.1.  Moving the Cursor

	move(y, x)
	wmove(win, y, x)
	The cursor associated  with the window is moved to the given
	location.  This  does  not  move the physical  cursor of the
	terminal until refresh is called.

	5.6.2.  Writing One Character

	addch(ch)
	waddch(win, ch)
	mvaddch(y, x, ch)
	mvwaddch(win, y, x, ch)
	The character ch is put in  the window at the current cursor
	position  of the  window.  If  ch  is  a  tab,  newline,  or
	backspace, the cursor  will be  moved appropriately  in  the
	window.  If ch is a different control character,  it will be
	drawn in the ^X notation.  The position of the window cursor
	is  advanced.  At the right margin,  an automatic newline is
	performed.  At the bottom of the scrolling region, if scrol-
	lok is enabled, the scrolling region will be scrolled up one
	line.

	5.6.3.  Writing a String

	addstr(str)
	addnstr(str,n)
	waddstr(win,str)
	waddnstr(win,str,n)
	mvaddstr(y,x,str)
	mvaddnstr(y,x,str,n)
	mvwaddstr(win,y,x,str)
	mvwaddnstr(win,y,x,str,n)
	These functions  write all the characters of the null termi-
	nated character  string  str on  the given window.  They are
	identical to  a series of calls to addch.  Routines with 'n'
	write n characters of str. If n is -1 then the entire string
	is written.

	addchstr(chstr)
	addchnstr(chstr,n)
	waddchstr(win,chstr)
	waddchnstr(win,chstr,n)
	mvaddchstr(y,x,chstr)
	mvaddchnstr(y,x,chstr,n)
	mvwaddchstr(win,y,x,chstr)
	mvwaddchnstr(win,y,x,chstr,n)
	These functions copy chstr onto the window image starting at
	the current cursor position. Routines with 'n' write at most
	n characters of chstr (as many as will fit on the line).  If
	n is -1 then the entire string is written. The cursor is not
	advanced and no checking for control characters is done.
	These routines are faster than the addstr() group.  chstr is
	a pointer to an array of chtype.

	5.6.4.  Clearing Areas of the Screen

	erase()
	werase(win)
	These functions copy blanks to every position in the window.

	clear()
	wclear(win)
	These functions are like erase and werase but they also call
	clearok, arranging that the screen will be  cleared  on  the
	next refresh. The result can visually annoying.

	clrtobot()
	wclrtobot(win)
	All lines below the cursor in this window are erased.  Also,
	the current line to the right of the cursor is erased.

	clrtoeol()
	wclrtoeol(win)
	The current line to the right of the cursor is erased.

	5.6.5.  Inserting and Deleting Text

	delch()
	wdelch(win)
	mvdelch(y,x)
	mvwdelch(win,y,x)
	The character under the cursor in  the  window  is  deleted.
	All  characters  to  the right on the same line are moved to
	the left one position.  This does not imply use of the hard-
	ware delete character feature.

	deleteln()
	wdeleteln(win)
	The  line  under  the cursor in  the window is deleted.  All
	lines below the  current line are moved  up  one  line.	The
	bottom  line of the window  is cleared.  This does not imply
	use of the hardware delete line feature.

	insch(c)
	winsch(win, c)
	mvinsch(y,x,c)
	mvwinsch(win,y,x,c)
	The character c is inserted before the character  under  the
	cursor.	All characters to the right are moved one space to
	the right, possibly losing the rightmost  character  on  the
	line. This does not imply use of the hardware insert char-
	acter feature.

	insertln()
	winsertln(win)
	A blank line is inserted above the current line.  The bottom
	line is  lost.	This  does not  imply use of the hardware
	insert line feature.

	5.6.6.  Formatted Output

	printw(fmt, ...)
	wprintw(win, fmt, ...)
	mvprintw(y, x, fmt, ...)
	mvwprintw(win, y, x, fmt, ...)
	vwprintw(win, fmt, va_list)
	These functions correspond to printf.  The characters  which
	would be output by printf are instead output using waddch on
	the given window. vwprintw() acts like vprintf().

	5.6.7.  Line drawing

	Borders are drawn inside a window and not around it.

	border(ls, rs, ts, bs, tl, tr, bl, br)
	wborder(win, ls, rs, ts, bs, tl, tr, bl, br)
	box(win, vert, hor)
	A border is drawn  around the  edges of the window.  ls, rs,
	ts, bs, tl, tr,  bl, and br are the character  and attribute 
	to draw the  left side,  right side, top side,  bottom side,
	top left,  top right, bottom left,  and bottom right respec-
	tively. 
	If any of these are 0, the follwing defaults are used:
	ACS_VLINE. ACS_VLINE, ACS_HLINE, ACS_HLINE, ACS_ULCORNER,
	ACS_URCORNER,  ACS_LLCORNER, ACS_LRCORNER.  box is shorthand 
	for wborder(win, vert, vert, hor, hor, 0, 0, 0, 0).

	vline(ch,n)
	wvline(win,ch,n)
	These functions draw a vertical line starting at the current
	cursor position using ch for n characters or as many as will
	fit on the window. The cursor position is not advanced.

	hline(ch,n)
	whline(win,ch,n)
	These   functions  draw a  horizontal  line starting  at the 
	current cursor position using ch for n characters or as many
	as will  fit  on  the window.  The  cursor  position  is not 
	advanced.

	5.6.8	Scrolling

	Scrolling only works  if enabled via scrollok().  The cursor
	position is unchanged by these functions. As an optimization
	the physical screen is scrolled if the window in question is
	covering the entire screen.

	scroll(win)
	The  window  is  scrolled up one line.  This involves moving
	the lines in the window data structure.

	scrl(n)
	wscrl(win,n)
	These functions scroll thw window up/down n lines depending
	on the sign on n (+ for up, - for down). 

	5.7. Querying the Contents of a Window

	getyx(win,y,x)
	The cursor position of the  window  is  placed  in  the  two
	integer  variables  y and x.  Since this is a macro, no & is
	necessary.

	inch()
	winch(win)
	mvinch(y,x)
	mvwinch(win,y,x)
	The character at the current position in the named window is
	returned.

	5.8. Input from the Terminal

	getch()
	wgetch(win)
	mvgetch(y,x)
	mvwgetch(win,y,x)
	A  character is  read from the terminal  associated with the
	window.  In nodelay mode, if there is no input waiting,  the
	value -1 is returned.  In delay mode,  the program will hang
	until a character is typed.

	If keypad mode is enabled, and a function  key  is  pressed,
	the  code  for that function key will be returned instead of
	the raw characters.  Possible function keys are defined with
	integers  beginning  with 0401, whose names begin with KEY_,
	defined in  <ncurses.h>.  If a  character  is received  that
	could be  the beginning of a function  key (such as escape),
	curses will set a one second timer.  If the remainder of the
	sequence  does  not come in within one second, the character
	will be passed through,  otherwise  the  function  key value
	will be returned.  For this reason, on many terminals, there
	will be a one second  delay after a user presses  the escape
	key. (Use  by  a programmer  of the escape  key for a single
	character function is discouraged.) The one second delay can
	be turned off using the notimeout() function.

	getstr(str)
	wgetstr(win,str)
	mvgetstr(y,x,str)
	mvwgetstr(win,y,x,str)
	A series of calls to getch  is  made, until a  newline  is
	received.  The resulting value is placed in the area pointed
	at by the character pointer str.  The users erase  and  kill
	characters are interpreted, and the string is echoed.

	scanw(fmt, ...)
	wscanw(win, fmt, ...)
	mvscanw(y, x, fmt, ...)
	mvwscanw(win, y, x, fmt, ...)
	vwscanw(win,fmt,va_list)
	These functions  corresponds  to scanf.  wgetstr is called on
	the window, and the resulting line is used as input for  the
	scan.

	5.9. Video Attributes

	attroff(at)
	wattroff(win, attrs)
	attron(at)
	wattron(win, attrs)
	attrset(at)
	wattrset(win, attrs)
	standout()
	standend()
	wstandout(win)
	wstandend(win)
	These functions set the current attributes of the named win-
	dow.  These attributes can be any combination of A_STANDOUT,
	A_REVERSE,  A_BOLD,  A_DIM,  A_BLINK, A_BLANK,  A_UNDERLINE,
	A_PROTECT,  A_INVIS,  and A_ALTCHARSET.  These constants are
	defined in <ncurses.h> and can be combined with the C | (or)
	operator. The current attributes of a  window are applied to
	all characters that are written into the window.  Attributes 
	are a property  of the  character,  and move  with the char-
	acter through any scrolling and insert/delete line/character 
	operations.   To  the  extent  possible  on  the  particular
	terminal,  they will  be displayed as the graphic  rendition 
	of characters put on the screen.
	attrset(at) sets the current  attributes of the given window
	to  at.	 attroff(at) turns off the named  attributes without
	affecting  any other  attributes.  attron(at) turns  on  the
	named attributes  without affecting any others.  standout is
	the same as  attrset(A_STANDOUT), standend  is the  same  as
	attrset(0), that is, it turns off all attributes.

	5.10. Color Manipulation

	Ncurses provides  support for  the use of color on terminals
	that are capable of display it.  Note the BSD and older SYSV
	curses don't support color.  Color support in the PC version
	is not compatible with SYSR4.

	has_colors()
	this function returns  TRUE if the terminal  supports color,
	FALSE otherwise.  Other color handling  funtions will return
	ERR if has_colors() is FALSE. You should always check before
	using color and use other video attributes to replace color.

	can_change_color()
	This  function returns  TRUE if  the terminal  is capable of
	redefining colors using the init_color function, FALSE if it
	can't.  Don't use init_color and color_content if it returns
	FALSE.

	start_color()
	This function must be called before any other color handling
	function is called.  It initializes the  8 basic colors (see
	appendix I) and sets the global  variables COLORS and COLOR_
	PAIRS  to the  maximum number  of colors  and  color-pairs a
	terminal can handle.

	init_pair(pair, fg, bg)
	This function changes  the definition of a color-pair, pair.
	Each pair has a foregroung color fg,  and a background color
	bg. Both values must be between 0 and COLORS-1. pair must be
	between 1 and COLOR_PAIRS-1.
	[If a pair is changed from a previous definition, the screen
	is  refreshed  and  all  occurances  of  the color-pair  are 
	changed to reflect the change.]  

	pair_content(pair, f, b)
	This function stores the foreground and background colors of
	the color-pair pair  into the variables pointed to by f,  b.
	pair should be between 1 and COLOR_PAIRS-1.

	init_color(color, r, g, b)
	This function changes the value of a given color. A color is
	defined by its red, green, and blue components, r, g, and b.
	These values  must be  between 0 and  1000.  color should be
	between 0 and COLORS-1.
	
	color_content(color, r, g, b)
	This function  puts the red,  green,  and blue components of
	color into the variable pointed to by  r, g, b respectively.
	color should be between 0 and COLORS-1.

	5.11. Pads

	5.12. Soft Labels

	5.13. Bells and Flashing Lights

	beep()
	flash()
	These  functions  are used  to signal  the programmer.  beep
	will sound the audible alarm on the terminal,  if  possible,
	and if not, will flash the screen (visible bell), if that is
	possible.  flash will flash the screen, and if that  is  not
	possible,  will sound the audible signal.  If neither signal
	is possible, nothing will happen.  Nearly all terminals have
	an audible signal (bell or beep) but only some can flash the
	screen.

	5.14. Portability Functions

	These functions do  not have  anything to  do with  terminal
	dependent  character output,  but tend to  be needed by pro-
	grams that  use curses.  Unfortunately,  their  implemention
	varies from one version of UNIX* to another.  They have been
	included here  to enhance the portability of  programs using
	curses.

	baudrate()
	baudrate returns the output speed of the terminal.  The num-
	ber returned is  the integer baud rate,  for  example, 9600,
	rather than a table index such as B9600.

	erasechar()
	The erase character chosen by the user is returned.  This is
	the character typed by the user to erase the character  just
	typed.

	killchar()
	The  line  kill  character  chosen  by the user is returned.
	This is the character typed by the user to forget the entire
	line being typed.

	flushinp()
	flushinp  throws  away  any typeahead that has been typed by
	the user and has not yet been read by the program.

	5.15. Debugging

	These functions  are useful when  debugging  a program  with
	curses.

	unctrl(ch)
	This macro  expands to a character  string which is a print-
	able representation  of the character ch.  The program  must
	include  the file  <unctrl.h>.  Control characters  are dis-
	played in the ^x notation. Printing characters are displayed
	as is.

	traceoff()
	traceon()
	It is possible to compile a debugging version of curses with
	tracing turned on,  and with  the -g  option  for  gdb. This
	library  may be available on your system as -ldcurses.  When
	using this version, the file ``trace'' will be created  each
	time the  program  is  run,  containing verbose  information
	showing each step done by curses.  This output is useful for
	finding  bugs in curses,  and may be useful for finding bugs
	in user programs.  Since the output is so verbose, with  any
	bug  that cannot be easily and quickly reproduced, it may be
	necessary to turn the debugging output off in some parts  of
	the  program.  These functions  can be used  to turn tracing
	off and back on.  When initscr is first called,  tracing  is
	automatically turned on.
	You should  use -DTRACE  when  compiling  programs that  use
	tracing.

	_tracef()
	This function can be used to output your own debugging info-
	rmation.  It is only available only  if you compile with the
	-DTRACE flag and linking with -ldcurses.  It can be used the
	same way as printf,  only it outputs a newline after the end
	of arguments.

	6. Lower Level Functions

	These functions  are provided for  programs not  needing the
	screen optimization  capabilities of  curses.  Programs  are
	discouraged from working at this level, since they must han-
	dle various glitches in certain terminals.  However, a  pro-
	gram can be smaller if it  only brings in the low level rou-
	tines.

	gettmode()
	setterm(type)
	These two  initialization routines are  provided  for upward
	compatibility  with  the old curses.  gettmode does nothing.
	setterm results  in a call  to  setupterm  with  appropriate
	arguments.

	def_prog_mode()
	def_shell_mode()
	These functions  define "program" mode and "shell" mode. The
	first describes  the status of  a terminal while  in curses,
	the second the status outside curses.
	
	reset_prog_mode()
	reset_shell_mode()
	These functions  restore a terminal to  "program" mode after
	shelling out, or to "shell" mode before shelling out.

	fixterm()
	resetterm()
	These  functions  are  obselete and  have  been  replaced by
	reset_prog_mode() and reset_prog_mode() respectively.
	
	saveterm()
	This   fucntion    is   obselete   and    is   replaced   by 
	def_prog_mode().

	mvcur(oldrow, oldcol, newrow, newcol)
	This routine optimally  moves the cursor  from (oldrow, old-
	col) to (newrow, newcol).  The user program is  expected  to
	keep track of the current cursor position.  Note that unless
	a full screen image is kept, curses will have to  make  pes-
	simistic assumptions, sometimes resulting in less than opti-
	mal cursor  motion.  For example,  moving  the cursor a  few
	spaces  to the right can be done by transmitting the charac-
	ters being moved over, but if curses does not have access to
	the screen image, it doesn't know what these characters are.
	If either of oldcol  or oldrow are  negative,  mvcur()  will
	refrain  from using any relative motions.  This is handy for
	occasions when a program is  unsure as to the current cursor
	location.

	7.  Terminfo Level

	These routines  are called by  low level  programs that need
	access to  specific  capabilities  of  terminfo.  A  program
	working  at  this  level should include both <ncurses.h> and
	<term.h>.  After a call to setupterm, the capabilities  will
	be available with macro names defined in <term.h>.  See ter-
	minfo(5) for a detailed  description of the  capabilies.  If
	the  program only needs to handle one terminal,  the defini-
	tion -DSINGLE can be passed to the C compiler, resulting  in
	static  references to capabilities instead of dynamic refer-
	ences.  This can result in smaller code, but prevents use of
	more than  one  terminal  at a time.  Very few  programs use
	more than one terminal, so almost all programs can use  this
	flag.

	setupterm(term, filenum, errret)
	This routine is  called to  initialize a  terminal.  term is
	the character string representing  the name of the  terminal
	being used.  filenum is the UNIX file descriptor of the ter-
	minal being  used for  output.  errret is  a  pointer to  an
	integer,  in   which  a  success  or  failure indication  is
	returned.  The values returned can be 1 (all is well), 0 (no
	such terminal),   or -1 (some problem  locating the terminfo
	database).
	The value of term can be given as 0, which  will  cause  the
	value of  TERM  in  the environment to  be used.  The errret
	pointer can also be given as 0, meaning  no  error  code  is
	wanted.  If errret is  defaulted,  and something goes wrong,
	setupterm will  print an appropriate error message and exit,
	rather  than  returning.  Thus,  a  simple program  can call
	setupterm(0,  1,  0)  and  not  worry  about  initialization
	errors.
	setupterm  will  check  the tty driver mode bits, and change
	any that might  prevent the correct operation of  other  low
	level routines.  Currently,  the mode that expands tabs into
	spaces is disabled,  because the tab character is  sometimes
	used for different  functions by different terminals.  (Some
	terminals use it to move right one space.  Others use it  to
	address  the cursor to  row or  column 9.)  If the system is
	expanding tabs, setupterm will remove the definition of  the
	tab  and  backtab functions, assuming that since the user is
	not using hardware tabs, they may not be properly set in the
	terminal.
	After the call to setupterm, the global variable cur_term is
	set to point to the current structure of terminal  capabili-
	ties. By  calling  setupterm  for each  terminal, and saving
	and restoring cur_term, it is possible for a program to  use
	two  or  more  terminals at once.  Setupterm also stores the
	names  section  of the terminal  description  in  the global
	character  array  ttytype[].  Subsequent calls  to setupterm
	will overwrite this array,  so you'll have to save  it your-
	self if need be.
	The mode that turns newlines into CRLF on output is not dis-
	abled.  Programs that use  cud1 or  ind  should  avoid these
	capabilities if their value  is linefeed unless they disable
	this mode.  setupterm calls fixterm  after  any  changes  it
	makes.

	vidattr(newmode)
	vidputs(newmode, outc)
	newmode  is  any   combination  of  attributes,  defined  in
	<ncurses.h>.  The proper string to put the terminal  in  the
	given video mode is output.  The routine vidattr() sends the
	output characters  to putchar;  vidputs  sends them  to  the
	given routine  outc,  one character at a time.  That routine
	should therefore  expect one char  parameter.  The  previous
	mode is remembered by this routine.

	tparm(instring, p1, p2, p3, p4, p5, p6, p7, p8, p9)
	tparm is  used  to instantiate a  parameterized string.  The
	character string  returned is  suitable for tputs.  Up to  9
	parameters  can  be passed, in addition to the parameterized
	string.

	tputs(cp, affcnt, outc)
	A string capability,  possibly containing  padding  informa-
	tion, is processed.  Enough padding characters  to delay for
	the specified time replace the  padding  specification,  and
	the  resulting string is passed, one character at a time, to
	the routine outc, which should expect one character  parame-
	ter.  (This routine  often just  calls putchar.)   cp is the
	capability string.  affcnt is the number of  units  affected
	by the capability, which varies with the particular capabil-
	ity. (For example,  the affcnt for insert_line is the number
	of lines below the inserted line on the screen, that is, the
	number of lines that will have to be moved by the terminal.)
	affcnt  is used by the padding information of some terminals
	as a multiplication factor.  If the capability does not have
	a factor, the value 1 should be passed.

	putp(str)
	This is a convenient function to output a capability with no
	affcnt.  The string is output to putchar with an  affcnt  of
	1. It  can be used in simple  applications that  do not need
	to process the output of tputs.


	8. Termcap Emulation

	Appendix I: Attributes
	----------------------

	Attributes are used with wattron(),  wattroff(), wattrset(),
	or or'ed  with the  character passed  to waddch().  They are
	defined in <ncurses.h>

        A_ATTRIBUTES	mask chtype for attributes
        A_NORMAL	reset all attributes
        A_STANDOUT	best highlighting mode
        A_UNDERLINE	underline 
        A_REVERSE	reverse video, background and foreground reversed
        A_BLINK		blinking  
        A_DIM		dim or half bright 
        A_BOLD		bold or extra bright
        A_ALTCHARSET	use alternate character set
        A_INVIS		invisible, background same as foreground
        A_PROTECT	I haven't a clue
        A_CHARTEXT	mask chtype for actual character
        A_COLOR		mask for color
        COLOR_PAIR(n)	set color-pair to that stored in n
        PAIR_NUMBER(a)	get color-pair stored in attribute a


	Appendix II: COLORS
	-------------------
	
	Colors are defined in <ncurses.h> are used with init_pair().

	COLOR_BLACK	0
	COLOR_RED	1
	COLOR_GREEN	2
	COLOR_YELLOW	3
	COLOR_BLUE	4
	COLOR_MAGENTA	5
	COLOR_CYAN	6
	COLOR_WHITE	7

	Appendix III: Alternative character sets
	----------------------------------------
	
	ACS variables are used to add line-drawing capability to
	ncurses on terminals that support it. When defined for a
	given terminal (using acs) the A_ALTCHARSET attribute is
	set for that variable, otherwise the default value is
	used. 
	
	ACS_ULCORNER	+
	ACS_LLCORNER	+
	ACS_URCORNER	+
	ACS_LRCORNER	+
	ACS_RTEE	+
	ACS_LTEE	+
	ACS_BTEE	+
	ACS_TTEE	+
	ACS_HLINE	-
	ACS_VLINE	|
	ACS_PLUS	+
	ACS_S1		~	/* scan line 1 */
	ACS_S9		_	/* scan line 9 */
	ACS_DIAMOND	+	/* diamond */
	ACS_CKBOARD	:	/* checker board (stipple) */
	ACS_DEGREE	'	/* degree symbol */
	ACS_PLMINUS	#	/* plus/minus */
	ACS_BULLET	0	/* bullet */
	ACS_LARROW	<	/* arrow pointing left */
	ACS_RARROW	>	/* arrow pointing right */
	ACS_DARROW	v	/* arrow pointing down */
	ACS_UARROW	^	/* arrow pointing up */
	ACS_BOARD	#	/* board of squares */
	ACS_LANTERN	#	/* lantern symbol */
	ACS_BLOCK	#	/* solid square block */


	Appendix IV: Function keys, their codes, and their definition
	-------------------------------------------------------------

	Function keys can return their respective codes if keypad()
	is enabled and they are defined in the terminal's terminfo
	description (assuming the terminal transmits unique sequences
	for the key. They are defined in <ncurses.h>

	KEY_BREAK       0401            /* break key (unreliable) */
	KEY_DOWN        0402            /* The four arrow keys ... */
	KEY_UP          0403
	KEY_LEFT        0404
	KEY_RIGHT       0405            /* ... */
	KEY_HOME        0406            /* Home key (upward+left arrow) */
	KEY_BACKSPACE   0407            /* backspace (unreliable) */
	KEY_F0          0410            /* Function keys.  Space for 64 */
	KEY_F(n)        (KEY_F0+(n))    /* keys is reserved. */
	KEY_DL          0510            /* Delete line */
	KEY_IL          0511            /* Insert line */
	KEY_DC          0512            /* Delete character */
	KEY_IC          0513            /* Insert char or enter insert mode */
	KEY_EIC         0514            /* Exit insert char mode */
	KEY_CLEAR       0515            /* Clear screen */
	KEY_EOS         0516            /* Clear to end of screen */
	KEY_EOL         0517            /* Clear to end of line */
	KEY_SF          0520            /* Scroll 1 line forward */
	KEY_SR          0521            /* Scroll 1 line backwards (reverse) */
	KEY_NPAGE       0522            /* Next page */
	KEY_PPAGE       0523            /* Previous page */
	KEY_STAB        0524            /* Set tab */
	KEY_CTAB        0525            /* Clear tab */
	KEY_CATAB       0526            /* Clear all tabs */
	KEY_ENTER       0527            /* Enter or send (unreliable) */
	KEY_SRESET      0530            /* soft (partial) reset (unreliable) */
	KEY_RESET       0531            /* reset or hard reset (unreliable) */
	KEY_PRINT       0532            /* print or copy */
	KEY_LL          0533            /* home down or bottom (lower left) */

	/* The keypad is arranged like this: */
	/* a1    up    a3   */
	/* left   b2  right  */
	/* c1   down   c3   */

	KEY_A1		0534	/* Upper left of keypad */
	KEY_A3		0535	/* Upper right of keypad */
	KEY_B2		0536	/* Center of keypad */
	KEY_C1		0537	/* Lower left of keypad */
	KEY_C3		0540	/* Lower right of keypad */
	KEY_BTAB	0541	/* Back tab key */
	KEY_BEG		0542	/* beg(inning) key */
	KEY_CANCEL	0543	/* cancel key */
	KEY_CLOSE	0544	/* close key */
	KEY_COMMAND	0545	/* cmd (command) key */
	KEY_COPY	0546	/* copy key */
	KEY_CREATE	0547	/* create key */
	KEY_END		0550	/* end key */
	KEY_EXIT	0551	/* exit key */
	KEY_FIND	0552	/* find key */
	KEY_HELP	0553	/* help key */
	KEY_MARK	0554	/* mark key */
	KEY_MESSAGE	0555	/* message key */
	KEY_MOVE	0556	/* move key */
	KEY_NEXT	0557	/* next object key */
	KEY_OPEN	0560	/* open key */
	KEY_OPTIONS	0561	/* options key */
	KEY_PREVIOUS	0562	/* previous object key */
	KEY_REDO	0563	/* redo key */
	KEY_REFERENCE	0564	/* ref(erence) key */
	KEY_REFRESH	0565	/* refresh key */
	KEY_REPLACE	0566	/* replace key */
	KEY_RESTART	0567	/* restart key */
	KEY_RESUME	0570	/* resume key */
	KEY_SAVE	0571	/* save key */
	KEY_SBEG	0572	/* shifted beginning key */
	KEY_SCANCEL	0573	/* shifted cancel key */
	KEY_SCOMMAND	0574	/* shifted command key */
	KEY_SCOPY	0575	/* shifted copy key */
	KEY_SCREATE	0576	/* shifted create key */
	KEY_SDC		0577	/* shifted delete char key */
	KEY_SDL		0600	/* shifted delete line key */
	KEY_SELECT	0601	/* select key */
	KEY_SEND	0602	/* shifted end key */
	KEY_SEOL	0603	/* shifted clear line key */
	KEY_SEXIT	0604	/* shifted exit key */
	KEY_SFIND	0605	/* shifted find key */
	KEY_SHELP	0606	/* shifted help key */
	KEY_SHOME	0607	/* shifted home key */
	KEY_SIC		0610	/* shifted input key */
	KEY_SLEFT	0611	/* shifted left arrow key */
	KEY_SMESSAGE	0612	/* shifted message key */
	KEY_SMOVE	0613	/* shifted move key */
	KEY_SNEXT	0614	/* shifted next key */
	KEY_SOPTIONS	0615	/* shifted options key */
	KEY_SPREVIOUS	0616	/* shifted prev key */
	KEY_SPRINT	0617	/* shifted print key */
	KEY_SREDO	0620	/* shifted redo key */
	KEY_SREPLACE	0621	/* shifted replace key */
	KEY_SRIGHT	0622	/* shifted right arrow */
	KEY_SRSUME	0623	/* shifted resume key */
	KEY_SSAVE	0624	/* shifted save key */
	KEY_SSUSPEND	0625	/* shifted suspend key */
	KEY_SUNDO	0626	/* shifted undo key */
	KEY_SUSPEND	0627	/* suspend key */
	KEY_UNDO	0630	/* undo key */
	KEY_MAX		0777	/* Maximum curses key */

OpenPOWER on IntegriCloud