Synchronet now requires the libarchive development package (e.g. libarchive-dev on Debian-based Linux distros, libarchive.org for more info) to build successfully.

  1. 25 Apr, 2021 1 commit
  2. 24 Apr, 2021 1 commit
    • Rob Swindell's avatar
      DIZ enhancements: Read/use SAUCE data, support ANSI, increase max 1->4K · 2a8e1c11
      Rob Swindell authored
      Inspired by Blocktronics (and other ANSI art group) packs' FILE_ID.DIZ/ANS files:
      * Support (and prioritize) FILE_ID.ANS
      * Convert ANSI color/attribute sequences in DIZ files to Ctrl-A equivalent (uses SAUCE width and ICE color, if specified)
      * Don't treat DIZ as a series of lines, they're not always nowadays.
      * New putmsg() mode: P_INDENT to print files indented by current column
      * Display full (up to 64-char) filenames in lists when using 132+ column terminal.
      * Use the Author, Group, and Title fields from the SAUCE if present/non-blank
      * 2 new text.dat strings: 301 (FiAuthor) and 302 (FiGroup)
      * Also fix bug with repeated Cost header field on bulk-uploaded files.
      
      I know this'll break the *nix build (sauce.c dependency), but I'll fix that next.
      2a8e1c11
  3. 08 Nov, 2020 2 commits
  4. 06 Nov, 2020 1 commit
    • Rob Swindell's avatar
      Replace ctype.h function calls with new MSVC-safe XPDEV macros · 8a7b7308
      Rob Swindell authored
      I'm fed-up with MSVC assertions in ctype functions (e.g. isdigit, isprint, isspace, etc.) when called with out-of-range (e.g. negative) values.
      
      This problem only affects MSVC debug builds, but if you run them (like I do), these things are like little time bombs that can drive you crazy (knocking your board out of service).
      
      The new macros names are bit more descriptive as well.
      8a7b7308
  5. 02 Nov, 2020 2 commits
    • Rob Swindell's avatar
      Allow punctuation characters on either side of the markup tags · 93dc3f12
      Rob Swindell authored
      So you can do stuff (*like this*).
      
      Also, we don't need to heavily scrutinize the closing tag when we come upon it because we already determined it was valid before we accepted the opening tag/character.
      93dc3f12
    • Rob Swindell's avatar
      Support markup tags (optionally) when displaying posts · adb896c1
      Rob Swindell authored
      Defaults to "Off" ("No") and can be set per-sub-board to either:
      - "Yes" parse/apply markup style to displayed message text while still displaying the markup tags
      - "Hide" parse/apply markup style to displayed message text and hide (don't display) the markup tags
      - "No", treat marked-up messages the same as any other message text, same as before.
      
      The supported Markup tags at this time are:
      #bold text#
      /Italicized text/
      _underlined text_
      #inverse text#
      
      Now, ANSI-BBS terminals (and Synchronet) do not support the concept of italic or underlined text (at least, not yet) - so those styles become combinations of the blink and high-intensity attributes which can be used to choose alternate fonts and this works well.
      
      These 4 styles were chosen to be compatible with GoldEd's "Style Codes", though GoldEd is actually very configurable in its support of these tags/codes and its possible we're not 100% compatible. For example, GoldEd (and SemPoint) both support the combining of tags/codes to created combinations of styled text - Synchronet does not (this is consistent with Mozilla/Thunderbird's "Structured Text").
      
      Multiple words can be styled with a single set of tags, but the first and last word must be delimited by white-space (this is not consistent with Markdown).
      
      Multiple lines can be styled with a single set of tags, but not multiple paragraphs (this is consistent with Markdown).
      
      The rules I chose were to minimize false positives but maintain some interoperability with GoldEd and Thunderbird with a familiar/common tag syntax.
      adb896c1
  6. 09 Oct, 2020 2 commits
    • Rob Swindell's avatar
      Don't pass-through ANSI Device Attributes (DA) requests · 9919c23e
      Rob Swindell authored
      putmsg(), used to display messages and display/menu files, will no longer pass-through the ANSI sequence ESC[c (found in some corrupted ANSI posts to fsxNet->FSX_BOT echo) to the client terminal since this will stimulate a (unwanted) response from the client.
      
      I do wonder if the outchar_esc value check should be == here instead of >=, but I'm not familiar with the string and SOS states. I wonder if any display files sent from the BBS would ever include those sequences.
      9919c23e
    • Rob Swindell's avatar
      Use an enum for ANSI output state · f26b296b
      Rob Swindell authored
      No functional change with regard to the ANSI output state, just making the code easier to read.
      
      Removed the conversion of `[ and \xFA[ to \x1b[ in putmsg(). This unexplained output translation has been supported since at least v2.xx and I have no recollection of exactly why it was added. If I recall correctly, some BBS software at some point in time sent ANSI-encoded messages into message networks by translating the ESC (\x1b) character in the ANSI sequences to either ` or \xFA in the process. This "feature" seems like it would still work, but it's completely undocumented and I have no idea why it was added (and seriously doubt anyone relies on this behavior), so I'm removing it. If anyone misses this feature, I'll happily add it back, but I'm skeptical that'll happen.
      f26b296b
  7. 08 Sep, 2020 1 commit
  8. 29 Aug, 2020 1 commit
    • Rob Swindell's avatar
      When printing a file one line at a time, don't use putmsg() · 1510b3e2
      Rob Swindell authored
      Fix problem introduced in
      b1ecd9b6 (August 8, 2019)
      
      When sbbs_t::printfile() is used to display a file that is < 2MB in size
      and the P_OPENCLOSE mode flag was not specified, the file is read and
      displayed one line at a time. This allows for the quick display of very
      large files. This was accomlished by calling sbbs_t::putmsg() for each
      line. Unfortunately, putmsg() would save and restore console mode flags
      like the auto-screen pause control flags stored in sbbs_t::sys_misc
      so this would render some features like the POFF @-code, inoperable.
      This problem was reported by WitNik with files displayed from
      Bulleeye! Bulletins.
      
      Other issues were discovered with the WORDWRAP/WRAPOFF @-codes.
      
      Fixed with the addition of sbbs_t::putmsgfrag() which is used by
      printfile() to display a message fragment (one line) without
      saving/restoring console state flags.
      1510b3e2
  9. 16 Aug, 2020 1 commit
  10. 11 May, 2020 1 commit
  11. 09 May, 2020 4 commits
    • rswindell's avatar
      If ^A~or ^A` is followed by a ctrl charcter, don't treat as a hot-spot. This... · 62880f22
      rswindell authored
      If ^A~or ^A` is followed by a ctrl charcter, don't treat as a hot-spot. This helps to insure that if there are any .asc/.msg files "in the wild" that have a sequence of ^A`^AL (home-cursor, clear-screen), they'll still render as before
      the introduction fo the strict hot-spot ^A` sequence.
      62880f22
    • 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
    • rswindell's avatar
      One more method of creating a (single-character) mouse hot-spot since @-codes... · 2c443f78
      rswindell authored
      One more method of creating a (single-character) mouse hot-spot since @-codes are not universally supported everywhere or always convenient:
        Ctrl-A~
      The character immediately following a ^A~ will be added as a single-char mouse hot-spot.
      2c443f78
    • rswindell's avatar
      non-PETSCII (.seq) display files are assumed to retain their attributes... · fa80ead9
      rswindell authored
      non-PETSCII (.seq) display files are assumed to retain their attributes between lines, but PETSCII terminals reset the inverse attribute upon CR's, so restore the attribute if it changes unexpectedly. We could make this check only when outputting CR's (rather than all characters), if it's a problem later.
      fa80ead9
  12. 08 May, 2020 2 commits
    • rswindell's avatar
      A more convenient method of creating mouse hot spots in a display (e.g. menu)... · 192dea0e
      rswindell authored
      A more convenient method of creating mouse hot spots in a display (e.g. menu) file: New "HOT:<attr>" @-code allows you to define a specific combination of attributes (colors) that will be used to exclusively create clickable command keys or words in a file. Every set of charcters in the display file that uses that specific combination of attributes will become an automatic mouse hot spot. The <attr> is specified using a set of attribte mnemonics (e.g. "YH" for high-intensity yellow), the same set used in attr.cfg and other places in sbbs.
      
      This allows more WYSIWYG style menu editing (e.g. use PabloDraw), you just need to be careful with your choice of colors. You cannot send white-space or control characters with this method and the clickable text is the exact text that will be put in the keyboard buffer.
      192dea0e
    • 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
  13. 03 May, 2020 1 commit
  14. 30 Apr, 2020 1 commit
    • rswindell's avatar
      Support JavaScript property name expansion using JS:<name> @-code where name is · c9c42c87
      rswindell authored
      the name of a scalar property in either the current scope (by default) or the
      scope of the object passed to:
      - bbs.menu()
      - console.putmsg()
      - console.printfile()
      - console.printtail()
      
      The 'name' cannot be an array element (e.g. myprop[0]) or a nested object
      reference (e.g. myobj.myprop): just a single property name that can be
      converted to a string.
      
      Also, bbs.menu() now accepts an optional print-mode argument (default: P_NONE).
      c9c42c87
  15. 06 Apr, 2020 1 commit
    • rswindell's avatar
      The hack for Nelgin created back in rev 1.35 (Aug-15-2018) was: · 3e9a11fb
      rswindell authored
      - incomplete, it didn't account for the CLEAR @-code which is only handled here
      - caused side-effects in that any Baja PRINT function call with a single line
        that contained any  ^A or @-codes would reset the console abort indication
        flag (SS_ABORT).
        Observed: hitting Ctrl-C at while executing the yesnobar.bin or noyesbar.bin
        would leave "Yes Yes No" on the console, for example.
        Solution: use the tos (top-of-screen) state before/after the call to ctrl_a()
        or show_atcode() to determine if the reset-abort hack should be applied.
      3e9a11fb
  16. 05 Aug, 2019 2 commits
  17. 04 Aug, 2019 1 commit
    • rswindell's avatar
      More UTF-8 fun: · 3313a87e
      rswindell authored
      - bstrlen() moved to sbbs_t, accepts an option pmode argument so it can account
        for UTF-8 encoded strings correctly
      - JS console.strlen() now accepts an optional pmode argument (e.g. P_UTF8)
      - Renamed sbbs_t::utf8_to_cp437 to sbbs_t::print_utf8_as_cp437
      - Create/use msghdr_hfield() to perform UTF-8->CP437 conversions as needed for
        printing/copying UTF-8 encoded message header fields.
      - Defined XTRN_UTF8 misc setting flag. If a message editor does *not* have this
        flag, it is assumed to *not* support UTF-8. Will likely use this for UTF-8
        doors as some point too (none known to exist, yet).
      3313a87e
  18. 29 Jul, 2019 1 commit
  19. 26 Jul, 2019 2 commits
  20. 24 Jul, 2019 1 commit
    • rswindell's avatar
      More UTF-8 goodness: · 52d5659f
      rswindell authored
      - Export all FIDOCTRL (other FTN kludge lines) to the QWK HEADERS.DAT file.
        These should already be imported if they exist, but were never added during
        export, so untested/new behavior. The control paragraph (kludge line) of
        specific interest here is the "CHRS" (charset) kludge we need for UTF-8.
      
      - Don't use the QWK "newline" character (0xE3) when the message is UTF-8.
        Use bare-LF's instead. This is pretty untested at this point as I will need
        another QWKnet board to post or receive UTF-8 encoded messages to test,
        getting the code into CVS is the first step. At least for now, there's no
        opt-in/out for this behavior. If your BBS has UTF-8 encoded messages, some
        QWK nodes or offline readers may have trouble with packets which include
        those messages. Or they may work fine (but likely display garbage CP437
        chars in-place of the proper Unicode codepoint glyph).
      
      - The beginning of UTF-8 input support in getstr() - which needs more work,
        particularly around character and word deletion and insertion.
      - The internal message editor now supports UTF-8 messages and kind of somewhat
        supports inputting UTF-8 characters in message text.
      
      New put/print text flag: P_AUTO_UTF8 which can auto-detect UTF8 strings and
      do the "right thing" for the user's terminal. New associated sbbs_t method:
      auto_utf8() which automatically sets P_UTF8 for any stirng that begins with
      a UTF-8 BOM (ZWNBSP). Else, if the P_AUTO_UTF8 mode flag is set, then
      it checks to see if the string contains invalid US-ASCII chars but valid UTF-8
      sequences and then sets P_UTF8 accordingly. Used by putmsg() and bputs().
      
      There's a new permuation of bprintf() which accepts a mode argument
      (i.e. for P_UTF8) and passes it on to the new mode-capable bputs().
      52d5659f
  21. 10 Jul, 2019 1 commit
  22. 08 Jul, 2019 1 commit
  23. 06 Jul, 2019 1 commit
  24. 09 May, 2019 1 commit
    • rswindell's avatar
      Support bright background colors: · 48e7520e
      rswindell authored
      - for PETSCII, this is automatic and you don't lose blink, but you do lose
        colored foreground when enabling a bright background ("reverse video")
      - for ANSI, this mode is typically referred to as "iCE colors" and disables
        blinking-text support
      - Ctrl-AE (^AE) is the new attribute code to enable bright-background
        (will have no effect on ANSI terminals that are not iCE color enabled)
        "E" is now valid in the ctrl/attr.cfg file and string values for JS
        console.attributes assignments, as well
      - Ctrl-AI (^AI) - blink - now does nothing for ANSI/ICE color terminals
        (blinking is not supported in combination with bright-background)
      - Using a new/non-standard CGA attribute bit-flag to indicate the selection of
        bright-background colors (BG_BRIGHT, bit 10), separate from BLINK.
        This change required all/most char/uchar attribute representations to be
        converted to int/uint.
      
      New text.dat strings:
      - PetTerminalDetected (renamed from PetTermDetected)
      - PetTerminalQ
      - TerminalAutoDetect
      - TerminalColumns
      - TerminalRows
      - TerminalMonochrome
      - TerminalColor
      - TerminalIceColor
      - IceColorTerminalQ
      This also moved the MsgCarbonCopyList definition to the end of the file
      for now.
      
      PETSCII reverse-video attribute fix:
      When a CR is sent to the terminal, the reverse-video attibute is auto-disabled
      so update our "current attribute" (curatr) value to match the remote.
      
      Support new printfile/putmsg mode flag: P_WRAP to force an ungraceful
      line-wrap (splitting) to the specified column width. If no column width is
      specified (0), then this mode will force an ungraceful wrap before the last
      terminal column where some terminals *may* auto-wrap.
      
      JS console.printfile() and printtail() methods now support an optional
      "orig_columns" argument, similar to console.putmsg(). Must specify P_WORDWRAP
      or P_WRAP for this argument to have any effect.
      
      Much improved terminal-type selection/configuration in the user defaults
      menu and abort (^C) at any of the yes/no prompts is now detected/handled much
      better (to answers to the prompted questions are not saved to the user
      settings).
      48e7520e
  25. 26 Apr, 2019 1 commit
  26. 25 Apr, 2019 1 commit
    • rswindell's avatar
      Fix for PCBoard @Xxx code parsing: · 34e02759
      rswindell authored
      @X00 saves the current color and @XFF restores that saved color.
      Thanks to NuSkooler for the PCBoard manual, which is pretty good.
      34e02759
  27. 24 Mar, 2019 1 commit
    • rswindell's avatar
      New JS bbs methods: · b4d31140
      rswindell authored
      - bbs.show_msg()
      - bbs.show_msg_header()
      Re-worked the JS bbs.netmail() implementation
      sbbs::show_msg(), show_msghdr(), msgtotxt() now take an smb_t* argument
      (don't use the pseudo-global 'smb' in these functions any longer)
      sbbs_t::putmsg() and JS console.putmsg() now accept an optional orig_columns
      argument to specify the original column width of a text for intelligent
      re-word-wrapping (e.g. as taken from a message header field). Previously, the
      original-column value was hard-coded to 80 columns (technically, 79).
      sbbs_t::show_msghdr() no longer sends a CRLF if the cursor is already at the
      top-of-screen (TOS).
      sbbs_t::show_msg() now uses the stored "columns" msg header fields to pass to
      putmsg() to intelligently re-word-wrap message bodies for display.
      sbbs_t::show_msg() and msgtotxt() return bool now instead of void.
      JS MsgBase.get_all_msg_headers() now supports an optional "expand_fields"
      argument (defaults to true). I contemplated just getting rid of the (few)
      expanding header fields (more like default-value-header fields, like 'id'), but
      decided against it, at least for now.
      JS MsgBase.put_msg_header(), the "number_or_offset" argument is optional and
      not needed if a header object argument is provided. Make this clear in this JS
      docs for this method
      
      Note:
      I sat on this commit for a while because I noticed occasional errors like this:
          Node 1 <Digital Man> !ERROR 2 (No such file or directory) (WinError 0) in
          readmsgs.cpp line 217 (sbbs_t::loadposts) locking
          "path/to/sub" access=-100 info=smb_locksmbhdr msgbase not open
      started cropping up after introducing these changes and which I never
      root-caused. But after a clean-build and waiting a week, I haven't seen it
      again, so hopefully it was just a incomplete rebuild issue and not a new bug.
      b4d31140
  28. 11 Jan, 2019 1 commit
    • rswindell's avatar
      A partial retraction of the Ctrl-AZ interpretation changes introduced on · b2412964
      rswindell authored
      Oct-14-2018:
      It turns out, PabloDraw actually inserts a Ctrl-AZ sequence at the end of .msg
      (and presumably Synchronet .asc) files it edits - before the SAUCE record.
      This resulted in a printed Ctrl-Z character (arrow pointing right) in most
      terminals when viewing text/menu files created or edited with PabloDraw. :-(
      So, now Ctrl-AZ (uppercase) will revert to the previous definition:
      premature end-of-file (EOF)
      and a Ctrl-Az (lowercase) will output a Ctrl-Z (substitute) character.
      I'm not a big fan of case-sensitive Ctrl-A codes, but frankly, running out of
      chars and I already started this pattern with the Ctrl-AF/f sequences.
      Hopefully there's no existing software that is/was putting Ctrl-Az (lowercase)
      in files, expecting that to trigger a premature EOF. I certainly was not.
      b2412964
  29. 15 Dec, 2018 1 commit
  30. 30 Oct, 2018 1 commit
    • rswindell's avatar
      External programs that are "binary" in nature (e.g. file transfer protocols) · be7d06bc
      rswindell authored
      now have their output translated to PETSCII equivalents for PETSCII terminals
      (but input is not yet translated).
      .seq files are now sent untranslated via printfile() and putmsg() to PETSCII
      terminals (using the new P_PETSCII putmsg mode flag).
      .seq files (and P_PETSCII mode text printed via putmsg) is now converted
      (poorly) from PETSCII to CP437 - this is still a work-in-progress.
      Remove the remants of WIP and HTMLterm support from putmsg() and printfile().
      be7d06bc
  31. 26 Oct, 2018 1 commit