Example #1
0
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));
	}
}
Example #2
0
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);
  }
}
Example #4
0
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;
}
Example #5
0
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);
}