Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.67 KB | None | 0 0
  1. typedef struct {
  2. struct list *prev;
  3. struct list *next;
  4. struct list *undop;
  5. struct list *redop;
  6. char val;
  7. }list;
  8.  
  9. void copy(list *first, int n, list *clipboard, int cursor)
  10. {
  11. int i;
  12. list *current, *currentclip, *p;
  13. current = first;
  14. for (i=0; i<cursor; i++)
  15. {
  16. current = current->next;
  17. }
  18.  
  19. if(clipboard!=NULL)
  20. {
  21. currentclip=clipboard;
  22. while(clipboard->next != NULL)
  23. {
  24. currentclip=clipboard;
  25. clipboard=clipboard->next;
  26. free(currentclip);
  27. }
  28. free(clipboard);
  29. }
  30. clipboard = (list*)malloc(sizeof(list));
  31. clipboard -> prev = NULL;
  32. clipboard -> next = NULL;
  33. clipboard -> val = current -> val;
  34. currentclip = clipboard;
  35. current=current->next;
  36.  
  37. for (i=0; i<n-1; i++)
  38. {
  39. p = (list*)malloc(sizeof(list));
  40. p -> prev = currentclip;
  41. p -> next = NULL;
  42. p -> val = current -> val;
  43. currentclip -> next = p;
  44. currentclip = p;
  45. current = current -> next;
  46. }
  47. }
  48.  
  49. void paste(list *first, list *clipboard, int *cursor)
  50. {
  51. int i;
  52. list *current, *currentclip, *p, *currentnext;
  53. current = first;
  54. for (i=0; i<(*cursor); i++)
  55. {
  56. current = current->next;
  57. }
  58.  
  59. if(clipboard!=NULL)
  60. {
  61. currentclip = clipboard;
  62. currentnext = current->next;
  63. while (currentclip!=NULL)
  64. {
  65. p=(list*)malloc(sizeof(list));
  66. current->next = p;
  67. currentnext->prev = p;
  68. p->next = currentnext;
  69. p->prev = current;
  70. p->val = currentclip->val;
  71. (*cursor)++;
  72. }
  73. }
  74. }
  75.  
  76. void del(list *first, int cursor, int n)
  77. {
  78. int i;
  79. list *current, *currentprev, *currentnext;
  80. current = first;
  81. for (i=0; i<cursor; i++)
  82. {
  83. current = current->next;
  84. }
  85. for (i=0; i<n; i++)
  86. {
  87. currentprev = current->prev;
  88. currentnext = current->next;
  89. currentnext -> prev = currentprev;
  90. if (currentprev!=NULL)
  91. {
  92. currentprev->next = currentnext;
  93. }
  94. free(current);
  95. current=currentnext;
  96. }
  97. }
  98.  
  99. void insert(list *first, int *cursor, char* stringtoinsert)
  100. {
  101. list *toinsert, *p, *prevp;
  102. int i;
  103. toinsert = (list*)malloc(sizeof(list));
  104. toinsert ->next = NULL;
  105. toinsert -> prev = NULL;
  106. toinsert -> val = stringtoinsert[0];
  107. prevp = toinsert;
  108. for (i=1; i<strlen(stringtoinsert); i++)
  109. {
  110. p = (list*)malloc(sizeof(list));
  111. p ->next = NULL;
  112. p -> prev = prevp;
  113. p -> val = stringtoinsert[i];
  114. prevp->next = p;
  115. prevp = p;
  116. }
  117. paste(first, toinsert, cursor);
  118. }
  119.  
  120. void move(int *cursor, int n)
  121. {
  122. (*cursor) += n;
  123. }
  124.  
  125. void backspace(int *cursor, list *first)
  126. {
  127. (*cursor) --;
  128. del(first, cursor, 1);
  129. }
  130.  
  131. void backup(list *first)
  132. {
  133. list *newfirst, *current, *currentprev, *oldcurrent;
  134. newfirst = (list*)malloc(sizeof(list));
  135. newfirst->undop = first;
  136. first->redop = newfirst;
  137. newfirst->val = first -> val;
  138. currentprev = newfirst;
  139. oldcurrent = first->next;
  140. while(oldcurrent!=NULL)
  141. {
  142. current = (list*)malloc(sizeof (list));
  143. current -> val = oldcurrent -> val;
  144. current -> prev = currentprev;
  145. currentprev -> next = current;
  146. current->next = NULL;
  147. currentprev = current;
  148. oldcurrent = oldcurrent->next;
  149. }
  150. first = newfirst;
  151. }
  152.  
  153. void undo(list *first)
  154. {
  155. first = first -> undop;
  156. }
  157.  
  158. void redo (list *first)
  159. {
  160. first = first -> redop;
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement