void editfile (list_ref list, char *filename) { char stdinline[1024]; int stdincount = 0; for(;; ++stdincount) { printf ("%s: ", Exec_Name); char *linepos = fgets (stdinline, sizeof stdinline, stdin); if (linepos == NULL) break; if (want_echo) printf ("%s", stdinline); linepos = strchr (stdinline, '\n'); if (linepos == NULL || stdinline[0] == '\0') { badline (stdincount, stdinline); }else { *linepos = '\0'; switch (stdinline[0]) { case '$': setmove_list(list, MOVE_LAST, stdinline); break; case '*': print_all(list, stdinline); break; case '.': viewcurr_list(list, stdinline); break; case '0': setmove_list(list, MOVE_HEAD, stdinline); break; case '<': setmove_list(list, MOVE_PREV, stdinline); break; case '>': setmove_list(list, MOVE_NEXT, stdinline); break; case '@': debugdump_list (list, stdinline); break; case 'a': insert_line_after (list, stdinline+1); break; case 'd': delete_list(list, stdinline); break; case 'i': insert_line_before(list, stdinline+1); break; case 'r': insertfile(list, stdinline+1); break; case 'w': writefile (list, stdinline+1, filename); break; default : badline (stdincount, stdinline); } } } printf("%s\n", "^D"); }
int writeFile(list_ref list, char *filename, struct options* options) { int count = 0; FILE *f = fopen(filename, "w"); if(f == NULL) { eprintf("Error writing to file %s\n", filename); fclose(f); return -1; } for(setmove_list(list, MOVE_HEAD); setmove_list(list, MOVE_NEXT);) { fputs(viewcurr_list(list), f); fputs("\n",f); count++; } return count; }
void insertBefore(list_ref list, char* line, struct options* options) { setmove_list(list, MOVE_PREV); insert_list(list, line); printCurr(list, options); }
void nextLine(list_ref list, struct options* options) { setmove_list(list,MOVE_NEXT); printCurr(list, options); }
void prevLine(list_ref list, struct options* options) { if(!setmove_list(list,MOVE_PREV)) setmove_list(list, MOVE_NEXT); printCurr(list, options); }
void printAll(list_ref list, struct options* options) { setmove_list(list, MOVE_HEAD); while(setmove_list(list, MOVE_NEXT)) { printCurr(list, options); } }
void firstLine(list_ref list, struct options* options) { setmove_list(list, MOVE_HEAD); if(setmove_list(list, MOVE_NEXT)) printCurr(list, options); }
void lastLine(list_ref list, struct options* options) { setmove_list(list, MOVE_LAST); printCurr(list, options); }
void editfile (list_ref list) { char stdinline[1024]; int stdincount = 0; for(;; ++stdincount) { printf ("%s: ", Exec_Name); char *linepos = fgets (stdinline, sizeof stdinline, stdin); if(isspace(stdinline[0]) != 0) { continue; } if (linepos == NULL) break; if (want_echo) printf ("%s", stdinline); linepos = strchr (stdinline, '\n'); if (linepos == NULL || stdinline[0] == '\0') { badline (stdincount, stdinline); } else { *linepos = '\0'; switch (stdinline[0]) { case '$': setmove_list (list, MOVE_LAST); break; case '*': print_list(list); break; case '.': printf("%6d: %s\n",counter(list, curr), viewcurr_list (list)); break; case '0': setmove_list (list, MOVE_HEAD); break; case '<': setmove_list (list, MOVE_PREV); break; case '>': setmove_list (list, MOVE_NEXT); break; case '@': debugdump_list (list); break; case 'a': insertAfter(list, stdinline+1, curr); break; case 'd': delete_list (list); break; case 'i': insertBefore(list, stdinline+1); break; case 'r': putfilelist (list, stdinline+1, 0); break; case 'w': putfilelist (list, stdinline+1, 2); break; case '#': break; default : badline (stdincount, stdinline); } } } printf (" ^D\n"); }
void ComR(list_ref list) { setmove_list(list, MOVE_NEXT); viewcurr_list(list); }
void ComL(list_ref list) { setmove_list(list, MOVE_PREV); viewcurr_list(list); }
void Com0(list_ref list) { setmove_list(list, MOVE_HEAD); viewcurr_list(list); }
void Com$(list_ref list) { setmove_list(list, MOVE_LAST); viewcurr_list(list); }