#include #include #include #include #include #include #include #define SleepTime 10 XtAppContext app_con; Widget app_sh; Display *dpy; int scr; GC gc; static Widget StartButton, StopButton; static Boolean Running = False; static void TimeoutProc(cl,id) XtPointer cl; XtIntervalId *id; { one_step(); if (Running) XtAppAddTimeOut(app_con,SleepTime,TimeoutProc,NULL); } static void QuitCB(w,cl,cd) Widget w; XtPointer cl,cd; { exit(0); } static void ResetCB(w,cl,cd) Widget w; XtPointer cl,cd; { domain_init(0); } static void StartCB(w,cl,cd) Widget w; XtPointer cl,cd; { XtVaSetValues(StartButton,XmNsensitive,False,NULL); XtVaSetValues(StopButton,XmNsensitive,True,NULL); Running = True; XtAppAddTimeOut(app_con,SleepTime,TimeoutProc,NULL); } static void StopCB(w,cl,cd) Widget w; XtPointer cl,cd; { XtVaSetValues(StartButton,XmNsensitive,True,NULL); XtVaSetValues(StopButton,XmNsensitive,False,NULL); Running = False; } static void ShowPhCB(w,cl,cd) Widget w; XtPointer cl,cd; { extern int ShowPheromone; ShowPheromone = ((XmToggleButtonCallbackStruct *)cd)->set; } static void EnablePhCB(w,cl,cd) Widget w; XtPointer cl,cd; { extern int EnablePheromone; EnablePheromone = ((XmToggleButtonCallbackStruct *)cd)->set; } static void RedrawCB(w,cl,cd) Widget w; XtPointer cl,cd; { redraw(((XmDrawingAreaCallbackStruct *)cd)->event); } static void create_menus(bar) Widget bar; { Widget button, menu; Arg args[2]; XtManageChild(button=XmCreateCascadeButton(bar,"Quit",NULL,0)); XtAddCallback(button,XmNactivateCallback,QuitCB,NULL); XtManageChild(button=XmCreateCascadeButton(bar,"Reset",NULL,0)); XtAddCallback(button,XmNactivateCallback,ResetCB,NULL); menu = XmCreatePulldownMenu(bar,"ViewMenu",NULL,0); XtSetArg(args[0],XmNset,True); XtManageChild(button=XmCreateToggleButton(menu,"ShowPh",args,1)); XtAddCallback(button,XmNvalueChangedCallback,ShowPhCB,NULL); XtManageChild(button=XmCreateToggleButton(menu,"EnablePh",args,1)); XtAddCallback(button,XmNvalueChangedCallback,EnablePhCB,NULL); XtSetArg(args[0],XmNsubMenuId,menu); XtManageChild(button=XmCreateCascadeButton(bar,"View",args,1)); XtManageChild(StartButton=XmCreateCascadeButton(bar,"Start",NULL,0)); XtAddCallback(StartButton,XmNactivateCallback,StartCB,NULL); XtSetArg(args[0],XmNsensitive,False); XtManageChild(StopButton=XmCreateCascadeButton(bar,"Stop",args,1)); XtAddCallback(StopButton,XmNactivateCallback,StopCB,NULL); } main(argc,argv) int argc; char *argv[]; { Widget menu_bar, main, work; extern String fallback_resources[]; app_sh = XtAppInitialize(&app_con,"Ant",NULL,0, &argc,argv,fallback_resources,NULL,0); dpy = XtDisplay(app_sh); scr = DefaultScreen(dpy); gc = DefaultGC(dpy,scr); XtManageChild(main=XmCreateMainWindow(app_sh,"main",NULL,0)); XtManageChild(menu_bar=XmCreateMenuBar(main,"menu_bar",NULL,0)); create_menus(menu_bar); XtManageChild(work=XmCreateDrawingArea(main,"field",NULL,0)); XtRealizeWidget(app_sh); domain_init(XtWindow(work)); XtAddCallback(work,XmNexposeCallback,RedrawCB,NULL); XtAppMainLoop(app_con); }