aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cmd.c37
-rw-r--r--src/irc.c40
-rw-r--r--src/irc.h3
-rw-r--r--src/main.c6
-rw-r--r--src/nio.c265
-rw-r--r--src/nio.h51
-rw-r--r--src/screen.c8
-rw-r--r--src/screen.h8
-rw-r--r--src/sio.s16
9 files changed, 134 insertions, 300 deletions
diff --git a/src/cmd.c b/src/cmd.c
index e0481c5..b7d9e68 100644
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -9,7 +9,7 @@
#include "config.h"
/* A "command" is actually anything the user types, whether or
- not it starts with a /character. */
+ not it starts with a / character. */
char *command, *arg1, *arg2, *arg3;
static char *target;
@@ -88,14 +88,7 @@ static void cmd_chan_text(void) {
/* 0x02 = ^B = enable bold */
scr_print_active("<\x02");
scr_print_active(conf->nick);
- scr_print_active("\x02");
-
- /*
- if(!scr_current) {
- scr_print_active("/");
- scr_print_active(target);
- }
- */
+ scr_putc_active('\x02');
scr_print_active("> ");
scr_print_active(command);
@@ -314,16 +307,18 @@ void cmd_ctcp_ping(char *nick) {
do_ctcp_ping();
}
-static void do_ctcp_info(void) {
- arg2 = "CLIENTINFO";
+static void do_no_arg_ctcp(char *type) {
+ arg2 = type;
arg3 = 0;
send_ctcp();
}
+static void do_ctcp_info(void) {
+ do_no_arg_ctcp("CLIENTINFO");
+}
+
static void do_ctcp_ver(void) {
- arg2 = "VERSION";
- arg3 = 0;
- send_ctcp();
+ do_no_arg_ctcp("VERSION");
}
static void do_ctcp(void) {
@@ -486,29 +481,25 @@ static void cmd_slash(void) {
cmd_remote();
}
-void cmd_command(char *cmd) {
- command = cmd;
+void cmd_execute(void) {
+ if(!*edit_box) return;
+ command = edit_box;
if(scr_current > 1)
target = scr_get_cur_name();
else
target = 0;
- if(cmd[0] == '/' && cmd[1] && cmd[1] != '/')
+ if(command[0] == '/' && command[1] && command[1] != '/')
cmd_slash();
else if(target)
cmd_chan_text();
else if(scr_current == SCR_PRIV || scr_current == SCR_SERVER)
- cmd_send_pm(cmd);
+ cmd_send_pm(command);
else
err_no_scr_target();
}
-void cmd_execute(void) {
- if(!*edit_box) return;
- cmd_command(edit_box);
-}
-
void cmd_rejoin_chans(void) {
char i;
diff --git a/src/irc.c b/src/irc.c
index e4c0184..f31d89c 100644
--- a/src/irc.c
+++ b/src/irc.c
@@ -78,7 +78,7 @@ static void do_pong(void) {
}
static void bold(void) {
- scr_print_active("\x02");
+ scr_putc_active('\x02');
}
static void hilite_bold(void) {
@@ -88,30 +88,28 @@ static void hilite_bold(void) {
static void do_chan_nick(void) {
if(hilite) {
bell();
- // scr_hilite_active();
new_scr_status = SCR_HILITE;
}
hilite_bold();
- scr_print_active("<");
+ scr_putc_active('<');
hilite_bold();
scr_print_active(msg_src);
if(scr_active == SCR_SERVER) {
/* if we don't have a window for it */
- scr_print_active("/");
+ scr_putc_active('/');
scr_print_active(msg_dest);
}
hilite_bold();
- scr_print_active(">");
+ scr_putc_active('>');
hilite_bold();
- scr_print_active(" ");
+ scr_putc_active(' ');
}
static void do_priv_nick(void) {
if(msg_src) {
- scr_print_active("*");
+ scr_putc_active('*');
scr_print_active(msg_src);
scr_print_active("* ");
- // scr_hilite_active();
new_scr_status = SCR_HILITE;
bell();
}
@@ -147,14 +145,14 @@ static void print_ping_time(char *p) {
scr_print_active(" lag: ");
itoa(sec, numbuf, 10);
scr_print_active(numbuf);
- scr_print_active(".");
+ scr_putc_active('.');
itoa(frac, numbuf, 10);
scr_print_active(numbuf);
- scr_print_active(" sec");
+ scr_putc_active('s');
/*
// for debugging:
- scr_print_active(" ");
+ scr_putc_active(' ');
itoa(pingtime, numbuf, 10);
scr_print_active(numbuf);
*/
@@ -203,7 +201,7 @@ static void do_ctcp(int is_notice) {
if(streq_i(ctcp_type, "ACTION")) {
scr_print_active("* ");
scr_print_active(msg_src);
- scr_print_active(" ");
+ scr_putc_active(' ');
scr_print_active(p);
scr_eol_active();
return;
@@ -355,7 +353,7 @@ static void do_mode(void) {
scr_print_active(" sets mode: ");
for(i = 0; i < msg_argcount; i++) {
scr_print_active(msg_args[i]);
- scr_print_active(" ");
+ scr_putc_active(' ');
}
if(msg_text) scr_print_active(msg_text);
scr_eol_active();
@@ -367,18 +365,18 @@ static void do_mode(void) {
static void do_catchall(int arg) {
if(msg_src) {
scr_print_active(msg_src);
- scr_print_active(" ");
+ scr_putc_active(' ');
}
scr_print_active(msg_cmd);
for(; arg < msg_argcount; arg++) {
- scr_print_active(" ");
+ scr_putc_active(' ');
scr_print_active(msg_args[arg]);
}
if(msg_text) {
- scr_print_active(" ");
+ scr_putc_active(' ');
scr_print_active(msg_text);
}
scr_eol_active();
@@ -586,8 +584,10 @@ static void dispatch_msg(void) {
}
if(scr_active != scr_current) {
- scr_status[scr_active] = new_scr_status;
- scr_show_status(scr_current);
+ if(scr_status[scr_active] < new_scr_status) {
+ scr_status[scr_active] = new_scr_status;
+ scr_show_status(scr_current);
+ }
}
}
@@ -756,7 +756,7 @@ int irc_read(void) {
if(!trip) return 1;
last_read_min = minutes;
- err = nstatus(conf->url);
+ err = nstatus();
if(err != 1) {
scr_display(SCR_SERVER);
@@ -779,7 +779,7 @@ int irc_read(void) {
ind_net_rx();
if(rxbuflen > 0) {
- err = nread(conf->url, rx_buf, rxbuflen);
+ err = nread(rx_buf, rxbuflen);
if(err != 1) {
ind_net_down();
print_errnum();
diff --git a/src/irc.h b/src/irc.h
index b0ff260..8ced02d 100644
--- a/src/irc.h
+++ b/src/irc.h
@@ -1,6 +1,3 @@
-/* 0 = no translation (used to use 3, CRLF) */
-#define FNET_TRANSLATION 0
-
#define MAX_IRC_MSG_LEN 512
#define streq(x,y) !strcmp(x,y)
diff --git a/src/main.c b/src/main.c
index 5535343..4a938b9 100644
--- a/src/main.c
+++ b/src/main.c
@@ -78,7 +78,7 @@ void txbuf_send(void) {
tx_buf[txbuflen++] = 0x0a;
ind_net_tx();
- nwrite(conf->url, tx_buf, txbuflen);
+ nwrite(tx_buf, txbuflen);
ind_net_idle();
txbuf_init();
}
@@ -95,7 +95,7 @@ int fn_connect(void) {
scr_print_current(conf->url);
scr_eol_current();
- err = nopen(conf->url, FNET_TRANSLATION);
+ err = nopen();
if(err != SUCCESS) {
scr_print_current("Connection failed: ");
@@ -118,7 +118,7 @@ int fn_connect(void) {
}
void fn_disconnect(void) {
- nclose(conf->url);
+ nclose();
// Restore old PROCEED interrupt.
PIA.pactl &= ~1; // disable interrupts
diff --git a/src/nio.c b/src/nio.c
index 399b06d..9deae3c 100644
--- a/src/nio.c
+++ b/src/nio.c
@@ -2,201 +2,110 @@
* 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 */
-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 connection! */
+
+/* 0 = no translation (used to use 3, CRLF) */
+#define TRANS 0
+
+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();
+ return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return extended error.
+ }
+ }
+ return OS.dcb.dstats; // Return SIO error or success
}
-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
- 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
+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 nclose(char* devicespec)
-{
- unsigned char unit=nunit(devicespec);
-
- OS.dcb.ddevic = DFUJI;
- OS.dcb.dunit = unit;
- 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.
+char nopen(void) {
+ set_defaults();
+ 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 nstatus(char* devicespec)
-{
- unsigned char unit=nunit(devicespec);
-
- OS.dcb.ddevic = DFUJI;
- OS.dcb.dunit = unit;
- 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();
-
- return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return extended status
-}
+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();
-unsigned char nread(char* devicespec, unsigned char* buf, unsigned short len)
-{
- unsigned char unit=nunit(devicespec);
-
- OS.dcb.ddevic = DFUJI;
- OS.dcb.dunit = unit;
- 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();
}
-unsigned char nwrite(char* devicespec, unsigned char* buf, unsigned short len)
-{
- unsigned char unit=nunit(devicespec);
-
- OS.dcb.ddevic = DFUJI;
- OS.dcb.dunit = unit;
- 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.
+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
}
-/* https://fujinet.online/wiki/?p=SIO-Command-%24FF-Reset-FujiNet */
-unsigned char nreset(void) {
- 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();
-
- return OS.dvstat[DVSTAT_EXTENDED_ERROR]; // return extended status
+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();
+
+ return get_status();
}
+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();
+
+ return get_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;
+/* https://fujinet.online/wiki/?p=SIO-Command-%24FF-Reset-FujiNet */
+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
}
-#endif
+
diff --git a/src/nio.h b/src/nio.h
index bc63da8..63b4997 100644
--- a/src/nio.h
+++ b/src/nio.h
@@ -22,51 +22,12 @@
#define DVSTAT_PROTOCOL 2
#define DVSTAT_EXTENDED_ERROR 3
-/**
- * Open N: device with devicespec
- * @param devicespec - an N: device spec, e.g. N:TCP://FOO.COM:1234/
- * @param translation mode, 0=none, 1=cr, 2=lf, 3=cr/lf
- * @return error code, or 1 if successful.
- */
-unsigned char nopen(char* devicespec, unsigned char trans);
-
-/**
- * Close N: device with devicespec
- * @param devicespec - an N: device spec to close (the unit number is extracted)
- * @return error code, or 1 if successful.
- */
-unsigned char nclose(char* devicespec);
-
-/**
- * Get status of specific N: device
- * @param devicespec - an N: device spec to status (the unit number is extracted)
- * @return error code, or 1 if successful, DVSTAT is also filled with status info.
- *
- * Format of DVSTAT:
- * OS.dcb.dvstat[0] = # of bytes waiting LO
- * OS.dcb.dvstat[1] = # of bytes waiting HI
- * OS.dcb.dvstat[2] = reserved
- * OS.dcb.dvstat[3] = Error code of last I/O operation. !1 = error.
- */
-unsigned char nstatus(char* devicespec);
-
-/**
- * Read # of bytes from specific N: device.
- * @param devicespec - an N: device spec to read bytes from.
- * @param buf - The buffer to read into, must be at least as big as len.
- * @param len - The # of bytes to read (up to 65535)
- * @return error code, or 1 if successful, buf is filled with data.
- */
-unsigned char nread(char* devicespec, unsigned char* buf, unsigned short len);
-
-/**
- * Write # of bytes to specific N: device.
- * @param devicespec - an N: device spec to write to.
- * @param buf - The buffer to write to device, should be at least as big as len.
- * @param len - The # of bytes to write (up to 65535)
- * @return error code, or 1 if successful, buf is filled with data.
- */
-unsigned char nwrite(char* devicespec, unsigned char* buf, unsigned short len);
+char nopen(void);
+char nclose(void);
+char nstatus(void);
+char nread(char *buf, unsigned short len);
+char nwrite(char *buf, unsigned short len);
+char nreset(void);
/**
* Send username and password credentials
diff --git a/src/screen.c b/src/screen.c
index 2645515..258a4a7 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -188,14 +188,6 @@ void scr_show_status(char s) {
}
}
-/*
-void scr_hilite_active(void) {
- if(scr_active == scr_current) return;
- scr_status[scr_active] = SCR_HILITE;
- scr_show_status(scr_current);
-}
-*/
-
void scr_refresh(void) {
scr_display(scr_current);
}
diff --git a/src/screen.h b/src/screen.h
index 0d3e268..af95690 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -7,9 +7,9 @@
#define SCR_UNUSED 0
#define SCR_INACTIVE 1
-#define SCR_ACTIVE 2
-#define SCR_HILITE 3
-#define SCR_OTHER 4
+#define SCR_OTHER 2
+#define SCR_ACTIVE 3
+#define SCR_HILITE 4
#define SCR_SERVER 0
#define SCR_PRIV 1
@@ -102,8 +102,6 @@ void scr_print_priv(const char *text);
will have to call this. */
void scr_activate(char s);
-void scr_hilite_active(void);
-
char *scr_get_cur_name(void);
/* XXX: this really should be in a utils.c or common.c... */
diff --git a/src/sio.s b/src/sio.s
index 3dd9191..829fbcb 100644
--- a/src/sio.s
+++ b/src/sio.s
@@ -1,17 +1,3 @@
;; Call SIO
-
.export _siov
- .export _rtclr
- .export _cold_start
-
-_siov: JSR $E459
- RTS
-
-_rtclr: LDA #$00
- STA $12
- STA $13
- STA $14
- RTS
-
-_cold_start:
- JMP $E477
+ _siov = $e459