1% FILE xm.pl
    2
    3
    4:- ensure_loaded(dmiles).    5
    6% IMPORTS
    7:- use_module_if_exists(library(proxt)).    8:- use_module_if_exists(library(ctypes)).    9:- use_module_if_exists(library(strings)).   10:- use_module_if_exists(library(basics)).   11:- consult(miles).   12%%%:- use_module(show_utils).
   13:- consult(xmiles_functions).   14
   15
   16
   17%***********************************************************************
   18%*	
   19%* file: xm.pl        					
   20%*									
   21%* author: T. Volz
   22%*									
   23%* changed:								
   24%*									
   25%* description:	X interface for MILES. Load this directly into prolog
   26%*        (NOT qui!!), and call `xm.' to create the interface and start
   27%*        the event loop. Use the `Quit XMILES'-button to suspend the
   28%*        event loop, if you want to access the prolog-prompt directly.
   29%*        Calling `xm' again restarts the event loop.
   30%*        
   31%* see also:	 
   32%*									
   33%***********************************************************************
   34
   35runtime_entry(start) :- xm.
   36
   37:- dynamic listItems/1, my_exit_loop/1, toplevel/1.   38
   39my_exit_loop(no).
   40
   41
   42
   43
   44
   45%************************************************************************
   46%*
   47%* predicate: xm		main predicate
   48%*
   49%* syntax: -
   50%*
   51%* args: -
   52%*
   53%* description: Creates the whole xmiles interface.
   54%*
   55%************************************************************************
   56
   57
   58xm :-
   59        (   toplevel(Widget) ->
   60            XMiles = Widget,
   61	    open('xmProtocol.tmp',write,F),
   62	    recordz(messages,file(F),_),
   63            updateEvaluationLabel,
   64	    refreshKnowledgeList(_Widget,rules,_Calldata),
   65	    refreshKnowledgeList(_Widget,examples,_Calldata)
   66	;   xtToolkitInitialize,
   67            xtInitialize('X-MILES',xMILES,XMiles),
   68            assert(toplevel(XMiles)),
   69	    clear_kb,
   70
   71	    xmCreateRowColumn(XMiles,xMilesRow,
   72	       [xmNorientation(xmHORIZONTAL),
   73	        xmNpacking(xmPACK_TIGHT),
   74	        xmNrowColumnType(xmWORK_AREA)],
   75	       XMilesRow),
   76	    xtManageChild(XMilesRow),
   77
   78	    xmCreateRowColumn(XMilesRow,xMilesColumn1,
   79	       [xmNorientation(xmVERTICAL),
   80	        xmNpacking(xmPACK_TIGHT),
   81	        xmNrowColumnType(xmWORK_AREA)],
   82	       XMilesColumn1),	
   83	    xtManageChild(XMilesColumn1),
   84
   85	    createCommandArea(XMilesColumn1),
   86	    createFunctionArea(XMilesColumn1),
   87	    createArgumentArea(XMilesColumn1),
   88	    createMessageArea(XMilesColumn1),
   89
   90	    xmCreateRowColumn(XMilesRow,xMilesColumn2,
   91	       [xmNorientation(xmVERTICAL),
   92	        xmNpacking(xmPACK_TIGHT),
   93	        xmNrowColumnType(xmWORK_AREA)],
   94	        XMilesColumn2),	
   95	    xtManageChild(XMilesColumn2),
   96
   97	    createEditorArea(XMilesColumn2),
   98	    createKnowledgeBaseArea(XMilesColumn2),
   99
  100	    xtRealizeWidget(XMiles)
  101        ),
  102
  103        my_main_loop(XMiles).
  104
  105my_main_loop(Shell):-
  106   (   my_exit_loop(yes) ->
  107       retract(my_exit_loop(yes)),
  108       assert(my_exit_loop(no))
  109   ;   xtNextEvent(Event),
  110       xtDispatchEvent(Event),
  111       my_main_loop(Shell)
  112   ).
  113
  114
  115%************************************************************************
  116%*
  117%* predicate: createKnowledgeBaseArea/1
  118%*
  119%* syntax: createKnowledgeBaseArea(+Parent)
  120%*
  121%* args: Parent... specifies the parentwidget of KbRowColumn 
  122%*
  123%* description: Creates the knowledge base area of the X user interface
  124%*		This area consists of two scrolled windows. One window
  125%*		is used to browse the rules of the knowledge base, the
  126%*		other window browses the examples. Used by xm/0.
  127%*
  128%************************************************************************
  129
  130createKnowledgeBaseArea(Parent) :-
  131	xmCreateFrame(Parent,'KnowledgeBaseFrame',
  132	  [],KnowledgeBaseFrame),
  133	xtManageChild(KnowledgeBaseFrame),
  134
  135	xmCreateRowColumn(KnowledgeBaseFrame,'KnowledgeBaseColumn',
  136	  [xmNadjustLast(true),
  137	   xmNorientation(xmVERTICAL),
  138	   xmNpacking(xmPACK_TIGHT),
  139	   xmNrowColumnType(xmWORK_AREA)],
  140	  KnowledgeBaseColumn),	
  141	xtManageChild(KnowledgeBaseColumn),
  142
  143	xmCreateRowColumn(KnowledgeBaseColumn,titleRC,
  144	[xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN)],
  145	    TitleRowColumn),
  146	xtManageChild(TitleRowColumn),
  147
  148	proxtGetDefaultCharset(DCharset),
  149	proxtStringToCharPtr('Knowledge Base',KbCP),
  150	xmStringCreate(KbCP,DCharset,StatusStr),
  151	xmCreateLabelGadget(TitleRowColumn,titleLabel,
  152	  [xmNlabelType(xmSTRING),xmNlabelString(StatusStr)],
  153	  KbLabel),
  154	xtManageChild(KbLabel),
  155
  156        createEvaluationString(EString),
  157	proxtStringToCharPtr(EString,KbCP1),
  158	xmStringCreate(KbCP1,DCharset,StatusStr1),
  159	xmCreateLabelGadget(TitleRowColumn,titleEvaluation,
  160	  [xmNlabelType(xmSTRING),xmNlabelString(StatusStr1)],
  161	  KbLabel1),
  162	xtManageChild(KbLabel1),
  163        recordz(irene,KbLabel1,_),
  164
  165	xmCreateRowColumn(KnowledgeBaseColumn,kbRowColumn,
  166	  [xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN)],
  167	  KnowledgeBaseRow),
  168	xtManageChild(KnowledgeBaseRow),
  169
  170	createRuleArea(KnowledgeBaseRow),
  171	createExampleArea(KnowledgeBaseRow),
  172	createKbButtons(KnowledgeBaseColumn).
  173
  174
  175%************************************************************************
  176%*
  177%* predicate: createRuleArea/1 
  178%*
  179%* syntax: createRuleArea(+Parent)
  180%*
  181%* args: Parent... specifies the parent widget of RuleFrame
  182%*
  183%* description: Creates the rule browser of the knowledge base. The rule
  184%*	        browser consists of a label, a scrolled rule list and
  185%*		a refresh button, which looks up for changes of the
  186%*		knowledge base. Used by createKbRowColumn/1
  187%*
  188%************************************************************************
  189
  190createRuleArea(Parent):-
  191	xmCreateFrame(Parent,'RuleFrame',
  192	  [],RuleFrame),
  193	xtManageChild(RuleFrame),
  194
  195	xmCreateRowColumn(RuleFrame,'RuleRowColumn',
  196	  [xmNwidth(300),xmNadjustLast(true),
  197	   xmNorientation(xmVERTICAL),
  198	   xmNpacking(xmPACK_TIGHT),
  199	   xmNrowColumnType(xmWORK_AREA)],
  200	  RuleColumn),	
  201	xtManageChild(RuleColumn),
  202
  203	xmCreateRowColumn(RuleColumn,ruleRow,
  204	  [xmNorientation(xmHORIZONTAL),xmNmarginHeight(0),
  205	   xmNpacking(xmPACK_TIGHT)],
  206	  RuleRow),
  207	xtManageChild(RuleRow),
  208
  209	proxtGetDefaultCharset(DCharset),
  210	proxtStringToCharPtr('Rules               ',RuleCP),
  211	xmStringCreate(RuleCP,DCharset,RuleStr),
  212	xmCreateLabelGadget(RuleRow,ruleLabel,
  213	  [xmNlabelType(xmSTRING),xmNlabelString(RuleStr)],
  214	  RuleLabel),
  215	xtManageChild(RuleLabel),
  216
  217	xmCreatePushButton(RuleRow,'Examine ...',
  218	  [],Examine),
  219	xtManageChild(Examine),
  220	createExamineRulesPopup(Examine),
  221
  222	createKnowledgeList(RuleColumn,rules),
  223	createKbSubButtons(RuleColumn,rules).
  224
  225
  226
  227
  228%************************************************************************
  229%*
  230%* predicate: createExampleArea/1
  231%*
  232%* syntax: createExampleArea(+Parent)
  233%*
  234%* args: +Parent		Widget 
  235%*
  236%* description: Creates the example browser of the knowledge base. The
  237%*		example browser consists of a label, a scrolled rule list
  238%*		and a refresh button, which looks up for changes of the
  239%*		knowledge base.
  240%*
  241%************************************************************************
  242
  243createExampleArea(Parent) :-
  244	xmCreateFrame(Parent,'ExampleFrame',
  245	  [],ExampleFrame),
  246	xtManageChild(ExampleFrame),
  247
  248	xmCreateRowColumn(ExampleFrame,'ExampleRowColumn',
  249	  [xmNwidth(300),xmNadjustLast(true),
  250	   xmNorientation(xmVERTICAL),
  251	   xmNpacking(xmPACK_TIGHT),
  252	   xmNrowColumnType(xmWORK_AREA)],
  253	  ExampleRowColumn),	
  254	xtManageChild(ExampleRowColumn),
  255
  256	proxtGetDefaultCharset(DCharset),
  257	proxtStringToCharPtr('Examples',ExampleCP),
  258	xmStringCreate(ExampleCP,DCharset,ExampleStr),
  259	xmCreateLabelGadget(ExampleRowColumn,exampleLabel,
  260	  [xmNlabelType(xmSTRING),xmNlabelString(ExampleStr)],
  261	  ExampleLabel),
  262	xtManageChild(ExampleLabel),
  263
  264	createKnowledgeList(ExampleRowColumn,examples),
  265	createKbSubButtons(ExampleRowColumn,examples).
  266
  267
  268%************************************************************************
  269%*
  270%* predicate: createKnowledgeList/3
  271%*
  272%* syntax: createKnowledgeList(+Parent,-KnowledgeRC,+KindOfKnowledge)
  273%*
  274%* args:       +Parent			Widget
  275%*	       -KnowledgeRC		Widget
  276%*	       +KindOfKnowledge		'rules' or 'examples'	
  277%*
  278%* description: Creates a List either containing all rules or all examples
  279%*
  280%************************************************************************
  281
  282createKnowledgeList(Parent,KindOfKnowledge) :-
  283	xmCreateScrolledWindow(Parent,knowledgelistSW,
  284	  [xmNheight(300),xmNwidth(300),
  285	   xmNlistSizePolicy(xmCONSTANT),
  286	   xmNscrollBarDisplayPolicy(xmSTATIC),
  287	   xmNscrollingPolicy(xmAUTOMATIC)],
  288	  KL),
  289	xtManageChild(KL),
  290
  291	xmCreateRowColumn(KL,knowledgelistRC,
  292	  [xmNadjustLast(false),
  293	   xmNorientation(xmVERTICAL),
  294	   xmNpacking(xmPACK_TIGHT),
  295	   xmNrowColumnType(xmWORK_AREA)],
  296	  KnowledgeRC),
  297	recordz(KindOfKnowledge,knowledgeList(KnowledgeRC),_Ref),
  298	xtGetValues(KnowledgeRC,[xmNbackground(B)]),
  299	xtGetValues(KL,[xmNclipWindow(CW)]),
  300	xtSetValues(CW,[xmNbackground(B)]),
  301	addKnowledgeListItems(KindOfKnowledge),
  302	xtManageChild(KnowledgeRC).
  303
  304
  305%************************************************************************
  306%*
  307%* predicate: addKnowledgeListItems/1
  308%*
  309%* syntax: addKnowledgeListItems(+KindOfKnowledge)
  310%*
  311%* args: +KindOfKnowledge		rules or examples
  312%*
  313%* description:  Adds a label for each Rule or Example existing in the kb
  314%*		 to the parent widget stored in
  315%*			 KindOfKnowledge, knowledgeList(X)	
  316%*
  317%************************************************************************
  318
  319addKnowledgeListItems(rules) :-
  320	getNextId(Id),
  321	get_clause(Id,H,B,S,O),
  322	addRuleItem(Id,H,B,S,O),
  323	fail.
  324addKnowledgeListItems(examples) :-
  325	getNextId(Id),
  326	get_example(Id,F,C),
  327	addExampleItem(Id,F,C),
  328	fail.
  329addKnowledgeListItems(_) :- !.
  330
  331
  332%************************************************************************
  333%*
  334%* predicate: getNextId/1
  335%*
  336%* syntax: getNextId(+Id)
  337%*
  338%* args: +Id			Integer <= id_count(X)
  339%*
  340%* description: Counts from zero to id_count
  341%*
  342%************************************************************************
  343
  344getNextId(Id) :-
  345	id_count(MaxId),
  346	repeat,
  347	(   recorded(knowledgeList,xm_id_count(I_old),Ref) ->
  348	    erase(Ref),
  349	    Id is I_old + 1,
  350	    recordz(knowledgeList,xm_id_count(Id),_) 
  351	;   Id = 1,
  352	    recordz(knowledgeList,xm_id_count(Id),_)
  353	),
  354	(   MaxId < Id -> 
  355	    recorded(knowledgeList,xm_id_count(_),Ref2),
  356	    erase(Ref2),!,fail 
  357	;   otherwise
  358        ).
  359
  360
  361%************************************************************************
  362%*
  363%* predicate: deleteKnowledgeListItems/1
  364%*
  365%* syntax: deleteKnowledgeListItems(+KindOfKnowledge)
  366%*
  367%* args: +KindOfKnowledge		rules or examples
  368%*
  369%* description: Deletes all Labels representing rules or examples
  370%*		of the knowledgelist. Leaves the knowledgebase unchanged
  371%*
  372%************************************************************************
  373
  374deleteKnowledgeListItems(rules) :-
  375	recorded(current,clause(_,Label,_),Ref),
  376	xtDestroyWidget(Label),
  377	erase(Ref),!,
  378	deleteKnowledgeListItems(rules).
  379deleteKnowledgeListItems(examples) :-
  380	recorded(current,example(_,Label,_),Ref),
  381	xtDestroyWidget(Label),
  382	erase(Ref),!,
  383	deleteKnowledgeListItems(examples).
  384deleteKnowledgeListItems(_) :- !.
  385
  386
  387%************************************************************************
  388%*
  389%* predicate: addRuleItem/4
  390%*
  391%* syntax: addRuleItem(+I,+H,+B,+O)
  392%*
  393%* args:       +I		Integer, spezifies the ID of the rule
  394%*	       +H		Head of the rule	
  395%*	       +B		Body of the rule
  396%*	       +O		Label	
  397%*
  398%* description: Creates a label to show the rule spezified by the
  399%*		arguments. The Label widget is recorded:
  400%*	            recordz(current,clause(I,Label,notselected),_Ref) 
  401%*		If the Label allready exists, then only the text changes.
  402%*
  403%************************************************************************
  404
  405addRuleItem(I,H,B,_S,O):-
  406     (   recorded(rules,viewMin(MinText),_) ->
  407	 xmTextGetString(MinText,MinCP),
  408	 proxtCharPtrToString(MinCP,MinStr),
  409	 atom_chars(MinStr,MinC),
  410	 number_chars(Min,MinC)
  411     ),
  412	
  413     (   recorded(rules,viewMax(MaxText),_) ->
  414	 xmTextGetString(MaxText,MaxCP),
  415	 proxtCharPtrToString(MaxCP,MaxStr),
  416	 atom_chars(MaxStr,MaxC),
  417	 number_chars(Max,MaxC)
  418     ),
  419
  420     (   recorded(rules,view(all),_)
  421     ;   (  recorded(rules,view(labels,LabelList),_),
  422	    recorded(rules,view(clause_heads,CHList),_),
  423	    I >= Min,
  424	    I =< Max,
  425	    functor(H,CH,_),
  426	    (  LabelList=[] 
  427	    ;  member(O,LabelList)
  428            ),
  429	    (  CHList=[] 
  430	    ;  member(CH,CHList)
  431	    )
  432	 )
  433     ),
  434
  435     proxtGetDefaultCharset(DCharset),
  436     recorded(rules,knowledgeList(KL),_),
  437     xxmWriteToString(show_kb_clause(I,H,B,O),DCharset,XmS),
  438
  439     (   recorded(current,clause(I,W,_),_) ->
  440	 xtSetValues(W, [xmNlabelString(XmS)]) 
  441     ;   xmCreateLabel(KL,anyClause,
  442	    [xmNalignment(xmALIGNMENT_BEGINNING),
  443	     xmNlabelString(XmS),xmNlabelType(xmSTRING)],
  444	     Label),
  445	 xtManageChild(Label),
  446	 recordz(current,clause(I,Label,notselected),_Ref),
  447	 xtAddEventHandler(Label,[buttonReleaseMask],
  448	                     false,selectClause,rules),
  449	 xtAddEventHandler(Label,[buttonPressMask],false,
  450	                     firstClauseClick,rules)
  451     ),!.
  452
  453addRuleItem(_,_,_,_,_) :- !.
  454
  455
  456
  457%************************************************************************
  458%*
  459%* predicate: addExampleItem/3
  460%*
  461%* syntax: addExampleItem(+I,+F,+C)
  462%*
  463%* args:       +I		Integer, spezifies the ID of the example
  464%*	       +F		Example predicate	
  465%*	       +C		+ or -, classification of the example	
  466%*
  467%* description: Creates a label to show the example spezified by the
  468%*		arguments. The Label widget is recorded:
  469%*		    recordz(current,example(I,Label,notselected),_Ref)
  470%*
  471%************************************************************************
  472
  473addExampleItem(I,F,C):-
  474    (    recorded(examples,viewMin(MinText),_) ->
  475	 xmTextGetString(MinText,MinCP),
  476	 proxtCharPtrToString(MinCP,MinStr),
  477	 atom_chars(MinStr,MinC),
  478	 number_chars(Min,MinC)
  479    ),
  480	
  481    (    recorded(examples,viewMax(MaxText),_) ->
  482	 xmTextGetString(MaxText,MaxCP),
  483	 proxtCharPtrToString(MaxCP,MaxStr),
  484	 atom_chars(MaxStr,MaxC),
  485	 number_chars(Max,MaxC)
  486     ),
  487
  488     (   recorded(examples,view(all),_)
  489     ;	 (  recorded(examples,view(clause_heads,CHList),_),
  490	    functor(F,CH,_),
  491	    I >= Min,
  492	    I =< Max,
  493	    (  CHList=[] 
  494            ;  member(CH,CHList)
  495	    )
  496	 )
  497     ),
  498	
  499     proxtGetDefaultCharset(DCharset),
  500     recorded(examples,knowledgeList(KL),_),
  501
  502     number_chars(I,S1),
  503     append(S1," (",S2),
  504     atom_chars(C,S3),
  505     append(S2,S3,S4),
  506     append(S4,"): ",S5),
  507     atom_chars(A5,S5),
  508     proxtStringToCharPtr(A5,CP5),
  509     xmStringCreateLtoR(CP5,DCharset,XmS1),
  510
  511     xxmWriteToString(write(F),DCharset,XmS2),
  512     xmStringConcat(XmS1,XmS2,XmS3),
  513     xmStringSeparatorCreate(XmSep),
  514     xmStringConcat(XmS3,XmSep,XmS),
  515
  516     (   recorded(current,example(I,W,_),_) ->
  517	 xtSetValues(W,[xmNlabelString(XmS)])
  518     ;   xmCreateLabel(KL,anyExample,
  519	    [xmNalignment(xmALIGNMENT_BEGINNING),
  520	     xmNlabelString(XmS),xmNlabelType(xmSTRING)],
  521	     Label),
  522	 xtManageChild(Label),
  523	 xtAddEventHandler(Label,[buttonReleaseMask],false,
  524	                      selectClause,examples),
  525	 xtAddEventHandler(Label,[buttonPressMask],false,
  526	                      firstClauseClick,examples),
  527	 recordz(current,example(I,Label,notselected),_Ref)
  528     ),!.
  529
  530
  531%************************************************************************
  532%*
  533%* predicate: refreshKnowledgeList/3		CallbackProcedure
  534%*
  535%* syntax: refreshKnowledgeList(_Widget,+KindOfKnowledge,_Calldata)
  536%*
  537%* args:       _Widget			calling Widget
  538%*             +KindOfKnowledge		rules or examples	
  539%*	       _Calldata		Event
  540%*
  541%* description: Ensures that the knowledge displayed is the same than
  542%*		the knowledge in the knowledge base.	
  543%*
  544%************************************************************************
  545
  546refreshKnowledgeList(_Widget,KindOfKnowledge,_Calldata) :-
  547	deleteKnowledgeListItems(KindOfKnowledge),
  548	addKnowledgeListItems(KindOfKnowledge),
  549        updateEvaluationLabel.
  550
  551
  552%************************************************************************
  553%*
  554%* predicate: selectClause/3			CallbackProcedure
  555%*
  556%* syntax: selectClause(+Widget,+KindOfKnowledge,_Calldata)
  557%*
  558%* args:       +Widget			calling Widget
  559%*	       +KindOfKnowledge		rules or examples
  560%*	       _Calldata		Event
  561%*
  562%* description: Toggles selection state of the knowledge item specified
  563%*		by Widget. Visual effect is the exchange of foreground
  564%*		and background color.
  565%*
  566%************************************************************************
  567
  568selectClause(Widget,rules,_CallData) :-
  569	recorded(current,clause(I,Widget,notselected),Ref),
  570	xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
  571	xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)]),
  572	erase(Ref),
  573	recordz(current,clause(I,Widget,selected),_),
  574	recorded(state,getId(GetId),_),
  575	xtGetValues(GetId,[xmNset(GetState)]),
  576	(   GetState = true ->
  577	    copyId(I,1) 
  578	;   otherwise
  579        ).
  580
  581selectClause(Widget,rules,_CallData) :-
  582	recorded(current,clause(I,Widget,selected),Ref),
  583	xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
  584	xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)]),
  585	erase(Ref),
  586	recordz(current,clause(I,Widget,notselected),_Ref),
  587	recorded(state,getId(GetId),_),
  588	xtGetValues(GetId,[xmNset(GetState)]),
  589	(   GetState = true ->
  590	    copyId(I,1) 
  591	;   otherwise
  592        ).
  593
  594selectClause(Widget,examples,_CallData) :-
  595	recorded(current,example(I,Widget,notselected),Ref),
  596	xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
  597	xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)]),
  598	erase(Ref),
  599	recordz(current,example(I,Widget,selected),_Ref),
  600	recorded(state,getId(GetId),_),
  601	xtGetValues(GetId,[xmNset(GetState)]),
  602	(   GetState = true ->
  603	    copyId(I,1) 
  604	;   otherwise
  605        ).
  606
  607selectClause(Widget,examples,_CallData) :-
  608	recorded(current,example(I,Widget,selected),Ref),
  609	xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
  610	xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)]),
  611	erase(Ref),
  612	recordz(current,example(I,Widget,notselected),_Ref),
  613	recorded(state,getId(GetId),_),
  614	xtGetValues(GetId,[xmNset(GetState)]),
  615	(   GetState = true ->
  616	    copyId(I,1) 
  617	;   otherwise
  618        ).
  619
  620
  621%************************************************************************
  622%*
  623%* predicate: firstClauseClick/3			CallbackProcedure
  624%*
  625%* syntax: firstClauseClick(+Widget,_ClientData,_Calldata)
  626%*
  627%* args:       +Widget			calling Widget
  628%*	       _ClientData				
  629%*	       _Calldata		Event
  630%*
  631%* description: If another click occures in the next two seconds, the
  632%*		knowledgebase item specified by Widget is copied into
  633%*		the editor.
  634%*
  635%*
  636%************************************************************************
  637
  638firstClauseClick(Widget,_ClientData,_CallData) :-
  639	xtAddEventHandler(Widget,[buttonPressMask],false,copyClause,_),
  640	xtAddTimeOut(1000,noDoubleClick,Widget,_ID).
  641
  642
  643%************************************************************************
  644%*
  645%* predicate: copyClause/3			CallbackProcedure
  646%*
  647%* syntax: copyClause(+Widget,_ClientData,_Calldata)
  648%*
  649%* args:       +Widget			calling Widget
  650%*             _ClientData		rules or examples
  651%*	       _Calldata		Event	
  652%*
  653%* description: Copies a knowledge base item spezified by Widget to the
  654%*	        editor text.
  655%*
  656%************************************************************************
  657
  658copyClause(Widget,_ClientData,_CallData) :-
  659	recorded(editor,label(Label),_),
  660	proxtGetDefaultCharset(DCharset),
  661	(recorded(editor,editing(_,_),Ref) -> erase(Ref),
  662	    proxtStringToCharPtr('Editor',LblCP1),
  663	    xmStringCreate(LblCP1,DCharset,LblS1),
  664	    xtSetValues(Label,[xmNlabelString(LblS1)]) |
  665         otherwise),
  666	(recorded(current,clause(Id,Widget,_),_) ->
  667	    get_clause(Id,H,B,_,_),
  668	    xxmWriteToCharPtr(portray_clause((H:-B)),CP),
  669	    recorded(editor,textWidget(Editor),_),
  670	    xmTextSetString(Editor,CP),
  671	    recordz(editor,editing(rules,Id),_),
  672	    number_chars(Id,IdCS),
  673	    append("Editor     editing rule ",IdCS,LblCS),
  674	    atom_chars(LblAS,LblCS),
  675	    proxtStringToCharPtr(LblAS,LblCP),
  676	    xmStringCreate(LblCP,DCharset,LblS),
  677	    xtSetValues(Label,[xmNlabelString(LblS)]) |
  678	 recorded(current,example(Id,Widget,_),_) ->
  679	    get_example(Id,F,_),
  680	    xxmWriteToCharPtr(writeFullstop(F),CP),
  681	    recorded(editor,textWidget(Editor),_),
  682	    xmTextSetString(Editor,CP),
  683	    recordz(editor,editing(examples,Id),_),
  684	    number_chars(Id,IdCS),
  685	    append("Editor     editing example ",IdCS,LblCS),
  686	    atom_chars(LblAS,LblCS),
  687	    proxtStringToCharPtr(LblAS,LblCP),
  688	    xmStringCreate(LblCP,DCharset,LblS),
  689	    xtSetValues(Label,[xmNlabelString(LblS)])).
  690
  691
  692%************************************************************************
  693%*
  694%* predicate: noDoubleClick/2			TimeOutProcedure
  695%*
  696%* syntax: noDoubleClick(+Widget,_IntervallID)
  697%*
  698%* args:       +Widget			knowledge label
  699%*	       _IntervallId		calling Intervall
  700%*
  701%* description: Removes event handler for copying a knowledge base item
  702%*		into the editor. This predicate is avoked if no second	
  703%*		button press has occured within two seconds.
  704%*
  705%************************************************************************
  706
  707noDoubleClick(Widget,_IntervallId) :-
  708	xtRemoveEventHandler(Widget,[buttonPressMask],false,copyClause,_).
  709
  710
  711%************************************************************************
  712%*
  713%* predicate: selectAll/3		Callback procedure	
  714%*
  715%* syntax: selectAll(_Widget,+KindOfKnowledge,_CallData)
  716%*
  717%* args:       _Widget			calling widget	
  718%*	       KindOfKnowledge		rules or examples	
  719%*	       _CallData		event	
  720%*
  721%* description: Selects all rules or examples of the knowledge	base. The
  722%*		rules or examples have to satisfy the current display
  723%*	        restricion.
  724%*
  725%************************************************************************
  726
  727selectAll(_Widget,rules,_CallData) :-
  728	recorded(current,clause(I,Widget,notselected),Ref),!,
  729	xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
  730	xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)]),
  731	erase(Ref),
  732	recordz(current,clause(I,Widget,selected),_Ref),
  733	selectAll(_Widget,rules,_CallData).
  734
  735selectAll(_Widget,examples,_CallData) :-
  736	recorded(current,example(I,Widget,notselected),Ref),!,
  737	xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
  738	xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)]),
  739	erase(Ref),
  740	recordz(current,example(I,Widget,selected),_Ref),
  741	selectAll(_Widget,examples,_CallData).
  742
  743selectAll(_,_,_).
  744
  745
  746%************************************************************************
  747%*
  748%* predicate: unselectAll/3		Callback procedure	
  749%*
  750%* syntax: unselectAll(_Widget,+KindOfKnowledge,_CallData)
  751%*
  752%* args:       _Widget			calling widget	
  753%*	       KindOfKnowledge		rules or examples	
  754%*	       _CallData		event	
  755%*
  756%* description: Unselects all rules or examples of the knowledge base. The
  757%*      	rules or examples have to satisfy the current display
  758%*		 restricion.
  759%*
  760%************************************************************************
  761
  762unselectAll(_Widget,rules,_CallData) :-
  763	recorded(current,clause(I,Widget,selected),Ref),!,
  764	xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
  765	xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)]),
  766	erase(Ref),
  767	recordz(current,clause(I,Widget,notselected),_Ref),
  768	unselectAll(_Widget,rules,_CallData).
  769
  770unselectAll(_Widget,examples,_CallData) :-
  771	recorded(current,example(I,Widget,selected),Ref),!,
  772	xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
  773	xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)]),
  774	erase(Ref),
  775	recordz(current,example(I,Widget,notselected),_Ref),
  776	unselectAll(_Widget,examples,_CallData).
  777
  778unselectAll(_,_,_).
  779
  780
  781%************************************************************************
  782%*
  783%* predicate: deleteKnowledge/3		Callback procedure	
  784%*
  785%* syntax: deleteKnowledge(_Widget,+KindOfKnowledge,_CallData)
  786%*
  787%* args:       _Widget			calling widget	
  788%*	       KindOfKnowledge		rules or examples	
  789%*	       _CallData		event	
  790%*
  791%* description: Deletes all selected rules or examples.	
  792%*
  793%************************************************************************
  794
  795deleteKnowledge(_Widget,rules,_CallData) :-
  796	recorded(current,clause(I,Widget,selected),Ref),!,
  797	(recorded(editor,editing(rules,I),_) -> clearEditor(_,_,_)|
  798         otherwise),
  799	xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
  800	xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)]),
  801	erase(Ref),
  802	xtDestroyWidget(Widget),
  803	delete_clause(I),
  804	writeMessage(':- delete_clause('),
  805	writeMessage(I),
  806	writelnMessage(').'),
  807	deleteKnowledge(_Widget,rules,_CallData).
  808	
  809deleteKnowledge(_Widget,examples,_CallData) :-
  810	(recorded(editor,editing(examples,I),_) -> clearEditor(_,_,_)|
  811         otherwise),
  812	recorded(current,example(I,Widget,selected),Ref),!,
  813	xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
  814	xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)]),
  815	erase(Ref),
  816	xtDestroyWidget(Widget),
  817	delete_example(I),
  818	writeMessage(':- delete_example('),
  819	writeMessage(I),
  820	writelnMessage(').'),
  821	deleteKnowledge(_Widget,examples,_CallData).
  822
  823deleteKnowledge(_,KindOfKnowledge,_) :- 
  824	writeMessage('% selected '),
  825        writeMessage(KindOfKnowledge),
  826	writelnMessage(' deleted.'),
  827        updateEvaluationLabel.
  828
  829
  830%************************************************************************
  831%*
  832%* predicate: deleteAllKnowledge/3		Callback procedure	
  833%*
  834%* syntax: deleteKnowledge(_Widget,+KindOfKnowledge,_CallData)
  835%*
  836%* args:       _Widget			calling widget	
  837%*	       KindOfKnowledge		rules or examples	
  838%*	       _CallData		event	
  839%*
  840%* description: Deletes all rules or examples within the current display
  841%*	        restriction.	
  842%*
  843%************************************************************************
  844
  845deleteAllKnowledge(_Widget,rules,_CallData) :-
  846	(recorded(editor,editing(rules,_),_) -> clearEditor(_,_,_)|
  847         otherwise),
  848	recorded(current,clause(I,Widget,_),Ref),!,
  849	xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
  850	xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)]),
  851	erase(Ref),
  852	xtDestroyWidget(Widget),
  853	delete_clause(I),
  854	writeMessage(':- delete_clause('),
  855	writeMessage(I),
  856	writelnMessage(').'),
  857	deleteAllKnowledge(_Widget,rules,_CallData).
  858	
  859deleteAllKnowledge(_Widget,examples,_CallData) :-
  860	(recorded(editor,editing(examples,_),_) -> clearEditor(_,_,_)|
  861         otherwise),
  862	recorded(current,example(I,Widget,_),Ref),!,
  863	xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
  864	xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)]),
  865	erase(Ref),
  866	xtDestroyWidget(Widget),
  867	delete_example(I),
  868	writeMessage(':- delete_example('),
  869	writeMessage(I),
  870	writelnMessage(').'),
  871	deleteAllKnowledge(_Widget,examples,_CallData).
  872
  873deleteAllKnowledge(_,KindOfKnowledge,_) :- 
  874	writeMessage('% all '),
  875        writeMessage(KindOfKnowledge),
  876	writelnMessage(' deleted.').
  877
  878
  879%************************************************************************
  880%*
  881%* predicate: saveKnowledgeBegin/3		Callback procedure
  882%*
  883%* syntax: saveKnowledgeBegin(_Widget,+FileSelectionDialog,_CallData)
  884%*
  885%* args:       _Widget			calling widget	
  886%*	       +FileSelectionDialog	FileSelectionDialogWidget	
  887%*	       _CallData		event	
  888%*
  889%* description: Pops up a fileselection dialog.	
  890%*
  891%************************************************************************
  892
  893saveKnowledgeBegin(_Widget,FileSelectionDialog,_CallData) :-
  894	xtManageChild(FileSelectionDialog),
  895	xtAddCallback(FileSelectionDialog,xmNokCallback,
  896	  saveKnowledgeEnd,FileSelectionDialog),
  897	xtAddCallback(FileSelectionDialog,xmNcancelCallback,
  898	  cancelSaveFileSelect,FileSelectionDialog).
  899
  900
  901
  902%************************************************************************
  903%*
  904%* predicate: saveKnowledgeEnd/3		Callback procedure
  905%*
  906%* syntax: saveKnowledgeEnd(_Widget,+FileSelectionDialog,+CallData)
  907%*
  908%* args:       _Widget			calling widget	
  909%*	       +FileSelectionDialog	FileSelectionDialogWidget	
  910%*	       +CallData		event	
  911%*
  912%* description: Saves the selected file.
  913%*
  914%************************************************************************
  915
  916saveKnowledgeEnd(_Widget,FileSelectionDialog,CallData) :-
  917	xtUnmanageChild(FileSelectionDialog),
  918	xtRemoveCallback(FileSelectionDialog,xmNokCallback,
  919	  saveKnowledgeEnd,FileSelectionDialog),
  920	xtRemoveCallback(FileSelectionDialog,xmNcancelCallback,
  921	  cancelSaveFileSelect,FileSelectionDialog),
  922	sucheInListe(value(FileNameString),CallData),
  923	proxtGetDefaultCharset(DCharset),
  924	xmStringGetLtoR(FileNameString,DCharset,FileNameCP,_),
  925	proxtCharPtrToString(FileNameCP,FileName),
  926	((midstring(FileName,_,'.qof',0) ->
  927	    save_kb(FileName),
  928	    writeMessage(':- save_kb('),
  929	    writeMessage(FileName),
  930	    writelnMessage(').'))|
  931	 (otherwise ->
  932	    print_kb(FileName),
  933	    writeMessage(':- print_kb('),
  934	    writeMessage(FileName),
  935	    writelnMessage(').'))),
  936	writeMessage('% file "'),
  937	writeMessage(FileName),
  938	writelnMessage('" saved.').
  939
  940
  941%************************************************************************
  942%*
  943%* predicate: loadKnowledgeBegin/3		Callback procedure
  944%*
  945%* syntax: loadKnowledgeBegin(_Widget,+FileSelectionDialog,_CallData)
  946%*
  947%* args:       _Widget			calling widget	
  948%*	       +FileSelectionDialog	FileSelectionDialogWidget	
  949%*	       _CallData		event	
  950%*
  951%* description: Pops up a fileselection dialog.	
  952%*
  953%************************************************************************
  954
  955loadKnowledgeBegin(_Widget,FileSelectionDialog,_CallData) :-
  956	xtManageChild(FileSelectionDialog),
  957	xtAddCallback(FileSelectionDialog,xmNokCallback,
  958	  loadKnowledgeEnd,FileSelectionDialog),
  959	xtAddCallback(FileSelectionDialog,xmNcancelCallback,
  960	  cancelLoadFileSelect,FileSelectionDialog).
  961
  962
  963%************************************************************************
  964%*
  965%* predicate: loadKnowledgeEnd/3		Callback procedure
  966%*
  967%* syntax: loadKnowledgeEnd(_Widget,+FileSelectionDialog,+CallData)
  968%*
  969%* args:       _Widget			calling widget	
  970%*	       +FileSelectionDialog	FileSelectionDialogWidget	
  971%*	       _CallData		event	
  972%*
  973%* description: Loads the selected file.
  974%*
  975%************************************************************************
  976
  977loadKnowledgeEnd(_Widget,FileSelectionDialog,CallData) :-
  978	xtUnmanageChild(FileSelectionDialog),
  979	xtRemoveCallback(FileSelectionDialog,xmNokCallback,
  980	  loadKnowledgeEnd,FileSelectionDialog),
  981	xtRemoveCallback(FileSelectionDialog,xmNcancelCallback,
  982	  cancelLoadFileSelect,FileSelectionDialog),
  983	sucheInListe(value(FileNameString),CallData),
  984	proxtGetDefaultCharset(DCharset),
  985	xmStringGetLtoR(FileNameString,DCharset,FileNameCP,_),
  986	proxtCharPtrToString(FileNameCP,FileName),
  987	((midstring(FileName,_,'.qof',0) ->
  988	    consult_kb(FileName),
  989	    writeMessage(':- consult_kb('),
  990	    writeMessage(FileName),
  991	    writelnMessage(').'))|
  992	 (otherwise ->
  993	    init_kb(FileName),
  994	    writeMessage(':- init_kb('),
  995	    writeMessage(FileName),
  996	    writelnMessage(').'))),
  997	writeMessage('% file "'),
  998	writeMessage(FileName),
  999	writelnMessage('" consulted.'),
 1000	refreshKnowledgeList(_Widget,rules,_Calldata),
 1001	refreshKnowledgeList(_Widget,examples,_Calldata),
 1002        updateEvaluationLabel.
 1003
 1004
 1005%************************************************************************
 1006%*
 1007%* predicate: clearAllKnowledge/3 	callback procedure
 1008%*
 1009%* syntax: clearAllKnowledge(_Widget,_ClientData,_CallData)
 1010%*
 1011%* args:       _Widget			calling widget
 1012%*	       _ClientData		no client data
 1013%*	       _CallData		event
 1014%*
 1015%* description:  deletes all rules and examples	
 1016%*
 1017%************************************************************************
 1018
 1019clearAllKnowledge(_Widget,_ClientData,_CallData) :-
 1020	deleteAllKnowledge(_Widget,rules,_CallData),
 1021	deleteAllKnowledge(_Widget,examples,_CallData),
 1022	clearEditor(_,_,_),
 1023	writelnMessage(':- clear_kb.'),
 1024	writelnMessage('% knowledgebase cleared.'),
 1025	clear_kb,
 1026        updateEvaluationLabel.
 1027
 1028%************************************************************************
 1029%*
 1030%* predicate: cancelLoadFileSelect/3 	callback procedure
 1031%*
 1032%* syntax: cancelLoadFileSelect(_Widget,_ClientData,_CallData)
 1033%*
 1034%* args:       _Widget			calling widget
 1035%*	       _ClientData		no client data
 1036%*	       _CallData		event
 1037%*
 1038%* description: Pops down the file selection dialog without loading any
 1039%*		file.
 1040%*
 1041%************************************************************************
 1042
 1043cancelLoadFileSelect(_Widget,FileSelectionDialog,_CallData) :-
 1044	xtRemoveCallback(FileSelectionDialog,xmNokCallback,
 1045	  loadKnowledgeEnd,FileSelectionDialog),
 1046	xtRemoveCallback(FileSelectionDialog,xmNcancelCallback,
 1047	  cancelLoadFileSelect,FileSelectionDialog),
 1048	xtUnmanageChild(FileSelectionDialog).
 1049
 1050
 1051%************************************************************************
 1052%*
 1053%* predicate: cancelSaveFileSelect/3 	callback procedure
 1054%*
 1055%* syntax: cancelSaveFileSelect(_Widget,_ClientData,_CallData)
 1056%*
 1057%* args:       _Widget			calling widget
 1058%*	       _ClientData		no client data
 1059%*	       _CallData		event
 1060%*
 1061%* description: Pops down the file selection dialog without saving any
 1062%*		file.
 1063%*
 1064%************************************************************************
 1065
 1066cancelSaveFileSelect(_Widget,FileSelectionDialog,_CallData) :-
 1067	xtRemoveCallback(FileSelectionDialog,xmNokCallback,
 1068	  saveKnowledgeEnd,FileSelectionDialog),
 1069	xtRemoveCallback(FileSelectionDialog,xmNcancelCallback,
 1070	  cancelSaveFileSelect,FileSelectionDialog),
 1071	xtUnmanageChild(FileSelectionDialog).
 1072
 1073
 1074%************************************************************************
 1075%*
 1076%* predicate: createKbButtons/1
 1077%*
 1078%* syntax: createKbButtons(+Parent)
 1079%*
 1080%* args: Parent			Widget
 1081%*
 1082%* description: Creates the push buttons 'Save', 'Load', 'Clear'. These
 1083%*		buttons are effecting the whole knowledge base (rules and
 1084%*	        examples).
 1085%*
 1086%************************************************************************
 1087
 1088createKbButtons(Parent) :-
 1089	xmCreateRowColumn(Parent,'ButtonRowColumn',
 1090	  [xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER),
 1091	   xmNnumColumns(1),
 1092	   xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN)],
 1093	  ButtonRowColumn),
 1094	xtManageChild(ButtonRowColumn),
 1095
 1096	xmCreateFileSelectionDialog(ButtonRowColumn,'KBFileSelect',
 1097	  [],KbFileSelectionDialog),
 1098
 1099	xmCreatePushButton(ButtonRowColumn,'Load',
 1100	  [],Load),
 1101	xtManageChild(Load),
 1102	xtAddCallback(Load,xmNactivateCallback,
 1103	              loadKnowledgeBegin,KbFileSelectionDialog),
 1104
 1105	xmCreatePushButton(ButtonRowColumn,'Save',
 1106	  [],Save),
 1107	xtManageChild(Save),
 1108	xtAddCallback(Save,xmNactivateCallback,
 1109	              saveKnowledgeBegin,KbFileSelectionDialog),
 1110
 1111	xmCreatePushButton(ButtonRowColumn,'Clear',
 1112	  [],Clear),
 1113	xtManageChild(Clear),
 1114	createYesNoPopup(Clear,_YesNoPopup,clearAllKnowledge,_).
 1115
 1116
 1117%************************************************************************
 1118%*
 1119%* predicate: createKbSubButtons/2
 1120%*
 1121%* syntax: createKbSubButtons(+Parent,+KindOfKnowledge)
 1122%*
 1123%* args:        +Parent			Widget		
 1124%*		+KindOfKnowledge	examples or rules
 1125%*
 1126%* description: Creates the push buttons 'SelectAll', 'Unselect All',
 1127%* 	         'Refresh', 'Delete', 'Delete All' and 'Label' or '+', '-'
 1128%* 	         '?'. These buttons are efecting the KindOfKnowledge
 1129%*		 (rules and examples).
 1130%*
 1131%************************************************************************
 1132
 1133createKbSubButtons(Parent,KindOfKnowledge) :-
 1134	xmCreateRowColumn(Parent,'ButtonRowColumn',
 1135	  [xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER),
 1136	   xmNnumColumns(2),
 1137	   xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN)],
 1138	  ButtonRowColumn),
 1139	xtManageChild(ButtonRowColumn),
 1140
 1141	xmCreatePushButton(ButtonRowColumn,'View ...',
 1142	  [],View),
 1143	xtManageChild(View),
 1144
 1145	xmCreatePushButton(ButtonRowColumn,'Select All',
 1146	  [],Select),
 1147	xtManageChild(Select),
 1148	xtAddCallback(Select,xmNactivateCallback,
 1149	              selectAll,KindOfKnowledge),
 1150	
 1151	xmCreatePushButton(ButtonRowColumn,'Unselect All',
 1152	  [],Unselect),
 1153	xtManageChild(Unselect),
 1154	xtAddCallback(Unselect,xmNactivateCallback,
 1155	              unselectAll,KindOfKnowledge),
 1156	
 1157	xmCreatePushButton(ButtonRowColumn,'Refresh',
 1158	  [],Refresh),
 1159	xtManageChild(Refresh),
 1160	xtAddCallback(Refresh,xmNactivateCallback,
 1161	              refreshKnowledgeList,KindOfKnowledge),
 1162
 1163	xmCreatePushButton(ButtonRowColumn,'Delete',
 1164	  [],Delete),
 1165	xtManageChild(Delete),
 1166	xtAddCallback(Delete,xmNactivateCallback,
 1167	              deleteKnowledge,KindOfKnowledge),
 1168
 1169	(KindOfKnowledge = rules ->
 1170	                   createViewRulesPopup(View),
 1171	                   createLabelChangeButton(ButtonRowColumn) |
 1172	 KindOfKnowledge = examples ->
 1173	                   createViewExamplesPopup(View),
 1174	                   createClassChangeButtons(ButtonRowColumn)).
 1175
 1176
 1177%************************************************************************
 1178%*
 1179%* predicate: createLabelChangeButton/1
 1180%*
 1181%* syntax: createLabelChangeButton(+Parent)
 1182%*
 1183%* args:
 1184%*
 1185%* description: Creates a push button and a editing Dialog for changing
 1186%*		 the label of the selected rules.	
 1187%*
 1188%************************************************************************
 1189
 1190createLabelChangeButton(Parent) :-
 1191	xmCreatePushButton(Parent,'Label',
 1192	  [],Label),
 1193	xtManageChild(Label),
 1194	
 1195	xmCreateBulletinBoardDialog(Label,'Label Change',
 1196	 [],LabelChangeDialog),
 1197	xtAddCallback(Label,xmNactivateCallback,
 1198	              popupDialog,LabelChangeDialog),
 1199	xmCreateFrame(LabelChangeDialog,'LabelFrame',
 1200	  [],LabelFrame),
 1201	xtManageChild(LabelFrame),
 1202
 1203	xmCreateRowColumn(LabelFrame,labelChangeColumn,
 1204	  [xmNorientation(xmVERTICAL),xmNpacking(xmPACK_COLUMN)],
 1205	  LabelChangeColumn),
 1206	xtManageChild(LabelChangeColumn),
 1207
 1208	proxtGetDefaultCharset(DCharset),
 1209	proxtStringToCharPtr(
 1210	    'Change Label of all selected rules to:',LCP),
 1211	xmStringCreate(LCP,DCharset,LabelStr),
 1212	xmCreateLabelGadget(LabelChangeColumn,labelchange,
 1213	  [xmNlabelType(xmSTRING),xmNlabelString(LabelStr)],
 1214	  KStatus),
 1215	xtManageChild(KStatus),
 1216	
 1217	xmCreateText(LabelChangeColumn,labelChangeText,
 1218	  [xmNeditable(true),xmNeditMode(xmSINGLE_LINE_EDIT),
 1219	   xmNwidth(150),
 1220	   xmNautoShowCursorPosition(true)],LabelChangeText),
 1221	xtManageChild(LabelChangeText),
 1222	xtAddActions([action(label_ok,changeSelectedLabels,LabelChangeDialog)]),
 1223	proxtStringToCharPtr('<Key>Return: label_ok()',TranslationString),
 1224	xtParseTranslationTable(TranslationString,TranslationTable),
 1225	xtOverrideTranslations(LabelChangeText,TranslationTable),
 1226
 1227	xmCreateRowColumn(LabelChangeColumn,buttonrow,
 1228	  [xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 1229	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 1230	  ButtonRow),
 1231	xtManageChild(ButtonRow),
 1232
 1233	xmCreatePushButton(ButtonRow,'OK!',
 1234	  [],OK),
 1235	xtManageChild(OK),
 1236	xtAddCallback(OK,xmNactivateCallback,
 1237	      changeSelectedLabels,[LabelChangeDialog,LabelChangeText]),
 1238
 1239	xmCreatePushButton(ButtonRow,'Cancel',
 1240	  [],Cancel),
 1241	xtManageChild(Cancel),
 1242	xtAddCallback(Cancel,xmNactivateCallback,
 1243	              cancelLabelChange,LabelChangeDialog).
 1244
 1245
 1246%************************************************************************
 1247%*
 1248%* predicate: createSelectRulesPopup/1
 1249%*
 1250%* syntax: createSelectRulesPopup(+Parent)
 1251%*
 1252%* args:
 1253%*
 1254%* description:  Creates a push button and a editing Dialog for changing
 1255%*		 the label of the selected rules.
 1256%*
 1257%************************************************************************
 1258
 1259createSelectRulesPopup(Parent) :-
 1260	
 1261	xmCreateBulletinBoardDialog(Parent,'SelectRules',
 1262	 [],SelectRulesDialog),
 1263	xtAddCallback(Parent,xmNactivateCallback,
 1264	              popupDialog,SelectRulesDialog),
 1265	xmCreateFrame(SelectRulesDialog,'SelectRulesFrame',
 1266	  [],SelectRulesFrame),
 1267	xtManageChild(SelectRulesFrame),
 1268
 1269	xmCreateRowColumn(SelectRulesFrame,selectRulesColumn,
 1270	  [xmNorientation(xmVERTICAL),xmNpacking(xmPACK_COLUMN)],
 1271	  SelectRulesColumn),
 1272	xtManageChild(SelectRulesColumn),
 1273
 1274	proxtGetDefaultCharset(DCharset),
 1275	proxtStringToCharPtr('Select rules:',TitleCP),
 1276	xmStringCreate(TitleCP,DCharset,TitleStr),
 1277	xmCreateLabelGadget(SelectRulesColumn,title,
 1278	  [xmNlabelType(xmSTRING),xmNlabelString(TitleStr)],
 1279	  TitleLabel),
 1280	xtManageChild(TitleLabel),
 1281	
 1282	xmCreateText(SelectRulesColumn,selectRulesText,
 1283	  [xmNeditable(true),xmNeditMode(xmSINGLE_LINE_EDIT),
 1284	   xmNwidth(150),
 1285	   xmNautoShowCursorPosition(true)],SelectRulesText),
 1286	xtManageChild(SelectRulesText),
 1287	xtAddActions([action(select_ok,selectRules,SelectRulesDialog)]),
 1288	proxtStringToCharPtr('<Key>Return: select_ok()',TranslationString),
 1289	xtParseTranslationTable(TranslationString,TranslationTable),
 1290	xtOverrideTranslations(SelectRulesText,TranslationTable),
 1291
 1292	xmCreateRowColumn(SelectRulesColumn,buttonrow,
 1293	  [xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 1294	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 1295	  ButtonRow),
 1296	xtManageChild(ButtonRow),
 1297
 1298	xmCreatePushButton(ButtonRow,'Select',
 1299	  [],Select),
 1300	xtManageChild(Select),
 1301	xtAddCallback(Select,xmNactivateCallback,
 1302	      selectRules,SelectRulesDialog),
 1303
 1304	xmCreatePushButton(ButtonRow,'Select All',
 1305	  [],SelectAll),
 1306	xtManageChild(SelectAll),
 1307	xtAddCallback(SelectAll,xmNactivateCallback,
 1308	      selectRules,[rules,SelectRulesDialog]),
 1309
 1310	xmCreatePushButton(ButtonRow,'Cancel',
 1311	  [],Cancel),
 1312	xtManageChild(Cancel),
 1313	xtAddCallback(Cancel,xmNactivateCallback,
 1314	              yesNoPopdown,SelectRulesDialog).
 1315
 1316
 1317%************************************************************************
 1318%*
 1319%* predicate: createExamineRulesPopup/1
 1320%*
 1321%* syntax: createExamineRulesPopup(+Parent)
 1322%*
 1323%* args:
 1324%*
 1325%* description: Creates a push button and a Dialog for examining
 1326%*		the selected rules.
 1327%*
 1328%************************************************************************
 1329
 1330createExamineRulesPopup(Parent) :-
 1331	
 1332	xmCreateBulletinBoardDialog(Parent,'ExamineRules',
 1333	 [],ExamineRulesDialog),
 1334	xtAddCallback(Parent,xmNactivateCallback,
 1335	              popupExamineRules,_),
 1336	recordz(rules,examine(dialog,ExamineRulesDialog),_),
 1337
 1338	xmCreateFrame(ExamineRulesDialog,'ExamineRulesFrame',
 1339	  [],ExamineRulesFrame),
 1340	xtManageChild(ExamineRulesFrame),
 1341
 1342	xmCreateRowColumn(ExamineRulesFrame,examineRulesColumn,
 1343	  [xmNorientation(xmVERTICAL),xmNpacking(xmPACK_TIGHT)],
 1344	  ExamineRulesColumn),
 1345	xtManageChild(ExamineRulesColumn),
 1346
 1347	xmCreateRowColumn(ExamineRulesColumn,titlerow,
 1348	  [xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 1349	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 1350	  TitleRow),
 1351	xtManageChild(TitleRow),
 1352
 1353	proxtGetDefaultCharset(DCharset),
 1354	proxtStringToCharPtr('Examine rule:',TitleCP),
 1355	xmStringCreate(TitleCP,DCharset,TitleStr),
 1356	xmCreateLabelGadget(TitleRow,title,
 1357	  [xmNlabelType(xmSTRING),xmNlabelString(TitleStr)],
 1358	  TitleLabel),
 1359	xtManageChild(TitleLabel),
 1360
 1361	xmCreateScrolledWindow(ExamineRulesColumn,ruleSW,
 1362	  [xmNheight(200),xmNwidth(250),
 1363	   xmNlistSizePolicy(xmCONSTANT),
 1364	   xmNscrollBarDisplayPolicy(xmSTATIC),
 1365	   xmNscrollingPolicy(xmAUTOMATIC)],
 1366	  RuleSW),
 1367	xtManageChild(RuleSW),
 1368
 1369	xmCreateRowColumn(RuleSW,ruleRC,
 1370	  [xmNadjustLast(false),
 1371	   xmNorientation(xmVERTICAL),
 1372	   xmNpacking(xmPACK_TIGHT),
 1373	   xmNrowColumnType(xmWORK_AREA)],
 1374	  RuleRC),
 1375	recordz(rules,examineRC(RuleRC),_Ref),
 1376	xtGetValues(RuleRC,[xmNbackground(B)]),
 1377	xtGetValues(RuleSW,[xmNclipWindow(CW)]),
 1378	xtSetValues(CW,[xmNbackground(B)]),
 1379	xtManageChild(RuleRC),
 1380
 1381	xmCreateRowColumn(ExamineRulesColumn,buttonrow,
 1382	  [xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 1383	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 1384	  ButtonRow),
 1385	xtManageChild(ButtonRow),
 1386
 1387	xmCreatePushButton(ButtonRow,'Examine',
 1388	  [],Examine),
 1389	xtManageChild(Examine),
 1390	xtAddCallback(Examine,xmNactivateCallback,
 1391	      showExaminedRule,_),
 1392	showExaminedRule(_,_,_),
 1393
 1394	xmCreatePushButton(ButtonRow,'Cancel',
 1395	  [],Cancel),
 1396	xtManageChild(Cancel),
 1397	xtAddCallback(Cancel,xmNactivateCallback,
 1398	              cancelExamineRules,_).	
 1399
 1400
 1401
 1402
 1403%************************************************************************
 1404%*
 1405%* predicate: showExaminedRule/1
 1406%*
 1407%* syntax: showExaminedRule(_Widget,_RuleNoText,_CallData)
 1408%*
 1409%* description: Displays Info on the (first) selected rule
 1410%*
 1411%************************************************************************
 1412
 1413showExaminedRule(_Widget, _RuleNoText, _CallData) :-
 1414	proxtGetDefaultCharset(DCharset),
 1415	(recorded(rules,examineText(OldText),Ref) ->
 1416	    erase(Ref),
 1417	    xtDestroyWidget(OldText)|
 1418	 otherwise),
 1419	recorded(rules,examineRC(ExamineRC),_),
 1420
 1421	(   ( recorded(current,clause(RuleNo,_,selected),_),
 1422	      get_clause(RuleNo,H,B,_S,O)) ->
 1423	    get_evaluation(RuleNo,Evaluation),
 1424	    Evaluation = evaluation(E1,E2,E3,E4,E5,E6,E7,E8,E9),
 1425	    ( type_restriction(H,R)
 1426	    ; R='No type restriction found!'
 1427	    ),
 1428	    numbervars((H,B),0,_), %%%%Irene
 1429	    xxmWriteToString((show_kb_clause(RuleNo,H,B,O),
 1430	                      nl,write('type_restriction:'),
 1431                              nl,write(R),nl),
 1432 	                      DCharset,XmS3),
 1433	    xxmWriteToString((nl,write('evaluation:'),nl,
 1434		              write(E1),nl,write(E2),nl,write(E3),nl,
 1435	                      write(E4),nl,write(E5),nl,write(E6),nl,
 1436	                      write(E7),nl,write(E8),nl,write(E9),nl),
 1437                              DCharset,XmS4),
 1438	    xmStringConcat(XmS3,XmS4,XmS),
 1439
 1440	    xmCreateLabel(ExamineRC,anyClause,
 1441	               [xmNalignment(xmALIGNMENT_BEGINNING),
 1442	                xmNlabelString(XmS),xmNlabelType(xmSTRING)],
 1443	                Label)
 1444		    
 1445	;   atom_chars(ASno,"No rule selected!"),
 1446	    proxtStringToCharPtr(ASno,CPno),
 1447	    xmStringCreateLtoR(CPno,DCharset,XmSno),
 1448	    xmCreateLabel(ExamineRC,anyClause,
 1449	             [xmNalignment(xmALIGNMENT_BEGINNING),
 1450	             xmNlabelString(XmSno),xmNlabelType(xmSTRING)],
 1451	             Label)
 1452        ),
 1453
 1454	xtManageChild(Label),
 1455	recordz(rules,examineText(Label),_),!.
 1456
 1457
 1458%************************************************************************
 1459%*
 1460%* predicate: createViewRulesPopup/1
 1461%*
 1462%* syntax: createViewRulesPopup(+Parent)
 1463%*
 1464%* description: creates Dialog for Viewing Rules
 1465%*
 1466%************************************************************************
 1467
 1468createViewRulesPopup(Parent) :-
 1469	
 1470	xmCreateBulletinBoardDialog(Parent,'ViewRules',
 1471	 [],ViewRulesDialog),
 1472	xtAddCallback(Parent,xmNactivateCallback,
 1473	              popupViewRules,_),
 1474
 1475	xmCreateFrame(ViewRulesDialog,'ViewRulesFrame',
 1476	  [],ViewRulesFrame),
 1477	xtManageChild(ViewRulesFrame),
 1478
 1479	xmCreateRowColumn(ViewRulesFrame,viewRulesColumn,
 1480	  [xmNorientation(xmVERTICAL),xmNpacking(xmPACK_TIGHT)],
 1481	  ViewRulesColumn),
 1482	xtManageChild(ViewRulesColumn),
 1483
 1484	proxtGetDefaultCharset(DCharset),
 1485	proxtStringToCharPtr('View rules:',TitleCP),
 1486	xmStringCreate(TitleCP,DCharset,TitleStr),
 1487	xmCreateLabelGadget(ViewRulesColumn,title,
 1488	  [xmNlabelType(xmSTRING),xmNlabelString(TitleStr)],
 1489	  TitleLabel),
 1490	xtManageChild(TitleLabel),
 1491	
 1492	xmCreateFrame(ViewRulesColumn,'ViewLabelsFrame',
 1493	  [],ViewLabelFrame),
 1494	xtManageChild(ViewLabelFrame),
 1495
 1496	xmCreateRowColumn(ViewLabelFrame,labelrow,
 1497	  [xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 1498	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 1499	  LabelRow),
 1500	xtManageChild(LabelRow),
 1501
 1502	xmCreateRowColumn(LabelRow,exLabColumn,
 1503	  [xmNorientation(xmVERTICAL),xmNpacking(xmPACK_TIGHT)],
 1504	  ExLabColumn),
 1505	xtManageChild(ExLabColumn),
 1506
 1507	xmCreateRowColumn(LabelRow,viewLabColumn,
 1508	  [xmNorientation(xmVERTICAL),xmNpacking(xmPACK_TIGHT)],
 1509	  ViewLabColumn),
 1510	xtManageChild(ViewLabColumn),
 1511
 1512	proxtStringToCharPtr('existing labels',ExLabCP),
 1513	xmStringCreate(ExLabCP,DCharset,ExLabStr),
 1514	xmCreateLabelGadget(ExLabColumn,subtitle,
 1515	  [xmNlabelType(xmSTRING),xmNlabelString(ExLabStr)],
 1516	  ExLabLabel),
 1517	xtManageChild(ExLabLabel),
 1518	
 1519	proxtStringToCharPtr('viewed labels',ViewLabCP),
 1520	xmStringCreate(ViewLabCP,DCharset,ViewLabStr),
 1521	xmCreateLabelGadget(ViewLabColumn,subtitle,
 1522	  [xmNlabelType(xmSTRING),xmNlabelString(ViewLabStr)],
 1523	  ViewLabLabel),
 1524	xtManageChild(ViewLabLabel),
 1525	
 1526	xmCreateScrolledWindow(ExLabColumn,exLabSW,
 1527	  [xmNheight(150),xmNwidth(140),
 1528	   xmNlistSizePolicy(xmCONSTANT),
 1529	   xmNscrollBarDisplayPolicy(xmSTATIC),
 1530	   xmNscrollingPolicy(xmAUTOMATIC)],
 1531	  ExLabSW),
 1532	xtManageChild(ExLabSW),
 1533	xmCreateRowColumn(ExLabSW,exLabRC,
 1534	  [xmNadjustLast(false),
 1535	   xmNorientation(xmVERTICAL),
 1536	   xmNpacking(xmPACK_TIGHT),
 1537	   xmNrowColumnType(xmWORK_AREA)],
 1538	  ExLabRC),
 1539	xtGetValues(ExLabRC,[xmNbackground(ExLabB)]),
 1540	xtGetValues(ExLabSW,[xmNclipWindow(ExLabCW)]),
 1541	xtSetValues(ExLabCW,[xmNbackground(ExLabB)]),
 1542	xtManageChild(ExLabRC),
 1543
 1544	xmCreateScrolledWindow(ViewLabColumn,viewedLabSW,
 1545	  [xmNheight(150),xmNwidth(140),
 1546	   xmNlistSizePolicy(xmCONSTANT),
 1547	   xmNscrollBarDisplayPolicy(xmSTATIC),
 1548	   xmNscrollingPolicy(xmAUTOMATIC)],
 1549	  ViewLabSW),
 1550	xtManageChild(ViewLabSW),
 1551	xmCreateRowColumn(ViewLabSW,viewLabRC,
 1552	  [xmNadjustLast(false),
 1553	   xmNorientation(xmVERTICAL),
 1554	   xmNpacking(xmPACK_TIGHT),
 1555	   xmNrowColumnType(xmWORK_AREA)],
 1556	  ViewLabRC),
 1557	xtGetValues(ViewLabRC,[xmNbackground(ViewLabB)]),
 1558	xtGetValues(ViewLabSW,[xmNclipWindow(ViewLabCW)]),
 1559	xtSetValues(ViewLabCW,[xmNbackground(ViewLabB)]),
 1560	xtManageChild(ViewLabRC),
 1561
 1562	xmCreateFrame(ViewRulesColumn,'ViewClauseHeadFrame',
 1563	  [],ViewClauseHeadFrame),
 1564	xtManageChild(ViewClauseHeadFrame),
 1565
 1566	xmCreateRowColumn(ViewClauseHeadFrame,clauseHeadrow,
 1567	  [xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 1568	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 1569	  ClauseHeadRow),
 1570	xtManageChild(ClauseHeadRow),
 1571
 1572	xmCreateRowColumn(ClauseHeadRow,exCHColumn,
 1573	  [xmNorientation(xmVERTICAL),xmNpacking(xmPACK_TIGHT)],
 1574	  ExCHColumn),
 1575	xtManageChild(ExCHColumn),
 1576
 1577	xmCreateRowColumn(ClauseHeadRow,viewCHColumn,
 1578	  [xmNorientation(xmVERTICAL),xmNpacking(xmPACK_TIGHT)],
 1579	  ViewCHColumn),
 1580	xtManageChild(ViewCHColumn),
 1581
 1582	proxtStringToCharPtr('existing clause heads',ExCHCP),
 1583	xmStringCreate(ExCHCP,DCharset,ExCHStr),
 1584	xmCreateLabelGadget(ExCHColumn,subtitle,
 1585	  [xmNlabelType(xmSTRING),xmNlabelString(ExCHStr)],
 1586	  ExCHLabel),
 1587	xtManageChild(ExCHLabel),
 1588	
 1589	proxtStringToCharPtr('viewed clause heads',ViewCHCP),
 1590	xmStringCreate(ViewCHCP,DCharset,ViewCHStr),
 1591	xmCreateLabelGadget(ViewCHColumn,subtitle,
 1592	  [xmNlabelType(xmSTRING),xmNlabelString(ViewCHStr)],
 1593	  ViewCHLabel),
 1594	xtManageChild(ViewCHLabel),
 1595	
 1596	xmCreateScrolledWindow(ExCHColumn,existingCHSW,
 1597	  [xmNheight(150),xmNwidth(140),
 1598	   xmNlistSizePolicy(xmCONSTANT),
 1599	   xmNscrollBarDisplayPolicy(xmSTATIC),
 1600	   xmNscrollingPolicy(xmAUTOMATIC)],
 1601	  ExCHSW),
 1602	xtManageChild(ExCHSW),
 1603	xmCreateRowColumn(ExCHSW,exCHRC,
 1604	  [xmNadjustLast(false),
 1605	   xmNorientation(xmVERTICAL),
 1606	   xmNpacking(xmPACK_TIGHT),
 1607	   xmNrowColumnType(xmWORK_AREA)],
 1608	  ExCHRC),
 1609	xtGetValues(ExCHRC,[xmNbackground(ExCHB)]),
 1610	xtGetValues(ExCHSW,[xmNclipWindow(ExCHCW)]),
 1611	xtSetValues(ExCHCW,[xmNbackground(ExCHB)]),
 1612	xtManageChild(ExCHRC),
 1613
 1614	xmCreateScrolledWindow(ViewCHColumn,viewedCHSW,
 1615	  [xmNheight(150),xmNwidth(140),
 1616	   xmNlistSizePolicy(xmCONSTANT),
 1617	   xmNscrollBarDisplayPolicy(xmSTATIC),
 1618	   xmNscrollingPolicy(xmAUTOMATIC)],
 1619	  ViewCHSW),
 1620	xtManageChild(ViewCHSW),
 1621	xmCreateRowColumn(ViewCHSW,viewCHRC,
 1622	  [xmNadjustLast(false),
 1623	   xmNorientation(xmVERTICAL),
 1624	   xmNpacking(xmPACK_TIGHT),
 1625	   xmNrowColumnType(xmWORK_AREA)],
 1626	  ViewCHRC),
 1627	xtGetValues(ViewCHRC,[xmNbackground(ViewCHB)]),
 1628	xtGetValues(ViewCHSW,[xmNclipWindow(ViewCHCW)]),
 1629	xtSetValues(ViewCHCW,[xmNbackground(ViewCHB)]),
 1630	xtManageChild(ViewCHRC),
 1631
 1632	xmCreateRowColumn(ViewRulesColumn,minMaxRow,
 1633	  [xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 1634	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 1635	  MinMaxRow),
 1636	xtManageChild(MinMaxRow),
 1637
 1638	proxtStringToCharPtr( 'Min: ', MinLabelChrPtr),
 1639	xmStringCreate(MinLabelChrPtr,DCharset,MinLabelStr),
 1640	xmCreateLabelGadget(MinMaxRow,minLabel,
 1641	[xmNlabelType(xmSTRING),xmNlabelString(MinLabelStr)],
 1642	MinLabel),
 1643	xtManageChild(MinLabel),
 1644
 1645	xmCreateRowColumn(MinMaxRow,'Min',
 1646	[xmNadjustLast(true), xmNmarginHeight(0),
 1647	xmNorientation(xmHORIZONTAL),
 1648	xmNpacking(xmPACK_TIGHT)],
 1649	MinRow),	
 1650	xtManageChild(MinRow),
 1651
 1652	xmCreatePushButton(MinRow,'<',
 1653	[],Lower),
 1654	xtManageChild(Lower),
 1655
 1656	xmCreateText(MinRow,argumentText,
 1657	[xmNeditable(true),xmNeditMode(xmSINGLE_LINE_EDIT),
 1658	xmNwidth(30),
 1659	xmNautoShowCursorPosition(true)],MinText),
 1660	proxtStringToCharPtr('1',MinChrPtr),
 1661	xmTextSetString(MinText,MinChrPtr),
 1662	xtManageChild(MinText),
 1663	recordz(rules,viewMin(MinText),_),
 1664
 1665	xtAddCallback(Lower,xmNactivateCallback,lowerMin,MinText),
 1666	xmCreatePushButton(MinRow,'>',
 1667	[],Raise),
 1668	xtManageChild(Raise),
 1669	xtAddCallback(Raise,xmNactivateCallback,raiseMin,MinText),
 1670
 1671	proxtStringToCharPtr( 'Max: ', MaxLabelChrPtr),
 1672	xmStringCreate(MaxLabelChrPtr,DCharset,MaxLabelStr),
 1673	xmCreateLabelGadget(MinMaxRow,maxLabel,
 1674	[xmNlabelType(xmSTRING),xmNlabelString(MaxLabelStr)],
 1675	MaxLabel),
 1676	xtManageChild(MaxLabel),
 1677
 1678	xmCreateRowColumn(MinMaxRow,'Max',
 1679	[xmNadjustLast(true), xmNmarginHeight(0),
 1680	xmNorientation(xmHORIZONTAL),
 1681	xmNpacking(xmPACK_TIGHT)],
 1682	MaxRow),	
 1683	xtManageChild(MaxRow),
 1684
 1685	xmCreatePushButton(MaxRow,'<',
 1686	[],LowerMax),
 1687	xtManageChild(LowerMax),
 1688
 1689	xmCreateText(MaxRow,argumentText,
 1690	[xmNeditable(true),xmNeditMode(xmSINGLE_LINE_EDIT),
 1691	xmNwidth(30),
 1692	xmNautoShowCursorPosition(true)],MaxText),
 1693	proxtStringToCharPtr('100',MaxChrPtr),
 1694	xmTextSetString(MaxText,MaxChrPtr),
 1695	xtManageChild(MaxText),
 1696	recordz(rules,viewMax(MaxText),_),
 1697
 1698	xtAddCallback(LowerMax,xmNactivateCallback,lowerMax,MaxText),
 1699	xmCreatePushButton(MaxRow,'>',
 1700	[],RaiseMax),
 1701	xtManageChild(RaiseMax),
 1702	xtAddCallback(RaiseMax,xmNactivateCallback,raiseMax,MaxText),
 1703
 1704
 1705
 1706	recordz(rules,view(all),_),
 1707	recordz(rules,view(labels,[]),_),
 1708	recordz(rules,view(clause_heads,[]),_),
 1709	recordz(rules,view(dialog,ViewRulesDialog),_),
 1710	recordz(rules,view(exLabRC,ExLabRC),_),
 1711	recordz(rules,view(viewLabRC,ViewLabRC),_),
 1712	recordz(rules,view(exCHRC,ExCHRC),_),
 1713	recordz(rules,view(viewCHRC,ViewCHRC),_),
 1714
 1715	xmCreateRowColumn(ViewRulesColumn,buttonrow,
 1716	  [xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 1717	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 1718	  ButtonRow),
 1719	xtManageChild(ButtonRow),
 1720
 1721	xmCreatePushButton(ButtonRow,'View',
 1722	  [],View),
 1723	xtManageChild(View),
 1724	xtAddCallback(View,xmNactivateCallback,
 1725	      viewRules,_),
 1726
 1727	xmCreatePushButton(ButtonRow,'View All',
 1728	  [],ViewAll),
 1729	xtManageChild(ViewAll),
 1730	xtAddCallback(ViewAll,xmNactivateCallback,
 1731	      viewAllRules,_),
 1732
 1733	xmCreatePushButton(ButtonRow,'Cancel',
 1734	  [],Cancel),
 1735	xtManageChild(Cancel),
 1736	xtAddCallback(Cancel,xmNactivateCallback,
 1737	              cancelViewRules,_).
 1738
 1739
 1740
 1741
 1742%************************************************************************
 1743%*
 1744%* predicate: createViewExamplesPopup/1
 1745%*
 1746%* syntax: createViewExamplesPopup(+parent)
 1747%*
 1748%* description: Creates creates facilities for selecting the viewed
 1749%*		examples.	
 1750%*
 1751%************************************************************************
 1752
 1753createViewExamplesPopup(Parent) :-
 1754	
 1755	xmCreateBulletinBoardDialog(Parent,'ViewExamples',
 1756	 [],ViewExamplesDialog),
 1757	xtAddCallback(Parent,xmNactivateCallback,
 1758	              popupViewExamples,_),
 1759
 1760	xmCreateFrame(ViewExamplesDialog,'ViewExamplesFrame',
 1761	  [],ViewExamplesFrame),
 1762	xtManageChild(ViewExamplesFrame),
 1763
 1764	xmCreateRowColumn(ViewExamplesFrame,viewExamplesColumn,
 1765	  [xmNorientation(xmVERTICAL),xmNpacking(xmPACK_TIGHT)],
 1766	  ViewExamplesColumn),
 1767	xtManageChild(ViewExamplesColumn),
 1768
 1769	proxtGetDefaultCharset(DCharset),
 1770	proxtStringToCharPtr('View examples:',TitleCP),
 1771	xmStringCreate(TitleCP,DCharset,TitleStr),
 1772	xmCreateLabelGadget(ViewExamplesColumn,title,
 1773	  [xmNlabelType(xmSTRING),xmNlabelString(TitleStr)],
 1774	  TitleLabel),
 1775	xtManageChild(TitleLabel),
 1776
 1777	xmCreateFrame(ViewExamplesColumn,'ViewClauseHeadFrame',
 1778	  [],ViewClauseHeadFrame),
 1779	xtManageChild(ViewClauseHeadFrame),
 1780
 1781	xmCreateRowColumn(ViewClauseHeadFrame,clauseHeadrow,
 1782	  [xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 1783	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 1784	  ClauseHeadRow),
 1785	xtManageChild(ClauseHeadRow),
 1786
 1787	xmCreateRowColumn(ClauseHeadRow,exCHColumn,
 1788	  [xmNorientation(xmVERTICAL),xmNpacking(xmPACK_TIGHT)],
 1789	  ExCHColumn),
 1790	xtManageChild(ExCHColumn),
 1791
 1792	xmCreateRowColumn(ClauseHeadRow,viewCHColumn,
 1793	  [xmNorientation(xmVERTICAL),xmNpacking(xmPACK_TIGHT)],
 1794	  ViewCHColumn),
 1795	xtManageChild(ViewCHColumn),
 1796
 1797	proxtStringToCharPtr('existing clause heads',ExCHCP),
 1798	xmStringCreate(ExCHCP,DCharset,ExCHStr),
 1799	xmCreateLabelGadget(ExCHColumn,subtitle,
 1800	  [xmNlabelType(xmSTRING),xmNlabelString(ExCHStr)],
 1801	  ExCHLabel),
 1802	xtManageChild(ExCHLabel),
 1803	
 1804	proxtStringToCharPtr('viewed clause heads',ViewCHCP),
 1805	xmStringCreate(ViewCHCP,DCharset,ViewCHStr),
 1806	xmCreateLabelGadget(ViewCHColumn,subtitle,
 1807	  [xmNlabelType(xmSTRING),xmNlabelString(ViewCHStr)],
 1808	  ViewCHLabel),
 1809	xtManageChild(ViewCHLabel),
 1810
 1811	xmCreateScrolledWindow(ExCHColumn,existingCHSW,
 1812	  [xmNheight(150),xmNwidth(140),
 1813	   xmNlistSizePolicy(xmCONSTANT),
 1814	   xmNscrollBarDisplayPolicy(xmSTATIC),
 1815	   xmNscrollingPolicy(xmAUTOMATIC)],
 1816	  ExCHSW),
 1817	xtManageChild(ExCHSW),
 1818	xmCreateRowColumn(ExCHSW,exCHRC,
 1819	  [xmNadjustLast(false),
 1820	   xmNorientation(xmVERTICAL),
 1821	   xmNpacking(xmPACK_TIGHT),
 1822	   xmNrowColumnType(xmWORK_AREA)],
 1823	  ExCHRC),
 1824	xtGetValues(ExCHRC,[xmNbackground(ExCHB)]),
 1825	xtGetValues(ExCHSW,[xmNclipWindow(ExCHCW)]),
 1826	xtSetValues(ExCHCW,[xmNbackground(ExCHB)]),
 1827	xtManageChild(ExCHRC),
 1828
 1829	xmCreateScrolledWindow(ViewCHColumn,viewedCHSW,
 1830	  [xmNheight(150),xmNwidth(140),
 1831	   xmNlistSizePolicy(xmCONSTANT),
 1832	   xmNscrollBarDisplayPolicy(xmSTATIC),
 1833	   xmNscrollingPolicy(xmAUTOMATIC)],
 1834	  ViewCHSW),
 1835	xtManageChild(ViewCHSW),
 1836	xmCreateRowColumn(ViewCHSW,viewCHRC,
 1837	  [xmNadjustLast(false),
 1838	   xmNorientation(xmVERTICAL),
 1839	   xmNpacking(xmPACK_TIGHT),
 1840	   xmNrowColumnType(xmWORK_AREA)],
 1841	  ViewCHRC),
 1842	xtGetValues(ViewCHRC,[xmNbackground(ViewCHB)]),
 1843	xtGetValues(ViewCHSW,[xmNclipWindow(ViewCHCW)]),
 1844	xtSetValues(ViewCHCW,[xmNbackground(ViewCHB)]),
 1845	xtManageChild(ViewCHRC),
 1846
 1847	xmCreateRowColumn(ViewExamplesColumn,minMaxRow,
 1848	  [xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 1849	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 1850	  MinMaxRow),
 1851	xtManageChild(MinMaxRow),
 1852
 1853	proxtStringToCharPtr( 'Min: ', MinLabelChrPtr),
 1854	xmStringCreate(MinLabelChrPtr,DCharset,MinLabelStr),
 1855	xmCreateLabelGadget(MinMaxRow,minLabel,
 1856	[xmNlabelType(xmSTRING),xmNlabelString(MinLabelStr)],
 1857	MinLabel),
 1858	xtManageChild(MinLabel),
 1859
 1860	xmCreateRowColumn(MinMaxRow,'Min',
 1861	[xmNadjustLast(true), xmNmarginHeight(0),
 1862	xmNorientation(xmHORIZONTAL),
 1863	xmNpacking(xmPACK_TIGHT)],
 1864	MinRow),	
 1865	xtManageChild(MinRow),
 1866
 1867	xmCreatePushButton(MinRow,'<',
 1868	[],Lower),
 1869	xtManageChild(Lower),
 1870
 1871	xmCreateText(MinRow,argumentText,
 1872	[xmNeditable(true),xmNeditMode(xmSINGLE_LINE_EDIT),
 1873	xmNwidth(30),
 1874	xmNautoShowCursorPosition(true)],MinText),
 1875	proxtStringToCharPtr('1',MinChrPtr),
 1876	xmTextSetString(MinText,MinChrPtr),
 1877	xtManageChild(MinText),
 1878	recordz(examples,viewMin(MinText),_),
 1879
 1880	xtAddCallback(Lower,xmNactivateCallback,lowerMin,MinText),
 1881	xmCreatePushButton(MinRow,'>',
 1882	[],Raise),
 1883	xtManageChild(Raise),
 1884	xtAddCallback(Raise,xmNactivateCallback,raiseMin,MinText),
 1885
 1886	proxtStringToCharPtr( 'Max: ', MaxLabelChrPtr),
 1887	xmStringCreate(MaxLabelChrPtr,DCharset,MaxLabelStr),
 1888	xmCreateLabelGadget(MinMaxRow,maxLabel,
 1889	[xmNlabelType(xmSTRING),xmNlabelString(MaxLabelStr)],
 1890	MaxLabel),
 1891	xtManageChild(MaxLabel),
 1892
 1893	xmCreateRowColumn(MinMaxRow,'Max',
 1894	[xmNadjustLast(true), xmNmarginHeight(0),
 1895	xmNorientation(xmHORIZONTAL),
 1896	xmNpacking(xmPACK_TIGHT)],
 1897	MaxRow),	
 1898	xtManageChild(MaxRow),
 1899
 1900	xmCreatePushButton(MaxRow,'<',
 1901	[],LowerMax),
 1902	xtManageChild(LowerMax),
 1903
 1904	xmCreateText(MaxRow,argumentText,
 1905	[xmNeditable(true),xmNeditMode(xmSINGLE_LINE_EDIT),
 1906	xmNwidth(30),
 1907	xmNautoShowCursorPosition(true)],MaxText),
 1908	proxtStringToCharPtr('100',MaxChrPtr),
 1909	xmTextSetString(MaxText,MaxChrPtr),
 1910	xtManageChild(MaxText),
 1911	recordz(examples,viewMax(MaxText),_),
 1912
 1913	xtAddCallback(LowerMax,xmNactivateCallback,lowerMax,MaxText),
 1914	xmCreatePushButton(MaxRow,'>',
 1915	[],RaiseMax),
 1916	xtManageChild(RaiseMax),
 1917	xtAddCallback(RaiseMax,xmNactivateCallback,raiseMax,MaxText),
 1918
 1919
 1920	recordz(examples,view(all),_),
 1921	recordz(examples,view(clause_heads,[]),_),
 1922	recordz(examples,view(dialog,ViewExamplesDialog),_),
 1923	recordz(examples,view(exCHRC,ExCHRC),_),
 1924	recordz(examples,view(viewCHRC,ViewCHRC),_),
 1925
 1926	xmCreateRowColumn(ViewExamplesColumn,buttonrow,
 1927	  [xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 1928	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 1929	  ButtonRow),
 1930	xtManageChild(ButtonRow),
 1931
 1932	xmCreatePushButton(ButtonRow,'View',
 1933	  [],View),
 1934	xtManageChild(View),
 1935	xtAddCallback(View,xmNactivateCallback,
 1936	      viewExamples,_),
 1937
 1938	xmCreatePushButton(ButtonRow,'View All',
 1939	  [],ViewAll),
 1940	xtManageChild(ViewAll),
 1941	xtAddCallback(ViewAll,xmNactivateCallback,
 1942	      viewAllExamples,_),
 1943
 1944	xmCreatePushButton(ButtonRow,'Cancel',
 1945	  [],Cancel),
 1946	xtManageChild(Cancel),
 1947	xtAddCallback(Cancel,xmNactivateCallback,
 1948	              cancelViewExamples,_).
 1949
 1950
 1951%************************************************************************
 1952%*
 1953%* predicate: changeSelectedLabels/1 		callback procedure
 1954%*
 1955%* syntax: changeSelectedLabels(_Widget,+[LabelChangeDialog,LabelText],_CallData)
 1956%*
 1957%* args:       _Widget				calling widget
 1958%*	       +[LabelChangeDialog,LabelText]	widgets		
 1959%*	       _CallData			event	
 1960%*
 1961%* description: Removes the LabelChange Dialog from the display, and
 1962%*		 changes the Label of all selected rules.	
 1963%*
 1964%************************************************************************
 1965
 1966changeSelectedLabels(_Widget,[LabelChangeDialog,LabelText],_CallData) :-
 1967	xtUnmanageChild(LabelChangeDialog),
 1968	xmTextGetString(LabelText,LabelCP),
 1969	proxtCharPtrToString(LabelCP,LabelAS),
 1970	setSelectedLabels(LabelAS).
 1971
 1972
 1973%************************************************************************
 1974%*
 1975%* predicate: setSelectedLabels/1
 1976%*
 1977%* syntax: setSelectedLabels(+Label)
 1978%*
 1979%* args: +Label			new labelname
 1980%*
 1981%* description: Sets the label of all selected rules to Label.	
 1982%*
 1983%************************************************************************
 1984
 1985setSelectedLabels(Label) :-
 1986	  recorded(current,clause(Id,Widget,selected),Ref),
 1987	  erase(Ref),
 1988	  get_clause(Id,H,B,CL,_),
 1989	  delete_clause(Id),
 1990	  store_clause(_,CL,Label,Id),
 1991	  setSelectedLabels(Label),
 1992	  recorda(current,clause(Id,Widget,selected),_),
 1993	  addRuleItem(Id,H,B,CL,Label),
 1994          updateEvaluationLabel.
 1995setSelectedLabels(_) :- !.
 1996
 1997
 1998%************************************************************************
 1999%*
 2000%* predicate: cancelLabelChange/3	callback procedure
 2001%*
 2002%* syntax: cancelLabelChange(_Widget,+LabelChangeDialog)
 2003%*
 2004%* args:       _Widget			calling widget
 2005%*	       +LabelChangeDialog	widget		
 2006%*	       _CallData		event	
 2007%*
 2008%* description: Removes the LabelChangeDialog from the display.
 2009%*
 2010%************************************************************************
 2011
 2012cancelLabelChange(_Widget,LabelChangeDialog,_CallData) :-
 2013	xtUnmanageChild(LabelChangeDialog).
 2014
 2015
 2016%************************************************************************
 2017%*
 2018%* predicate: createClassChangeButtons/1
 2019%*
 2020%* syntax: createClassChangeButtons(+Parent)
 2021%*
 2022%* description: Creates three buttons '+', '-', '?' for changing the	
 2023%*		class of the selected examples.	
 2024%*
 2025%************************************************************************
 2026
 2027createClassChangeButtons(Parent) :-
 2028	xmCreateRowColumn(Parent,'Class Change',
 2029	[xmNadjustLast(true),xmNmarginHeight(0),
 2030	xmNorientation(xmHORIZONTAL),
 2031	xmNpacking(xmPACK_COLUMN),
 2032	xmNrowColumnType(xmWORK_AREA)],
 2033	ClassChangeRow),	
 2034	xtManageChild(ClassChangeRow),
 2035
 2036	xmCreatePushButton(ClassChangeRow,'+',
 2037	[],Positive),
 2038	xtManageChild(Positive),
 2039	xtAddCallback(Positive,xmNactivateCallback,
 2040	classChangeSelected,'+'),
 2041
 2042	xmCreatePushButton(ClassChangeRow,'-',
 2043	[],Negative),
 2044	xtManageChild(Negative),
 2045	xtAddCallback(Negative,xmNactivateCallback,
 2046	classChangeSelected,'-'),
 2047
 2048	xmCreatePushButton(ClassChangeRow,'?',
 2049	[],Quest),
 2050	xtManageChild(Quest),
 2051	xtAddCallback(Quest,xmNactivateCallback,
 2052	classChangeSelected,'?').
 2053
 2054
 2055%************************************************************************
 2056%*
 2057%* predicate: classChangeSelected/3		Callback procedure
 2058%*
 2059%* syntax: classChangeSelected(_Widget,+Classification,_CallData)
 2060%*
 2061%* args:       _Widget			calling widget	
 2062%*	       +Classification		'+' or '-' or '?'
 2063%*	       _CallData		event	
 2064%*
 2065%* description: Sets the classification of the selected examples to 
 2066%*		 Classification.
 2067%*
 2068%************************************************************************
 2069
 2070classChangeSelected(_Widget,Classification,_CallData) :-
 2071	recorded(current,example(Id,Label,selected),Ref),
 2072	erase(Ref),
 2073	get_example(Id,Fact,_),
 2074	delete_example(Id),
 2075	store_ex(Fact,Classification,Id),
 2076	classChangeSelected(_Widget,Classification,_CallData),
 2077	recorda(current,example(Id,Label,selected),_),
 2078	addExampleItem(Id,Fact,Classification),
 2079        updateEvaluationLabel.
 2080classChangeSelected(_,_,_) :- !.
 2081
 2082
 2083%************************************************************************
 2084%*
 2085%* predicate: createArgumentArea/1
 2086%*
 2087%* syntax: createArgumentArea(+Parent)
 2088%*
 2089%* description: Creates the argument area with five fields for arguments,
 2090%*		one toggle button for copying rule ids into argument	 
 2091%*		fields when selecting or deselecting rules or examples, 
 2092%*		and a clear push button.
 2093%*
 2094%************************************************************************
 2095
 2096createArgumentArea(Parent) :-
 2097	xmCreateFrame(Parent,'Arguments',
 2098	[],ArgumentFrame),
 2099	xtManageChild(ArgumentFrame),
 2100
 2101	xmCreateRowColumn(ArgumentFrame,'Arguments',
 2102	[xmNwidth(300),xmNadjustLast(true),
 2103	xmNorientation(xmVERTICAL),
 2104	xmNpacking(xmPACK_TIGHT),
 2105	xmNrowColumnType(xmWORK_AREA)],
 2106	ArgumentColumn),	
 2107	xtManageChild(ArgumentColumn),
 2108
 2109	proxtStringToCharPtr(
 2110	'Arguments',
 2111	ArgumentChrPtr),
 2112	proxtGetDefaultCharset(DCharset),
 2113	xmStringCreate(ArgumentChrPtr,DCharset,ArgumentStr),
 2114	xmCreateLabelGadget(ArgumentColumn,argumentLabel,
 2115	[xmNlabelType(xmSTRING),xmNlabelString(ArgumentStr)],
 2116	ArgumentLabel),
 2117	xtManageChild(ArgumentLabel),
 2118
 2119	xmCreateRowColumn(ArgumentColumn,kommandoRC,
 2120	[xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 2121	xmNnumColumns(2)],
 2122	ArgumentRow),
 2123	xtManageChild(ArgumentRow),
 2124
 2125	createArguments(ArgumentRow,12),
 2126
 2127	xmCreateRowColumn(ArgumentColumn,buttonrow,
 2128	[xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_TIGHT),
 2129	xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 2130	ButtonRow),
 2131	xtManageChild(ButtonRow),
 2132
 2133	xmCreateToggleButton(ButtonRow,'Get Id       ',
 2134	[],GetId),
 2135	xtManageChild(GetId),
 2136	recordz(state,getId(GetId),_),
 2137
 2138	xmCreatePushButton(ButtonRow,'Clear',
 2139	[],Clear),
 2140	xtManageChild(Clear),
 2141	xtAddCallback(Clear,xmNactivateCallback,clearArguments,12),
 2142
 2143	proxtStringToCharPtr( '         Depth: ', DepthChrPtr),
 2144	xmStringCreate(DepthChrPtr,DCharset,DepthStr),
 2145	xmCreateLabelGadget(ButtonRow,depthLabel,
 2146	[xmNlabelType(xmSTRING),xmNlabelString(DepthStr)],
 2147	DepthLabel),
 2148	xtManageChild(DepthLabel),
 2149
 2150	xmCreateRowColumn(ButtonRow,'Depth',
 2151	[xmNadjustLast(true), xmNmarginHeight(0),
 2152	xmNorientation(xmHORIZONTAL),
 2153	xmNpacking(xmPACK_TIGHT)],
 2154	DepthRow),	
 2155	xtManageChild(DepthRow),
 2156
 2157	xmCreatePushButton(DepthRow,'<',
 2158	[],Lower),
 2159	xtManageChild(Lower),
 2160
 2161	xmCreateText(DepthRow,argumentText,
 2162	[xmNeditable(true),xmNeditMode(xmSINGLE_LINE_EDIT),
 2163	xmNwidth(30),
 2164	xmNautoShowCursorPosition(true)],DText),
 2165	proxtStringToCharPtr('5',DChrPtr),
 2166	xmTextSetString(DText,DChrPtr),
 2167	xtManageChild(DText),
 2168	recordz(state,argumentWidget(depth,DText),_),
 2169
 2170	xtAddCallback(Lower,xmNactivateCallback,lowerDepth,DText),
 2171	xmCreatePushButton(DepthRow,'>',
 2172	[],Raise),
 2173	xtManageChild(Raise),
 2174	xtAddCallback(Raise,xmNactivateCallback,raiseDepth,DText).
 2175
 2176
 2177%************************************************************************
 2178%*
 2179%* predicate: createArguments/2
 2180%*
 2181%* syntax: createArguments(+Parent,+Count)
 2182%*
 2183%* args:       +Parent		parent widget	
 2184%*	       +Count		number of argument fields to create	
 2185%*
 2186%* description: Creates Count text widgets for the arguments.
 2187%*
 2188%************************************************************************
 2189
 2190createArguments(_,0) :- !.
 2191createArguments(Parent,Count) :-
 2192	C1 is Count - 1,
 2193	createArguments(Parent,C1),
 2194
 2195	xmCreateText(Parent,argumentText,
 2196	[xmNeditable(true),xmNeditMode(xmSINGLE_LINE_EDIT),
 2197	xmNwidth(50),
 2198	xmNautoShowCursorPosition(true)],ArgumentText),
 2199	xtManageChild(ArgumentText),
 2200	recordz(state,argumentWidget(Count,ArgumentText),_).
 2201
 2202
 2203%************************************************************************
 2204%*
 2205%* predicate: clearArguments/3		callback procedure
 2206%*
 2207%* syntax: clearArguments(_Widget,+Count,_CallData)
 2208%*
 2209%* args:       _Widget		calling widget	
 2210%*	       Count		Number of arguments to clear (5)	
 2211%*	       _CallData	
 2212%*
 2213%* description: Clears Count argument text widgets
 2214%*
 2215%************************************************************************
 2216
 2217clearArguments(_Widget,0,_CallData).
 2218clearArguments(_Widget,Count,_CallData) :-
 2219	C1 is Count - 1,
 2220	clearArguments(_Widget,C1,_CallData),
 2221	recorded(state,argumentWidget(Count,Text),_),
 2222	proxtStringToCharPtr('',EmptyChrPtr),
 2223	xmTextSetString(Text,EmptyChrPtr).
 2224
 2225
 2226%************************************************************************
 2227%*
 2228%* predicate: lowerDepth/3		callback procedure	
 2229%*
 2230%* syntax:
 2231%*
 2232%* args:       _Widget		calling widget	
 2233%*	       +DepthText	TextWidget of Depth	
 2234%*	       _CallData	
 2235%*
 2236%* description: 1 decrements xmDepth.
 2237%*
 2238%* see also: raiseDepth	
 2239%*
 2240%************************************************************************
 2241
 2242lowerDepth(_Widget,DepthText,_CallData) :-
 2243	xmTextGetString(DepthText,OldDepthCP),
 2244	proxtCharPtrToString(OldDepthCP,OldDepthStr),
 2245	atom_chars(OldDepthStr,OldDepthC),
 2246	number_chars(OldDepth,OldDepthC),
 2247	(OldDepth = 0 -> NewDepth is 100|
 2248    otherwise -> NewDepth is OldDepth - 1),
 2249	number_chars(NewDepth,NewDepthC),
 2250	atom_chars(NewDepthStr,NewDepthC),
 2251	proxtStringToCharPtr(NewDepthStr,NewDepthCP),
 2252	xmTextSetString(DepthText,NewDepthCP).
 2253
 2254
 2255%************************************************************************
 2256%*
 2257%* predicate: lowerID/3		callback procedure
 2258%*
 2259%* syntax:
 2260%*
 2261%* args:       _Widget		calling widget	
 2262%*	       +DepthText	TextWidget containing ID
 2263%*	       _CallData	
 2264%*
 2265%* description:  1 decrements ID. 
 2266%*
 2267%* see also:  raiseID
 2268%*
 2269%************************************************************************
 2270
 2271lowerID(_Widget,IDText,_CallData) :-
 2272	xmTextGetString(IDText,OldIDCP),
 2273	proxtCharPtrToString(OldIDCP,OldIDStr),
 2274	atom_chars(OldIDStr,OldIDC),
 2275	number_chars(OldID,OldIDC),
 2276	(OldID = 0 -> NewID is 9999|
 2277    otherwise -> NewID is OldID - 1),
 2278	number_chars(NewID,NewIDC),
 2279	atom_chars(NewIDStr,NewIDC),
 2280	proxtStringToCharPtr(NewIDStr,NewIDCP),
 2281	xmTextSetString(IDText,NewIDCP).
 2282
 2283
 2284%************************************************************************
 2285%*
 2286%* predicate: lowerMin/3		callback procedure
 2287%*
 2288%* syntax:
 2289%*
 2290%* args:       _Widget		calling widget	
 2291%*	       +DepthText	TextWidget of Depth	
 2292%*	       _CallData
 2293%*
 2294%* description: 1 decrements MinId of viewed rules or examples.
 2295%*
 2296%************************************************************************
 2297
 2298lowerMin(_Widget,MinText,_CallData) :-
 2299	(recorded(rules,viewMin(MinText),_) -> KindOfKnowledge = rules|
 2300	 otherwise -> KindOfKnowledge = examples),
 2301	xmTextGetString(MinText,OldMinCP),
 2302	proxtCharPtrToString(OldMinCP,OldMinStr),
 2303	atom_chars(OldMinStr,OldMinC),
 2304	number_chars(OldMin,OldMinC),
 2305	recorded(KindOfKnowledge,viewMax(MaxText),_),
 2306	xmTextGetString(MaxText,MaxCP),
 2307	proxtCharPtrToString(MaxCP,MaxStr),
 2308	atom_chars(MaxStr,MaxC),
 2309	number_chars(Max,MaxC),
 2310
 2311	(OldMin =< 1 -> NewMin is Max|
 2312    otherwise -> NewMin is OldMin - 1),
 2313	number_chars(NewMin,NewMinC),
 2314	atom_chars(NewMinStr,NewMinC),
 2315	proxtStringToCharPtr(NewMinStr,NewMinCP),
 2316	xmTextSetString(MinText,NewMinCP).
 2317
 2318
 2319%************************************************************************
 2320%*
 2321%* predicate: lowerMax/3		callback procedure
 2322%*
 2323%* syntax:
 2324%*
 2325%* args:       _Widget		calling widget
 2326%*	       +DepthText	TextWidget of Depth
 2327%*	       _CallData	
 2328%*
 2329%* description: 1 decrements MaxId of viewed rules or examples.
 2330%*
 2331%************************************************************************
 2332
 2333lowerMax(_Widget,MaxText,_CallData) :-
 2334	(recorded(rules,viewMin(MinText),_) -> KindOfKnowledge = rules|
 2335	 otherwise -> KindOfKnowledge = examples),
 2336	xmTextGetString(MaxText,OldMaxCP),
 2337	proxtCharPtrToString(OldMaxCP,OldMaxStr),
 2338	atom_chars(OldMaxStr,OldMaxC),
 2339	number_chars(OldMax,OldMaxC),
 2340	recorded(KindOfKnowledge,viewMin(MinText),_),
 2341	xmTextGetString(MinText,MinCP),
 2342	proxtCharPtrToString(MinCP,MinStr),
 2343	atom_chars(MinStr,MinC),
 2344	number_chars(Min,MinC),
 2345
 2346	(OldMax =< Min -> NewMax is 9999|
 2347    otherwise -> NewMax is (OldMax - 1)),
 2348	number_chars(NewMax,NewMaxC),
 2349	atom_chars(NewMaxStr,NewMaxC),
 2350	proxtStringToCharPtr(NewMaxStr,NewMaxCP),
 2351	xmTextSetString(MaxText,NewMaxCP).
 2352
 2353
 2354%************************************************************************
 2355%*
 2356%* predicate: raiseDepth/3		callback procedure	
 2357%*
 2358%* syntax:
 2359%*
 2360%* args:       _Widget		calling widget
 2361%*	       +DepthText	TextWidget of Depth
 2362%*	       _CallData	
 2363%*
 2364%* description: 1 inrements xmDepth.
 2365%*
 2366%************************************************************************
 2367
 2368raiseDepth(_Widget,DepthText,_CallData) :-
 2369	xmTextGetString(DepthText,OldDepthCP),
 2370	proxtCharPtrToString(OldDepthCP,OldDepthStr),
 2371	atom_chars(OldDepthStr,OldDepthC),
 2372	number_chars(OldDepth,OldDepthC),
 2373	(OldDepth = 100 -> NewDepth is 0|
 2374    otherwise -> NewDepth is OldDepth + 1),
 2375	number_chars(NewDepth,NewDepthC),
 2376	atom_chars(NewDepthStr,NewDepthC),
 2377	proxtStringToCharPtr(NewDepthStr,NewDepthCP),
 2378	xmTextSetString(DepthText,NewDepthCP).
 2379
 2380
 2381%************************************************************************
 2382%*
 2383%* predicate: raiseID/3		callback procedure	
 2384%*
 2385%* syntax:
 2386%*
 2387%* args:       _Widget		calling widget
 2388%*	       +DepthText	TextWidget containing ID	
 2389%*	       _CallData	
 2390%*
 2391%* description: 1 increments ID. 
 2392%*
 2393%************************************************************************
 2394
 2395raiseID(_Widget,IDText,_CallData) :-
 2396	xmTextGetString(IDText,OldIDCP),
 2397	proxtCharPtrToString(OldIDCP,OldIDStr),
 2398	atom_chars(OldIDStr,OldIDC),
 2399	number_chars(OldID,OldIDC),
 2400	(OldID = 9999 -> NewID is 0|
 2401    otherwise -> NewID is OldID + 1),
 2402	number_chars(NewID,NewIDC),
 2403	atom_chars(NewIDStr,NewIDC),
 2404	proxtStringToCharPtr(NewIDStr,NewIDCP),
 2405	xmTextSetString(IDText,NewIDCP).
 2406
 2407%************************************************************************
 2408%*
 2409%* predicate: raiseMin/3		callback procedure	
 2410%*
 2411%* syntax:
 2412%*
 2413%* args:       _Widget		calling widget
 2414%*	       +DepthText	TextWidget of Depth	
 2415%*	       _CallData	
 2416%*
 2417%* description: 1 increments MinId of viewed rules or examples.
 2418%*
 2419%************************************************************************
 2420
 2421raiseMin(_Widget,MinText,_CallData) :-
 2422	(recorded(rules,viewMin(MinText),_) -> KindOfKnowledge = rules|
 2423	 otherwise -> KindOfKnowledge = examples),
 2424	xmTextGetString(MinText,OldMinCP),
 2425	proxtCharPtrToString(OldMinCP,OldMinStr),
 2426	atom_chars(OldMinStr,OldMinC),
 2427	number_chars(OldMin,OldMinC),
 2428	recorded(KindOfKnowledge,viewMax(MaxText),_),
 2429	xmTextGetString(MaxText,MaxCP),
 2430	proxtCharPtrToString(MaxCP,MaxStr),
 2431	atom_chars(MaxStr,MaxC),
 2432	number_chars(Max,MaxC),
 2433
 2434	(OldMin >= Max -> NewMin is 1|
 2435    otherwise -> NewMin is (OldMin + 1)),
 2436	number_chars(NewMin,NewMinC),
 2437	atom_chars(NewMinStr,NewMinC),
 2438	proxtStringToCharPtr(NewMinStr,NewMinCP),
 2439	xmTextSetString(MinText,NewMinCP).
 2440
 2441
 2442
 2443%************************************************************************
 2444%*
 2445%* predicate: raiseMax/3		callback procedure	
 2446%*
 2447%* syntax:
 2448%*
 2449%* args:       _Widget		calling widget
 2450%*	       +DepthText	TextWidget of Depth	
 2451%*	       _CallData	
 2452%*
 2453%* description: 1 increments MaxId of viewed rules or examples.
 2454%*
 2455%************************************************************************
 2456
 2457raiseMax(_Widget,MaxText,_CallData) :-
 2458	(recorded(rules,viewMin(MinText),_) -> KindOfKnowledge = rules|
 2459	 otherwise -> KindOfKnowledge = examples),
 2460	xmTextGetString(MaxText,OldMaxCP),
 2461	proxtCharPtrToString(OldMaxCP,OldMaxStr),
 2462	atom_chars(OldMaxStr,OldMaxC),
 2463	number_chars(OldMax,OldMaxC),
 2464	recorded(KindOfKnowledge,viewMin(MinText),_),
 2465	xmTextGetString(MinText,MinCP),
 2466	proxtCharPtrToString(MinCP,MinStr),
 2467	atom_chars(MinStr,MinC),
 2468	number_chars(Min,MinC),
 2469
 2470	(OldMax >= 9999 -> NewMax is Min|
 2471    otherwise -> NewMax is (OldMax + 1)),
 2472	number_chars(NewMax,NewMaxC),
 2473	atom_chars(NewMaxStr,NewMaxC),
 2474	proxtStringToCharPtr(NewMaxStr,NewMaxCP),
 2475	xmTextSetString(MaxText,NewMaxCP).
 2476
 2477
 2478%************************************************************************
 2479%*
 2480%* predicate: copyId/2
 2481%*
 2482%* syntax: copyId(+Id,+Count)
 2483%*
 2484%* args:       +Id		Id of rule or example to copy
 2485%*	       +Count		First argument to proove if empty	
 2486%*
 2487%*
 2488%* description: Copies the specified rule or example to the textwidget
 2489%*		of the count argument.
 2490%*
 2491%************************************************************************
 2492
 2493copyId(_,13) :- !.
 2494copyId(Id,Count) :-
 2495	recorded(state,argumentWidget(Count,Text),_),
 2496	xmTextGetLastPosition(Text,Length),
 2497	Length = 0, !,
 2498	number_chars(Id,IdChars),
 2499	atom_chars(IdStr,IdChars),
 2500	proxtStringToCharPtr(IdStr,IdCharPtr),
 2501	xmTextSetString(Text,IdCharPtr).
 2502copyId(Id,Count) :-
 2503	C1 is Count + 1,
 2504	copyId(Id,C1).
 2505
 2506
 2507%************************************************************************
 2508%*
 2509%* predicate: createCommandArea/1
 2510%*
 2511%* syntax: createCommandArea(+Parent)
 2512%*
 2513%* description: Creates the area for direct command input.	
 2514%*
 2515%************************************************************************
 2516
 2517createCommandArea(Parent) :-
 2518	xmCreateFrame(Parent,'Controll',
 2519	[],ControllFrame),
 2520	xtManageChild(ControllFrame),
 2521
 2522	xmCreateRowColumn(ControllFrame,controll,
 2523	[xmNwidth(300),xmNadjustLast(true),
 2524	xmNorientation(xmVERTICAL),
 2525	xmNpacking(xmPACK_TIGHT),
 2526	xmNrowColumnType(xmWORK_AREA)],
 2527	ControllRowColumn),	
 2528	xtManageChild(ControllRowColumn),
 2529
 2530	xmCreateRowColumn(ControllRowColumn,kommandoRC,
 2531	[xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN)],
 2532	KommandoRowColumn),
 2533	xtManageChild(KommandoRowColumn),
 2534
 2535	proxtStringToCharPtr('Comand:',KommandoChrPtr),
 2536	proxtGetDefaultCharset(DCharset),
 2537	xmStringCreate(KommandoChrPtr,DCharset,KommandoStr),
 2538	xmCreateLabelGadget(KommandoRowColumn,kommandoLabel,
 2539	[xmNlabelType(xmSTRING),xmNlabelString(KommandoStr)],
 2540	Klabel),
 2541	xtManageChild(Klabel),
 2542
 2543	proxtStringToCharPtr('          Input',StatusCP),
 2544	xmStringCreate(StatusCP,DCharset,StatusStr),
 2545	xmCreateLabelGadget(KommandoRowColumn,kommandoStatus,
 2546	[xmNlabelType(xmSTRING),xmNlabelString(StatusStr)],
 2547	KStatus),
 2548	xtManageChild(KStatus),
 2549	
 2550	xmCreateText(ControllRowColumn,kommandotext,
 2551	[xmNeditable(true), xmNeditMode(xmSINGLE_LINE_EDIT),
 2552	xmNwidth(290),
 2553	xmNautoShowCursorPosition(true)],Ktext),
 2554	xtManageChild(Ktext),
 2555	xtAddActions([action(ok,doKommando,[Ktext,KStatus])]),
 2556	proxtStringToCharPtr('<Key>Return: ok()',TranslationString),
 2557	xtParseTranslationTable(TranslationString,TranslationTable),
 2558	xtOverrideTranslations(Ktext,TranslationTable),
 2559
 2560	xmCreateRowColumn(ControllRowColumn,buttonrow,
 2561	[xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 2562	xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 2563	ButtonRow),
 2564	xtManageChild(ButtonRow),
 2565
 2566	xmCreatePushButton(ButtonRow,'OK!',
 2567	[],OK),
 2568	xtManageChild(OK),
 2569
 2570	xmCreatePushButton(ButtonRow,'Clear',
 2571	[],Clear),
 2572	xtManageChild(Clear),
 2573
 2574	xmCreatePushButton(ButtonRow,'Quit X-Miles',
 2575	[],Beenden),
 2576	createYesNoPopup(Beenden,_YesNoPopup,beenden,_),
 2577	xtManageChild(Beenden),
 2578
 2579	xtSetValues(ControllRowColumn,[xmNdefaultButton(OK)]),
 2580	xtAddCallback(OK,xmNactivateCallback,doKommando,[Ktext,KStatus]),
 2581	xtAddCallback(Clear,xmNactivateCallback,doEmptyKommando,Ktext).
 2582
 2583
 2584%************************************************************************
 2585%*
 2586%* predicate: createFunctionArea/1
 2587%*
 2588%* syntax: createFunctionArea(+Parent)
 2589%*
 2590%* description: Creates the area for the pulldown menus for calling the
 2591%*		learning functions of miles. 
 2592%*
 2593%* see also: file: 'xmiles_functions.pl'	
 2594%*
 2595%************************************************************************
 2596
 2597createFunctionArea(Parent) :-
 2598	xmCreateFrame(Parent,'Functions',
 2599	[],FunctionFrame),
 2600	xtManageChild(FunctionFrame),
 2601
 2602	xmCreateRowColumn(FunctionFrame,'Function',
 2603	[xmNwidth(300),xmNadjustLast(true),
 2604	xmNorientation(xmVERTICAL),
 2605	xmNpacking(xmPACK_TIGHT),
 2606	xmNrowColumnType(xmWORK_AREA)],
 2607	FunctionColumn),	
 2608	xtManageChild(FunctionColumn),
 2609
 2610	proxtStringToCharPtr('Learning Operators',FunctionChrPtr),
 2611	proxtGetDefaultCharset(DCharset),
 2612	xmStringCreate(FunctionChrPtr,DCharset,FunctionStr),
 2613	xmCreateLabelGadget(FunctionColumn,functionLabel,
 2614	[xmNlabelType(xmSTRING),xmNlabelString(FunctionStr)],
 2615	FunctionLabel),
 2616	xtManageChild(FunctionLabel),
 2617
 2618	xmCreateRowColumn(FunctionColumn,functionRC,
 2619	[xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 2620	xmNnumColumns(2),
 2621	xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 2622	FunctionRowColumn),
 2623	xtManageChild(FunctionRowColumn),
 2624
 2625	groups(ListOfGroups),
 2626	createFunctionGroups(FunctionRowColumn,ListOfGroups).
 2627
 2628
 2629%************************************************************************
 2630%*
 2631%* predicate: createFunctionGroups/2
 2632%*
 2633%* syntax: createFunctionGroups(+Parent,+[Groupname|ListOfGroups])
 2634%*
 2635%* args:       +Parent				parent widget
 2636%*	       +[Groupname|ListOfGroups]	list of groupnames
 2637%*
 2638%* description: Creates one pull down menu for every group of learning
 2639%*		functions.
 2640%*
 2641%************************************************************************
 2642
 2643createFunctionGroups(_,[]).
 2644createFunctionGroups(Parent,[Groupname|ListOfGroups]) :-
 2645	xmCreatePushButton(Parent,Groupname,
 2646	  [],ButtonWidget),
 2647	xtManageChild(ButtonWidget),
 2648
 2649	xmCreatePopupMenu(ButtonWidget,'Learning functions',
 2650	  [xmNorientation(xmVERTICAL),
 2651	   xmNpacking(xmPACK_COLUMN),
 2652	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)], 
 2653	  LearningFunctions),
 2654
 2655	xtAddEventHandler(LearningFunctions,[buttonReleaseMask],false,
 2656	                  functionsPopdown,_),
 2657	xtAddCallback(ButtonWidget,xmNactivateCallback,
 2658	              popupFunctions,LearningFunctions),
 2659
 2660	groupdef(Groupname,ListOfButtons),
 2661	createFunctionButtons(LearningFunctions,ListOfButtons),
 2662	createFunctionGroups(Parent,ListOfGroups).
 2663
 2664
 2665%************************************************************************
 2666%*
 2667%* predicate: createFunctionButtons/2
 2668%*
 2669%* syntax: createFunctionButtons(+Parent,+[Button|ListOfButtons])
 2670%*
 2671%* args:       +Parent			parent widget
 2672%*	       +[Button|ListOfButtons]	list of buttonnames	
 2673%*
 2674%* description: Creates one pushbutton for every button name in the second
 2675%*		argument.	
 2676%*
 2677%************************************************************************
 2678
 2679createFunctionButtons(_,[]).
 2680createFunctionButtons(Parent,[Button|ListOfButtons]) :-
 2681	xmCreatePushButton(Parent,Button,
 2682	  [],ButtonWidget),
 2683	xtManageChild(ButtonWidget),
 2684	xtAddCallback(ButtonWidget,xmNactivateCallback,
 2685	              callFunction,Button),
 2686	createFunctionButtons(Parent,ListOfButtons).
 2687
 2688
 2689%************************************************************************
 2690%*
 2691%* predicate: callFunction/3		callback procedure	
 2692%*
 2693%* syntax:
 2694%*
 2695%* args:       _Widget		calling widget	
 2696%*	       +Buttonname	determines the function	
 2697%*	       _CallData	event
 2698%*
 2699%* description: calls the function defined for the specified button
 2700%*		in the file xmiles_functions.pl	
 2701%*
 2702%************************************************************************
 2703
 2704callFunction(_Widget,Buttonname,_CallData) :-
 2705	recorded(learnfuncs,popedup(PopupShell),Ref),
 2706	erase(Ref),
 2707	xtUnmanageChild(PopupShell),
 2708	operatordef(Buttonname,Funcname,InOutPattern,InChecks,XOuts,Refresh),
 2709	writeMessage(':- '),writeMessage(Funcname),
 2710	(InOutPattern=[] -> writelnMessage('.'),
 2711	    Fails=[], Args=[]|
 2712	 otherwise -> writeMessage('('),
 2713	    replaceXmVars(InOutPattern,InChecks,Args,Fails)),
 2714	flushErrorBuffer,
 2715	(Fails=[] ->
 2716	    F =.. [Funcname|Args],
 2717	    ((call(F) -> writelnMessage('% yes'),
 2718	                 outVars(Args,InOutPattern,XOuts),
 2719			 refresh(Refresh))|
 2720	      otherwise -> writelnMessage('% no'))|
 2721	 otherwise -> 
 2722           writelnMessage('% Error occured, function not executed!')),
 2723         updateEvaluationLabel.
 2724
 2725
 2726%************************************************************************
 2727%*
 2728%* predicate: replaceXmVars/3
 2729%*
 2730%* syntax:
 2731%*
 2732%* args:      +[Pat|InOutPattern]	List of argument patterns
 2733%*	       +InChecks		List of checking functions
 2734%*	       -Args			arguments the learning function is
 2735%*					to be called with	
 2736%*
 2737%* description: replaces the InOutPattern through constant values for
 2738%*		input arguments and unbound variables for output arguments
 2739%*
 2740%************************************************************************
 2741
 2742replaceXmVars([],_,[],[]):- !, writelnMessage(').').
 2743replaceXmVars([Pat|InOutPattern],InChecks,Args,Fails) :-
 2744	(atom(Pat) -> atom_chars(Pat,PatC)|
 2745	 otherwise -> PatC = "constant"),
 2746	append("xmarg",[M1],Argstr),
 2747	append("xmarg",[M3,M4],Argstr2),
 2748	append("xmopt",[M2],Optstr),
 2749	append("xmopt",[M5,M6],Optstr2),
 2750	append("xmout",[_],Outstr),
 2751	(PatC = "xmdepth" -> recorded(state,argumentWidget(depth,Text),_),
 2752			  xmTextGetString(Text,ArgCP),
 2753			  proxtCharPtrToString(ArgCP,ArgStr),
 2754			  atom_chars(ArgStr,ArgChars),
 2755			  (number_chars(Value,ArgChars) | Value = ArgStr),
 2756	                  InChecks = [IC|ICs],
 2757			  C =.. [IC,Value],
 2758			  (call(C) -> Fail=[]|
 2759		           Fail=[0]),
 2760			  writeMessage(ArgStr),
 2761			  (InOutPattern=[]|writeMessage(','))|
 2762	 PatC = Argstr -> number_chars(N,[M1]),
 2763	                  recorded(state,argumentWidget(N,Text),_),
 2764			  xmTextGetString(Text,ArgCP),
 2765			  proxtCharPtrToString(ArgCP,ArgStr),
 2766			  atom_chars(ArgStr,ArgChars),
 2767			  (number_chars(Value,ArgChars) | Value = ArgStr),
 2768	                  InChecks = [IC|ICs],
 2769			  C =.. [IC,Value],
 2770			  (call(C) -> Fail=[]|
 2771		           Fail=[N]),
 2772			  writeMessage(ArgStr),
 2773			  (InOutPattern=[]|writeMessage(','))|
 2774	 PatC = Argstr2 -> number_chars(N,[M3,M4]),
 2775	                  recorded(state,argumentWidget(N,Text),_),
 2776			  xmTextGetString(Text,ArgCP),
 2777			  proxtCharPtrToString(ArgCP,ArgStr),
 2778			  atom_chars(ArgStr,ArgChars),
 2779			  (number_chars(Value,ArgChars) | Value = ArgStr),
 2780	                  InChecks = [IC|ICs],
 2781			  C =.. [IC,Value],
 2782			  (call(C) -> Fail=[]|
 2783		           Fail=[N]),
 2784			  writeMessage(ArgStr),
 2785			  (InOutPattern=[]|writeMessage(','))|
 2786	 PatC = "xmoptdepth" -> recorded(state,argumentWidget(depth,Text),_),
 2787			  xmTextGetString(Text,ArgCP),
 2788			  proxtCharPtrToString(ArgCP,ArgStr),
 2789			  atom_chars(ArgStr,ArgChars),
 2790	                  InChecks = [IC|ICs],
 2791			  (ArgChars = [] ->
 2792			    Value = novalue|
 2793			   otherwise ->
 2794			    (number_chars(Value,ArgChars) | Value = ArgStr),
 2795			    C =.. [IC,Value],
 2796			    (call(C) -> Fail=[]|
 2797		             Fail=[0]),
 2798			    writeMessage(ArgStr),
 2799			    (InOutPattern=[]|writeMessage(',')))|
 2800	 PatC = Optstr -> number_chars(N,[M2]),
 2801	                  recorded(state,argumentWidget(N,Text),_),
 2802			  xmTextGetString(Text,ArgCP),
 2803			  proxtCharPtrToString(ArgCP,ArgStr),
 2804			  atom_chars(ArgStr,ArgChars),
 2805	                  InChecks = [IC|ICs],
 2806			  (ArgChars = [] ->
 2807			    Value = novalue|
 2808			   otherwise ->
 2809			    (number_chars(Value,ArgChars) | Value = ArgStr),
 2810			    C =.. [IC,Value],
 2811			    (call(C) -> Fail=[]|
 2812		             Fail=[N]),
 2813			    writeMessage(ArgStr),
 2814			    (InOutPattern=[]|writeMessage(',')))|
 2815	 PatC = Optstr2 -> number_chars(N,[M5,M6]),
 2816	                  recorded(state,argumentWidget(N,Text),_),
 2817			  xmTextGetString(Text,ArgCP),
 2818			  proxtCharPtrToString(ArgCP,ArgStr),
 2819			  atom_chars(ArgStr,ArgChars),
 2820	                  InChecks = [IC|ICs],
 2821			  (ArgChars = [] ->
 2822			    Value = novalue|
 2823			   otherwise ->
 2824			    (number_chars(Value,ArgChars) | Value = ArgStr),
 2825			    C =.. [IC,Value],
 2826			    (call(C) -> Fail=[]|
 2827		             Fail=[N]),
 2828			    writeMessage(ArgStr),
 2829			    (InOutPattern=[]|writeMessage(',')))|
 2830	 PatC = Outstr -> InChecks = ICs,
 2831	                  PatC = [_|P1],
 2832			  append("X",P1,P2),
 2833			  atom_chars(P3,P2),
 2834	                  writeMessage(P3),
 2835			  Fail=[],
 2836			  Value = variable,
 2837			  (InOutPattern=[]|writeMessage(','))|
 2838	 otherwise -> Value = Pat,
 2839	                  InChecks = ICs,
 2840	                  Fail=[],
 2841	                  writeMessage(Pat),	
 2842			  (InOutPattern=[]|writeMessage(','))),!,
 2843	replaceXmVars(InOutPattern,ICs,Values,F),
 2844	append(Fail,F,Fails),
 2845	(Value = novalue -> Args = Values|
 2846	 Value = variable -> Args = [_Var|Values]|
 2847	 otherwise -> Args = [Value|Values]).
 2848
 2849
 2850%************************************************************************
 2851%*
 2852%* predicate: outVars/3
 2853%*
 2854%* syntax: 
 2855%*
 2856%* args:       +[Arg1|Args]		arguments returned by a learnin f.
 2857%*	       +[Pat|InOutPattern]	list of InOutPatterns	
 2858%*	       +XOuts			list of output functions
 2859%*
 2860%* description: Calls the spezified output functions with the values
 2861%*		returned by a learning function.	
 2862%*
 2863%************************************************************************
 2864
 2865outVars(_,_,[]).
 2866outVars([Arg1|Args],[Pat|InOutPattern],XOuts) :-
 2867	atom_chars(Pat,PatC),
 2868	append("xmout",[_],Outstr),
 2869	(PatC = Outstr -> XOuts = [XO|XOs],
 2870			  C =.. [XO,Arg1],
 2871			  call(C)|
 2872	 otherwise -> XOuts = XOs),!,
 2873	outVars(Args,InOutPattern,XOs).
 2874
 2875
 2876%************************************************************************
 2877%*
 2878%* predicate: refresh/1
 2879%*
 2880%* syntax:
 2881%*
 2882%* args: +[KindOfKnowledge|R]	
 2883%*
 2884%* description: Refreshes the visual part of the knowledge base of the
 2885%*		specified kinds of knowledge.
 2886%*
 2887%************************************************************************
 2888
 2889refresh([]).
 2890refresh([KindOfKnowledge|R]) :- 
 2891	refreshKnowledgeList(_,KindOfKnowledge,_),
 2892	refresh(R).
 2893
 2894%************************************************************************
 2895%*
 2896%* predicate: createYesNoPopup/4
 2897%*
 2898%* syntax:
 2899%*
 2900%* args:       +Parent		parent widget, which is a push button	
 2901%*	       -YesNoPopup	created widget, popupMenu		
 2902%*	       +YesPred		callback procedure for Yes button	
 2903%*	       +YesArg		argument for callback procedure	
 2904%*
 2905%* description: Creates a popupMenu which is poped up, whenever the	
 2906%*		parent button is pressed. This popupMenu consists of two
 2907%*		push buttons 'Yes' and 'No'.
 2908%*
 2909%************************************************************************
 2910
 2911createYesNoPopup( Parent,YesNoPopup,YesPred,YesArg ) :-
 2912	xmCreatePopupMenu(Parent,'YesNo',
 2913	  [xmNorientation(xmVERTICAL),
 2914	   xmNpacking(xmPACK_COLUMN),
 2915	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)], 
 2916	  YesNoPopup),
 2917	xmCreatePushButton(YesNoPopup,'Yes',
 2918	  [],Yes),
 2919	xmCreatePushButton(YesNoPopup,'No',
 2920	  [],No),
 2921	xtAddCallback(Parent,xmNactivateCallback,popupDialog,
 2922	  YesNoPopup),
 2923	xtAddCallback(Yes,xmNactivateCallback,YesPred,YesArg),
 2924	xtAddCallback(No,xmNactivateCallback,yesNoPopdown,YesNoPopup),
 2925	xtAddEventHandler(YesNoPopup,[buttonReleaseMask],false,
 2926	                  yesNoPopdown,YesNoPopup),
 2927	xtManageChildren([Yes,No]).
 2928
 2929
 2930%************************************************************************
 2931%*
 2932%* predicate: popupDialog/3	callback procedure
 2933%*
 2934%* syntax:
 2935%*
 2936%* args:       +Widget		calling widget
 2937%*	       +PopupShell	widget, to manage
 2938%*	       _CallData	event	
 2939%*
 2940%* description: Manages the specified widget beneath the calling widget.
 2941%*
 2942%************************************************************************
 2943
 2944popupDialog(Widget,PopupShell,_CallData) :-
 2945	xtGetValues(Widget,[xmNwidth(Xs)]),
 2946	xtTranslateCoords(Widget,Xs,0,X,Y),
 2947	xtSetValues(PopupShell,[xmNx(X),xmNy(Y)]),
 2948	xtManageChild(PopupShell).
 2949
 2950
 2951%************************************************************************
 2952%*
 2953%* predicate: popupViewRules/3  	callback procedure	
 2954%*
 2955%* syntax:
 2956%*
 2957%* args:       +Widget		calling widget	
 2958%*	       _ClientData	client data	
 2959%*	       _CallData	event	
 2960%*
 2961%* description: Manages the specified widget beneath the calling widget
 2962%*
 2963%************************************************************************
 2964
 2965popupViewRules(Widget,_ClientData,_CallData) :-
 2966	recorded(rules,view(dialog,VRDialog),_),
 2967	xtGetValues(Widget,[xmNwidth(Xs)]),
 2968	xtTranslateCoords(Widget,Xs,0,X,Y),
 2969	xtSetValues(VRDialog,[xmNx(X),xmNy(Y)]),
 2970	xtManageChild(VRDialog),
 2971
 2972	fillExistingLabels,
 2973	fillViewedLabels,
 2974	fillExistingClauseHeads,
 2975	fillViewedClauseHeads.
 2976
 2977
 2978
 2979
 2980%************************************************************************
 2981%*
 2982%* predicate: popupExamineRules/3  	callback procedure
 2983%*
 2984%* syntax:
 2985%*
 2986%* args:       +Widget		calling widget	
 2987%*	       _ClientData	client data	
 2988%*	       _CallData	event	
 2989%*
 2990%* description: Manages the specified widget beneath the calling widget.
 2991%*
 2992%************************************************************************
 2993
 2994popupExamineRules(Widget,_ClientData,_CallData) :-
 2995	recorded(rules,examine(dialog,ERDialog),_),
 2996	xtGetValues(Widget,[xmNwidth(Xs)]),
 2997	xtTranslateCoords(Widget,Xs,0,X,Y),
 2998	xtSetValues(ERDialog,[xmNx(X),xmNy(Y)]),
 2999        showExaminedRule(_,_,_),
 3000	xtManageChild(ERDialog).
 3001
 3002
 3003
 3004%************************************************************************
 3005%*
 3006%* predicate: popupViewExamples/3  	callback procedure
 3007%*
 3008%* syntax:
 3009%*
 3010%* args:       +Widget		calling widget	
 3011%*	       _ClientData	client data	
 3012%*	       _CallData	event	
 3013%*
 3014%* description: Manages the specified widget beneath the calling widget.
 3015%*
 3016%************************************************************************
 3017
 3018popupViewExamples(Widget,_ClientData,_CallData) :-
 3019	recorded(examples,view(dialog,VRDialog),_),
 3020	xtGetValues(Widget,[xmNwidth(Xs)]),
 3021	xtTranslateCoords(Widget,Xs,0,X,Y),
 3022	xtSetValues(VRDialog,[xmNx(X),xmNy(Y)]),
 3023	xtManageChild(VRDialog),
 3024
 3025	fillExistingExampleCHs,
 3026	fillViewedExampleCHs.
 3027
 3028
 3029%************************************************************************
 3030%*
 3031%* predicate: fillExistingLabels/0	
 3032%*
 3033%* syntax:
 3034%*
 3035%* args: -
 3036%*
 3037%* description: Finds all existing Labels.
 3038%*
 3039%************************************************************************
 3040
 3041fillExistingLabels :-
 3042	recorded(rules,view(exLabRC,ExLabRC),_),
 3043	listLabels(LabelList),
 3044	createLabelWidgets(ExLabRC,LabelList).
 3045
 3046
 3047%************************************************************************
 3048%*
 3049%* predicate: fillViewedLabels/0	
 3050%*
 3051%* syntax:
 3052%*
 3053%* args: -
 3054%*
 3055%* description: Finds all viewed Labels.
 3056%*
 3057%************************************************************************
 3058
 3059fillViewedLabels:-
 3060	recorded(rules,view(viewLabRC,ViewLabRC),_),
 3061	recorded(rules,view(labels,LabelList),_),
 3062	createLabelWidgets(ViewLabRC,LabelList).
 3063
 3064
 3065%************************************************************************
 3066%*
 3067%* predicate: fillExistingClauseHeads/0
 3068%*
 3069%* syntax:
 3070%*
 3071%* args: -
 3072%*
 3073%* description:
 3074%*
 3075%************************************************************************
 3076
 3077fillExistingClauseHeads:-
 3078	recorded(rules,view(exCHRC,ExCHRC),_),
 3079	listClauseHeads(LabelList),
 3080	createLabelWidgets(ExCHRC,LabelList).
 3081
 3082
 3083%************************************************************************
 3084%*
 3085%* predicate: fillViewedClauseHeads/0
 3086%*
 3087%* syntax:
 3088%*
 3089%* args: -
 3090%*
 3091%* description: Finds all existing Labels
 3092%*
 3093%************************************************************************
 3094
 3095fillViewedClauseHeads:-
 3096	recorded(rules,view(viewCHRC,ViewCHRC),_),
 3097	recorded(rules,view(clause_heads,CHList),_),
 3098	createLabelWidgets(ViewCHRC,CHList).
 3099
 3100
 3101%************************************************************************
 3102%*
 3103%* predicate: fillExistingExampleCHs/0
 3104%*
 3105%* syntax:
 3106%*
 3107%* args: -
 3108%*
 3109%* description:  Finds all existing Labels.	
 3110%*
 3111%************************************************************************
 3112
 3113fillExistingExampleCHs:-
 3114	recorded(examples,view(exCHRC,ExCHRC),_),
 3115	listExampleCHs(LabelList),
 3116	createLabelWidgets(ExCHRC,LabelList).
 3117
 3118
 3119%************************************************************************
 3120%*
 3121%* predicate: fillViewedExampleCs/0
 3122%*
 3123%* syntax:
 3124%*
 3125%* args: -
 3126%*
 3127%* description: Finds all existing Clause Heads of examples.
 3128%*
 3129%************************************************************************
 3130
 3131fillViewedExampleCHs:-
 3132	recorded(examples,view(viewCHRC,ViewCHRC),_),
 3133	recorded(examples,view(clause_heads,CHList),_),
 3134	createLabelWidgets(ViewCHRC,CHList).
 3135
 3136
 3137%************************************************************************
 3138%*
 3139%* predicate: createLabelWidgets/2
 3140%*
 3141%* syntax:
 3142%*
 3143%* args:       +Parent		widget	
 3144%*	       +NameList		atomList
 3145%*
 3146%* description: creates a label for each name in NameList.
 3147%*
 3148%************************************************************************
 3149
 3150createLabelWidgets(Parent,[Name|NameList]) :-
 3151	proxtStringToCharPtr(Name,NameChrPtr),
 3152	proxtGetDefaultCharset(DCharset),
 3153	xmStringCreate(NameChrPtr,DCharset,NameStr),
 3154	xmCreateLabel(Parent,nameLabel,
 3155	  [xmNalignment(xmALIGNMENT_BEGINNING),
 3156	   xmNlabelType(xmSTRING),xmNlabelString(NameStr)],
 3157	  NameLabel),
 3158	xtManageChild(NameLabel),
 3159	recordz(labels,parent_child(Parent,NameLabel,NameStr),_),
 3160	xtAddEventHandler(NameLabel,[buttonReleaseMask],
 3161	                  false,selectLabel,_),!,
 3162	createLabelWidgets(Parent,NameList).
 3163createLabelWidgets(_,[]) :- !.
 3164
 3165
 3166%************************************************************************
 3167%*
 3168%* predicate: destroyLabelWidgets/1
 3169%*
 3170%* syntax: destroyLabelWidgets(+Parent)
 3171%*
 3172%* description: destroys each sublabel of Parent.
 3173%*
 3174%************************************************************************
 3175
 3176destroyLabelWidgets(Parent) :- 
 3177	var(Parent),
 3178	recorded(labels,parent_child(Parent,L,_),Ref),!,
 3179	erase(Ref),
 3180	xtDestroyWidget(L),
 3181	destroyLabelWidgets(_).
 3182destroyLabelWidgets(Parent) :- 
 3183	recorded(labels,parent_child(Parent,L,_),Ref),!,
 3184	erase(Ref),
 3185	xtDestroyWidget(L),
 3186	destroyLabelWidgets(Parent).
 3187destroyLabelWidgets(_) :- !.
 3188
 3189
 3190%************************************************************************
 3191%*
 3192%* predicate: listLabel/1
 3193%*
 3194%* syntax:
 3195%*
 3196%* args: LabelList	atomList
 3197%*
 3198%* description: lists each label of rules of knowledgebase.	
 3199%*
 3200%************************************************************************
 3201
 3202listLabels(LabelList) :- 
 3203	recorded(rules,view(labels,ViewedLabels),_),
 3204	listLabels(ViewedLabels,LL1),
 3205	append(LabelList,ViewedLabels,LL1),!.
 3206listLabels(LLin,LLout) :-
 3207	get_clause(_,_,_,_,Label),
 3208	nonmember(Label,LLin),!,
 3209	LLin2=[Label|LLin],
 3210	listLabels(LLin2,LLout).
 3211listLabels(A,A) :- !.
 3212
 3213
 3214%************************************************************************
 3215%*
 3216%* predicate: listClauseHeads/1
 3217%*
 3218%* syntax:
 3219%*
 3220%* args: LabelList	atomList
 3221%*
 3222%* description: lists each clausehead of rules of knowledgebase.
 3223%*
 3224%************************************************************************
 3225
 3226listClauseHeads(LabelList) :- 
 3227	recorded(rules,view(clause_heads,ViewedCHs),_),
 3228	listClauseHeads(ViewedCHs,LL1),
 3229	append(LabelList,ViewedCHs,LL1),!.
 3230listClauseHeads(LLin,LLout) :-
 3231	get_clause(_,C,_,_,_),
 3232	functor(C,CH,_),
 3233	nonmember(CH,LLin),!,
 3234	LLin2=[CH|LLin],
 3235	listClauseHeads(LLin2,LLout).
 3236listClauseHeads(A,A) :- !.
 3237
 3238
 3239%************************************************************************
 3240%*
 3241%* predicate: listExampleCHs/1
 3242%*
 3243%* syntax:
 3244%*
 3245%* args: LabelList	atomList
 3246%*
 3247%* description: lists each clausehead of examples of knowledgebase.
 3248%*
 3249%************************************************************************
 3250
 3251listExampleCHs(LabelList) :- 
 3252	recorded(examples,view(clause_heads,ViewedCHs),_),
 3253	listExampleCHs(ViewedCHs,LL1),
 3254	append(LabelList,ViewedCHs,LL1),!.
 3255listExampleCHs(LLin,LLout) :-
 3256	get_example(_,C,_),
 3257	functor(C,CH,_),
 3258	nonmember(CH,LLin),!,
 3259	LLin2=[CH|LLin],
 3260	listExampleCHs(LLin2,LLout).
 3261listExampleCHs(A,A) :- !.
 3262
 3263
 3264%************************************************************************
 3265%*
 3266%* predicate: selectLabel/3		callback procedure	
 3267%*
 3268%* syntax:
 3269%*
 3270%* args:       +Widget			calling widget
 3271%*	       _ClientData		client data	
 3272%*	       _CallData		event
 3273%*
 3274%* description: Toggles the parent of the calling widget. (exist./view.)
 3275%*
 3276%************************************************************************
 3277
 3278selectLabel(Widget,_ClientData,_CallData) :-
 3279	recorded(labels,parent_child(P,Widget,N),Ref), !,
 3280	erase(Ref),
 3281	xtDestroyWidget(Widget),
 3282	(recorded(rules,view(exLabRC,P),_) ->
 3283	    recorded(rules,view(viewLabRC,P2),_)|
 3284	 recorded(rules,view(viewLabRC,P),_) ->
 3285	    recorded(rules,view(exLabRC,P2),_)|
 3286	 recorded(rules,view(exCHRC,P),_) ->
 3287	    recorded(rules,view(viewCHRC,P2),_)|
 3288	 recorded(rules,view(viewCHRC,P),_) ->
 3289	    recorded(rules,view(exCHRC,P2),_)|
 3290	 recorded(examples,view(exCHRC,P),_) ->
 3291	    recorded(examples,view(viewCHRC,P2),_)|
 3292	 recorded(examples,view(viewCHRC,P),_) ->
 3293	    recorded(examples,view(exCHRC,P2),_)|
 3294	 recorded(examples,view(exCHRC,P),_) ->
 3295	    recorded(examples,view(viewCHRC,P2),_)|
 3296	 recorded(examples,view(viewCHRC,P),_) ->
 3297	    recorded(examples,view(exCHRC,P2),_)),
 3298	xmCreateLabel(P2,nameLabel,
 3299	  [xmNalignment(xmALIGNMENT_BEGINNING),
 3300	   xmNlabelType(xmSTRING),xmNlabelString(N)],
 3301	  NameLabel),
 3302	xtManageChild(NameLabel),
 3303	recordz(labels,parent_child(P2,NameLabel,N),_),
 3304	xtAddEventHandler(NameLabel,[buttonReleaseMask],
 3305	                  false,selectLabel,_),!.
 3306
 3307
 3308viewRules(_Widget,_ClientData,_CallData) :-
 3309	(recorded(rules,view(all),R1) -> erase(R1)|
 3310	 otherwise),
 3311	recorded(rules,view(labels,_),R2),
 3312	erase(R2),
 3313	recorded(rules,view(clause_heads,_),R3),
 3314	erase(R3),
 3315	recorded(rules,view(viewLabRC,ViewLabRC),_),
 3316	recorded(rules,view(viewCHRC,ViewCHRC),_),
 3317	viewRules(ViewLabRC,LabelList),
 3318	recordz(rules,view(labels,LabelList),_),
 3319	viewRules(ViewCHRC,CHList),
 3320	recordz(rules,view(clause_heads,CHList),_),
 3321	destroyLabelWidgets(_),
 3322	refresh([rules]),
 3323	recorded(rules,view(dialog,X),_),
 3324	xtUnmanageChild(X).
 3325viewRules(P,List) :-
 3326	recorded(labels,parent_child(P,C,N),Ref),
 3327	xtDestroyWidget(C),
 3328	erase(Ref),
 3329	proxtGetDefaultCharset(DCharset),
 3330	xmStringGetLtoR(N,DCharset,NCP,_),
 3331	proxtCharPtrToString(NCP,Name),
 3332	viewRules(P,L2),
 3333	List=[Name|L2].
 3334viewRules(_,[]) :- !.
 3335
 3336
 3337viewAllRules(_Widget,_ClientData,_CallData) :-
 3338	(recorded(rules,view(all),_)|
 3339	 recordz(rules,view(all),_)),
 3340	 refresh([rules]),
 3341	destroyLabelWidgets(_),
 3342	recorded(rules,view(dialog,X),_),
 3343	xtUnmanageChild(X).
 3344
 3345
 3346cancelViewRules(_Widget,_ClientData,_CallData) :-
 3347	destroyLabelWidgets(_),
 3348	recorded(rules,view(dialog,X),_),
 3349	xtUnmanageChild(X).
 3350
 3351
 3352cancelExamineRules(_Widget,_ClientData,_CallData) :-
 3353	destroyLabelWidgets(_),
 3354	recorded(rules,examine(dialog,X),_),
 3355	xtUnmanageChild(X).
 3356
 3357
 3358viewExamples(_Widget,_ClientData,_CallData) :-
 3359	(recorded(examples,view(all),R1) -> erase(R1)|
 3360	 otherwise),
 3361	recorded(examples,view(clause_heads,_),R3),
 3362	erase(R3),
 3363	recorded(examples,view(viewCHRC,ViewCHRC),_),
 3364	viewExamples(ViewCHRC,CHList),
 3365	recordz(examples,view(clause_heads,CHList),_),
 3366	destroyLabelWidgets(_),
 3367	refresh([examples]),
 3368	recorded(examples,view(dialog,X),_),
 3369	xtUnmanageChild(X).
 3370viewExamples(P,List) :-
 3371	recorded(labels,parent_child(P,C,N),Ref),
 3372	xtDestroyWidget(C),
 3373	erase(Ref),
 3374	proxtGetDefaultCharset(DCharset),
 3375	xmStringGetLtoR(N,DCharset,NCP,_),
 3376	proxtCharPtrToString(NCP,Name),
 3377	viewExamples(P,L2),
 3378	List=[Name|L2].
 3379viewExamples(_,[]) :- !.
 3380
 3381
 3382viewAllExamples(_Widget,_ClientData,_CallData) :-
 3383	(recorded(examples,view(all),_)|
 3384	 recordz(examples,view(all),_)),
 3385	 refresh([examples]),
 3386	destroyLabelWidgets(_),
 3387	recorded(examples,view(dialog,X),_),
 3388	xtUnmanageChild(X).
 3389
 3390
 3391cancelViewExamples(_Widget,_ClientData,_CallData) :-
 3392	destroyLabelWidgets(_),
 3393	recorded(examples,view(dialog,X),_),
 3394	xtUnmanageChild(X).
 3395
 3396
 3397%************************************************************************
 3398%*
 3399%* predicate: popupFunctions/3		callback procedure	
 3400%*
 3401%* syntax:
 3402%*
 3403%* args:       +Widget			calling widget
 3404%*	       +PopupShell		widget, to manage
 3405%*	       _CallData		event	
 3406%*
 3407%* description: Manages the specified child of the calling widget.	
 3408%*
 3409%************************************************************************
 3410
 3411popupFunctions(Widget,PopupShell,_CallData) :-
 3412	xtGetValues(Widget,[xmNheight(Ys)]),
 3413	xtTranslateCoords(Widget,0,Ys,X,Y),
 3414	xtSetValues(PopupShell,[xmNx(X),xmNy(Y)]),
 3415	xtManageChild(PopupShell),
 3416	recordz(learnfuncs,popedup(PopupShell),_).
 3417
 3418
 3419%************************************************************************
 3420%*
 3421%* predicate: yesNoPopdown/3		callback procedure
 3422%*
 3423%* syntax: 
 3424%*
 3425%* args:       _Widget			calling widget	
 3426%*	       +JaNeinPopup		widget, to unmanage
 3427%*	       _CallData		event	
 3428%*
 3429%* description: Unmanages a popup widget.
 3430%*
 3431%************************************************************************
 3432
 3433yesNoPopdown(_Widget,JaNeinPopup,_CallData) :-
 3434	xtUnmanageChild(JaNeinPopup).
 3435
 3436
 3437%************************************************************************
 3438%*
 3439%* predicate: functionsPopdown/3		callback procedure
 3440%*
 3441%* syntax:
 3442%*
 3443%* args:       _Widget			calling widget	
 3444%*	       _ClientData		client data	
 3445%*	       _CallData		event	
 3446%*
 3447%* description: Unmanages a popup widget.
 3448%*
 3449%************************************************************************
 3450
 3451functionsPopdown(_Widget,_ClientData,_CallData) :-
 3452	recorded(learnfuncs,popedup(PopupShell),Ref),
 3453	erase(Ref),
 3454	xtUnmanageChild(PopupShell).
 3455
 3456
 3457%************************************************************************
 3458%*
 3459%* predicate: doKommando/3		callback procedure
 3460%*
 3461%* syntax:
 3462%*
 3463%* args:       _Widget			calling procedure
 3464%*	       +[KommandoText,KStatus]	widgets	
 3465%*	       _CallData		event
 3466%*
 3467%* description: Executes the command given by the user.
 3468%*
 3469%************************************************************************
 3470
 3471doKommando(_Widget,[KommandoText,KStatus],_CallData) :-
 3472	proxtGetDefaultCharset(DCharset),
 3473	proxtStringToCharPtr('-EXIT-    Input',ACP),
 3474	xmStringCreate(ACP,DCharset,AXmS),
 3475	xtSetValues(KStatus,[xmNlabelString(AXmS)]),
 3476	xmTextGetString(KommandoText,KcharPtr),
 3477	proxtCharPtrToString(KcharPtr,KS),
 3478	xxmStringToTerm(KcharPtr,_Charset,Term),
 3479
 3480	writeMessage(':- '),
 3481	writelnMessage(KS),
 3482	(call(Term) ->
 3483	    (proxtStringToCharPtr('- yes -   Input',YesCP),
 3484	     xmStringCreate(YesCP,DCharset,YesXmS),
 3485	     xtSetValues(KStatus,[xmNlabelString(YesXmS)]),
 3486	     writelnMessage('% yes'))|
 3487	  otherwise ->
 3488	    (proxtStringToCharPtr('- no -    Input',NoCP),
 3489	     xmStringCreate(NoCP,DCharset,NoXmS),
 3490	     xtSetValues(KStatus,[xmNlabelString(NoXmS)]),
 3491	     writelnMessage('% no'))),
 3492
 3493	doEmptyKommando(_,KommandoText,_).
 3494
 3495
 3496%************************************************************************
 3497%*
 3498%* predicate: doEmptyKommando/3		callback procedure
 3499%*
 3500%* syntax:
 3501%*
 3502%* args:       _Widget			calling widget
 3503%*	       +KommandoText		widget		
 3504%*	       _CallData		event	
 3505%*
 3506%* description: Sets the command text to an empty string.	
 3507%*
 3508%************************************************************************
 3509
 3510doEmptyKommando(_Widget,KommandoText,_CallData) :-
 3511	proxtStringToCharPtr('',KommandoChrPtr),
 3512	xmTextSetString(KommandoText,KommandoChrPtr),
 3513        refreshKnowledgeList(_Widget,rules,_Calldata),
 3514	refreshKnowledgeList(_Widget,examples,_Calldata),
 3515        updateEvaluationLabel.
 3516
 3517
 3518%************************************************************************
 3519%*
 3520%* predicate: beenden/3		callback procedure	
 3521%*
 3522%* syntax:
 3523%*
 3524%* args:       _Widget		calling widget	
 3525%*	       _ClientData	client data	
 3526%*	       _CallData	event
 3527%*
 3528%* description: Quits XMILES,	returns to Prolog toplevel.
 3529%*
 3530%************************************************************************
 3531
 3532beenden(_Widget,_ClientData,_CallData) :-
 3533	recorded(messages,file(F),Ref),
 3534        erase(Ref),
 3535	close(F),
 3536	write('X-MILES korrekt beendet!'),nl,
 3537        retract(my_exit_loop(no)),
 3538        assert(my_exit_loop(yes)).
 3539
 3540
 3541%************************************************************************
 3542%*
 3543%* predicate: createMessageArea/1
 3544%*
 3545%* syntax: createMessageArea(+Parent)
 3546%*
 3547%* args:
 3548%*
 3549%* description: Creates the area for the messages from XMILES to the user.
 3550%*
 3551%************************************************************************
 3552
 3553createMessageArea(Parent) :-
 3554	xmCreateFrame(Parent,'Messages',
 3555	  [],MessageFrame),
 3556	xtManageChild(MessageFrame),
 3557	xmCreateRowColumn(MessageFrame,messages,
 3558	  [xmNadjustLast(true),
 3559	   xmNorientation(xmVERTICAL),
 3560	   xmNpacking(xmPACK_TIGHT),
 3561	   xmNrowColumnType(xmWORK_AREA)],
 3562	  MessageColumn),
 3563	xtManageChild(MessageColumn),
 3564
 3565	proxtStringToCharPtr('Messages',MessageTitleChrPtr),
 3566	proxtGetDefaultCharset(DCharset),
 3567	xmStringCreate(MessageTitleChrPtr,DCharset,MessageTitleStr),
 3568	xmCreateLabelGadget(MessageColumn,messageLabel,
 3569	  [xmNlabelType(xmSTRING),xmNlabelString(MessageTitleStr)],
 3570	  MessageLabel),
 3571	xtManageChild(MessageLabel),
 3572
 3573	xmCreateScrolledText(MessageColumn,messageText,
 3574	  [xmNeditable(false),xmNeditMode(xmMULTI_LINE_EDIT),
 3575	   xmNrows(8),
 3576	   xmNlistSizePolicy(xmCONSTANT),
 3577	   xmNscrollBarDisplayPolicy(xmSTATIC),
 3578	   xmNscrollingPolicy(xmAUTOMATIC),
 3579	   xmNautoShowCursorPosition(true)],MessageText),
 3580	xtManageChild(MessageText),
 3581	recordz(messages,textWidget(MessageText),_),
 3582
 3583	xmCreateRowColumn(MessageColumn,'ButtonRow',
 3584	  [xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER),
 3585	   xmNnumColumns(1),
 3586	   xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN)],
 3587	  ButtonRow),
 3588	xtManageChild(ButtonRow),
 3589
 3590	xmCreatePushButton(ButtonRow,'Save',
 3591	  [],Save),
 3592	xtManageChild(Save),
 3593	xtAddCallback(Save,xmNactivateCallback,saveMessages,_),
 3594
 3595	xmCreatePushButton(ButtonRow,'Clear',
 3596	  [],Clear),
 3597	xtManageChild(Clear),
 3598	xtAddCallback(Clear,xmNactivateCallback,clearMessages,_),
 3599	
 3600	open('xmProtocol.tmp',write,F),
 3601	recordz(messages,file(F),_).
 3602
 3603
 3604%************************************************************************
 3605%*
 3606%* predicate: saveMessages/3    	callback procedure
 3607%*
 3608%* syntax:
 3609%*
 3610%* args:       _Widget		calling widget
 3611%*	       _ClientData	client data	
 3612%*	       _CallData	event	
 3613%*
 3614%* description: Saves the scrolled text widet holding the XMILES messages 
 3615%*
 3616%************************************************************************
 3617
 3618saveMessages(_Widget,_ClientData,_CallData) :-
 3619	recorded(messages,textWidget(MessageText),_),
 3620	proxtStringToCharPtr('',EmptyCharPtr),
 3621	xmTextSetString(MessageText,EmptyCharPtr),
 3622	recorded(messages,file(F),Ref),
 3623	erase(Ref),
 3624	close(F),
 3625	unix(shell('mv xmProtocol.tmp xmProtocol.sav')),
 3626	open('xmProtocol.tmp',write,Fnew),
 3627	recordz(messages,file(Fnew),_),
 3628	writelnMessage('% wrote "xmProtocol.sav"').
 3629
 3630
 3631%************************************************************************
 3632%*
 3633%* predicate: clearMessages/3	callback procedure	
 3634%*
 3635%* syntax:
 3636%*
 3637%* args:       _Widget		calling widget		
 3638%*	       _ClientData	client data		
 3639%*	       _CallData	event
 3640%*
 3641%* description: Clears the scrolled text widet holding the XMILES messages
 3642%*
 3643%************************************************************************
 3644
 3645clearMessages(_Widget,_ClientData,_CallData) :-
 3646	recorded(messages,textWidget(MessageText),_),
 3647	proxtStringToCharPtr('',EmptyCharPtr),
 3648	xmTextSetString(MessageText,EmptyCharPtr),
 3649	recorded(messages,file(F),Ref),
 3650	erase(Ref),
 3651	close(F),
 3652	open('xmProtocol.tmp',write,Fnew),
 3653	recordz(messages,file(Fnew),_).
 3654
 3655
 3656%************************************************************************
 3657%*
 3658%* predicate: writeError/1
 3659%*
 3660%* syntax: writeError(+Message)
 3661%*
 3662%* args:
 3663%*
 3664%* description: Appends the Message to the ErrorText buffer.
 3665%*
 3666%************************************************************************
 3667
 3668writeError(Message) :-
 3669	(number(Message) -> number_chars(Message,MsgChars),
 3670	        atom_chars(MsgStr,MsgChars)|
 3671	 otherwise -> MsgStr = Message),
 3672	(recorded(error,errorText(EText),Ref) -> erase(Ref),
 3673	        concat(EText,MsgStr,NewEText)|
 3674	 otherwise -> NewEText = MsgStr),
 3675	recordz(error,errorText(NewEText),_).
 3676
 3677
 3678%************************************************************************
 3679%*
 3680%* predicate: writelnError/1
 3681%*
 3682%* syntax: writelnError(+Message)
 3683%*
 3684%* args:
 3685%*
 3686%* description: Appends the Message to the ErrorText buffer.
 3687%*
 3688%************************************************************************
 3689
 3690writelnError(Message) :-
 3691	(number(Message) -> number_chars(Message,MsgChars),
 3692	        append(MsgChars,[10],MC),
 3693	        atom_chars(MsgStr,MC)|
 3694	 otherwise -> atom_chars(Message,MsgChars),
 3695	        append(MsgChars,[10],MC),
 3696	        atom_chars(MsgStr,MC)),
 3697	(recorded(error,errorText(EText),Ref) -> erase(Ref),
 3698	        concat(EText,MsgStr,NewEText)|
 3699	 otherwise -> NewEText = MsgStr),
 3700	recordz(error,errorText(NewEText),_).
 3701
 3702
 3703%************************************************************************
 3704%*
 3705%* predicate: flushErrorBuffer/1
 3706%*
 3707%* syntax: flushErrorBuffer(+Message)
 3708%*
 3709%* args:
 3710%*
 3711%* description: Appends the ErrorText buffer to the MessageText.
 3712%*
 3713%************************************************************************
 3714
 3715flushErrorBuffer :-
 3716	(recorded(error,errorText(EText),Ref) -> erase(Ref),
 3717	        writeMessage(EText)|
 3718	 otherwise).
 3719
 3720
 3721%************************************************************************
 3722%*
 3723%* predicate: writeMessage/1
 3724%*
 3725%* syntax: writeMessage(+Message)
 3726%*
 3727%* args:
 3728%*
 3729%* description: Appends the Message to the MessageText.
 3730%*
 3731%************************************************************************
 3732
 3733writeMessage(Message) :-
 3734	recorded(messages,textWidget(MessageText),_),
 3735	(number(Message) -> number_chars(Message,MsgChars),
 3736	        atom_chars(MsgStr,MsgChars),
 3737	        proxtStringToCharPtr(MsgStr,MessageCharPtr)|
 3738	 atom(Message) -> proxtStringToCharPtr(Message,MessageCharPtr)|
 3739	 otherwise -> xxmWriteToCharPtr(write(Message),MessageCharPtr)),
 3740	xmTextGetLastPosition(MessageText,LastPos),
 3741	xmTextReplace(MessageText,LastPos,LastPos,MessageCharPtr),
 3742	recorded(messages,file(F),_),
 3743	write(F,Message).
 3744
 3745
 3746%************************************************************************
 3747%*
 3748%* predicate: writelnMessage/1
 3749%*
 3750%* syntax: writelnMessage(+Message)
 3751%*
 3752%* args:
 3753%*
 3754%* description: Appends the Message to the MessageText.
 3755%*
 3756%************************************************************************
 3757
 3758writelnMessage(Message) :-
 3759	recorded(messages,textWidget(MessageText),_),
 3760	(number(Message) -> number_chars(Message,MsgChars),
 3761	        append(MsgChars,[10],MC2),
 3762	        atom_chars(MsgStr,MC2),
 3763	        proxtStringToCharPtr(MsgStr,MessageCharPtr)|
 3764	 atom(Message) -> atom_chars(Message,MsgChars),
 3765	        append(MsgChars,[10],MC2),
 3766	        atom_chars(MsgStr,MC2),
 3767	        proxtStringToCharPtr(MsgStr,MessageCharPtr)|
 3768	 otherwise -> xxmWriteToCharPtr((write(Message),nl),MessageCharPtr)),
 3769	xmTextGetLastPosition(MessageText,LastPos),
 3770	xmTextReplace(MessageText,LastPos,LastPos,MessageCharPtr),
 3771	xmTextScroll(MessageText,1),
 3772	recorded(messages,file(F),_),
 3773	write(F,Message),
 3774	nl(F).
 3775
 3776
 3777%************************************************************************
 3778%*
 3779%* predicate: createEditorArea/1
 3780%*
 3781%* syntax: createEditorArea(+Parent)
 3782%*
 3783%* args:
 3784%*
 3785%* description:  Creates the area for the editior for editing rules and
 3786%*		 examples.
 3787%*
 3788%************************************************************************
 3789
 3790createEditorArea(Parent) :-
 3791	xmCreateFrame(Parent,'Editor',
 3792	  [],EditorFrame),
 3793	xtManageChild(EditorFrame),
 3794
 3795	xmCreateRowColumn(EditorFrame,editor,
 3796	  [xmNadjustLast(true),
 3797	   xmNorientation(xmVERTICAL),
 3798	   xmNpacking(xmPACK_TIGHT),
 3799	   xmNrowColumnType(xmWORK_AREA)],
 3800	  EditorRowColumn),
 3801	xtManageChild(EditorRowColumn),
 3802
 3803	proxtStringToCharPtr('Editor',EditorTitleChrPtr),
 3804	proxtGetDefaultCharset(DCharset),
 3805	xmStringCreate(EditorTitleChrPtr,DCharset,EditorTitleStr),
 3806	xmCreateLabelGadget(EditorRowColumn,editorLabel,
 3807	  [xmNlabelType(xmSTRING),xmNlabelString(EditorTitleStr)],
 3808	  EditorLabel),
 3809	xtManageChild(EditorLabel),
 3810	recordz(editor,label(EditorLabel),_),
 3811
 3812	xmCreateScrolledText(EditorRowColumn,kommandotext,
 3813	  [xmNeditable(true),xmNeditMode(xmMULTI_LINE_EDIT),
 3814	   xmNrows(5),
 3815	   xmNlistSizePolicy(xmCONSTANT),
 3816	   xmNscrollBarDisplayPolicy(xmSTATIC),
 3817	   xmNscrollingPolicy(xmAUTOMATIC),
 3818	   xmNautoShowCursorPosition(true)],EditorText),
 3819	xtManageChild(EditorText),
 3820	recordz(editor,textWidget(EditorText),_Ref),
 3821
 3822	xmCreateRowColumn(EditorRowColumn,'ButtonRowColumn',
 3823	  [xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER),
 3824	   xmNnumColumns(1),
 3825	   xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN)],
 3826	  ButtonRowColumn),
 3827	xtManageChild(ButtonRowColumn),
 3828
 3829	xmCreatePushButton(ButtonRowColumn,'Add rule',
 3830	  [],AddRule),
 3831	xtManageChild(AddRule),
 3832
 3833	xmCreatePushButton(ButtonRowColumn,'Change rule',
 3834	  [],ChangeRule),
 3835	createYesNoPopup(ChangeRule,_YesNoPopup,changeRule,_),
 3836	xtManageChild(ChangeRule),
 3837
 3838	xmCreatePushButton(ButtonRowColumn,'Add example',
 3839	  [],AddExample),
 3840	xtManageChild(AddExample),
 3841
 3842	xmCreatePushButton(ButtonRowColumn,'Change example',
 3843	  [],ChangeExample),
 3844	createYesNoPopup(ChangeExample,_YesNoPopup2,changeExample,_),
 3845	xtManageChild(ChangeExample),
 3846
 3847	xmCreatePushButton(ButtonRowColumn,'Clear',
 3848	  [],Clear),
 3849	xtManageChild(Clear),
 3850
 3851	xtAddCallback(Clear,xmNactivateCallback,clearEditor,_),
 3852	xtAddCallback(AddRule,xmNactivateCallback,addRule,_),
 3853	xtAddCallback(AddExample,xmNactivateCallback,addExample,_).
 3854
 3855
 3856%************************************************************************
 3857%*
 3858%* predicate: clearEditor/3	callback procedure	
 3859%*
 3860%* syntax:
 3861%*
 3862%* args:       _Widget		calling widget	
 3863%*	       _ClientData	client data	
 3864%*	       _CallData	event
 3865%*
 3866%* description: Clears the scrolled text widget holding the edited object
 3867%*
 3868%************************************************************************
 3869
 3870clearEditor(_Widget,_ClientData,_CallData) :-
 3871	recorded(editor,textWidget(EditorText),_),
 3872	recorded(editor,label(Label),_),
 3873	proxtGetDefaultCharset(DCharset),
 3874	(recorded(editor,editing(_,_),Ref) -> erase(Ref),
 3875	    proxtStringToCharPtr('Editor',LblCP),
 3876	    xmStringCreate(LblCP,DCharset,LblS),
 3877	    xtSetValues(Label,[xmNlabelString(LblS)]) |
 3878         otherwise),
 3879	proxtStringToCharPtr('',EmptyChrPtr),
 3880	xmTextSetString(EditorText,EmptyChrPtr).	
 3881
 3882
 3883%************************************************************************
 3884%*
 3885%* predicate: addRule/3				Callback procedure
 3886%*
 3887%* syntax:
 3888%*
 3889%* args:       _Widget				calling widget
 3890%*	       _ClientData					
 3891%*	       _CallData			event	
 3892%*
 3893%* description: Adds the rule in the editor to the rule list.	
 3894%*
 3895%************************************************************************
 3896
 3897addRule(_Widget,_ClientData,_CallData) :-
 3898	recorded(editor,textWidget(EditorText),_Ref),	
 3899	xmTextGetString(EditorText,RuleCP),
 3900	xxmStringToTerm(RuleCP,_,RuleTerm),
 3901	proxtCharPtrToString(RuleCP,RulePString),
 3902	span_left(RulePString,".",N),
 3903	substring(RulePString,RuleString,0,N,_),
 3904	store_clause(RuleTerm,_,user,ID),
 3905	writeMessage(':- store_clause('),
 3906	writeMessage(RuleString),
 3907	writeMessage(',_,user,'),
 3908	writeMessage(ID),
 3909	writelnMessage(').'),
 3910	writelnMessage('% rule added.'),
 3911        updateEvaluationLabel,
 3912	get_clause(ID,H,B,S,L),
 3913	addRuleItem(ID,H,B,S,L).
 3914
 3915
 3916%************************************************************************
 3917%*
 3918%* predicate:  resultAddRule/1			result procedure
 3919%*
 3920%* syntax: resultAddRule(Id)
 3921%*
 3922%* args:
 3923%*
 3924%* description: Adds the rule specified by Id to the rule list.
 3925%*
 3926%************************************************************************
 3927
 3928resultAddRule(Id) :-
 3929	get_clause(Id,H,B,S,L),
 3930	addRuleItem(Id,H,B,S,L),
 3931	writeMessage('% rule '),
 3932	number_chars(Id,IdChars),
 3933	atom_chars(IdString,IdChars),
 3934	writeMessage(IdString),
 3935	writelnMessage(' created.').
 3936
 3937
 3938%************************************************************************
 3939%*
 3940%* predicate:  resultAddNewpreds/1			result procedure
 3941%*
 3942%* syntax: resultAddNewpreds(Reflist)
 3943%*
 3944%* args:
 3945%*
 3946%* description: Displays a window with alternative specialisations
 3947%*       through new predicates, and allows to choose one to add to the kb
 3948%*
 3949%************************************************************************
 3950
 3951resultAddNewpreds((ID,Reflist)):-
 3952   toplevel(Shell),
 3953   xmCreateBulletinBoardDialog(Shell,'Newpreds',
 3954	 [],NewpredDialog),
 3955   recordz(newpreddialog,ID:NewpredDialog,_),
 3956   xtManageChild(NewpredDialog),
 3957
 3958   xmCreateFrame(NewpredDialog,'Newpred Frame',
 3959	         [],NewpredFrame),
 3960   xtManageChild(NewpredFrame),
 3961
 3962   xmCreateRowColumn(NewpredFrame,newpredColumn,
 3963	  [xmNorientation(xmVERTICAL),xmNpacking(xmPACK_TIGHT)],
 3964	  NewpredColumn),
 3965   xtManageChild(NewpredColumn),
 3966
 3967   xmCreateRowColumn(NewpredColumn,titlerow,
 3968	  [xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 3969	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 3970	  TitleRow),
 3971   xtManageChild(TitleRow),
 3972
 3973   proxtGetDefaultCharset(DCharset),
 3974   proxtStringToCharPtr('Choose Specialisation',TitleCP),
 3975   xmStringCreate(TitleCP,DCharset,TitleStr),
 3976   xmCreateLabelGadget(TitleRow,title,
 3977	  [xmNlabelType(xmSTRING),xmNlabelString(TitleStr)],
 3978	  TitleLabel),
 3979   xtManageChild(TitleLabel),
 3980
 3981   xmCreateScrolledWindow(NewpredColumn,newpredSW,
 3982	  [xmNheight(300),xmNwidth(300),
 3983	   xmNlistSizePolicy(xmCONSTANT),
 3984	   xmNscrollBarDisplayPolicy(xmSTATIC),
 3985	   xmNscrollingPolicy(xmAUTOMATIC)],
 3986	  NewpredSW),
 3987   xtManageChild(NewpredSW),
 3988
 3989   xmCreateRowColumn(NewpredSW,newpredRC,
 3990	  [xmNadjustLast(false),
 3991	   xmNorientation(xmVERTICAL),
 3992	   xmNpacking(xmPACK_TIGHT),
 3993	   xmNrowColumnType(xmWORK_AREA)],
 3994	  NewpredRC),
 3995   xtGetValues(NewpredRC,[xmNbackground(B)]),
 3996   xtGetValues(NewpredSW,[xmNclipWindow(CW)]),
 3997   xtSetValues(CW,[xmNbackground(B)]),
 3998   xtManageChild(NewpredRC),
 3999   addnewpredclauses(Reflist,NewpredRC),
 4000
 4001   xmCreateRowColumn(NewpredColumn,buttonrow,
 4002	  [xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 4003	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 4004	  ButtonRow),
 4005   xtManageChild(ButtonRow),
 4006
 4007   xmCreatePushButton(ButtonRow,'Add Rule',
 4008	  [],AddRule),
 4009   xtManageChild(AddRule),
 4010   xtAddCallback(AddRule,xmNactivateCallback,
 4011	          addselectedRule,_),
 4012
 4013   xmCreatePushButton(ButtonRow,'None',
 4014	  [],None),
 4015   xtManageChild(None),
 4016   xtAddCallback(None,xmNactivateCallback,
 4017	              addnorule,_).	
 4018
 4019
 4020addnewpredclauses([],_).
 4021addnewpredclauses([(NC,Pos,Neg,TR)|R],Widget):-
 4022   proxtGetDefaultCharset(DCharset),
 4023   xxmWriteToString(portray_clause(NC),DCharset,XmS),
 4024   xmCreateLabel(Widget,newpredClause,
 4025	    [xmNalignment(xmALIGNMENT_BEGINNING),
 4026	     xmNlabelString(XmS),xmNlabelType(xmSTRING)],
 4027	     Label),
 4028    xtManageChild(Label),
 4029    recordz(newpred,np(Label,NC,Pos,Neg,TR,notselected),_Ref),
 4030    xtAddEventHandler(Label,[buttonReleaseMask],
 4031	              false,selectnpclause,_),
 4032    addnewpredclauses(R,Widget).
 4033
 4034
 4035selectnpclause(Widget,_,_CallData) :-
 4036   recorded(newpred,np(Widget,NC,Pos,Neg,TR,notselected),Ref),
 4037   turnoff_other_selected,
 4038   xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
 4039   xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)]),
 4040   erase(Ref),
 4041   recordz(newpred,np(Widget,NC,Pos,Neg,TR,selected),_).
 4042
 4043selectnpclause(Widget,rules,_CallData) :-
 4044   recorded(newpred,np(Widget,NC,Pos,Neg,TR,selected),Ref),
 4045   xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
 4046   xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)]),
 4047   erase(Ref),
 4048   recordz(newpred,np(Widget,NC,Pos,Neg,TR,notselected),_).
 4049
 4050turnoff_other_selected:-
 4051   mysetof(Ref,Widget^NC^Pos^Neg^TR^B^F^(
 4052                recorded(newpred,np(Widget,NC,Pos,Neg,TR,selected),Ref),
 4053                erase(Ref),
 4054                recordz(newpred,np(Widget,NC,Pos,Neg,TR,notselected),_),
 4055                xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
 4056                xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)])),_).
 4057
 4058    
 4059addnorule(_,_,_):-
 4060   recorded(newpreddialog,_:Widget,Ref),
 4061   erase(Ref),
 4062   mysetof(Ref1,X^(recorded(newpred,X,Ref1),erase(Ref1)),_),
 4063   xtDestroyWidget(Widget).
 4064
 4065addselectedRule(_,_,_):-
 4066   (   recorded(newpred,np(_,NC,Pos,Neg,TR,selected),_) ->
 4067       recorded(newpreddialog,ID:Widget,Ref0),
 4068       delete_clause(ID),
 4069       store_clause(NC,_,newpred,ID),
 4070       mysetof(P,PID^(member(P,Pos),store_ex(P,+,PID)),_),            
 4071       mysetof(N,NID^(member(N,Neg),store_ex(N,-,NID)),_),
 4072       assertz(kb:TR),
 4073       erase(Ref0),
 4074       mysetof(Ref1,X^(recorded(newpred,X,Ref1),erase(Ref1)),_),
 4075       xtDestroyWidget(Widget),
 4076       refresh([rules,examples])
 4077   ;   true
 4078   ).            
 4079
 4080
 4081
 4082%************************************************************************
 4083%*
 4084%* predicate:  resultAddSpec/1			result procedure
 4085%*
 4086%* syntax: resultAddNewpreds(Reflist)
 4087%*
 4088%* args:
 4089%*
 4090%* description: Displays a window with alternative specialisations
 4091%*       through new predicates, and allows to choose one to add to the kb
 4092%*
 4093%************************************************************************
 4094
 4095resultAddSpec((ID,Reflist)):-
 4096   toplevel(Shell),
 4097   xmCreateBulletinBoardDialog(Shell,'Specs',
 4098	 [],SpecsDialog),
 4099   recordz(specsdialog,ID:SpecsDialog,_),
 4100   xtManageChild(SpecsDialog),
 4101
 4102   xmCreateFrame(SpecsDialog,'Specs Frame',
 4103	         [],SpecsFrame),
 4104   xtManageChild(SpecsFrame),
 4105
 4106   xmCreateRowColumn(SpecsFrame,specsColumn,
 4107	  [xmNorientation(xmVERTICAL),xmNpacking(xmPACK_TIGHT)],
 4108	  SpecsColumn),
 4109   xtManageChild(SpecsColumn),
 4110
 4111   xmCreateRowColumn(SpecsColumn,titlerow,
 4112	  [xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 4113	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 4114	  TitleRow),
 4115   xtManageChild(TitleRow),
 4116
 4117   proxtGetDefaultCharset(DCharset),
 4118   proxtStringToCharPtr('Choose Specialisation',TitleCP),
 4119   xmStringCreate(TitleCP,DCharset,TitleStr),
 4120   xmCreateLabelGadget(TitleRow,title,
 4121	  [xmNlabelType(xmSTRING),xmNlabelString(TitleStr)],
 4122	  TitleLabel),
 4123   xtManageChild(TitleLabel),
 4124
 4125   xmCreateScrolledWindow(SpecsColumn,specsSW,
 4126	  [xmNheight(300),xmNwidth(300),
 4127	   xmNlistSizePolicy(xmCONSTANT),
 4128	   xmNscrollBarDisplayPolicy(xmSTATIC),
 4129	   xmNscrollingPolicy(xmAUTOMATIC)],
 4130	  SpecsSW),
 4131   xtManageChild(SpecsSW),
 4132
 4133   xmCreateRowColumn(SpecsSW,newpredRC,
 4134	  [xmNadjustLast(false),
 4135	   xmNorientation(xmVERTICAL),
 4136	   xmNpacking(xmPACK_TIGHT),
 4137	   xmNrowColumnType(xmWORK_AREA)],
 4138	  SpecsRC),
 4139   xtGetValues(SpecsRC,[xmNbackground(B)]),
 4140   xtGetValues(SpecsSW,[xmNclipWindow(CW)]),
 4141   xtSetValues(CW,[xmNbackground(B)]),
 4142   xtManageChild(SpecsRC),
 4143   addspecclauses(Reflist,SpecsRC),
 4144
 4145   xmCreateRowColumn(SpecsColumn,buttonrow,
 4146	  [xmNorientation(xmHORIZONTAL),xmNpacking(xmPACK_COLUMN),
 4147	   xmNisAligned(true),xmNentryAlignment(xmALIGNMENT_CENTER)],
 4148	  ButtonRow),
 4149   xtManageChild(ButtonRow),
 4150
 4151   xmCreatePushButton(ButtonRow,'Add Rule',
 4152	  [],AddRule),
 4153   xtManageChild(AddRule),
 4154   xtAddCallback(AddRule,xmNactivateCallback,
 4155	          addselectedSpec,_),
 4156
 4157   xmCreatePushButton(ButtonRow,'None',
 4158	  [],None),
 4159   xtManageChild(None),
 4160   xtAddCallback(None,xmNactivateCallback,
 4161	              addnospec,_).	
 4162
 4163
 4164addspecclauses([],_).
 4165addspecclauses([NC|R],Widget):-
 4166   proxtGetDefaultCharset(DCharset),
 4167   xxmWriteToString(portray_clause(NC),DCharset,XmS),
 4168   xmCreateLabel(Widget,specClause,
 4169	    [xmNalignment(xmALIGNMENT_BEGINNING),
 4170	     xmNlabelString(XmS),xmNlabelType(xmSTRING)],
 4171	     Label),
 4172    xtManageChild(Label),
 4173    recordz(spec,np(Label,NC,notselected),_Ref),
 4174    xtAddEventHandler(Label,[buttonReleaseMask],
 4175	              false,selectspecclause,_),
 4176    addspecclauses(R,Widget).
 4177
 4178
 4179selectspecclause(Widget,_,_CallData) :-
 4180   recorded(spec,np(Widget,NC,notselected),Ref),
 4181   turnoff_other_selected_spec,
 4182   xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
 4183   xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)]),
 4184   erase(Ref),
 4185   recordz(spec,np(Widget,NC,selected),_).
 4186
 4187selectspecclause(Widget,rules,_CallData) :-
 4188   recorded(spec,np(Widget,NC,selected),Ref),
 4189   xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
 4190   xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)]),
 4191   erase(Ref),
 4192   recordz(spec,np(Widget,NC,notselected),_).
 4193
 4194turnoff_other_selected_spec:-
 4195   mysetof(Ref,Widget^NC^B^F^(
 4196                recorded(spec,np(Widget,NC,selected),Ref),
 4197                erase(Ref),
 4198                recordz(spec,np(Widget,NC,notselected),_),
 4199                xtGetValues(Widget,[xmNbackground(B),xmNforeground(F)]),
 4200                xtSetValues(Widget,[xmNbackground(F),xmNforeground(B)])),_).
 4201
 4202    
 4203addnospec(_,_,_):-
 4204   recorded(specsdialog,_:Widget,Ref),
 4205   erase(Ref),
 4206   mysetof(Ref1,X^(recorded(spec,X,Ref1),erase(Ref1)),_),
 4207   xtDestroyWidget(Widget).
 4208
 4209addselectedSpec(_,_,_):-
 4210   (   recorded(spec,np(_,NC,selected),_) ->
 4211       recorded(specsdialog,ID:Widget,Ref0),
 4212       delete_clause(ID),
 4213       store_clause(NC,_,spec,ID),
 4214       erase(Ref0),
 4215       mysetof(Ref1,X^(recorded(spec,X,Ref1),erase(Ref1)),_),
 4216       xtDestroyWidget(Widget),
 4217       refresh([rules])
 4218   ;   true
 4219   ).            
 4220
 4221%************************************************************************
 4222%*
 4223%* predicate: resultAddRuleList/1		result procedure
 4224%*
 4225%* syntax:
 4226%*
 4227%* args: +IdList				rule ids to add
 4228%*
 4229%* description: Adds the rules specified by IdList to the rule list
 4230%*
 4231%************************************************************************
 4232
 4233resultAddRuleList([]):-!.
 4234resultAddRuleList([Id|IdList]) :-
 4235	resultAddRule(Id),
 4236	resultAddRuleList(IdList).
 4237
 4238
 4239%************************************************************************
 4240%*
 4241%* predicate: resultSelectRules/1		result procedure
 4242%*
 4243%* syntax:
 4244%*
 4245%* args: +IdList				rule ids to select	
 4246%*
 4247%* description: Selects the rules specified by IdList in the rule list. 
 4248%*
 4249%************************************************************************
 4250
 4251resultSelectRules([]):- unselectAll(_,rules,_),!,
 4252	writelnMessage('% resulting rules selected').
 4253resultSelectRules([Id:_|IdList]) :-
 4254	resultSelectRules(IdList),
 4255	recorded(current,clause(Id,Widget,notselected),_),
 4256	selectClause(Widget,rules,_).
 4257
 4258
 4259%************************************************************************
 4260%*
 4261%* predicate: resultSelectExamples/1		result procedure
 4262%*
 4263%* syntax:
 4264%*
 4265%* args: +IdList				rule ids to select	
 4266%*
 4267%* description: Selects the examples specified by IdList in the rule list
 4268%*
 4269%************************************************************************
 4270
 4271resultSelectExamples([]):- unselectAll(_,examples,_),!,
 4272	writelnMessage('% resulting examples selected').
 4273resultSelectExamples([Id|IdList]) :-
 4274	resultSelectExamples(IdList),
 4275	recorded(current,example(Id,Widget,notselected),_),
 4276	selectClause(Widget,examples,_).
 4277
 4278
 4279%************************************************************************
 4280%*
 4281%* predicate: changeRule/3			Callback procedure
 4282%*
 4283%* syntax:
 4284%*
 4285%* args:       _Widget				calling widget
 4286%*	       _ClientData					
 4287%*	       _CallData			event	
 4288%*
 4289%* description: Changes the rule in the editor to the rule list.
 4290%*
 4291%************************************************************************
 4292
 4293changeRule(_Widget,_ClientData,_CallData) :-
 4294	recorded(editor,textWidget(EditorText),_Ref),
 4295	recorded(editor,editing(rules,ID),_),
 4296	delete_clause(ID),
 4297	xmTextGetString(EditorText,RuleCP),
 4298	xxmStringToTerm(RuleCP,_,RuleTerm),
 4299	store_clause(RuleTerm,_,user,ID),
 4300	proxtCharPtrToString(RuleCP,RulePString),
 4301	span_left(RulePString,".",N),
 4302	substring(RulePString,RuleString,0,N,_),
 4303	writeMessage(':- delete_clause('),
 4304	writeMessage(ID),
 4305	writelnMessage(').'),
 4306	writeMessage(':- store_clause('),
 4307	writeMessage(RuleString),
 4308	writeMessage(',_,user,'),
 4309	writeMessage(ID),
 4310	writelnMessage(').'),
 4311	writelnMessage('% rule changed.'),
 4312	get_clause(ID,H,B,S,L),
 4313	addRuleItem(ID,H,B,S,L),
 4314        updateEvaluationLabel.
 4315
 4316
 4317%************************************************************************
 4318%*
 4319%* predicate: addExample/3			Callback procedure	
 4320%*
 4321%* syntax:
 4322%*
 4323%* args:       _Widget				calling widget	
 4324%*	       _ClientData					
 4325%*	       _CallData			event
 4326%*
 4327%*
 4328%* description: Adds the example in the editor to the example list.	
 4329%*
 4330%************************************************************************
 4331
 4332addExample(_Widget,_ClientData,_CallData) :-
 4333	recorded(editor,textWidget(EditorText),_Ref),	
 4334	xmTextGetString(EditorText,ExampleCP),
 4335	xxmStringToTerm(ExampleCP,_,ExampleTerm),
 4336	store_ex(ExampleTerm,?,ID),
 4337	proxtCharPtrToString(ExampleCP,ExamplePString),
 4338	span_left(ExamplePString,".",N),
 4339	substring(ExamplePString,ExampleString,0,N,_),
 4340	writeMessage(':- store_ex('),
 4341	writeMessage(ExampleString),
 4342	writeMessage(',?,'),
 4343	writeMessage(ID),
 4344	writelnMessage(').'),
 4345	writelnMessage('% example added.'),
 4346	get_example(ID,F,C),
 4347	addExampleItem(ID,F,C),
 4348        updateEvaluationLabel.
 4349
 4350
 4351%************************************************************************
 4352%*
 4353%* predicate: changeExample/3			Callback procedure
 4354%*
 4355%* syntax:
 4356%*
 4357%* args:       _Widget				calling widget	
 4358%*	       _ClientData					
 4359%*	       _CallData			event
 4360%*
 4361%* description: Changes the example in the editor to the example list.
 4362%*
 4363%************************************************************************
 4364
 4365changeExample(_Widget,_ClientData,_CallData) :-
 4366	recorded(editor,textWidget(EditorText),_Ref),
 4367	recorded(editor,editing(examples,ID),_),
 4368	get_example(ID,_,C),
 4369	delete_example(ID),
 4370	xmTextGetString(EditorText,ExampleCP),
 4371	xxmStringToTerm(ExampleCP,_,ExampleTerm),
 4372	proxtCharPtrToString(ExampleCP,ExamplePString),
 4373	span_left(ExamplePString,".",N),
 4374	substring(ExamplePString,ExampleString,0,N,_),
 4375	store_ex(ExampleTerm,C,ID),
 4376	writeMessage(':- delete_example('),
 4377	writeMessage(ID),
 4378	writelnMessage(').'),
 4379	writeMessage(':- store_ex('),
 4380	writeMessage(ExampleString),
 4381	writeMessage(',?,'),
 4382	writeMessage(ID),
 4383	writelnMessage(').'),
 4384	writelnMessage('% example changed.'),
 4385	get_example(ID,F,C),
 4386	addExampleItem(ID,F,C),
 4387        updateEvaluationLabel.
 4388
 4389
 4390%************************************************************************
 4391%*
 4392%* predicate:  xxmStringToTerm/3
 4393%*
 4394%* syntax:
 4395%*
 4396%* args:       +S		xmCharPtr	
 4397%*	       Charset		xmCharset	
 4398%*	       +T		Term	
 4399%*
 4400%* description: Conversion of xmCharPtrs and Prolog Terms.	
 4401%*
 4402%************************************************************************
 4403
 4404xxmStringToTerm(S,_Charset,T) :-
 4405	var(T),nonvar(S),
 4406	proxtCharPtrToString(S,X1),
 4407	tell(xmTemporary),
 4408	write(X1),
 4409	nl,
 4410	told,
 4411	see(xmTemporary),
 4412	read(T),
 4413	seen,!.
 4414
 4415xxmStringToTerm(XmS,Charset,T) :-
 4416	var(XmS),nonvar(T),
 4417	tell(xmTemporary),
 4418	write(T),
 4419	told,
 4420	see(xmTemporary),
 4421	xxmStringRead(XmS,Charset),
 4422	seen,!.
 4423
 4424
 4425%************************************************************************
 4426%*
 4427%* predicate: xxmStringRead/2
 4428%*
 4429%* syntax:
 4430%*
 4431%* args:       +S		xmString	
 4432%*	       +Charset		xmCharset	
 4433%*
 4434%*
 4435%* description: Reads a string from current input.
 4436%*
 4437%************************************************************************
 4438
 4439xxmStringRead(S,Charset) :-
 4440	stringRead(100,S1),
 4441	atom_chars(AS,S1),
 4442	proxtStringToCharPtr(AS,CP),
 4443	xmStringCreateLtoR(CP,Charset,XmS),
 4444	(length(S1,100) -> xxmStringAppendRead(XmS,S,Charset)
 4445	| otherwise     -> S = XmS),!.
 4446
 4447
 4448%************************************************************************
 4449%*
 4450%* predicate: xxmStringAppendRead/3
 4451%*
 4452%* syntax:
 4453%*
 4454%* args:       +S1		xmString, prefix	
 4455%*	       +S		xmString	
 4456%*	       Charset		xmCharset	
 4457%*
 4458%* description: Reads an xmString from the current input and appends it
 4459%*		to S1.
 4460%*
 4461%************************************************************************
 4462
 4463xxmStringAppendRead(S1,S,Charset) :-
 4464	stringRead(100,S2),
 4465	atom_chars(AS,S2),
 4466	proxtStringToCharPtr(AS,CP),
 4467	xmStringCreateLtoR(CP,Charset,XmS),
 4468	xmStringConcat(S1,XmS,XmS1),
 4469	(length(S2,100) -> xxmStringAppendRead(XmS1,S,Charset)
 4470	| otherwise     -> S = XmS1),!.
 4471
 4472
 4473%************************************************************************
 4474%*
 4475%* predicate: stringRead/2
 4476%*
 4477%* syntax: stringRead(+N,+S)
 4478%*
 4479%* description: Reads N characters from the current input.
 4480%*
 4481%************************************************************************
 4482
 4483stringRead(0,[]).
 4484stringRead(N,S) :-
 4485	get0(Char),
 4486	(Char =:= -1  -> S = []
 4487	| otherwise -> M is N - 1,
 4488	               stringRead(M,S1),
 4489		       S = [Char|S1]).
 4490
 4491
 4492%************************************************************************
 4493%*
 4494%* predicate: xxmWriteToString/3
 4495%*
 4496%* syntax:
 4497%*
 4498%* args:       +W		writing procedure	
 4499%*	       +Charset		xmCharset		
 4500%*	       -XmS		xmString	
 4501%*
 4502%* description: Uses the writing procedure W to generate XmS.	
 4503%*
 4504%************************************************************************
 4505
 4506xxmWriteToString(W,Charset,XmS) :-
 4507	tell(xmTemporary),
 4508	call(W),
 4509	told,
 4510	see(xmTemporary),
 4511	xxmStringRead(XmS,Charset),
 4512	seen,!.
 4513
 4514
 4515%************************************************************************
 4516%*
 4517%* predicate: xxmWriteToCharPtr/3
 4518%*
 4519%* syntax:
 4520%*
 4521%* args:       +W		writing procedure	
 4522%*	       +Charset		xmCharset		
 4523%*	       -CP		xmCharPtr
 4524%*
 4525%* description: Uses the writing procedure W to generate CP.
 4526%*
 4527%************************************************************************
 4528
 4529xxmWriteToCharPtr(W,CP) :-
 4530	tell(xmTemporary),
 4531	call(W),
 4532	told,
 4533	see(xmTemporary),
 4534	stringRead(1023,S),
 4535	seen,
 4536	atom_chars(AS,S),
 4537	proxtStringToCharPtr(AS,CP),!.
 4538
 4539
 4540%************************************************************************
 4541%*
 4542%* predicate: isDepth/1
 4543%*
 4544%* syntax: isDepth(+D)
 4545%*
 4546%* args:
 4547%*
 4548%* description: Checks if D is within the range of 1-100.	
 4549%*
 4550%************************************************************************
 4551
 4552isDepth(D) :-
 4553 	(number(D), D>0, D<101|
 4554 	 (number(D) -> number_chars(D,M1)|
 4555          otherwise  -> atom_chars(D,M1)),
 4556	 writeError('% '),
 4557   	 append("'",M1,M2),
 4558	 append(M2,"' is not between the range of 1 - 100!",M3),
 4559	 atom_chars(Message,M3),
 4560	 writelnError(Message),!,fail).
 4561
 4562
 4563%************************************************************************
 4564%*
 4565%* predicate: isExample/1
 4566%*
 4567%* syntax: isExample(+Id)
 4568%*
 4569%* args:
 4570%*
 4571%* description: checks whether Id specifies an example
 4572%*
 4573%************************************************************************
 4574
 4575isExample(Id) :-
 4576	(get_example(Id,_,_) |
 4577 	 (number(Id) -> number_chars(Id,M1)|
 4578          otherwise  -> atom_chars(Id,M1)),
 4579	 writeError('% '),
 4580	 append("'",M1,M2),
 4581	 append(M2,"' is not an example id!",M3),
 4582	 atom_chars(Message,M3),
 4583	 writelnError(Message),!,fail).
 4584
 4585
 4586%************************************************************************
 4587%*
 4588%* predicate: isRule
 4589%*
 4590%* syntax: isRule(+Id)
 4591%*
 4592%* args:
 4593%*
 4594%* description: checks whether Id specifies a rule
 4595%*
 4596%************************************************************************
 4597
 4598isRule(Id) :-
 4599	(get_clause(Id,_,_,_,_) |
 4600 	 (number(Id) -> number_chars(Id,M1)|
 4601          otherwise  -> atom_chars(Id,M1)),
 4602	 writeError('% '),
 4603         append("'",M1,M2),
 4604	 append(M2,"' is not a rule id!",M3),
 4605	 atom_chars(Message,M3),
 4606	 writelnError(Message),!,fail).
 4607
 4608
 4609%************************************************************************
 4610%*
 4611%* predicate: isExOrRule/1
 4612%*
 4613%* syntax: isExOrRule(+Id)
 4614%*
 4615%* args:
 4616%*
 4617%* description: checks whether Id specifies a rule or an example
 4618%*
 4619%************************************************************************
 4620
 4621isExOrRule(Id) :-
 4622	(get_clause(Id,_,_,_,_) | get_example(Id,_,_) |
 4623 	 (number(Id) -> number_chars(Id,M1)|
 4624          otherwise  -> atom_chars(Id,M1)),
 4625	 writeError('% '),
 4626         append("'",M1,M2),
 4627	 append(M2,"' is not a rule id nor an example id!",M3),
 4628	 atom_chars(Message,M3),
 4629	 writelnError(Message),fail).
 4630
 4631
 4632%************************************************************************
 4633%*
 4634%* predicate: sucheInListe/1
 4635%*
 4636%* syntax:
 4637%*
 4638%* args:        +Element	term		
 4639%*		+List		list of terms	
 4640%*
 4641%* description: searches Element in List
 4642%*
 4643%************************************************************************
 4644
 4645sucheInListe(A,[A|_]).
 4646sucheInListe(_,[]).
 4647sucheInListe(A,[_|Rest]) :- sucheInListe(A,Rest).
 4648
 4649writeFullstop(X) :- write(X),write('.').
 4650true(_).
 4651
 4652
 4653
 4654%************************************************************************
 4655%*
 4656%* predicate: createEvaluationString/1
 4657%*
 4658%* syntax:
 4659%*
 4660%* args:       -String		list of terms	
 4661%*
 4662%* description: 
 4663%*
 4664%************************************************************************
 4665
 4666createEvaluationString(S):-
 4667   (   evaluated(no) ->
 4668       S = '(not evaluated)'
 4669   ;   S = '    (evaluated)'
 4670   ).
 4671
 4672
 4673%************************************************************************
 4674%*
 4675%* predicate: updateEvaluationLabel/0
 4676%*
 4677%* syntax:
 4678%*
 4679%* args:       
 4680%*
 4681%* description: updates the label that indicates whether the kb is
 4682%*              evaluated
 4683%*
 4684%************************************************************************
 4685
 4686updateEvaluationLabel:-
 4687   recorded(irene,Widget,_),
 4688   createEvaluationString(S),
 4689   proxtGetDefaultCharset(DCharset),
 4690   proxtStringToCharPtr(S,ACP),
 4691   xmStringCreate(ACP,DCharset,AXmS),
 4692   xtSetValues(Widget,[xmNlabelString(AXmS)])