/* * Text Edit * --------- * A sample text editor written using GraphApp. Some functions may not * work yet. */ #include #include char *progname = "TextEdit: "; textbox text = NULL; char *filename = NULL; char *data = NULL; char *addstrings(char *a, char *b) { int size; char *str; size = strlen(a) + strlen(b) + 1; str = (char *) malloc(size); if (str != NULL) { strcpy(str, a); strcat(str, b); } return str; } void quit(menuitem m) { exitapp(); } void new_file(menuitem m) { settext(text, NULL); free(filename); filename = NULL; } void open_as(menuitem m) { FILE *f; char *name = askfilename(NULL, NULL); /* if (name == NULL) return; else { f = fopen(name, "r"); if (f == NULL) { askok("Couldn't read the file!"); return; } fclose(f); free(filename); filename = strdup(name); } */ } void save_as(menuitem m) { FILE *f; char *name = askfilesave(NULL, NULL); /* if (name == NULL) return; else { f = fopen(name, "w"); if (f == NULL) { askok("Couldn't save the file!"); return; } fprintf(f, "%s", gettext(text)); fclose(f); free(filename); filename = strdup(name); } */ } void save(menuitem m) { FILE *f; /* if (filename == NULL) { save_as(m, value); return; } f = fopen(filename, "w"); if (f == NULL) { askok("Couldn't save the file!"); return; } fprintf(f, "%s", gettext(text)); fclose(f); */ } void resize_window(window w, rect r) { int changed = 0; if (r.height < 100) { r.height = 100; changed = 1; } if (r.width < 200) { r.width = 200; changed = 1; } if (text) resize(text, r); if (changed) resize(w, r); } void cut_selection(menuitem m) { cuttext(text); } void copy_selection(menuitem m) { copytext(text); } void paste_selection(menuitem m) { pastetext(text); } void clear_selection(menuitem m) { cleartext(text); } void select_all(menuitem m) { selecttext(text, 0, -1); } void goto_start(menuitem m) { selecttext(text, 0, 0); } void goto_end(menuitem m) { selecttext(text, -1, -1); } void add_line(menuitem m) { inserttext(text, "---------"); } void main(void) { window w; rect r; char *window_name; window_name = addstrings(progname, "Untitled"); w = newwindow(window_name, rect(0,0,500,440), StandardWindow); free(window_name); setresize(w, resize_window); newmenubar(NULL); newmenu("File"); newmenuitem("New", 'N', new_file ); newmenuitem("Open...", 'O', open_as ); newmenuitem("Save", 'S', save ); newmenuitem("Save As...", 'A', save_as ); newmenuitem("-", 0, NULL ); newmenuitem("Quit", 'Q', quit ); newmenu("Edit"); newmenuitem("Cut", 'X', cut_selection ); newmenuitem("Copy", 'C', copy_selection ); newmenuitem("Paste", 'V', paste_selection ); newmenuitem("Clear", 0, clear_selection ); newmenuitem("Select All", 0, select_all ); newmenuitem("-", 0, NULL ); newmenuitem("Go to Start", 0, goto_start ); newmenuitem("Go to End", 0, goto_end ); newmenuitem("-", 0, NULL ); newmenuitem("Insert Line", 0, add_line ); text = newtextbox(NULL, rect(0,0,500,440)); show(w); mainloop(); }