diff --git a/msdos/src/fn_network/network_close.c b/msdos/src/fn_network/network_close.c index 1cec3f5..c60e6b5 100644 --- a/msdos/src/fn_network/network_close.c +++ b/msdos/src/fn_network/network_close.c @@ -7,5 +7,5 @@ uint8_t network_close(const char* devicespec) { uint8_t device = network_unit(devicespec) + 0x70; - return int_f5(device,'C',0x00,0x00) == 'C'; + return int_f5(device,'C',0x00,0x00) == 'C' ? FN_ERR_OK : FN_ERR_IO_ERROR; } diff --git a/msdos/src/fn_network/network_error.c b/msdos/src/fn_network/network_error.c new file mode 100644 index 0000000..b74086b --- /dev/null +++ b/msdos/src/fn_network/network_error.c @@ -0,0 +1,15 @@ +#include +#include +#include +#include +#include + +uint8_t network_error(const char *devicespec) +{ + uint8_t err = 0; + uint8_t status_ret = 0; + + status_ret = network_status(devicespec, NULL, NULL, &err); + + return status_ret; +} diff --git a/msdos/src/fn_network/network_http_set_channel_mode.c b/msdos/src/fn_network/network_http_set_channel_mode.c index 32b06f3..e6bcd37 100644 --- a/msdos/src/fn_network/network_http_set_channel_mode.c +++ b/msdos/src/fn_network/network_http_set_channel_mode.c @@ -5,5 +5,5 @@ uint8_t network_http_set_channel_mode(const char *devicespec, uint8_t mode) { uint8_t device = network_unit(devicespec) + 0x70; - return int_f5(device,'M',0x00,mode) == 'C'; + return int_f5(device,'M',0x00,mode) == 'C' ? FN_ERR_OK : FN_ERR_IO_ERROR; } diff --git a/msdos/src/fn_network/network_ioctl.c b/msdos/src/fn_network/network_ioctl.c index 103df50..37c1c69 100644 --- a/msdos/src/fn_network/network_ioctl.c +++ b/msdos/src/fn_network/network_ioctl.c @@ -14,9 +14,9 @@ uint8_t network_ioctl(uint8_t cmd, uint8_t aux1, uint8_t aux2, const char* devic uint8_t *dbuf = NULL; uint16_t dbyt = 0; uint8_t ret = 0; - + va_start(ap,devicespec); - + if (ap) dstats = va_arg(ap, uint8_t); if (ap) @@ -27,11 +27,11 @@ uint8_t network_ioctl(uint8_t cmd, uint8_t aux1, uint8_t aux2, const char* devic va_end(ap); if (dstats == 0x00) - ret = int_f5(device,cmd,aux1,aux2) == 'C'; + ret = int_f5(device,cmd,aux1,aux2) == 'C' ? FN_ERR_OK : network_error(devicespec); else if (dstats == 0x40) // Payload to computer - ret = int_f5_read(device,cmd,aux1,aux2,dbuf,dbyt); + ret = int_f5_read(device,cmd,aux1,aux2,dbuf,dbyt) == 'C' ? FN_ERR_OK : network_error(devicespec); else if (dstats == 0x80) // Payload to fujinet - ret = int_f5_write(device,cmd,aux1,aux2,dbuf,dbyt); - + ret = int_f5_write(device,cmd,aux1,aux2,dbuf,dbyt) == 'C' ? FN_ERR_OK : network_error(devicespec); + return ret; } diff --git a/msdos/src/fn_network/network_json_parse.c b/msdos/src/fn_network/network_json_parse.c index 8da5a91..b1bc553 100644 --- a/msdos/src/fn_network/network_json_parse.c +++ b/msdos/src/fn_network/network_json_parse.c @@ -16,5 +16,5 @@ uint8_t network_json_parse(const char *devicespec) // Ask FujiNet to parse JSON. ret = int_f5(device,'P',0x00,0x00); - return ret; + return ret == 'C' ? FN_ERR_OK : FN_ERR_IO_ERROR; } diff --git a/msdos/src/fn_network/network_json_query.c b/msdos/src/fn_network/network_json_query.c index 9f4f2a2..ee6db7c 100644 --- a/msdos/src/fn_network/network_json_query.c +++ b/msdos/src/fn_network/network_json_query.c @@ -15,7 +15,7 @@ int16_t network_json_query(const char *devicespec, const char *query, char *s) // Perform query ret = int_f5_write(device,'Q',0x00,0x00,(void *)query,256); if (ret != 'C') - return ret; + return -1; // Get # of bytes waiting network_status(devicespec,&bw,&c,&err); @@ -33,7 +33,7 @@ int16_t network_json_query(const char *devicespec, const char *query, char *s) } s[bw - offset] = '\0'; } - + // return the string length (minus any trailing EOL char) return bw - offset; } diff --git a/msdos/src/fn_network/network_open.c b/msdos/src/fn_network/network_open.c index 3232ff5..3a782a0 100644 --- a/msdos/src/fn_network/network_open.c +++ b/msdos/src/fn_network/network_open.c @@ -6,6 +6,6 @@ uint8_t network_open(const char* devicespec, uint8_t mode, uint8_t trans) { uint8_t device = network_unit(devicespec) + 0x70; - - return int_f5_write(device,'O',mode,trans,devicespec,256); + + return int_f5_write(device,'O',mode,trans,devicespec,256) == 'C' ? FN_ERR_OK : network_error(devicespec); } diff --git a/msdos/src/fn_network/network_read_msdos.c b/msdos/src/fn_network/network_read_msdos.c index c3e4b44..86685b5 100644 --- a/msdos/src/fn_network/network_read_msdos.c +++ b/msdos/src/fn_network/network_read_msdos.c @@ -7,5 +7,5 @@ int network_read_msdos(char* devicespec, unsigned char *buf, unsigned int len) { uint8_t device = network_unit(devicespec) + 0x70; - return int_f5_read(device,'R',len&0xFF,len>>8,(void *)buf,len) == 'C'; + return int_f5_read(device,'R',len&0xFF,len>>8,(void *)buf,len) == 'C' ? len : FN_ERR_IO_ERROR; } diff --git a/msdos/src/fn_network/network_write.c b/msdos/src/fn_network/network_write.c index a6798b7..a8aa7cb 100644 --- a/msdos/src/fn_network/network_write.c +++ b/msdos/src/fn_network/network_write.c @@ -6,6 +6,6 @@ uint8_t network_write(const char* devicespec, const uint8_t *buf, uint16_t len) { uint8_t device = network_unit(devicespec) + 0x70; - - return int_f5_write(device,'W',len&0xFF,len>>8,(void *)buf,len) == 'C'; + + return int_f5_write(device,'W',len&0xFF,len>>8,(void *)buf,len) == 'C' ? len : FN_ERR_IO_ERROR; } diff --git a/msdos/src/include/fujinet-fuji-msdos.h b/msdos/src/include/fujinet-fuji-msdos.h index e004e72..46d4ff7 100644 --- a/msdos/src/include/fujinet-fuji-msdos.h +++ b/msdos/src/include/fujinet-fuji-msdos.h @@ -17,4 +17,6 @@ unsigned char int_f5(unsigned char dev, unsigned char command, unsigned char aux unsigned char int_f5_read(unsigned char dev, unsigned char command, unsigned char aux1, unsigned char aux2, void *buf, unsigned short len); unsigned char int_f5_write(unsigned char dev, unsigned char command, unsigned char aux1, unsigned char aux2, const void *buf, unsigned short len); +unsigned char network_error(const char *devicespec); + #endif /* FUJINET_FUJI_MSDOS_H */