rosen@gypsy.UUCP (05/31/85)
Following is a specification and body for interfacing the Unix 'curses' package with Verdix Ada. It needs more work to overcome the inherent macros of the 'curses' package, but that is only a matter of time. ---------------------------CUT----HERE------------------------------ with SYSTEM; with U_ENV; -- This package requires the elaboration of U_ENV package CURSES is UNDEFINED_WINDOW_ERROR: exception; type WINDOW is new SYSTEM.ADDRESS; STDSCR: WINDOW; LINES: constant POSITIVE := 23; COLUMNS: constant POSITIVE := 80; function INITSCR return WINDOW; procedure DELWIN (WIN: WINDOW); procedure ENDWIN; function NEWWIN (LINES, COLS, BEGIN_Y, BEGIN_X: INTEGER) return WINDOW; function SUBWIN (WIN: WINDOW; LINES, COLS, BEGIN_X, BEGIN_Y: INTEGER) return WINDOW; procedure MVWIN (WIN: WINDOW; Y, X: INTEGER); procedure ADDCH (CH: CHARACTER); procedure WADDCH (WIN: WINDOW; CH: CHARACTER); procedure ADDSTR (S: STRING); procedure WADDSTR (WIN: WINDOW; S: STRING); procedure BOX (WIN: WINDOW; VERTICAL: CHARACTER := '|'; HORIZONTAL: CHARACTER := '-'); procedure CLEAR; procedure WCLEAR(WIN: WINDOW); procedure CLEAROK (SCR: WINDOW; BOOLF: boolean); procedure CLRTOBOT; procedure WCLRTOBOT (WIN: WINDOW); procedure CLRTOEOL; procedure WCLRTOEOL (WIN: WINDOW); procedure DELCH; procedure WDELCH (WIN: WINDOW); procedure DELETELN; procedure WDELETELN (WIN: WINDOW); procedure ERASE; procedure WERASE (WIN: WINDOW); procedure INSCH (CH: CHARACTER); procedure WINSCH (WIN: WINDOW; CH: CHARACTER); procedure INSERTLN; procedure WINSERTLN (WIN: WINDOW); procedure MOVE (Y, X: INTEGER); procedure WMOVE (WIN: WINDOW; Y, X: INTEGER); procedure OVERLAY (WIN1, WIN2: WINDOW); procedure OVERWRITE (WIN1, WIN2: WINDOW); procedure REFRESH; procedure WREFRESH (WIN: WINDOW); procedure STANDOUT; procedure WSTANDOUT (WIN: WINDOW); procedure STANDEND; procedure WSTANDEND (WIN: WINDOW); private pragma INTERFACE (C, INITSCR); pragma INTERFACE (C, DELWIN); pragma INTERFACE (C, ENDWIN); pragma INTERFACE (C, NEWWIN); pragma INTERFACE (C, SUBWIN); pragma INTERFACE (C, MVWIN); pragma INTERFACE (C, WADDCH); pragma INTERFACE (C, WADDSTR); pragma INTERFACE (C, BOX); pragma INTERFACE (C, WCLEAR); pragma INTERFACE (C, CLEAROK); pragma INTERFACE (C, WCLRTOBOT); pragma INTERFACE (C, WCLRTOEOL); pragma INTERFACE (C, WDELCH); pragma INTERFACE (C, WDELETELN); pragma INTERFACE (C, WERASE); pragma INTERFACE (C, WINSCH); pragma INTERFACE (C, WINSERTLN); pragma INTERFACE (C, WMOVE); pragma INTERFACE (C, OVERLAY); pragma INTERFACE (C, OVERWRITE); pragma INTERFACE (C, WREFRESH); pragma INTERFACE (C, WSTANDOUT); pragma INTERFACE (C, WSTANDEND); end CURSES; package body CURSES is procedure ADDCH (CH: CHARACTER) is begin if (STDSCR = WINDOW(0)) then raise UNDEFINED_WINDOW_ERROR; else WADDCH (STDSCR, CH); end if; end ADDCH; procedure ADDSTR (S: STRING) is begin if (STDSCR = WINDOW(0)) then raise UNDEFINED_WINDOW_ERROR; else WADDSTR (STDSCR, S); end if; end ADDSTR; procedure CLEAR is begin if (STDSCR = WINDOW(0)) then raise UNDEFINED_WINDOW_ERROR; else WCLEAR (STDSCR); end if; end CLEAR; procedure CLRTOBOT is begin if (STDSCR = WINDOW(0)) then raise UNDEFINED_WINDOW_ERROR; else WCLRTOBOT (STDSCR); end if; end CLRTOBOT; procedure CLRTOEOL is begin if (STDSCR = WINDOW(0)) then raise UNDEFINED_WINDOW_ERROR; else WCLRTOEOL (STDSCR); end if; end CLRTOEOL; procedure DELCH is begin if (STDSCR = WINDOW(0)) then raise UNDEFINED_WINDOW_ERROR; else WDELCH (STDSCR); end if; end DELCH; procedure DELETELN is begin if (STDSCR = WINDOW(0)) then raise UNDEFINED_WINDOW_ERROR; else WDELETELN (STDSCR); end if; end DELETELN; procedure ERASE is begin if (STDSCR = WINDOW(0)) then raise UNDEFINED_WINDOW_ERROR; else WERASE (STDSCR); end if; end ERASE; procedure INSCH (CH: CHARACTER) is begin if (STDSCR = WINDOW(0)) then raise UNDEFINED_WINDOW_ERROR; else WINSCH (STDSCR, CH); end if; end INSCH; procedure INSERTLN is begin if (STDSCR = WINDOW(0)) then raise UNDEFINED_WINDOW_ERROR; else WINSERTLN (STDSCR); end if; end INSERTLN; procedure MOVE (Y, X: INTEGER) is begin if (STDSCR = WINDOW(0)) then raise UNDEFINED_WINDOW_ERROR; else WMOVE (STDSCR, Y, X); end if; end MOVE; procedure REFRESH is begin if (STDSCR = WINDOW(0)) then raise UNDEFINED_WINDOW_ERROR; else WREFRESH (STDSCR); end if; end REFRESH; procedure STANDOUT is begin if (STDSCR = WINDOW(0)) then raise UNDEFINED_WINDOW_ERROR; else WSTANDOUT (STDSCR); end if; end STANDOUT; procedure STANDEND is begin if (STDSCR = WINDOW(0)) then raise UNDEFINED_WINDOW_ERROR; else WSTANDEND (STDSCR); end if; end STANDEND; begin STDSCR := WINDOW(0); end CURSES;