home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l210 / 1.ddi / ANSWERS.ARC / ANS_183B.PRO < prev    next >
Encoding:
Prolog Source  |  1988-06-21  |  2.5 KB  |  112 lines

  1. /*
  2.    Turbo Prolog 2.0, Answer to Second Exercise on page 183.
  3.    
  4.    Copyright (c) 1986, 88 by Borland International, Inc
  5.  
  6.    Please note, we have added a KEY associated with each text string
  7.    to make this example a bit more realistic.
  8. */
  9. domains
  10.  
  11.   textlink = link(KEY,Text,TextLink) ; nil
  12.   text = string
  13.   KEY = string
  14.   
  15. predicates
  16.   w_str(string)
  17.   do(textlink)
  18.   options(textlink)
  19.   insert(KEY,string,textlink,textlink)
  20.   showtext(textlink)
  21.   showkey(KEY,textlink)
  22.   do_choice(char,textlink,textlink)
  23.   repeat
  24.  
  25. goal
  26.  
  27.   do(nil).
  28.  
  29. clauses
  30.  
  31.   do(Link):-
  32.     makewindow(1,11,14," HYPER TEXT ",0,0,25,80,1,-1,"╒╕╘╛═│"),
  33.     repeat,
  34.     clearwindow,
  35.     makewindow(3,10,0,"",23,1,1,78),
  36.     write(" Select your option by selecting first letter"),
  37.     makewindow(2,10,12," Main Menu ",10,30,6,17,1,-1,"┌┐└┘─│"),
  38.     write("Add a new text\n"),
  39.     write("Show all text\n"),
  40.     write("Key text\n"),
  41.     write("Exit program"),
  42.     cursor(0,0),
  43.     readchar(Choice),
  44.     removewindow,
  45.     removewindow,
  46.     do_choice(Choice,Link,NewLink),
  47.     do(NewLink).
  48.  
  49.   do_choice('a',nil,link(KEY,Text,nil)):-
  50.     write("Please enter a key for text :"),nl,
  51.     % Your options
  52.     readln(KEY),KEY<>"",nl,nl,
  53.     write("Please enter a line of text :"),nl,
  54.     readln(Text).
  55.  
  56.   do_choice('a',Link,NewLink):-
  57.     write("Please enter a key for text :"),nl,
  58.     write("\nOptions are:\n"),
  59.     options(Link),
  60.     readln(KEY),KEY<>"",nl,nl,
  61.     write("Please enter a line of text :"),nl,
  62.     readln(Text),
  63.     insert(KEY,Text,Link,NewLink).
  64.  
  65.   do_choice('s',Link,Link):-
  66.     showtext(Link),
  67.     readchar(_).
  68.  
  69.   do_choice('k',Link,Link):-
  70.     write("enter key:"),nl,
  71.     readln(Key),
  72.     showkey(Key,Link),
  73.     readchar(_).
  74.  
  75.   do_choice('e',_,_):-
  76.     exit.
  77.  
  78.   insert(KEY,Text,nil,link(KEY,Text,nil)):-!.
  79.  
  80.   insert(KEY,Text,link(Old_id,OldText,Next),link(Old_id,Oldtext,NewNext)):-
  81.     insert(KEY,Text,Next,NewNext).
  82.  
  83.   showtext(nil).
  84.   showtext(link(KEY,Text,Next)):-
  85.     write(KEY,"\n",Text),nl,nl,
  86.     showtext(Next).
  87.  
  88.   showkey(KEY,link(KEY,Text,_)):-!,
  89.     write(KEY,"\n",Text).
  90.   showkey(KEY,link(_,_,Next)):-
  91.     showkey(KEY,Next).
  92.   showkey(KEY,_):-
  93.     write(KEY," is an invalid key."),
  94.     readchar(_).  
  95.  
  96.   repeat.
  97.   repeat:-repeat.
  98.   
  99.   
  100. w_str(""):-!.
  101. w_str(Str):-
  102.    fronttoken(Str,Sym,Rest),
  103.    write(Sym),nl,
  104.    w_str(Rest).
  105.    
  106. Options(link(_,Str,nil)):-!,
  107.   w_str(Str).   
  108. Options(link(_,Str,Link)):-!,
  109.   w_str(Str),
  110.   Options(Link).   
  111.    
  112.