aboutsummaryrefslogtreecommitdiff
path: root/src/nio.c
diff options
context:
space:
mode:
authorB. Watson <urchlay@slackware.uk>2026-03-28 07:26:46 -0400
committerB. Watson <urchlay@slackware.uk>2026-03-28 07:26:46 -0400
commit87b234ba73e9abb4ecb8966ef631a0d7b8f5915a (patch)
tree8435c18071937d092e3265bb4c708caab24b9135 /src/nio.c
parent898cfeb8a558245fc48bbba948c16205509e6a11 (diff)
downloadfujinet-chat-87b234ba73e9abb4ecb8966ef631a0d7b8f5915a.tar.gz
Save some more bytes (strip down nio.c API).
Diffstat (limited to 'src/nio.c')
-rw-r--r--src/nio.c132
1 files changed, 67 insertions, 65 deletions
diff --git a/src/nio.c b/src/nio.c
index 61ac8ae..9deae3c 100644
--- a/src/nio.c
+++ b/src/nio.c
@@ -2,21 +2,28 @@
* N: I/O
*/
-#include "nio.h"
-#include "sio.h"
+/* "stripped down" version that harcodes some parameters! Don't
+ use this as example code for writing your own fujinet app! */
+
#include <atari.h>
#include <stddef.h>
+#include "nio.h"
+#include "sio.h"
+#include "config.h"
#define TIMEOUT 0x1f /* approx 30 seconds */
-#define UNIT 1 /* only support one FujiNet! */
+#define UNIT 1 /* only support one FujiNet connection! */
+
+/* 0 = no translation (used to use 3, CRLF) */
+#define TRANS 0
-static char get_status(char *devicespec) {
+static char get_status(void) {
if(OS.dcb.dstats != SUCCESS) {
// something went wrong
// do we need to return extended status?
if(OS.dcb.dstats == DERROR) {
- nstatus(devicespec);
+ nstatus();
return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return extended error.
}
}
@@ -24,86 +31,81 @@ static char get_status(char *devicespec) {
}
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
+ 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)
-{
+char nopen(void) {
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.dbyt = 256; // max size of our device spec
- OS.dcb.daux1 = OUPDATE; // Read and write
- OS.dcb.daux2 = trans; // CR/LF translation
- siov();
-
- return get_status(devicespec);
+ OS.dcb.dcomnd = 'O'; // Open
+ OS.dcb.dstats = DWRITE; // sending to to SIO device
+ OS.dcb.dbuf = conf->url; // eg: N:TCP//
+ 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();
+
+ return get_status();
}
-unsigned char nclose(char* devicespec)
-{
+char nclose(void) {
set_defaults();
- OS.dcb.dcomnd = 'C'; // Close
- OS.dcb.dstats = 0x00;
- OS.dcb.dbuf = NULL;
- OS.dcb.dbyt = 0;
- OS.dcb.daux = 0;
- siov();
-
- return get_status(devicespec);
+ OS.dcb.dcomnd = 'C'; // Close
+ OS.dcb.dstats = 0x00;
+ OS.dcb.dbuf = NULL;
+ OS.dcb.dbyt = 0;
+ OS.dcb.daux = 0;
+ siov();
+
+ return get_status();
}
-unsigned char nstatus(char* devicespec)
-{
+char nstatus(void) {
set_defaults();
- OS.dcb.dcomnd = 'S'; // status
- OS.dcb.dstats = DREAD;
- OS.dcb.dbuf = OS.dvstat;
- OS.dcb.dbyt = sizeof(OS.dvstat);
- OS.dcb.daux = 0;
- siov();
-
- return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return extended status
+ OS.dcb.dcomnd = 'S'; // status
+ OS.dcb.dstats = DREAD;
+ OS.dcb.dbuf = OS.dvstat;
+ OS.dcb.dbyt = sizeof(OS.dvstat);
+ OS.dcb.daux = 0;
+ siov();
+
+ return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return extended status
}
-unsigned char nread(char* devicespec, unsigned char* buf, unsigned short len)
-{
+char nread(char *buf, unsigned short len) {
set_defaults();
- OS.dcb.dcomnd = 'R'; // read
- OS.dcb.dstats = DREAD;
- OS.dcb.dbuf = buf;
- OS.dcb.dbyt = OS.dcb.daux = len; // Set the buffer size AND daux with length
- siov();
+ OS.dcb.dcomnd = 'R'; // read
+ OS.dcb.dstats = DREAD;
+ OS.dcb.dbuf = buf;
+ OS.dcb.dbyt = OS.dcb.daux = len; // Set the buffer size AND daux with length
+ siov();
- return get_status(devicespec);
+ return get_status();
}
-unsigned char nwrite(char* devicespec, unsigned char* buf, unsigned short len)
-{
+char nwrite(char *buf, unsigned short len) {
set_defaults();
- OS.dcb.dcomnd = 'W'; // write
- OS.dcb.dstats = DWRITE;
- OS.dcb.dbuf = buf;
- OS.dcb.dbyt = OS.dcb.daux = len;
- siov();
+ OS.dcb.dcomnd = 'W'; // write
+ OS.dcb.dstats = DWRITE;
+ OS.dcb.dbuf = buf;
+ OS.dcb.dbyt = OS.dcb.daux = len;
+ siov();
- return get_status(devicespec);
+ return get_status();
}
/* https://fujinet.online/wiki/?p=SIO-Command-%24FF-Reset-FujiNet */
-unsigned char nreset(void) {
+char nreset(void) {
set_defaults();
- OS.dcb.ddevic = 0x70;
- OS.dcb.dcomnd = 0xff; /* reset */
- OS.dcb.dstats = DWRITE;
- OS.dcb.dbuf = 0;
- OS.dcb.dbyt = 0;
- OS.dcb.daux = 0;
- siov();
-
- return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return extended status
+ OS.dcb.ddevic = 0x70;
+ OS.dcb.dcomnd = 0xff; /* reset */
+ OS.dcb.dstats = DWRITE;
+ OS.dcb.dbuf = 0;
+ OS.dcb.dbyt = 0;
+ OS.dcb.daux = 0;
+ siov();
+
+ return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return extended status
}