/***************************************************************** CS576 Assignment#3 (motif) By: Sahar M. Ghanem *********** *******************************************************/ /*-----------------------------Includes----------------------------*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include /*-------------------------------Defines---------------------------*/ #define MINUSERS 2 #define MAXUSERS 6 #define CHOICES 4 #define EXIST 0 #define SEND 1 #define QUIT 2 #define QUITMSG "Really Quit ?" #define GOPIZZAMSG " *** GoPizza *** " #define COUNTDOWNMSG " Count Down " #define LIKEMSG "Like" #define DISLIKEMSG "Dislike" #define TOPPINGMSG " ** Toppings ** " #define TOTALMSG " Totals" #define LIKETITLE " Like Totals" #define DISLIKETITLE " Dislike Totals" #define SENDTITLE " Send " #define QUITTITLE " Quit " /*--------------------------------Typedefs-----------------------*/ typedef struct { Widget shell,top_form, top_frame,gopizza_label,countdown_rowcol,countdown_title,countdown_label, middle_frame,middle_rowcol, ch_rowcol[CHOICES+1],like_toggle[CHOICES],dislike_toggle[CHOICES], topping_label[CHOICES+1], like_label[CHOICES+1],dislike_label[CHOICES+1], bottom_frame,bottom_rowcol,send_button,quit_button, dialog, table_form,table_frame,table_rowcol,table_label[MAXUSERS+3][CHOICES+1],table_button;} widgetset; /*--------------------------------Prototypes------------------------*/ void InitData(); void ChangeState(int flag); void Tabulate(); void sendCallback(Widget w,XtPointer clientdata,XtPointer calldata); void quitCallback(Widget w,XtPointer clientdata,XtPointer calldata); void reallyquitCallback(Widget w,XtPointer clientdata,XtPointer calldata); void tablequitCallback(Widget w,XtPointer clientdata,XtPointer calldata); /*----------------------------Global data----------------------------*/ widgetset user[MAXUSERS]; int nusers,countdown, user_state[MAXUSERS],like_totals[CHOICES],dislike_totals[CHOICES]; Boolean like_table[MAXUSERS][CHOICES],dislike_table[MAXUSERS][CHOICES]; char *toppings[]={" Mushrooms"," Onions"," Black Olives"," Green peppers"}; /*********************************************************************/ /*--------------------------------Main-------------------------------*/ main(int argc, char *argv[]) { XtAppContext app; Display *display[MAXUSERS]; int i,j; char str[50]; long bg; if( (argc < (MINUSERS+1)) || (argc > (MAXUSERS+1)) ) { printf("\n No of users must be %d-%d \n",MINUSERS,MAXUSERS); exit (-1); } else nusers=argc-1; XtToolkitInitialize(); app = XtCreateApplicationContext(); for(i=0;i< nusers;i++) if ( (display[i] = XtOpenDisplay(app, argv[i+1],argv[0], "disp", NULL, 0,&argc, argv))==NULL) { printf("\n Error in display %s \n",argv[i+1]); exit (-1); } InitData(); for(i=0;i0) { user[i].like_toggle[j-1]=XtCreateManagedWidget(LIKEMSG,xmToggleButtonWidgetClass,user[i].ch_rowcol[j],NULL,0); user[i].dislike_toggle[j-1]=XtCreateManagedWidget(DISLIKEMSG,xmToggleButtonWidgetClass,user[i].ch_rowcol[j],NULL,0); } if(j==0) sprintf(str,LIKETITLE); else sprintf(str," %d",like_totals[j-1]); if(j==0) user[i].like_label[j]=XtVaCreateManagedWidget(str,xmLabelWidgetClass,user[i].middle_rowcol,NULL); else user[i].like_label[j]=XtVaCreateManagedWidget(str,xmLabelWidgetClass,user[i].middle_rowcol,XmNbackground,bg,NULL); if(j==0) sprintf(str,DISLIKETITLE); else sprintf(str," %d",dislike_totals[j-1]); if(j==0) user[i].dislike_label[j]=XtVaCreateManagedWidget(str,xmLabelWidgetClass,user[i].middle_rowcol,NULL); else user[i].dislike_label[j]=XtVaCreateManagedWidget(str,xmLabelWidgetClass,user[i].middle_rowcol,XmNbackground,bg,NULL); } /*-----------------*/ user[i].bottom_frame=XtVaCreateManagedWidget("bottomframe",xmFrameWidgetClass,user[i].top_form, XmNtopAttachment,XmATTACH_WIDGET,XmNtopWidget,user[i].middle_frame, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM,NULL ); user[i].bottom_rowcol=XtVaCreateManagedWidget("bottomrowcol",xmRowColumnWidgetClass,user[i].bottom_frame, XmNorientation,XmHORIZONTAL, XmNentryBorder,1,NULL); user[i].send_button=XtCreateManagedWidget(SENDTITLE,xmPushButtonWidgetClass,user[i].bottom_rowcol,NULL,0); XtAddCallback(user[i].send_button,XmNactivateCallback,sendCallback,NULL); user[i].quit_button=XtCreateManagedWidget(QUITTITLE,xmPushButtonWidgetClass,user[i].bottom_rowcol,NULL,0); XtAddCallback(user[i].quit_button,XmNactivateCallback,quitCallback,NULL); /*--------------------------*/ XtRealizeWidget(user[i].shell); if(i==0) sprintf(str,"Initiator"); else sprintf(str,"Participant %d",i+1); XStoreName( display[i],XtWindow(user[i].shell),str); } XtAppMainLoop(app); } /*-------------------------------------------------------InitData-----------------------------*/ void InitData() { int i,j; countdown=nusers; for(i=0;i