00001
00010 #ifdef HAVE_CONFIG_H
00011 #include <config.h>
00012 #endif
00013 #include <stdio.h>
00014 #include <stdlib.h>
00015 #include <sys/types.h>
00016 #include <sys/socket.h>
00017 #include <netinet/in.h>
00018 #include <arpa/inet.h>
00019 #include <unistd.h>
00020 #include <string.h>
00021 #include <gtk/gtk.h>
00022 #include <glib.h>
00023
00024 int sockfd;
00025
00026 char ch[1000];
00027 GtkWidget *window;
00028 GtkWidget *entry1;
00029 GtkWidget *entry2;
00030 GtkWidget *entry3;
00031 GtkWidget *entry4;
00032 GtkWidget *entry5;
00033 GtkWidget *combo;
00034 GtkWidget *combo2;
00035 GList *glist=NULL;
00036 GList *glist2=NULL;
00037
00038 char list[4096];
00039 char populate[1000][10];
00040 char retrieval[1000];
00041 int count;
00048 void Write(int fd, char *buf, int count)
00049 {
00050 int return_value;
00051 printf("%s\n",buf);
00052 return_value=write(fd,buf,count);
00053 if(return_value < 0)
00054 {
00055 perror("Write failed\n");
00056 exit(1);
00057 }
00058
00059 }
00066 void Read(int fd, char *buf, int count)
00067 {
00068 int rc;
00069 rc = read(fd, buf, count);
00070 if(rc < 0)
00071 {
00072 perror("Can't read");
00073 exit(1);
00074 }
00075 strcpy(ch,buf);
00076 printf("Chars from server = %s\n", buf);
00077
00078 }
00085 gint destroyapp (GtkWidget *widget, gpointer gdata)
00086 {
00087 g_print ("Quitting...\n");
00088 gtk_main_quit();
00089 return (FALSE);
00090 }
00094 void clear()
00095 {
00096 gtk_entry_set_text(GTK_ENTRY(entry1),"");
00097 gtk_entry_set_text(GTK_ENTRY(entry2),"");
00098 gtk_entry_set_text(GTK_ENTRY(entry3),"");
00099 gtk_entry_set_text(GTK_ENTRY(entry4),"");
00100 gtk_entry_set_text(GTK_ENTRY(entry5),"");
00101 gtk_entry_set_text(GTK_ENTRY (GTK_COMBO (combo)->entry)," ");
00102 gtk_entry_set_text(GTK_ENTRY (GTK_COMBO (combo2)->entry)," ");
00103 }
00111 void callback( GtkWidget *widget,gpointer data )
00112 {
00113 char value[100];
00114 char L1[100];
00115 char L2[100];
00116 char L3[100];
00117 char L4[100];
00118 char L5[100];
00119 char L6[100];
00120 strcpy(value,(char*)data);
00121
00122 if(strcmp(value,"Exit")==0)
00123 { destroyapp(window,"Exit");
00124 strcpy(ch,"stop");
00125 }
00126 if(strcmp(value,"Clear")==0)
00127 clear();
00128
00129 if(strcmp(value,"Update")==0)
00130 {
00131 int len=strlen(value);
00132 Write(sockfd,value,len);
00133 const gchar* l1=gtk_entry_get_text(GTK_ENTRY (entry1));
00134 strcpy(L1,l1);
00135 const gchar* l2=gtk_entry_get_text(GTK_ENTRY (entry2));
00136 strcpy(L2,l2);
00137 const gchar* l3=gtk_entry_get_text(GTK_ENTRY (entry3));
00138 strcpy(L3,l3);
00139 const gchar* l4=gtk_entry_get_text(GTK_ENTRY (entry4));
00140 strcpy(L4,l4);
00141 const gchar* l5=gtk_entry_get_text(GTK_ENTRY (entry5));
00142 strcpy(L5,l5);
00143 strcpy(L6,gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (combo2)->entry)));
00144
00145 if(strlen(L1)==0 ||strlen(L2)==0||strlen(L3)==0||strlen(L4)==0||strlen(L5)==0||strlen(L6)==0)
00146 {
00147 GtkWidget *dialog;
00148 dialog = gtk_message_dialog_new (NULL,GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK,"Update cant be performed:one of the field is empty");
00149 gtk_dialog_run (GTK_DIALOG (dialog));
00150 gtk_widget_destroy (dialog);
00151 clear();
00152 }
00153 else
00154 {
00155 strcat(L1," ");strcat(L2," ");strcat(L3," ");strcat(L4," ");strcat(L5," ");
00156 strcpy(ch,L1);
00157 strcat(ch,L2);
00158 strcat(ch,L3);
00159 strcat(ch,L4);
00160 strcat(ch,L5);
00161 strcat(ch,L6);
00162 int l=strlen(ch);
00163 Write(sockfd, ch, l);
00164 Read(sockfd, ch, l);
00165 clear();
00166 }
00167 }
00168
00169 if(strcmp(value,"Insert")==0)
00170 {
00171 int len=strlen(value);
00172 const gchar* l1=gtk_entry_get_text(GTK_ENTRY (entry1));
00173 strcpy(L1,l1);
00174 const gchar* l2=gtk_entry_get_text(GTK_ENTRY (entry2));
00175 strcpy(L2,l2);
00176 const gchar* l3=gtk_entry_get_text(GTK_ENTRY (entry3));
00177 strcpy(L3,l3);
00178 const gchar* l4=gtk_entry_get_text(GTK_ENTRY (entry4));
00179 strcpy(L4,l4);
00180 const gchar* l5=gtk_entry_get_text(GTK_ENTRY (entry5));
00181 strcpy(L5,l5);
00182 strcpy(L6,gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (combo2)->entry)));
00183
00184 if(strlen(L1)==0 ||strlen(L2)==0||strlen(L3)==0||strlen(L4)==0||strlen(L5)==0||strlen(L6)==0)
00185 {
00186 GtkWidget *dialog;
00187 dialog = gtk_message_dialog_new (NULL,GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK,"Insert cant be performed:one of the field is empty");
00188 gtk_dialog_run (GTK_DIALOG (dialog));
00189 gtk_widget_destroy (dialog);
00190 clear();
00191 }
00192 else
00193 {
00194 Write(sockfd,value,len);
00195 strcat(L1," "); strcat(L2," "); strcat(L3," "); strcat(L4," ");strcat(L5," ");
00196 strcpy(ch,L1);
00197 strcat(ch,L2);
00198 strcat(ch,L3);
00199 strcat(ch,L4);
00200 strcat(ch,L5);
00201 strcat(ch,L6);
00202 printf("%s\n",ch);
00203 int l=strlen(ch);
00204 Write(sockfd, ch, l);
00205 Read(sockfd, ch, l);
00206 clear();
00207 }
00208 }
00209 if(strcmp(value,"combo")==0)
00210 {
00211 int len=strlen(value);
00212 write(sockfd,value,len);
00213 Read(sockfd,list,4096);
00214 char delims[]=" ";
00215 char *result=NULL;
00216 result = strtok( list, delims );
00217 count=0;
00218 glist=NULL;
00219 while( result != NULL )
00220 {
00221 strcpy(populate[count],result);
00222 glist = g_list_append(glist, populate[count]);
00223 result = strtok( NULL, delims );
00224 count++;
00225 }
00226 gtk_combo_set_popdown_strings( GTK_COMBO(combo) , glist );
00227 }
00228
00229 if(strcmp(value,"combo2")==0)
00230 printf("%s ",value);
00231
00232 if(strcmp(value,"Retrieve")==0)
00233 {
00234 Write(sockfd,value,strlen(value));
00235 char string[100],string2[100] ;
00236 strcpy(string,gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (combo)->entry)));
00237 strcpy(string2,gtk_entry_get_text(GTK_ENTRY (GTK_COMBO (combo2)->entry)));
00238 strcat(string," ");
00239 strcat(string,string2);
00240 printf("%s\n",string);
00241
00242 Write(sockfd,string,strlen(string));
00243 read(sockfd,retrieval,1000);
00244 printf("%d\n",strlen(retrieval));
00245
00246 if(retrieval[0]=='F')
00247 {
00248 GtkWidget *dialog;
00249 dialog = gtk_message_dialog_new (NULL,GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK,"There is no Such Product for a selected Category");
00250 gtk_dialog_run (GTK_DIALOG (dialog));
00251 gtk_widget_destroy (dialog);
00252 int i;
00253 for(i=0;i<strlen(retrieval);i++)
00254 retrieval[i]='\0';
00255 clear();
00256 }
00257 else{
00258 char delims[]=" ";
00259 char *result=NULL;
00260 result = strtok( retrieval, delims );
00261 int i=0;
00262 char str[6][100];
00263 while( result != NULL )
00264 { strcpy(str[i],result);
00265 result = strtok( NULL, delims );
00266 i++;
00267 }
00268 gtk_entry_set_text(GTK_ENTRY(entry1),str[0]);
00269 gtk_entry_set_text(GTK_ENTRY(entry2),str[1]);
00270 gtk_entry_set_text(GTK_ENTRY(entry3),str[2]);
00271 gtk_entry_set_text(GTK_ENTRY(entry4),str[3]);
00272 gtk_entry_set_text(GTK_ENTRY(entry5),str[4]);
00273 gtk_entry_set_text(GTK_ENTRY (GTK_COMBO (combo2)->entry),str[5]);
00274 }
00275 }
00276
00277 if(strcmp(value,"Delete")==0)
00278 {
00279 Write(sockfd,value,strlen(value));
00280 char string[100];
00281 strcpy(string, gtk_entry_get_text (GTK_ENTRY (entry1)));
00282 Write(sockfd,string,strlen(string));
00283 clear();
00284
00285 }
00286 }
00287
00288
00289 GtkWidget *e1;
00290 GtkWidget *e2;
00291 GtkWidget *l3;
00292 GtkWidget *window1;
00293
00300 void action ( GtkWidget *widget,gpointer data )
00301 {
00302 char value[100];
00303 strcpy(value,(char*)data);
00304 char l1[50];
00305 strcpy(l1,gtk_entry_get_text(GTK_ENTRY (e1)));
00306
00307 char l2[50];
00308 strcpy(l2,gtk_entry_get_text(GTK_ENTRY (e2)));
00309 if((strcmp(l1,"User")==0)&&(strcmp(l2,"lucky")==0))
00310 {
00311 gtk_widget_destroy (window1);
00312 gtk_main_quit();
00313 }
00314 else
00315 {
00316 GtkWidget *dialog;
00317 dialog = gtk_message_dialog_new (NULL,GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK,"INCORRECT USERNAME OR PASSWORD--Re ENTER Username & Password");
00318 gtk_dialog_run (GTK_DIALOG (dialog));
00319 gtk_widget_destroy (dialog);
00320 gtk_entry_set_text(GTK_ENTRY(e1),"");
00321 gtk_entry_set_text(GTK_ENTRY(e2),"");
00322 }
00323
00324 }
00325
00326
00335 int login (int argc, char *argv[])
00336 {
00337
00338
00339 GtkWidget *tab1;
00340 GtkWidget *tab2;
00341 GtkWidget *l1;
00342 GtkWidget *l2;
00343 GtkWidget *button;
00344
00345 gtk_init (&argc, &argv);
00346 window1 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
00347 e1 = gtk_entry_new();
00348 e2 = gtk_entry_new();
00349 l1 = gtk_label_new("USER NAME");
00350 l2 = gtk_label_new("PASSWORD");
00351 button = gtk_button_new_with_label("SUBMIT");
00352 tab1 = gtk_table_new(3, 2, FALSE);
00353 tab2 = gtk_table_new(1, 3, FALSE);
00354 gtk_table_set_col_spacings(GTK_TABLE(tab1), 15);
00355 gtk_table_set_row_spacings(GTK_TABLE(tab1), 35);
00356 gtk_table_set_col_spacings(GTK_TABLE(tab2), 25);
00357 gtk_table_set_row_spacings(GTK_TABLE(tab2), 25);
00358
00359 gtk_entry_set_visibility( GTK_ENTRY( e2),FALSE );
00360
00361 gtk_signal_connect(GTK_OBJECT(window1), "delete_event", GTK_SIGNAL_FUNC(destroyapp), NULL);
00362
00363
00364 gtk_table_attach(GTK_TABLE(tab1), l2, 0, 1, 1, 2, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00365 gtk_table_attach(GTK_TABLE(tab1), l1, 0, 1, 0, 1, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00366 gtk_table_attach(GTK_TABLE(tab1), e1, 1, 2, 0, 1, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00367 gtk_table_attach(GTK_TABLE(tab1), e2, 1, 2, 1, 2, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00368 gtk_table_attach(GTK_TABLE(tab2), button, 1, 2, 0, 1, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00369 gtk_table_attach(GTK_TABLE(tab1), tab2, 1, 2, 2, 3, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00370
00371 char str[]="SUBMIT";
00372 gtk_signal_connect (GTK_OBJECT (button), "clicked",GTK_SIGNAL_FUNC (action), (gpointer) str);
00373
00374
00375 gtk_container_add(GTK_CONTAINER(window1), tab1);
00376
00377
00378 gtk_container_border_width (GTK_CONTAINER (window1), 5);
00379
00380
00381 gtk_window_set_default_size (GTK_WINDOW(window1), 400, 200);
00382 gtk_container_border_width (GTK_CONTAINER (window1), 50);
00383
00384 gtk_window_set_title(GTK_WINDOW (window1), "LOGIN");
00385
00386
00387 gtk_widget_show_all(window1);
00388
00389 gtk_main();
00390
00391
00392 return 0;
00393 }
00394
00404 void interface()
00405 {
00406
00407 GtkWidget *table;
00408 GtkWidget *hlabel;
00409 GtkWidget *table1;
00410 GtkWidget *table2;
00411 GtkWidget *label1;
00412 GtkWidget *label2;
00413
00414 GtkWidget *button;
00415
00416 char *values[6] = { "Insert", "Update", "Delete","Retrieve", "Clear","Exit" };
00417
00418 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
00419 table = gtk_table_new(3, 2, FALSE);
00420 gtk_table_set_row_spacings(GTK_TABLE(table), 25);
00421
00422 table1 = gtk_table_new(1, 5, FALSE);
00423 gtk_table_set_col_spacings(GTK_TABLE(table1), 15);
00424
00425
00426 hlabel = gtk_label_new("PRODUCT INFORMATION");
00427 gtk_table_attach(GTK_TABLE(table), hlabel, 0, 2, 0, 1, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00428
00429 table2 = gtk_table_new(6,4, FALSE);
00430 gtk_table_set_row_spacings(GTK_TABLE(table2), 15);
00431 gtk_table_set_col_spacings(GTK_TABLE(table2), 10);
00432 label1 = gtk_label_new("ID");
00433 entry1 = gtk_entry_new();
00434
00435 combo=gtk_combo_new();
00436 char str[]="combo";
00437 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), "1001");
00438 g_signal_connect (G_OBJECT (GTK_COMBO (combo)->button), "pressed",GTK_SIGNAL_FUNC(callback), (gpointer) str );
00439
00440 combo2=gtk_combo_new();
00441 char str1[]="combo2";
00442 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo2)->entry), "Sports");
00443
00444 glist2 = g_list_append(glist2, "Domestic");
00445 glist2 = g_list_append(glist2, "Sports");
00446 glist2 = g_list_append(glist2, "Garments");
00447 glist2 = g_list_append(glist2, "Appliances");
00448 gtk_combo_set_popdown_strings( GTK_COMBO(combo2) , glist2 );
00449
00450 gtk_table_attach(GTK_TABLE(table2), label1, 0, 1, 0, 1, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00451 gtk_table_attach(GTK_TABLE(table2), entry1, 1, 2, 0, 1, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00452 gtk_table_attach(GTK_TABLE(table2), combo, 2, 3, 0, 1, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00453
00454 GtkWidget *label6;
00455 label6=gtk_label_new("CATEGORY");
00456 gtk_table_attach(GTK_TABLE(table2), label6, 0, 1, 1, 2, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00457 gtk_table_attach(GTK_TABLE(table2), combo2, 1, 2, 1, 2, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00458
00459 g_signal_connect (G_OBJECT (GTK_COMBO (combo2)->button), "pressed",GTK_SIGNAL_FUNC(callback), (gpointer) str1 );
00460
00461
00462 entry2 = gtk_entry_new();
00463 label2 = gtk_label_new("DESCRIPTION");
00464 gtk_table_attach(GTK_TABLE(table2), label2, 0, 1, 2, 3, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00465 gtk_table_attach(GTK_TABLE(table2), entry2, 1, 3, 2, 3, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00466
00467 GtkWidget *label3;
00468 entry3 = gtk_entry_new();
00469 label3 = gtk_label_new("RATE");
00470 gtk_table_attach(GTK_TABLE(table2), label3, 0, 1, 3, 4, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00471 gtk_table_attach(GTK_TABLE(table2), entry3, 1, 3, 3, 4, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00472
00473 GtkWidget *label4;
00474 entry4 = gtk_entry_new();
00475 label4 = gtk_label_new("QUANTITY");
00476 gtk_table_attach(GTK_TABLE(table2), label4, 0, 1, 4, 5, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00477 gtk_table_attach(GTK_TABLE(table2), entry4, 1, 3, 4, 5, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00478
00479 GtkWidget *label5;
00480 entry5 = gtk_entry_new();
00481 label5 = gtk_label_new("UNIT OF MEASUREMENT");
00482 gtk_table_attach(GTK_TABLE(table2), label5, 0, 1, 5, 6, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00483 gtk_table_attach(GTK_TABLE(table2), entry5, 1, 3, 5, 6, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00484
00485 gtk_table_attach(GTK_TABLE(table), table2, 0, 2, 1, 2, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00486 int j,pos=0;
00487 for(j=0; j < 6; j++) {
00488 button = gtk_button_new_with_label(values[pos]);
00489 gtk_signal_connect (GTK_OBJECT (button), "clicked",GTK_SIGNAL_FUNC (callback), (gpointer) values[pos]);
00490 gtk_table_attach_defaults(GTK_TABLE(table1), button, j, j+1, 0, 1 );
00491 pos++;
00492 }
00493
00494 gtk_table_attach(GTK_TABLE(table), table1, 0, 2, 2, 3, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
00495 gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(destroyapp), NULL);
00496 gtk_container_add(GTK_CONTAINER(window), table);
00497 gtk_container_border_width (GTK_CONTAINER (window), 100);
00498 gtk_window_set_default_size (GTK_WINDOW(window), 900, 600);
00499
00500 gtk_window_set_title(GTK_WINDOW (window), "PRODUCT INFORMATION");
00501
00502 gtk_widget_show_all(window);
00503
00504 gtk_main();
00505 }
00506
00515 int main(int argc, char *argv[])
00516 {
00517 printf("This is the client program\n");
00518
00519 int len ,port;
00520 struct sockaddr_in address;
00521 int result;
00522 login(argc,argv);
00523 gtk_init (&argc, &argv);
00524
00525 sockfd = socket(PF_INET, SOCK_STREAM, 0);
00526 if (sockfd == -1) {
00527 perror("Socket create failed.\n") ;
00528 return -1 ;
00529 }
00530 port=atoi(argv[1]);
00531
00532 address.sin_family = AF_INET;
00533 address.sin_addr.s_addr = inet_addr("127.0.0.1");
00534 address.sin_port = htons(port);
00535 len = sizeof(address);
00536
00537 result = connect(sockfd, (struct sockaddr *)&address, len);
00538 if(result == -1)
00539 {
00540 perror("Error has occurred");
00541 exit(-1);
00542 }
00543
00544 interface();
00545 while (1)
00546 {
00547 int l=strlen(ch);
00548 ch[l]='\0';
00549 if(l==0 || strcmp(ch,"stop")==0)
00550 {
00551 break;
00552 }
00553
00554 }
00555 close(sockfd);
00556
00557 exit(0);
00558 }
00559