Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef struct {
- struct list *prev;
- struct list *next;
- struct list *undop;
- struct list *redop;
- char val;
- }list;
- void copy(list *first, int n, list *clipboard, int cursor)
- {
- int i;
- list *current, *currentclip, *p;
- current = first;
- for (i=0; i<cursor; i++)
- {
- current = current->next;
- }
- if(clipboard!=NULL)
- {
- currentclip=clipboard;
- while(clipboard->next != NULL)
- {
- currentclip=clipboard;
- clipboard=clipboard->next;
- free(currentclip);
- }
- free(clipboard);
- }
- clipboard = (list*)malloc(sizeof(list));
- clipboard -> prev = NULL;
- clipboard -> next = NULL;
- clipboard -> val = current -> val;
- currentclip = clipboard;
- current=current->next;
- for (i=0; i<n-1; i++)
- {
- p = (list*)malloc(sizeof(list));
- p -> prev = currentclip;
- p -> next = NULL;
- p -> val = current -> val;
- currentclip -> next = p;
- currentclip = p;
- current = current -> next;
- }
- }
- void paste(list *first, list *clipboard, int *cursor)
- {
- int i;
- list *current, *currentclip, *p, *currentnext;
- current = first;
- for (i=0; i<(*cursor); i++)
- {
- current = current->next;
- }
- if(clipboard!=NULL)
- {
- currentclip = clipboard;
- currentnext = current->next;
- while (currentclip!=NULL)
- {
- p=(list*)malloc(sizeof(list));
- current->next = p;
- currentnext->prev = p;
- p->next = currentnext;
- p->prev = current;
- p->val = currentclip->val;
- (*cursor)++;
- }
- }
- }
- void del(list *first, int cursor, int n)
- {
- int i;
- list *current, *currentprev, *currentnext;
- current = first;
- for (i=0; i<cursor; i++)
- {
- current = current->next;
- }
- for (i=0; i<n; i++)
- {
- currentprev = current->prev;
- currentnext = current->next;
- currentnext -> prev = currentprev;
- if (currentprev!=NULL)
- {
- currentprev->next = currentnext;
- }
- free(current);
- current=currentnext;
- }
- }
- void insert(list *first, int *cursor, char* stringtoinsert)
- {
- list *toinsert, *p, *prevp;
- int i;
- toinsert = (list*)malloc(sizeof(list));
- toinsert ->next = NULL;
- toinsert -> prev = NULL;
- toinsert -> val = stringtoinsert[0];
- prevp = toinsert;
- for (i=1; i<strlen(stringtoinsert); i++)
- {
- p = (list*)malloc(sizeof(list));
- p ->next = NULL;
- p -> prev = prevp;
- p -> val = stringtoinsert[i];
- prevp->next = p;
- prevp = p;
- }
- paste(first, toinsert, cursor);
- }
- void move(int *cursor, int n)
- {
- (*cursor) += n;
- }
- void backspace(int *cursor, list *first)
- {
- (*cursor) --;
- del(first, cursor, 1);
- }
- void backup(list *first)
- {
- list *newfirst, *current, *currentprev, *oldcurrent;
- newfirst = (list*)malloc(sizeof(list));
- newfirst->undop = first;
- first->redop = newfirst;
- newfirst->val = first -> val;
- currentprev = newfirst;
- oldcurrent = first->next;
- while(oldcurrent!=NULL)
- {
- current = (list*)malloc(sizeof (list));
- current -> val = oldcurrent -> val;
- current -> prev = currentprev;
- currentprev -> next = current;
- current->next = NULL;
- currentprev = current;
- oldcurrent = oldcurrent->next;
- }
- first = newfirst;
- }
- void undo(list *first)
- {
- first = first -> undop;
- }
- void redo (list *first)
- {
- first = first -> redop;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement