

                            SysOpChat v1.63 beta 22

About:
     This is my answer to the doobs, at long last! This door should be YOUR
     first choice for a SysOp chat door.

Important notes:
     1. This program will NOT work under any version of RiscOS 
        previous to version 3.10...
     2. SysOpChat may (read will) look odd on a RiscPC. As far as I know, it 
        isn't possible to force the system bitmap font when leaving window 
        redraws to the Wimp... Try setting up font Corpus.Bold at 12point. 
     3. Now supports interactive help. :-) 
     4. ...and internationalisation!

Installing:
     Hook up as a normal door... You must have done this before!

     You must configure the thing. So load it up, click MENU on the icon, 
     select CONFIGURE... Toggle set etc and then save.

     To assist configuration, run for the first time whilst holding down 
     either ALT key. This will disable door actions, so there is no clash with 
     certain BBS servers...

ForceChats:
     If forcing chats is enabled, loading up !SysOpChat and clicking on the 
     icon will open a window showing ports 0 to 8 and 9 to 12 (ArcBBS 1.63) or 
     32 to 35 (ArcBBS 1.64). Ports that are on-line show up as green otherwise 
     red. An on-line port will detail the user name and where they are. This 
     is auto-updating, approx every 2/3s of a second...

     Clicking menu will allow you to force the user into a chat, or to refresh 
     the information shown.

     Note when you force a user into a chat, it starts at the beginning, as if 
     the user ran the program. This is necessary to allow the program to keep 
     track of... 219 integers, 39  reals, 91 strings, 1 integer array, 2 string
     arrays, 175 procedures and 26 functions... Yikes!


Configure:
     The program timeout is 30 seconds. Then you open the configure window, 
     the timeout changes to 1 hour (to allow you to configure without it 
     quitting half way through!).

     Door number:
          The door number the program will respond to.

     Drop out user when only:
          Return the user to the server when # minutes remaining. 

     The name of your BBS:
          Not exactly sure what this does :-)... Put the name of your BBS
          in here.

     Your excuse:
          This will be your default excuse. Clicking MENU on this icon will 
          allow you to select up to 5 pre-defined excuses - set up in !Run.

     Allow Ctrl+G to beep
          If the user sends a CHR$7 (Ctrl+G), your terminal will beep if this 
          flag is set.

     Automatically Spool chats
          Will neatly spool both sides of the chat, line by line. You will 
          need to view the chat in a >80 char mode, or set !Edit's wrapping 
          size to, say, 90. The reason for this is each line of chat (when can 
          be up to about 77 characters) is prefixed "SysOp:" or "User :" so 
          you know who said what.

     Record attempted chats
          Will, if set, create a file "<SysOpChat$Dir>.FailedChat" and write
          log entries to it.
          There is a new format that tells you who wanted a chat, when and 
          what their reason was. Reasons between {curly} brackets is a system 
          comment, like "{No reason requested}"...

     Allow users to be forced into a SysOp chat
          Select whether or not the 'force chat' feature will be active.

     Automatic 'carrot' positioning when starting a chat
          If this is selected, the carrot ( caret :-) ) will be moved into the 
          chat window automatically when a chat starts.

     ArmBBS compatible mode
          Disables some stuff, tweaks other stuff. This is to get SysOpChat 
          ArmBBS compatible. It has been tested on ArmBBS 0.64.

     Nice templates
          Will load "<SysOpChat$Dir>.NiceTempls" instead of the regular set.
          For you to play with...

     Allow user to quit chat without your confirmation
          Normally, if the user tries to quit the chat - you'll be asked to 
          allow/deny it.

     Show user help if press Ctrl+\
          By default, if the user presses Ctrl+\ they'll be shown a help 
          screen.

     Warn if ErrorLog is present or created
          Will colour the iconbar icon in shades of red/orange if ErrorLog is
          found within SysOpChat$Dir...



     Send ErrorLog to !Edit
          Will upload ErrorLog into !Edit if this is set AND 'warn if 
          errorlog...' is set also.

     'Bleep!' when paging SysOp
          Added especially for Steve Pursey... This will toggle whether or not 
          this program actually makes a beep when requesting a chat.

     Your name:
          Enter the name to be shown in the chat window as you. This will also 
          be used in the chat request:
               Calling <sysopname> for a chat...
          Much friendlier... :-)
     
     Your user number:
          Enter the number to be shown in the chat window as you.

     Only allow chats between:
          Between : Sets time when chat will become active.
          And     : Sets time when chat will become inactive.
          A bit of maths (!) keeps this correct.

     Ask user for a chat 'reason'.
          Yup... Even this can be configured. When on, it'll ask the user to 
          enter chat reason on entering door.
          Note that "SysOp already chatting" and "You can only chat 
          between..." are higher priority. The user will ONLY get this far if 
          they've a chance of actually talking to you.

     Standard ASCII...:
          If this is selected, the user screen will be redrawn using 
          characters less than 127 (ie: 7-bit ASCII). If this is off, the 
          user's screen will be drawn in IBM-ANSI outline characters.
          This is automatically enabled for VT100 users, as VT100 doesn't have 
          the high-bit ASCII characters used, and it'd look weird.

     Trap F12 (ShellCLI) and open a TaskWindow:
          Erm... Wonder what this does. :-)  It'll only work, by the way, if 
          SysOpChat has input focus.
          This uses a RiscOS3 specific command ('SYS "Wimp_StartTask"'), but 
          as it won't work with RiscOS2 anyway......

     Freeze users time whilst in chat:
          Temporarily disabled.

     Use cursor keys to move around text:
          This is disabled as I've not written this in yet.

     AutoExcuse mode:
          When this is selected, the user will be automatically sent the 
          configured excuse as if you'd typed it yourself. This is useful if 
          you pop out for a pizza, you can set the excuse: "Popped out for a 
          pizza, back at 6pm"...

     SAVE
          Saves the data.

     LOCK OUT CHANGES
          Will lock out the CONFIGURE option in future. Undo this by deleting 
          the Configure file. It's a basic safety measure...

