/*----------------------------------------------------------------------*/ /* Main program--X-Windows manager (event-driven) */ /*----------------------------------------------------------------------*/ #include #include #include "function_exp.h" #include "globals.h" #include "menudefs.h" void main(argc, argv) char ** argv; int argc; { Widget toplevel; WidgetList mbuttons, menu_mgr, mgr_shell; int i, n, j, k, smenusize; Arg wargs[10]; Dimension height; menu_struct *thismenu; mbuttons = (WidgetList) XtMalloc(entries(Mainmenu) * sizeof(Widget)); menu_mgr = (WidgetList) XtMalloc((entries(Mainmenu)-1) * sizeof(Widget)); mgr_shell = (WidgetList) XtMalloc((entries(Mainmenu)-1) * sizeof(Widget)); /*---------------------------------- Set Default Behaviour of Variables ----------------------------------*/ eta = .06; epsilon = .1; starteps = endeps = 0; LRunTrain = LRunSample = FALSE; update = 10; Digital = FALSE; Sigmoid = Tanh; DSig = DTanh; Limiter = Signum; drawtype = DrawNet; learntype = TDNNTrain; Interrupt = FALSE; Recurrent = FALSE; trainsamp = FALSE; LLastPat = FALSE; LSelf = FALSE; RanMag = .05; Step = FALSE; weightnorm = 1.0; no_patterns = no_samples = 0; strcpy(weightfile, " "); strcpy(trainfile, " "); strcpy(samplefile, " "); strcpy(pixtitle, "Time Delay Neural Network"); Network.layers = 3; for (i = 0; i < Network.layers; i++) { Network.nodes[i] = 3; Network.taps[i] = 3; } for (i = 0; i < 3; i++) { redpixcolorpos[i] = 0; greenpixcolorpos[i] = 65535; bluepixcolorpos[i] = 0; redpixcolorneg[i] = 65535; greenpixcolorneg[i] = 0; bluepixcolorneg[i] = 0; } /*---------------------------------- Generate windows ----------------------------------*/ toplevel = XtInitialize(argv[0], "Xtdnn", NULL, ZERO, &argc, argv); if (argc != 1) Syntax(argv[0]); form = XtCreateManagedWidget("form", XwformWidgetClass, toplevel, NULL, ZERO); for (i = 0; i < entries(Mainmenu); i++) { n = 4; XtSetArg(wargs[0], XtNlabel, Mainmenu[i].name); if (i > 0) XtSetArg(wargs[1], XtNxRefName, (XtArgVal) Mainmenu[i-1].name); else XtSetArg(wargs[1], XtNxRefName, (XtArgVal) "form"); XtSetArg(wargs[2], XtNyRefName, (XtArgVal) "form"); XtSetArg(wargs[3], XtNyAttachBottom, FALSE); if (i > 0) { XtSetArg(wargs[4], XtNxAddWidth, TRUE); n++; } mbuttons[i] = XtCreateWidget(Mainmenu[i].name, XwmenuButtonWidgetClass, form, wargs, n); if (i == 0) XtAddCallback(mbuttons[i], XtNselect, Mainmenu[i].func, NULL); else { mgr_shell[i-1] = XtCreatePopupShell("mgr_shell", shellWidgetClass, mbuttons[i], NULL, ZERO); menu_mgr[i-1] = XtCreateManagedWidget("menu_mgr", XwpopupmgrWidgetClass, mgr_shell[i-1], NULL, ZERO); } } XtManageChildren(mbuttons, 4); /* create window for writing obnoxious messages */ XtSetArg(wargs[0], XtNheight, &height); XtGetValues(mbuttons[0], wargs, 1); XtSetArg(wargs[0], XtNxAttachRight, TRUE); XtSetArg(wargs[1], XtNxRefName, (XtArgVal) Mainmenu[entries(Mainmenu) - 1].name); XtSetArg(wargs[5], XtNxResizable, TRUE); XtSetArg(wargs[6], XtNheight, height); message = XtCreateManagedWidget("message", XwstatictextWidgetClass, form, wargs, 7); XtSetArg(wargs[0], XtNxRefName, (XtArgVal) "form"); XtSetArg(wargs[1], XtNyRefName, (XtArgVal) Mainmenu[0].name); XtSetArg(wargs[2], XtNyAttachBottom, TRUE); XtSetArg(wargs[3], XtNyAddHeight, TRUE); XtSetArg(wargs[4], XtNxResizable, TRUE); XtSetArg(wargs[5], XtNyResizable, TRUE); /* create window for graphing network results */ graph = XtCreateManagedWidget("graph", XwworkSpaceWidgetClass, form, wargs, 6); XtSetArg(wargs[0], XtNxRefName, (XtArgVal) "graph"); XtSetArg(wargs[6], XtNxAttachRight, TRUE); XtSetArg(wargs[7], XtNxAddWidth, TRUE); XtAddCallback(graph, XtNexpose, DrawGraph, NULL); XtAddCallback(graph, XtNresize, DrawGraph, NULL); /* create window for drawing neural network */ pix = XtCreateManagedWidget("pix", XwworkSpaceWidgetClass, form, wargs, 8); XtAddCallback(pix, XtNexpose, drawtype, NULL); XtAddCallback(pix, XtNresize, drawtype, NULL); for (k = 0; k < (entries(Mainmenu) - 1); k++) { thismenu = Mainmenu[k+1].submenu; smenusize = Mainmenu[k+1].size; if (thismenu != NULL) { create_pane(menu_mgr[k], "menu_mgr", Mainmenu[k+1].name, thismenu, smenusize); for (j = 0; j < smenusize; j++) { if (thismenu[j].submenu != NULL) create_pane(menu_mgr[k], thismenu[j].name, thismenu[j].name, thismenu[j].submenu, thismenu[j].size ); } } } /*---------------------------------- Initialize graphics screens ----------------------------------*/ randomizeweights(); dpy = XtDisplay(pix); create_gc(); /*---------------------------------- Draw windows and wait for event ----------------------------------*/ XtRealizeWidget(toplevel); XtMainLoop(); }