void printCurr(list_ref list, struct options* options) { if(!options->s_opt_silent) { if(viewcurr_list(list) == NULL) eprintf(" No text to print.\n"); else printf("\t%s\n",viewcurr_list(list)); } }
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"); }
/*Delete from list----------------------------------------------------*/ void delete_list(list_ref list) { //if size is greater than zero delete if (size > 0) { assert(is_list(list)); assert(!empty_list(list)); //temp node for free listnode_ref temp = list->curr; //if only item in list change all pointers to NULL; if (list->curr->next == NULL && list->curr->prev == NULL) { list->head = NULL; list->curr = NULL; list->last = NULL; //if at end of list } else if (list->curr->next == NULL) { list->curr->prev->next = list->curr->next; //NULL list->curr = list->curr->prev; list->last = list->curr; //if at the front of the list } else if (list->curr->prev == NULL) { list->curr->next->prev = list->curr->prev; //NULL list->curr = list->curr->next; list->head = list->curr; //general case } else { list->curr->prev->next = list->curr->next; list->curr->next->prev = list->curr->prev; list->curr = list->curr->next; } //free node that was removed freenode(temp); //decrement size --size; //print the current if (list->curr != NULL) viewcurr_list(list); else printf("%s: no lines in file at ./%s\n", Exec_Name, Exec_Name); //size < 0 } else { printf("%s: no lines in file at ./%s\n", Exec_Name, Exec_Name); } }
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 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 ComI(list_ref list, char *inputline, char *stdinline) { inputline = Sstrcpy(inputline, stdinline); insert_listi(list, inputline); viewcurr_list(list); }
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 ComDot(list_ref list) { viewcurr_list(list); }
void Com$(list_ref list) { setmove_list(list, MOVE_LAST); viewcurr_list(list); }