In use:

     When a user calls the door, the screen will clear. A start-up screen will 
     be drawn.

     If 'reason' requesting is on, the user will be asked to enter a reason 
     for the chat. Pressing RETURN (ie: no reason) is acceptable.

     Then the SysOpChat will bleep ten times, once every second.

     The user can press SPACE or RETURN to abort the chat request.

     You can click on EXCUSE to send the excuse, INGORE to stop the bleeping 
     and let the user think that there's nobody home, and ACCEPT to initiate a 
     chat.

     Clicking SELECT over the excuse writable icon will open up a window with
     up to five excuses preset (in !Run). Clicking on one of these will send 
     that excuse. You can also write your own custom defined excuse in the 
     icon - if you can type that fast! :-)

     Clicking MENU will enable you to call up a window of user stats.
     
     The bleep is now a nice (weird) three-tone twang like a starting a bunch
     of BBC Bs. This is done on purpose. The single 'beep' every while made 
     some people think NoError module had gone wild... :-)

     The bleep takes getting used to... hehe... and it sounds best if your 
     default sound voice is StringLib_Hard, it sounds horrible with 
     WaveSynth_Beep.
     (use '*Configure SoundDefault 1 5 7' or similar)

     When you initiate a chat, the screen will be updated to look like a chat.
     You both type. Pretty simple really.

     User keypresses (depending on configuration):

          Normal    - entered into chat window.
          Ctrl+C    - disabled
          Ctrl+D    - quit
          Ctrl+K    - quit
          Ctrl+X    - quit
          Ctrl+G    - beep
          Del, BS   - delete
          Ctrl+L    - clear user's half
          CR, LF    - CR+LF

          Ctrl+R    - redraw screens
          Ctrl+U    - delete current line
          ESC (&27) - Bleep. You aren't typing ANSI codes in!
          Ctrl+\    - show help

     SysOp keypresses (depending on configuration)
          Normal    - entered into chat window.
          Ctrl+C    - quit immediately - not disabled
          Ctrl+D    - quit immediately
          Ctrl+K    - quit immediately
          Ctrl+X    - quit immediately
          Ctrl+G    - beep at the user's terminal
          Del, BS   - delete
          Ctrl+L    - clear sysop's half
          CR, LF    - CR+LF
          Ctrl+R    - redraw screens
          Ctrl+U    - delete current line
          ESC (&27) - Bleep. You aren't typing ANSI codes in!
          F1        - Sends macro string 1.
          F2        - Sends macro string 2.
          F3        - Sends macro string 3.
          F4        - Sends macro string 4.
          F5        - Sends macro string 5.
          F6        - Sends macro string 6.
          F7        - Sends macro string 7.
          F8        - Sends macro string 8.
          F9        - Sends macro string 9.
          F10       - Sends macro string 10.
          F12       - Will scroll ShellCLI or open a TaskWindow.
          Print     - DumpChat.
          Shift+Prnt- Copy full user details to !Edit.
          ^+Sh+Print- Debugging info.

     Right. Both scroll up when the area is filled. Both word-wrap and so on.

     There is a neat little RTC (Real Time Clock) in the top-right of the 
     screen. It appears now on both the user's screen and the SysOp's screen, 
     and it is updated every ten seconds or so.


