add backup_rom and restore_rom to amend scripts
diff --git a/commands.c b/commands.c
index a60366f..7617a8d 100644
--- a/commands.c
+++ b/commands.c
@@ -759,6 +759,45 @@
 }
 
 
+static int
+cmd_backup_rom(const char *name, void *cookie, int argc, const char *argv[],
+        PermissionRequestList *permissions)
+{
+    UNUSED(cookie);
+    CHECK_WORDS();
+
+    char* backup_name = NULL;
+    switch(argc)
+    {
+        case 0:
+            break;
+        case 1:
+            backup_name = argv[0];
+            break;
+        default:
+            LOGE("Command %s requires zero or one argument\n", name);
+            return 1;
+    }
+
+    return do_nandroid_backup(backup_name);
+}
+
+static int
+cmd_restore_rom(const char *name, void *cookie, int argc, const char *argv[],
+        PermissionRequestList *permissions)
+{
+    UNUSED(cookie);
+    CHECK_WORDS();
+
+    if (argc != 1) {
+        LOGE("Command %s requires exactly one argument\n", name);
+        return 1;
+    }
+
+    return do_nandroid_restore(argv[0]);
+}
+
+
 /*
  * Function definitions
  */
@@ -1122,6 +1161,12 @@
     ret = registerCommand("done", CMD_ARGS_WORDS, cmd_done, (void *)ctx);
     if (ret < 0) return ret;
 
+    ret = registerCommand("backup_rom", CMD_ARGS_WORDS, cmd_backup_rom, (void *)ctx);
+    if (ret < 0) return ret;
+
+    ret = registerCommand("restore_rom", CMD_ARGS_WORDS, cmd_restore_rom, (void *)ctx);
+    if (ret < 0) return ret;
+
     /*
      * Functions
      */
diff --git a/extendedcommands.c b/extendedcommands.c
index 1c0a130..e9fd1a7 100644
--- a/extendedcommands.c
+++ b/extendedcommands.c
@@ -325,16 +325,36 @@
     return (pid == -1 ? -1 : pstat);
 }
 
-void do_nandroid_backup()
+int do_nandroid_backup(char* backup_name)
 {
+    char cmd[PATH_MAX];
+    if (NULL == backup_name)
+        backup_name = "";
+    sprintf(cmd, "/sbin/nandroid-mobile.sh backup /sdcard/clockworkmod/backup/ %s", backup_name);
     ui_print("Performing backup...\n");
-    int ret = system("/sbin/nandroid-mobile.sh backup /sdcard/clockworkmod/backup/");
+    int ret = system(cmd);
     if (ret != 0)
     {
         ui_print("Error while backing up! Error code: %d\n", ret);
-        return;
+        return ret;
     }
     ui_print("Backup complete.\n");
+    return ret;
+}
+
+int do_nandroid_restore(char* backup_path)
+{
+    char* command[PATH_MAX];
+    sprintf(command, "nandroid-mobile.sh restore %s", backup_path);
+    ui_print("Performing restore...\n");
+    int ret = system(command);
+    if (ret != 0)
+    {
+        ui_print("Error while restoring!\n");
+        return ret;
+    }
+    ui_print("Restore complete.\n");
+    return ret;
 }
 
 void show_nandroid_restore_menu()
@@ -352,16 +372,7 @@
     char* file = choose_file_menu("/sdcard/clockworkmod/backup/", NULL, headers);
     if (file == NULL)
         return;
-    char* command[PATH_MAX];
-    sprintf(command, "nandroid-mobile.sh restore %s", file);
-    ui_print("Performing restore...\n");
-    int ret = system(command);
-    if (ret != 0)
-    {
-        ui_print("Error while restoring!\n");
-        return;
-    }
-    ui_print("Restore complete.\n");
+    do_nandroid_restore(file);
 }
 
 void do_mount_usb_storage()
@@ -456,5 +467,5 @@
     if (register_update_commands(&ctx)) {
         LOGE("Can't install update commands\n");
     }
-    return run_and_remove_extendedcommand(argv[1]);
-}
+    return run_script(argv[1]);
+}
\ No newline at end of file
diff --git a/extendedcommands.h b/extendedcommands.h
index 5629c41..12d6107 100644
--- a/extendedcommands.h
+++ b/extendedcommands.h
@@ -16,11 +16,17 @@
 void
 ui_set_show_text(int value);
 
-void
+int
 do_nandroid_backup();
 
+int
+do_nandroid_restore();
+
 void
 show_nandroid_restore_menu();
 
 void
-do_mount_usb_storage();
\ No newline at end of file
+do_mount_usb_storage();
+
+void
+show_choose_zip_menu();
diff --git a/nandroid/nandroid-mobile.sh b/nandroid/nandroid-mobile.sh
index 3f516d6..36cb836 100755
--- a/nandroid/nandroid-mobile.sh
+++ b/nandroid/nandroid-mobile.sh
@@ -171,7 +171,7 @@
 		break
 		;;
 	*)
-		echo "Usage: $0 {backup|restore} [/path/to/nandroid/backup/]"
+		echo "Usage: $0 {backup|restore} [/path/to/nandroid/backup/] [backupname]"
 		echo "- backup will store a full system backup on /sdcard/nandroid"
 		echo "- restore path will restore the last made backup for boot, system, recovery and data"
 		exit 12
@@ -192,13 +192,18 @@
 	3) echo "Error mounting sdcard read-write"; umount /system /data /sdcard; exit 15;;
 esac
 
-TIMESTAMP="`date +%Y-%m-%d-%H%M`"
+if [ -z "$3" ]
+then
+    BACKUPNAME="`date +%Y-%m-%d-%H%M`"
+else
+    BACKUPNAME=$3
+fi
 BASEDIR=/sdcard/nandroid
 if [ ! -z "$2" ]; then
 	BASEDIR=$2
 fi
 	
-DESTDIR=$BASEDIR/$TIMESTAMP
+DESTDIR=$BASEDIR/$BACKUPNAME
 if [ ! -d $DESTDIR ]; then 
 	mkdir -p $DESTDIR
 	if [ ! -d $DESTDIR ]; then 
@@ -297,6 +302,8 @@
 
 # 8.
 echo "unmounting system, data and sdcard"
+sync
+sleep 2s
 umount /system
 umount /data
 umount /sdcard