123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348 |
- unit menu;
- {---------------------------------------------------------------------------
- CncWare
- ----------------------------------------------------------------------------
- Filename..: menu.pp
- Programmer: Ken J. Wright
- Date......: 07/12/2000
- Purpose - Link to the Linux 'menu' library for ncurses menuing
- functions.
- -------------------------------< Revisions >---------------------------------
- Revision| Date | Prog| Description
- -----------------------------------------------------------------------------
- 1.00 | 07/12/00 | kjw | Initial release.
- -----------------------------------------------------------------------------
- }
- { Automatically converted by H2PAS.EXE from menu.h
- Utility made by Florian Klaempfl 25th-28th september 96
- Improvements made by Mark A. Malakanov 22nd-25th may 97
- Further improvements by Michael Van Canneyt, April 1998
- define handling and error recovery by Pierre Muller, June 1998 }
- interface
- { C default packing is dword }
- {$PACKRECORDS 4}
- {
- Copyright (c) 1998 Free Software Foundation, Inc.
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, distribute with modifications, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
- The above copyright notice and this permission notice shall be included
- in all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
- THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- Except as contained in this notice, the name(s) of the above copyright
- holders shall not be used in advertising or otherwise to promote the
- sale, use or other dealings in this Software without prior written
- authorization.
- }
- {
- Author: Juergen Pfeifer <[email protected]> 1995,1997
- }
- {$linklib menu}
- uses ncurses;
- {$include eti.inc}
- type
- Menu_Options = longint;
- Item_Options = longint;
- const
- { Menu options: }
- O_ONEVALUE = $01;
- O_SHOWDESC = $02;
- O_ROWMAJOR = $04;
- O_IGNORECASE = $08;
- O_SHOWMATCH = $10;
- O_NONCYCLIC = $20;
- { Item options: }
- O_SELECTABLE = $01;
- type
- tTEXT = record
- str : pchar;
- length : word;
- end;
- tITEM = record
- name : tTEXT; { name of menu item }
- description : tTEXT; { description of item, optional in display }
- imenu : ^tagMENU; { Pointer to parent menu }
- userptr : pointer; { Pointer to user defined per item data }
- opt : Item_Options; { Item options }
- index : integer; { Item number if connected to a menu }
- y : integer; { y and x location of item in menu }
- x : integer;
- value : bool; { Selection value }
- left : ^tagITEM; { neighbour items }
- right : ^tagITEM;
- up : ^tagITEM;
- down : ^tagITEM;
- end;
- pITEM = ^tITEM;
- ppITEM = ^pITEM;
- tagITEM = tITEM;
- Menu_Hook = procedure;cdecl;
- tMENU = record
- height : integer; { Nr. of chars high }
- width : integer; { Nr. of chars wide }
- rows : integer; { Nr. of items high }
- cols : integer; { Nr. of items wide }
- frows : integer; { Nr. of formatted items high }
- fcols : integer; { Nr. of formatted items wide }
- arows : integer; { Nr. of items high (actual) }
- namelen : integer; { Max. name length }
- desclen : integer; { Max. description length }
- marklen : integer; { Length of mark, if any }
- itemlen : integer; { Length of one item }
- spc_desc : integer; { Spacing for descriptor }
- spc_cols : integer; { Spacing for columns }
- spc_rows : integer; { Spacing for rows }
- pattern : ^char; { Buffer to store match chars }
- pindex : integer; { Index into pattern buffer }
- win : ^WINDOW; { Window containing menu }
- sub : ^WINDOW; { Subwindow for menu display }
- userwin : ^WINDOW; { User's window }
- usersub : ^WINDOW; { User's subwindow }
- items : ^pITEM; { array of items }
- nitems : integer; { Nr. of items in menu }
- curitem : pITEM; { Current item }
- toprow : integer; { Top row of menu }
- fore : chtype; { Selection attribute }
- back : chtype; { Nonselection attribute }
- grey : chtype; { Inactive attribute }
- pad : byte; { Pad character }
- menuinit : Menu_Hook; { User hooks }
- menuterm : Menu_Hook;
- iteminit : Menu_Hook;
- itemterm : Menu_Hook;
- userptr : pointer; { Pointer to menus user data }
- mark : pchar; { Pointer to marker string }
- opt : Menu_Options; { Menu options }
- status : word; { Internal state of menu }
- end;
- pMENU = ^tMENU;
- ppMENU = ^pMENU;
- tagMENU = tMENU;
- const
- { Define keys }
- REQ_LEFT_ITEM = KEY_MAX + 1;
- REQ_RIGHT_ITEM = KEY_MAX + 2;
- REQ_UP_ITEM = KEY_MAX + 3;
- REQ_DOWN_ITEM = KEY_MAX + 4;
- REQ_SCR_ULINE = KEY_MAX + 5;
- REQ_SCR_DLINE = KEY_MAX + 6;
- REQ_SCR_DPAGE = KEY_MAX + 7;
- REQ_SCR_UPAGE = KEY_MAX + 8;
- REQ_FIRST_ITEM = KEY_MAX + 9;
- REQ_LAST_ITEM = KEY_MAX + 10;
- REQ_NEXT_ITEM = KEY_MAX + 11;
- REQ_PREV_ITEM = KEY_MAX + 12;
- REQ_TOGGLE_ITEM = KEY_MAX + 13;
- REQ_CLEAR_PATTERN = KEY_MAX + 14;
- REQ_BACK_PATTERN = KEY_MAX + 15;
- REQ_NEXT_MATCH = KEY_MAX + 16;
- REQ_PREV_MATCH = KEY_MAX + 17;
- MIN_MENU_COMMAND = KEY_MAX + 1;
- MAX_MENU_COMMAND = KEY_MAX + 17;
- {
- Some AT&T code expects MAX_COMMAND to be out-of-band not
- just for menu commands but for forms ones as well.
- /
- #if defined(MAX_COMMAND)
- # if (MAX_MENU_COMMAND > MAX_COMMAND)
- # error Something is wrong -- MAX_MENU_COMMAND is greater than MAX_COMMAND
- # elif (MAX_COMMAND != (KEY_MAX + 128))
- # error Something is wrong -- MAX_COMMAND is already inconsistently defined.
- # endif
- #else
- # define MAX_COMMAND (KEY_MAX + 128)
- #endif
- }
- { --------- prototypes for libmenu functions ----------------------------- }
- function menu_items(_para1:pMENU):ppITEM;cdecl;
- function current_item(_para1:pMENU):pITEM;cdecl;
- function new_item(_para1:pchar; _para2:pchar):pITEM;cdecl;
- function new_menu(_para1:ppITEM):pMENU;cdecl;
- function item_opts(_para1:pITEM):Item_Options;cdecl;
- function menu_opts(_para1:pMENU):Menu_Options;cdecl;
- (*
- function item_init(_para1:pMENU):Menu_Hook;
- function item_term(_para1:pMENU):Menu_Hook;
- function menu_init(_para1:pMENU):Menu_Hook;
- function menu_term(_para1:pMENU):Menu_Hook;
- *)
- function menu_sub(_para1:pMENU):pWINDOW;cdecl;
- function menu_win(_para1:pMENU):pWINDOW;cdecl;
- function item_description(_para1:pITEM):pchar;cdecl;
- function item_name(_para1:pITEM):pchar;cdecl;
- function menu_mark(_para1:pMENU):pchar;cdecl;
- function menu_request_name(_para1:longint):pchar;cdecl;
- function menu_pattern(_para1:pMENU):pchar;cdecl;
- function menu_userptr(_para1:pMENU):pointer;cdecl;
- function item_userptr(_para1:pITEM):pointer;cdecl;
- function menu_back(_para1:pMENU):chtype;cdecl;
- function menu_fore(_para1:pMENU):chtype;cdecl;
- function menu_grey(_para1:pMENU):chtype;cdecl;
- function free_item(_para1:pITEM):longint;cdecl;
- function free_menu(_para1:pMENU):longint;cdecl;
- function item_count(_para1:pMENU):longint;cdecl;
- function item_index(_para1:pITEM):longint;cdecl;
- function item_opts_off(_para1:pITEM; _para2:Item_Options):longint;cdecl;
- function item_opts_on(_para1:pITEM; _para2:Item_Options):longint;cdecl;
- function menu_driver(_para1:pMENU; _para2:longint):longint;cdecl;
- function menu_opts_off(_para1:pMENU; _para2:Menu_Options):longint;cdecl;
- function menu_opts_on(_para1:pMENU; _para2:Menu_Options):longint;cdecl;
- function menu_pad(_para1:pMENU):longint;cdecl;
- function pos_menu_cursor(_para1:pMENU):longint;cdecl;
- function post_menu(_para1:pMENU):longint;cdecl;
- function scale_menu(_para1:pMENU; _para2:plongint; _para3:plongint):longint;cdecl;
- function set_current_item(menu:pMENU; item:pITEM):longint;cdecl;
- { function set_item_init(_para1:pMENU; _para2:Menu_Hook):longint;cdecl;}
- function set_item_opts(_para1:pITEM; _para2:Item_Options):longint;cdecl;
- { function set_item_term(_para1:pMENU; _para2:Menu_Hook):longint;cdecl;}
- function set_item_userptr(_para1:pITEM; _para2:pointer):longint;cdecl;
- function set_item_value(_para1:pITEM; _para2:bool):longint;cdecl;
- function set_menu_back(_para1:pMENU; _para2:chtype):longint;cdecl;
- function set_menu_fore(_para1:pMENU; _para2:chtype):longint;cdecl;
- function set_menu_format(_para1:pMENU; _para2:longint; _para3:longint):longint;cdecl;
- function set_menu_grey(_para1:pMENU; _para2:chtype):longint;cdecl;
- { function set_menu_init(_para1:pMENU; _para2:Menu_Hook):longint;cdecl;}
- function set_menu_items(_para1:pMENU; _para2:ppITEM):longint;cdecl;
- function set_menu_mark(_para1:pMENU; _para2:pchar):longint;cdecl;
- function set_menu_opts(_para1:pMENU; _para2:Menu_Options):longint;cdecl;
- function set_menu_pad(_para1:pMENU; _para2:longint):longint;cdecl;
- function set_menu_pattern(_para1:pMENU; _para2:pchar):longint;cdecl;
- function set_menu_sub(_para1:pMENU; _para2:pWINDOW):longint;cdecl;
- { function set_menu_term(_para1:pMENU; _para2:Menu_Hook):longint;cdecl;}
- function set_menu_userptr(_para1:pMENU; _para2:pointer):longint;cdecl;
- function set_menu_win(_para1:pMENU; _para2:pWINDOW):longint;cdecl;
- function set_top_row(_para1:pMENU; _para2:longint):longint;cdecl;
- function top_row(_para1:pMENU):longint;cdecl;
- function unpost_menu(_para1:pMENU):longint;cdecl;
- function menu_request_by_name(_para1:pchar):longint;cdecl;
- function set_menu_spacing(_para1:pMENU; _para2:longint; _para3:longint; _para4:longint):longint;cdecl;
- function menu_spacing(_para1:pMENU; _para2:plongint; _para3:plongint; _para4:plongint):longint;cdecl;
- function item_value(_para1:pITEM):bool;cdecl;
- function item_visible(_para1:pITEM):bool;cdecl;
- { procedure menu_format(_para1:pMENU; _para2:plongint; _para3:plongint);}
- implementation
- {const External_library=''; Setup as you need!}
- function menu_items(_para1:pMENU):ppITEM;cdecl;external;
- function current_item(_para1:pMENU):pITEM;cdecl;external;
- function new_item(_para1:pchar; _para2:pchar):pITEM;cdecl;external;
- function new_menu(_para1:ppITEM):pMENU;cdecl;external;
- function item_opts(_para1:pITEM):Item_Options;cdecl;external;
- function menu_opts(_para1:pMENU):Menu_Options;cdecl;external;
- (*
- function item_init(_para1:pMENU):Menu_Hook;
- begin
- { You must implemented this function }
- end;
- function item_term(_para1:pMENU):Menu_Hook;
- begin
- { You must implemented this function }
- end;
- function menu_init(_para1:pMENU):Menu_Hook;
- begin
- { You must implemented this function }
- end;
- function menu_term(_para1:pMENU):Menu_Hook;
- begin
- { You must implemented this function }
- end;
- *)
- function menu_sub(_para1:pMENU):pWINDOW;cdecl;external;
- function menu_win(_para1:pMENU):pWINDOW;cdecl;external;
- function item_description(_para1:pITEM):pchar;cdecl;external;
- function item_name(_para1:pITEM):pchar;cdecl;external;
- function menu_mark(_para1:pMENU):pchar;cdecl;external;
- function menu_request_name(_para1:longint):pchar;cdecl;external;
- function menu_pattern(_para1:pMENU):pchar;cdecl;external;
- function menu_userptr(_para1:pMENU):pointer;cdecl;external;
- function item_userptr(_para1:pITEM):pointer;cdecl;external;
- function menu_back(_para1:pMENU):chtype;cdecl;external;
- function menu_fore(_para1:pMENU):chtype;cdecl;external;
- function menu_grey(_para1:pMENU):chtype;cdecl;external;
- function free_item(_para1:pITEM):longint;cdecl;external;
- function free_menu(_para1:pMENU):longint;cdecl;external;
- function item_count(_para1:pMENU):longint;cdecl;external;
- function item_index(_para1:pITEM):longint;cdecl;external;
- function item_opts_off(_para1:pITEM; _para2:Item_Options):longint;cdecl;external;
- function item_opts_on(_para1:pITEM; _para2:Item_Options):longint;cdecl;external;
- function menu_driver(_para1:pMENU; _para2:longint):longint;cdecl;external;
- function menu_opts_off(_para1:pMENU; _para2:Menu_Options):longint;cdecl;external;
- function menu_opts_on(_para1:pMENU; _para2:Menu_Options):longint;cdecl;external;
- function menu_pad(_para1:pMENU):longint;cdecl;external;
- function pos_menu_cursor(_para1:pMENU):longint;cdecl;external;
- function post_menu(_para1:pMENU):longint;cdecl;external;
- function scale_menu(_para1:pMENU; _para2:plongint; _para3:plongint):longint;cdecl;external;
- function set_current_item(menu:pMENU; item:pITEM):longint;cdecl;external;
- { function set_item_init(_para1:pMENU; _para2:Menu_Hook):longint;cdecl;external;}
- function set_item_opts(_para1:pITEM; _para2:Item_Options):longint;cdecl;external;
- { function set_item_term(_para1:pMENU; _para2:Menu_Hook):longint;cdecl;external;}
- function set_item_userptr(_para1:pITEM; _para2:pointer):longint;cdecl;external;
- function set_item_value(_para1:pITEM; _para2:bool):longint;cdecl;external;
- function set_menu_back(_para1:pMENU; _para2:chtype):longint;cdecl;external;
- function set_menu_fore(_para1:pMENU; _para2:chtype):longint;cdecl;external;
- function set_menu_format(_para1:pMENU; _para2:longint; _para3:longint):longint;cdecl;external;
- function set_menu_grey(_para1:pMENU; _para2:chtype):longint;cdecl;external;
- { function set_menu_init(_para1:pMENU; _para2:Menu_Hook):longint;cdecl;external;}
- function set_menu_items(_para1:pMENU; _para2:ppITEM):longint;cdecl;external;
- function set_menu_mark(_para1:pMENU; _para2:pchar):longint;cdecl;external;
- function set_menu_opts(_para1:pMENU; _para2:Menu_Options):longint;cdecl;external;
- function set_menu_pad(_para1:pMENU; _para2:longint):longint;cdecl;external;
- function set_menu_pattern(_para1:pMENU; _para2:pchar):longint;cdecl;external;
- function set_menu_sub(_para1:pMENU; _para2:pWINDOW):longint;cdecl;external;
- { function set_menu_term(_para1:pMENU; _para2:Menu_Hook):longint;cdecl;external;}
- function set_menu_userptr(_para1:pMENU; _para2:pointer):longint;cdecl;external;
- function set_menu_win(_para1:pMENU; _para2:pWINDOW):longint;cdecl;external;
- function set_top_row(_para1:pMENU; _para2:longint):longint;cdecl;external;
- function top_row(_para1:pMENU):longint;cdecl;external;
- function unpost_menu(_para1:pMENU):longint;cdecl;external;
- function menu_request_by_name(_para1:pchar):longint;cdecl;external;
- function set_menu_spacing(_para1:pMENU; _para2:longint; _para3:longint; _para4:longint):longint;cdecl;external;
- function menu_spacing(_para1:pMENU; _para2:plongint; _para3:plongint; _para4:plongint):longint;cdecl;external;
- function item_value(_para1:pITEM):bool;cdecl;external;
- function item_visible(_para1:pITEM):bool;cdecl;external;
- (*
- procedure menu_format(_para1:pMENU; _para2:plongint; _para3:plongint);
- begin
- { You must implemented this function }
- end;
- *)
- begin
- end.
|