Macros:
     Macros are defined in !Run, as "SysOpChat$Macro#" where # corresponds to 
     a function key from 1 to 11. By default the macros are:
      F1     - Hello there! How can I help you?
      F2     - Eeek!
      F3     - :-)
      F4-F11 - are undefined

     You can alter these as you wish. Note that NO CR/LF is created after the 
     macros. You must press RETURN yourself.
     The macros are evaluated upon pressing the function key, so you can load 
     up a TaskWindow and define all the keys as you wish whilst chatting to 
     yourself. 

If you're already in a chat:
     The user will be told you're already chatting. The program will bleep 
     once to let you know somebody wants to chat...

Excuses:
     Set up in !Run, as "SysOpChat$Excuse#" where # is from 1 to 5. These 
     macros are evaluated at startup...
     The maximum length is 59 characters, overlength excuses are trimmed at
     59 characters.

Errors:
     Error handling is now automatic. You'll hear a low-pitched twang upon an 
     error. If a user is in the door, they'll be thrown back to the BBS. Look 
     in "<SysOpChat$Dir>.ErrorLog" to see what happened. Note that no error 
     notifier is opened.

Spooling:
     Spooling can now be performed two ways:

     Method 1:
          Drag the file to SysOpChat (or its window). This will spool it out 
          to the user as if you had typed it yourself (gosh! haven't my typing 
          courses improved me?)...
          Only use this for REALLY SHORT files.

     Method 2:
          Drag the file to SysOpChat (or it's window) whilst holding down 
          either ALT key. This will clear the users screen and dump out the 
          text file as if it was being TYPEd to their terminal.

     To abort a spool, click MENU on the SysOpChat chat window, and select the 
     "Kill Spool" option. This may take two clicks to work, but it is better 
     than falling asleep.
     File types supported:
          ANSI (&120)
               This will take the ANSI file and spool it out after converting 
               all &1B (Esc's) to "[Esc]". Therefore it is possible for your 
               user to put the file back together with a little search and 
               replace. I may add a feature where holding down Ctrl+Alt will 
               dump the ANSI file direct, like another ANSI screen.
          1WPDoc (&AF8)
               1stWord+ documents will undergo basic translation, the control 
               codes, sprites, footnotes etc will be ignored, and the text 
               will be dumped outas if it was a regular text file.
               If you are doing a full-screen dump, SysOpChat will attempt to 
               retain any Bold/Underline/Italic/Light effects in the text. 
               Some terminals (ArcTerm/ArcBBS local logon and many PC comms 
               programs) don't support all of these commands.
          MakeFile / RawData / Data (&FE1 / &FF1 / &FFD)
               The file will get dumped out. Translation is applied to 
               characters less than CHR$32 (Space). These get converted into 
               Editian strings (like "[0f][01][05][1d]" etc...).


          DeskTop / Obey / TextFile (&FEA / &FEB / &FFF)
               This gets printed, line by line, with not-a-lot of translation. 
               This is the fastest way to chuck data to the user, but it can 
               go horribly wrong if it's an app SetType'd as Text. :-)

          All other types (unrecognised!) will be dumped out with all 
          characters <32 and >127 stripped out.

     File types to be added (conditional):

          RTF         - does anybody know a reasonable subset of RTF commands?
          Ovation     - will only do text, no fancy stuff.
          Template    - will make a textual description.
          BASIC       - will attempt to parse into longhand correctly.

     File types I may add:

          BudgieSoft  - very contrived, the current file (type &16F) is not 
                        used in any release programs, and internally it has a 
                        header followed by the data. Along the lines of the 
                        &16F00 Wimp_Message, the BudgieSoft file can contain 
                        allsorts...
          Alarms      - converted to textual form?
          DOS         - to be treated as RawData.
          TrueANSI    - anybody know the specifications?
          BBCfont     - To be converted to VDU sequences.
          Impression  - Possibly reading 'style' files, simple translation.
          AcornDTP    - Like Ovation, simple translation.
          TurboSnail  - Old BudgieSoft database format, compatible with the PD
                        ProBase system...
          Wordz       - Maybe... Simple though...
          EdWord      - and other BBC micro formats where all the text is 
                        reversed.

DumpChat:
     This little facility will take a 'snapshot' of the current chat status 
     and write it to a sequentially numbered file in <SysOpChat$Dir>. The 
     files are automatically numbered with the next available number, and the 
     process is invisible to the user. For once, the debugging functions are 
     on the SysOp's side! :-)


     The 'DumpChat#' file is laid out like:

==============================================================================
  Spool of SysOpChat - Mon,30 Jan 1995.20:11:36 [created by SysOpChat v1.61]
==============================================================================
In this here demo of the dumpchat facility, the resultant ASCII file is 
designed to look pretty-much like the actual chat.

The full time is recorded though....




------------------------------------------------------------------------------
Richard Murray  (user #1)
==============================================================================

Richard Murray has entered CLI...
Richard Murray back from CLI...

This a demonstration of the dumpchat facility... This section is where the 
SysOp writes.


------------------------------------------------------------------------------
Richard Murray  (user #1)
==============================================================================


     The source is available on request - but don't even think of 
     understanding much of it... I don't use REMs very often, and when I do it 
     is usually song lyrics. :-)

     Now intercepts &16F00 messages and plonks them in a nice overlaid 
     window!

     Note, if you mess around with this program - it will reward you with 
     instant death (the program will die, not you!).


Internationalisation:
     SysOpChat has now been 'internationalised' for the following countries:
          France
          Germany
          Spain
          Sweden
          UK (other)
     
     Currently the messages and templates are all in English (except about 1/4 
     of the Spanish messages).

     You can alter to messages if you want, but bear in mind a lot of stuff is
     space-critical.

     Messages.*
          These are the 'prompts' and stuff given by SysOpChat to the person 
          using the door. Not everything is in message form, but most things 
          are. If you look in the file, it should become a little easier to
          understand.
          Note that some prompts have trailing/leading spaces. This is 
          intentional.





     Templates.*
          Any SysOp related internationalisation will rely on different sets 
          of templates. This is better than patching in the correct text as 
          Germans like to string their words together, whilst the Spanish and
          French can be quite verbose... This way you can tailor the templates 
          to each language.
          "NiceTempls" are a generic file, and loaded if you have the 'nice'
          templates option set, regardless of system language.

Customisation:
     SysOpChat is now much more customisable.

     First, please note that the text plotting positions CANNOT be altered, 
     but you CAN alter the base screens.

     START UP SCREEN:
          This is held in '<SysOpChat$Dir>.Displays". There are two versions, 
          "Title_ANSI" and "Title_ASC". _ANSI is for ANSI users, and can 
          contain all the usual stuff. _ASC is for standardASCII/VT100 users, 
          and should NOT contain any high-bit-set characters or colour codes. 
          Cursor positioning codes and "ESC[0m"/"ESC[1m" is okay.

          Edit this as you wish, but remember the standard prompts are 
          overlaid. What you don't see in this file that is on the real 
          screen, is what you cannot alter.

          I feel the demise of that great big 'BudgieSoft' logo is approaching 
          fast. :-(

     CHAT SCREEN:
          This is just like the Start Up Screen, except the file is called 
          "Chat_ASC" or "CHAT_ANSI".

          A point to note here, the RTC outline is shown, but it is 
          overwritten when the RTC is plotted.

          You can do away with the border if you with, by making the border 
          use " " characters.

     MISCELLANY:
          This enables you to tailor even more stuff...

          BorderChar_*
               This defines the replot border character for ANSI and ASCII 
               modes. To do away with the border, use " " not "".

          Colours are given as straight ANSI colours... There is a colour 
          reference in the file.

          BorderColour
               This defines the colour the border is replotted at. This should 
               match the colour you set the Chat_* template to use.


          SysOpTextColour
               This defines the colour that the SysOp's text will appear in.

          UserTextColour
               This defines the colour that the SysOp's text will appear in.

          16F00MessageBorderColour
               This defines the sub-border colour for the message box that 
               pops up for a &16F00 Wimp_Message received (BudgieSoft 
               protocol).

          BleepColour
               Oh no! You can alter the colour of the "Bleep!" message! <sob>

          NameLineColour
               This defines the colour that the "Username  (user #123)" bits
               will be.

          TitleColour
               This defines the colour of the "BudgieSoft split-screen...." 
               bit.

          TimerColour
               This defines the colour of the normal "123 mins remaining" 
               line. When you've only 2 or 1 minute left, the colours are
               hard-wired.

          ClockColour
               This defines the colour of the RTC.

          StatusLineColour
               This defines the colour of that little bit saying "^X to quit" 
               etc...

          UWP/SWP:
               These are the wrapping positions for the user and the SysOp, 
               and they should be okay and not need changing. The numbers ARE
               intended to be different.
          
     Other customisations:
          Look in the messages file.

