aboutsummaryrefslogtreecommitdiff
path: root/src/ChangeLog
blob: 0ecb00a51239610daadd3adeceaf0e252410a745 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
- 20190315 bkw:

Eliminate printf/sprintf calls from fujimenu.c and makeauto.c. Also
eliminate perror() from makeauto.c, which shrinks the xex by almost 2KB
(but prints numeric error messages instead of human-readable ones).

- 20190313 bkw:

FujiChat is back!

The source is now developed using git, meaning you'll find low-level
details about changes in the git log. I'll try to remember to update
this ChangeLog to document major new features and such.

To get the code from git:

git clone git://urchlay.naptime.net/fujichat.git

- 20081201 bkw:

Rewrote & reorganized handle_command(). It now lives in commands.c,
and loops over a table of commands (cmd_list), rather than the old
messy chain of if/else/if. Moved all the logic for each command into
their own cmd_whatever() functions (the addresses of which are in the
table). Not only did this save a couple hundred bytes of object code,
it also means adding new commands is less expensive.

Instead of telnet_send(tstate, serv_msg_buf, strlen(serv_msg_buf)) strewn
about the code, there's now a send_serv_msg_buf(void) function. Rather
than use strlen() to calculate, we set the new serv_msg_buf_len variable
to the length... which works out great as almost all the telnet_send()
instances were preceded by a sprintf(), which already returns the length
(was just throwing away the return value! Old habits...)

Added /fgcolor and /bgcolor commands (enable with FEAT_COLOR_COMMAND).
These don't change the colors in the config, and they get reset before
every new IRC connection, but it does mean you don't have to reload the
config menu to try out new colors. Especially important for COL80 users,
since it takes some fiddling to find a color set that looks good on your
monitor (if you can!)

Completely removed all attempts to do a software cursor when
FEAT_COL80_HACK is enabled. It wasn't working anyway, and needs further
thought before hacking away at it any more (should the COL80 driver
respond to CRSINH at 752, like the real E: does?)... Actually it's
perfectly usable without the cursor anyway, you always know where you
are because you're always at the bottom of the screen. When/if arrow
key editing is supported, there will have to be a cursor...


- 20081130 bkw:

More major surgery: there's now a hacked-up, cut-down version of the
old COL80 driver, and Fujichat support for it. FEAT_COL80_HACK, which
defines its own set of features. Currently the code is a mess of #ifdefs,
but working (still some issues with the cursor not working right in 80
cols). The 4x8 font is a slightly modified version of Itay Chamiel's
Ice-T font (characters 32-127 only, I made the ampersand and the capital
N look more like I expect them to). Current version of col80 uses the
cassette buffer for a private input buffer for CIO get calls, but
it could just as well use input_buf (though it can't know where that
is, unless FEAT_LOW_RAM_BUFFERS is also enabled). So far, COL80 hack
only tested with Bob-verter. Scroll speed is slower than Ice-T or
E80/ACE80, but TCP has those pauses built into it... someone needs
to try it at 9600 baud. An interesting thing about COL80 is that
it's not limited to 128-char fonts (neither is Ice-T, Itay does a
full 256-char set)... unicode anyone? SW underlining?

Got rid of redraw_buf (was at $2800), calling fuji_putchar() in a loop
is about as fast as fputs() a whole string. Allows user an extra page
in low memory, unless I find a burning need to use it for something
else...

- 20081127 bkw:

