# fire_hdd -- Automatic fire hard disk drive which does import/export to local folder. # # Typically used in automation tools which run openMSX without human interaction. # This script is a complex, but safe form, of the following code; # # diskmanipulator create disk.img 32m 32m 32m 32m # hda disk.img # diskmanipulator import hda1 ./disk-in/ # after quit {diskmanipulator export hda1 ./disk-out/} # # Supported environment variables by this script; # # FIRE_HDD_SIZE=30m # Sets the size of the created partitions, defaults to 15m for dos1. # # FIRE_HDD_IMAGE=bin/myapp/dsk.img # Defaults to ./hdd.dsk # # FIRE_HDD_PATH=bin/myapp/dsk # provides the default values for FIRE_HDD_PATH_IMPORT and FIRE_HDD_PATH_EXPORT # # FIRE_HDD_PATH_IMPORT=bin/myapp/dsk # When set enables the import of all files into the first disk partition. # # FIRE_HDD_PATH_EXPORT=bin/myapp/dsk-result # When set enables the export of all files back to the file system # # FIRE_HDD_EXPORT_PARTITION=2 # When set override the export from 'first' to 'given' partition number. # # FIRE_HDD_EXPORT_DIR=myout # By default export does change directory to root of MSX partition override to custom export directory. # # FIRE_HDD_PARTITIONS=2 # The number of partitions created in the disk image, defaults to 1. # set fire_hdd_size 15m set fire_hdd_image hdd.dsk set fire_hdd_path_import 0 set fire_hdd_path_export 0 set fire_hdd_export_partition 0 set fire_hdd_export_dir \\ set fire_hdd_partitions 1 if {[info exists ::env(FIRE_HDD_SIZE)] && ([string trim $::env(FIRE_HDD_SIZE)] != "")} { set fire_hdd_size [string trim $::env(FIRE_HDD_SIZE)] } if {[info exists ::env(FIRE_HDD_IMAGE)] && ([string trim $::env(FIRE_HDD_IMAGE)] != "")} { set fire_hdd_image [string trim $::env(FIRE_HDD_IMAGE)] } if {[info exists ::env(FIRE_HDD_PATH)] && ([string trim $::env(FIRE_HDD_PATH)] != "")} { set fire_hdd_path_import [string trim $::env(FIRE_HDD_PATH)] set fire_hdd_path_export [string trim $::env(FIRE_HDD_PATH)] } if {[info exists ::env(FIRE_HDD_PATH_IMPORT)] && ([string trim $::env(FIRE_HDD_PATH_IMPORT)] != "")} { set fire_hdd_path_import [string trim $::env(FIRE_HDD_PATH_IMPORT)] } if {[info exists ::env(FIRE_HDD_PATH_EXPORT)] && ([string trim $::env(FIRE_HDD_PATH_EXPORT)] != "")} { set fire_hdd_path_export [string trim $::env(FIRE_HDD_PATH_EXPORT)] } if {[info exists ::env(FIRE_HDD_EXPORT_PARTITION)] && ([string trim $::env(FIRE_HDD_EXPORT_PARTITION)] != "")} { set fire_hdd_export_partition [string trim $::env(FIRE_HDD_EXPORT_PARTITION)] } if {[info exists ::env(FIRE_HDD_EXPORT_DIR)] && ([string trim $::env(FIRE_HDD_EXPORT_DIR)] != "")} { set fire_hdd_export_dir [string trim $::env(FIRE_HDD_EXPORT_DIR)] } if {[info exists ::env(FIRE_HDD_PARTITIONS)] && ([string trim $::env(FIRE_HDD_PARTITIONS)] != "")} { set fire_hdd_partitions [string trim $::env(FIRE_HDD_PARTITIONS)] if {$fire_hdd_partitions == 0 || $fire_hdd_partitions > 4} { puts stderr "error: Invalid env.FIRE_HDD_PARTITIONS value 1-4 allowed: $fire_hdd_partitions" exit 1 } } if {$fire_hdd_path_import != 0} { set fire_hdd_disk_partition "hda" if {$fire_hdd_partitions == 1} { if {[catch {diskmanipulator create $fire_hdd_image $fire_hdd_size} err_msg]} { puts stderr "error: create1 $err_msg" exit 1 } } if {$fire_hdd_partitions > 1} { set fire_hdd_disk_partition "hda1" if {$fire_hdd_partitions == 2} { if {[catch {diskmanipulator create $fire_hdd_image $fire_hdd_size $fire_hdd_size} err_msg]} { puts stderr "error: create2 $err_msg" exit 1 } } if {$fire_hdd_partitions == 3} { if {[catch {diskmanipulator create $fire_hdd_image $fire_hdd_size $fire_hdd_size $fire_hdd_size} err_msg]} { puts stderr "error: create3 $err_msg" exit 1 } } if {$fire_hdd_partitions == 4} { if {[catch {diskmanipulator create $fire_hdd_image $fire_hdd_size $fire_hdd_size $fire_hdd_size $fire_hdd_size} err_msg]} { puts stderr "error: create4 $err_msg" exit 1 } } } if {[catch {hda $fire_hdd_image} err_msg]} { puts stderr "error: hda $err_msg" exit 1 } if {[catch {diskmanipulator import $fire_hdd_disk_partition $fire_hdd_path_import} err_msg]} { puts stderr "error: import $err_msg" exit 1 } if {$fire_hdd_path_export != 0} { if {$fire_hdd_export_partition != 0} { set fire_hdd_disk_partition "hda$fire_hdd_export_partition" } after quit { if {[catch {diskmanipulator chdir $fire_hdd_disk_partition $fire_hdd_export_dir} err_msg]} { puts stderr "error: chdir $err_msg" exit 1 } if {[catch {diskmanipulator export $fire_hdd_disk_partition $fire_hdd_path_export} err_msg]} { puts stderr "error: export $err_msg" exit 1 } } } }