#include #include #include #include #include #include #include "mygraph.h" #include "point.h" #include "line.h" #include "Xroutines.h" static void parse_command(Widget where, XtPointer cd, XtPointer cld); void parse_text(char * ch, environment * env); static void drawing_board_expose(Widget where, XtPointer cd, XtPointer cld) { Clear_Screen((environment * )cd); } main (int argc, char * argv[]) { XtAppContext app_context; Widget toplevel,main_form,dialog_box; Arg args[10]; int nargs=0; environment env; env.xmax = 400; env.ymax = 400; toplevel = XtAppInitialize(&app_context,NULL,NULL,0, &argc,argv,NULL,args,nargs); nargs = 0; XtSetArg(args[nargs],XmNshowSeparator,True); nargs++; main_form = XtCreateManagedWidget("form",xmMainWindowWidgetClass, toplevel,args,nargs); /*XtManageChild(main_form);*/ nargs=0; XtSetArg(args[nargs],XmNwidth,env.xmax); nargs++; XtSetArg(args[nargs],XmNheight,env.ymax); nargs++; env.db = XtCreateManagedWidget("msgs",xmDrawingAreaWidgetClass, main_form, args,nargs); /* XtManageChild(env.db);*/ XtAddCallback(env.db,XmNexposeCallback, drawing_board_expose,&env); setup_environment(&env); nargs = 0; dialog_box = XmCreateTextField(main_form,"Command",args,nargs); XtManageChild(dialog_box); XtAddCallback(dialog_box,XmNactivateCallback,parse_command ,&env); XmMainWindowSetAreas(main_form, NULL, dialog_box, NULL, NULL, env.db); XtRealizeWidget(toplevel); XtAppMainLoop(app_context); } static void parse_command(Widget where, XtPointer cd, XtPointer cld) { char * p; char * value; value = NULL; p = XmTextFieldGetString(where); XmTextFieldSetString(where,value); parse_text(p,(environment *) cd); } void read_from_file(char * fn, environment * env) { FILE * fd; char buf[400]; fd = fopen(fn,"r"); if (fd != NULL) { while ( fgets(buf,400,fd) != NULL) { parse_text(buf,env); } fclose(fd); } } void parse_text(char * ch, environment * env) { char * tolk1; tolk1 = strtok(ch," "); if (!strcmp("quit",tolk1)) { exit(0); } if (!strcmp("line",tolk1)) { line ln; ln.e1.x = atoi(strtok(NULL," ")); ln.e1.y = atoi(strtok(NULL," ")); ln.e2.x = atoi(strtok(NULL," ")); ln.e2.y = atoi(strtok(NULL," ")); dc_draw_line(ln,env); return; } if (!strcmp("point",tolk1)) { point pt; pt.x = atoi(strtok(NULL," ")); pt.y = atoi(strtok(NULL," ")); dc_draw_point(pt,env); return; } if (!strcmp("read",tolk1)) { char * tolk2; tolk2 = strtok(NULL," "); read_from_file(tolk2,env); } if (!strcmp("circle",tolk1)) { draw_circle(env); } if (!strcmp("circle2",tolk1)) { draw_circle2(env); } if (!strcmp("circle3",tolk1)) { draw_circle3(env); } if (!strcmp("circle4",tolk1)) { draw_circle4(env); } if (!strcmp("output",tolk1)) { print_screen(env); } if (!strcmp("clear",tolk1)) { Clear_Screen(env); } if (!strcmp("paint",tolk1)) { int color; color = atoi(strtok(NULL," ")); paint_screen(env,color); } }