From 7c7b44e409f05751c960a614dbb1e2abde22da60 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Mon, 3 Aug 2015 12:35:08 -0700 Subject: [PATCH] SCP: Remove ASCII source code character set dependency Provide reasonable behavior on any platform which doesn't use ASCII as a character set. Method suggested by Dave G4UGM. --- scp.c | 12 ++++++++++++ scp.h | 1 + sim_defs.h | 8 ++++---- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/scp.c b/scp.c index c436e984..38153645 100644 --- a/scp.c +++ b/scp.c @@ -1845,6 +1845,18 @@ return 0; } #endif +/* Convert switch letter to bit mask */ + +int32 sim_swmask (int switch_ch) +{ +static char *letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; +char *index = strchr (letters, switch_ch); + +if (index) + return (1u << (int)(index - letters)); +return 0; /* shouldn't happen */ +} + t_stat process_stdin_commands (t_stat stat, char *argv[]); /* Main command loop */ diff --git a/scp.h b/scp.h index a205335e..23d526c7 100644 --- a/scp.h +++ b/scp.h @@ -116,6 +116,7 @@ t_stat sim_run_boot_prep (void); double sim_gtime (void); uint32 sim_grtime (void); int32 sim_qcount (void); +int32 sim_swmask (int switch_ch); t_stat attach_unit (UNIT *uptr, char *cptr); t_stat detach_unit (UNIT *uptr); t_stat assign_device (DEVICE *dptr, char *cptr); diff --git a/sim_defs.h b/sim_defs.h index 4e5e28f0..8c6e6a7d 100644 --- a/sim_defs.h +++ b/sim_defs.h @@ -278,6 +278,10 @@ typedef uint32 t_addr; #define SIM_SW_REG (1u << 28) /* register value */ #define SIM_SW_STOP (1u << 29) /* stop message */ +/* Convert switch letter to bit mask */ + +#define SWMASK(x) sim_swmask ((int)x) + /* Simulator status codes 0 ok @@ -358,10 +362,6 @@ typedef uint32 t_addr; #define KBD_LIM_WAIT(x) (((x) > KBD_MAX_WAIT)? KBD_MAX_WAIT: (x)) #define KBD_WAIT(w,s) ((w)? w: KBD_LIM_WAIT (s)) -/* Convert switch letter to bit mask */ - -#define SWMASK(x) (1u << (((int) (x)) - ((int) 'A'))) - /* String match - at least one character required */ #define MATCH_CMD(ptr,cmd) ((NULL == (ptr)) || (!*(ptr)) || strncmp ((ptr), (cmd), strlen (ptr)))