From 39e5bd0c18a347a5974d7800b640b61325ac294d Mon Sep 17 00:00:00 2001 From: Christian Groessler Date: Thu, 12 Sep 2013 00:04:51 +0200 Subject: [PATCH 1/4] testcode/lib/tinyshell.c: add 'verbose' and 'cls' commands; add SP check --- testcode/lib/tinyshell.c | 75 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 2 deletions(-) diff --git a/testcode/lib/tinyshell.c b/testcode/lib/tinyshell.c index f4a18126b..c325f3947 100644 --- a/testcode/lib/tinyshell.c +++ b/testcode/lib/tinyshell.c @@ -5,12 +5,15 @@ #define VERSION_ASC "0.90" -#define KEYB_BUFSZ 80 -#define PROMPT ">>> " #ifdef __ATARI__ #define UPPERCASE /* define (e.g. for Atari) to convert filenames etc. to upper case */ #endif +#define CHECK_SP + +#define KEYB_BUFSZ 80 +#define PROMPT ">>> " + #include #include #include @@ -26,6 +29,10 @@ #include #include +#ifdef CHECK_SP +extern unsigned int getsp(void); /* comes from getsp.s */ +#endif + #define CMD_NOTHING 0 #define CMD_INVALID 1 #define CMD_HELP 2 @@ -38,7 +45,10 @@ #define CMD_RENAME 9 #define CMD_COPY 10 #define CMD_PWD 11 +#define CMD_CLS 12 +#define CMD_VERBOSE 13 +static unsigned char verbose; static unsigned char terminate; static unsigned char cmd; static unsigned char *cmd_asc, *arg1, *arg2, *arg3; @@ -68,6 +78,10 @@ struct cmd_table { { "mv", CMD_RENAME }, { "ren", CMD_RENAME }, { "pwd", CMD_PWD }, +#ifdef __CC65__ + { "cls", CMD_CLS }, +#endif + { "verbose", CMD_VERBOSE }, { NULL, 0 } }; @@ -82,6 +96,22 @@ static void get_command(void) { unsigned char i = 0; +#ifdef CHECK_SP + static char firstcall = 1; + static unsigned int good_sp; + unsigned int sp; + if (firstcall) + sp = good_sp = getsp(); + else + sp = getsp(); + + if (sp != good_sp) { + printf("SP: 0x%04X ***MISMATCH*** 0x%04X\n", sp, good_sp); + } + else if (verbose) + printf("SP: 0x%04X\n", sp); +#endif + arg1 = arg2 = arg3 = NULL; /* issue prompt */ @@ -132,6 +162,10 @@ static void cmd_help(void) puts("cd, chdir - change directory or drive"); puts("md, mkdir - make directory or drive"); puts("rd, rmdir - remove directory or drive"); +#ifdef __CC65__ + puts("cls - clear screen"); +#endif + puts("verbose - set verbosity level"); puts("sorry, you cannot start programs here"); } @@ -173,6 +207,8 @@ static void cmd_ls(void) else arg = "."; + if (verbose) + printf("Buffer addr: %p\n", arg); dir = opendir(arg); #ifdef __ATARI__ if (need_free) free(arg); @@ -262,6 +298,8 @@ static void cmd_pwd(void) printf("malloc %u bytes failed: %s\n", MAXPATHLEN, strerror(errno)); return; } + if (verbose) + printf("Buffer addr: %p\n", buf); if (!getcwd(buf, MAXPATHLEN)) { printf("getcwd failed: %s\n", strerror(errno)); free(buf); @@ -309,6 +347,8 @@ static void cmd_copy(void) printf("malloc %u bytes failed: %s\n", cpbuf_sz, strerror(errno)); return; } + if (verbose) + printf("Buffer addr: %p\n", buf); while (1) { if (srcfd == -1) { @@ -349,6 +389,33 @@ static void cmd_copy(void) if (dstfd >= 0) close(dstfd); } +#ifdef __CC65__ +static void cmd_cls(void) +{ + printf("\f"); +} +#endif + +static void cmd_verbose(void) +{ + unsigned long verb; + char *endptr; + + if (!arg1 || arg2) { + puts("usage: verbose "); + return; + } + + verb = strtoul(arg1, &endptr, 10); + if (verb > 255 || *endptr) { + printf("invalid verbosity level 0x%x\n", *endptr); + return; + } + + verbose = verb; + printf("verbosity level set to %d\n", verbose); +} + static void run_command(void) { switch (cmd) { @@ -365,6 +432,10 @@ static void run_command(void) case CMD_PWD: cmd_pwd(); return; case CMD_RENAME: cmd_rename(); return; case CMD_COPY: cmd_copy(); return; +#ifdef __CC65__ + case CMD_CLS: cmd_cls(); return; +#endif + case CMD_VERBOSE: cmd_verbose(); return; } } From 619de8b31470f8b54844d00df86a39a9ef25046e Mon Sep 17 00:00:00 2001 From: Christian Groessler Date: Thu, 12 Sep 2013 00:16:09 +0200 Subject: [PATCH 2/4] testcode/lib/tinyshell.c: fix error message --- testcode/lib/tinyshell.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testcode/lib/tinyshell.c b/testcode/lib/tinyshell.c index c325f3947..90fda52fd 100644 --- a/testcode/lib/tinyshell.c +++ b/testcode/lib/tinyshell.c @@ -408,7 +408,7 @@ static void cmd_verbose(void) verb = strtoul(arg1, &endptr, 10); if (verb > 255 || *endptr) { - printf("invalid verbosity level 0x%x\n", *endptr); + puts("invalid verbosity level"); return; } From d488272357198c02c3d63bcc7c6a3105f40b9fdd Mon Sep 17 00:00:00 2001 From: Christian Groessler Date: Thu, 12 Sep 2013 12:32:59 +0200 Subject: [PATCH 3/4] testcode/lib/tinyshell.c: Enable SP check only for CC65 targets. Enable 'cls' command only for Atari. Enable subdirectory commands only for Atari and non-CC65 targets. --- testcode/lib/tinyshell.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/testcode/lib/tinyshell.c b/testcode/lib/tinyshell.c index 90fda52fd..f3b6aa769 100644 --- a/testcode/lib/tinyshell.c +++ b/testcode/lib/tinyshell.c @@ -7,9 +7,9 @@ #ifdef __ATARI__ #define UPPERCASE /* define (e.g. for Atari) to convert filenames etc. to upper case */ -#endif - #define CHECK_SP +#define HAVE_SUBDIRS +#endif #define KEYB_BUFSZ 80 #define PROMPT ">>> " @@ -22,6 +22,7 @@ #ifndef __CC65__ #include #include +#define HAVE_SUBDIRS #else #define MAXPATHLEN 64 #endif @@ -66,11 +67,13 @@ struct cmd_table { { "ls", CMD_LS }, { "dir", CMD_LS }, { "md", CMD_MKDIR }, +#ifdef HAVE_SUBDIRS { "mkdir", CMD_MKDIR }, { "rd", CMD_RMDIR }, { "rmdir", CMD_RMDIR }, { "cd", CMD_CHDIR }, { "chdir", CMD_CHDIR }, +#endif { "rm", CMD_RM }, { "del", CMD_RM }, { "cp", CMD_COPY }, @@ -78,7 +81,7 @@ struct cmd_table { { "mv", CMD_RENAME }, { "ren", CMD_RENAME }, { "pwd", CMD_PWD }, -#ifdef __CC65__ +#ifdef __ATARI__ { "cls", CMD_CLS }, #endif { "verbose", CMD_VERBOSE }, @@ -162,7 +165,7 @@ static void cmd_help(void) puts("cd, chdir - change directory or drive"); puts("md, mkdir - make directory or drive"); puts("rd, rmdir - remove directory or drive"); -#ifdef __CC65__ +#ifdef __ATARI__ puts("cls - clear screen"); #endif puts("verbose - set verbosity level"); @@ -239,6 +242,8 @@ static void cmd_rm(void) printf("remove failed: %s\n", strerror(errno)); } +#ifdef HAVE_SUBDIRS + static void cmd_mkdir(void) { if (!arg1 || arg2) { @@ -310,6 +315,8 @@ static void cmd_pwd(void) free(buf); } +#endif /* #ifdef HAVE_SUBDIRS */ + static void cmd_rename(void) { if (!arg2 || arg3) { @@ -389,7 +396,7 @@ static void cmd_copy(void) if (dstfd >= 0) close(dstfd); } -#ifdef __CC65__ +#ifdef __ATARI__ static void cmd_cls(void) { printf("\f"); @@ -426,13 +433,15 @@ static void run_command(void) case CMD_QUIT: terminate = 1; return; case CMD_LS: cmd_ls(); return; case CMD_RM: cmd_rm(); return; +#ifdef HAVE_SUBDIRS case CMD_CHDIR: cmd_chdir(); return; case CMD_MKDIR: cmd_mkdir(); return; case CMD_RMDIR: cmd_rmdir(); return; case CMD_PWD: cmd_pwd(); return; +#endif case CMD_RENAME: cmd_rename(); return; case CMD_COPY: cmd_copy(); return; -#ifdef __CC65__ +#ifdef __ATARI__ case CMD_CLS: cmd_cls(); return; #endif case CMD_VERBOSE: cmd_verbose(); return; From bd2b2e0f7d2782fdd1a71a426f890ef95596ec13 Mon Sep 17 00:00:00 2001 From: Christian Groessler Date: Thu, 12 Sep 2013 13:04:55 +0200 Subject: [PATCH 4/4] Fix last change: Stack check for all CC65 targets. Enable subdirectories on Apple 2. --- testcode/lib/tinyshell.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/testcode/lib/tinyshell.c b/testcode/lib/tinyshell.c index f3b6aa769..141065257 100644 --- a/testcode/lib/tinyshell.c +++ b/testcode/lib/tinyshell.c @@ -7,10 +7,17 @@ #ifdef __ATARI__ #define UPPERCASE /* define (e.g. for Atari) to convert filenames etc. to upper case */ -#define CHECK_SP #define HAVE_SUBDIRS #endif +#ifdef __APPLE2__ +#define HAVE_SUBDIRS +#endif + +#ifdef __CC65__ +#define CHECK_SP +#endif + #define KEYB_BUFSZ 80 #define PROMPT ">>> "