1. 02 Nov, 2020 1 commit
    • Rob Swindell's avatar
      Support PETSCII terminals connected to non-PETSCII ports · 0eaa6bbf
      Rob Swindell authored
      The reported problem (by John "Jay" Crutti) was:
      If autodetection of the terminal is used from the defaults menu I get stuck on the prompt to hit my Delete key because on the BBS, it keeps showing me login statistics every time I hit my delete key. 
      
      Add/use new K_CTRLKEYS mode to stop inkey() from handling/eating control-keys (e.g. Ctrl-T) when asking user to hit backspace during defaults->terminal settings.
      
      Allow PETSCII_DELETE (Ctrl-T) as a valid option when asking for the backspace/delete key and set the PETSCII flag in the autoterm variable if hit by the user.
      0eaa6bbf
  2. 25 Oct, 2020 1 commit
    • Rob Swindell's avatar
      Support manual terminal columns setting per user · 8afac993
      Rob Swindell authored
      The default terminal columns (still 0/auto) can be overridden with the 'L' command from the user defaults menu. 
      
      Also increased maximum manual terminal rows setting from 99 to 999 - this involved moving the record in user.dat, though the old record value is auto-migrated.
      8afac993
  3. 30 Aug, 2020 1 commit
    • Rob Swindell's avatar
      Fix JS global object corruption when invoking JS global hotkey handlers · cb5188bd
      Rob Swindell authored
      As reported by Ragnarok and The Lizard Master, invoking a JS global
      hot-key handler (e.g. hitting Ctrl-U or Ctrl-P with the privatemsg
      or nodelist modules installed as handlers) would lead to the global
      object being cleared/corrupted so other scripts would then fail to
      run correctly (e.g. Error: can't open sbbsdefs.js: No such file or directory)
      
      This probably explains the JS_GC/JS_ENDREQUEST change needed when
      the hotkey-specific JS runtime/context/scope was introduced last year.
      Should revisit that too.
      cb5188bd
  4. 16 Aug, 2020 1 commit
  5. 04 Aug, 2020 2 commits
  6. 24 May, 2020 2 commits
  7. 12 May, 2020 1 commit
    • rswindell's avatar
      Use the SGR extended mouse coordinate reporting. · 36964b35
      rswindell authored
      Support a "mouse pass-through" console status flag to allow the pass-through of uncaptured mouse reports (e.g. for hot-spots) to other tasks/scripts. When there are no active hot-spots, this is the normal behavior.
      This commit leaves the legacy X10 mouse report handling/pass-through logic in. But I'll likely be removing that soon.
      36964b35
  8. 11 May, 2020 1 commit
  9. 10 May, 2020 1 commit
  10. 09 May, 2020 2 commits
    • rswindell's avatar
      By default, single-char hot-spots do not extend to the end of the row (use the... · ec56c63f
      rswindell authored
      By default, single-char hot-spots do not extend to the end of the row (use the "hungry" attribute to control behavior).
      ec56c63f
    • rswindell's avatar
      Both hungry/liberal hot-spots and strict hot-spots can be defined now, at the... · 6f16fafe
      rswindell authored
      Both hungry/liberal hot-spots and strict hot-spots can be defined now, at the same time. For Nelgin.
      Use ^A` to define a single-char strict hot-spot using Ctrl-A codes. Unfortunately, this usurps the "home" Ctrl-A code which nothing seems to use but has now been changed to ^A'.
      Use ` instead of ~ in mnemonics to define strict single-char hot-spots (also displays the cmd key in [] instead () on non ANSI/PETSCII terms).
      Use @` instead of @~ codes to define strict hot-keys.
      Use HOT:STRICT @-code to declare a strict hot-key color.
      Use HOT:HUNGRY @-code to toggle back to hungry color-defined hot-keys (the default).
      New optional boolean argument to JS console.add_hotkey(), hungry = true by default.
      6f16fafe
  11. 08 May, 2020 4 commits
    • rswindell's avatar
      2 more uses of the "HOT" @-code: · b468feda
      rswindell authored
      - "HOT" by itself will set the hot-spot attribute to the *current* attribute
        (just colorize the @-code in your editor the same as you do your cmd keys
        no need to memorize color-code mnemonics)
      - "HOT:OFF" will turn off the hot-spot attribute through the end of the text or   util re-enabled
      - Use a more greedy/liberal hot-spot matching algoirthm so that hot spots can overlap and the "best" one will be chosen. No way to opt-out of this algorithm (e.g. to use a conservative matching algo) currently.
      - Earlier parse of @~ codes to keep text prestine
      b468feda
    • rswindell's avatar
      More mouse hot spot stuff: · e821783a
      rswindell authored
      - User Defaults menu mousified
      - When all hot spots have scrolled off the screen, clear the hot spot list
      - Insert new hot spots in the front of the list so they will take precedence
        over any previously defined duplicate hot spots
      - Numeric hot spot commands end in a carriage-return
      - No auto-acceptence of numbers when there are keys in the keyboard buffer
      - Baja UNGETKEY function now inserts keys into the "front" of the keyboard
        buffer (next to be consumed)
      - Hot key @-code command text supports C-style escape sequences
        (allows encoding of ctrl chars, spaces, etc.)
      e821783a
    • rswindell's avatar
      Resolve GCC warning: format '%u' expects argument of type 'unsigned int', but... · aca3666f
      rswindell authored
      Resolve GCC warning: format '%u' expects argument of type 'unsigned int', but argument 4 has type 'long int'
      aca3666f
    • rswindell's avatar
      Add mouse hot spot support: · 87c9982c
      rswindell authored
      - hot spots are clickable screen areas (e.g. in menus and prompts) that   generate key-strokes
      - commands may be from 1 to 127 ASCII-characters in length
      - currently using the X10 mouse reporting mode, may change
      - all mnemonics strings (~Example) are automatically hot-spots
      - The new ~ @-code defines a hot spot
      - Any screen-clear operation clears all hot spots
      - sbbs now tracks the current screen (cursor position) row
      - eliminated the old "tos" (top-of-screen) boolean (row == 0 indicates "tos")
      - created an sbbs_t::ungetstr() method
      - keep track if in pause (hit a key) prompt, for special mouse behavior
      
      new JS console object:
      - row property
      - tos property is now read-only (and deprecated)
      - new methods:
        add_hotspot()
        clear_hotspots()
        scroll_hotspots()
      
      redrwstr() gets some UTF8 touch-ups as part of this commit. <shrug>
      87c9982c
  12. 04 May, 2020 2 commits
  13. 03 May, 2020 2 commits
  14. 24 Oct, 2019 1 commit
    • rswindell's avatar
      Invoking a JavaScripot global hot key event handler (e.g. nodelist.js) *while* · c912ee30
      rswindell authored
      running a JavaScript module would crash (e.g. segfault) sbbs:
      Create and use a separate JS runtime, context, and global object/scope for
      global hotkey events. This means that the hotkey won't benefit from any
      previously loaded/required scripts, possibly effecting the performance of the
      first invocation of the hotkey handler. Subsequent JS hotkey events will reuse
      the same runtime/context/global, so they'll execute fast(er).
      
      One questionalbe change to js_execfile():
      With the JS_GC (garbage collection) call *before* the JS_ENDREQUEST() call, the
      process would crash in libmozjs. Moving the JS_GC() call to *after* the
      JS_ENDREQUEST() resolved this issue and I'm not clear why. This 'js_cx'
      parameter here is not always sbbs_t::js_cx. When called to handle a JS hotkey
      event, it's sbbs_t::js_hotkey_cx, so it shouldn't interfere with the
      sbs_t::js_cx being used by the currently executing JS module (shell or door).
      <scratches chin>
      c912ee30
  15. 24 Jul, 2019 1 commit
  16. 09 Jul, 2019 1 commit
    • rswindell's avatar
      petdefs.h was (silently) moved from src/sbbs3 to src/encode. · eda5afb9
      rswindell authored
      Since not *everything* that #include's sbbs.h needs the PETSCII defs,
      remove it from sbbs.h and just #include petdefs.h where we need it.
      The catch-all header file is a problematic organizational design and we are
      moving away from that.
      eda5afb9
  17. 06 May, 2019 1 commit
  18. 28 Apr, 2019 2 commits
  19. 22 Oct, 2018 1 commit
    • 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:
          TelnetInterface=71.95.196.34,71.95.196.34:64,71.95.196.34:128
        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)
      31303187
  20. 29 Jul, 2018 1 commit
    • rswindell's avatar
      Change how the global hot key recursion control (hostkey_inside) works: · 32662bbc
      rswindell authored
      from a counter, which allowed 2 depths of nesting (any 2 hot key handlers)
      to a bit-mask which disallows *any* hot key handler to be re-entrant, but
      you can enter any of the *other* hot key handlers from any *other* hot
      key handler.
      
      Previously, for example, you could hit Ctrl-P to enter the private message
      prompt and then Ctrl-P again to re-enter the private message prompt
      (recusively) - confusingly, requiring 2 'Q'uits to get back to whatever
      you were doing before you hit the first Ctrl-P. Been like this forever.
      Now, while in the Ctrl-P (private message) handler, hitting Ctrl-P again
      does nothing. But you can hit Ctrl-T, or Ctrl-K or any other global hot
      key and it'll work but those in turn will also disallow recursion of their
      own handlers.
      32662bbc
  21. 11 Mar, 2018 1 commit
  22. 20 Feb, 2018 1 commit
  23. 30 Dec, 2017 1 commit
  24. 10 Dec, 2017 1 commit
  25. 08 Dec, 2016 1 commit
  26. 06 Oct, 2016 1 commit
  27. 25 Nov, 2015 1 commit
  28. 21 Feb, 2015 1 commit
  29. 04 Oct, 2014 1 commit
  30. 03 Oct, 2014 1 commit
  31. 19 Oct, 2011 1 commit