From 898cfeb8a558245fc48bbba948c16205509e6a11 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Sat, 28 Mar 2026 06:54:36 -0400 Subject: Save some more bytes... --- src/nio.c | 149 ++++++++++++-------------------------------------------------- 1 file changed, 28 insertions(+), 121 deletions(-) (limited to 'src/nio.c') diff --git a/src/nio.c b/src/nio.c index 399b06d..61ac8ae 100644 --- a/src/nio.c +++ b/src/nio.c @@ -9,86 +9,59 @@ #define TIMEOUT 0x1f /* approx 30 seconds */ -unsigned char nunit(char* devicespec) -{ - unsigned char unit=1; - - // Set unit to 1 unless explicitly specified. - if (devicespec[1]==':') - unit=1; - else if (devicespec[2]==':') - unit=devicespec[1]-0x30; // convert from alpha to integer. - else - unit=1; - - return unit; +#define UNIT 1 /* only support one FujiNet! */ + +static char get_status(char *devicespec) { + if(OS.dcb.dstats != SUCCESS) { + // something went wrong + // do we need to return extended status? + if(OS.dcb.dstats == DERROR) { + nstatus(devicespec); + return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return extended error. + } + } + return OS.dcb.dstats; // Return SIO error or success +} + +static void set_defaults(void) { + OS.dcb.ddevic = DFUJI; // Fuji Device Identifier + OS.dcb.dunit = UNIT; // Unit number integer 1 through 4 + OS.dcb.dtimlo = TIMEOUT; // approximately 30 second timeout } unsigned char nopen(char* devicespec, unsigned char trans) { - unsigned char unit=nunit(devicespec); - - OS.dcb.ddevic = DFUJI; // Fuji Device Identifier - OS.dcb.dunit = unit; // Unit number integer 1 through 4 + set_defaults(); OS.dcb.dcomnd = 'O'; // Open OS.dcb.dstats = DWRITE; // sending to to SIO device OS.dcb.dbuf = devicespec; // eg: N:TCP// - OS.dcb.dtimlo = TIMEOUT; // approximately 30 second timeout OS.dcb.dbyt = 256; // max size of our device spec OS.dcb.daux1 = OUPDATE; // Read and write OS.dcb.daux2 = trans; // CR/LF translation siov(); - if (OS.dcb.dstats!=SUCCESS) - { - // something went wrong - // do we need to return extended status? - if (OS.dcb.dstats==DERROR) - { - nstatus(devicespec); - return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return extended error. - } - } - return OS.dcb.dstats; // Return SIO error or success + return get_status(devicespec); } unsigned char nclose(char* devicespec) { - unsigned char unit=nunit(devicespec); - - OS.dcb.ddevic = DFUJI; - OS.dcb.dunit = unit; + set_defaults(); OS.dcb.dcomnd = 'C'; // Close OS.dcb.dstats = 0x00; OS.dcb.dbuf = NULL; - OS.dcb.dtimlo = TIMEOUT; OS.dcb.dbyt = 0; OS.dcb.daux = 0; siov(); - if (OS.dcb.dstats!=SUCCESS) - { - // something went wrong - // do we need to return extended status? - if (OS.dcb.dstats==DERROR) - { - nstatus(devicespec); - return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return extended error. - } - } - return OS.dcb.dstats; // Return SIO error or success. + return get_status(devicespec); } unsigned char nstatus(char* devicespec) { - unsigned char unit=nunit(devicespec); - - OS.dcb.ddevic = DFUJI; - OS.dcb.dunit = unit; + set_defaults(); OS.dcb.dcomnd = 'S'; // status OS.dcb.dstats = DREAD; OS.dcb.dbuf = OS.dvstat; - OS.dcb.dtimlo = TIMEOUT; OS.dcb.dbyt = sizeof(OS.dvstat); OS.dcb.daux = 0; siov(); @@ -98,64 +71,35 @@ unsigned char nstatus(char* devicespec) unsigned char nread(char* devicespec, unsigned char* buf, unsigned short len) { - unsigned char unit=nunit(devicespec); - - OS.dcb.ddevic = DFUJI; - OS.dcb.dunit = unit; + set_defaults(); OS.dcb.dcomnd = 'R'; // read OS.dcb.dstats = DREAD; OS.dcb.dbuf = buf; - OS.dcb.dtimlo = TIMEOUT; OS.dcb.dbyt = OS.dcb.daux = len; // Set the buffer size AND daux with length siov(); - if (OS.dcb.dstats!=SUCCESS) - { - // something went wrong - // do we need to return extended status? - if (OS.dcb.dstats==DERROR) - { - nstatus(devicespec); - return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return extended error. - } - } - return OS.dcb.dstats; // Return SIO error or success. + return get_status(devicespec); } unsigned char nwrite(char* devicespec, unsigned char* buf, unsigned short len) { - unsigned char unit=nunit(devicespec); - - OS.dcb.ddevic = DFUJI; - OS.dcb.dunit = unit; + set_defaults(); OS.dcb.dcomnd = 'W'; // write OS.dcb.dstats = DWRITE; OS.dcb.dbuf = buf; - OS.dcb.dtimlo = TIMEOUT; OS.dcb.dbyt = OS.dcb.daux = len; siov(); - if (OS.dcb.dstats!=SUCCESS) - { - // something went wrong - // do we need to return extended status? - if (OS.dcb.dstats==DERROR) - { - nstatus(devicespec); - return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return extended error. - } - } - return OS.dcb.dstats; // Return SIO error or success. + return get_status(devicespec); } /* https://fujinet.online/wiki/?p=SIO-Command-%24FF-Reset-FujiNet */ unsigned char nreset(void) { + set_defaults(); OS.dcb.ddevic = 0x70; - OS.dcb.dunit = 1; OS.dcb.dcomnd = 0xff; /* reset */ OS.dcb.dstats = DWRITE; OS.dcb.dbuf = 0; - OS.dcb.dtimlo = TIMEOUT; OS.dcb.dbyt = 0; OS.dcb.daux = 0; siov(); @@ -163,40 +107,3 @@ unsigned char nreset(void) { return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return extended status } - -/* IRC doesn't need this */ -#if 0 -unsigned char nlogin(char* devicespec, char *login, char *password) -{ - unsigned char unit=nunit(devicespec); - - OS.dcb.ddevic=0x71; - OS.dcb.dunit=unit; - OS.dcb.dcomnd=0xFD; - OS.dcb.dstats=0x80; - OS.dcb.dbuf=login; - OS.dcb.dtimlo=0x1f; - OS.dcb.dbyt=256; - OS.dcb.daux=0; - siov(); - - if (OS.dcb.dstats!=1) - { - nstatus(devicespec); - return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return ext err - } - - OS.dcb.dcomnd=0xFE; - OS.dcb.dstats=0x80; - OS.dcb.dbuf=password; - siov(); - - if (OS.dcb.dstats!=1) - { - nstatus(devicespec); - return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return ext err - } - - return OS.dcb.dstats; -} -#endif -- cgit v1.2.3