home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l217 / 2.ddi / PROGRAMS / MENU2.PRO < prev    next >
Encoding:
Prolog Source  |  1990-03-26  |  4.1 KB  |  115 lines

  1. /****************************************************************
  2.  
  3.   Copyright (c) 1986, 90 by Prolog Development Center
  4.  
  5.              menu
  6.   Implements a popup menu with at most 23 possible choices.
  7.   For more than 23 possible choices use longmenu.
  8.  
  9.   The up and down arrow keys can be used to move the bar
  10.   RETURN or F10  will select an indicated item.
  11.   Pressing Esc aborts menu selection and returns zero.
  12.  
  13.   The arguments to menu are:
  14.   
  15.   menu(ROW,COL,WINDOWATTR,FRAMEATTR,STRINGLIST,HEADER,STARTCHOICE,SELECTION)
  16.  
  17.     ROW and COL determines the position of the window
  18.     WATTR and FATTR determine the attributes for the window
  19.         and its frame - if FATTR is zero there
  20.         will be no frame around the window.
  21.     STRINGLIST is the list of menu items
  22.     HEADER is the text to appear at the top of the menu window
  23.     STARTCHOICE determines where the bar should be placed.
  24.  
  25.   Ex:     menu(5,5,7,7,[this,is,a,test],"select word",0,CHOICE)
  26.  
  27. ****************************************************************/
  28. /*                    remove comment to run  
  29. include "tdoms.pro"
  30. include "tpreds.pro"
  31. */
  32. PREDICATES
  33.   menu(ROW,COL,ATTR,ATTR,STRINGLIST,STRING,INTEGER,INTEGER)
  34.   menuinit(ROW,COL,ATTR,ATTR,STRINGLIST,STRING,ROW,COL)
  35.   menu1(SYMBOL,ROW,ATTR,STRINGLIST,ROW,COl,INTEGER)
  36.   menu2(KEY,STRINGLIST,ROW,ROW,ROW,SYMBOL)
  37.  
  38. CLAUSES
  39.   menu(ROW,COL,WATTR,FATTR,LIST,HEADER,STARTCHOICE,CHOICE) :-
  40.     menuinit(ROW,COL,WATTR,FATTR,LIST,HEADER,NOOFROW,LEN),
  41.     ST1=STARTCHOICE-1,max(0,ST1,ST2),MAX=NOOFROW-1,min(ST2,MAX,STARTROW),
  42.     menu1(cont,STARTROW,WATTR,LIST,NOOFROW,LEN,CHOICE),
  43.     removewindow.
  44.  
  45.   menuinit(ROW,COL,WATTR,FATTR,LIST,HEADER,NOOFROW,NOOFCOL):-
  46.     maxlen(LIST,0,MAXNOOFCOL),
  47.     str_len(HEADER,HEADLEN),
  48.     HEADL1=HEADLEN+4,
  49.     max(HEADL1,MAXNOOFCOL,NOOFCOL),
  50.     listlen(LIST,LEN), LEN>0,
  51.     NOOFROW=LEN,
  52.     adjframe(FATTR,NOOFROW,NOOFCOL,HH1,HH2),
  53.     adjustwindow(ROW,COL,HH1,HH2,AROW,ACOL),
  54.     makewindow(81,WATTR,FATTR,HEADER,AROW,ACOL,HH1,HH2),
  55.     writelist(0,NOOFCOL,LIST).
  56.  
  57.   menu1(cont,ROW,ATTR,LIST,MAXROW,NOOFCOL,CHOICE):-!,
  58.     reverseattr(ATTR,REV),
  59.     field_attr(ROW,0,NOOFCOL,REV),
  60.     cursor(ROW,0),
  61.     readkey(KEY),
  62.     field_attr(ROW,0,NOOFCOL,ATTR),
  63.     menu2(KEY,LIST,MAXROW,ROW,NEXTROW,CONT),
  64.     menu1(CONT,NEXTROW,ATTR,LIST,MAXROW,NOOFCOL,CHOICE).
  65.   menu1(esc,ROW,_,_,_,_,CHOICE):-!,CHOICE=ROW+1.
  66.   menu1(_,ROW,ATTR,_,_,NOOFCOL,CHOICE):-
  67.     CHOICE=ROW+1,
  68.     reverseattr(ATTR,REV),
  69.     field_attr(ROW,0,NOOFCOL,REV).
  70.  
  71.   menu2(esc,_,_,_,-1,esc):-!.
  72.   menu2(fkey(10),_,_,ROW,ROW,stop):-!.
  73.   menu2(char(C),LIST,_,_,CH,selection):-tryletter(C,LIST,CH),!.
  74. /*menu2(fkey(1),_,_,ROW,ROW,cont):-!,help.  If a help system is used */
  75.   menu2(cr,_,_,ROW,CH,selection):-!,CH=ROW.
  76.   menu2(up,_,_,ROW,NEXTROW,cont):-ROW>0,!,NEXTROW=ROW-1.
  77.   menu2(down,_,MAXROW,ROW,NEXTROW,cont):-NEXTROW=ROW+1,NEXTROW<MAXROW,!.
  78.   menu2(end,_,MAXROW,_,NEXT,cont):-!,NEXT=MAXROW-1.
  79.   menu2(pgdn,_,MAXROW,_,NEXT,cont):-!,NEXT=MAXROW-1.
  80.   menu2(home,_,_,_,0,cont):-!.
  81.   menu2(pgup,_,_,_,0,cont):-!.
  82.   menu2(_,_,_,ROW,ROW,cont).
  83.  
  84.  
  85.  
  86. /****************************************************************/
  87. /*             menu_repeat                */
  88. /* As menu but the window is not removed on return.        */
  89. /****************************************************************/
  90.  
  91. PREDICATES
  92.   nondeterm menu_repeat(ROW,COL,ATTR,ATTR,STRINGLIST,STRING,INTEGER,INTEGER)
  93.   nondeterm menu_repeat1(ROW,ATTR,STRINGLIST,ROW,COl,INTEGER)
  94.   nondeterm menu_repeat3(SYMBOL,ROW,ATTR,STRINGLIST,ROW,COl,INTEGER,INTEGER)
  95.  
  96. CLAUSES
  97.   menu_repeat(ROW,COL,WATTR,FATTR,LIST,HEADER,STARTCHOICE,CHOICE) :-
  98.     menuinit(ROW,COL,WATTR,FATTR,LIST,HEADER,NOOFROW,NOOFCOL),
  99.     ST1=STARTCHOICE-1,max(0,ST1,ST2),MAX=NOOFROW-1,min(ST2,MAX,STARTROW),
  100.     menu_repeat1(STARTROW,WATTR,LIST,NOOFROW,NOOFCOL,CHOICE).
  101.  
  102.   menu_repeat(_,_,_,_,_,_,_,_):-removewindow,fail.
  103.  
  104.  
  105.     
  106.   menu_repeat1(STARTROW,WATTR,LIST,NOOFROW,NOOFCOL,C):-
  107.     menu1(cont,STARTROW,WATTR,LIST,NOOFROW,NOOFCOL,C1),
  108.     menu_repeat3(cont,STARTROW,WATTR,LIST,NOOFROW,NOOFCOL,C1,C).
  109.         
  110.   menu_repeat3(_,_,_,_,_,_,C,C):-C<>0.
  111.   menu_repeat3(cont,_,WATTR,LIST,NOOFROW,NOOFCOL,C1,C):-
  112.     C1<>0,
  113.     XX=C1-1,
  114.     menu_repeat1(XX,WATTR,LIST,NOOFROW,NOOFCOL,C).
  115.