+static void
+edit_undo(int item, int mode)
+{
+ int i;
+ static list_item *backup = NULL;
+
+ switch(mode) {
+ case CLEAR_UNDO:
+ if(backup) {
+ free_list_item(backup[0]);
+ xfree(backup);
+ }
+ break;
+ case BACKUP_ITEM:
+ if(backup) {
+ free_list_item(backup[0]);
+ xfree(backup);
+ }
+ backup = xmalloc(sizeof(list_item));
+ for(i = 0; i < ITEM_FIELDS; i++)
+ if(database[item][i] == NULL)
+ backup[0][i] = NULL;
+ else
+ backup[0][i] =
+ xstrdup(database[item][i]);
+ break;
+ case RESTORE_ITEM:
+ if(backup) {
+ free_list_item(database[item]);
+ itemcpy(database[item], backup[0]);
+ xfree(backup);
+ }
+ break;
+ default:
+ assert(0);
+ }
+}
+