00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #define _XCLIPS_SOURCE_
00024
00025 #include <stdio.h>
00026 #include <stdlib.h>
00027
00028 #include "xsetup.h"
00029 #include "xclips.h"
00030 #include "xmenu.h"
00031 #include "xmenu_wind.h"
00032 #include "xmenu_opt.h"
00033 #include "xclipstext.h"
00034 #include "xmain.h"
00035
00036 #include "setup.h"
00037 #include "agenda.h"
00038 #include "bmathfun.h"
00039 #include "classcom.h"
00040 #include "commline.h"
00041 #include "crstrtgy.h"
00042 #include "defins.h"
00043 #include "dffctdef.h"
00044 #include "dffnxfun.h"
00045 #include "engine.h"
00046 #include "exprnpsr.h"
00047 #include "facthsh.h"
00048 #include "factmngr.h"
00049 #include "filecom.h"
00050 #include "genrccom.h"
00051 #include "globlcom.h"
00052 #include "globldef.h"
00053 #include "incrrset.h"
00054 #include "inscom.h"
00055 #include "insfun.h"
00056 #include "router.h"
00057 #include "utility.h"
00058
00059
00060
00061 static void PeriodicUpdate(void *);
00062 static void UpdateWindowsMenu(void);
00063 static int GetEvent(void *);
00064 static int InitalizeLogTable(void);
00065 static void ReleaseLogTable(void);
00066 static LogNamePtr LogInsert(char *);
00067 static LogNamePtr LogLookup(char *);
00068 static int GetHashValue(char *,int);
00069
00070
00071
00072 char unget_buf[MAX_CHAR_IN_BUF];
00073 int char_counter = 0;
00074 int send_clips_command = True;
00075 Boolean periodicChecking = False;
00076 LogNamePtr log_table[LOG_TABLE_SIZE];
00077 LogNamePtr stdin_log, xclips_log,
00078 xagenda_log, xfacts_log,
00079 xinstances_log, xglobals_log,
00080 xfocus_log;
00081
00082
00083
00084
00085
00086
00087
00088
00089 void InitializeInterface()
00090 {
00091 void *theEnv = GetCurrentEnvironment();
00092
00093 if (! InitalizeLogTable())
00094 {
00095 EnvPrintRouter(theEnv,"werror", "Could not initialize logical name hash table\n");
00096 XclipsExit(theEnv,0);
00097 EnvExitRouter(theEnv,0);
00098 }
00099
00100
00101
00102
00103
00104
00105
00106 SetEventFunction(theEnv,GetEvent);
00107
00108
00109
00110
00111
00112
00113
00114 EnvAddPeriodicFunction(theEnv,"PeriodicUpdate",PeriodicUpdate,90);
00115
00116
00117
00118
00119
00120 if (! EnvAddRouter(theEnv,"wclips", 10, XclipsQuery, XclipsPrint, XclipsGetc, XclipsUngetc,
00121 XclipsExit))
00122 {
00123 printf("Could not allocate xclips router!\n");
00124 XclipsExit(theEnv,0);
00125 EnvExitRouter(theEnv,0);
00126 }
00127
00128 EnvPrintRouter(theEnv,"wclips", " XCLIPS for:");
00129 }
00130
00131
00132
00133
00134
00135
00136
00137 int XclipsQuery(
00138 void *theEnv,
00139 char *log_name)
00140 {
00141 return((LogLookup(log_name) != NULL) ? TRUE : FALSE);
00142 }
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152 int XclipsPrint(
00153 void *theEnv,
00154 char *log_name,
00155 char *str)
00156 {
00157 String str_list[1];
00158 int num = 1;
00159 LogNamePtr lptr;
00160
00161 if ((lptr = LogLookup(log_name)) == NULL)
00162 { return(False); }
00163
00164 if (lptr == stdin_log)
00165 {
00166 str_list[0] = str;
00167 InsertClipsString(dialog_text, &TheEvent, str_list,(Cardinal *) &num);
00168 }
00169
00170
00171
00172
00173
00174 else if ((lptr == xagenda_log)&&(agenda_text != NULL))
00175 {
00176 str_list[0] = str;
00177 InsertClipsString(agenda_text, &TheEvent, str_list,(Cardinal *) &num);
00178 }
00179
00180
00181
00182
00183
00184 else if ((lptr == xfacts_log)&&(facts_text != NULL))
00185 {
00186 str_list[0] = str;
00187 InsertClipsString(facts_text, &TheEvent, str_list,(Cardinal *) &num);
00188 }
00189
00190
00191
00192
00193
00194 else if ((lptr == xinstances_log) && (instances_text != NULL))
00195 {
00196 str_list[0] = str;
00197 InsertClipsString(instances_text, &TheEvent, str_list,(Cardinal *) &num);
00198 }
00199
00200
00201
00202
00203
00204 else if ((lptr == xglobals_log) && (globals_text != NULL))
00205 {
00206 str_list[0] = str;
00207 InsertClipsString(globals_text, &TheEvent, str_list,(Cardinal *) &num);
00208 }
00209
00210
00211
00212
00213
00214 else if ((lptr == xfocus_log) && (focus_text != NULL))
00215 {
00216 str_list[0] = str;
00217 InsertClipsString(focus_text,&TheEvent,str_list,(Cardinal *) &num);
00218 }
00219
00220
00221
00222
00223
00224 else if ((lptr != xagenda_log) && (lptr != xfacts_log) &&
00225 (lptr != xinstances_log) && (lptr != xglobals_log)&&
00226 (lptr != stdin_log))
00227 {
00228 str_list[0] = str;
00229 InsertClipsString(dialog_text, &TheEvent, str_list,(Cardinal *) &num);
00230 }
00231
00232 return(0);
00233 }
00234
00235
00236
00237
00238
00239
00240
00241 int XclipsGetc(
00242 void *theEnv,
00243 char *log_name)
00244 {
00245 int quit = False;
00246 char ch[2];
00247 String str_list[1];
00248 int num = 1;
00249
00250 ch[1] = 0;
00251
00252
00253
00254 if (char_counter > 0)
00255 { return(unget_buf[--char_counter]); }
00256
00257 if (LogLookup(log_name) == NULL)
00258 { return(EOS); }
00259
00260 while (! quit)
00261 {
00262
00263
00264
00265
00266
00267 XtAppNextEvent(app_con, &TheEvent);
00268 XLookupString(&TheEvent.xkey, ch, 1, &TheKeysym, &compose_status);
00269 if ((TheEvent.type == KeyPress) &&
00270 (TheEvent.xproperty.window == dialog_text->core.window))
00271 {
00272 if ((TheKeysym >= XK_space) && (TheKeysym <= XK_asciitilde))
00273 {
00274 str_list[0] = ch;
00275 InsertClipsString(dialog_text, &TheEvent, str_list,(Cardinal *) &num);
00276 quit = True;
00277 }
00278 else if ((TheKeysym != XK_Linefeed) ? (TheKeysym == XK_Return) : TRUE)
00279 {
00280 ch[0] = NEWLINE;
00281 quit = True;
00282 XtDispatchEvent(&TheEvent);
00283 }
00284 else if ((TheKeysym != XK_Delete) ? (TheKeysym == XK_BackSpace) :TRUE)
00285 {
00286 if (RouterData(theEnv)->CommandBufferInputCount != 0)
00287 {
00288 ch[0] = BACKSPACE;
00289 quit = True;
00290 XtDispatchEvent(&TheEvent);
00291 }
00292 }
00293 }
00294 else
00295 { XtDispatchEvent(&TheEvent); }
00296 }
00297
00298 return((int)ch[0]);
00299 }
00300
00301
00302
00303
00304
00305
00306
00307
00308 int XclipsUngetc(
00309 void *theEnv,
00310 int ch,
00311 char *log_name)
00312 {
00313 if (char_counter < MAX_CHAR_IN_BUF)
00314 { unget_buf[char_counter++] = ch; }
00315
00316 return(0);
00317 }
00318
00319
00320
00321
00322
00323
00324
00325 int XclipsExit(
00326 void *theEnv,
00327 int num)
00328 {
00329 EnvDribbleOff(theEnv);
00330 EnvDeleteRouter(theEnv,"wclips");
00331 XtDestroyApplicationContext(app_con);
00332 ReleaseLogTable();
00333 exit(0);
00334 }
00335
00336
00337
00338
00339
00340
00341
00342 int PrintChangedAgenda()
00343 {
00344 void *theEnv = GetCurrentEnvironment();
00345 void *rule_ptr;
00346 char buffer[MAX_CHAR_IN_BUF];
00347 char *name, labelBuffer[MAX_CHAR_IN_BUF];
00348 Window AgendaWin;
00349 Display *theDisplay;
00350 struct defmodule* theModule = (struct defmodule *) EnvGetCurrentModule(theEnv);
00351
00352
00353
00354
00355
00356 AgendaWin = XtWindow(agenda);
00357 theDisplay = XtDisplay(agenda);
00358 if (theModule != NULL)
00359 {
00360 name = EnvGetDefmoduleName(theEnv,theModule);
00361 strcpy(labelBuffer,"Agenda Window(");
00362 strcat(labelBuffer,name);
00363 strcat(labelBuffer,")");
00364 }
00365 else
00366 {
00367 strcpy(labelBuffer,"Agenda Window");
00368 }
00369
00370 XStoreName(theDisplay,AgendaWin,labelBuffer);
00371
00372
00373
00374
00375
00376 XtSetArg(TheArgs[0], XtNstring, "");
00377 XtSetValues(agenda_text, TheArgs, 1);
00378 XawAsciiSourceFreeString(XawTextGetSource(agenda_text));
00379
00380
00381
00382
00383
00384 rule_ptr = EnvGetNextActivation(theEnv,NULL);
00385 while (rule_ptr != NULL)
00386 {
00387 EnvGetActivationPPForm(theEnv,buffer,MAX_CHAR_IN_BUF - 1,rule_ptr);
00388 EnvPrintRouter(theEnv,"xagenda",buffer);
00389 EnvPrintRouter(theEnv,"xagenda", "\n");
00390 rule_ptr = EnvGetNextActivation(theEnv,rule_ptr);
00391 }
00392
00393 return 0;
00394 }
00395
00396
00397
00398
00399
00400
00401
00402 int PrintChangedFacts()
00403 {
00404 void *theEnv = GetCurrentEnvironment();
00405 void *fact_ptr;
00406 char buffer[MAX_CHAR_IN_BUF];
00407 char *name,labelBuffer[MAX_CHAR_IN_BUF];
00408 Window FactWin;
00409 Display *theDisplay;
00410 struct defmodule* theModule = (struct defmodule *) EnvGetCurrentModule(theEnv);
00411
00412
00413
00414
00415 FactWin = XtWindow(facts);
00416 theDisplay = XtDisplay(facts);
00417 if(theModule != NULL)
00418 {
00419 name = EnvGetDefmoduleName(theEnv,theModule);
00420 strcpy(labelBuffer,"Fact Window(");
00421 strcat(labelBuffer,name);
00422 strcat(labelBuffer,")");
00423 }
00424 else
00425 {
00426 strcpy(labelBuffer,"Fact Window");
00427 }
00428 XStoreName(theDisplay,FactWin,labelBuffer);
00429
00430
00431
00432
00433 XtSetArg(TheArgs[0], XtNstring, "");
00434 XtSetValues(facts_text, TheArgs, 1);
00435 XawAsciiSourceFreeString(XawTextGetSource(facts_text));
00436
00437
00438
00439 fact_ptr = EnvGetNextFact(theEnv,NULL);
00440 while (fact_ptr != NULL)
00441 {
00442 EnvGetFactPPForm(theEnv,buffer,MAX_CHAR_IN_BUF - 1,fact_ptr);
00443 EnvPrintRouter(theEnv,"xfacts",buffer);
00444 EnvPrintRouter(theEnv,"xfacts", "\n");
00445 fact_ptr = EnvGetNextFact(theEnv,fact_ptr);
00446 }
00447 return 0;
00448 }
00449
00450
00451
00452
00453
00454
00455
00456 int PrintChangedInstances()
00457 {
00458 void *theEnv = GetCurrentEnvironment();
00459 int n = 0;
00460 void *instancePtr;
00461 char buffer[MAX_CHAR_IN_BUF];
00462 char *name, labelBuffer[MAX_CHAR_IN_BUF];
00463 Window InstanceWin;
00464 Display *theDisplay;
00465 struct defmodule* theModule = (struct defmodule *) EnvGetCurrentModule(theEnv);
00466
00467
00468
00469 InstanceWin = XtWindow(instances);
00470 theDisplay = XtDisplay(instances);
00471 if (theModule != NULL)
00472 {
00473 name = EnvGetDefmoduleName(theEnv,theModule);
00474 strcpy(labelBuffer,"Instances Window(");
00475 strcat(labelBuffer,name);
00476 strcat(labelBuffer,")");
00477 }
00478 else
00479 {
00480 strcpy(labelBuffer,"Instances Window");
00481 }
00482 XStoreName(theDisplay,InstanceWin,labelBuffer);
00483
00484
00485
00486
00487 XtSetArg(TheArgs[n],XtNstring,"");n++;
00488 XtSetValues(instances_text,TheArgs,n);
00489 XawAsciiSourceFreeString(XawTextGetSource(instances_text));
00490
00491 instancePtr = (void *) EnvGetNextInstance(theEnv,NULL);
00492 while (instancePtr != NULL)
00493 {
00494 EnvGetInstancePPForm(theEnv,buffer,MAX_CHAR_IN_BUF - 1,instancePtr);
00495 EnvPrintRouter(theEnv,"xinstances",buffer);
00496 EnvPrintRouter(theEnv,"xinstances","\n");
00497 instancePtr = (void *) EnvGetNextInstance(theEnv,instancePtr);
00498 }
00499
00500 return 0;
00501 }
00502
00503
00504
00505
00506
00507
00508
00509 int PrintChangedGlobals()
00510 {
00511 void *theEnv = GetCurrentEnvironment();
00512 void *dgPtr;
00513 int n;
00514 char *buffer;
00515 char *name,labelBuffer[MAX_CHAR_IN_BUF];
00516 Window GlobalWin;
00517 Display *theDisplay;
00518 struct defmodule* theModule = (struct defmodule *) EnvGetCurrentModule(theEnv);
00519
00520
00521
00522
00523 GlobalWin = XtWindow(globals);
00524 theDisplay = XtDisplay(globals);
00525 if (theModule != NULL)
00526 {
00527 name = EnvGetDefmoduleName(theEnv,theModule);
00528 strcpy(labelBuffer,"Globals Window(");
00529 strcat(labelBuffer,name);
00530 strcat(labelBuffer,")");
00531 }
00532 else
00533 {
00534 strcpy(labelBuffer,"Globals Window");
00535 }
00536 XStoreName(theDisplay,GlobalWin,labelBuffer);
00537
00538
00539
00540 n = 0;
00541 XtSetArg(TheArgs[n],XtNstring,"");n++;
00542 XtSetValues(globals_text,TheArgs,n);
00543 XawAsciiSourceFreeString(XawTextGetSource(globals_text));
00544
00545
00546
00547 dgPtr = EnvGetNextDefglobal(theEnv,NULL);
00548 while (dgPtr != NULL)
00549 {
00550 buffer = (char *) EnvGetDefglobalPPForm(theEnv,(struct constructHeader *) dgPtr);
00551 EnvPrintRouter(theEnv,"xglobals",buffer);
00552 EnvPrintRouter(theEnv,"xglobals","\n");
00553 dgPtr = EnvGetNextDefglobal(theEnv,dgPtr);
00554 }
00555
00556 return 0;
00557 }
00558
00559
00560
00561
00562
00563
00564
00565 int PrintChangedFocus()
00566 {
00567 void *theEnv = GetCurrentEnvironment();
00568 void *FocusPtr;
00569 int n;
00570 char *buffer;
00571
00572
00573 n = 0;
00574 XtSetArg(TheArgs[n],XtNstring,"");n++;
00575 XtSetValues(focus_text,TheArgs,n);
00576 XawAsciiSourceFreeString(XawTextGetSource(focus_text));
00577
00578
00579
00580 FocusPtr = EnvGetNextFocus(theEnv,NULL);
00581 while(FocusPtr != NULL)
00582 {
00583 buffer = EnvGetDefmoduleName(theEnv,((struct focus*)FocusPtr)->theModule);
00584 EnvPrintRouter(theEnv,"xfocus",buffer);
00585 EnvPrintRouter(theEnv,"xfocus","\n");
00586 FocusPtr = EnvGetNextFocus(theEnv,FocusPtr);
00587 }
00588 return 0;
00589 }
00590
00591
00592
00593
00594
00595
00596
00597
00598 void UpdateMenus()
00599 {
00600 void *theEnv = GetCurrentEnvironment();
00601 static long LastModuleIndex = -1;
00602 Boolean UpdateAll = False;
00603
00604 UpdateWindowsMenu();
00605 if(LastModuleIndex != DefmoduleData(theEnv)->ModuleChangeIndex)
00606 {
00607 UpdateAll = True;
00608 LastModuleIndex = DefmoduleData(theEnv)->ModuleChangeIndex;
00609 }
00610 #if DEFRULE_CONSTRUCT
00611 if((Browse_status[AGENDA_WIN] == True ) ? (UpdateAll || (EnvGetAgendaChanged(theEnv) == CLIPS_TRUE)) : FALSE)
00612 {
00613 EnvSetAgendaChanged(theEnv,CLIPS_FALSE);
00614 PrintChangedAgenda();
00615 }
00616
00617 if((Browse_status[FOCUS_WIN] == True) ? ( UpdateAll || (EnvGetFocusChanged(theEnv) == CLIPS_TRUE)) : FALSE)
00618 {
00619 EnvSetFocusChanged(theEnv,CLIPS_FALSE);
00620 PrintChangedFocus();
00621 }
00622
00623 #endif
00624
00625 #if DEFTEMPLATE_CONSTRUCT
00626 if((Browse_status[FACT_WIN] == True) ? ( UpdateAll || (EnvGetFactListChanged(theEnv) == CLIPS_TRUE)) : FALSE)
00627 {
00628 EnvSetFactListChanged(theEnv,CLIPS_FALSE);
00629 PrintChangedFacts();
00630 }
00631 #endif
00632
00633 #if OBJECT_SYSTEM
00634 if((Browse_status[INSTANCE_WIN]) ? (UpdateAll || (EnvGetInstancesChanged(theEnv) == CLIPS_TRUE)) : FALSE)
00635 {
00636 EnvSetInstancesChanged(theEnv,CLIPS_FALSE);
00637 PrintChangedInstances();
00638 }
00639 #endif
00640
00641 #ifdef DEFGLOBAL_CONSTRUCT
00642 if((Browse_status[GLOBAL_WIN] == True) ? (UpdateAll || (EnvGetGlobalsChanged(theEnv) == CLIPS_TRUE)) : FALSE)
00643 {
00644 EnvSetGlobalsChanged(theEnv,CLIPS_FALSE);
00645 PrintChangedGlobals();
00646 }
00647
00648 #endif
00649 }
00650
00651
00652
00653
00654
00655
00656
00657 void UpdateOptionsMenu()
00658 {
00659 int i;
00660 unsigned n = 0;
00661 void *theEnv = GetCurrentEnvironment();
00662
00663 XtSetArg(TheArgs[n], XtNleftBitmap, None);n++;
00664 for(i = 0; i <= RANDOM_STRATEGY;i++)
00665 XtSetValues(strategy_widgets[i], TheArgs, n);
00666 for(i = 0; i <= EVERY_CYCLE;i++)
00667 XtSetValues(sal_opt_widgets[i],TheArgs,n);
00668 n = 0;
00669 XtSetArg(TheArgs[n], XtNleftBitmap, checker);n++;
00670 XtSetValues(strategy_widgets[EnvGetStrategy(theEnv)],TheArgs,n);
00671 XtSetValues(sal_opt_widgets[EnvGetSalienceEvaluation(theEnv)],TheArgs,n);
00672 n = 0;
00673 if (EnvGetFactDuplication(theEnv))
00674 {
00675 XtSetArg(TheArgs[n], XtNstate,True);n++;
00676 XtSetValues(option_widgets[INT_FACT_DUPLICATION], TheArgs, n);
00677 }
00678 else
00679 {
00680 XtSetArg(TheArgs[n], XtNstate,False);n++;
00681 XtSetValues(option_widgets[INT_FACT_DUPLICATION], TheArgs, n);
00682 }
00683 n = 0;
00684 if (EnvGetDynamicConstraintChecking(theEnv))
00685 {
00686 XtSetArg(TheArgs[n], XtNstate,True);n++;
00687 XtSetValues(option_widgets[INT_DYN_CONSTRAINT_CHK], TheArgs, n);
00688 }
00689 else
00690 {
00691 XtSetArg(TheArgs[n], XtNstate,False);n++;
00692 XtSetValues(option_widgets[INT_DYN_CONSTRAINT_CHK], TheArgs, n);
00693 }
00694 n = 0;
00695 if (EnvGetStaticConstraintChecking(theEnv))
00696 {
00697 XtSetArg(TheArgs[n], XtNstate,True);n++;
00698 XtSetValues(option_widgets[INT_STA_CONSTRAINT_CHK], TheArgs, n);
00699 }
00700 else
00701 {
00702 XtSetArg(TheArgs[n], XtNstate,False);n++;
00703 XtSetValues(option_widgets[INT_STA_CONSTRAINT_CHK], TheArgs, n);
00704 }
00705 n = 0;
00706 if (EnvGetSequenceOperatorRecognition(theEnv))
00707 {
00708 XtSetArg(TheArgs[n], XtNstate,True);n++;
00709 XtSetValues(option_widgets[INT_SEQUENCE_OPT_REG], TheArgs, n);
00710 }
00711 else
00712 {
00713 XtSetArg(TheArgs[n], XtNstate,False);n++;
00714 XtSetValues(option_widgets[INT_SEQUENCE_OPT_REG], TheArgs, n);
00715 }
00716
00717 n = 0;
00718 if (EnvGetAutoFloatDividend(theEnv))
00719 {
00720 XtSetArg(TheArgs[n], XtNstate,True);n++;
00721 XtSetValues(option_widgets[INT_AUTO_FLOAT_DIV], TheArgs, n);
00722 }
00723 else
00724 {
00725 XtSetArg(TheArgs[n], XtNstate,False);n++;
00726 XtSetValues(option_widgets[INT_AUTO_FLOAT_DIV], TheArgs, n);
00727 }
00728 n = 0;
00729 if (EnvGetIncrementalReset(theEnv))
00730 {
00731 XtSetArg(TheArgs[n], XtNstate,True);n++;
00732 XtSetValues(option_widgets[INT_INCREMENTAL_RESET], TheArgs, n);
00733 }
00734 else
00735 {
00736 XtSetArg(TheArgs[n], XtNstate,False);n++;
00737 XtSetValues(option_widgets[INT_INCREMENTAL_RESET], TheArgs, n);
00738 }
00739 n = 0;
00740 if (EnvGetResetGlobals(theEnv))
00741 {
00742 XtSetArg(TheArgs[n], XtNstate,True);n++;
00743 XtSetValues(option_widgets[INT_RESET_GLOBALS], TheArgs, n);
00744 }
00745 else
00746 {
00747 XtSetArg(TheArgs[n], XtNstate,False);n++;
00748 XtSetValues(option_widgets[INT_RESET_GLOBALS], TheArgs, n);
00749 }
00750 }
00751
00752
00753
00754
00755
00756
00757
00758 static void UpdateWindowsMenu()
00759 {
00760 void *theEnv = GetCurrentEnvironment();
00761
00762
00763
00764
00765 if(list_change || list1_change )
00766 RefreshMngrList();
00767
00768
00769
00770
00771 if(EnvGetNextDefrule(theEnv,NULL))
00772 {
00773 XtSetArg(TheArgs[0], XtNsensitive, True);
00774 XtSetValues(defrule_manager, TheArgs, 1);
00775 }
00776 else
00777 {
00778 XtSetArg(TheArgs[0], XtNsensitive, False);
00779 XtSetValues(defrule_manager, TheArgs, 1);
00780 }
00781
00782
00783
00784
00785 if(EnvGetNextDeffacts(theEnv,NULL))
00786 {
00787 XtSetArg(TheArgs[0], XtNsensitive, True);
00788 XtSetValues(deffact_manager, TheArgs, 1);
00789 }
00790 else
00791 {
00792 XtSetArg(TheArgs[0], XtNsensitive, False);
00793 XtSetValues(deffact_manager, TheArgs, 1);
00794 }
00795
00796
00797
00798
00799 if(EnvGetNextDeftemplate(theEnv,NULL))
00800 {
00801 XtSetArg(TheArgs[0], XtNsensitive, True);
00802 XtSetValues(deftemplate_manager, TheArgs, 1);
00803 }
00804 else
00805 {
00806 XtSetArg(TheArgs[0], XtNsensitive, False);
00807 XtSetValues(deftemplate_manager, TheArgs, 1);
00808 }
00809
00810
00811
00812
00813 if(EnvGetNextDeffunction(theEnv,NULL))
00814 {
00815 XtSetArg(TheArgs[0], XtNsensitive, True);
00816 XtSetValues(deffunction_manager, TheArgs, 1);
00817 }
00818 else
00819 {
00820 XtSetArg(TheArgs[0], XtNsensitive, False);
00821 XtSetValues(deffunction_manager, TheArgs, 1);
00822 }
00823
00824
00825
00826
00827
00828 if(EnvGetNextDefglobal(theEnv,NULL))
00829 {
00830 XtSetArg(TheArgs[0], XtNsensitive, True);
00831 XtSetValues(defglobal_manager,TheArgs,1);
00832 }
00833 else
00834 {
00835 XtSetArg(TheArgs[0], XtNsensitive, False);
00836 XtSetValues(defglobal_manager,TheArgs,1);
00837 }
00838
00839
00840
00841
00842
00843 if(EnvGetNextDefgeneric(theEnv,NULL))
00844 {
00845 XtSetArg(TheArgs[0], XtNsensitive, True);
00846 XtSetValues(defgeneric_manager, TheArgs, 1);
00847 }
00848 else
00849 {
00850 XtSetArg(TheArgs[0], XtNsensitive, False);
00851 XtSetValues(defgeneric_manager, TheArgs, 1);
00852 }
00853
00854
00855
00856
00857
00858 if(EnvGetNextDefinstances(theEnv,NULL))
00859 {
00860 XtSetArg(TheArgs[0], XtNsensitive, True);
00861 XtSetValues(definstances_manager, TheArgs, 1);
00862 }
00863 else
00864 {
00865 XtSetArg(TheArgs[0], XtNsensitive, False);
00866 XtSetValues(definstances_manager, TheArgs, 1);
00867 }
00868
00869
00870
00871
00872
00873 if(EnvGetNextDefclass(theEnv,NULL))
00874 {
00875 XtSetArg(TheArgs[0], XtNsensitive, True);
00876 XtSetValues(defclass_manager, TheArgs, 1);
00877 }
00878 else
00879 {
00880 XtSetArg(TheArgs[0], XtNsensitive, False);
00881 XtSetValues(defclass_manager, TheArgs, 1);
00882 }
00883
00884
00885
00886
00887
00888 if(EnvGetNextActivation(theEnv,NULL))
00889 {
00890 XtSetArg(TheArgs[0], XtNsensitive, True);
00891 XtSetValues(agenda_manager, TheArgs, 1);
00892 }
00893 else
00894 {
00895 XtSetArg(TheArgs[0], XtNsensitive, False);
00896 XtSetValues(agenda_manager, TheArgs, 1);
00897 }
00898 }
00899
00900
00901
00902
00903
00904
00905
00906
00907 static int GetEvent(
00908 void *theEnv)
00909 {
00910 char ch[2];
00911 int i;
00912
00913 ch[1] = 0;
00914 quit_get_event = False;
00915
00916
00917
00918
00919
00920 XtSetArg(TheArgs[0],XtNsensitive,True);
00921 for (i = 0; i < 7; i++)
00922 { XtSetValues(FileItemWidgets[i],TheArgs,1); }
00923
00924 for (i = 0; i < 5; i++)
00925 { XtSetValues(ExecItemWidgets[i],TheArgs,1); }
00926
00927
00928
00929
00930
00931 UpdateMenus();
00932
00933 while (! quit_get_event)
00934 {
00935
00936
00937
00938
00939
00940
00941
00942
00943 XtAppNextEvent(app_con, &TheEvent);
00944 if (TheEvent.type == ButtonPress)
00945 {
00946 if ((TheEvent.xproperty.window == dialog_text->core.window) &&
00947 (!GetManagerList())&& (TheEvent.xbutton.button == Button2))
00948 { send_to_clips = True; }
00949 XtDispatchEvent(&TheEvent);
00950 }
00951 else
00952 {
00953 XtDispatchEvent(&TheEvent);
00954 set_clips_command(True);
00955 }
00956 }
00957
00958
00959
00960
00961
00962
00963 XtSetArg(TheArgs[0],XtNsensitive,False);
00964 for (i = 0; i < 7; i++)
00965 { XtSetValues(FileItemWidgets[i],TheArgs,1); }
00966
00967 for (i = 0; i < 5; i++)
00968 { XtSetValues(ExecItemWidgets[i],TheArgs,1); }
00969
00970 XtSetValues(defrule_manager,TheArgs,1);
00971 XtSetValues(deffact_manager,TheArgs,1);
00972 XtSetValues(deftemplate_manager,TheArgs,1);
00973 XtSetValues(deffunction_manager,TheArgs,1);
00974 XtSetValues(defgeneric_manager,TheArgs,1);
00975 XtSetValues(definstances_manager,TheArgs,1);
00976 XtSetValues(defclass_manager,TheArgs,1);
00977 XtSetValues(agenda_manager,TheArgs,1);
00978
00979 return 0;
00980 }
00981
00982
00983
00984
00985
00986
00987
00988
00989 static int InitalizeLogTable()
00990 {
00991 register int i;
00992
00993 for (i = 0; i < LOG_TABLE_SIZE; i++)
00994 { log_table[i] = NULL; }
00995
00996 if ((xclips_log = LogInsert("wclips")) == NULL)
00997 { return(FALSE); }
00998
00999 if (LogInsert("wdialog") == NULL)
01000 { return(FALSE); }
01001
01002 if (LogInsert("wdisplay") == NULL)
01003 return(FALSE);
01004
01005 if (LogInsert("wwarning") == NULL)
01006 return(FALSE);
01007
01008 if (LogInsert("werror") == NULL)
01009 return(FALSE);
01010
01011 if (LogInsert("wtrace") == NULL)
01012 return(FALSE);
01013
01014 if (LogInsert("wagenda") == NULL)
01015 return(FALSE);
01016
01017 if ((stdin_log = LogInsert("stdin")) == NULL)
01018 return(FALSE);
01019
01020 if (LogInsert("stdout") == NULL)
01021 return(FALSE);
01022
01023 if ((xagenda_log = LogInsert("xagenda")) == NULL)
01024 return(FALSE);
01025
01026 if ((xfacts_log = LogInsert("xfacts")) == NULL)
01027 return(FALSE);
01028
01029 if ((xinstances_log = LogInsert("xinstances")) == NULL)
01030 return(FALSE);
01031
01032 if ((xglobals_log = LogInsert("xglobals")) == NULL)
01033 return(FALSE);
01034
01035 if ((xfocus_log = LogInsert("xfocus")) == NULL)
01036 return(FALSE);
01037
01038 return(TRUE);
01039 }
01040
01041
01042
01043
01044
01045
01046
01047 static void ReleaseLogTable()
01048 {
01049 register int i;
01050 LogNamePtr ptr1, ptr2;
01051
01052 for(i = 0; i < LOG_TABLE_SIZE; i++)
01053 {
01054 ptr1 = log_table[i];
01055 while(ptr1 != NULL)
01056 {
01057 ptr2 = ptr1;
01058 ptr1 = ptr1->next;
01059 release(ptr2->name);
01060 release(ptr2);
01061 }
01062 log_table[i] = NULL;
01063 }
01064 }
01065
01066
01067
01068
01069
01070
01071
01072 static LogNamePtr LogInsert(
01073 char *logname)
01074 {
01075 register int i;
01076 LogNamePtr node, ptr;
01077
01078 i = GetHashValue(logname, LOG_TABLE_SIZE);
01079
01080 if((node = balloc(1, LogName)) == NULL)
01081 return(NULL);
01082 if((node->name = balloc (strlen(logname)+1, char)) == NULL)
01083 {
01084 release(node);
01085 return(NULL);
01086 }
01087 strcpy(node->name, logname);
01088 node->next = NULL;
01089 if(log_table[i] == NULL)
01090 log_table[i] = node;
01091 else
01092 {
01093 ptr = log_table[i];
01094 while(ptr != NULL)
01095 {
01096 if(strcmp(ptr->name, logname) == 0)
01097 {
01098 release(node->name);
01099 release(node);
01100 return(NULL);
01101 }
01102 if(ptr->next == NULL)
01103 break;
01104 ptr = ptr->next;
01105 }
01106 ptr->next = node;
01107 }
01108 return(node);
01109 }
01110
01111
01112
01113
01114
01115
01116
01117 static LogNamePtr LogLookup(
01118 char *logname)
01119 {
01120 LogNamePtr ptr;
01121
01122 ptr = log_table[GetHashValue(logname, LOG_TABLE_SIZE)];
01123 while (ptr != NULL)
01124 {
01125 if(strcmp(logname, ptr->name) == 0)
01126 return(ptr);
01127 ptr = ptr->next;
01128 }
01129 return(NULL);
01130 }
01131
01132
01133
01134
01135
01136
01137
01138
01139
01140
01141
01142
01143
01144 static int GetHashValue(
01145 char *str,
01146 int size)
01147 {
01148 register unsigned i;
01149 unsigned hvalue;
01150
01151 for(i = 0, hvalue = 0; str[i] != EOS; i++)
01152 hvalue += ((unsigned)str[i])*(i+1);
01153 hvalue %= (unsigned)size;
01154 return((int)hvalue);
01155 }
01156
01157
01158
01159
01160
01161
01162
01163 int set_clips_command(
01164 int flag)
01165 {
01166 send_clips_command = flag;
01167 return 0;
01168 }
01169
01170
01171
01172
01173
01174
01175
01176 int get_clips_command()
01177 {
01178 return(send_clips_command);
01179 }
01180
01181
01182
01183
01184
01185
01186
01187
01188
01189
01190 static void PeriodicUpdate(
01191 void *theEnv)
01192 {
01193 periodicChecking = True;
01194
01195 while(XtAppPending(app_con) != 0)
01196 {
01197 XtAppNextEvent(app_con, &TheEvent);
01198 XtDispatchEvent(&TheEvent);
01199 }
01200
01201 periodicChecking = False;
01202
01203 if((Browse_status[AGENDA_WIN] == True) ? (EnvGetAgendaChanged(theEnv) == CLIPS_TRUE) : FALSE)
01204 {
01205 PrintChangedAgenda();
01206 EnvSetAgendaChanged(theEnv,CLIPS_FALSE);
01207 }
01208 if((Browse_status[FACT_WIN] == True) ? (EnvGetFactListChanged(theEnv) == CLIPS_TRUE) : FALSE)
01209 {
01210 PrintChangedFacts();
01211 EnvSetFactListChanged(theEnv,CLIPS_FALSE);
01212 }
01213 if((Browse_status[INSTANCE_WIN] == True) ? (EnvGetInstancesChanged(theEnv) == CLIPS_TRUE) : FALSE)
01214 {
01215 PrintChangedInstances();
01216 EnvSetInstancesChanged(theEnv,CLIPS_FALSE);
01217 }
01218 if((Browse_status[GLOBAL_WIN] == True) ? (EnvGetGlobalsChanged(theEnv) == CLIPS_TRUE) : FALSE)
01219 {
01220 PrintChangedGlobals();
01221 EnvSetGlobalsChanged(theEnv,CLIPS_FALSE);
01222 }
01223 if((Browse_status[FOCUS_WIN] == True) ? (EnvGetFocusChanged(theEnv) == CLIPS_TRUE) :FALSE)
01224 {
01225 PrintChangedFocus();
01226 EnvSetFocusChanged(theEnv,CLIPS_FALSE);
01227 }
01228
01229 }
01230