home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / e / e020 / 1.ddi / DV2.PRO < prev    next >
Encoding:
Text File  |  1989-11-14  |  20.9 KB  |  711 lines

  1. /*
  2.          Copyright (c) 1988
  3.        by Computer center of 
  4.     Shaan xi Mechinical colloge  */
  5. code = 3000
  6. nowarnings
  7. /*
  8.   This is a Diagnostic Directing expert-system 
  9.   for IBM PC XT computer. */
  10.  
  11. DOMAINS
  12.   CONDITIONS = BNO*
  13.   HISTORY = RNO*
  14.   RNO, BNO, FNO = INTEGER
  15.   tone=integer*
  16.   Namupn,Resupn,My,  PART = STRING
  17.   data_file = string
  18.   file = save_file
  19.   slist = string*
  20.   song=tone*
  21.  
  22. DATABASE
  23.   rule(RNO,PART,PART,CONDITIONS)
  24.   cond(BNO,STRING)
  25.   data_file(data_file)
  26.   yes(BNO)
  27.   no(BNO)
  28.   fact(FNO,PART,PART)
  29.   result(string,string)
  30. include "tdoms.pro"
  31. include "tpreds.pro"
  32. include "menu2.pro"
  33.  
  34. PREDICATES
  35.  
  36. /*Commands*/
  37.   diag
  38.   list
  39.   llist(HISTORY,string)
  40.   load_know
  41.   save_know
  42.   pick_dba(data_file)
  43.   erase
  44.   clear
  45.   proces(integer)
  46.   proce2(integer)
  47.   evalans(char)
  48.   read
  49.   run
  50.   reverse(CONDITIONS,CONDITIONS)
  51.   reverse1(CONDITIONS,CONDITIONS,CONDITIONS)
  52.  
  53. /*Inferences mechanisms*/
  54.   go(HISTORY,PART)
  55.   check(RNO,HISTORY,CONDITIONS)
  56.   notest(BNO)
  57.   inpq(HISTORY,RNO,BNO,STRING)
  58.   do_answer(HISTORY,RNO,STRING,BNO,INTEGER)
  59.  
  60. /*Explanations*/
  61.   sub_cat(PART,PART,PART)
  62.   show_conditions(CONDITIONS,string)
  63.   show_rule(RNO,string)
  64.   show_cond(BNO,string)
  65.   report(HISTORY,string)
  66.  
  67. /*Update the knowledge*/
  68.   getrnr(RNO,RNO)
  69.   getbnr(BNO,BNO)
  70.   readcondl( CONDITIONS )
  71.   help
  72.   getcond(BNO,STRING)
  73. /*menu */
  74. bootmenu
  75. beepmenu
  76. runmenu
  77. hdiskmenu
  78. sdiskmenu
  79. showmenu
  80. keydmenu
  81. prnmenu
  82. proboot(integer)
  83. probeep(integer)
  84. prorun(integer)
  85. prohdisk(integer)
  86. prosdisk(integer)
  87. proshow(integer)
  88. prokeyd(integer)
  89. proprn(integer)
  90.  
  91. /* inteface    */
  92. title
  93. gtitle
  94. tras(integer,integer)
  95. sing(song)
  96. /* kb acquing  */
  97.  kbacqmenu
  98.  add_rule
  99.  del_rule
  100.  del_cond
  101.  update_rule  
  102.  update_cond
  103.  ansuprule(char)
  104.  proacq(integer)
  105.  print_l(CONDITIONS)
  106.  input_l(CONDITIONS) 
  107.  
  108. GOAL
  109.   makewindow(1,49,72,"",1,0,22,80),
  110.   makewindow(2,13,3,"",14,0,10,80),
  111.   makewindow(5,7,0,"",0,0,14,80),
  112.   makewindow(8,13,0,"",23,0,2,80),
  113.   makewindow(9,7,0,"",0,0,25,80),
  114.   makewindow(19,7,0,"",7,10,5,30),
  115.   sing([[1,1],[2,1],[3,1],[4,1],[5,1],[6,1],[7,1],[8,1]]),    
  116.   system("sound"),
  117.   gtitle,
  118.   run.
  119.  
  120. clauses
  121.  tras(1,131).
  122.  tras(2,147).
  123.  tras(3,165).
  124.  tras(4,175).
  125.  tras(5,196).
  126.  tras(6,220).
  127.  tras(7,247).
  128.  tras(8,262).
  129.  sing([]).
  130.  sing([[T1,T2]|Y]):-tras(T1,Freq),Dura=T2*4,
  131.        sound(Dura,Freq),sing(Y).
  132.  gtitle:-
  133.       text,
  134.       makewindow(10,36,396,"",11,12,5,28),
  135.       write("   Diagnostic Directing"),nl,
  136.       write("      EXPERT SYSTEM      "),
  137.       makewindow(11,14,187,"",6,20,5,12),
  138.       write("IBM PC/XT COMPUTER"),
  139.       makewindow(13,6,0,"",17,14,4,27),
  140.       write("Press any key to continue"),
  141.       readchar(_).
  142. title:-
  143.        clearwindow,
  144.        write("               IBM PC/XT ╣╩╒╧╒∩╢╧╓╕╡╝╫¿╝╥╧╡═│ V2.0 "),nl,nl.
  145. /*       write("                  ╔┬╬≈╗·╨╡╤º╘║╝╞╦π╓╨╨─╤╨╓╞"),nl,nl. */
  146.  
  147. run :-
  148.     repeat,
  149.     shiftwindow(1),
  150.     graphics(2,1,10),
  151.           title,
  152.           write("                           ╧╡═│╓≈▓╦╡Ñ      "),nl,
  153.           write("          1) ╣╩╒╧╒∩╢╧╓╕╡╝         2) ╙▓╝■╒∩╢╧│╠╨≥"),nl,
  154.           write("          3) ▒α╝¡╓¬╩╢┐Γ           4) ╫░╚δ╓¬╩╢┐Γ"),nl,
  155.           write("          5) ┤µ┤ó╓¬╩╢┐Γ           6) ╓¬╩╢╗±╚í"),nl,
  156.           write("          7)  DOS  ═Γ┐╟           8) ░∩╓·╨┼╧ó"),nl,
  157.           write("          9) ═╦│÷▒╛╧╡═│  "),nl,
  158.           write("                ╟δ╩Σ╚δ─π╡─╤í╘±(1-9)"),
  159.            readint(Replym),nl,
  160.            Replym<11,
  161.            proces(Replym),
  162.            Replym>=11,!.        
  163. /*Process Choice*/
  164.   proces(1):-diag,!.
  165.   proces(2):-text,system("pctest"),!.
  166.   proces(3):-system("edkb"),!.
  167.   proces(4):-text,load_know,!.
  168.   proces(5):-text,save_know,!.
  169.   proces(6):-kbacqmenu,!.
  170.   proces(7):-system(""),!.
  171.   proces(8):-help,!.
  172.   proces(9):- clearwindow,nl,nl,
  173.     write("     ─π╒µ╡─╥¬═╦│÷┬≡? (y/n) "),nl,nl,
  174.     readchar(C),write(C),
  175.     C='y',nl,
  176.     cursor(10,15),
  177.     write(" ╗╢╙¡╘┘╩╣╙├▒╛╧╡═│!"),nl,nl,nl,nl,nl,nl,nl,
  178.     exit.
  179. proces(10):-list.
  180. /*Inference mechanism*/
  181.  
  182.   diag:-
  183.     consult("cp.kb"),read,!.
  184.   diag:- nl,
  185.     write("▒╛╧╡═│╓¬╩╢╙╨╧▐╢°╬▐╖¿╒∩╢╧,╟δ╕ⁿ╨┬╓¬╩╢┐Γ!"),
  186.     readchar(_),!.
  187.   read:-
  188.        repeat,
  189.        clear,
  190.        shiftwindow(1),
  191.        clearwindow,
  192.        graphics(2,1,11),nl,
  193.        title,
  194.        write("                       ╒∩╢╧╬╩╠Γ╗∙▒╛▓╦╡Ñ:"),nl,
  195.        write("              1) ╞⌠╢»╬╩╠Γ          2) ╘╦╨╨╬╩╠Γ"),nl,
  196.        write("              3) ╙▓┼╠╬╩╠Γ          4) ╚φ┼╠╬╩╠Γ"),nl,
  197.        write("              5) ╧╘╩╛╬╩╠Γ          6) ╝ⁿ┼╠╬╩╠Γ"),nl,
  198.        write("              7) ┤≥╙í╗·╬╩╠Γ        8) ═╦│÷"),nl,nl,
  199.        write("                      ╟δ╩Σ╚δ─π╡─╤í╘± (1--8) "),
  200.        readint(Dm),
  201.        Dm<9,proce2(Dm),Dm>=8,!.
  202.  
  203.  proce2(1):-bootmenu,!.
  204.  proce2(2):-runmenu,!.
  205.  proce2(3):-hdiskmenu,!.
  206.  proce2(4):-sdiskmenu,!.
  207.  proce2(5):-showmenu,!.
  208.  proce2(6):-keydmenu,!.
  209.  proce2(7):-prnmenu,!.
  210.  proce2(8):-text,run,!.
  211.  
  212. bootmenu:-
  213.               graphics(2,1,3),nl,nl,
  214.               write("            ╞⌠╢»╬╩╠Γ└α╨═:"),nl,
  215.               write("    1)╞⌠╢»╩▒│÷╧╓╧╡═│┤φ( POST ╩º░▄)"),nl,
  216.               write("    2)╡τ╘┤╡╞▓╗┴┴,╞┴─╗▓╗╧╘╩╛ ,┼╠▓╗╣ñ╫≈"),nl,
  217.               write("    3)╡τ╘┤╡╞┴┴,╞┴─╗╞┴─╗╬▐╚╬║╬╧╘╩╛,┼╠▓╗╣ñ╫≈"),nl,
  218.               write("    4)  POST ╒²│ú,╡½▓╗─▄╞⌠╢»"),nl,nl,
  219.               write("        ╟δ╩Σ╚δ─π╡─╤í╘± (1-4):"),nl,
  220.               write("        ╗≥╩Σ╚δ 5 ═╦│÷╞⌠╢»╬╩╠Γ╒∩╢╧   "),nl,nl,
  221.               readint(Replyboot),nl,
  222.               proboot(Replyboot),Replyboot>=5,!.
  223.  proboot(1):-beepmenu.
  224.  proboot(2):-go([],power_computer),!.
  225.  proboot(3):-go([],clock),!.
  226.  proboot(4):-go([],boot_4),!.
  227.  proboot(5):-text,read,!.
  228.  /*.........*/
  229.  beepmenu:-
  230.              clearwindow,
  231.              graphics(2,0,14),
  232.              write("                │⌡╩╝╒∩╢╧╩▒╡─╜╨╔∙└α╨═:"),nl,
  233.              write("  1) ╬▐╜╨╔∙,╗·╞≈╬▐╖┤╙ª        2) ╥╗╔∙╢╠╜╨,┤┼┼╠╡╞┴┴"),nl,
  234.              write("  3) ┴¼╨°╜╨                   4)╥╗╔∙│ñ╜╨,╥╗╔∙╢╠╜╨"),nl,
  235.              write("  5)╥╗╔∙│ñ╜╨,┴╜╔∙╢╠╜╨         6)╥╗╔∙╢╠╜╨,╞┴─╗▒Σ║┌╗≥╧╘╩╛▓╗╒²│ú"),nl,
  236.              write("  7) ╓╪╕┤╡─╢╠╜╨╔∙             8)╥╗╔∙╢╠╜╨,╝┤│÷╧╓ BASIC ╠ß╩╛╖√"),nl,nl,
  237.              write("    ╟δ╩Σ╚δ─π╡─╤í╘± (1-8):"),nl,
  238.              write("    ╗≥╩Σ╚δ 9 ═╦│÷╜╨╔∙╒∩╢╧   "),nl,nl,
  239.              readint(Replybeep),
  240.               probeep(Replybeep),Replybeep=9,!.
  241. probeep(1):-go([],power_computer),!.
  242. probeep(2):-go([],disk),!.
  243. probeep(3):-go([],power_computer),!.
  244. probeep(4):-go([],system_board),!.
  245. probeep(5):-go([],crt_circut),!.
  246. probeep(6):-go([],crt_circut),!.
  247. probeep(7):-go([],system_board),!.
  248. probeep(8):-go([],disk),!.
  249. probeep(9):-!. 
  250. /* run   menu */
  251. runmenu:-
  252.        graphics(2,1,3),
  253.        write("       ╘╦╨╨╬╩╠Γ└α╨═:"),nl,nl,
  254.        write("1) ╝╞╦π╗·╦└╦°,╡½╡τ╘┤╚╘╘┌╣ñ╫≈"),nl,
  255.        write("2) ╝╞╦π╗·╡⌠╡τ,╫╘╝║╣╪╢╧╡τ╘┤"),nl,
  256.        write("3) ╞µ┼╝╨ú╤Θ┤φ "),nl,
  257.        write("4) ╜╙╔╧═Γ▓┐╔Φ▒╕╩▒╝╞╦π╗·╧╡═│▒└└ú"),nl,
  258.        write("5) ╣²╚╚"),nl,
  259.        write("6) ═╦│÷"),nl,nl,
  260.        write(" ╟δ╩Σ╚δ─π╡─╤í╘±(0-6)"),
  261.        readint(Replyrun),
  262.        prorun(Replyrun),
  263.        Replyrun>=6,!.
  264.        
  265.  /*    run proces  */
  266.  prorun(1):-go([],run_1),!.
  267.  prorun(2):-go([],run_2),!.
  268.  prorun(3):-go([],run_3),!.
  269.  prorun(4):-go([],run_4),!.
  270.  prorun(5):-go([],run_5),!.
  271.  prorun(6):-!.
  272.  /*     hard disk  */
  273.  hdiskmenu:-
  274.        graphics(2,0,19),
  275.          write("        ╙▓┼╠╓ó╫┤└α╨═:"),nl,
  276.          write("1) ╙▓┼╠▓╗╢»--╖├╬╩╩▒╫░╚δ╡╞▓╗┴┴"),nl,
  277.          write("2) ╢┴╨┤▓╗═Ω╒√ "),nl,
  278.          write("3) ╢┴╒²╚╖,╡½╨┤▓╗╒²╚╖ "),nl,
  279.          write("4) ╘╦╨╨ CHKDSK ╩▒│÷┤φ "),nl,
  280.          write("5) ╧∞╔∙╥∞│ú "),nl,
  281.          write("6) ╢¬╡⌠┴╦╦∙┤µ╨┼╧ó "),nl,
  282.          write("7) ═╦│÷"),nl,nl,
  283.          write("╟δ╩Σ╚δ─π╡─╤í╘±(1-7)"),
  284.          readint(Replyhdisk),
  285.          prohdisk(Replyhdisk),
  286.          Replyhdisk>=7,!.
  287.    prohdisk(1):-go([],hdisk_1),!.
  288.    prohdisk(2):-go([],hdisk_2),!.
  289.    prohdisk(3):-go([],hdisk_3),!.
  290.    prohdisk(4):-go([],hdisk_4),!.
  291.    prohdisk(5):-go([],hdisk_5),!.
  292.    prohdisk(6):-go([],hdisk_6),!.
  293.    prohdisk(7):-!.       
  294.       /*   soft disk */
  295.  sdiskmenu:-
  296.          graphics(2,1,15),
  297.          write("         ╚φ┼╠╓ó╫┤└α╨═:"),nl,
  298.          write("1) ╚φ┼╠▓╗╢»--╖├╬╩╩▒╫░╚δ╡╞▓╗┴┴"),nl,
  299.          write("2) ╧╘╩╛ Not ready reading drive x ,Abort,Retry,Ignore?"),nl,
  300.          write("3) ╢┴╨┤▓╗═Ω╒√ "),nl,
  301.          write("4) ╢┴╒²╚╖,╡½╨┤▓╗╒²╚╖ "),nl,
  302.          write("5) ╧∞╔∙╥∞│ú "),nl,
  303.          write("6) ╫░╚δ,╨╢╧┬┼╠╞¼▒╚╜╧└º─╤ "),nl,
  304.          write("7) ═╦│÷"),nl,nl,
  305.          write("╟δ╩Σ╚δ─π╡─╤í╘±(1-7)"),
  306.          readint(Replysdisk),
  307.          prosdisk(Replysdisk),
  308.          Replysdisk>=7,!.
  309.    prosdisk(1):-go([],sdisk_1),!.
  310.    prosdisk(2):-go([],sdisk_2),!.
  311.    prosdisk(3):-go([],sdisk_3),!.
  312.    prosdisk(4):-go([],sdisk_4),!.
  313.    prosdisk(5):-go([],sdisk_5),!.
  314.    prosdisk(6):-go([],sdisk_6),!.
  315.    prosdisk(7):-!.
  316. /*  display    (show)  */
  317.          showmenu:-
  318.          graphics(2,1,10),
  319.          write("               ╧╘╩╛╬╩╠Γ└α╨═"),nl,nl,
  320.          write("1) ╬▐╧╘╩╛                  2) ╧╘╩╛╡¡─«"),nl,
  321.          write("3) ╧╘╩╛╞≈╣²╚╚              4) ┤╣╓▒═¼▓╜╩º╡≈"),nl,
  322.          write("5) ╦«╞╜═¼▓╜╩º╡≈            6)╧╘╩╛╨┼╧ó╘╙┬╥"),nl,
  323.          write("7) ▓╩╔½╧╘╩╛╞≈╗╡╗≥╬▐▓╩╔½    8) ╫╓╖√╧╘╩╛▓╗┴╝ "),nl,
  324.          write("9) ═╦│÷"),nl,nl,
  325.          write("            ╟δ╩Σ╚δ─π╡─╤í╘±(1-9)"),
  326.          readint(Replyshow),
  327.          proshow(Replyshow),
  328.          Replyshow>=9,!.
  329.       
  330.       proshow(1):-go([],show_1),!.
  331.       proshow(2):-go([],show_2),!.
  332.       proshow(3):-go([],show_3),!.
  333.       proshow(4):-go([],show_4),!.
  334.       proshow(5):-go([],show_5),!.
  335.       proshow(6):-go([],show_6),!.
  336.       proshow(7):-go([],show_7),!.
  337.       proshow(8):-go([],show_8),!.
  338.       proshow(9):-!.
  339.       
  340. /* keyboard     (keyd)  */       
  341.     keydmenu:-
  342.           graphics(2,0,11),    
  343.         write("╝╠╨°╒∩╢╧╟░╙ª╚╖▒ú╝ⁿ┼╠╬▐╬∩└φ╦≡╔╦"),nl,
  344.         write("    ╝ⁿ┼╠╬╩╠Γ└α╨═:"),nl,nl,
  345.         write("1) ╝ⁿ┼╠╩º┴Θ"),nl,
  346.         write("2) ╝ⁿ┼╠╦°╢¿╘┌╔╧╡╡╗≥╧┬╡╡"),nl,
  347.         write("3) ╥╗╕÷╗≥╢α╕÷╝ⁿ▓╗╣ñ╫≈"),nl,
  348.         write("4) ═╦│÷"),nl,nl,
  349.         write("    ╟δ╩Σ╚δ─π╡─╤í╘±(1-4)"),
  350.         readint(Replykeyd),
  351.         prokeyd(Replykeyd),
  352.         Replykeyd>=4,!.
  353.        prokeyd(1):-go([],keyd_1),!.
  354.        prokeyd(2):-go([],keyd_2),!.
  355.        prokeyd(3):-go([],keyd_3),!.
  356.        prokeyd(4):-!.
  357.        /* printer (prn)  */      
  358.    prnmenu:-
  359.          graphics(2,0,12),
  360.          title,
  361.          write("                ┤≥╙í╗·╬╩╠Γ└α╨═:"),nl,nl,
  362.          write("0)  ═╦│÷                    1)  ┤≥╙í╗·╩º┴Θ"),nl,
  363.          write("2)  ▓╗─▄╫╘╝∞                3)  ╫╘╝∞╒²│ú,┴¬╗·╩º░▄"),nl,
  364.          write("4)  ┤≥╙í╨┼╧ó╘╙┬╥            5)  │÷╧╓╥∞│ú╡─┼╝╚╗╡─┤φ╬≤"),nl,
  365.          write("6)  ═╗╚╗═ú╓╣┤≥╙í            7)  ┤≥╙í═╖╨í│╡▓╗─▄╥╞╢»"),nl,
  366.          write("8)  ┤≥╙í╩▒╙í▓╗│÷╚╬║╬╫╓╖√    9)  ┤≥╙í╗·╗≥┤≥╙í═╖╣²╚╚"),nl,
  367.          write("10) ╙í│÷╡─╫╓╖√╝Σ╛α▓╗╛∙╘╚    11)  ╢¬╡⌠▓┐╖╓┤≥╙í╫╓╖√"),nl,
  368.          write("12) ┤≥╙í╓╜╙╡╝╖│╔╢╤"),nl,nl,
  369.          write("                ╟δ╩Σ╚δ─π╡─╤í╘±(0-12)"),
  370.          readint(Replyprn),
  371.          proprn(Replyprn),
  372.          Replyprn=0,!.
  373.    
  374.         proprn(0):-!.
  375.         proprn(1):-go([],printer_1),!.
  376.         proprn(2):-go([],printer_2),!.
  377.         proprn(3):-go([],printer_3),!.
  378.         proprn(4):-go([],printer_4),!.
  379.         proprn(5):-go([],printer_5),!.
  380.         proprn(6):-go([],printer_6),!.
  381.         proprn(7):-go([],printer_7),!.
  382.         proprn(8):-go([],printer_8),!.
  383.         proprn(9):-go([],printer_9),!.
  384.         proprn(10):-go([],printer_10),!.
  385.         proprn(11):-go([],printer_11),!.
  386.         proprn(12):-go([],printer_12),!.
  387. /* kb acquing   */
  388.     kbacqmenu:-
  389.           graphics(2,1,12),
  390.           title,
  391.           write("          ╓¬╩╢╗±╚í▓╦╡Ñ "),nl,nl,
  392.           write("          1) ╠φ╝╙╣µ╘≥"),nl,
  393.           write("          2) ╔╛│²╣µ╘≥ "),nl,
  394.           write("          3) ╨▐╕─╣µ╘≥ "),nl,
  395.           write("          4) ▒α╝¡╓¬╩╢┐Γ"),nl,
  396.           write("          5) ═╦│÷"),nl,nl,
  397.           write("          ╟δ╩Σ╚δ─π╡─╤í╘±(1-5)"),nl,nl,
  398.       readint(Repacq),
  399.       Repacq<5,proacq(Repacq),
  400.       Repacq>=4,!.
  401.       proacq(1):-add_rule,!.
  402.       proacq(2):-del_rule,!.
  403.       proacq(3):-update_rule,!.
  404.       proacq(4):-system("edkb"),!.        
  405.       proacq(5):-!.     
  406.     /*   resoning  mechine  */
  407.   
  408.   go( _, Mygoal ):-                     /* My best guess  */
  409.     not(rule(_,Mygoal,_,_)),!,nl,
  410.     result(Mygoal,Xr),nl,nl,
  411.     write(Xr),nl,nl,
  412.     clear,
  413.     write("╜ß┬█╒²╚╖┬≡?╟δ╝ⁿ╚δ─π╡─╗╪┤≡(y/n)"),
  414.     readchar(Ans),
  415.     shiftwindow(19),
  416.     graphics(1,1,23),
  417.     evalans(Ans).
  418.     
  419.  go( HISTORY, Mygoal ):-
  420.     rule(RNO,Mygoal,NY,COND),
  421.     check(RNO,HISTORY, COND),
  422.     go([RNO|HISTORY],NY).
  423.  
  424.   check( RNO, HISTORY, [BNO|REST] ):- yes(BNO), !,
  425.     check(RNO, HISTORY, REST).
  426.   check( _, _, [BNO|_] ):- no(BNO), !,fail.
  427.   check( RNO, HISTORY, [BNO|REST] ):- cond(BNO,NCOND),
  428.     fronttoken(NCOND,"not",_COND),
  429.     frontchar(_COND,_,COND),
  430.     cond(BNO1,COND),
  431.     notest(BNO1), !,
  432.     check(RNO, HISTORY, REST).
  433.   check(_,_, [BNO|_] ):- cond(BNO,NCOND),
  434.     fronttoken(NCOND,"not",_COND),
  435.     frontchar(_COND,_,COND),
  436.     cond(BNO1,COND),
  437.     yes(BNO1), !,fail.
  438.   check( RNO, HISTORY, [BNO|REST] ):-
  439.     cond(BNO,TEXT),
  440.     inpq(HISTORY,RNO,BNO,TEXT),
  441.     check(RNO, HISTORY, REST).
  442.     check( _, _, [] ).
  443.  
  444.   notest(BNO):-no(BNO),!.
  445.   notest(BNO):-not(yes(BNO)),!.
  446.  
  447.   inpq(HISTORY,RNO,BNO,TEXT):-
  448.     graphics(1,0,11),
  449.     write("╬╩╠Γ:\n ",TEXT,"┬≡ ? "),nl,nl,nl,
  450.     write(" ╟δ╥╞╣Γ▒Ω╝ⁿ╗╪┤≡  "),nl,
  451.     ROW = 0,
  452.     COL = 30,
  453.     menu(ROW,COL,23,0,["╩╟","╖±","╜Γ╩═"],"",1,CHOICE), 
  454.     do_answer(HISTORY,RNO,TEXT,BNO,CHOICE).
  455.   do_answer(_,_,_,_,0):-exit.
  456.   do_answer(_,_,_,BNO,1):-assert(yes(BNO)),
  457.     shiftwindow(1),write(yes),nl.
  458.   do_answer(_,_,_,BNO,2):-assert(no(BNO)),
  459.     shiftwindow(1),write(no),nl,fail.
  460.   do_answer(HISTORY,RNO,TEXT,BNO,3):- !,
  461.     shiftwindow(2),   
  462.     rule( RNO, Mygoal1, Mygoal2, _ ),
  463.     sub_cat(Mygoal1,Mygoal2,Lstr),
  464.     str_int(Str_num,RNO),
  465.     concat("╬╩╠Γ╘┤╙┌╣µ╘≥ :",Str_num,Ans),
  466.     show_rule(RNO,Lls1),
  467.     concat(Ans,Lls1,Ans1),
  468.     report(HISTORY,Sng),
  469.     concat(Ans1,Sng,Answ),
  470.     concat(Answ,"\n\n    ╟δ░┤ F10 ╝ⁿ╝╠╨°╣ñ╫≈",Answend),   
  471.     display(Answend), 
  472.     shiftwindow(1),
  473.     clearwindow,  
  474.     write("╬╩╠Γ:\n ",TEXT,"┬≡ ? "),nl,nl,nl,nl,
  475.     write(" ╟δ╥╞╣Γ▒Ω╝ⁿ╗╪┤≡  "),nl,   
  476.     ROW=3,COL=35,
  477.     menu(ROW,COL,10,0,["╩╟","╖±","╜Γ╩═"],"",1,CHOICE), 
  478.     clearwindow,
  479.     do_answer(HISTORY,RNO,TEXT,BNO,CHOICE).
  480.  
  481. /* List Rules / Explanation Mechanism */
  482.  
  483.   list :- findall(RNO,rule(RNO,_,_,_),LIST),
  484.     llist(List,Str),display(Str),!.
  485.  
  486.   llist([],"") :-!.
  487.   llist([RNO|List],Str):-
  488.     llist(List,Oldstr),
  489.     show_rule(RNO,RNO_Str),
  490.     concat(RNO_Str,Oldstr,Str).
  491.  
  492.   show_rule(RNO,Strg):-
  493.     rule( RNO, Mygoal1, Mygoal2, CONDINGELSER),
  494.     str_int(RNO_str,RNO),
  495.     concat("\n Rule ",RNO_str,Ans),
  496.     concat(Ans,": ",Ans1),
  497.     sub_cat(Mygoal1,Mygoal2,Lstr),
  498.     concat(Ans1,Lstr,Ans2),
  499.     concat(Ans2,"\n     if ",Ans3),
  500.     reverse(CONDINGELSER,CONILS),
  501.     show_conditions(CONILS,Con),
  502.     concat(Ans3,Con,Strg).
  503.  
  504.   show_conditions([],"").
  505.   show_conditions([COND],Ans):-
  506.     show_cond(COND,Ans),!.
  507.   show_conditions([COND|REST],Ans):-
  508.     show_cond(COND,Text),
  509.     concat("\n    and ",Text,Nstr),
  510.     show_conditions(REST,Next_ans),
  511.     concat(Next_ans,Nstr,Ans).
  512.  
  513.   show_cond(COND,TEXT):-cond(COND,TEXT).
  514.  
  515.   sub_cat(Mygoal1,Mygoal2,Lstr):-
  516.     concat(Mygoal1," ╣╩╒╧╩╟ ",Str),
  517.     concat(Str,Mygoal2,Lstr).
  518.  
  519.   report([],"").
  520.   report([RNO|REST],Strg) :-
  521.     rule( RNO, Mygoal1, Mygoal2, _),
  522.     sub_cat(Mygoal1,Mygoal2,Lstr),
  523.     concat("\n  ",Lstr,L1),
  524.     concat(L1,"\n : ",L2),
  525.     str_int(Str_RNO,RNO),
  526.     concat(L2,Str_RNO,L3),
  527.     concat(L3,":\n ",L4),
  528.     show_rule(RNO,Str),
  529.     concat(L4,Str,L5),
  530.     report(REST,Next_strg),
  531.     concat(L5,Next_strg,Strg).
  532.  
  533.  
  534.  
  535. /*HELP !!!*/
  536.  
  537.    help :- file_str("diag.hlp",Help),
  538.     display(Help).
  539.  
  540. /*User commands*/
  541.  
  542.   load_know:-pick_dba(Data), consult(Data).
  543.  
  544.   save_know :- data_file(Data), bound(Data),!,
  545.     save(Data),clearwindow,
  546.     writef(" Your % Knowledge base has been saved",Data).
  547.   save_know :- makewindow(16,10,9,"File name ",10,40,4,35),
  548.     write("Enter Knowledge\nBase Name: "),
  549.     readln(Data),
  550.     assert(data_file(Data)),
  551.     removewindow,
  552.     save(Data),clearwindow,
  553.     writef(" Your % Knowledge base has been saved",Data).
  554.  
  555.   pick_dba(Data) :- makewindow(17,7,7,"PICK A DATA FILE",10,10,10,60),
  556.     dir("","*.kb",Data),removewindow.
  557.  
  558.   erase:-
  559.      retract(_),fail.
  560.   erase.
  561.  
  562.   clear:-
  563.       retract(yes(_)),
  564.       retract(no(_)),fail,!.
  565.   clear.
  566.  
  567.   evalans('y'):-
  568.      write(" ╗╢╙¡╘┘╩╣╙├▒╛╧╡═│!"),nl,nl,
  569.      write(" ░┤╚╬╥Γ╝ⁿ╝╠╨°╣ñ╫≈!"),nl,
  570.      readchar(_),graphics(2,1,11),!.
  571.   evalans(_):-
  572.      write(" ▒╛╧╡═│╓¬╩╢╙╨╧▐,╟δ╕ⁿ╨┬╓¬╩╢┐Γ!"),nl,nl,
  573.      write("       ░┤╚╬╥Γ╝ⁿ╝╠╨°╣ñ╫≈!"),nl,
  574.      readchar(_),!,graphics(2,1,11),run.
  575.  
  576.  /*system commands*/
  577.  
  578.   reverse(X,Y):-
  579.      reverse1([],X,Y).
  580.   reverse1(Y,[],Y).
  581.   reverse1(X1,[U|X2],Y):-reverse1([U|X1],X2,Y).
  582.  
  583. /* knowleade  acquing   */
  584. add_rule:-
  585.       clearwindow,
  586.       graphics(2,1,14),
  587.       makewindow(14,13,0,"",0,0,20,25),
  588.       makewindow(15,10,0,"",0,45,25,34),
  589.       write("         ╣╩╒╧└α╨═╩╛╥Γ"),nl,
  590.       write("power_computer  crt_circut  boot_4"), 
  591.       write("boot_5 system_board  clock   disk "),
  592.       write("run_1...run_5  hdisk_1...hdisk_6"),nl,
  593.       write("sdisk_1...sdisk_6 show_1...show_8"),nl,
  594.       write("keyd_1...keyd_4 printer_1...printer_13"),nl,
  595.       shiftwindow(14),
  596.       cursor(2,5),
  597.       write("╟δ░┤╙╥▒▀╠ß╩╛╩Σ╚δ╣╩╒╧└α╨═"),nl,
  598.       readln(Class),nl,
  599.       write("╟δ╩Σ╚δ╣╩╒╧├√(▓╗║¼┐╒╕±╡─╚╬╥Γ ascii╫╓╖√┤«)"),nl,
  600.       readln(Dname),nl,
  601.       getrnr(100,RNO),
  602.       readcondl(CONDL),
  603.       assert(rule(RNO,Class,Dname,CONDL)),nl,
  604.       write(" ╟δ╩Σ╚δ╣╩╒╧╖╓╬÷╗≥╜ß┬█    (┐╔╙├║║╫╓)"),nl,
  605.       readln(Rel),nl,
  606.       assert(result(Dname,Rel)),
  607.       write("╗╣╥¬╠φ╝╙╣µ╘≥┬≡(y/n)?"),nl,
  608.       readchar(Ansacq),
  609.       Ansacq='y',add_rule.
  610.   
  611.    del_rule:-
  612.       write("╩Σ╚δ╙√╔╛│²╡─╣µ╘≥║┼"),nl,
  613.       readint(Numdel),
  614.       rule(Numdel,_,Namdel,_),
  615.       retract(result(Namdel,_)),
  616.       retract(rule(Numdel,_,_,_)),
  617.       write("╣µ╘≥",Numdel,"▒╗╔╛│²!"),nl,
  618.       write("╗╣╥¬╔╛│²╣µ╘≥┬≡(y/n)?"),nl,
  619.       readchar(Ansdel),
  620.       Ansdel='y',del_rule.
  621.   del_rule:-
  622.        write("╥¬╔╛│²╠⌡╝■┬≡(y/n)?"),nl,
  623.        readchar(Acdel),!,
  624.        Acdel='y',
  625.        del_cond.  /*  exit when answer is n */
  626.  
  627.    del_cond:-
  628.       write("╩Σ╚δ╥¬╔╛│²╡─╠⌡╝■║┼"),nl,
  629.       readint(Ncdel),
  630.       retract(cond(Ncdel,_)),
  631.       write(" ╗╣╥¬╔╛│²╠⌡╝■┬≡(y/n)?"),nl,
  632.       readchar(Acdel2),
  633.       Acdel2='y',
  634.       del_cond,  
  635.    del_cond,!.   
  636.  
  637.    update_rule:-      
  638.       graphics(2,1,11),
  639.       write("╩Σ╚δ╥¬╨▐╕─╡─╣µ╘≥║┼"),nl,
  640.       readint(Nupo),
  641.       rule(Nupo,Clsupo,Namupo,Conupo),
  642.       editmsg(Clsupo,Clsupn,"╟δ╨▐╕─╣╩╒╧└α╨═","╟δ╙├╬≈╬─","╨▐╕─═Ω║≤╙├ F10 ═╦│÷",1,uphlp,R),
  643.       editmsg(Namupo,Namupn,"╟δ╨▐╕─╣╩╒╧├√","╟δ╙├╬≈╬─","╨▐╕─═Ω║≤╙├ F10 ═╦│÷",1,uphlp,R1),nl,
  644.       result(Namupo,Resupo),
  645.       editmsg(Resupo,Resupn,"╟δ╨▐╕─╣╩╒╧╒∩╢╧╜ß┬█","╟δ╙├║║╫╓","╨▐╕─═Ω║≤╙├ F10═╦│÷",1,uphlp,R3),
  646.       retract(result(Namupo,_)),
  647.       assert(result(Namupn,Resupn)), 
  648.       /* editmsg(Conupo,Conupn,"╟δ╨▐╕─╠⌡╝■▒φ","╟δ╙├╩²╫╓","F10--End edit",1,uphlp,R2),nl, */
  649.       graphics(2,0,15),
  650.       write("╟δ╨▐╕─╠⌡╝■▒φ! "),nl,
  651.       write("╘¡╠⌡╝■▒φ╩╟: "),
  652.       write(Conupo),nl,
  653.       write("╟δ╩Σ╚δ╨┬╠⌡╝■▒φ,╩Σ╚δ╥╗╕÷▒φ║┼║≤╙ª╗╪│╡,╩Σ═Ω║≤╗╪┴╜┤╬│╡ "),nl,
  654.       input_l(Conupn),
  655.       write("─π╩Σ╚δ╡─╨┬╠⌡╝■▒φ╩╟:  ",Conupn),nl,
  656.       retract(rule(Nupo,_,_,_)),
  657.       assert(rule(Nupo,Clsupn,Namupn,Conupn)),  /*  update rule ended */ 
  658.       write("╣µ╘≥ ",Nupo," ╥╤╨▐╕─!"),beep,nl,
  659.       write("╗╣╥¬╨▐╕─╣µ╘≥┬≡(y/n)?"),nl,
  660.       readchar(Ansup),!,ansuprule(Ansup).
  661.   ansuprule('y'):-update_rule.
  662.   ansuprule(_):-    
  663.       graphics(2,1,13),
  664.       write("╥¬╨▐╕─╠⌡╝■┬≡?(y/n)"),nl,
  665.       readchar(Ansupcon1),
  666.       Ansupcon1='y',!,
  667.       update_cond.
  668.   ansuprule(_).
  669.   update_cond:-
  670.     graphics(2,1,10),
  671.     write("╟δ╩Σ╚δ╥¬╨▐╕─╡─╠⌡╝■║┼"),nl,
  672.     readint(Nupcond),
  673.     cond(Nupcond,Upcono),
  674.     editmsg(Upcono,Upconn,"╟δ╨▐╕─╠⌡╝■","╟δ╙├║║╫╓","╨▐╕─╜ß╩°║≤╙├F10═╦│÷",1,uphlp,R4),
  675.     assert(cond(Nupcond,Upconn)),nl,nl,
  676.     write("╗╣╥¬╨▐╕─╠⌡╝■┬≡"),nl,
  677.     readchar(Aupcon2),!,
  678.     Aupcon2='y',
  679.     update_cond.
  680.   update_cond:-!.  
  681.   /* list print */
  682.    print_l([H|T]):-
  683.       write(H,","),
  684.       print_l(T).
  685.    print_l([]):-!.
  686.  /*   list input    */
  687.    input_l([H|T]):-
  688.    readint(H),
  689.    input_l(T).     
  690.    input_l([]):-!.
  691.  
  692.   getrnr(N,N):-not(rule(N,_,_,_)),!.
  693.   getrnr(N,N1):-H=N+1,getrnr(H,N1).
  694.  
  695.   getbnr(N,N):-not(cond(N,_)),!.
  696.   getbnr(N,N1):-H=N+1,getbnr(H,N1).
  697.   readcondl( [BNO|R] ):-
  698.     write("╟δ╩Σ╚δ╠⌡╝■(┐╔╙├║║╫╓,╥╤╬▐ ╠⌡╝■╩▒╜÷╗╪│╡): "),nl,
  699.     write("╠⌡╝■: "),
  700.     readln(COND),
  701.     COND><"",!,
  702.     getcond(BNO,COND),
  703.     /* write("╗╣╙╨╠⌡╝■┬≡(y/n)?"),nl,nl,
  704.     readchar(Anscond),!,
  705.     Anscond='y',*/   
  706.     readcondl(R).
  707.     readcondl([]).
  708.  
  709.    getcond(BNO,COND):-cond(BNO,COND),!.
  710.    getcond(BNO,COND):-getbnr(1,BNO), assert( cond(BNO,COND) ).
  711.