Skip to content
  • rswindell's avatar
    The big PETSCII commit: · 31303187
    rswindell authored
    So Omegix recently asked in the Synchronet Discussion group whether or not
    a PETSCII (Commodore) terminal could be used to access his Synchronet BBS.
    Now, the answer is "Yes". :-)
    The major issues addressed:
    - detecting a PETSCII terminal, solved by assigning specific (configurable):
      TCP ports to be used for incoming PETSCII connections, by default:
      port 64 is for 40-column PETSCII and port 128 is for 80-column PETSCII,
      but if the terminal sends a Telnet Window Size reply (e.g. SyncTERM), then
      either size terminal should fine on either port.
      The port numbers are configurable in the [BBS] section of your sbbs.ini
      file using the new keys: PET40Port (default value: 64) and PET80Port
      (default value: 128). Having these keys set doesn't make make the terminal
      server listen on that additional port - you'll need to add more
      IP:port combinations to one of Interfaces values, example:
      And you don't have to use Telnet for the PETSCII connections - you could use
      RLogin or SSH instead (or in addition).
    - support for terminal widths < 80 columns:
      This was achieved through a combination of text.dat changes (numerous),
      new Ctrl-A and @-codes and new optional terminal-width-specific menu files
      (e.g. text/menu/main.40col.asc)
      A side effect of these changes is actually better support for terminals
      *wider* than 80 columns as well!
    - support for terminals that don't expand tabs to spaces (e.g. PETSCII):
      The terminal server now handles tab expansion with a run-time settable
      tab-size (default size: 8)
    - conditional access based on PETSCII (or small) terminal use (or not):
      + New PETSCII ARS keyword (boolean)
      + New COLS and ROWS ARS keywords (for terminal width and height requirements)
      + New TERM (string) ARS keyword
    New @-codes:
      - WORDWRAP, when placed at the top of a file, enables auto-wordwrap for
                  lines longer than the terminal width
      - CENTER, the text following before an end of line will be displayed centered
                on the terminal (whatever the width, in columns)
      - CLEAR, like CLS, except it ignores (doesn't display) a CRLF that follows
      - COLS, current number of terminal columns (width)
      - ROWS, current number of terminal rows (height)
      - TERM, the auto-detected or reported terminal type (e.g. ANSI, TTY, etc.)
      - SYSONLY, toggles "echo" (display) off/back-on for non-sysops
                similar to the Ctrl-A( and ) codes, but more convenient to use
                (and PabloDraw won't strip the @-code from the file like it does
                 with Ctrl-A codes it doesn't support)
    New Ctrl-A codes:
      - \ conditional new-line/continuation when the terminal width is < 80 cols
          prints the new text.dat string LongLineContinuationPrefix
    yesno() will now return true if passed a blank string.
    noyes() will now return false if passed a blank string.
    getstr()'s input length limiting based on terminal width is more broadly
               applied now (not just when using the K_LINE mode flag).
    New JS bbs object method: menu_exists(<base_filename>) returns Boolean
    New JS console object property: tabstop (Number)
    New JS console object methods: getbyte() and putbyte() to recv/send raw byte
        value with (very little) interpretation/intervention by the terminal server
    New JS console object method: creturn() - performs a carriage return
        (or equivalent)
    New JS (and C) printfile() mode flag: P_TRUNCATE, causes long lines to be
        truncated, rather than displaying causing a line-wrap.
    New text.dat strings:
      - NoAccessTerminal (for ARS check failures)
      - LongLineContinuationPrefix (for breaking long lines for 40col terminals)
      - Scanning (replaces a previously hard-coded "Scanning" string)
      - Done (replaces a previusly hard-coded "Done")
      - Scanned  (when finished scannning, clears the progress bar)