TALK - Network Conferencer ========================== J.G.Harston 70 Camm Street, Walkley, Sheffield S6 3TR jgh@arcade.demon.co.uk TALK is a network conferencing program. It has been MCoded so it can be started either by CHAIN "Talk" or by *Talk. It can be run from the Archimedes desktop by changing its filetype to BASIC with *SetType Talk Basic. I recommend that a main copy is put in the main Library for 8-bit machines and in the Archimedes library ArthurLib put an Obey file with the name 'Talk' with the single line 'Basic net::DiskName.$.Library.Talk', replacing DiskName with the name of the disk the library is on. When run, you are asked for the name that other people will know you by. This does not have to be the same as your username, and you do not need to be logged onto a fileserver to use TALK. In pre-version 5.20 TALKs, you are then asked for the number of other stations you wish to talk to, and then the station numbers of the other stations. In TALKs version 5.20 onwards, TALK sends broadcasts to other stations to find who else is using TALK. Once running, anything you type in the bottom window will be sent to all the other stations and will appear in their top window, where they will be prefixed with the name of the person sending them. If you start a message with :n or :name, then that message will be sent to station n or to user name only, eg: :20 Hello there or :Mary Hello there will only send the message to station 20 (assuming Mary is on station 20), and the message will be marked with a right-arrow instead of a colon. The function keys f0 to f9 are programmed with these shortcuts for the first 10 people in the default user list. As more people start TALKing, their names appear in the user list. Any station can be added to the default list using *A, and they can be removed with *R. There are some commands you can give to TALK. These are: *A Add a station to the default list *B Rebroadcasts the enquiry up to times (default 30) *C Communicate on the 'channel' specified *H or ? Help - gives a list of commands *I Ignore messages from station *O Only accept messages from station *Q Quit - returns to Basic *R Removes the numbered user from the default list *S Start TALK again to re-enter details *T Redisplay the title screen with your name *U List users in default list The will accept full network and station specifications, eg 1.20 for station 20 on network 1. OS Commands can be issued by prefixing them with '**'. Notes ===== TALK versions up to 5.10 can all talk to each other. They will not run on the Archimedes as they use immediate POKE operations to memory at &7200. The program unprotects the station to allow the POKEs to function. They will not communicate over bridges. TALK versions 5.20 onwards can all talk to each other. They will run on the Archimedes and on protected stations as they use transmission blocks. They will communicate over bridges. I may try to get them to talk to pre-5.20 versions. The Broadcast Transmit on Ethernet is not as reliable as on the Econet. When running on Archimedes, some machines may not find the others due to Ethernet having no collision detect. Entering *B to rebroadcast the enquiry packet will help. Also, as long as other TALKers know about you, once a message arrives from them, they will get added to the user list. Pressing Ctrl-T will turn debug test messages on, showing everything transmitted and received. Version History =============== V1.00 Spring 1983 First development version. No support commands, written to work out how network transmission and reception worked. V5.00 14-Nov-1985 First full version. All normal features included. Uses POKEs to transmit, hardware access to find station number and uses direct screen access to display the user's name. Fairly wasteful of memory, having user info at &7000, Tx buffer at &7100, Rx buffer at &7200, and unused memory from &7300 to &7BFF. MCoded with own make-shift code. V5.01 26-Feb-1996 MCoded with *MCode. V5.02 17-Nov-1996 Uses Osword call to read station number. X%,Y% set globally. Displays Econet Station xxx and full version number. '?' allowed as well as '*H'. Cursor keys restored on exit. V5.10 19-Nov-1996 Programming completely tidied up. Routines put into procedures, including name request and station list request. Global control block pointed to by X%,Y%. Proper checks on out-of-range parameters. V5.11 14-Dec-1996 Beta-test version of 5.20 sent to Andrew Nelson for testing. V5.12 04-Mar-1997 Archimedes RMEnsures BBCEconet and Quits properly. Broadcast data properly placed in control block. V5.20 03-Mar-1997 Tx and Rx routines use Econet Tx and Rx instead of memory POKE. Doesn't unprotect the station. Sends initial broadcasts to find what other clients are running TALK. Will communicate over bridges and gateways and on non-Econet networks such as Ethernet. Will work on the Archimedes. *N (not listening) changed to *I (ignore). Can use a specified 'channel' or 'conversation', to communicate with instead of everybody talking to everybody else. *C sets the channel used. This depreciates the use of *I to ignore a single station. *O (only) is still useful. *B added to rebroadcast initial enquiry packet. Help list tidied up a bit, and also lists *T which was omitted from previous versions. Receive block closed and cursor key state reset while doing OS Commands. Memory wastage removed, so MCoded to run at &6100 instead of &5800. V5.21 22-May-1998 Responds to wildcard server broadcasts giving the name entered by the user at the start of the program. Broadcast receptions don't clear names from user list. V5.22 01-Mar-1999 *Q sends a logoff message, bottom line of top window used, internal memory management better so No room errors avoided. V5.23 01-May-2003 Checks RISC OS BBCEconet module is a usable version. Technical Information ===================== This information is valid for v5.12 onwards. TALK is a peer-to-peer communication system. All TALK systems are clients, there are no servers. When TALK starts a user name is asked for. Once into the TALK session a TalkFind transmission is broadcast every second informing other parties that this TALK client is present. This broadcast is done initially 30 times. Another set of broadcasts can be sent at any time by using the *B command. A reception block is opened to receive from any station on the TALK port, and one to recieve from any station on the ServerFind port. In versions of TALK where the TALK port is the same as the ServerFind port, a single receive block is opened. At any time during the session a reception can be processed. TALK responds to two types of reception, control data and message data, as determined by the flag byte. Message data has flag byte <>&80. On reception, it is displayed in the incoming message window. Control data has flag byte =&80. There are three types of control message that TALK responds to: ServerFind, TalkFind and TalkReply. They are determined by the transmitted data which should an eight byte string. ServerFind Control transmission ------------------------------- Flag: &80 Port: ServerFind (&B0) or TalkPort (&B0 in current versions) Data: " " (eight spaces) On reception, a ServerReply message is sent to the station that requested the information. ServerReply Control transmission -------------------------------- Flag: &80 Port: ServerReply (&B1) Data: +0 &00 +1 Port this application uses, ie TalkPort (&B0 in current versions) +2 BCD version number times 10, eg &48 for version 4.80 +3 Eight character application name, space padded, ie "TALK " +11 Length of additional data +12 Additional data, TALK sends the client's TALK name TalkFind Control transmission ----------------------------- Flag: &80 Port: ServerFind (&B0) Data: "TALK " On reception, a TalkReply message is sent to the station that requested the information. Once that station gets the TalkReply it will add this client to it's user table and start to send communication messages to this client. Once this happens, this client will add that client to this client's user table. TalkReply Control transmission ------------------------------ Flag: &80 Port: ServerFind (&B0) Data: "TALK_RPL" - TalkPort is &B0 Data: "TALKRPL",&nn - TalkPort is &nn On reception, this client's user table is updated to ensure that the station that transmitted is in the user list. This TALK client does not know the name of the other station until it sends a communication message with a name in it. If the data is "TALK_RPL", then the TalkPort for communicating on is &B0. If the data is "TALKRPL",&nn then the TalkPort is &nn and that port should be used for message communication. If the data is anything else, it should be ignored. Current versions of TALK do not send TALKRPL,&nn transmissions and TalkPort is &B0. Communication transmission -------------------------- Flag: <>&80 Port: TalkPort (&B0 in current versions) Data: +0: Message flag - ':' public message, ']' private message +1: Unused - set to &00 +2: Transmitter's name, CR terminated nn: CR nn+1: Message string, CR terminated On reception, the message is displayed in the incoming window as &1F>, eg: Mike: Hello there TALK sends a ':' message flag on public messages and a ']' message flag on private message sent to a single specified client. In MODE 7 ']' appears as a right-arrow. The message flag can be any value and printable values (>=32) are displayed followed by a space.