#include #include #include #include #include #include #include #include #include #include #include #define MAXU 7 void quitcallback(Widget w, XtPointer clientData, XtPointer callData); void quitpartcallback(Widget w, XtPointer clientData, XtPointer callData); void YesValueChangedCallback ( Widget w, XtPointer clientData, XtPointer callData ); /* void ReportValueCallback ( Widget w, XtPointer clientData, XtPointer callData ); */ void NoValueChangedCallback ( Widget w, XtPointer clientData, XtPointer callData ); void sendcallback(Widget w, XtPointer clientData, XtPointer callData); void stusendcallback(Widget w, XtPointer clientData, XtPointer callData); Widget toplevel[MAXU],form[MAXU],send,text[MAXU],countdown[MAXU], count[MAXU]; Widget yestoggle[MAXU],stusend[MAXU],quitpart[MAXU]; Widget yeslabel[MAXU],nolabel[MAXU],yesbox[MAXU],nobox[MAXU],quit,notoggle[MAXU]; int num[MAXU], out[MAXU], f; int NC,i,flag,yescount,nocount,next,noc; main(argc, argv) int argc; char *argv[]; { XtAppContext app; Display *dpy[MAXU]; yescount = 0; nocount = 0; flag = 0; for(i=0;i<=MAXU-1;i++){ num[i] = 0; out[i] =0;} f=1; /* * Other declarations ..... */ /* * Initialize the Intrinsics */ XtToolkitInitialize(); /* * Create a context. */ app = XtCreateApplicationContext(); if (argc ==1) NC = argc; else NC = argc-1; noc = NC-1; next= NC-2; /* * Open the display. */ for(i=1;i<=NC;i++){ dpy[i] = XtOpenDisplay(app, argv[i], argv[0], "Memo", NULL, 0, &argc, argv); /* * Create a toplevel shell. */ toplevel[i] = XtAppCreateShell(app, "Memo", applicationShellWidgetClass, dpy[i], NULL,0); form[i] = XtCreateManagedWidget ( "form", xmFormWidgetClass, toplevel[i], NULL, 0 ); if(i==1){ text[i] = XtVaCreateManagedWidget ( "text", xmTextWidgetClass, form[i], XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL ); send = XtVaCreateManagedWidget ( "send", xmPushButtonWidgetClass, form[i], XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, text[i], XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 100, XmNrightAttachment, XmATTACH_NONE, NULL ); countdown[i] = XtVaCreateManagedWidget ( "countdown", xmLabelWidgetClass, form[i], XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, send, XmNtopOffset, 15, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, NULL ); count[i] = XtVaCreateManagedWidget ( "count", xmScaleWidgetClass, form[i], XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, send, XmNshowValue, TRUE, XmNminimum, 0, XmNmaximum, 5, XmNsensitive, FALSE, XmNorientation, XmHORIZONTAL, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, countdown[i], XmNrightAttachment, XmATTACH_NONE, XmNvalue, noc, NULL ); yeslabel[i] = XtVaCreateManagedWidget ( "yes", xmLabelWidgetClass, form[i], XmNleftAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, countdown[i], XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL ) ; yesbox[i] = XtVaCreateManagedWidget ( "yesbox", xmScaleWidgetClass, form[i], XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, countdown[i], XmNshowValue, TRUE, XmNsensitive, FALSE, XmNminimum, 0, XmNmaximum, 5, XmNorientation, XmHORIZONTAL, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, yeslabel[i], XmNrightAttachment, XmATTACH_NONE, NULL ); nolabel[i] = XtVaCreateManagedWidget ( "no", xmLabelWidgetClass, form[i], XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, yesbox[i], XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, count[i], XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL ) ; nobox[i] = XtVaCreateManagedWidget ( "nobox", xmScaleWidgetClass, form[i], XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, count[i], XmNshowValue, TRUE, XmNminimum, 0, XmNmaximum, 5, XmNorientation, XmHORIZONTAL, XmNsensitive, FALSE, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, nolabel[i], XmNrightAttachment, XmATTACH_NONE, NULL ); quit = XtVaCreateManagedWidget ( "quit", xmPushButtonWidgetClass, form[i], XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, yesbox[i], XmNtopOffset, 5, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 100, XmNrightAttachment, XmATTACH_NONE, NULL ); } } XtAddCallback(quit,XmNactivateCallback,quitcallback,NULL); XtAddCallback(send,XmNactivateCallback,sendcallback,NULL); /* XtAddCallback ( yesbox[1], XmNvalueChangedCallback, ReportValueCallback, NULL ); XtAddCallback ( nobox[1], XmNvalueChangedCallback, ReportValueCallback, NULL ); */ XtRealizeWidget(toplevel[1]); XtAppMainLoop(app); } void quitcallback(Widget w, XtPointer clientData, XtPointer callData) { int j; XmAnyCallbackStruct *cbs= (XmAnyCallbackStruct *) callData; for (j=1;j<=NC;j++) if(num[j] == 0) XtDestroyWidget(toplevel[j]); exit(0); } void sendcallback(Widget w, XtPointer clientData, XtPointer callData) {int j; char *input; input = XmTextGetString(text[1]); XtVaSetValues(send,XmNsensitive,FALSE,NULL); for(j=2;j<=NC;j++) { text[j] = XtVaCreateManagedWidget ( input, xmLabelWidgetClass, form[j], XmNalignment, XmALIGNMENT_BEGINNING, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL ); yestoggle[j] = XtVaCreateManagedWidget ( "yes", xmToggleButtonWidgetClass, form[j], XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, text[j], XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 30, XmNrightAttachment, XmATTACH_NONE, NULL ); notoggle[j] = XtVaCreateManagedWidget ( "no", xmToggleButtonWidgetClass, form[j], XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, text[j], XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, yestoggle[j], XmNleftOffset, 30, XmNrightAttachment, XmATTACH_NONE, NULL ); stusend[j] = XtVaCreateManagedWidget ( "send", xmPushButtonWidgetClass, form[j], XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, yestoggle[j], XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 100, XmNrightAttachment, XmATTACH_NONE, NULL ); countdown[j] = XtVaCreateManagedWidget ( "countdown", xmLabelWidgetClass, form[j], XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, stusend[j], XmNtopOffset, 15, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, NULL ); count[j] = XtVaCreateManagedWidget ( "count", xmScaleWidgetClass, form[j], XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, stusend[j], XmNshowValue, TRUE, XmNminimum, 0, XmNmaximum, 5, XmNsensitive, FALSE, XmNorientation, XmHORIZONTAL, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, countdown[j], XmNrightAttachment, XmATTACH_NONE, XmNvalue, noc, NULL ); yeslabel[j] = XtVaCreateManagedWidget ( "yes", xmLabelWidgetClass, form[j], XmNleftAttachment, XmATTACH_FORM, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, countdown[j], XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL ) ; yesbox[j] = XtVaCreateManagedWidget ( "yesbox", xmScaleWidgetClass, form[j], XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, countdown[j], XmNshowValue, TRUE, XmNminimum, 0, XmNmaximum, 5, XmNorientation, XmHORIZONTAL, XmNsensitive, FALSE, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, yeslabel[j], XmNrightAttachment, XmATTACH_NONE, NULL ); nolabel[j] = XtVaCreateManagedWidget ( "no", xmLabelWidgetClass, form[j], XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, yesbox[j], XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, count[j], XmNrightAttachment, XmATTACH_NONE, XmNbottomAttachment, XmATTACH_NONE, NULL ) ; nobox[j] = XtVaCreateManagedWidget ( "nobox", xmScaleWidgetClass, form[j], XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, count[j], XmNshowValue, TRUE, XmNminimum, 0, XmNmaximum, 5, XmNorientation, XmHORIZONTAL, XmNsensitive, FALSE, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, nolabel[j], XmNrightAttachment, XmATTACH_NONE, NULL ); quitpart[j] = XtVaCreateManagedWidget ( "quit", xmPushButtonWidgetClass, form[j], XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, yesbox[j], XmNtopOffset, 5, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNleftOffset, 100, XmNrightAttachment, XmATTACH_NONE, NULL ); XtAddCallback ( yestoggle[j], XmNvalueChangedCallback, YesValueChangedCallback, NULL ); XtAddCallback ( notoggle[j], XmNvalueChangedCallback, NoValueChangedCallback, NULL ); /* XtAddCallback ( yesbox[j], XmNvalueChangedCallback, ReportValueCallback, NULL ); XtAddCallback ( nobox[j], XmNvalueChangedCallback, ReportValueCallback, NULL ); */ XtAddCallback(stusend[j],XmNactivateCallback,stusendcallback,NULL); XtAddCallback(quitpart[j],XmNactivateCallback,quitpartcallback,NULL); XtRealizeWidget(toplevel[j]); } } void YesValueChangedCallback ( Widget w, XtPointer clientData, XtPointer callData ) { int j; XmToggleButtonCallbackStruct *cbs = ( XmToggleButtonCallbackStruct * ) callData; if (cbs->set){ for(j=2;j<=NC;j++) if (w == yestoggle[j]) XtVaSetValues(notoggle[j],XmNset, FALSE, NULL); flag = 1;} } void NoValueChangedCallback ( Widget w, XtPointer clientData, XtPointer callData ) {int j; XmToggleButtonCallbackStruct *cbs = ( XmToggleButtonCallbackStruct * ) callData; if (cbs->set){ for(j=2;j<=NC;j++) if (w == notoggle[j]) XtVaSetValues(yestoggle[j],XmNset, FALSE, NULL); flag = 2;} } void quitpartcallback(Widget w, XtPointer clientData, XtPointer callData) {int j,p,x; XmAnyCallbackStruct *cbs= (XmAnyCallbackStruct *) callData; x =0; for(j=2;j<=NC;j++){ if(w == quitpart[j]){ XtDestroyWidget(toplevel[j]); num[j]= 1; if (out[j] == 1) x =1; } } for(j=1;j<=NC;j++) if (num[j]== 0) XtVaSetValues(count[j],XmNvalue,next,NULL); next = next-1; if (x == 1) next = next + 1; } void stusendcallback(Widget w, XtPointer clientData, XtPointer callData) {int j; if (flag == 1){ yescount= yescount +1; for(j=1;j<=NC;j++) if(num[j] == 0) XtVaSetValues(yesbox[j], XmNvalue, yescount,NULL);} if(flag == 2){ nocount = nocount +1; for(j=1;j<=NC;j++) if(num[j] == 0) XtVaSetValues(nobox[j],XmNvalue, nocount,NULL); } for(j=1;j<=NC;j++){ if (num[j]== 0) XtVaSetValues(count[j],XmNvalue,next,NULL); } for(j=1;j<=NC;j++) if (w == stusend[j]) out[j] =1; next = next-1; XtVaSetValues(w,XmNsensitive,FALSE,NULL); flag = 0; }