summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/tools/castool/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/tools/castool/main.c')
-rw-r--r--src/mess/tools/castool/main.c196
1 files changed, 196 insertions, 0 deletions
diff --git a/src/mess/tools/castool/main.c b/src/mess/tools/castool/main.c
new file mode 100644
index 00000000000..7e458d804ac
--- /dev/null
+++ b/src/mess/tools/castool/main.c
@@ -0,0 +1,196 @@
+/***************************************************************************
+
+ main.c
+
+ Castool command line front end
+
+ 27/03/2009 Initial version by Miodrag Milanovic
+
+***************************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <time.h>
+#include <assert.h>
+
+#include "corestr.h"
+
+#include "formats/a26_cas.h"
+#include "formats/apf_apt.h"
+#include "formats/cbm_tap.h"
+#include "formats/cgen_cas.h"
+#include "formats/coco_cas.h"
+#include "formats/csw_cas.h"
+#include "formats/fmsx_cas.h"
+#include "formats/gtp_cas.h"
+#include "formats/hect_tap.h"
+#include "formats/ace_tap.h"
+#include "formats/adam_cas.h"
+#include "formats/kc_cas.h"
+#include "formats/kim1_cas.h"
+#include "formats/lviv_lvt.h"
+#include "formats/mz_cas.h"
+#include "formats/orao_cas.h"
+#include "formats/oric_tap.h"
+#include "formats/pmd_cas.h"
+#include "formats/primoptp.h"
+#include "formats/rk_cas.h"
+#include "formats/sord_cas.h"
+#include "formats/svi_cas.h"
+#include "formats/thom_cas.h"
+#include "formats/trs_cas.h"
+#include "formats/tvc_cas.h"
+#include "formats/tzx_cas.h"
+#include "formats/uef_cas.h"
+#include "formats/vg5k_cas.h"
+#include "formats/vt_cas.h"
+#include "formats/x07_cas.h"
+#include "formats/zx81_p.h"
+
+struct SupportedCassetteFormats
+{
+ const char *name;
+ const struct CassetteFormat * const *formats;
+ const char *desc;
+};
+
+const struct SupportedCassetteFormats formats[] = {
+ {"a26", a26_cassette_formats ,"Atari 2600"},
+ {"ddp", coleco_adam_cassette_formats ,"Coleco Adam"},
+ {"apf", apf_cassette_formats ,"APF Imagination Machine"},
+ {"cbm", cbm_cassette_formats ,"Commodore"},
+ {"cgenie", cgenie_cassette_formats ,"Colour Genie"},
+ {"coco", coco_cassette_formats ,"TRS-80 Radio Shack Color Computer Family"},
+ {"csw", csw_cassette_formats ,"Compressed Square Wave"},
+ {"bbc", bbc_cassette_formats ,"BBC"},
+ {"fmxs", fmsx_cassette_formats ,"MSX"},
+ {"gtp", gtp_cassette_formats ,"Galaksija"},
+ {"hector", hector_cassette_formats ,"Hector - k7 : classical, FOR : forth cassette "},
+ {"jupiter", ace_cassette_formats ,"Jupiter"},
+ {"kc85", kc_cassette_formats ,"VEB Mikroelektronik KC 85"},
+ {"kim1", kim1_cassette_formats ,"KIM-1"},
+ {"lviv", lviv_lvt_format ,"Lviv"},
+ {"mz", mz700_cassette_formats ,"Sharp MZ"},
+ {"orao", orao_cassette_formats ,"Orao"},
+ {"oric", oric_cassette_formats ,"Oric"},
+ {"pmd85", pmd85_cassette_formats ,"PMD-85"},
+ {"primo", primo_ptp_format ,"Primo"},
+ {"rku", rku_cassette_formats ,"UT-88"},
+ {"rk8", rk8_cassette_formats ,"Mikro-80"},
+ {"rks", rks_cassette_formats ,"Specialist"},
+ {"rko", rko_cassette_formats ,"Orion"},
+ {"rkr", rkr_cassette_formats ,"Radio-86RK"},
+ {"rka", rka_cassette_formats ,"Apogee"},
+ {"rkm", rkm_cassette_formats ,"Mikrosha"},
+ {"rkp", rkp_cassette_formats ,"Partner"},
+ {"sordm5", sordm5_cassette_formats ,"Sord M5"},
+ {"svi", svi_cassette_formats ,"SVI"},
+ {"to7", to7_cassette_formats ,"Thomson TO"},
+ {"mo5", mo5_cassette_formats ,"Thomson MO"},
+ {"trs80l2", trs80l2_cassette_formats ,"TRS-80 Level 2"},
+ {"tvc64", tvc64_cassette_formats ,"Videoton TVC 64"},
+ {"tzx", tzx_cassette_formats ,"ZX Spectrum"},
+ {"cdt", cdt_cassette_formats ,"Amstrad CPC"},
+ {"uef", uef_cassette_formats ,"Acorn Electron"},
+ {"vg5k", vg5k_cassette_formats ,"VG 5000 k7"},
+ {"vtech1", vtech1_cassette_formats ,"Video Technology Laser 110-310"},
+ {"vtech2", vtech2_cassette_formats ,"Video Technology Laser 350-700"},
+ {"x07", x07_cassette_formats ,"Canon X-07"},
+ {"zx81_p", zx81_p_format ,"Sinclair ZX81"},
+ {"zx80_o", zx80_o_format ,"Sinclair ZX80"},
+ {NULL,NULL,NULL}
+};
+
+
+static const char *get_extension(const char *name)
+{
+ const char *s;
+ s = name;
+ if (s != NULL)
+ s = strrchr(s, '.');
+ return s ? s+1 : NULL;
+}
+
+static void display_usage(void)
+{
+ fprintf(stderr, "Usage: \n");
+ fprintf(stderr, " castool.exe convert <format> <inputfile> <outputfile.wav>\n");
+}
+
+static void display_formats(void)
+{
+ int i,j;
+ fprintf(stderr, "Supported formats:\n\n");
+ for (i = 0; formats[i].name; i++) {
+ fprintf(stderr, "%10s - %s\n",formats[i].name,formats[i].desc);
+ for (j = 1; formats[i].formats[j]; j++) {
+ fprintf(stderr, "%15s %s\n","",formats[i].formats[j]->extensions);
+ }
+ }
+}
+
+int CLIB_DECL main(int argc, char *argv[])
+{
+ int i;
+ int found =0;
+ const struct CassetteFormat * const *selected_formats = NULL;
+ cassette_image *cassette;
+ FILE *f;
+
+ if (argc > 1)
+ {
+ if (!core_stricmp("convert", argv[1]))
+ {
+ // convert command
+ if (argc!=5) {
+ fprintf(stderr, "Wrong parameter number.\n\n");
+ display_usage();
+ return -1;
+ } else {
+ for (i = 0; formats[i].name; i++) {
+ if (core_stricmp(formats[i].name,argv[2])==0) {
+ selected_formats = formats[i].formats;
+ found = 1;
+ }
+ }
+ if (found==0) {
+ fprintf(stderr, "Wrong format name.\n\n");
+ display_usage();
+ fprintf(stderr, "\n");
+ display_formats();
+ return -1;
+ }
+
+ f = fopen(argv[3], "rb");
+ if (!f) {
+ fprintf(stderr, "File %s not found.\n",argv[3]);
+ return -1;
+ }
+
+ if (cassette_open_choices(f, &stdio_ioprocs, get_extension(argv[3]), selected_formats, CASSETTE_FLAG_READONLY, &cassette)) {
+ fprintf(stderr, "Invalid format of input file.\n");
+ fclose(f);
+ return -1;
+ }
+
+ cassette_dump(cassette,argv[4]);
+ cassette_close(cassette);
+ fclose(f);
+ goto theend;
+ }
+ }
+ }
+
+ /* Usage */
+ fprintf(stderr, "castool - Generic cassette manipulation tool for use with MESS\n\n");
+ display_usage();
+ fprintf(stderr, "\n");
+ display_formats();
+ fprintf(stderr, "\nExample usage:\n");
+ fprintf(stderr, " castool.exe convert tzx game.tzx game.wav\n\n");
+
+theend :
+ return 0;
+}