#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 = 600; env.ymax = 600; 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); realize_environment(main_form,&env); 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) { printf("%s read\n",buf); 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); return; } if (!strcmp("circle",tolk1)) { int xc,yc,r; xc = atoi(strtok(NULL," ")); yc = atoi(strtok(NULL," ")); r = atoi(strtok(NULL," ")); draw_circle(env,xc,yc,r); return; } if (!strcmp("output",tolk1)) { print_screen(env); return; } if (!strcmp("clear",tolk1)) { Clear_Screen(env); return; } if (!strcmp("paint",tolk1)) { int color; color = atoi(strtok(NULL," ")); paint_screen(env,color); return; } if (!strcmp("width",tolk1)) { int width; width = atoi(strtok(NULL," ")); SetWidth(env,width); return; } if (!strcmp("dashp",tolk1)) { int count,offset,i; char * the_list; count = atoi(strtok(NULL," ")); the_list = malloc(count); for(i=0;i