Expunged putchar() and cgetc(), from fujichat.c, gained over 200 bytes
(replaced with "indirect JSR" technique using put/get address-minus-one
in OS ROM). BSS now ends at $9515. We almost have enough room for an
80-column software driver (the stack is 2K, so MEMTOP needs to be $9d15
or higher since we don't use the heap). Default GR.0 setup, MEMTOP
is $bc1f, which is where the stack starts (and grows downward for 2K,
ending at $b41f).  $B41F minus $9515 is 7946 bytes, almost 8K. In GR.8
mode, MEMTOP is $A04F. Subtract $9515 (end of BSS), add 2K ($9D15,
end of stack). Subtract from $A04F and we get $33a, or 826 bytes. This
is not enough room for a GR.8 software 80-column driver's code + font
(COL80E uses more like twice that), but it's a whole lot closer than
FujiChat 0.4 was.

Strip leading colons from the text of server messages.

BSS at $977E (got rid of cursor() and replaced cgetc() with version
that doesn't contain setcursor junk (we don't want to ever disable
the cursor). In fact conio.h is gone now.

Expunged fread() from common.c (replaced with read()), gained over
1/2K.

Made TCP listen support optional in uIP, and turned it off for
FujiChat. This save about 1200 bytes in the binary.

Starting to rewrite bits in asm. I've got the end of the BSS
down to $97ED now, and I've barely started...

Fixed bug in config_is_valid() that made fujichat always use
built-in defaults. Thanks to Beetle for spotting this.

- 20081126 bkw:

Renamed menu.com to fujimenu.com (apparently on SpartaDOS X,
trying to load D:MENU.COM ends up loading CAR:MENU.COM instead).
Thanks to Beetle for spotting this.

makeauto.com now cats the serial driver and loadmenu.com (instead
of menu.com) to make autorun.sys. Saves like 70 sectors on the
disk image.

Added some test code (FEAT_UNICODE_TEST) that converts an input ctrl-P
(clubs symbol) into the UTF-8 sequence for a Unicode "card suit clubs"
symbol. It looked fine in irssi with univga font, but for some reason 3
other people saw it as a spades symbol... Eventually it'd be possible to
have a little table to convert all the ATASCII graphics chars into UTF-8
on keyboard input, and convert the UTF-8 versions back into the ATASCII
chars on screen output. Thanks to Redb3ard for coming up with the idea
and doing the research on this... though it can't be fully implemented
any time soon (FujiChat needs to go on a major diet before I add any
more features, I'm running out of RAM).


- 20081125 bkw:

Added keyboard buffer. Needs lots of testing, but initially appears
to work OK (FEAT_KEYBOARD_BUFFER)

Added autojoin to fujichat.

Rearranging things. The Atari 850 driver *crashes* if it's loaded
from the DOS menu even (it *has* to be autorun.sys), so instead
of the default.ser and such, the RS232 driver + menu now get
catted together to create an autorun.sys (and the user is asked
to reboot, to load it).

Added auto-away on attract mode

Added alt_nick and timezone fields to cfg file (not used yet),
bumped CONF_VERSION.

Rearrange fujichat numeric server message stuff, add autojoin capability.
Also add autojoin prompt to fujiconf.

Change the leading character for local message from * to > (e.g.
"> Registering Nick"), and privmsgs to us now show up as
"-> <nick> message"

- 20081120 bkw:

Fixed bug in conf menu (IRC server was getting reset to the first in the
list if the user hit Return, instead of keeping his existing one). Thanks
to Slor for spotting this.

Added (attempted) 19200 baud support. cc65 doesn't define RS_BAUD_19200 in
rs232.h. Slor suggested defining it as 0x0f (since the baud rate constants
run 0x00 to 0x0e). It almost works: FujiChat is able to send & receive,
but even with hardware handshaking, it can't keep up (lots of incoming
packets get dropped, and the connection eventually stalls). Since Slor's
HW handshaking is known to work (he can do 9600 baud reliably, and runs
unpatched slattach without -L), I assume the trouble is that the loop
in rs232dev.c is too slow. Recoding it in asm may help. It may have to
use SIO instead of CIO though... or would that make it HW-specific?
Guess it would.

Added (bloated implementation of) ping time calculation. In the ping
request, we send the contents of the 3 bytes of RTCLOK, and when we get
them back, we subtract them from the current RTCLOK value and format
as number of seconds + 10ths of seconds. Code uses CLOCKS_PER_SECOND,
which means it auto-adjusts for PAL vs. NTSC timing. If RTCLOK rolled over
between request & response, it'll appear to be a huge negative number...
but I think uIP fails when RTCLOK rolls over anyway. Most people won't
leave their Atari up for 3+ days anyway I guess.

Clean up the raw IRC protocol server messages. We now strip the server
hostname, parse numerics, and (for a few numerics) print meaningful
message like "Topic". This could use a lot more work, but it does save
our limited screen space.

Implemented UIFLAG_HIDE_MOTD in fujichat.c. The traffic indicator still
appears, to let the user know something's going on. Initial pre-MOTD
server messages are not suppressed.

- 20081119 bkw:

*Major* surgery! The patient's vitals are strong, and the operation
is a tentative success.

fujichat's config menu has been split off into a separate executable.
This keeps the menu from sitting around taking up memory while we're
actually chatting. Also it paves the way for a fancier config menu with
more options and a nice UI.

While I was at it, I added a top-level menu program and an "about"
option, with a separate viewer program that's a simple version of "more"
from UNIX.

All the programs (fujichat, fujiconf, menu) are able to load & run
each other thanks to aexec (aka atari_exec()). This is a teensy little
binary-file loader that fits into page 6, and gets prepended to
all the other programs.

Also, the Bob-verter driver is no longer baked into fujichat. Instead,
we've got a tiny little loader called "loadchat", which does this:

- Check for the existence of an R: device in HATABS
- If not found, load the file DEFAULT.SER (ignoring "file not found")
- Load fujichat.com

DEFAULT.SER is just a binary load file. By default it'll be a copy
of Bob-verter (also there's a copy called BOBVERT.SER).

The config menu (fujiconf) allows the user to choose which serial
device he has (by user-friendly name), and copies the appropriate
driver (named something.SER) to DEFAULT.SER. Nota bene:

- The driver is only loaded when the user chooses to run FujiChat
itself, from either menu.com or fujiconf.com

- If the driver setting gets changed before any R: driver is loaded,
loadchat will load the new driver.

- The menu allows the user to type a filename, to use a driver not
in the built-in list (which is good as it's not a very complete
list yet)

- The menu also allows "none" as a choice, meaning he's taking
responsibility for providing an R: handler himself (e.g. as an
AUTORUN.SYS, or loaded from a SpartaDOS batch file or whatever).
In this case, DEFAULT.SER will be deleted, and loadchat will
silently fail to load it, and then FujiChat will just use the
preloaded R: handler (or if it's missing, it'll give an error
and let the user go back & reconfigure).

- The way this is set up, it means the user can just use fujichat.com
as a standalone executable, without the presence of menu.com, loadchat.com,
fijuconf.com, or any other stuff from the disk. He can prepend his
R: handler to it and load it from anywhere. It'll use the default
config, but that's OK (most people would set up their SLIP host
with the defaults anyway). He'll have to enter his server every
time, and use /nick, but the program will *work*.

- It's also possible to run fujiconf once to create a config file, then
copy fujichat.com and fujichat.cfg to some other disk or directory
or whatever, and run it without having the menu/loadchat/fujiconf/etc.
The only missing capability is that he can't create a new config file.

- The de luxe option: it should be fully possible to copy the contents
of the FujiChat floppy image to a MyDOS or SpartaDOS subdirectory
(obviously don't copy autorun.sys, dos.sys, dup.sys). All the filenames
used by the program begin with D:, not D1:, so they should use the
current drive and directory. (Eventually I'll write an INSTALL.COM
that makes the directory & copies the stuff for you!)

Other changes:

Break key is now disabled. No more accidentally sending a line when
you meant to hit Backspace.

There's now a tiny AUTORUN.SYS that finishes the DOS boot stuff, then
runs MENU.COM (the main menu) for us.

MENU.COM, FUJICONF.COM, and FUJICHAT.COM all look in page 5 for the
config, which stays resident when switching between programs. If it's
not there, they all try to load it from FUJICHAT.CFG. If that fails,
they use built-in defaults.

FujiChat (FUJICHAT.COM) *can not* create FUJICHAT.CFG itself.

Had to use memcpy() instead of Adam's uip_sethostaddr() and
uip_setdraddr() macros (they have trouble when their arguments are
dereferenced pointers; probably this is a deficiency in cc65).

The config menu is a lot more user-friendly. It stops the user from
setting unreadable colors (where fg/bg have equal luma values), and
the long, long list of questions is broken up into sections.

rs232dev_init() now returns a status. If it's not RS_ERR_OK, something
went wrong. If this happens, FujiChat allows the user to retry,
run fujiconf, or exit to DOS.

I won't be providing single-file .xex downloads any more. The ATR image
will be the main distribution (possibly I'll also offer the contents
in a zip file, for S-Drive or MyIDE users). The main executable still
works standalone, but is not fully functional, so I'd rather discourage
'noobs' from running it that way (non-noobs know how to extract the
.xex from the .atr image themselves).

Changed uip-conf.h, now uIP is compiled with support for only one
TCP conn, one UDP conn, and one TCP listen port (TCP listen support
isn't disable-able in uIP; I'll change that later). Also disabled
UDP checksums.

Added FEAT_* macros to remove some FujiChat features at compile time.
See fujichat.c for the list of features and how much code space they
take up.

Added network traffic indicator in upper right corner of screen:
up arrow for transmit, down arrow for receive. FEAT_TRAFFIC_INDICATOR

/j or /join with no argument now tries to rejoin the current channel
(use if you get kicked). Also, fixed bug where /j with no argument
tried to join a bogus (null) channel.

/nick now tracks your nick changes. This fixes the bug where, after
a nick change, private messages to your new nick appear to be
channel traffic.


- 20081116 bkw:
Fixed bug in 0.3.0 (ctcp responses didn't work when a ctcp request came
back in the middle of typing a line)
Made baud rate selectable in the UI (there was already a config file entry
for it)
0.3.0 released
Added ^W and ^U (delete last word, delete-line, emacs-style)
Added simulated edit buffer using delete-line and cursor controls. This
isn't as nice as a custom display list, but it stays compatible with (most)
80-column drivers.
Added option to run config menu from the "return to connect" prompt, got rid
of "Use defaults [y/n]" prompt.
Added support for selecting the server port (default still 6667)
Added support for real name field
We now close the serial port when disconnected (needed for the config menu
to be able to save to disk, at least with bob-verter driver)

- 20081115 bkw:
Changed uIP packet buffer size to 576. This will help with those DNS aliases
that return 15 hostnames + aliases (like irc.freenode.org). TCP MSS is still
set to 160 - header_len, to keep it feeling like an interactive app.

strcmp against config.nick changed to strcasecmp, so we can correctly
handle messages/ctcps to the lowercase (or whatever) version of our nick.

Added option to enter an IRC server instead of just "press return
to connect". The default is the config file server, or last server
connected to.

- 20081113 bkw:
0.2 released
Added option to exit to DOS
FujiChat now works with FreeNode (mostly)
Made local/peer/DNS IP configurable
Server hostname now configurable
UI flags configurable: visual bell, no bell, msg bell, show ping
Default server list is now hostnames
Consolidate some UI I/O code
Initial support for DNS resolution

- 20081112 bkw:
Added visual bell support
Added ` (backtick) support (prints as inverse single quote)

- 20081105: 0.1 released