昨天晚上和丫頭聊天(珠珠)
他說,假如以後我們吵架了怎麼辦呢?
我說吵架很正常阿,隻要你不提分手,我會珍惜這段感情的
可是假如一時沖動提了呢?
我說那就不要意識沖動嘛,要不你說分手我有不可能死纏爛打的。。。
那假如我們吵架了不說話了呢?你會主動和我說話不?
當然阿,女生耍耍小脾氣多正常的,我應該會主動的
那以後假如吵架生氣了,你隻要發個短信“丫頭”過來我就不生氣了~
呵呵,聽這還感覺還是很感動的,多好的女孩,呵呵,希望能一直和她走下去,更遠,再遠,搞的我昨天做了一晚上關于丫頭的夢,好久沒做夢了突然作一次還不習慣的,呵呵,不過夢的内容記不到了,可惜阿~
說完生活進入正題了哈
今天gtk IDE的編寫有有了新進展,可以編譯單一檔案了,呵呵,不過那個連結還麼作。。。
在信進展中遇到了個以解決的問題,不過我還是把解決方法拿來和大家分享一下哈
是關于system的使用的
感覺并不是所有終端能執行的語句方到了system中就能執行的,尤其是重定向
比如
程式中的system(“ls”)
可以正常執行
system(“ls > out.txt”)也可以正常執行
但是對錯誤重定向就有點問題了
如
system(“ls asdf 2&> out.txt”)
system(“ls asdf 2 &> out.txt”)
system(“ls asdf &> out.txt”)
都不能重定向成功,而在終端下都是可以執行的
但是
system(“ls asdf 2> out.txt”)
system(“ls asdf > out.txt 2>&1”)
就可以
一下是這階段的源代碼
對代碼的子產品有進行了改變,感覺清晰了一些,但是還是單檔案編譯,因為我還不會些makefile,不過會多檔案編譯了,但是直接代碼裡多檔案編譯是在是麻煩,是以暫時沒有使用
#include <gtk/gtk.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <unistd.h>
#define MAIN_WINDOW_WIDTH 790
#define MAIN_WINDOW_HIGH 590
#define F_NAME 0
#define F_PATH 1
void main_window_init(void);
void show_init(void);
void interface_init(void);
void interface_set(void);
void menu_init(void);
void view_init(void);
void debug_view_init(void);
void view_state_label_init(void);
gint delete_event(GtkWidget* widget, GdkEvent* event, gpointer data);
gint file_open(GtkWidget* widget, GdkEvent* event, gpointer data);
gint file_open_ok(GtkWidget* widget, GdkEvent* event, gpointer data);
gint file_save(GtkWidget* widget, GdkEvent* event, gpointer data);
gint file_save_ok(GtkWidget* widget, GdkEvent* event, gpointer data);
gint debug_compile(GtkWidget* widget, GdkEvent* event, gpointer data);
gint debug_function(GtkWidget* widget, GdkEvent* event, gpointer data);
gint view_key_press(GtkWidget* widget, GdkEvent* event, gpointer data);
gint main_window_key_press(GtkWidget* widget, GdkEvent* event, gpointer data);
char* f_get_string_name(char* string,char type);
GtkWidget* main_window;
GtkWidget* window;
GtkWidget* main_menu_bar;
GtkWidget* file;
GtkWidget* table;
GtkWidget* view;
GtkWidget* view_scroll;
GtkWidget* debug_view;
GtkWidget* debug_view_scroll;
GtkWidget* main_menu_box;
GtkWidget* project_box;
GtkWidget* debug_box;
GtkWidget* view_box;
GtkWidget* view_state_label;
GtkWidget* view_state_label_box;
GtkWidget* debug_view_box;
GtkWidget* default_box;
GtkWidget* menu_items;
GtkWidget* tmp1;
GtkWidget* tmp2;
GtkWidget* tmp3;
GtkWidget* tmp4;
const char *file_name = NULL;
GtkTextBuffer* code = NULL;
GtkTextBuffer* debug_view_buffer = NULL;
int main(int argc, char* argv[])
{
gtk_init(&argc,&argv);
main_window_init();
interface_init();
view_init();
view_state_label_init();
debug_view_init();
menu_init();
tmp1 = gtk_button_new_with_label("project_space");
tmp2 = gtk_button_new_with_label("debug_space");
tmp3 = gtk_button_new_with_label("default_space");
tmp4 = gtk_button_new_with_label("view_space");
interface_set();
g_signal_connect(G_OBJECT(tmp3),"clicked",G_CALLBACK(debug_function),NULL);
show_init();
gtk_main();
return 0;
}
gint debug_function(GtkWidget* widget, GdkEvent* event, gpointer data)
{
system("ls s 2>/home/flyli/program/hello_world/debug.info");
return TRUE;
}
gint file_open(GtkWidget* widget, GdkEvent* event, gpointer data)
{
file = gtk_file_selection_new("open file");
g_signal_connect(GTK_FILE_SELECTION(file)->ok_button,"clicked",G_CALLBACK(file_open_ok),file);
gtk_widget_show(file);
g_printf("file_open/n");
return TRUE;
}
gint file_open_ok(GtkWidget* widget, GdkEvent* envet, gpointer data)
{
int read_file = 0;
int len = 0;
GtkTextIter end;
char buf[1024] = {0};
gtk_text_buffer_set_text(code, "NULL",0);
file_name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(file));
read_file = open(file_name, O_RDONLY);
while((len = read(read_file, buf, sizeof(buf)))>0)
{
gtk_text_buffer_get_end_iter (code, &end);
gtk_text_buffer_insert(code, &end, buf, len);
}
close(read_file);
g_printf("%s open/n",file_name);
gtk_widget_destroy(file);
return TRUE;
}
gint file_save(GtkWidget* widget, GdkEvent* event, gpointer data)
{
FILE* fp = NULL;
int write_file = 0;
int len = 0;
GtkTextIter start;
GtkTextIter end;
gchar* buf = NULL;
char cmd[10000] = {0};
if(file_name != NULL)
{
sprintf(cmd,"rm %s",file_name);
system(cmd);
close(write_file);
fp= fopen(file_name, "w");
gtk_text_buffer_get_start_iter (code, &start);
gtk_text_buffer_get_end_iter (code, &end);
buf = gtk_text_buffer_get_text(code, &start, &end,FALSE);
g_print("%d",strlen(buf));
fwrite(buf, strlen(buf), 1, fp);
fclose(fp);
}
else
{
file = gtk_file_selection_new("open file");
g_signal_connect(GTK_FILE_SELECTION(file)->ok_button,"clicked",G_CALLBACK(file_save_ok),file);
gtk_widget_show(file);
}
g_printf("file_save/n");
return TRUE;
}
gint file_save_ok(GtkWidget* widget, GdkEvent* envet, gpointer data)
{
FILE* fp = NULL;
int write_file = 0;
int len = 0;
GtkTextIter start;
GtkTextIter end;
char* buf = NULL;
char cmd[1000] = {0};
//gtk_text_buffer_set_text(code, "NULL",0);
file_name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(file));
write_file = open(file_name, O_WRONLY);
sprintf(cmd,"rm %s",file_name);
if(write_file != -1)
{
system(cmd);
}
close(write_file);
fp= fopen(file_name, "w");
gtk_text_buffer_get_start_iter (code, &start);
gtk_text_buffer_get_end_iter (code, &end);
buf = gtk_text_buffer_get_text(code, &start, &end,FALSE);
fwrite(buf, strlen(buf), 1, fp);
fclose(fp);
g_printf("%s save/n",file_name);
gtk_widget_destroy(file);
return TRUE;
}
gint debug_compile(GtkWidget* widget, GdkEvent* event, gpointer data)
{
int i = 0;
char cmd[1000] = {0};
char* compile_file_name = NULL;
char* compile_file_path = NULL;
int debug_file = 0;
char system_rnt_read[1000] = {0};
char debug_file_name[1000] = {0};
GtkTextIter end;
g_print("Compile1/n");
if(file_name != NULL)
{
compile_file_name = f_get_string_name((char*)file_name,F_NAME);
compile_file_path = f_get_string_name((char*)file_name,F_PATH);
sprintf(cmd,"gcc -c %s -o %s.o `pkg-config --cflags --libs gtk+-2.0` > %s/debug.info 2>&1", file_name, compile_file_name, compile_file_path);
system(cmd);
sprintf(debug_file_name,"%s/debug.info",compile_file_path);
free(compile_file_name);
free(compile_file_path);
}
g_print("debug_file_name:%s/n",debug_file_name);
debug_file = open(debug_file_name,O_RDONLY);
read(debug_file, system_rnt_read, sizeof(system_rnt_read));
gtk_text_buffer_set_text(debug_view_buffer,NULL,0);
gtk_text_buffer_get_end_iter(debug_view_buffer, &end);
gtk_text_buffer_insert(debug_view_buffer, &end, system_rnt_read, strlen(system_rnt_read));
g_print("system_rnt_read:%s/n", system_rnt_read);
return TRUE;
}
gint main_window_key_press(GtkWidget* widget, GdkEvent* event, gpointer data)
{
guint key = 0;
key = event->key.keyval;
g_print("state:%x/n", event->key.state);
g_print("val:%x/n", event->key.keyval);
switch(event->key.state)
{
case 4:
{
switch(event->key.keyval)
{
case 'f':
{
file_open(NULL,NULL,NULL);
return TRUE;
break;
}
case 's':
{
file_save(NULL,NULL,NULL);
return TRUE;
break;
}
default:break;
}
break;
}
}
return FALSE;
}
gint view_key_press(GtkWidget* widget, GdkEvent* event, gpointer data)
{
guint key = 0;
key = event->key.keyval;
g_print("state:%x/n", event->key.state);
g_print("val:%x/n", event->key.keyval);
switch(event->key.state)
{
case 0:
{
char cmd[1000] = "123";
switch(event->key.keyval)
{
case 0xffc4:
{
debug_compile(NULL,NULL,NULL);
return TRUE;
break;
}
default:break;
}
break;
}
default:
{
break;
}
}
return FALSE;
}
gint delete_event(GtkWidget* widget, GdkEvent* event, gpointer data)
{
if(data == "main_window")
{
g_print("main_window send quit!/n");
}
//system("ls");
gtk_main_quit();
//gtk_widget_destroy(widget);
return TRUE;
}
void main_window_init(void)
{
main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(main_window),"flyli");
gtk_window_set_default_size(GTK_WINDOW(main_window),MAIN_WINDOW_WIDTH,MAIN_WINDOW_HIGH);
gtk_widget_show(main_window);
g_signal_connect (G_OBJECT (main_window), "delete_event", G_CALLBACK (delete_event), "main_window");
g_signal_connect (G_OBJECT (main_window), "key_press_event",G_CALLBACK(main_window_key_press),NULL);
}
void menu_init(void)
{
GtkWidget* main_menu;
GtkWidget* main_file_item;
main_menu_bar = gtk_menu_bar_new();
//file
main_menu = gtk_menu_new();
main_file_item = gtk_menu_item_new_with_label("File");
gtk_widget_show(main_file_item);
menu_items = gtk_menu_item_new_with_label("Open(Ctrl_f)");
gtk_menu_shell_append(GTK_MENU_SHELL(main_menu),menu_items);
gtk_widget_show (menu_items);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(main_file_item),main_menu);
g_signal_connect (G_OBJECT (menu_items), "activate", G_CALLBACK (file_open), "main_file_item");
menu_items = gtk_menu_item_new_with_label("Save(Ctrl_f)");
gtk_menu_shell_append(GTK_MENU_SHELL(main_menu),menu_items);
gtk_widget_show (menu_items);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(main_file_item),main_menu);
g_signal_connect (G_OBJECT (menu_items), "activate", G_CALLBACK (file_save), "main_file_item");
gtk_menu_shell_append(GTK_MENU_SHELL(main_menu_bar),main_file_item);
//debug
main_menu = gtk_menu_new();
main_file_item = gtk_menu_item_new_with_label("Debug");
gtk_widget_show(main_file_item);
menu_items = gtk_menu_item_new_with_label("Compile");
gtk_menu_shell_append(GTK_MENU_SHELL(main_menu),menu_items);
gtk_widget_show (menu_items);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(main_file_item),main_menu);
g_signal_connect (G_OBJECT (menu_items), "activate", G_CALLBACK (debug_compile), "main_file_item");
gtk_menu_shell_append(GTK_MENU_SHELL(main_menu_bar),main_file_item);
gtk_widget_show(main_menu_bar);
}
void interface_init(void)
{
table = gtk_table_new(100, 100 , TRUE);
gtk_container_add(GTK_CONTAINER(main_window), table);
main_menu_box = gtk_hbox_new(FALSE,0);
project_box = gtk_hbox_new(FALSE,0);
debug_box = gtk_hbox_new(FALSE,0);
default_box = gtk_hbox_new(FALSE,0);
view_box = gtk_hbox_new(FALSE,0);
debug_view_box = gtk_vbox_new(FALSE,0);
view_state_label_box = gtk_vbox_new(FALSE,0);
gtk_widget_show(table);
gtk_widget_show(main_menu_box);
gtk_widget_show(project_box);
gtk_widget_show(debug_box);
gtk_widget_show(view_box);
gtk_widget_show(default_box);
gtk_widget_show(view_state_label_box);
}
void interface_set(void)
{
gtk_table_attach_defaults(GTK_TABLE(table), main_menu_box, 0,100, 0, 5);
gtk_table_attach_defaults(GTK_TABLE(table), project_box, 0,15, 5, 84);
gtk_table_attach_defaults(GTK_TABLE(table), debug_box , 1,99, 87, 99);
gtk_table_attach_defaults(GTK_TABLE(table), view_state_label, 1,99,84,87);
gtk_table_attach_defaults(GTK_TABLE(table), default_box, 85,100,5,84);
gtk_table_attach_defaults(GTK_TABLE(table), view_box , 15,85,6,84);
gtk_box_pack_start(GTK_BOX(project_box), tmp1, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(default_box), tmp3, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(main_menu_box),main_menu_bar,TRUE, TRUE, 0);
}
void show_init(void)
{
gtk_widget_show(tmp1);
gtk_widget_show(tmp2);
gtk_widget_show(tmp3);
gtk_widget_show(tmp4);
gtk_widget_show(view);
gtk_widget_show(debug_view);
gtk_widget_show(debug_view_scroll);
}
void view_init(void)
{
view = gtk_text_view_new();
code = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));
view_scroll = gtk_scrolled_window_new(NULL,NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(view_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
//gtk_container_add (GTK_CONTAINER (view_box), view_scroll);
gtk_container_add (GTK_CONTAINER (view_box), view_scroll);
gtk_container_add (GTK_CONTAINER (view_scroll), view);
g_signal_connect(G_OBJECT(view), "key_press_event", G_CALLBACK(view_key_press), NULL);
gtk_widget_show(view_scroll);
gtk_widget_show(view);
}
void debug_view_init(void)
{
debug_view = gtk_text_view_new();
debug_view_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(debug_view));
debug_view_scroll = gtk_scrolled_window_new(NULL,NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(debug_view_scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_container_add (GTK_CONTAINER (debug_box), debug_view_scroll);
gtk_container_add (GTK_CONTAINER (debug_view_scroll), debug_view);
gtk_widget_show(debug_view_scroll);
gtk_widget_show(debug_view);
}
void view_state_label_init(void)
{
view_state_label = gtk_label_new("label");
//gtk_label_set_text(GTK_LABEL(view_state_label),"lable");
//gtk_container_add(GTK_CONTAINER(view_state_label_box),view_state_label);
gtk_widget_show(view_state_label);
}
char* f_get_string_name(char* string,char type)
{
char* string_rnt = NULL;
char* string_from = NULL;
char tmp = 0;
unsigned int i = 0;
string_from = string;
if(type == 0)
{
for(i = 0; i < strlen(string_from); i++)
{
if(*(string_from+i) == '.')
{
string_rnt = calloc(i+1,1);
memcpy(string_rnt, string, i);
return string_rnt;
break;
}
}
}
else if(type == 1)
{
for(i = strlen(string_from); i != 0; i--)
{
if(*(string_from+i) == '/')
{
string_rnt = calloc(i+1,1);
memcpy(string_rnt, string, i);
return string_rnt;
break;
}
}
}
g_printf("%s/n",string_rnt);
return NULL;
}
一下是程式截圖,可以顯示編譯的錯誤資訊了,呵呵
