menu.pp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. {$MODE OBJFPC}
  2. unit menu;
  3. interface
  4. uses
  5. ncurses;
  6. {$LINKLIB menuw}
  7. {$PACKRECORDS C}
  8. {$INCLUDE eti.inc}
  9. const
  10. libmenu = 'menuw';
  11. type
  12. cuchar = Byte;
  13. Menu_Options = Longint;
  14. Item_Options = Longint;
  15. const
  16. // TEXT = TEXT_ncurses;
  17. { Menu options: }
  18. O_ONEVALUE = $01; { Only one item can be selected for this menu. }
  19. O_SHOWDESC = $02; { Display the item descriptions when the menu is posted. }
  20. O_ROWMAJOR = $04; { Display the menu in row-major order. }
  21. O_IGNORECASE = $08; { Ignore the case when pattern-matching. }
  22. O_SHOWMATCH = $10; { Move the cursor to within the item name while pattern-matching. }
  23. O_NONCYCLIC = $20; { Don't wrap around next-item and previous-item, requests to the other end of the menu. }
  24. { Item options: }
  25. O_SELECTABLE = $01;
  26. type
  27. TTEXT = record
  28. str : PChar;
  29. length : Word;
  30. end;
  31. ppITEM = ^pITEM;
  32. pITEM = ^tITEM;
  33. pMENU = ^tMENU;
  34. ppMENU = ^pMENU;
  35. tITEM = record
  36. name : TTEXT; { name of menu item }
  37. description : TTEXT; { description of item, optional in display }
  38. imenu : pMENU; { Pointer to parent menu }
  39. userptr : Pointer; { Pointer to user defined per item data }
  40. opt : Item_Options; { Item options }
  41. index : Smallint; { Item number if connected to a menu }
  42. y : Smallint; { y and x location of item in menu }
  43. x : Smallint;
  44. value : Bool; { Selection value }
  45. left : pITEM; { neighbor items }
  46. right : pITEM;
  47. up : pITEM;
  48. down : pITEM;
  49. end;
  50. tagITEM = tITEM;
  51. Menu_Hook = procedure (_para1:pMENU);cdecl;
  52. tMENU = record
  53. height : Smallint; { Nr. of chars high }
  54. width : Smallint; { Nr. of chars wide }
  55. rows : Smallint; { Nr. of items high }
  56. cols : Smallint; { Nr. of items wide }
  57. frows : Smallint; { Nr. of formatted items high }
  58. fcols : Smallint; { Nr. of formatted items wide }
  59. arows : Smallint; { Nr. of items high (actual) }
  60. namelen : Smallint; { Max. name length }
  61. desclen : Smallint; { Max. description length }
  62. marklen : Smallint; { Length of mark, if any }
  63. itemlen : Smallint; { Length of one item }
  64. spc_desc : Smallint; { Spacing for descriptor }
  65. spc_cols : Smallint; { Spacing for columns }
  66. spc_rows : Smallint; { Spacing for rows }
  67. pattern : PChar; { Buffer to store match chars }
  68. pindex : Smallint; { Index into pattern buffer }
  69. win : PWINDOW; { Window containing menu }
  70. sub : PWINDOW; { Subwindow for menu display }
  71. userwin : PWINDOW; { User's window }
  72. usersub : PWINDOW; { User's subwindow }
  73. items : ppITEM; { array of items }
  74. nitems : Smallint; { Nr. of items in menu }
  75. curitem : pITEM; { Current item }
  76. toprow : Smallint; { Top row of menu }
  77. fore : chtype; { Selection attribute }
  78. back : chtype; { Nonselection attribute }
  79. grey : chtype; { Inactive attribute }
  80. pad : cuchar; { Pad character }
  81. menuinit : Menu_Hook; { User hooks }
  82. menuterm : Menu_Hook;
  83. iteminit : Menu_Hook;
  84. itemterm : Menu_Hook;
  85. userptr : Pointer; { Pointer to menus user data }
  86. mark : PChar; { Pointer to marker string }
  87. opt : Menu_Options; { Menu options }
  88. status : Word; { Internal state of menu }
  89. end;
  90. tagMENU = tMENU;
  91. { Define keys }
  92. const
  93. REQ_LEFT_ITEM = KEY_MAX + 1;
  94. REQ_RIGHT_ITEM = KEY_MAX + 2;
  95. REQ_UP_ITEM = KEY_MAX + 3;
  96. REQ_DOWN_ITEM = KEY_MAX + 4;
  97. REQ_SCR_ULINE = KEY_MAX + 5;
  98. REQ_SCR_DLINE = KEY_MAX + 6;
  99. REQ_SCR_DPAGE = KEY_MAX + 7;
  100. REQ_SCR_UPAGE = KEY_MAX + 8;
  101. REQ_FIRST_ITEM = KEY_MAX + 9;
  102. REQ_LAST_ITEM = KEY_MAX + 10;
  103. REQ_NEXT_ITEM = KEY_MAX + 11;
  104. REQ_PREV_ITEM = KEY_MAX + 12;
  105. REQ_TOGGLE_ITEM = KEY_MAX + 13;
  106. REQ_CLEAR_PATTERN = KEY_MAX + 14;
  107. REQ_BACK_PATTERN = KEY_MAX + 15;
  108. REQ_NEXT_MATCH = KEY_MAX + 16;
  109. REQ_PREV_MATCH = KEY_MAX + 17;
  110. MIN_MENU_COMMAND = KEY_MAX + 1;
  111. MAX_MENU_COMMAND = KEY_MAX + 17;
  112. {
  113. * Some AT&T code expects MAX_COMMAND to be out-of-band not
  114. * just for menu commands but for forms ones as well.
  115. }
  116. { --------- prototypes for libmenu functions ----------------------------- }
  117. function menu_items(_para1:PMENU):ppITEM; cdecl;external libncurses;
  118. function current_item(_para1:PMENU):pITEM; cdecl;external libncurses;
  119. function new_item(_para1:PChar; _para2:PChar):pITEM; cdecl;external libncurses;
  120. function new_menu(_para1:PPITEM):pMENU; cdecl;external libncurses;
  121. function item_opts(_para1:PITEM):Item_Options; cdecl;external libncurses;
  122. function menu_opts(_para1:PMENU):Menu_Options; cdecl;external libncurses;
  123. function item_init(_para1:PMENU):Menu_Hook; cdecl;external libncurses;
  124. function item_term(_para1:PMENU):Menu_Hook; cdecl;external libncurses;
  125. function menu_init(_para1:PMENU):Menu_Hook; cdecl;external libncurses;
  126. function menu_term(_para1:PMENU):Menu_Hook; cdecl;external libncurses;
  127. function menu_sub(_para1:PMENU):PWINDOW; cdecl;external libncurses;
  128. function menu_win(_para1:PMENU):PWINDOW; cdecl;external libncurses;
  129. function item_description(_para1:PITEM):PChar; cdecl;external libncurses;
  130. function item_name(_para1:PITEM):PChar; cdecl;external libncurses;
  131. function menu_mark(_para1:PMENU):PChar; cdecl;external libncurses;
  132. function menu_request_name(_para1:Longint):PChar; cdecl;external libncurses;
  133. function menu_pattern(_para1:PMENU):PChar; cdecl;external libncurses;
  134. function menu_userptr(_para1:PMENU):Pointer; cdecl;external libncurses;
  135. function item_userptr(_para1:PITEM):Pointer; cdecl;external libncurses;
  136. function menu_back(_para1:PMENU):chtype; cdecl;external libncurses;
  137. function menu_fore(_para1:PMENU):chtype; cdecl;external libncurses;
  138. function menu_grey(_para1:PMENU):chtype; cdecl;external libncurses;
  139. function free_item(_para1:PITEM):Longint; cdecl;external libncurses;
  140. function free_menu(_para1:PMENU):Longint; cdecl;external libncurses;
  141. function item_count(_para1:PMENU):Longint; cdecl;external libncurses;
  142. function item_index(_para1:PITEM):Longint; cdecl;external libncurses;
  143. function item_opts_off(_para1:PITEM; _para2:Item_Options):Longint; cdecl;external libncurses;
  144. function item_opts_on(_para1:PITEM; _para2:Item_Options):Longint; cdecl;external libncurses;
  145. function menu_driver(_para1:PMENU; _para2:Longint):Longint; cdecl;external libncurses;
  146. function menu_opts_off(_para1:PMENU; _para2:Menu_Options):Longint; cdecl;external libncurses;
  147. function menu_opts_on(_para1:PMENU; _para2:Menu_Options):Longint; cdecl;external libncurses;
  148. function menu_pad(_para1:PMENU):Longint; cdecl;external libncurses;
  149. function pos_menu_cursor(_para1:PMENU):Longint; cdecl;external libncurses;
  150. function post_menu(_para1:PMENU):Longint; cdecl;external libncurses;
  151. function scale_menu(_para1:PMENU; _para2:PLongint; _para3:PLongint):Longint; cdecl;external libncurses;
  152. function set_current_item(menu:PMENU; item:PITEM):Longint; cdecl;external libncurses;
  153. //function set_item_init(_para1:PMENU; _para2:procedure (_para1:PMENU)):Longint; cdecl;external libncurses;
  154. function set_item_init(_para1:PMENU; _para2:Menu_Hook):Longint; cdecl;external libncurses;
  155. function set_item_opts(_para1:PITEM; _para2:Item_Options):Longint; cdecl;external libncurses;
  156. //function set_item_term(_para1:PMENU; _para2:procedure (_para1:PMENU)):Longint; cdecl;external libncurses;
  157. function set_item_term(_para1:PMENU; _para2:Menu_Hook):Longint; cdecl;external libncurses;
  158. function set_item_userptr(_para1:PITEM; _para2:Pointer):Longint; cdecl;external libncurses;
  159. function set_item_value(_para1:PITEM; _para2:Bool):Longint; cdecl;external libncurses;
  160. function set_menu_back(_para1:PMENU; _para2:chtype):Longint; cdecl;external libncurses;
  161. function set_menu_fore(_para1:PMENU; _para2:chtype):Longint; cdecl;external libncurses;
  162. function set_menu_format(_para1:PMENU; _para2:Longint; _para3:Longint):Longint; cdecl;external libncurses;
  163. function set_menu_grey(_para1:PMENU; _para2:chtype):Longint; cdecl;external libncurses;
  164. //function set_menu_init(_para1:PMENU; _para2:procedure (_para1:PMENU)):Longint; cdecl;external libncurses;
  165. function set_menu_init(_para1:PMENU; _para2:Menu_Hook):Longint; cdecl;external libncurses;
  166. function set_menu_items(_para1:PMENU; _para2:PPITEM):Longint; cdecl;external libncurses;
  167. function set_menu_mark(_para1:PMENU; _para2:PChar):Longint; cdecl;external libncurses;
  168. function set_menu_opts(_para1:PMENU; _para2:Menu_Options):Longint; cdecl;external libncurses;
  169. function set_menu_pad(_para1:PMENU; _para2:Longint):Longint; cdecl;external libncurses;
  170. function set_menu_pattern(_para1:PMENU; _para2:PChar):Longint; cdecl;external libncurses;
  171. function set_menu_sub(_para1:PMENU; _para2:PWINDOW):Longint; cdecl;external libncurses;
  172. //function set_menu_term(_para1:PMENU; _para2:procedure (_para1:PMENU)):Longint; cdecl;external libncurses;
  173. function set_menu_term(_para1:PMENU; _para2:Menu_Hook):Longint; cdecl;external libncurses;
  174. function set_menu_userptr(_para1:PMENU; _para2:Pointer):Longint; cdecl;external libncurses;
  175. function set_menu_win(_para1:PMENU; _para2:PWINDOW):Longint; cdecl;external libncurses;
  176. function set_top_row(_para1:PMENU; _para2:Longint):Longint; cdecl;external libncurses;
  177. function top_row(_para1:PMENU):Longint; cdecl;external libncurses;
  178. function unpost_menu(_para1:PMENU):Longint; cdecl;external libncurses;
  179. function menu_request_by_name(_para1:PChar):Longint; cdecl;external libncurses;
  180. function set_menu_spacing(_para1:PMENU; _para2:Longint; _para3:Longint; _para4:Longint):Longint; cdecl;external libncurses;
  181. function menu_spacing(_para1:PMENU; _para2:PLongint; _para3:PLongint; _para4:PLongint):Longint; cdecl;external libncurses;
  182. function item_value(_para1:PITEM):Bool; cdecl;external libncurses;
  183. function item_visible(_para1:PITEM):Bool; cdecl;external libncurses;
  184. procedure menu_format(_para1:PMENU; _para2:PLongint; _para3:PLongint); cdecl;external libncurses;
  185. implementation
  186. end.