Annotation of coherent/a/usr/man/COHERENT/curses, revision 1.1.1.1

1.1       root        1: 
                      2: 
                      3: curses                       Overview                      curses
                      4: 
                      5: 
                      6: 
                      7: 
                      8: Library of screen-handling functions
                      9: 
                     10: 
                     11: curses  is a  set of  routines that allow  you to  manipulate the
                     12: screen in a sophisticated manner.  These routines use the tteerrmmccaapp
                     13: functions to  read information  about the user's  terminal.  This
                     14: allows  you  to  write  programs  that  can  perform  rudimentary
                     15: graphics on a wide variety of terminals.
                     16: 
                     17: curses contains routines that do the following:
                     18: 
                     19: *  Move the cursor about the screen.
                     20: 
                     21: *  Insert text onto the screen, either in normal or reverse video
                     22:    (if supported by the display device).
                     23: 
                     24: *  Read what is typed by the user and display it properly.
                     25: 
                     26: *  Organize  the screen into one or  more rectangular regions, or
                     27:    _w_i_n_d_o_w_s, optionally draw a border around each, and manage each
                     28:    independently.
                     29: 
                     30: curses  organizes  the screen  into  a  two-dimensional array  of
                     31: cells, one cell for  every character that the device can display.
                     32: It maintains in memory an image of the screen, called the curscr.
                     33: A second  image, called the  stdcur, is manipulated  by the user;
                     34: when the  user has finished  a given manipulation,  curses copies
                     35: the changes from the stdcur to the curscr, which results in their
                     36: being displayed on the physical screen.  This act of copying from
                     37: the stdscr to the curscr is called refreshing the screen.  curses
                     38: keeps track of where all changes have begun and ended between one
                     39: refresh and  the next; this lets it rewrite  only the portions of
                     40: the curscr  that the user has changed, and  so speed up rewriting
                     41: of the screen.
                     42: 
                     43: curses records the position of a ``logical cursor'', which points
                     44: to the  position in the  stdscr that is being  manipulated by the
                     45: user, and also records the position of the physical cursor.  Note
                     46: that the  two are  not necessarily  identical: it is  possible to
                     47: manipulate the logical  cursor without repositioning the physical
                     48: cursor, and  vice versa, depending  on the task you  wish to per-
                     49: form.
                     50: 
                     51: Most curses routines  work by manipulating WINDOW object.  WINDOW
                     52: is defined in the header curses.h as follows:
                     53: 
                     54: 
                     55: #define WINDOW _win_st
                     56: struct _win_st {
                     57:      short               _cury, _curx;
                     58:      short               _maxy, _maxx;
                     59:      short               _begy, _begx;
                     60:      short               _flags;
                     61:      short               _ch_off;
                     62: 
                     63: 
                     64: COHERENT Lexicon                                           Page 1
                     65: 
                     66: 
                     67: 
                     68: 
                     69: curses                       Overview                      curses
                     70: 
                     71: 
                     72: 
                     73:      bool                _clear;
                     74:      bool                _leave;
                     75:      bool                _scroll;
                     76:      char                **_y;
                     77:      short               *_firstch;
                     78:      short               *_lastch;
                     79:      struct _win_st      *_nextp, *_orig;
                     80: };
                     81: 
                     82: 
                     83: Type bool is defined in curses.h; an object of this type can hold
                     84: the value of true (nonzero) or false (zero).
                     85: 
                     86: The following describes each WINDOW field in detail.
                     87: 
                     88: _ccuurryy, _ccuurrxx
                     89:           Give the Y and  X positions of the logical cursor.  The
                     90:           upper  left corner  of  the window  is, by  definition,
                     91:           position  0,0.  Note  that curses  by  convention gives
                     92:           positions as  Y/X (column/row)  rather than X/Y,  as is
                     93:           usual elsewhere.
                     94: 
                     95: _mmaaxxyy, _mmaaxxxx
                     96:           Width and height of the window.
                     97: 
                     98: _bbeeggyy, _bbeeggxx
                     99:           Position of  the upper left corner  of the window rela-
                    100:           tive to  the upper left corner  of the physical screen.
                    101:           For example, if  the window's upper left corner is five
                    102:           rows from  the top of  the screen and  ten columns from
                    103:           the left,  then _begy and _begx will be  set to ten and
                    104:           five, respectively.
                    105: 
                    106: _ffllaaggss     One or  more of  the  following flags,  logically OR'd
                    107:           together:
                    108: 
                    109:           _SSUUBBWWIINN -- Window is a sub-window
                    110:           _EENNDDLLIINNEE -- Right edge of window touches edge of the screen
                    111:           _FFUULLLLWWIINN -- Window fills the physical screen
                    112:           _SSCCRROOLLLLWWIINN -- Window touches lower right corner of physical screen
                    113:           _FFUULLLLIINNEE -- Window extends across entire physical screen
                    114:           _SSTTAANNDDOOUUTT -- Write text in reverse video
                    115:           _IINNSSLL -- Line has been inserted into window
                    116:           _DDEELLLL -- Line has been deleted from window
                    117: 
                    118: 
                    119: _cchh_ooffff   Character offset.
                    120: 
                    121: _cclleeaarr    Clear  the physical screen  before next refresh  of the
                    122:           screen.
                    123: 
                    124: _lleeaavvee    Do  not move the  physical cursor after  refreshing the
                    125:           screen.
                    126: 
                    127: 
                    128: 
                    129: 
                    130: COHERENT Lexicon                                           Page 2
                    131: 
                    132: 
                    133: 
                    134: 
                    135: curses                       Overview                      curses
                    136: 
                    137: 
                    138: 
                    139: _ssccrroollll   Enable scrolling for this window.
                    140: 
                    141: _yy        Pointer to an array of pointers to the character arrays
                    142:           that hold the window's text.
                    143: 
                    144: _ffiirrssttcchh  Pointer  to an array of integers, one  for each line in
                    145:           the window,  whose value is the  first character in the
                    146:           line to  have been altered by the user.   If a line has
                    147:           not been  changed, then its corresponding  entry in the
                    148:           array is set to _NNOOCCHHAANNGGEE.
                    149: 
                    150: _llaassttcchh    Same as  _ffiirrssttcchh, except that  it indicates  the last
                    151:           character to have been changed on the line.
                    152: 
                    153: _nneexxttpp    Point to next window.
                    154: 
                    155: _oorriigg     Point to parent window.
                    156: 
                    157: When curses  is first  invoked, it  defines the entire  screen as
                    158: being one  large window.  The  programmer has the  choice of sub-
                    159: dividing an existing window  or creating new windows; when a win-
                    160: dow is  subdivided, it shares the same curscr  as its parent win-
                    161: dow, whereas a new window has its own stdscr.
                    162: 
                    163: Mark Williams Company will document its curses library in full in
                    164: a later  release of this  manual.  The following  table, however,
                    165: summarizes the functions  and macros that that compose the curses
                    166: library.
                    167: 
                    168: aaddddcchh(_c_h) cchhaarr _c_h;
                    169:      Insert a character into stdscr.
                    170: 
                    171: aaddddssttrr(_s_t_r) cchhaarr *_s_t_r;
                    172:      Insert a string into stdscr.
                    173: 
                    174: bbooxx(_w_i_n, _v_e_r_t, _h_o_r) WWIINNDDOOWW *_w_i_n; cchhaarr _v_e_r_t, _h_o_r;
                    175:      Draw a box.  vert is the character used to draw the vertical
                    176:      lines, and  hor is used  to draw the  horizontal lines.  For
                    177:      example
                    178: 
                    179:           box(win, '|', '-');
                    180: 
                    181:      draws a box around window  win, using `|' to draw the verti-
                    182:      cal lines and `-' to draw the horizontal lines.
                    183: 
                    184: cclleeaarr()
                    185:      Clear the stdscr.
                    186: 
                    187: cclleeaarrookk(_w_i_n,_b_f) WWIINNDDOOWW *_w_i_n; bbooooll _b_f;
                    188:      Set  the clear  flag for  window win.   This will  clear the
                    189:      screen at the next refresh, but not reset the window.
                    190: 
                    191: ccllrrttoobboott()
                    192:      Clear from the position  of the logical cursor to the bottom
                    193:      of the window.
                    194: 
                    195: 
                    196: COHERENT Lexicon                                           Page 3
                    197: 
                    198: 
                    199: 
                    200: 
                    201: curses                       Overview                      curses
                    202: 
                    203: 
                    204: 
                    205: 
                    206: ccllrrttooeeooll()
                    207:      Clear from the logical cursor to the end of the line.
                    208: 
                    209: ccrrmmooddee()
                    210:      Turn  on  control-character mode;  i.e.,  force terminal  to
                    211:      receive cooked input.
                    212: 
                    213: ddeellcchh()
                    214:      Delete  a  character  from stdscr;  shift  the  rest of  the
                    215:      characters on the line one position to the left.
                    216: 
                    217: ddeelleetteellnn()
                    218:      Delete all  of the  current line; shift  up the rest  of the
                    219:      lines in the window.
                    220: 
                    221: ddeellwwiinn(_w_i_n) WWIINNDDOOWW *_w_i_n;
                    222:      Delete window win.
                    223: 
                    224: eecchhoo()
                    225:      Turn on  both physical and logical  echoing; i.e., character
                    226:      are automatically inserted  into the current window and onto
                    227:      the physical screen.
                    228: 
                    229: eennddwwiinn()
                    230:      Terminate text processing with curses.
                    231: 
                    232: eerraassee()
                    233:      Erase a window; do not clear the screen.
                    234: 
                    235: ggeettcchh()
                    236:      Read a character from the terminal.
                    237: 
                    238: ggeettssttrr(_s_t_r) cchhaarr *_s_t_r;
                    239:      Read a string from the terminal.
                    240: 
                    241: ggeettyyxx(_w_i_n,_y,_x) WWIINNDDOOWW *_w_i_n; sshhoorrtt _y,_x;
                    242:      Read the position of the  logical cursor in win and store it
                    243:      in y,x.  Note that this is a macro, and due to its construc-
                    244:      tion the variables y and x must be integers, not pointers to
                    245:      integers.
                    246: 
                    247: iinncchh()
                    248:      Read the  character pointed to by  the stdscr's logical cur-
                    249:      sor.
                    250: 
                    251: WWIINNDDOOWW *iinniittssccrr()
                    252:      Initialize curses.
                    253: 
                    254: iinnsscchh(_c_h) cchhaarr _c_h;
                    255:      Insert character ch into the stdscr.
                    256: 
                    257: iinnsseerrttllnn()
                    258:      Insert a blank line into stdscr, above the current line.
                    259: 
                    260: 
                    261: 
                    262: COHERENT Lexicon                                           Page 4
                    263: 
                    264: 
                    265: 
                    266: 
                    267: curses                       Overview                      curses
                    268: 
                    269: 
                    270: 
                    271: lleeaavveeookk(_w_i_n,_b_f) WWIINNDDOOWW *_w_i_n; bbooooll _b_f;
                    272:      Set _leave in win to bf.
                    273: 
                    274: cchhaarr *lloonnggnnaammee(_t_e_r_m_b_u_f, _n_a_m_e) cchhaarr *_t_e_r_m_b_u_f, *_n_a_m_e;
                    275:      Copy the long name for the terminal from termbuf into name.
                    276: 
                    277: mmoovvee(_y,_x) sshhoorrtt _y,_x;
                    278:      Move logical cursor to position y,x in stdscr.
                    279: 
                    280: mmvvaaddddbbyytteess(_y,_x,_d_a,_c_o_u_n_t) iinntt _y,_x; cchhaarr *_d_a; iinntt _c_o_u_n_t;
                    281:      Move to  position y,x and print count  bytes from the string
                    282:      pointed to by da.
                    283: 
                    284: mmvvaaddddcchh(_y,_x,_c_h) sshhoorrtt _y,_x; cchhaarr _c_h;
                    285:      Move the logical cursor to position y,x and insert character
                    286:      ch.
                    287: 
                    288: mmvvaaddddssttrr(_y,_x,_s_t_r) sshhoorrtt _y,_x; cchhaarr *_s_t_r;
                    289:      Move the  logical cursor to  position y,x and  insert string
                    290:      str.
                    291: 
                    292: mmvvccuurr(_y__c_u_r,_x__c_u_r,_y__n_e_w,_x__n_e_w) iinntt _y__c_u_r, _x__c_u_r, _y__n_e_w, _x__n_e_w;
                    293:      Move   cursor   from   position  y_cur,x_cur   to   position
                    294:      y_new,x_new.
                    295: 
                    296: mmvvddeellcchh(_y,_x) sshhoorrtt _y,_x;
                    297:      Move to position y,x and delete the character found there.
                    298: 
                    299: mmvvggeettcchh(_y,_x) sshhoorrtt _y,_x;
                    300:      Move to position y,x and get a character through stdscr.
                    301: 
                    302: mmvvggeettssttrr(_y,_x,_s_t_r) sshhoorrtt _y,_x; cchhaarr *_s_t_r;
                    303:      Move to position y,x,  get a string through stdscr, and copy
                    304:      it into string.
                    305: 
                    306: mmvviinncchh(_y,_x) sshhoorrtt _y,_x;
                    307:      Move to position y,x and get the character found there.
                    308: 
                    309: mmvviinnsscchh(_y,_x,_c_h) sshhoorrtt _y,_x; cchhaarr _c_h;
                    310:      Move to position y,x and insert a character into stdscr.
                    311: 
                    312: mmvvwwaaddddbbyytteess(_w_i_n,_y,_x,_d_a,_c_o_u_n_t) WWIINNDDOOWW *_w_i_n; iinntt _y,_x; cchhaarr *_d_a; iinntt
                    313:      _c_o_u_n_t;
                    314:      Move to  position y,x and print count  bytes from the string
                    315:      pointed to by da into window win.
                    316: 
                    317: mmvvwwaaddddcchh(_w_i_n,_y,_x,_c_h) WWIINNDDOOWW *_w_i_n; iinntt _y,_x; cchhaarr _c_h;
                    318:      Move  to position  y,x and insert  character ch  into window
                    319:      win.
                    320: 
                    321: mmvvwwaaddddssttrr(_w_i_n,_y,_x,_s_t_r) WWIINNDDOOWW *_w_i_n; sshhoorrtt _y,_x; cchhaarr *_s_t_r;
                    322:      Move to position y,x and insert character ch.
                    323: 
                    324: mmvvwwddeellcchh(_w_i_n,_y,_x) WWIINNDDOOWW *_w_i_n; iinntt _y,_x;
                    325:      Move  to position  y,x and delete  character ch  from window
                    326: 
                    327: 
                    328: COHERENT Lexicon                                           Page 5
                    329: 
                    330: 
                    331: 
                    332: 
                    333: curses                       Overview                      curses
                    334: 
                    335: 
                    336: 
                    337:      win.
                    338: 
                    339: mmvvwwggeettcchh(_w_i_n,_y,_x) WWIINNDDOOWW *_w_i_n; sshhoorrtt _y,_x;
                    340:      Move to position y,x and get a character.
                    341: 
                    342: mmvvwwggeettssttrr(_w_i_n,_y,_x,_s_t_r) WWIINNDDOOWW *_w_i_n; sshhoorrtt _y,_x; cchhaarr *_s_t_r;
                    343:      Move to position y,x, get a string, and write it into str.
                    344: 
                    345: mmvvwwiinn(_w_i_n,_y,_x) WWIINNDDOOWW *_w_i_n; iinntt _y,_x;
                    346:      Move window win to position y,x.
                    347: 
                    348: mmvvwwiinncchh(_w_i_n,_y,_x) WWIINNDDOOWW *_w_i_n; sshhoorrtt _y,_x;
                    349:      Move to position y,x and get character found there.
                    350: 
                    351: mmvvwwiinnsscchh(_w_i_n,_y,_x,_c_h) WWIINNDDOOWW *_w_i_n; sshhoorrtt _y,_x; cchhaarr _c_h;
                    352:      Move to position y,x and insert character ch there.
                    353: 
                    354: WWIINNDDOOWW *nneewwwwiinn(lliinneess, ccoollss, yy11, xx11) iinntt _l_i_n_e_s, _c_o_l_s, _y_1, _x_1;
                    355:      Create a  new window.  The  new window is  lines lines high,
                    356:      cols columns  wide, with  the upper-left corner  at position
                    357:      y1,x1.
                    358: 
                    359: nnll()  Turn  on  newline  mode;  i.e.,  force terminal  to  output
                    360:      <newline> after <linefeed>.
                    361: 
                    362: nnooccrrmmooddee()
                    363:      Turn off control-character mode; i.e., force terminal to ac-
                    364:      cept raw input.
                    365: 
                    366: nnooeecchhoo()
                    367:      Turn off echo mode.
                    368: 
                    369: nnoonnll()
                    370:      Turn off newline mode.
                    371: 
                    372: nnoorraaww()
                    373:      Turn off raw mode.
                    374: 
                    375: oovveerrllaayy(_w_i_n_1,_w_i_n_2) WWIINNDDOOWW *_w_i_n_1, _w_i_n_2;
                    376:      Copy  all  characters,  except  spaces, from  their  current
                    377:      positions in win1 to identical positions in win2.
                    378: 
                    379: oovveerrwwrriittee(_w_i_n_1,_w_i_n_2) WWIINNDDOOWW *_w_i_n_1, _w_i_n_2;
                    380:      Copy all  characters, including  spaces, from win1  to their
                    381:      identical positions in win2.
                    382: 
                    383: pprriinnttww(_f_o_r_m_a_t[,_a_r_g_1,..._a_r_g_N])    cchhaarr   *_f_o_r_m_a_t;    [_d_a_t_a   _t_y_p_e]
                    384:      _a_r_g_1,.._a_r_g_N;
                    385:      Print formatted text on the standard screen.
                    386: 
                    387: rraaww()
                    388:      Turn  on raw  mode; i.e.,  kernel does  not process  what is
                    389:      typed at the keyboard, but passes it directly to curses.  In
                    390:      normal (or _c_o_o_k_e_d) mode, the kernel intercepts and processes
                    391:      the  control characters  <ctrl-C>,  <ctrl-S>, <ctrl-Q>,  and
                    392: 
                    393: 
                    394: COHERENT Lexicon                                           Page 6
                    395: 
                    396: 
                    397: 
                    398: 
                    399: curses                       Overview                      curses
                    400: 
                    401: 
                    402: 
                    403:      <ctrl-Y>.  See the entry for stty for more information.
                    404: 
                    405: rreeffrreesshh()
                    406:      Copy the contents of stdscr to the physical screen.
                    407: 
                    408: rreesseettttyy()
                    409:      Reset the terminal flags to values stored by earlier call to
                    410:      savetty.
                    411: 
                    412: ssaavveettttyy()
                    413:      Save the current terminal settings.
                    414: 
                    415: ssccaannww(_f_o_r_m_a_t[,_a_r_g_1,..._a_r_g_N])    cchhaarr    *_f_o_r_m_a_t;   [_d_a_t_a    _t_y_p_e]
                    416:      _a_r_g_1,.._a_r_g_N;
                    417:      Read the standard input; translate what is read into the ap-
                    418:      propriate data type.
                    419: 
                    420: ssccrroollll(_w_i_n) WWIINNDDOOWW *_w_i_n;
                    421:      Scroll win up by one line.
                    422: 
                    423: ssccrroollllookk(_w_i_n,_b_f) WWIINNDDOOWW *_w_i_n; bbooooll _b_f;
                    424:      Permit  or forbid  scrolling of  window win,  depending upon
                    425:      whether bf is set to true or false.
                    426: 
                    427: ssttaannddeenndd()
                    428:      Turn off standout mode.
                    429: 
                    430: ssttaannddoouutt()
                    431:      Turn on  standout mode for  text.  Usually, this  means that
                    432:      text will be displayed in reverse video.
                    433: 
                    434: WWIINNDDOOWW *ssuubbwwiinn(_w_i_n,_l_i_n_e_s,_c_o_l_s,_y_1,_x_1) iinntt _w_i_n,_l_i_n_e_s,_c_o_l_s,_y_1,_x_1;
                    435:      Create a sub-window  in window win.  New sub-window is lines
                    436:      lines  high, cols  columns wide,  and  is fixed  at position
                    437:      y1,x1.  Note that the position is relative to the upper-left
                    438:      corner of the physical screen.
                    439: 
                    440: ttoouucchhwwiinn(_w_i_n) WWIINNDDOOWW *_w_i_n;
                    441:      Copy all characters in window win to the screen.
                    442: 
                    443: wwaaddddcchh(_w_i_n,_c_h) WWIINNDDOOWW *_w_i_n; cchhaarr _c_h;
                    444:      Add character ch win.
                    445: 
                    446: wwaaddddssttrr(_w_i_n,_s_t_r) WWIINNDDOOWW *_w_i_n; cchhaarr *_s_t_r;
                    447:      Add the string pointed to by str to window win.
                    448: 
                    449: wwcclleeaarr(_w_i_n) WWIINNDDOOWW *_w_i_n;
                    450:      Clear window  win.  Move cursor to position  0,0 and set the
                    451:      screen's clear flag.
                    452: 
                    453: wwccllrrttoobboott(_w_i_n) WWIINNDDOOWW *_w_i_n;
                    454:      Clear window win from current position to the bottom.
                    455: 
                    456: wwccllrrttooeeooll(_w_i_n) WWIINNDDOOWW *_w_i_n;
                    457:      Clear window win from the current position to the end of the
                    458: 
                    459: 
                    460: COHERENT Lexicon                                           Page 7
                    461: 
                    462: 
                    463: 
                    464: 
                    465: curses                       Overview                      curses
                    466: 
                    467: 
                    468: 
                    469:      line.
                    470: 
                    471: wwddeellcchh(_w_i_n) WWIINNDDOOWW *_w_i_n;
                    472:      Delete the character  at the current position in window win;
                    473:      shift all  remaining characters to the  right of the current
                    474:      position one position left.
                    475: 
                    476: wwddeelleetteellnn(_w_i_n) WWIINNDDOOWW *_w_i_n;
                    477:      Delete the  current line  and shift  all lines below  it one
                    478:      line up.
                    479: 
                    480: wweerraassee(_w_i_n) WWIINNDDOOWW *_w_i_n;
                    481:      Clear window  win.  Move the  cursor to position  0,0 but do
                    482:      not set the screen's clear flag.
                    483: 
                    484: wwggeettcchh(_w_i_n) WWIINNDDOOWW *_w_i_n;
                    485:      Read one character from the standard input.
                    486: 
                    487: wwggeettssttrr(_w_i_n,_s_t_r) WWIINNDDOOWW *_w_i_n; cchhaarr *_s_t_r;
                    488:      Read a string from the  standard input; write it in the area
                    489:      pointed to by str.
                    490: 
                    491: wwiinncchh(_w_i_n) WWIINNDDOOWW *_w_i_n;
                    492:      Force  the next  call  to refresh()  to  rewrite the  entire
                    493:      screen.
                    494: 
                    495: wwiinnsscchh(_w_i_n,_c_h) WWIINNDDOOWW *_w_i_n; cchhaarr _c_h;
                    496:      Insert character ch into window win at the current position.
                    497:      Shift all existing characters one position to the right.
                    498: 
                    499: wwiinnsseerrttllnn(_w_i_n) WWIINNDDOOWW *_w_i_n;
                    500:      Insert a blank line into window win at the current position.
                    501:      Move all lines down by one position.
                    502: 
                    503: wwmmoovvee(_w_i_n,_y,_x) WWIINNDDOOWW *_w_i_n; iinntt _y, _x;
                    504:      Move current position in the window win to position y,x.
                    505: 
                    506: wwpprriinnttww(_w_i_n,_f_o_r_m_a_t[,_a_r_g_1,..._a_r_g_N])  WWIINNDDOOWW  *_w_i_n;  cchhaarr  *_f_o_r_m_a_t;
                    507:      [_d_a_t_a _t_y_p_e] aarrgg11,..aarrggNN;
                    508:      Format text  and print it to the  current position in window
                    509:      win.
                    510: 
                    511: wwrreeffrreesshh(_w_i_n) WWIINNDDOOWW *_w_i_n;
                    512:      Refresh a window.
                    513: 
                    514: wwssccaannww(_w_i_n,_f_o_r_m_a_t[,_a_r_g_1,..._a_r_g_N])  WWIINNDDOOWW   *_w_i_n;  cchhaarr  *_f_o_r_m_a_t;
                    515:      [_d_a_t_a _t_y_p_e] _a_r_g_1,.._a_r_g_N;
                    516:      Read standard input from the current position in window win,
                    517:      format it, and store it in the indicated places.
                    518: 
                    519: wwssttaannddeenndd(_w_i_n) WWIINNDDOOWW *_w_i_n;
                    520:      Turn off standout (reverse video) mode for window win.
                    521: 
                    522: wwssttaannddoouutt(_w_i_n) WWIINNDDOOWW *_w_i_n;
                    523:      Turn on standout (reverse video) mode for window win.
                    524: 
                    525: 
                    526: COHERENT Lexicon                                           Page 8
                    527: 
                    528: 
                    529: 
                    530: 
                    531: curses                       Overview                      curses
                    532: 
                    533: 
                    534: 
                    535: 
                    536: These routines  are declared and defined in  the header file cur-
                    537: ses.h.
                    538: 
                    539: ***** Structure of a curses Program *****
                    540: 
                    541: To use  the curses routines,  a program must  included the header
                    542: file curses.h, which  declares and defines the functions and mac-
                    543: ros that comprise the curses library.
                    544: 
                    545: Before  a program  can perform any  graphics operations,  it must
                    546: call the function initscr() to initialize the curses environment.
                    547: Then, the program must call cmdwind() to open the curscr.
                    548: 
                    549: As noted  above, curses manipulates text in a  copy of the screen
                    550: that  it maintains  in memory.  After  a program  has manipulated
                    551: text,  it must  call  refresh() to  copy  these alterations  from
                    552: memory to the physical  screen.  (This is done because writing to
                    553: the screen  is slow; this  scheme permits mass  alterations to be
                    554: made to copy in memory, then written to the screen in a batch.)
                    555: 
                    556: Finally, when  the program has  finished working with  curses, it
                    557: must call the  function endwin().  This frees memory allocated by
                    558: curses,  and   generally  closes  down   the  curses  environment
                    559: gracefully.
                    560: 
                    561: ***** Example *****
                    562: 
                    563: The following  program, called  curexample.c, gives a  simple ex-
                    564: ample of  programming with curses.  To  compile this program, use
                    565: the command line:
                    566: 
                    567: 
                    568:      cc curexample.c -lcurses -lterm
                    569: 
                    570: 
                    571: Note that order in which the libraries are called is significant.
                    572: 
                    573: When this  program is run,  it clears the screen,  then waits for
                    574: you to  type a Y coordinate,  a space, and then  an X coordinate.
                    575: Note that these  do not echo on the screen.   It moves the cursor
                    576: to the  requested coordinates, and there  display any non-numeric
                    577: string that you type.   If you type numerals, curexample will as-
                    578: sume that  you wish  to move  the cursor to  a new  location.  To
                    579: exit, type <ctrl-C>.
                    580: 
                    581: 
                    582: #include <ascii.h>
                    583: #include <ctype.h>
                    584: #include <curses.h>
                    585: 
                    586: 
                    587: 
                    588: 
                    589: 
                    590: 
                    591: 
                    592: COHERENT Lexicon                                           Page 9
                    593: 
                    594: 
                    595: 
                    596: 
                    597: curses                       Overview                      curses
                    598: 
                    599: 
                    600: 
                    601: #define NORMAL 0
                    602: #define INY  1
                    603: #define INX  2
                    604: 
                    605: 
                    606: 
                    607: main()
                    608: {
                    609:      int c, y, x, state;
                    610: 
                    611: 
                    612: 
                    613:      initscr();          /* initialize curses */
                    614:      noecho();
                    615:      raw();
                    616: 
                    617: 
                    618: 
                    619:      clear();
                    620:      move(0, 0);
                    621: 
                    622: 
                    623: 
                    624:      for(state = NORMAL;;) {
                    625:                          refresh();
                    626:                          c = getch();
                    627:                          if(isdigit(c)) {
                    628: 
                    629: 
                    630: 
                    631:                          switch (state) {
                    632:                          case NORMAL:
                    633:                           y = x = 0;
                    634:                           state = INY;
                    635:                          case INY:
                    636:                           y *= 10;
                    637:                           y += c - '0';
                    638:                           break;
                    639:                          case INX:
                    640:                           x *= 10;
                    641:                           x += c - '0';
                    642:                          }
                    643:                          } else {
                    644: 
                    645: 
                    646: 
                    647:                          if (c == A_ETX) { /* ctl-c */
                    648:                           noraw();
                    649:                           echo();
                    650:                           endwin();
                    651:                           exit(0);
                    652:                          }
                    653: 
                    654: 
                    655: 
                    656: 
                    657: 
                    658: COHERENT Lexicon                                          Page 10
                    659: 
                    660: 
                    661: 
                    662: 
                    663: curses                       Overview                      curses
                    664: 
                    665: 
                    666: 
                    667: 
                    668:                          switch (state) {
                    669:                          case INX:
                    670:                           state = NORMAL;
                    671:                           move(y, x);
                    672:                          case NORMAL:
                    673:                           addch(c);
                    674:                           break;
                    675:                          case INY:
                    676:                           state = INX;
                    677:                          }
                    678:                          }
                    679:      }
                    680: }
                    681: 
                    682: 
                    683: ***** See Also *****
                    684: 
                    685: curses.h, libraries, termcap
                    686: Strang J: _P_r_o_g_r_a_m_m_i_n_g  _w_i_t_h _c_u_r_s_e_s. Sebastopol, Calif, O'Reilly &
                    687: Associates Inc., 1986.
                    688: 
                    689: ***** Notes *****
                    690: 
                    691: curses  is  copyrighted  by  the  Regents  of the  University  of
                    692: California.
                    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: COHERENT Lexicon                                          Page 11
                    725: 
                    726: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.