TALK - Network Conferencer ========================== J.G.Harston 70 Camm Street, Walkley, Sheffield S6 3TR jgh@mdfs.netTALK is a network conferencing program. It has been MCoded so it can bestarted either by CHAIN "Talk" or by *Talk. It can be run from the RISC OSdesktop by changing its filetype to BASIC with *SetType Talk BASIC. Irecommend that a main copy is put in the main Library for 8-bit machinesand in the RISC OS library ArthurLib put an Obey file with the name 'Talk'with the single line 'BASIC net::DiskName.$.Library.Talk', replacingDiskName 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 tobe logged onto a fileserver to use TALK.In pre-version 5.20 TALKs, you are then asked for the number of otherstations you wish to talk to, and then the station numbers of the otherstations. In TALKs version 5.20 onwards, TALK sends broadcasts to otherstations to find who else is using TALK.Once running, anything you type in the bottom window will be sent to allthe other stations and will appear in their top window, where they will beprefixed with the name of the person sending them. If you start a messagewith :n or :name, then that message will be sent to station n or to username only, eg: :20 Hello thereor :Mary Hello therewill 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 thefirst 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 thedefault list using *A, and they can be removed with *R.There are some single-character 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 listThe will accept full network and station specifications, eg 1.20 forstation 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 onRISC OS as they use immediate POKE operations to memory at &7200. Theprogram unprotects the station to allow the POKEs to function. They willnot communicate over bridges.TALK versions 5.20 onwards can all talk to each other. They will run onthe Archimedes and on protected stations as they use transmission blocks. They will communicate over bridges. I may try to get them to talk topre-5.20 versions.The Broadcast Transmit on Ethernet is not as reliable as on the Econet. When running on RISC OS/Archimedes, some machines may not find the othersdue to Ethernet having no collision detect. Entering *B to rebroadcast theenquiry packet will help. Also, as long as other TALKers know about you,once a message arrives from them, they will get added to your user list.Pressing Ctrl-T will turn debug test messages on, showing everythingtransmitted 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 and RISC OS. *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.v5.24 12-May-2003 Prints source message in dialogue window.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 aTalkFind transmission is broadcast every second informing other partiesthat this TALK client is present. This broadcast is done initially 30times. Another set of broadcasts can be sent at any time by using the *Bcommand.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 ofTALK where the TALK port is the same as the ServerFind port, a singlereceive block is opened.At any time during the session a reception can be processed. TALK respondsto two types of reception, control data and message data, as determined bythe flag byte.Message data has flag byte <>&80. On reception, it is displayed in theincoming message window.Control data has flag byte =&80. There are three types of control messagethat TALK responds to: ServerFind, TalkFind and TalkReply. They aredetermined by the transmitted data which should an eight byte string.ServerFind Control transmission-------------------------------Flag: &80Port: ServerFind (&B0) or TalkPort (&B0 in current versions)Data: " " (eight spaces)On reception, a ServerReply message is sent to the station that requestedthe information.ServerReply Control transmission--------------------------------Flag: &80Port: 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 nameTalkFind Control transmission-----------------------------Flag: &80Port: ServerFind (&B0)Data: "TALK "On reception, a TalkReply message is sent to the station that requestedthe information. Once that station gets the TalkReply it will add thisclient to it's user table and start to send communication messages to thisclient. Once this happens, this client will add that client to thisclient's user table.TalkReply Control transmission------------------------------Flag: &80Port: ServerFind (&B0)Data: "TALK_RPL" - TalkPort is &B0Data: "TALKRPL",&nn - TalkPort is &nnOn reception, this client's user table is updated to ensure that thestation that transmitted is in the user list. This TALK client does notknow the name of the other station until it sends a communication messagewith a name in it. If the data is "TALK_RPL", then the TalkPort forcommunicating 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 isanything else, it should be ignored. Current versions of TALK do not sendTALKRPL,&nn transmissions and TalkPort is &B0.Communication transmission--------------------------Flag: <>&80Port: 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: CRnn+1: Message string, CR terminatedOn reception, the message is displayed in the incoming window as&1F>, eg:Mike: Hello thereTALK sends a ':' message flag on public messages and a ']' message flag ona private message sent to a single specified client. In MODE 7 ']' appearsas a right-arrow. The message flag can be any value and printable values(>=32) are displayed followed by a space.