home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume1 / 8708 / pc-curses / 2 < prev    next >
Encoding:
Text File  |  1987-08-28  |  52.8 KB  |  1,380 lines

  1. Article 186 of comp.sources.misc:
  2. Relay-Version: version B 2.10.3 alpha 5/22/85; site osu-eddie.UUCP
  3. Path: osu-eddie!cbosgd!clyde!ima!necntc!ncoast!allbery
  4. From: bl@infovax.UUCP (Bj|rn Larsson)
  5. Newsgroups: comp.sources.misc
  6. Subject: PCcurses shar 2
  7. Message-ID: <4270@ncoast.UUCP>
  8. Date: 26 Aug 87 22:52:40 GMT
  9. Date-Received: 27 Aug 87 12:24:34 GMT
  10. Sender: allbery@ncoast.UUCP
  11. Lines: 1363
  12. Approved: allbery@ncoast.UUCP
  13. X-Archive: comp.sources.misc/8708/pc-curses/2
  14.  
  15. # This is a shar archive.
  16. # Remove everything above this line.
  17. # Run the file through sh, not csh.
  18. # (type `sh pccurses.sh.2')
  19. echo extracting - curses.cmd
  20. sed 's/^X//' > curses.cmd << 'FRIDAY_NIGHT'
  21. Xtmp
  22. Xy
  23. Xattrib.obj    &
  24. X+beep.obj     &
  25. X+boxes.obj    &
  26. X+charadd.obj  &
  27. X+chardel.obj  &
  28. X+charget.obj  &
  29. X+charins.obj  &
  30. X+charpick.obj &
  31. X+clrtobot.obj &
  32. X+clrtoeol.obj &
  33. X+cursesio.obj &
  34. X+endwin.obj   &
  35. X+initscr.obj  &
  36. X+linedel.obj  &
  37. X+lineins.obj  &
  38. X+longname.obj &
  39. X+move.obj     &
  40. X+mvcursor     &
  41. X+newwin.obj   &
  42. X+options.obj  &
  43. X+overlay.obj  &
  44. X+prntscan.obj &
  45. X+refresh.obj  &
  46. X+scrreg.obj   &
  47. X+setterm.obj  &
  48. X+stradd.obj   &
  49. X+strget.obj   &
  50. X+tabsize.obj  &
  51. X+termmisc.obj &
  52. X+unctrl.obj   &
  53. X+update.obj   &
  54. X+winclear.obj &
  55. X+windel.obj   &
  56. X+winerase.obj &
  57. X+winmove.obj  &
  58. X+winscrol.obj &
  59. X+wintouch.obj
  60. Xnul
  61. FRIDAY_NIGHT
  62. echo extracting - curses.h
  63. sed 's/^X//' > curses.h << 'FRIDAY_NIGHT'
  64. X/****************************************************************/
  65. X/*                CURSES.H                */
  66. X/* Header file for definitions and declarations for the        */
  67. X/* PCcurses package. This should be #include'd in all user    */
  68. X/* programs.                            */
  69. X/****************************************************************/
  70. X/* This version of curses is based on ncurses, a curses version    */
  71. X/* originally written by Pavel Curtis at Cornell University.    */
  72. X/* I have made substantial changes to make it run on IBM PC's,    */
  73. X/* and therefore consider myself free to make it public domain.    */
  74. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  75. X/****************************************************************/
  76. X/* 1.0:    Release:                    870515    */
  77. X/****************************************************************/
  78. X
  79. X/* general definitions */
  80. X
  81. X#define     TRUE        1        /* booleans */
  82. X#define     FALSE        0
  83. X#define     ERR        1        /* general error flag */
  84. X#define     OK        0        /* general OK flag */
  85. X
  86. X/* functions defined as macros */
  87. X
  88. X#define getch()       wgetch(stdscr)    /* using macroes allows you to use */
  89. X#define    ungetch(c) wungetch(c)        /* #undef getch/ungetch in your */
  90. X                    /* programs to use MSC getch() and */
  91. X                    /* ungetch() routines */
  92. X
  93. X#define getyx(win,y,x)       (y = (win)->_cury, x = (win)->_curx)
  94. X
  95. X#ifndef max
  96. X#define max(a,b) (((a) > (b)) ? (a) : (b))
  97. X#endif
  98. X#ifndef min
  99. X#define min(a,b) (((a) < (b)) ? (a) : (b))
  100. X#endif
  101. X
  102. X/* video attribute definitions */
  103. X
  104. X#define    A_ALTCHARSET   0
  105. X#define    A_BLINK        0x100
  106. X#define    A_BLANK        0x200
  107. X#define    A_BOLD         0x400
  108. X#define    A_DIM          0
  109. X#define    A_PROTECT      0
  110. X#define    A_REVERSE      0x800
  111. X#define    A_STANDOUT     0x1000
  112. X#define    A_UNDERLINE    0x2000
  113. X
  114. X/* function and keypad key definitions */
  115. X
  116. X#define KEY_BREAK      0x101        /* Not on PC */
  117. X#define KEY_DOWN       0x102        /* The four arrow keys */
  118. X#define KEY_UP         0x103
  119. X#define KEY_LEFT       0x104
  120. X#define KEY_RIGHT      0x105
  121. X#define KEY_HOME       0x106        /* Home key (upward+left arrow) */
  122. X#define KEY_BACKSPACE  0x107        /* Not on PC */
  123. X#define KEY_F0         0x108        /* Function keys. Space for */
  124. X#define KEY_F(n)       (KEY_F0+(n)) /*  64 keys is reserved. */
  125. X#define KEY_DL         0x148        /* Not on PC */
  126. X#define KEY_IL         0x149        /* Insert line */
  127. X#define KEY_DC         0x14a        /* Delete character */
  128. X#define KEY_IC         0x14b        /* Insert char or enter insert mode */
  129. X#define KEY_EIC        0x14c        /* Exit insert char mode */
  130. X#define KEY_CLEAR      0x14d        /* Clear screen */
  131. X#define KEY_EOS        0x14e        /* Clear to end of screen */
  132. X#define KEY_EOL        0x14f        /* Clear to end of line */
  133. X#define KEY_SF         0x150        /* Scroll 1 line forward */
  134. X#define KEY_SR         0x151        /* Scroll 1 line backwards (reverse) */
  135. X#define KEY_NPAGE      0x152        /* Next page */
  136. X#define KEY_PPAGE      0x153        /* Previous page */
  137. X#define KEY_STAB       0x154        /* Set tab */
  138. X#define KEY_CTAB       0x155        /* Clear tab */
  139. X#define KEY_CATAB      0x156        /* Clear all tabs */
  140. X#define KEY_ENTER      0x157        /* Enter or send (unreliable) */
  141. X#define KEY_SRESET     0x158        /* soft (partial) reset (unreliable) */
  142. X#define KEY_RESET      0x159        /* reset or hard reset (unreliable) */
  143. X#define KEY_PRINT      0x15a        /* print or copy */
  144. X#define KEY_LL         0x15b        /* home down or bottom (lower left) */
  145. X#define KEY_ABORT      0x15c        /*  Abort/Terminate key (any) */
  146. X#define KEY_SHELP      0x15d        /* Short help */
  147. X#define KEY_LHELP      0x15e        /* Long help */
  148. X
  149. X/* type declarations */
  150. X
  151. Xtypedef    char    bool;            /* boolean type */
  152. X
  153. Xtypedef struct
  154. X  {
  155. X  int       _cury;            /* current pseudo-cursor */
  156. X  int       _curx;
  157. X  int      _maxy;            /* max coordinates */
  158. X  int      _maxx;
  159. X  int      _begy;            /* origin on screen */
  160. X  int      _begx;
  161. X  int       _flags;            /* window properties */
  162. X  int       _attrs;            /* attributes of written characters */
  163. X  int      _tabsize;            /* tab character size */
  164. X  bool       _clear;            /* causes clear at next refresh */
  165. X  bool       _leave;            /* leaves cursor as it happens */
  166. X  bool       _scroll;            /* allows window scrolling */
  167. X  bool       _nodelay;            /* input character wait flag */
  168. X  bool       _keypad;            /* flags keypad key mode active */
  169. X  int    **_line;            /* pointer to line pointer array */
  170. X  int      *_minchng;            /* First changed character in line */
  171. X  int      *_maxchng;            /* Last changed character in line */
  172. X  int       _regtop;            /* Top/bottom of scrolling region */
  173. X  int       _regbottom;
  174. X  }    WINDOW;
  175. X
  176. X/* External variables */
  177. X
  178. Xextern    int    LINES;            /* terminal height */
  179. Xextern    int    COLS;            /* terminal width */
  180. Xextern    WINDOW *curscr;            /* the current screen image */
  181. Xextern    WINDOW *stdscr;            /* the default screen window */
  182. X
  183. X/* PCcurses function declarations */
  184. X
  185. Xextern    int     addch();        /* put char in stdscr */
  186. Xextern    int     addstr();        /* put string in stdscr */
  187. Xextern    void     attrset();        /* set stdscr char attributes */
  188. Xextern    void     attroff();        /* clear attribute(a) stdscr */
  189. Xextern    void     attron();        /* add attribute(s) stdscr */
  190. Xextern    int     baudrate();        /* compatibility dummy */
  191. Xextern    void     beep();        /* sound bell */
  192. Xextern    void     box();            /* draw a box around a window */
  193. Xextern    void     cbreak();        /* set terminal cbreak mode */
  194. Xextern    void     clear();        /* clear stdscr */
  195. Xextern    void     clearok();        /* marks a window for screen clear */
  196. Xextern    int     clrtobot();        /* clear end of stdscr */
  197. Xextern    int     clrtoeol();        /* clear end of line in stdscr */
  198. Xextern    void     crmode();        /* set terminal cbreak mode */
  199. Xextern    void     cursoff();        /* turns off hardware cursor */
  200. Xextern    void     curson();        /* turns on hardware cursor */
  201. Xextern    int     delch();        /* delete a char in stdscr */
  202. Xextern    int     deleteln();        /* delete a line in stdscr */
  203. Xextern    void     delwin();        /* delete a window or a subwindow */
  204. Xextern  void     doupdate();        /* update physical screen */
  205. Xextern    void     echo();        /* set terminal echo mode */
  206. Xextern    int     endwin();        /* cleanup and finitialization */
  207. Xextern    void     erase();        /* erase stdscr */
  208. Xextern    int     erasechar();        /* return char kill character */
  209. Xextern    int     fixterm();        /* compatibility dummy */
  210. Xextern    void     flash();        /* flash terminal screen */
  211. Xextern    void     flushinp();        /* kill pending keyboard input */
  212. Xextern  int     getstr();        /* get string to stdscr and buffer */
  213. Xextern    int     gettmode();        /* compatibility dummy */
  214. Xextern    void     idlok();        /* use ins/del line (dummy) */
  215. Xextern    int     initscr();        /* curses initialization */
  216. Xextern  int     inch();        /* get char at stdscr cursor */
  217. Xextern    int     insch();        /* insert character in stdscr */
  218. Xextern    int     insertln();        /* insert new line in stdscr */
  219. Xextern    void     keypad();        /* marks a window for keypad usage */
  220. Xextern    int     killchar();        /* return line kill character */
  221. Xextern    char    *longname();        /* terminal description */
  222. Xextern    void     leaveok();        /* marks window for cursor 'leave' */
  223. Xextern    void     meta();        /* marks window for meta (dummy) */
  224. Xextern    int     move();        /* move cursor in stdscr */
  225. Xextern    int     mvaddch();        /* move & put char in stdscr */
  226. Xextern    int     mvaddstr();        /* move & put string in stdscr */
  227. Xextern    int     mvclrtobot();        /* move & clear end of stdscr */
  228. Xextern    int     mvclrtoeol();        /* move & clear lineend in stdscr */
  229. Xextern    int     mvcur();        /* move terminal cursor */
  230. Xextern    int     mvdelch();        /* move & delete a char in stdscr */
  231. Xextern    int     mvdeleteln();        /* move & delete a line in stdscr */
  232. Xextern    int     mvgetch();        /* move & get char to stdscr */
  233. Xextern    int     mvgetstr();        /* move & get string to stdscr */
  234. Xextern    int     mvinch();        /* move & get char at stdscr cursor */
  235. Xextern    int     mvinsch();        /* move & insert char in stdscr */
  236. Xextern    int     mvinsertln();        /* move & insert new line in stdscr */
  237. Xextern    int     mvprintw();        /* move & print string in stdscr */
  238. Xextern    int     mvscanw();        /* move & get values via stdscr */
  239. Xextern    int     mvwaddch();        /* move & put char in a window */
  240. Xextern    int     mvwaddstr();        /* move & put string in a window */
  241. Xextern    int     mvwclrtobot();        /* move & clear end of a window */
  242. Xextern    int     mvwclrtoeol();        /* move & clear lineend in a window */
  243. Xextern    int     mvwdelch();        /* move & delete a char in a window */
  244. Xextern    int     mvwdeleteln();        /* move & delete a line in a window */
  245. Xextern    int     mvwgetch();        /* move & get char to a window */
  246. Xextern    int     mvwgetstr();        /* move & get string to a window */
  247. Xextern    int     mvwinch();        /* move & get char at window cursor */
  248. Xextern    int     mvwinsch();        /* move & insert char in a window */
  249. Xextern    int     mvwinsertln();        /* move & insert new line in window */
  250. Xextern    int     mvwin();        /* move window */
  251. Xextern    int     mvwprintw();        /* move & print string in a window */
  252. Xextern    int     mvwscanw();        /* move & get values via a window */
  253. Xextern    WINDOW    *newwin();        /* create a window */
  254. Xextern    void     nl();            /* set terminal cr-crlf map mode */
  255. Xextern    void     nocbreak();        /* unset terminal cbreak mode */
  256. Xextern    void     nocrmode();        /* unset terminal cbreak mode */
  257. Xextern    void     nodelay();        /* marks window for no input wait */
  258. Xextern    void     noecho();        /* unset terminal echo mode */
  259. Xextern    void     nonl();        /* unset terminal cr-crlf map mode */
  260. Xextern    void     noraw();        /* unset raw terminal mode */
  261. Xextern    void     overlay();        /* overlay one window on another */
  262. Xextern    void     overwrite();        /* overwrite one window on another */
  263. Xextern    int     printw();        /* print string in stdscr */
  264. Xextern    void     raw();            /* set raw terminal mode */
  265. Xextern    void     refrbrk();        /* set screen refresh break mode */
  266. Xextern    void     refresh();        /* refresh stdscr */
  267. Xextern    int     resetterm();        /* compatibility dummy */
  268. Xextern    int     resetty();        /* restore terminal I/O modes */
  269. Xextern    int     saveoldterm();        /* compatibility dummy */
  270. Xextern    int     saveterm();        /* compatibility dummy */
  271. Xextern    int     savetty();        /* save terminal I/O modes */
  272. Xextern    int     scanw();        /* get values via stdscr */
  273. Xextern    void     scroll();        /* scroll region in a window */
  274. Xextern    void     scrollok();        /* marks a window to allow scroll */
  275. Xextern    int     setsrcreg();        /* define stdscr's scroll region */
  276. Xextern    int     setterm();        /* compatibility dummy */
  277. Xextern    int     setupterm();        /* set up terminal (no-op) */
  278. Xextern    void     standend();        /* start normal chars in stdscr */
  279. Xextern    void     standout();        /* start standout chars in stdscr */
  280. Xextern    WINDOW    *subwin();        /* create a sub-window */
  281. Xextern    int     tabsize();        /* set/get tabsize of stdscr */
  282. Xextern    void     touchwin();        /* mark a window as modified */
  283. Xextern    char    *unctrl();        /* char-to-string converter */
  284. Xextern    int     waddch();        /* put char in a window */
  285. Xextern    int     waddstr();        /* put string in a window */
  286. Xextern    void     wattroff();        /* clear attribute(a) in window */
  287. Xextern    void     wattron();        /* add attribute(s) in window */
  288. Xextern    void     wattrset();        /* set window char attributes */
  289. Xextern    int     wbox();        /* draw a box inside a window */
  290. Xextern    void     wclear();        /* clear a window */
  291. Xextern    int     wclrtobot();        /* clear end of a window */
  292. Xextern    int     wclrtoeol();        /* clear end of line in a window */
  293. Xextern    int     wdelch();        /* delete a char in a window */
  294. Xextern    int     wdeleteln();        /* delete a line in a window */
  295. Xextern    void     werase();        /* erase a window */
  296. Xextern    int     wgetch();        /* get char to a window */
  297. Xextern  int     wgetstr();        /* get string to window and buffer */
  298. Xextern    int     winch();        /* get char at window cursor */
  299. Xextern    int     winsch();        /* insert character in a window */
  300. Xextern    int     winsertln();        /* insert new line in a window */
  301. Xextern    int     wmove();        /* move cursor in a window */
  302. Xextern    void     wnoutrefresh();    /* create screen image, w/o display */
  303. Xextern    int     wprintw();        /* print string in a window */
  304. Xextern    void     wrefresh();        /* refresh screen */
  305. Xextern    int     wscanw();        /* get values via a window */
  306. Xextern    int     wsetsrcreg();        /* define a window's scroll region */
  307. Xextern    void     wstandend();        /* start normal chars in window */
  308. Xextern    void     wstandout();        /* start standout chars in window */
  309. Xextern    int     wtabsize();        /* set/get tabsize of a window */
  310. Xextern    int     wungetch();        /* character push-back */
  311. FRIDAY_NIGHT
  312. echo extracting - curses.man
  313. sed 's/^X//' > curses.man << 'FRIDAY_NIGHT'
  314. XCURSES(3)        MS-DOS Programmer's Manual          CURSES(3)
  315. X
  316. XNAME
  317. X   curses - screen/window management library
  318. X
  319. XDESCRIPTION
  320. X   Curses is a library of screen and window management routines. It is modeled
  321. X   after the UNIX curses and ncurses libraries. Normally, programs written for
  322. X   curses should be easily ported to UNIX, and vice versa.
  323. X
  324. X   To use the routines, the function initscr() must first be called. This cre-
  325. X   ates two 'windows' for the user: stdscr and curscr. Stdscr is the default
  326. X   window for the user to make changes on, and curscr reflects the current
  327. X   contents of the physical display screen. The user writes or edits the std-
  328. X   scr window to his liking, then calls the refresh() function to make curscr
  329. X   and the physical screen look like stdscr. When the user program terminates,
  330. X   it should call the endwin() function to restore things to normal.
  331. X
  332. X   There are all sorts of window manipulation routines available to the pro-
  333. X   grammer: auxiliary windows may be created, edited, moved and deleted. The
  334. X   terminal may be set in many different modes, output text may be attributed
  335. X   with blink, blank, bold and reverse attributes. There are window-specific
  336. X   printf- and scanf-like routines, routines for scrolling, bow-drawing, win-
  337. X   dow overlaying, clearing routines etc. Curses also handles terminal func-
  338. X   tion keys, which is enables by calling the keypad() function.
  339. X
  340. X   For more and detailed information, see the library source codes. All curses
  341. X   functions are preceded by a complete description.
  342. X
  343. XCOMPILING
  344. X   All programs that use curses facilities should include the file <curses.h>,
  345. X   and during linking, the library ?curses.lib should be specified to the lin-
  346. X   ker ('?' is 's', 'c' 'm' or 'l' for small, compact, medium or large memory
  347. X   model respectively).
  348. X
  349. XFUNCTIONS
  350. X   Below is a list over the available functions, together with a brief de-
  351. X   scription of what they do. In general, functions whose names start with
  352. X   'w' differ from the one without 'w' (like wmove vs. move) signify that
  353. X   a specific window is used. Without a 'w', sdtscr is implied. The functions
  354. X   that start with 'mv' before the 'genereic' function name signify that a
  355. X   cursor motion should be made before the actual work. 'mv' and 'w' combine
  356. X   as expected.
  357. X
  358. X   Most routines that return an int will return the manifest constant ERR if
  359. X   there is a failure during execution. Routines that return a char actually
  360. X   return an int, so that ERR does not conflict with the character code 0xff.
  361. X   All IBM PC characters from 0 to 0xff are allowed for usage with curses.
  362. X
  363. X   Some routines, like {mv}{w} printw() and {mv}{w}scanw() return a meaningful
  364. X   positive value if the operation is successful.
  365. X
  366. X   The curses package uses some predefined types, variables and manifest con-
  367. X   stants that are also available to the programmer. There are also a few
  368. X   globally accessible variables that should not be touched by the applica-
  369. X   tion program. Those untouchable variables have names starting with an
  370. X   underscore (_) to avoid conflicts. The user-accessible types, variables
  371. X   and constants are (there are a number of other constants defining charac-
  372. X   ter attribute names and function key names - consult <curses.h> for de-
  373. X   tails):
  374. X
  375. X   (manifest constants)
  376. X
  377. X       TRUE                boolean true
  378. X    FALSE                boolean false
  379. X    ERR                unsuccessfull operation
  380. X    OK                successfull operation
  381. X
  382. X   (types)
  383. X
  384. X       WINDOW                a window structure type
  385. X    bool                boolean flag type
  386. X
  387. X   (variables)
  388. X
  389. X       WINDOW curscr            physical display image
  390. X    WINDOW stdscr            default user drawing board
  391. X       int    LINES            terminal height
  392. X    int    COLS            terminal width
  393. X
  394. X   The following is an alphabetical list of the curses functions, together
  395. X   with their types, parameters and a short comment for each (win is a win-
  396. X   dow, ch, vc, hc are characters, buf is a character buffer, attrs is an
  397. X   attribute bit map, bf is a boolean flag. Note that `characters' in this
  398. X   context usually can have 16 bits):
  399. X
  400. X
  401. X   int    addch(ch)            put char in stdscr
  402. X   int    addstr(str)            put string in stdscr
  403. X   void    attroff(attrs)            clear attribute(s) in stdscr
  404. X   void    attron(attrs)            add attribute(s) in stdscr
  405. X   void    attrset(attrs)            set stdscr char attributes
  406. X   int    baudrate()            dummy for compatibility
  407. X   void    beep()                ring the bell
  408. X   void    box(win,vc,hc)            box in a window, with given characters
  409. X   void    cbreak()            set terminal cbreak mode
  410. X   void    clear()                clear stdscr
  411. X   void    clearok(win,bf)            marks window for screen clear
  412. X   int    clrtobot()            clear end of stdscr
  413. X   int    clrtoeol()            clear end of line in stdscr
  414. X   void    crmode()            set terminal cbreak mode
  415. X   void    cursoff()            turns off hardware cursor
  416. X   void    curson()            turns on hardware cursor
  417. X   int    delch()                delete a char in stdscr
  418. X   int    deleteln()            delete a line in stdscr
  419. X   void    delwin(win)            delete a window or a subwindow
  420. X   void    doupdate()            update physical screen
  421. X   void    echo()                set terminal echo mode
  422. X   int    endwin()            cleanup and curses finitialization
  423. X   void    erase()                erase stdscr
  424. X   int    erasechar()            return char delete character
  425. X   int    fixterm()            dummy for compatibility
  426. X   void    flash()                flash terminal screen
  427. X   void    flushinp()            kill pending keyboard input
  428. X   int    getch()        (#def macro)    get character via stdscr
  429. X   int    getstr(buf)            get string via stdscr to a buffer
  430. X   void    getyx(win,y,x)            get a window's cursor position
  431. X   int    gettmode()            dummy for compatibility
  432. X   void    idlok(win,bf)            dummy for compatibility
  433. X   int    initscr()            curses initialization (ret 1 if OK)
  434. X   int    inch()                get char at stdscr cursor
  435. X   int    insch(ch)            insert character in stdscr
  436. X   int    insertln()            insert an empty line in stdscr
  437. X   void    keypad(win,bf)            marks a window for keypad usage
  438. X   int    killchar()            return line delete character
  439. X   char *longname()            returns terminal description string
  440. X   void    leaveok(win,bf)            marks window for cursor 'update leave'
  441. X   void    meta(win,bf)            marks window for meta (dummy function)
  442. X   int    move(y,x)            move cursor in stdscr
  443. X   int    mvaddch(y,x,ch)            move & put char in stdscr
  444. X   int    mvaddstr(y,x,str)        move & put string in stdscr
  445. X   int    mvclrtobot(y,x)            move & clear end of stdscr
  446. X   int    mvclrtoeol(y,x)            move & clear lineend in stdscr
  447. X   int    mvcur(oldy,oldx,y,x)        move terminal cursor to <y,x>
  448. X   int    mvdelch(y,x)            move & delete a char in stdscr
  449. X   int    mvdeleteln(y,x)            move & delete a line in stdscr
  450. X   int    mvgetch(y,x)            move & get char to stdscr
  451. X   int    mvgetstr(y,x,buf)        move & get string via stdscr to buffer
  452. X   int    mvinch(y,x,)            move & get char at stdscr cursor
  453. X   int    mvinsch(y,x,ch)            move & insert char in stdscr
  454. X   int    mvinsertln(y,x)            move & insert new line in stdscr
  455. X   int    mvprintw(y,x,fmt,args)        move & print string in stdscr
  456. X   int    mvscanw(y,x,fmt,args)        move & get values via stdscr
  457. X   int    mvwaddch(win,y,x,ch)        move & put char in a window
  458. X   int    mvwaddstr(win,y,x,str)        move & put string in a window
  459. X   int    mvwclrtobot(win,y,x)        move & clear end of a window
  460. X   int    mvwclrtoeol(win,y,x)        move & clear lineend in a window
  461. X   int    mvwdelch(win,y,x)        move & delete a char in a window
  462. X   int    mvwdeleteln(win,y,x)        move & delete a line in a window
  463. X   int    mvwgetch(win,y,x)        move & get char to a window
  464. X   int    mvwgetstr(win,y,x,str)        move & get string to a window
  465. X   int    mvwinch(win,y,x)        move & get char at window cursor
  466. X   int    mvwinsch(win,y,x,ch)        move & insert char in a window
  467. X   int    mvwinsertln(win,y,x)        move & insert new line in window
  468. X   int    mvwin(win,y,x)            move window on physical screen
  469. X   int    mvwprintw(win,x,y,fmt,args)    move & print string in a window
  470. X   int    mvwscanw(win,y,x,fmt,args)    move & get values via a window
  471. X   WINDOW *newwin(lines,cols,begy,begx)    create a new window
  472. X   void     nl()                set terminal cr-crlf mapping mode
  473. X   void     nocbreak()            unset terminal cbreak mod
  474. X   void     nocrmode()            unset terminal cbreak mode
  475. X   void     nodelay(win,bf)        marks window for no input wait
  476. X   void     noecho()            unset terminal echo mode
  477. X   void     nonl()                unset terminal cr-crlf mapping mode
  478. X   void     noraw()            unset raw terminal mode
  479. X   void     overlay(win1,win2)        overlay one window on another
  480. X   void     overwrite(win1,win2)        overwrite one window on another
  481. X   int     printw(fmt,args)        print string in stdscr
  482. X   void     raw()                set raw terminal mode
  483. X   void     refrbrk(bf)            set screen update break mode
  484. X   void     refresh()            refresh stdscr
  485. X   int     resetterm()            dummy for compatibility
  486. X   int     resetty()            restore terminal I/O modes
  487. X   int     saveoldterm()            dummy for compatibility
  488. X   int     saveterm()            dummy for compatibility
  489. X   int     savetty()            save terminal I/O modes
  490. X   int     scanw(fmt,args)        get values via stdscr
  491. X   void     scroll(win)            scroll scrolling region of a window
  492. X   void     scrollok(win,bf)        marks a window to allow scroll
  493. X   int     setsrcreg(miny,maxy)        define stdscr's scroll region
  494. X   int     setterm()            dummy for compatibility
  495. X   int     setupterm(term,fd,errret)    set up terminal (no-op on PC)
  496. X   void     standend()            start normal chars in stdscr
  497. X   void     standout()            start standout chars in stdscr
  498. X   WINDOW *subwin(win,lines,cols,begy,begx) create a sub-window in window win
  499. X   int     tabsize(ts)            set/get tabsize of stdscr
  500. X   void     touchwin(win)            mark a window as totally modified
  501. X   char    *unctrl(ch)            char-to-string converter
  502. X   int     ungetch(ch)    (#def macro)    push back a character to input */
  503. X   int     waddch(win,ch)            put char in a window
  504. X   int     waddstr(win,str)        put string in a window
  505. X   void     wattroff(win,attrs)        clear attribute(s) in window
  506. X   void     wattron(win,attrs)        add attribute(s) in window
  507. X   void     wattrset(win,attrs)        set window char attributes
  508. X   int     wbox(win,miny,minx,maxy,maxx,vc,hc) draw a box inside a window
  509. X   void     wclear(win)            clear a window
  510. X   int     wclrtobot(win)            clear end of a window
  511. X   int     wclrtoeol(win)            clear end of line in a window
  512. X   int     wdelch(win)            delete a char in a window
  513. X   int     wdeleteln(win)            delete a line in a window
  514. X   void     werase(win)            erase a window
  515. X   int     wgetch(win)            get char via a window
  516. X   int     wgetstr(win,buf)        get string via window to a buffer
  517. X   int     winch(win)            get char at window cursor
  518. X   int     winsch(win,ch)            insert character in a window
  519. X   int     winsertln(win)            insert new line in a window
  520. X   int     wmove(win,y,x)            move cursor in a window
  521. X   void     wnoutrefresh(win)        create internal screen image
  522. X   int     wprintw(win,fmt,args)        print string in a window
  523. X   void     wrefresh(win)            refresh window
  524. X   int     wscanw(win,fmt,args)        get values via a window
  525. X   int     wsetsrcreg(win,miny,maxy)    define a window's scrolling region
  526. X   void     wstandend(win)            start normal chars in window
  527. X   void     wstandout(win)            start standout chars in window
  528. X   int     wtabsize(win,ts)        set/get tabsize of a window
  529. X   int  wungetch(ch)            push back a character to input */
  530. X
  531. XSEE ALSO
  532. X   Screen Updating And Cursor Movement Optimization: A Library Package -
  533. X   Kenneth C.R.C. Arnold
  534. X   The Ncurses Reference Manual - Pavel Curtis, Cornell University
  535. X
  536. XBUGS
  537. X   The terminal raw I/O mode is implemented by reading characters directly
  538. X   from the BIOS. This means that the programmer must not use the normal
  539. X   I/O routines to the screen or from the keyboard, since they will trap the
  540. X   MS-DOS ^C, ^S, ^Q and ^P characters and thus nullify the raw input.
  541. X
  542. X   Also, if the terminal is in normal or cbreak mode and the programmer has
  543. X   trapped CTRL-BREAK by using signal(SIGINT,ownhandler), MS-DOS will still
  544. X   echo the characters '^C' on the screen when the character is intercepted.
  545. X   There seems to be no way to avoid this under MS-DOS (use raw mode in-
  546. X   stead).
  547. X
  548. X   The function keys are hardware dependent. There is a table in charget.c
  549. X   that maps keyboard scan codes from the keyboard to function key names.
  550. X   The one supplied works for IBM PC/XT/AT, and for most clones.
  551. FRIDAY_NIGHT
  552. echo extracting - cursesio.asm
  553. sed 's/^X//' > cursesio.asm << 'FRIDAY_NIGHT'
  554. X    TITLE   PCcurses BIOS Control Functions for MicroSoft 'C' v.4.0
  555. X    NAME    CURSESIO
  556. X    PAGE    46,132
  557. X    ;****************************************************************
  558. X    ;*             CURSESIO.ASM                *
  559. X    ;*                                *
  560. X    ;* This file contains 'C' functions for the MicroSoft 'C' com-    *
  561. X    ;* piler v.4.0. It exercises a number of BIOS video calls, and    *
  562. X    ;* is intended for inclusion in a curses library package.    *
  563. X    ;*                                *
  564. X    ;* The two files FARNEAR.INC and SMALHUGE.INC each contain one    *
  565. X    ;* EQUate. These define the module's memory model.        *
  566. X    ;*                                *
  567. X    ;****************************************************************
  568. X    ;* This version of curses is based on ncurses, a curses version    * 
  569. X    ;* originally written by Pavel Curtis at Cornell University.    *
  570. X    ;* I have made substantial changes to make it run on IBM PC's,    *
  571. X    ;* and therefore consider myself free to make it public domain.    *
  572. X    ;*        Bjorn Larsson (...mcvax!enea!infovax!bl)    *
  573. X    ;****************************************************************
  574. X    ;* Author: Bjorn Larsson                    *
  575. X    ;* Revised:                            *
  576. X    ;* 1.0:    Release:                    870515    *
  577. X    ;****************************************************************
  578. X    ;
  579. X    INCLUDE    FARNEAR.INC        ;DEFINE FAR OR NEAR CALL SEQUENCE
  580. X    INCLUDE    SMALHUGE.INC        ;DEFINE FAR OR NEAR DATA ACCESS
  581. X    ;
  582. XSYSTEM    EQU    21H            ;SYSTEM CALL
  583. XBRKCHK    EQU    33H            ;BREAK SET/CHECK FUNCTION CODE
  584. X    ;
  585. X_TEXT    SEGMENT  BYTE PUBLIC 'CODE'
  586. X    ASSUME  CS: _TEXT
  587. X    ;
  588. X    ;****************************************************************
  589. X    ;* Function entry and exit macros, and parameter fetch macro.    *
  590. X    ;* Used by all functions.                    *
  591. X    ;****************************************************************
  592. X    ;
  593. Xc_entry    MACRO    f_name
  594. X    ;
  595. X    if far_call
  596. X&f_name    proc far
  597. X    else
  598. X&f_name    proc near
  599. X    endif
  600. X    push    bp
  601. X    mov    bp,sp
  602. X    push    di
  603. X    push    si
  604. X    ;
  605. X    ENDM
  606. X    ;
  607. Xc_exit    MACRO    f_name
  608. X    ;
  609. X    pop    si
  610. X    pop    di
  611. X    pop    bp
  612. X    ret
  613. X&f_name    endp
  614. X    ;
  615. X    ENDM
  616. X    ;
  617. Xg_parm    MACRO    reg,p_num
  618. X    if    far_call
  619. X    mov    ®,[bp+&p_num*2+4]
  620. X    else
  621. X    mov    ®,[bp+&p_num*2+2]
  622. X    endif
  623. X    ;
  624. X    ENDM
  625. X    ;
  626. X    PAGE
  627. X    ;****************************************************************
  628. X    ;*            _cursesocattr                *
  629. X    ;*                                *
  630. X    ;* void _cursescattr(chr,attr)                    *
  631. X    ;*                                *
  632. X    ;* Writes char 'chr' with attributes 'attr' to the current cur-    *
  633. X    ;* sor location.                        *
  634. X    ;****************************************************************
  635. X    PUBLIC    __cursescattr
  636. X    ;
  637. X    c_entry __cursescattr
  638. X    MOV    AH,9
  639. X    MOV    BH,0        ;USE PAGE 0
  640. X    g_parm    AL,2        ;GET CHR PARAMETER
  641. X    g_parm    BL,3        ;GET ATTR PARAMETER
  642. X    MOV    CX,1        ;PUT 1 CHARACTER
  643. X    INT    10H
  644. X    c_exit    __cursescattr
  645. X    ;
  646. X    ;****************************************************************
  647. X    ;*            _cursescursor                *
  648. X    ;*                                *
  649. X    ;* void _cursescursor(row,column)                *
  650. X    ;*                                *
  651. X    ;* Sets the cursor position in video page 0. 'row' and 'column'    *
  652. X    ;* are the cursor address. If 'row' is set to 25, no cursor at    *
  653. X    ;* all is displayed.                        *
  654. X    ;****************************************************************
  655. X    PUBLIC    __cursescursor
  656. X    ;
  657. X    c_entry __cursescursor
  658. X    MOV    AH,2
  659. X    MOV    BH,0        ;USE PAGE 0
  660. X    g_parm    DH,2        ;GET ROW PARAMETER
  661. X    g_parm    DL,3        ;GET COLUMN PARAMETER
  662. X    INT    10H
  663. X    c_exit    __cursescursor
  664. X    ;
  665. X    ;****************************************************************
  666. X    ;*            _cursesgcols                *
  667. X    ;*                                *
  668. X    ;* int _cursesgcols()                        *
  669. X    ;*                                *
  670. X    ;* Return the current number of columns on the screen.        *
  671. X    ;****************************************************************
  672. X    PUBLIC    __cursesgcols
  673. X    ;
  674. X    c_entry    __cursesgcols
  675. X    MOV    AH,15
  676. X    INT    10H
  677. X    MOV    AL,AH
  678. X    XOR    AH,AH
  679. X    c_exit    __cursesgcols
  680. X    ;
  681. X    ;****************************************************************
  682. X    ;*            _cursesputc                *
  683. X    ;*                                *
  684. X    ;* void _cursesputc(chr,colour)                    *
  685. X    ;*                                *
  686. X    ;* Output character 'chr' to screen in tty fashion. If a colour    *
  687. X    ;* mode is active, the character is written with colour        *
  688. X    ;* 'colour'.                            *
  689. X    ;****************************************************************
  690. X    PUBLIC    __cursesputc
  691. X    ;
  692. X    c_entry    __cursesputc
  693. X    MOV    AH,14
  694. X    g_parm    AL,1        ;GET CHR PARAMETER
  695. X    g_parm    BL,2        ;GET COLOUR PARAMETER
  696. X    INT    10H
  697. X    c_exit    __cursesputc
  698. X    ;
  699. X    ;****************************************************************
  700. X    ;*            _cursesscroll                *
  701. X    ;*                                *
  702. X    ;* void _cursesscroll(urow,lcol,lrow,rcol,lines,attr)        *
  703. X    ;*                                *
  704. X    ;* Scroll a window in the current page up or down. Urow, lcol,    *
  705. X    ;* lrow,rcol are the window coordinats. lines is the number of    *
  706. X    ;* lines to scroll. If 0, clears the window, if < 0 scrolls    *
  707. X    ;* down, > 0 scrolls up. Blanks areas that are left, and sets    *
  708. X    ;* character attributes to attr. If in a colour graphics mode,    *
  709. X    ;* fills them with the colour 'attr' instead.            *
  710. X    ;****************************************************************
  711. X    PUBLIC    __cursesscroll
  712. X    ;
  713. X    c_entry    __cursesscroll
  714. X    g_parm    AL,5        ;GET LINES PARAMETER
  715. X    MOV    AH,6
  716. X    TEST    AL,80H
  717. X    JZ    SHORT CS_1
  718. X    ;
  719. X    MOV    AH,7
  720. X    NEG    AL
  721. X    ;
  722. XCS_1:    g_parm    CH,1        ;GET UROW PARAMETER
  723. X    g_parm    CL,2        ;GET LCOL PARAMETER
  724. X    g_parm    DH,3        ;GET LROW PARAMETER
  725. X    g_parm    DL,4        ;GET RCOL PARAMETER
  726. X    g_parm    BH,6        ;GET ATTR PARAMETER
  727. X    INT    10H
  728. X    c_exit    __cursesscroll
  729. X    ;
  730. X    ;****************************************************************
  731. X    ;*            _cursesgcmode                *
  732. X    ;*                                *
  733. X    ;* int _cursesgcmode()                        *
  734. X    ;*                                *
  735. X    ;* Return the current cursor type. Bits 8-15 of the return    *
  736. X    ;* value is the start scan row, and bits 0-7 is the end scan    *
  737. X    ;* row.                                *
  738. X    ;****************************************************************
  739. X    PUBLIC    __cursesgcmode
  740. X    ;
  741. X    c_entry    __cursesgcmode
  742. X    MOV    AH,3
  743. X    INT    10H
  744. X    MOV    AX,CX
  745. X    c_exit    __cursesgcmode
  746. X    ;
  747. X    ;****************************************************************
  748. X    ;*            _cursescmode                *
  749. X    ;*                                *
  750. X    ;* void _cursescmode(startrow,endrow)                *
  751. X    ;*                                *
  752. X    ;* Sets the cursor type to begin in scan line startrow and end    *
  753. X    ;* in scan line endrow. Both values should be 0-31.        *
  754. X    ;****************************************************************
  755. X    PUBLIC    __cursescmode
  756. X    ;
  757. X    c_entry __cursescmode
  758. X    MOV    AH,1
  759. X    g_parm    CH,1        ;GET STARTROW PARAMETER
  760. X    g_parm    CL,2        ;GET ENDROW PARAMETER
  761. X    INT    10H
  762. X    c_exit    __cursescmode
  763. X    ;
  764. X    ;****************************************************************
  765. X    ;*             _curseskey                *
  766. X    ;*                                *
  767. X    ;* int _curseskey()                        *
  768. X    ;*                                *
  769. X    ;* Returns the next key code struck at the keyboard. If the low    *
  770. X    ;* 8 bits are non-0, the uper bits contain the extended cha-    *
  771. X    ;* racter code. If bit 0-7 are non-zero, the upper bits = 0.    *
  772. X    ;****************************************************************
  773. X    PUBLIC    __curseskey
  774. X    ;
  775. X    c_entry __curseskey
  776. X    MOV    AH,0
  777. X    INT    16H
  778. X    CMP    AL,0
  779. X    JZ    SHORT EXTKEY
  780. X    AND    AX,0FFH
  781. XEXTKEY:
  782. X    c_exit    __curseskey
  783. X    ;
  784. X    ;****************************************************************
  785. X    ;*            _curseskeytst                *
  786. X    ;*                                *
  787. X    ;* int _curseskeytst()                        *
  788. X    ;*                                *
  789. X    ;* Returns 1 if a character is available, 0 otherwise.        *
  790. X    ;****************************************************************
  791. X    PUBLIC    __curseskeytst
  792. X    ;
  793. X    c_entry __curseskeytst
  794. X    MOV    AH,1
  795. X    INT    16H
  796. X    JZ    SHORT TST1
  797. X    MOV    AX,0
  798. X    JMP    SHORT EXTTST
  799. XTST1:    MOV    AX,1
  800. XEXTTST:
  801. X    c_exit    __curseskeytst
  802. X    ;
  803. X    ;****************************************************************
  804. X    ;*            _cursesgcb                *
  805. X    ;*                                *
  806. X    ;* int _cursesgcb()                        *
  807. X    ;*                                *
  808. X    ;* Returns 1 if MSDOS BREAK CHECK is on, otherwise 0.        *
  809. X    ;****************************************************************
  810. X    PUBLIC    __cursesgcb
  811. X    ;
  812. X    c_entry __cursesgcb
  813. X    MOV    AX,BRKCHK*256+0
  814. X    INT    SYSTEM
  815. X    XOR    AH,AH
  816. X    MOV    AL,DL
  817. X    c_exit    __cursesgcb
  818. X    ;
  819. X    ;****************************************************************
  820. X    ;*            _cursesscb                *
  821. X    ;*                                *
  822. X    ;* void _cursesscb(setting)                    *
  823. X    ;*                                *
  824. X    ;* Sets MSDOS BREAK CHECK according to 'setting'.        *
  825. X    ;****************************************************************
  826. X    PUBLIC    __cursesscb
  827. X    ;
  828. X    c_entry __cursesscb
  829. X    MOV    AX,BRKCHK*256+1
  830. X    g_parm    DL,1
  831. X    AND    DL,DL
  832. X    JZ    SHORT SCB1
  833. X    MOV    DL,1
  834. XSCB1:    INT    SYSTEM
  835. X    c_exit    __cursesscb
  836. X    ;
  837. X_TEXT    ENDS
  838. X    if1
  839. X    %OUT    Pass 1 Completed
  840. X    else
  841. X    %OUT    Assembly Completed
  842. X    endif
  843. X    END
  844. FRIDAY_NIGHT
  845. echo extracting - curspriv.h
  846. sed 's/^X//' > curspriv.h << 'FRIDAY_NIGHT'
  847. X/****************************************************************/
  848. X/*               CURSPRIV.H                */
  849. X/* Header file for definitions and declarations for the        */
  850. X/* PCcurses package. These definitions should not be gene-    */
  851. X/* rally accessible to programmers.                */
  852. X/****************************************************************/
  853. X/* This version of curses is based on ncurses, a curses version    */
  854. X/* originally written by Pavel Curtis at Cornell University.    */
  855. X/* I have made substantial changes to make it run on IBM PC's,    */
  856. X/* and therefore consider myself free to make it public domain.    */
  857. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  858. X/****************************************************************/
  859. X/* 1.0:    Release:                    870515    */
  860. X/****************************************************************/
  861. X
  862. X/* window properties */
  863. X
  864. X#define    _SUBWIN        1        /* window is a subwindow */
  865. X#define    _ENDLINE    2        /* last winline is last screen line */
  866. X#define    _FULLWIN    4        /* window fills screen */
  867. X#define    _SCROLLWIN    8        /* window lwr rgt is screen lwr rgt */
  868. X
  869. X/* Miscellaneous */
  870. X
  871. X#define    _INBUFSIZ    200        /* size of terminal input buffer */
  872. X#define    _NO_CHANGE    -1        /* flags line edge unchanged */
  873. X
  874. X#define    _BREAKCHAR    0x03        /* ^C character */
  875. X#define _DCCHAR        0x08        /* Delete Char char (BS) */
  876. X#define _DLCHAR        0x1b        /* Delete Line char (ESC) */
  877. X#define    _GOCHAR        0x11        /* ^Q character */
  878. X#define    _PRINTCHAR    0x10        /* ^P character */
  879. X#define    _STOPCHAR    0x13        /* ^S character */
  880. X#define     NUNGETCH    10        /* max # chars to ungetch() */
  881. X
  882. X/* character mask definitions */
  883. X
  884. X#define CHR_MSK    ((int) 0x00ff)        /* ASCIIZ character mask */
  885. X#define    ATR_MSK    ((int) 0xff00)        /* attribute mask */
  886. X#define ATR_NRM    ((int) 0x0000)        /* no special attributes */
  887. X
  888. X/* type declarations */
  889. X
  890. Xtypedef    struct
  891. X  {
  892. X  WINDOW  *tmpwin;            /* window used for updates */
  893. X  int       cursrow;            /* position of physical cursor */
  894. X  int       curscol;
  895. X  bool       autocr;            /* if lf -> crlf */
  896. X  bool       cbreak;            /* if terminal unbuffered */
  897. X  bool       echo;            /* if terminal echo */
  898. X  bool       raw;                /* if terminal raw mode */
  899. X  bool       refrbrk;            /* if premature refresh brk allowed */
  900. X  bool     orgcbr;            /* original MSDOS ^-BREAK setting */
  901. X  }    cursv;
  902. X
  903. X/* External variables */
  904. X
  905. Xextern    cursv   _cursvar;        /* curses variables */
  906. X
  907. X/* 'C' standard library function declarations */
  908. X
  909. Xextern    char    *calloc();
  910. Xextern    char    *malloc();
  911. Xextern    void     free();
  912. Xextern    int     sprintf();
  913. Xextern    int     sscanf();
  914. X
  915. X/* curses internal functions, not to be used by programmers */
  916. X
  917. Xextern    void    _cursescattr();
  918. Xextern    void    _cursescmode();
  919. Xextern    void    _cursescursor();
  920. Xextern    int    _cursesgcb();
  921. Xextern    int    _cursesgcmode();
  922. Xextern    int    _cursesgcols();
  923. Xextern    int    _curseskey();
  924. Xextern    int    _curseskeytst();
  925. Xextern    bool    _cursespendch();
  926. Xextern    void    _cursesputc();
  927. Xextern    void    _cursesscb();
  928. FRIDAY_NIGHT
  929. echo extracting - endwin.c
  930. sed 's/^X//' > endwin.c << 'FRIDAY_NIGHT'
  931. X/****************************************************************/
  932. X/* Endwin() routine of the PCcurses package            */
  933. X/*                                */
  934. X/****************************************************************/
  935. X/* This version of curses is based on ncurses, a curses version    */
  936. X/* originally written by Pavel Curtis at Cornell University.    */
  937. X/* I have made substantial changes to make it run on IBM PC's,    */
  938. X/* and therefore consider myself free to make it public domain.    */
  939. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  940. X/****************************************************************/
  941. X/* 1.0:    Release:                    870515    */
  942. X/****************************************************************/
  943. X
  944. X#include <curses.h>
  945. X#include <curspriv.h>
  946. X
  947. X/****************************************************************/
  948. X/* Endwin() does neccessary clean-up after using the PCcurses    */
  949. X/* package. It should be called before exiting the user's pro-    */
  950. X/* gram.                            */
  951. X/****************************************************************/
  952. X
  953. Xint endwin()
  954. X  {
  955. X  delwin(stdscr);
  956. X  delwin(curscr);
  957. X  delwin(_cursvar.tmpwin);
  958. X  curson();                /* turn on cursor if off */
  959. X  _cursescursor(0,LINES-1, 0);        /* put at lower left */
  960. X  _cursesscb(_cursvar.orgcbr);        /* restore original ^BREAK setting */
  961. X  return(OK);
  962. X  } /* endwin */
  963. FRIDAY_NIGHT
  964. echo extracting - farcall.inc
  965. sed 's/^X//' > farcall.inc << 'FRIDAY_NIGHT'
  966. X    far_call EQU    1
  967. FRIDAY_NIGHT
  968. echo extracting - hugedata.inc
  969. sed 's/^X//' > hugedata.inc << 'FRIDAY_NIGHT'
  970. X    huge_data EQU    1
  971. FRIDAY_NIGHT
  972. echo extracting - initscr.c
  973. sed 's/^X//' > initscr.c << 'FRIDAY_NIGHT'
  974. X/****************************************************************/
  975. X/* Initscr() routine of the PCcurses package            */
  976. X/*                                */
  977. X/****************************************************************/
  978. X/* This version of curses is based on ncurses, a curses version    */
  979. X/* originally written by Pavel Curtis at Cornell University.    */
  980. X/* I have made substantial changes to make it run on IBM PC's,    */
  981. X/* and therefore consider myself free to make it public domain.    */
  982. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  983. X/****************************************************************/
  984. X/* 1.0:    Release:                    870515    */
  985. X/****************************************************************/
  986. X
  987. X#include <curses.h>
  988. X#include <curspriv.h>
  989. X
  990. XWINDOW *curscr;            /* the current screen image */
  991. XWINDOW *stdscr;            /* the default screen window */
  992. Xcursv   _cursvar;        /* curses variables */
  993. Xint    LINES;            /* terminal height */
  994. Xint    COLS;            /* terminal width */
  995. X
  996. X/****************************************************************/
  997. X/* Initscr() does neccessary initializations for the PCcurses    */
  998. X/* package. It MUST be called before any other curses routines.    */
  999. X/****************************************************************/
  1000. X
  1001. Xint initscr()
  1002. X  {
  1003. X  _cursvar.cursrow   = -1;        /* Initial cursor unknown */
  1004. X  _cursvar.curscol   = -1;
  1005. X  _cursvar.autocr    = TRUE;        /* lf -> crlf by default */
  1006. X  _cursvar.raw       = FALSE;        /* tty I/O modes */
  1007. X  _cursvar.cbreak    = FALSE;
  1008. X  _cursvar.echo      = TRUE;
  1009. X  _cursvar.refrbrk   = FALSE;        /* no premature end of refresh */
  1010. X  _cursvar.orgcbr    = _cursesgcb();    /* original ^BREAK setting */
  1011. X
  1012. X  LINES              = 25;        /* @@@@ this must be fixed */
  1013. X  COLS               = _cursesgcols();
  1014. X
  1015. X  if ((_cursvar.tmpwin = newwin(LINES,COLS,0,0)) == (WINDOW *)ERR)
  1016. X    exit(1);
  1017. X  if ((curscr = newwin(LINES,COLS,0,0)) == (WINDOW *)ERR)
  1018. X    exit(1);
  1019. X  if ((stdscr = newwin(LINES,COLS,0,0)) == (WINDOW *)ERR)
  1020. X    exit(1);
  1021. X  curscr->_clear = FALSE;
  1022. X  return(OK);
  1023. X  } /* initscr */
  1024. FRIDAY_NIGHT
  1025. echo extracting - linedel.c
  1026. sed 's/^X//' > linedel.c << 'FRIDAY_NIGHT'
  1027. X/****************************************************************/
  1028. X/* Wdeleteln() routine of the PCcurses package            */
  1029. X/*                                */
  1030. X/****************************************************************/
  1031. X/* This version of curses is based on ncurses, a curses version    */
  1032. X/* originally written by Pavel Curtis at Cornell University.    */
  1033. X/* I have made substantial changes to make it run on IBM PC's,    */
  1034. X/* and therefore consider myself free to make it public domain.    */
  1035. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  1036. X/****************************************************************/
  1037. X/* 1.0:    Release:                    870515    */
  1038. X/****************************************************************/
  1039. X
  1040. X#include <curses.h>
  1041. X#include <curspriv.h>
  1042. X
  1043. X/****************************************************************/
  1044. X/* Wdeleteln() deletes the line at the window cursor, and the    */
  1045. X/* lines below it are shifted up, inserting a blank line at    */
  1046. X/* the bottom of the window.                    */
  1047. X/****************************************************************/
  1048. X
  1049. Xint    wdeleteln(win)
  1050. X  WINDOW    *win;
  1051. X  {
  1052. X  int        *end;
  1053. X  int        *temp;
  1054. X  short     y;
  1055. X  static   int     blank;
  1056. X  
  1057. X  blank = ' ' | (win->_attrs & ATR_MSK);
  1058. X
  1059. X  temp = win->_line[win->_cury];
  1060. X  for (y = win->_cury; y < win->_regbottom; y++)
  1061. X    {
  1062. X    win->_line[y] = win->_line[y+1];
  1063. X    win->_minchng[y] = 0;
  1064. X    win->_maxchng[y] = win->_maxx;
  1065. X    }
  1066. X  win->_minchng[y] = 0;
  1067. X  win->_maxchng[y] = win->_maxx;
  1068. X  win->_line[win->_regbottom] = temp;
  1069. X  for (end = &(temp[win->_maxx]); temp <= end;)
  1070. X    *temp++ = blank;
  1071. X  return(OK);
  1072. X  } /* wdeleteln */
  1073. X
  1074. X/****************************************************************/
  1075. X/* Deleteln() deletes the line at the stdscr cursor, and the    */
  1076. X/* lines below it are shifted up, inserting a blank line at    */
  1077. X/* the bottom of stdscr.                    */
  1078. X/****************************************************************/
  1079. X
  1080. Xint deleteln()
  1081. X  {
  1082. X  return(wdeleteln(stdscr));
  1083. X  } /* deleteln */
  1084. X
  1085. X/****************************************************************/
  1086. X/* Mvdeleteln() moves the cursor to a new position in stdscr,    */
  1087. X/* then deletes the line at the window cursor, and the lines    */
  1088. X/* below it are shifted up, inserting a blank line at the bot-    */
  1089. X/* tom of stdscr.                        */
  1090. X/****************************************************************/
  1091. X
  1092. Xint mvdeleteln(y,x)
  1093. X  int y;
  1094. X  int x;
  1095. X  {
  1096. X  if (wmove(stdscr,y,x) == ERR)
  1097. X    return(ERR);
  1098. X  return(wdeleteln(stdscr));
  1099. X  } /* mvdeleteln */
  1100. X
  1101. X/****************************************************************/
  1102. X/* Mvwdeleteln() moves the cursor to a new position in a win-    */
  1103. X/* dow, then deletes the line at the window cursor, and the    */
  1104. X/* lines below it are shifted up, inserting a blank line at    */
  1105. X/* the bottom of the window.                    */
  1106. X/****************************************************************/
  1107. X
  1108. Xint mvwdeleteln(win,y,x)
  1109. X  WINDOW *win;
  1110. X  int y;
  1111. X  int x;
  1112. X  {
  1113. X  if (wmove(win,y,x) == ERR)
  1114. X    return(ERR);
  1115. X  return(wdeleteln(win));
  1116. X  } /* mvwdeleteln */
  1117. FRIDAY_NIGHT
  1118. echo extracting - lineins.c
  1119. sed 's/^X//' > lineins.c << 'FRIDAY_NIGHT'
  1120. X/****************************************************************/
  1121. X/* Winsertln() routine of the PCcurses package            */
  1122. X/*                                */
  1123. X/****************************************************************/
  1124. X/* This version of curses is based on ncurses, a curses version    */
  1125. X/* originally written by Pavel Curtis at Cornell University.    */
  1126. X/* I have made substantial changes to make it run on IBM PC's,    */
  1127. X/* and therefore consider myself free to make it public domain.    */
  1128. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  1129. X/****************************************************************/
  1130. X/* 1.0:    Release:                    870515    */
  1131. X/****************************************************************/
  1132. X
  1133. X#include <curses.h>
  1134. X#include <curspriv.h>
  1135. X
  1136. X/****************************************************************/
  1137. X/* Winsertln() inserts a blank line instead of the cursor line    */
  1138. X/* in window 'win' and pushes other lines down.            */
  1139. X/****************************************************************/
  1140. X
  1141. Xint    winsertln(win)
  1142. X  WINDOW    *win;
  1143. X  {
  1144. X  int        *temp;
  1145. X  int        *end;
  1146. X  short     y;
  1147. X  static   int     blank;
  1148. X  
  1149. X  blank = ' ' | (win->_attrs & ATR_MSK);
  1150. X  temp = win->_line[win->_regbottom];
  1151. X  for (y = win->_regbottom;  y > win->_cury;  y--)
  1152. X    {
  1153. X    win->_line[y] = win->_line[y-1];
  1154. X    win->_minchng[y] = 0;
  1155. X    win->_maxchng[y] = win->_maxx;
  1156. X    } /* for */
  1157. X  win->_line[win->_cury] = temp;
  1158. X  for (end = &temp[win->_maxx];  temp <= end;  temp++)
  1159. X    *temp = blank;
  1160. X  win->_minchng[win->_cury] = 0;
  1161. X  win->_maxchng[win->_cury] = win->_maxx;
  1162. X  return(OK);
  1163. X  } /* winsertln */
  1164. X
  1165. X/****************************************************************/
  1166. X/* Insertln() inserts a blank line instead of the cursor line    */
  1167. X/* in stdscr and pushes other lines down.            */
  1168. X/****************************************************************/
  1169. X
  1170. Xint insertln()
  1171. X  {
  1172. X  return(winsertln(stdscr));
  1173. X  } /* insertln */
  1174. X
  1175. X/****************************************************************/
  1176. X/* Mvinsertln() moves the stdscr cursor to a new positions, in-    */
  1177. X/* serts a blank line instead of the cursor line and pushes    */
  1178. X/* other lines down.                        */
  1179. X/****************************************************************/
  1180. X
  1181. Xint mvinsert(y,x)
  1182. X  int y;
  1183. X  int x;
  1184. X  {
  1185. X  if (wmove(stdscr,y,x) == ERR)
  1186. X    return(ERR);
  1187. X  return(winsertln(stdscr));
  1188. X  } /* mvinsert */
  1189. X
  1190. X/****************************************************************/
  1191. X/* Mvinsertln() moves the cursor in window 'win' to a new posi-    */
  1192. X/* tions, inserts a blank line instead of the cursor line and    */
  1193. X/* pushes other lines down.                    */
  1194. X/****************************************************************/
  1195. X
  1196. Xint mvwinsert(win,y,x)
  1197. X  WINDOW *win;
  1198. X  int y;
  1199. X  int x;
  1200. X  {
  1201. X  if (wmove(win,y,x) == ERR)
  1202. X    return(ERR);
  1203. X  return(winsertln(win));
  1204. X  } /* mvwinsert */
  1205. FRIDAY_NIGHT
  1206. echo extracting - longname.c
  1207. sed 's/^X//' > longname.c << 'FRIDAY_NIGHT'
  1208. X/****************************************************************/
  1209. X/* Longname() routine of the PCcurses package            */
  1210. X/*                                */
  1211. X/****************************************************************/
  1212. X/* This version of curses is based on ncurses, a curses version    */
  1213. X/* originally written by Pavel Curtis at Cornell University.    */
  1214. X/* I have made substantial changes to make it run on IBM PC's,    */
  1215. X/* and therefore consider myself free to make it public domain.    */
  1216. X/*        Bjorn Larsson (...mcvax!enea!infovax!bl)    */
  1217. X/****************************************************************/
  1218. X/* 1.0:    Release:                    870515    */
  1219. X/****************************************************************/
  1220. X
  1221. X#include <curses.h>
  1222. X#include <curspriv.h>
  1223. X
  1224. X/****************************************************************/
  1225. X/* Longname() returns a pointer to a string describing the    */
  1226. X/* user terminal.                        */
  1227. X/****************************************************************/
  1228. X
  1229. Xchar *longname()
  1230. X  {
  1231. X  return("IBM PC BIOS");
  1232. X  }/* longname */
  1233. FRIDAY_NIGHT
  1234. echo extracting - make.man
  1235. sed 's/^X//' > make.man << 'FRIDAY_NIGHT'
  1236. XMAKE(1)            MS-DOS Programmer's Manual            MAKE(1)
  1237. X
  1238. XNAME
  1239. X   make - maintain program groups
  1240. X
  1241. XSYNOPSIS
  1242. X   make [-f <makefile>] [-ainpqrst] [<target>...]
  1243. X
  1244. XDESCRIPTION
  1245. X   Make executes commands in makefile to update one or more target names. Name
  1246. X   is typically a program. If no -f option is present, `makefile' is tried. If
  1247. X   makefile is `-', the standard input is taken. More than one -f option may
  1248. X   appear
  1249. X
  1250. X   Make updates a target if it depends on prerequisite files that have been
  1251. X   modified since the target was last modified, or if the target does not
  1252. X   exist.
  1253. X
  1254. X   Makefile contains a sequence of entries that specify dependencies. The
  1255. X   first line of an entry is a blank-separated list of targets, then a colon,
  1256. X   then a list of prerequisite files. Text following a semicolon, and all
  1257. X   following lines that begin with a tab, are shell commands to be executed to
  1258. X   update the target. If a name appears on the left of more than one `colon'
  1259. X   line, then it depends on all of the names on the right of the colon on
  1260. X   those lines, but only one command sequence may be specified for it. If a
  1261. X   name appears on a line with a double colon :: then the command sequence
  1262. X   following that line is performed only if the name is out of date with
  1263. X   respect to the names to the right of the double colon, and is not affected
  1264. X   by other double colon lines on which that name may appear.
  1265. X
  1266. X   Sharp and newline surround comments.
  1267. X
  1268. X   The following makefile says that `pgm' depends on two files `a.obj' and
  1269. X   `b.obj', and that they in turn depend on `.c' files and a common file
  1270. X   `incl'.
  1271. X
  1272. X          pgm: a.obj b.obj
  1273. X            cc a.obj b.obj -lm -o pgm
  1274. X          a.obj: incl a.c
  1275. X            cc -c a.c
  1276. X          b.obj: incl b.c
  1277. X            cc -c b.c
  1278. X
  1279. X   Makefile entries of the form
  1280. X
  1281. X          string1 = string2
  1282. X
  1283. X   are macro definitions. Subsequent appearances of $(string1) or ${string1}
  1284. X   are replaced by string2. If string1 is a single character, the parentheses
  1285. X   or braces are optional.
  1286. X
  1287. X   Make infers prerequisites for files for which makefile gives no construc-
  1288. X   tion commands. For example, a `.c' file may be inferred as prerequisite for
  1289. X   a `.obj' file and be compiled to produce the `.obj' file. Thus the prece-
  1290. X   ding example can be done more briefly:
  1291. X
  1292. X          pgm: a.obj b.obj
  1293. X            cc a.obj b.obj -lm -o pgm
  1294. X          a.obj b.obj: incl
  1295. X
  1296. X   Prerequisites are inferred according to selected suffixes listed as the
  1297. X   `prerequisites' for the special name `.SUFFIXES'; multiple lists accumu-
  1298. X   late; an empty list clears what came before. Order is significant; the
  1299. X   first possible name for which both a file and a rule as described in the
  1300. X   next paragraph exist is inferred.  The default list is
  1301. X
  1302. X          .SUFFIXES: .obj .asm .c
  1303. X
  1304. X   The rule to create a file with suffix s2 that depends on a similarly named
  1305. X   file with suffix s1 is specified as an entry for the `target' s1s2.  In
  1306. X   such an entry, the special macros
  1307. X
  1308. X       $* stands for the target name with suffix deleted,
  1309. X    $@ for the full target name,
  1310. X    $< for the complete list of prerequisites,
  1311. X    $? for the list of prerequisites that are out of date.
  1312. X
  1313. X   For example, a rule for making optimized `.obj' files from `.c' files is
  1314. X
  1315. X          .c.obj: ; cc -c -O -o $@ $*.c
  1316. X
  1317. X   Certain macros are used by the default inference rules to communicate op-
  1318. X   tional arguments to any resulting compilations.  In particular, `CFLAGS' is
  1319. X   used for cc(1) options, and AFLAGS for masm options. In addition, the macro
  1320. X   `MFLAGS' is filled in with the initial command line options supplied to
  1321. X   make. This simplifies maintaining a hierarchy of makefiles as one may then
  1322. X   invoke make on makefiles in subdirectories and pass along useful options.
  1323. X
  1324. X   Command lines are executed one at a time. First execution of the command
  1325. X   is attempted directly from make. If this fails, a secondary COMMAND.COM
  1326. X   processor is invoked to do the job. For commands executed by a secondary
  1327. X   COMMAND.COM processor, exit status may not be correct, which is a flaw in
  1328. X   MSDOS.
  1329. X
  1330. X   A command line is printed when it is executed unless the special target
  1331. X   `.SILENT' is in makefile, or the first character of the command is `@'.
  1332. X
  1333. X   Commands returning nonzero exit status cause make to terminate unless the
  1334. X   special target `.IGNORE' is in makefile or the command begins with the cha-
  1335. X   racter sequence <tab><hyphen>, or if the `-i' option was given.
  1336. X
  1337. X   Interrupt and quit cause the target to be deleted unless the target is a
  1338. X   directory or depends on the special name `.PRECIOUS'.
  1339. X
  1340. XOPTION
  1341. X   -a   Disregard date/time stamps, and perform all commands that would be
  1342. X       necessary to update the requested final target(s).
  1343. X   -f   Use the next command line token for the makefile name. If this is '-'
  1344. X       then use standard input.
  1345. X   -i   Equivalent to the special entry `.IGNORE:'. A single command may be
  1346. X       forced to behave this way by preceding it by '<tab>-'.
  1347. X   -n   Trace and print, but do not execute the commands needed to update the
  1348. X       targets.
  1349. X   -p   Print all macros and targets. Good for debugging your makefiles.
  1350. X   -q   Causes make to return the up-to-date-ness of the target as exit
  1351. X       status.
  1352. X   -r   Equivalent to an initial special entry `.SUFFIXES:' with no list. This
  1353. X       means that the built-in inference rules are not used.
  1354. X   -s   Equivalent to the special entry `.SILENT:'. A single command may be
  1355. X       forced to behave this way by preceding it by '@'.
  1356. X   -t   Touch, i.e. update the modified date of targets, without executing any
  1357. X       commands.
  1358. X
  1359. XFILES
  1360. X   makefile, command.com
  1361. X
  1362. XSEE ALSO
  1363. X   touch
  1364. X
  1365. XRESTRICTIONS
  1366. X   Some commands return nonzero status inappropriately.  Use -i to overcome
  1367. X   the difficulty.
  1368. X
  1369. X   If a command is executed by an invocation a secondary COMMAND.COM, and
  1370. X   ties to set environment variables, these settings will only affect the
  1371. X   environment of that secondary command processor. As soon asit terminates,
  1372. X   the settings are lost. Also, COMMAND.COM always return successful status,
  1373. X   even if it tries to execute a non-existen command. In general, the inten-
  1374. X   tion is that COMMAND.COM is only to be invoked to run simple commands as
  1375. X   COPY, TYPE, DEL and the like.
  1376. FRIDAY_NIGHT
  1377. echo pccurses.sh.2 completed!
  1378.  
  1379.  
  1380.