00001 #include <gtk/gtk.h>
00002 #include <stdio.h>
00003 #include <errno.h>
00004 #include <stdlib.h>
00005 #define CHAR_BUF 2000
00006 #include<string.h>
00007 #include<ctype.h>
00008
00012 GtkWidget *entry;
00013 gchar *entry_text= " ";
00014
00018 GtkWidget *window;
00019
00024 int errno, status;
00025
00030 char *Fname, LoadFile[300], *filename, file_name[300], f_name[300], fname1[300];
00031
00035 GtkTextBuffer *buf, *buf2, *buf1;
00036
00040 GtkWidget *view, *view2;
00041
00046 void parseFilename(char *text)
00047 {
00048
00049 int i;
00050 for(i = strlen(text)-1; i >= 0; i--)
00051 {
00052 if(text[i]=='/')
00053 break;
00054 }
00055
00056 int f = 0,j;
00057 for(j = i+1;j <strlen(text); j++)
00058 {
00059 fname1[f++]=text[j];
00060 }
00061 fname1[f++]='\0';
00062
00063 }
00064
00070 void highlight_include()
00071 {
00072
00073 GtkTextIter mstart,mend,iter1,mstart1,mend1,iter2,iter3;
00074 int found,found1;
00075
00076
00077 gtk_text_buffer_get_start_iter(buf, &iter3);
00078
00079 do
00080 {
00081 found = gtk_text_iter_forward_search(&iter3, "#include", 0, &mstart, &mend, NULL);
00082
00083 if(found)
00084 {
00085 iter2 = mend;
00086 found1 = gtk_text_iter_forward_search(&iter2, ">", 0, &mstart1, &mend1, NULL);
00087 if(found1)
00088 {
00089 iter1 = mstart;
00090 gtk_text_iter_forward_to_line_end(&iter1);
00091 if(gtk_text_iter_compare(&iter1, &mend1)>=0)
00092 {
00093 gtk_text_buffer_apply_tag_by_name(buf, "pink_fg", &mend, &mend1);
00094 gtk_text_buffer_apply_tag_by_name(buf, "purple_fg", &mstart, &mend);
00095 iter3 = mend1;
00096 }
00097 else
00098 iter3 = iter1;
00099 }
00100 else
00101 iter3 = mend;
00102 }
00103
00104 }while(found);
00105
00106
00107 gtk_text_buffer_get_start_iter(buf, &iter3);
00108
00109 do
00110 {
00111 found = gtk_text_iter_forward_search(&iter3, "#include", 0, &mstart, &mend, NULL);
00112
00113 if(found)
00114 {
00115 iter2 = mend;
00116 found1 = gtk_text_iter_forward_search(&iter2, "\"", 0, &mstart1, &mend1, NULL);
00117 if(found1)
00118 {
00119 iter1 = mstart;
00120 gtk_text_iter_forward_to_line_end(&iter1);
00121 if(gtk_text_iter_compare(&iter1, &mend1)>=0)
00122 {
00123 gtk_text_buffer_apply_tag_by_name(buf, "pink_fg", &mend, &mend1);
00124 gtk_text_buffer_apply_tag_by_name(buf, "purple_fg", &mstart, &mend);
00125 iter3 = mend1;
00126 }
00127 else
00128 iter3 = iter1;
00129 }
00130 else
00131 iter3 = mend;
00132 }
00133
00134 }while(found);
00135
00136
00137
00138
00139 gtk_text_buffer_get_start_iter(buf, &iter2);
00140
00141 found =1;
00142 do
00143 {
00144 found = gtk_text_iter_forward_search(&iter2, "#define", 0, &mstart, &mend, NULL);
00145
00146 if(found)
00147 {
00148 iter1 = mstart;
00149 gtk_text_iter_forward_to_line_end(&iter1);
00150 gtk_text_buffer_apply_tag_by_name(buf,"purple_fg", &mstart, &iter1);
00151 iter2 = iter1;
00152 }
00153 }while(found);
00154
00155 }
00156
00163 void highlight_comments()
00164 {
00165 GtkTextIter mstart1, mend1;
00166
00167 GtkTextIter mstart2, mend2;
00168 GtkTextIter iter1, iter2, it1;
00169 GtkTextIter line_end;
00170
00171 GtkTextBuffer *buffer;
00172 gboolean found1, found2;
00173
00174 char *text = "\"";
00175 char *text1 = "/*";
00176 char *text2 = "*/";
00177
00178 buffer = buf;
00179 gtk_text_buffer_get_start_iter(buf, &iter1);
00180
00181
00182 found1 = found2 = 1;
00183 while(found2)
00184 {
00185 found1 = gtk_text_iter_forward_search (&iter1, text, 0, &mstart1, &mend1, NULL);
00186 if (found1)
00187 {
00188 iter2 = mend1;
00189
00190 found2 = gtk_text_iter_forward_search (&iter2, text, 0, &mstart2, &mend2, NULL);
00191
00192 if(found2)
00193 {
00194
00195 it1 = mend2;
00196 line_end = mstart1;
00197 gtk_text_iter_forward_to_line_end(&line_end);
00198
00199 if(gtk_text_iter_compare(&it1, &line_end) < 0)
00200 {
00201
00202 gtk_text_buffer_remove_all_tags(buf, &mstart1, &it1);
00203 gtk_text_buffer_apply_tag_by_name(buffer, "pink_fg", &mstart1, &it1);
00204 iter1 = mend2;
00205 }
00206 else
00207 {
00208 gtk_text_buffer_remove_all_tags(buf, &mstart1, &line_end);
00209 gtk_text_buffer_apply_tag_by_name(buffer, "pink_fg", &mstart1, &line_end);
00210
00211 iter1 = line_end;
00212 }
00213
00214
00215 }
00216
00217 else
00218 {
00219 if(gtk_text_iter_forward_to_line_end(&iter2))
00220 {
00221
00222 }
00223 else
00224 {
00225 gtk_text_buffer_get_end_iter(buf, &iter2);
00226
00227 }
00228 gtk_text_buffer_apply_tag_by_name(buffer, "pink_fg", &mstart1, &iter2);
00229 }
00230
00231 }
00232 else
00233 found2 = 0;
00234
00235 }
00236
00237
00238 gtk_text_buffer_get_start_iter(buf, &iter1);
00239 found1 = found2 = 1;
00240 while(found2)
00241 {
00242 found1 = gtk_text_iter_forward_search (&iter1, text1, 0, &mstart1, &mend1, NULL);
00243 if (found1)
00244 {
00245
00246 iter2 = mend1;
00247
00248 found2 = gtk_text_iter_forward_search (&iter2, text2, 0, &mstart2, &mend2, NULL);
00249
00250 if(found2)
00251 {
00252 it1 = mstart2;
00253 if(gtk_text_iter_forward_char(&it1))
00254 {
00255 gtk_text_buffer_remove_all_tags(buf, &mstart1, &it1);
00256 gtk_text_buffer_apply_tag_by_name(buffer, "blue_fg", &mstart1, &it1);
00257 }
00258 else
00259 {
00260 gtk_text_buffer_remove_all_tags(buf, &mstart1, &mstart2);
00261 gtk_text_buffer_apply_tag_by_name(buffer, "blue_fg", &mstart1, &mstart2);
00262 }
00263 iter1 = mend2;
00264 }
00265
00266 else
00267 {
00268 gtk_text_buffer_get_end_iter(buf, &iter2);
00269 gtk_text_buffer_remove_all_tags(buf, &mstart1, &iter2);
00270 gtk_text_buffer_apply_tag_by_name(buffer, "blue_fg", &mstart1, &iter2);
00271 }
00272
00273 }
00274 else
00275 found2 = 0;
00276
00277 }
00278
00279
00280 gtk_text_buffer_get_start_iter(buf, &iter2);
00281
00282 found1 =1;
00283 do
00284 {
00285 found1 = gtk_text_iter_forward_search(&iter2, "//", 0, &mstart1, &mend1, NULL);
00286
00287 if(found1)
00288 {
00289 iter1 = mstart1;
00290 gtk_text_iter_forward_to_line_end(&iter1);
00291 gtk_text_buffer_apply_tag_by_name(buf,"blue_fg", &mstart1, &iter1);
00292 iter2 = iter1;
00293 }
00294 }while(found1);
00295
00296
00297 }
00298
00299
00300
00307 void highlight_keywords()
00308 {
00309
00310 FILE *fp;
00311 char line[1000];
00312 int num;
00313 char str[100];
00314 GtkTextIter iter,iter1,it1;
00315 GtkTextIter mstart, mend;
00316 GtkTextBuffer *buffer;
00317 gboolean found;
00318 int k;
00319 int flag = 1;
00320 fp = fopen("keywords.c", "r");
00321
00322 while(fgets(line, 1000, fp) != NULL)
00323 {
00324 sscanf(line,"%s %d",str, &num);
00325
00326 k = 0;
00327
00328 gtk_text_buffer_get_start_iter(buf, &iter);
00329 buffer = buf;
00330
00331 found = 1;
00332 while(found)
00333 {
00334
00335 found = gtk_text_iter_forward_search (&iter, str, 0, &mstart, &mend, NULL);
00336
00337 if (found)
00338 {
00339 gunichar c1;
00340
00341 it1 = mstart;
00342 flag = 1;
00343 if(gtk_text_iter_backward_char(&it1))
00344 c1 = gtk_text_iter_get_char (&it1);
00345 else
00346 c1 = ' ';
00347
00348 gunichar c2 = gtk_text_iter_get_char (&mend);
00349
00350 if(g_unichar_isalpha(c1) || g_unichar_isalpha(c2) || c1 == '_' || c2== '_' || g_unichar_isdigit(c1) || g_unichar_isdigit(c2) )
00351 {
00352 flag = 0;
00353 }
00354
00355 else
00356 {
00357
00358
00359 }
00360
00361
00362 iter1 = mstart;
00363 if(flag)
00364 {
00365 gtk_text_buffer_apply_tag_by_name(buffer, "bold", &mstart, &mend );
00366 switch(num)
00367 {
00368
00369 case 1: gtk_text_buffer_apply_tag_by_name(buffer, "green_fg", &mstart, &mend);
00370 break;
00371 case 2: gtk_text_buffer_apply_tag_by_name(buffer, "maroon_fg", &mstart, &mend);
00372 break;
00373 }
00374 }
00375 }
00376 iter = mend;
00377 }
00378 }
00379
00380
00381 }
00382
00383
00389 void highlight_digits()
00390 {
00391 GtkTextIter mstart, mend, iter, iter2;
00392 gunichar start_c, end_c, c;
00393 int flag;
00394
00395 gtk_text_buffer_get_start_iter(buf, &iter);
00396
00397
00398 int k;char string[500];
00399
00400 do
00401 {
00402 c = gtk_text_iter_get_char(&iter);
00403
00404 k = 0;
00405 start_c = c;
00406 mstart = iter;
00407 flag = 0 ;
00408 while(g_unichar_isdigit(c))
00409 {
00410 string[k++] = c;
00411 flag = 1;
00412 if(gtk_text_iter_forward_char(&iter))
00413 {
00414 c = gtk_text_iter_get_char(&iter);
00415 mend = iter;
00416 end_c = c;
00417
00418 }
00419 else
00420 break;
00421 }
00422 string[k++] = '\0';
00423 iter2 = mstart;
00424 if(gtk_text_iter_backward_char(&iter2))
00425 start_c = gtk_text_iter_get_char(&iter2);
00426 if(g_unichar_isalpha(start_c) || g_unichar_isalpha(end_c) || end_c == '_' || start_c == '_')
00427 {
00428 start_c = end_c;
00429 mstart = mend;
00430 }
00431 else
00432 {
00433
00434 if(flag == 1)
00435 gtk_text_buffer_apply_tag_by_name(buf, "pink_fg", &mstart, &mend);
00436 }
00437 }while(gtk_text_iter_forward_char(&iter));
00438
00439 }
00444 void Syntax_highlight()
00445 {
00446
00447 highlight_digits();
00448
00449 highlight_keywords();
00450
00451 highlight_include();
00452
00453 highlight_comments();
00454
00455 }
00456
00461 static void load_file(char *fname)
00462 {
00463 GtkTextIter p;
00464 status = 0;
00465 FILE *f;
00466
00467
00468
00469 char fbuf[CHAR_BUF];
00470 size_t l;
00471
00472 if(!fname)
00473 {
00474 GtkWidget *dialog = gtk_file_selection_new("Open File ...");
00475 int resp = gtk_dialog_run(GTK_DIALOG(dialog));
00476 if(resp == GTK_RESPONSE_OK)
00477 {
00478
00479
00480 fname = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(dialog)));
00481 gtk_widget_destroy(dialog);
00482 }
00483 else
00484 {
00485
00486 gtk_widget_destroy(dialog);
00487 return;
00488 }
00489 }
00490
00491
00492
00493 if(!(f = fopen(fname, "r")))
00494 {
00495 g_printerr("%s: %s\n", fname, g_strerror(errno));
00496 return;
00497 }
00498
00499
00500 if(fname != filename)
00501 {
00502 gchar *wt = g_strdup_printf("Text Editor (%s)", fname);
00503 g_free(filename);
00504 filename = fname;
00505
00506
00507 gtk_window_set_title(GTK_WINDOW(window), wt);
00508 g_free(wt);
00509 }
00510
00511
00512 gtk_text_buffer_get_end_iter(buf, &p);
00513
00514 while((l = fread(fbuf, 1, sizeof(fbuf), f)) > 0)
00515 {
00516
00517
00518 GError *err = NULL;
00519 gsize br, bw;
00520 gchar *text;
00521 if(!(text = g_locale_to_utf8(fbuf, l, &br, &bw, &err)))
00522 {
00523 g_printerr("File is not in UTF-8 format : %s\n", err->message);
00524 g_clear_error(&err);
00525 filename = NULL;
00526 gtk_window_set_title(GTK_WINDOW(window), "Text Editor (Insert file name)");
00527 fclose(f);
00528 return;
00529 }
00530 gtk_text_buffer_insert(buf, &p, text, bw);
00531 g_free(text);
00532 }
00533
00534 strcpy(LoadFile, fname);
00535
00536 gtk_text_buffer_set_modified(buf, FALSE);
00537 gtk_text_buffer_get_start_iter(buf, &p);
00538 gtk_text_buffer_place_cursor(buf, &p);
00539
00540
00541 if(ferror(f))
00542 {
00543 g_printerr("%s: %s\n", fname, g_strerror(errno));
00544 fclose(f);
00545 return;
00546 }
00547 if(fclose(f) == EOF)
00548 g_printerr("%s: %s\n", fname, g_strerror(errno));
00549
00550
00551 GtkTextIter p1, p2;
00552
00553 gtk_text_buffer_get_start_iter(buf2,&p2);
00554 gtk_text_buffer_get_end_iter(buf2, &p1);
00555 gtk_text_buffer_delete(buf2,&p2,&p1);
00556
00557 parseFilename(fname);
00558
00559 char object_file[300];
00560 char string[500];
00561 strcpy(object_file,fname1);
00562 char *new = strtok (object_file, ".");
00563
00564 sprintf(string,"gcc -Wall -o %s %s",new, filename);
00565 gtk_entry_set_text(GTK_ENTRY (entry), string);
00566
00567
00568 Syntax_highlight();
00569
00570 }
00571
00572
00576 static char* getFileName()
00577 {
00578 return LoadFile;
00579 }
00580
00585 void getLine(int no, int flag)
00586 {
00587 FILE *fp;
00588 char line[1000];
00589 fp = fopen(filename, "r");
00590 int count = 0;
00591 while(fgets(line,1000,fp) != NULL)
00592 {
00593 count++;
00594 if(count == no)
00595 break;
00596 }
00597
00598 GtkTextIter iter, iter1;
00599 GtkTextIter mstart, mend;
00600 GtkTextBuffer *buffer;
00601 gboolean found;
00602
00603 gtk_text_buffer_get_start_iter(buf, &iter);
00604
00605 buffer = buf;
00606
00607 found = gtk_text_iter_forward_search (&iter, line , 0, &mstart, &mend, NULL);
00608
00609 gtk_text_buffer_create_mark (buffer, "pos", &mstart, FALSE);
00610
00611 if (found)
00612 {
00613
00614 iter1 = mstart;
00615 if(flag)
00616 gtk_text_buffer_apply_tag_by_name(buffer,"gray_bg",&mstart,&mend );
00617 else
00618 {
00619 GtkTextIter ms,me;
00620 gtk_text_buffer_get_start_iter(buf, &ms);
00621 gtk_text_buffer_get_end_iter(buf, &me);
00622 gtk_text_buffer_remove_tag_by_name(buf,"yellow_bg",&ms,&me);
00623 gtk_text_view_scroll_to_iter(view, &mstart, 0.0,TRUE,0.5,0.5);
00624 gtk_text_buffer_apply_tag_by_name(buffer,"yellow_bg",&mstart,&mend);
00625 }
00626
00627 }
00628
00629 return;
00630 }
00631
00632
00637 void getLine_error(int no, int flag)
00638 {
00639 FILE *fp;
00640 char line[1000];
00641 fp = fopen("errorfile","r");
00642 int count = 0;
00643 while(fgets(line,1000,fp) != NULL)
00644 {
00645 count++;
00646 if(count == no + 1)
00647 break;
00648 }
00649
00650 GtkTextIter iter, iter1;
00651 GtkTextIter mstart, mend;
00652 GtkTextBuffer *buffer;
00653 gboolean found;
00654
00655 gtk_text_buffer_get_start_iter(buf2, &iter);
00656
00657 gtk_text_buffer_create_mark(buf2, "pos", &iter, NULL);
00658 found = gtk_text_iter_forward_search (&iter, line , 0, &mstart, &mend, NULL);
00659
00660
00661 if (found)
00662 {
00663 if(flag)
00664 {
00665 GtkTextIter ms, me;
00666 gtk_text_buffer_get_start_iter(buf2, &ms);
00667 gtk_text_buffer_get_end_iter(buf2, &me);
00668 gtk_text_buffer_remove_tag_by_name(buf2, "orange", &ms, &me);
00669 gtk_text_view_scroll_to_iter(view2, &mstart, 0.0, TRUE, 0.5, 0.5);
00670 gtk_text_buffer_apply_tag_by_name(buf2,"orange",&mstart, &mend);
00671 }
00672
00673 }
00674
00675
00676
00677
00678 return ;
00679 }
00680
00681
00682
00683
00688 static gboolean save_file(char *fname)
00689 {
00690 FILE *f;
00691
00692 status = 0;
00693 int ok = TRUE;
00694 if(!fname)
00695 {
00696 GtkWidget *dialog = gtk_file_selection_new("Save File As...");
00697 int resp = gtk_dialog_run(GTK_DIALOG(dialog));
00698 if(resp == GTK_RESPONSE_OK)
00699 {
00700 fname = g_strdup(
00701 gtk_file_selection_get_filename(GTK_FILE_SELECTION(dialog)));
00702 gtk_widget_destroy(dialog);
00703 }
00704 else
00705 {
00706 gtk_widget_destroy(dialog);
00707 return FALSE;
00708 }
00709 }
00710
00711
00712
00713 if(!(f = fopen(fname, "w")))
00714 {
00715 g_printerr("%s: %s\n", fname, g_strerror(errno));
00716 ok = FALSE;
00717 }
00718 else
00719 {
00720 GtkTextIter start, end, p;
00721
00722
00723 gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(buf), &start, &end);
00724 p = start;
00725 while(!gtk_text_iter_equal(&start, &end))
00726 {
00727 gchar *buf, *fbuf;
00728 gsize br, bw;
00729 GError *err = NULL;
00730 gtk_text_iter_forward_chars(&p, CHAR_BUF);
00731 buf = gtk_text_iter_get_slice(&start, &p);
00732 fbuf = g_locale_from_utf8(buf, -1, &br, &bw, &err);
00733 g_free(buf);
00734
00735 if(!fbuf)
00736 {
00737 g_printerr("Failed UTF-8 to locale conversion: %s\n",
00738 err->message);
00739 g_clear_error(&err);
00740 ok = FALSE;
00741 break;
00742 }
00743 fwrite(fbuf, bw, 1, f);
00744 g_free(fbuf);
00745 if(ferror(f))
00746 {
00747 g_printerr("%s: %s\n", fname, g_strerror(errno));
00748 ok = FALSE;
00749 break;
00750 }
00751 start = p;
00752 }
00753 if(fclose(f) == EOF)
00754 {
00755 g_printerr("%s: %s\n", fname, g_strerror(errno));
00756 ok = FALSE;
00757 }
00758 }
00759
00760 strcpy(LoadFile, fname);
00761
00762 if(ok)
00763 {
00764 gtk_text_buffer_set_modified(buf, FALSE);
00765 if(fname != filename)
00766 {
00767 gchar *wt = g_strdup_printf("TextView (%s)", fname);
00768 g_free(filename);
00769 filename = fname;
00770 gtk_window_set_title(GTK_WINDOW(window), wt);
00771 g_free(wt);
00772 }
00773 }
00774
00775 GtkTextIter p1, p2;
00776 gtk_text_buffer_get_start_iter(buf2, &p2);
00777 gtk_text_buffer_get_end_iter(buf2, &p1);
00778 gtk_text_buffer_delete(buf2, &p2, &p1);
00779
00780 GtkTextIter p3, p4;
00781 gtk_text_buffer_get_start_iter(buf, &p3);
00782 gtk_text_buffer_get_end_iter(buf, &p4);
00783 gtk_text_buffer_remove_all_tags(buf, &p3, &p4);
00784
00785 Syntax_highlight();
00786 parseFilename(fname);
00787
00788
00789 char object_file[300];
00790 char string[500];
00791 strcpy(object_file,fname1);
00792 char *new = strtok (object_file,".");
00793
00794
00795 sprintf(string,"gcc -Wall -o %s %s",new,filename);
00796 gtk_entry_set_text(GTK_ENTRY (entry),string);
00797
00798
00799 return ok;
00800 }
00801
00807 static gboolean save_if_modified(void)
00808 {
00809 status = 0;
00810
00811 int resp;
00812 GtkWidget *dialog;
00813
00814
00815 if(!gtk_text_buffer_get_modified(GTK_TEXT_BUFFER(buf)))
00816 return TRUE;
00817
00818 dialog = gtk_message_dialog_new(GTK_WINDOW(window), 0, GTK_MESSAGE_QUESTION,GTK_BUTTONS_NONE,"Buffer Modified. Do you want to save it now?");
00819 gtk_dialog_add_buttons(GTK_DIALOG(dialog), GTK_STOCK_YES, GTK_RESPONSE_YES, GTK_STOCK_NO, GTK_RESPONSE_NO,GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
00820 resp = gtk_dialog_run(GTK_DIALOG(dialog));
00821 gtk_widget_destroy(dialog);
00822 switch(resp)
00823 {
00824 case GTK_RESPONSE_YES:
00825 return save_file(filename);
00826 case GTK_RESPONSE_NO:
00827 return TRUE;
00828 case GTK_RESPONSE_CANCEL:
00829 case GTK_RESPONSE_DELETE_EVENT:
00830 return FALSE;
00831 default:
00832 g_printerr("Error response %d from dialog\n", resp);
00833 return FALSE;
00834 }
00835 }
00836
00837
00844 void getError()
00845 {
00846 char line[3000];
00847 FILE *fp;
00848 int n;
00849 char f_name[300];
00850 fp = fopen("errorfile", "r+");
00851 while (fgets(line,256,fp)!= NULL)
00852 {
00853
00854 char *k1 = strstr(line,":");
00855 int i1 = k1-line;
00856 int k=0; int i;
00857 char num[100];
00858
00859 int f1 = 0;
00860 for(i=0 ;i < i1 ;i++)
00861 {
00862 f_name[f1++]=line[i];
00863 }
00864
00865 f_name[f1++]='\0';
00866
00867 for(i = i1 + 1; i < strlen(line); i++)
00868 {
00869 if(line[i]==' ' || line[i]==':' || isalpha(line[i]))
00870 break;
00871 num[k++]=line[i];
00872 }
00873 num[k++]='\0';
00874
00875
00876 if((k!=1 && strcmp(f_name,file_name)==0 ) || (k!=1 && strcmp(f_name,filename)==0 ))
00877 {
00878 n = atoi(num);
00879 getLine(n,1);
00880
00881 }
00882 }
00883 Syntax_highlight();
00884 }
00885
00886
00887
00888
00894 void submit_clicked(GtkWidget *widget, gpointer gdata)
00895 {
00896 status = 0;
00897 char command[300];
00898
00899 if(getFileName()!=NULL)
00900 {
00901 char string[300];
00902 strcpy(string, getFileName());
00903 int i,j;
00904 int k=0;
00905 char pathname[500];
00906
00907 for(i = strlen(string)-1; i >= 0; i--)
00908 {
00909 if(string[i] == '/')
00910 break;
00911 }
00912
00913 int f=0;
00914 for(j=i+1;j<strlen(string);j++)
00915 {
00916 file_name[f++]=string[j];
00917 }
00918 file_name[f++]='\0';
00919
00920
00921 for(j=0;j<i;j++)
00922 {
00923 pathname[k++]=string[j];
00924 }
00925 pathname[k++]='\0';
00926
00927 char setpath[1000];
00928
00929 sprintf(setpath,"cd %s",pathname);
00930
00931
00932
00933 sprintf(command,"%s > errorfile 2>&1 ",entry_text);
00934
00935 system(setpath);
00936
00937
00938 save_file(filename);
00939 system(command);
00940
00941
00942 }
00943
00944 FILE *f;
00945
00946 GtkTextIter p,p1,p2;
00947
00948 char fbuf[CHAR_BUF];
00949 size_t l;
00950
00951
00952 if(!(f = fopen("errorfile", "r")))
00953 {
00954 g_printerr("%s: %s\n", Fname, g_strerror(errno));
00955 return;
00956 }
00957
00958 gtk_text_buffer_get_start_iter(buf2,&p2);
00959 gtk_text_buffer_get_end_iter(buf2, &p1);
00960 gtk_text_buffer_delete(buf2,&p2,&p1);
00961
00962
00963 gtk_text_buffer_get_end_iter(buf2, &p);
00964
00965
00966 while((l = fread(fbuf, 1, sizeof(fbuf), f)) > 0)
00967 {
00968
00969 GError *err = NULL;
00970 gsize br, bw;
00971 gchar *text;
00972 if(!(text = g_locale_to_utf8(fbuf, l, &br, &bw, &err)))
00973 {
00974 g_printerr("File is not in UTF-8 format : %s\n", err->message);
00975 g_clear_error(&err);
00976 filename = NULL;
00977 gtk_window_set_title(GTK_WINDOW(window), "C Editor (Insert file name)");
00978 fclose(f);
00979 return;
00980 }
00981 gtk_text_buffer_insert(buf2, &p, text, bw);
00982 g_free(text);
00983 }
00984
00985
00986 gtk_text_buffer_set_modified(buf2, FALSE);
00987 gtk_text_buffer_get_start_iter(buf2, &p);
00988 gtk_text_buffer_place_cursor(buf2, &p);
00989
00990
00991 status = 1;
00992 if(ferror(f))
00993 {
00994 g_printerr("%s: %s\n", "errorfile", g_strerror(errno));
00995 fclose(f);
00996 return;
00997 }
00998 if(fclose(f) == EOF)
00999 g_printerr("%s: %s\n", "errorfile", g_strerror(errno));
01000
01001 getError();
01002 }
01003
01004
01010 void get_Line_At_Cursor(int lno)
01011 {
01012 char line[3000];
01013 FILE *fp;
01014 int n;
01015 int count = 0;
01016
01017
01018
01019 fp = fopen("errorfile", "r+");
01020
01021 while (fgets(line,500,fp)!= NULL)
01022 {
01023 if(count == lno)
01024 break;
01025 count++;
01026 }
01027
01028 char f_name[400];
01029 char *k1 = strstr(line,":");
01030 int i1 = k1-line;
01031
01032 int k=0; int i;
01033 char num[100];
01034
01035 for(i = 0; i < i1 ;i++)
01036 {
01037 f_name[k++] = line[i];
01038 }
01039 f_name[k++]='\0';
01040
01041 k=0;
01042
01043 for(i = i1 + 1; i < strlen(line); i++)
01044 {
01045 if(line[i]==' ' || line[i]==':' || isalpha(line[i]))
01046 break;
01047 num[k++]=line[i];
01048 }
01049 num[k++]='\0';
01050 if((k!=1 && strcmp(f_name,file_name)==0 ) || (k!=1 && strcmp(f_name,filename)==0 ))
01051 {
01052 n = atoi(num);
01053 getLine(n,0);
01054
01055 }
01056 else
01057 {
01058 GtkTextIter ms1,me1;
01059 gtk_text_buffer_get_start_iter(buf, &ms1);
01060 gtk_text_buffer_get_end_iter(buf, &me1);
01061 gtk_text_buffer_remove_tag_by_name(buf,"yellow_bg",&ms1,&me1);
01062 }
01063 fclose(fp);
01064 }
01065
01070 void get_iter_at_cursor()
01071 {
01072
01073 GtkTextMark *pos_cursor;
01074 gchar *mark_name;
01075 GtkTextIter iter;
01076 gint lineNo;
01077
01078 pos_cursor = gtk_text_buffer_get_insert(buf2);
01079
01080 mark_name = gtk_text_mark_get_name(pos_cursor);
01081
01082 gtk_text_buffer_get_iter_at_mark(buf2,&iter,pos_cursor);
01083
01084
01085 lineNo = gtk_text_iter_get_line(&iter);
01086
01087 getLine_error((int)lineNo,1);
01088
01089 get_Line_At_Cursor((int)lineNo);
01090
01091 }
01092
01093
01097 void gtk_text_view_notify_cursor_position(GtkTextBuffer *buffer,GtkWidget *v)
01098 {
01099 if(status)
01100 {
01101 get_iter_at_cursor();
01102
01103 }
01104 }
01105
01106