00001
00007 #include <gtk/gtk.h>
00008 #include <glib.h>
00009 #include <stdio.h>
00010 #include <unistd.h>
00011 #include <stdlib.h>
00012 #include <string.h>
00013 #include <strings.h>
00014 #include <sys/types.h>
00015 #include <arpa/inet.h>
00016 #include <netinet/in.h>
00017 #include <sys/socket.h>
00018 #include <time.h>
00019 #include <signal.h>
00020 #include <sqlite3.h>
00021 #define BUFFER 4096
00022
00023
00024
00025 GtkWidget *text_view;
00026 GtkTextBuffer *buffer;
00027 char **result;
00028
00029
00030 char temp[BUFFER];
00031
00032
00033 char msg[10*BUFFER];
00034
00035
00036 int nrow,ncol,rc,re;
00037
00038
00039 sqlite3 *database1;
00040
00041
00042 int roll=0,num=0;
00043
00044
00045 char *port,*addr;
00046
00047
00048
00054 void onExit(GtkWidget *window, gpointer data)
00055 {
00056 gtk_main_quit();
00057 }
00058
00059
00060 int sfd;
00061
00062
00063
00067 void close_properly(int signal)
00068 {
00069 int return_value;
00070
00071 printf("Shutting down...\n");
00072
00073 return_value =close(sfd);
00074
00075 if(return_value <0)
00076 {
00077 perror("Cannot close listening socket.");
00078 exit(1);
00079 }
00080
00081 printf("Shutdown complete.\n");
00082 exit(0);
00083 }
00084
00085
00086
00091 void send_message(GtkWidget *button, gpointer data)
00092 {
00093 if(roll<num-1)
00094 {
00095 roll++;
00096 int re;
00097 re= write(sfd,result[roll],strlen(result[roll]));
00098 if(re<0)
00099 {
00100 printf("Written Failed\n");
00101 exit(1);
00102 }
00103
00104 re = read(sfd,msg, BUFFER-1);
00105 msg[re]='\0';
00106
00107 GtkTextBuffer *buffer;
00108 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
00109 gtk_text_buffer_set_text(buffer,msg,strlen(msg));
00110 }
00111 else
00112 {
00113 if(roll<num)
00114 roll++;
00115 strcpy(msg,"\n\n\n\n\t\t\tNo More Students\n");
00116 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
00117 gtk_text_buffer_set_text(buffer,msg,strlen(msg));
00118
00119 }
00120 }
00121
00122
00127 void send_message1(GtkWidget *button, gpointer data)
00128 {
00129 if(roll>1)
00130 {
00131 roll--;
00132 int re;
00133 re= write(sfd,result[roll],strlen(result[roll]));
00134 if(re<0)
00135 {
00136 printf("Written Failed\n");
00137 exit(1);
00138 }
00139
00140 re = read(sfd,msg, BUFFER-1);
00141 msg[re]='\0';
00142
00143 GtkTextBuffer *buffer;
00144
00145 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
00146 gtk_text_buffer_set_text(buffer,msg,strlen(msg));
00147 }
00148 else
00149 {
00150 if(roll!=0)
00151 roll--;
00152 strcpy(msg,"\n\n\n\n\t\t\t\tNo More Students\n");
00153 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
00154 gtk_text_buffer_set_text(buffer,msg,strlen(msg));
00155
00156 }
00157 }
00158
00172 int main(int argc, char *argv[])
00173 {
00174
00175 if(argc != 3)
00176 {
00177 fprintf(stderr, "%s: usage: %s <server_ip_address> <port_number>\n", argv[0], argv[0]);
00178 exit(1);
00179 }
00180
00181 addr=argv[1];
00182 port=argv[2];
00183
00184 GtkWidget *window;
00185 GtkWidget *next;
00186 GtkWidget *exit1;
00187 GtkWidget *prev;
00188 GtkWidget *vbox;
00189
00190 char buff1[BUFFER]="cse";
00191 int rc1;
00192 char sql_statement[BUFFER];
00193 char *zErrMsg = 0;
00194 gtk_init(&argc, &argv);
00195 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
00196 gtk_window_set_default_size(GTK_WINDOW(window), 400, 400);
00197 g_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(onExit), NULL);
00198 vbox = gtk_vbox_new(FALSE, 10);
00199 text_view = gtk_text_view_new ();
00200
00201
00202 rc = sqlite3_open (buff1, &database1);
00203 if (rc != SQLITE_OK)
00204 {
00205 fprintf (stderr, "\nDatabase Does Not Exists : %s\n", zErrMsg);
00206 }
00207
00208 sprintf(sql_statement,"select name from sqlite_master where type='table' order by name");
00209 rc1=sqlite3_get_table(database1,sql_statement,&result,&nrow,&ncol,&zErrMsg);
00210
00211 if (rc1 != SQLITE_OK)
00212 {
00213 fprintf (stderr, "\nSQL error: %s\n", zErrMsg);
00214 }
00215
00216 num=(nrow*ncol)+1;
00217
00218
00219 strcpy(msg,"\tExam Evaluation Started\n\n\tClick NEXT To View Next Student Marks\n\n\tClick PREVIOUS to View Previous Student Marks\n\n\tClick EXIT to exit");
00220 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
00221 gtk_text_buffer_set_text(buffer,msg,strlen(msg));
00222
00223
00224 int re,temp;
00225
00226
00227 struct sockaddr_in address;
00228
00229
00230 sfd= socket(AF_INET, SOCK_STREAM, 0);
00231
00232
00233 if(sfd<0)
00234 {
00235 printf("Cannot Open Socket\n");
00236 exit(1);
00237 }
00238
00239
00240 bzero(&address,sizeof(address));
00241
00242
00243 address.sin_family=AF_INET;
00244
00245
00246
00247
00248
00249 address.sin_port=htons(atoi(port));
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259 temp=inet_pton(AF_INET,addr,&address.sin_addr);
00260 if(temp<0)
00261 {
00262 printf("Supplied Address Is Incorrect\n");
00263 exit(1);
00264 }
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274 temp=connect(sfd,(struct sockaddr *)&address,sizeof(address));
00275 if(temp<0)
00276 {
00277 printf("Connection Failed\n");
00278 exit(1);
00279 }
00280
00281
00282 re= write(sfd,buff1,strlen(buff1));
00283 if(re<0)
00284 {
00285 printf("Written Failed\n");
00286 exit(1);
00287 }
00288
00289 char ch[10]="";
00290 printf("Enter Cut off marks out of 10 :");
00291 scanf("%s",ch);
00292 re= write(sfd,ch,strlen(ch));
00293 if(re<0)
00294 {
00295 printf("Written Failed\n");
00296 exit(1);
00297 }
00298
00299 next = gtk_button_new_with_label("NEXT");
00300 prev = gtk_button_new_with_label("PREVIOUS");
00301 exit1 = gtk_button_new_with_label("EXIT");
00302 gtk_box_pack_start (GTK_BOX (vbox), text_view, 180, 180, 0);
00303 gtk_box_pack_start(GTK_BOX(vbox),next,FALSE, TRUE, 0);
00304 gtk_box_pack_start(GTK_BOX(vbox),prev,FALSE, TRUE, 0);
00305 gtk_box_pack_start(GTK_BOX(vbox),exit1,FALSE, TRUE, 0);
00306 gtk_container_add(GTK_CONTAINER(window), vbox);
00307
00308 g_signal_connect(GTK_OBJECT(next), "clicked", GTK_SIGNAL_FUNC(send_message), NULL);
00309 g_signal_connect(GTK_OBJECT(prev), "clicked", GTK_SIGNAL_FUNC(send_message1), NULL);
00310 g_signal_connect(GTK_OBJECT(exit1), "clicked", GTK_SIGNAL_FUNC(onExit), NULL);
00311 gtk_widget_show_all(window);
00312 gtk_main();
00313
00314 close(sfd);
00315 printf("\n");
00316 return 0;
00317 }