home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l216 / 1.ddi / LINEMENU.PRO < prev    next >
Encoding:
Prolog Source  |  1987-03-23  |  2.5 KB  |  69 lines

  1.  
  2. /****************************************************************
  3.                                                               
  4.      Turbo Prolog Toolbox
  5.      (C) Copyright 1987 Borland International.                
  6.                                                               
  7.              linemenu                
  8.  Implements a popup menu in a horizontal line.        
  9.                                 
  10.  The arrow keys (left and right) can be used to move the bar.    
  11.  The RETURN or F10 keys will select an indicated item.  
  12.  Pressing Esc aborts menu selection and returns a zero.    
  13. ****************************************************************/
  14.  
  15. PREDICATES
  16.   linemenu(ROW,ATTR,ATTR,STRINGLIST,INTEGER)
  17.   linemenu1(SYMBOL,ATTR,STRINGLIST,COL,COL,COL,COL)
  18.   linemenu2(KEY,STRINGLIST,COL,COL,COL,SYMBOL)
  19.   writelinelist(COL,COL,STRINGLIST)
  20.   index(COL,STRINGLIST,STRING)
  21.  
  22. CLAUSES
  23.   linemenu(ROW,WATTR,FATTR,LIST,CHOICE) :-
  24.     listlen(LIST,N),N=LISTLEN,          /* returns number of elements in list */
  25.     adjframe(FATTR,1,78,AR,_),          /* if FATTR not equal 0 add to window */
  26.     JMP=78 div LISTLEN,
  27.     makewindow(81,WATTR,FATTR,"",ROW,0,AR,80),
  28.     writelinelist(0,JMP,LIST),
  29.     linemenu1(cont,WATTR,LIST,0,LISTLEN,JMP,ENDCOL),
  30.     CHOICE=ENDCOL,
  31.     removewindow.
  32.  
  33.   linemenu1(cont,ATTR,LIST,SEL,MAX,JMP,CHOICE):-
  34.     COL=SEL*JMP,
  35.     cursor(0,COL),
  36.     index(SEL,LIST,STR),str_len(STR,STRLEN),
  37.     reverseattr(ATTR,REV),
  38.     field_attr(0,COL,STRLEN,REV),
  39.     readkey(KEY),          /* In TPREDS.PRO returns the tokenized input */
  40.     field_attr(0,COL,STRLEN,ATTR),
  41.     linemenu2(KEY,LIST,MAX,SEL,SEL1,CONT),!,
  42.     linemenu1(CONT,ATTR,LIST,SEL1,MAX,JMP,CHOICE).
  43.   linemenu1(_,_,_,SEL,_,_,CHOICE):-CHOICE=SEL+1.
  44.  
  45.  
  46.   linemenu2(char(C),LIST,_,_,CHOICE,selection):-tryfirstletter(C,LIST,0,CH),!,CHOICE=CH.
  47.   linemenu2(esc,_,_,_,-1,esc):-!.
  48.   linemenu2(fkey(10),_,_,SEL,SEL,stop):-!.
  49. /*linemenu2(fkey(1),_,_,SEL,SEL,cont):-!,help.  If helpsystem is used  */
  50.   linemenu2(cr,_,_,SEL,SEL,selection):-!.
  51.   linemenu2(end,_,MAX,_,SEL,cont):-!,SEL=MAX-1.
  52.   linemenu2(home,_,_,_,0,cont):-!.
  53.   linemenu2(right,_,MAX,SEL,0,cont):-SEL=MAX-1,!.
  54.   linemenu2(right,_,_,SEL,SEL1,cont):-!,SEL1=SEL+1.
  55.   linemenu2(left,_,MAX,0,SEL,cont):-SEL=MAX-1,!.
  56.   linemenu2(left,_,_,SEL,SEL1,cont):-!,SEL1=SEL-1.
  57.   linemenu2(_,_,_,SEL,SEL,cont).
  58.  
  59. /* writes the choice list equally spaced in window */
  60.   writelinelist(_,_,[]).
  61.   writelinelist(SEL,JMP,[H|T]):-
  62.     COL=SEL*JMP, SEL1=SEL+1,
  63.     field_str(0,COL,JMP,H),
  64.     writelinelist(SEL1,JMP,T).
  65.  
  66.  
  67.   index(0,[H|_],H):-!.
  68.   index(N,[_|T],X):-N1=N-1,index(N1,T,X).
  69.