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