diff --git a/xtrn/DDMsgReader/DDMsgReader.js b/xtrn/DDMsgReader/DDMsgReader.js index 38683ae5be4d9036500d48d95df6091c8e019326..bccefb2814c080f239c0b757b7f99e7cf3497aa0 100644 --- a/xtrn/DDMsgReader/DDMsgReader.js +++ b/xtrn/DDMsgReader/DDMsgReader.js @@ -103,6 +103,11 @@ * Now allows editing the subject when forwarding a message * 2023-03-09 Eric Oulashin Version 1.67 * Fixes for time zone alignment & list key help for wide terminals + * 2023-03-15 Eric Oulashin Version 1.68 + * Makes use of console.aborted when displaying help screens + * so that screen updates work better after pausing output. + * Also, when running a new message scan (not new-to-you), the current + * sub-board being scanned is now outputted. */ "use strict"; @@ -208,8 +213,8 @@ var ansiterm = require("ansiterm_lib.js", 'expand_ctrl_a'); // Reader version information -var READER_VERSION = "1.67"; -var READER_DATE = "2023-03-09"; +var READER_VERSION = "1.68"; +var READER_DATE = "2023-03-15"; // Keyboard key codes for displaying on the screen var UP_ARROW = ascii(24); @@ -1186,7 +1191,8 @@ function DigDistMsgReader(pSubBoardCode, pScriptArgs) // this.tabReplacementText will be the text that tabs will be replaced // with in enhanced reader mode - this.tabReplacementText = format("%" + this.numTabSpaces + "s", ""); + //this.tabReplacementText = format("%" + this.numTabSpaces + "s", ""); + this.tabReplacementText = format("%*s", this.numTabSpaces, ""); // Calculate the message list widths and format strings based on the current // sub-board code and color settings. Start with a message # field length @@ -1279,7 +1285,7 @@ function DigDistMsgReader(pSubBoardCode, pScriptArgs) //hdrLine6 += "@\x01n\x01c" + VERTICAL_SINGLE; hdrLine6 += "@ @MSG_TIMEZONE@\x01n"; numChars = console.screen_columns - 42; - hdrLine6 += format("%" + numChars + "s", ""); + hdrLine6 += format("%*s", numChars, ""); // More correct than format("%" + numChars + "s", ""); hdrLine6 += "\x01n\x01c" + VERTICAL_SINGLE; this.enhMsgHeaderLines.push(hdrLine6); this.enhMsgHeaderLinesToReadingUser.push(hdrLine6); @@ -2222,14 +2228,7 @@ function DigDistMsgReader_PopulateHdrsIfSearch_DispErrorIfNoMsgs(pCloseMsgbaseAn formattedText = format(this.text.loadingPersonalMailText, subBoardGrpAndName(this.subBoardCode)); else formattedText = format(this.text.searchingSubBoardText, subBoardGrpAndName(this.subBoardCode)); - formattedText = replaceAtCodesInStr(formattedText); - formattedText = word_wrap(formattedText, console.screen_columns-1, formattedText.length, false).replace(/\r|\n/g, "\r\n"); - while (formattedText.lastIndexOf("\r\n") == formattedText.length-2) - formattedText = formattedText.substr(0, formattedText.length-2); - while (formattedText.lastIndexOf("\r") == formattedText.length-1) - formattedText = formattedText.substr(0, formattedText.length-1); - while (formattedText.lastIndexOf("\n") == formattedText.length-1) - formattedText = formattedText.substr(0, formattedText.length-1); + formattedText = replaceAtCodesAndRemoveCRLFs(formattedText); console.print("\x01n" + formattedText + "\x01n"); } var readingMailUserNum = user.is_sysop ? this.personalMailUserNum : user.number; @@ -2358,7 +2357,7 @@ function DigDistMsgReader_MessageAreaScan(pScanCfgOpt, pScanMode, pScanScopeChar { // Prompt the user to scan in the current sub-board, the current message group, // or all. Default to all. - console.print("\x01n"); + console.attributes = "N"; console.mnemonics(bbs.text(SubGroupOrAll)); scanScopeChar = console.getkeys("SGAC").toString(); // If the user just pressed Enter without choosing anything, then abort and return. @@ -2445,6 +2444,15 @@ function DigDistMsgReader_MessageAreaScan(pScanCfgOpt, pScanMode, pScanScopeChar this.setSubBoardCode(subBoardsToScan[subCodeIdx]); // Needs to be set before getting the last read/scan pointer index if (msg_area.sub[this.subBoardCode].can_read && ((msg_area.sub[this.subBoardCode].scan_cfg & pScanCfgOpt) == pScanCfgOpt)) { + // If running a new message scan (not new-to-you), output which sub-board that is currently being scanned + if (pScanCfgOpt == SCAN_CFG_NEW && pScanMode == SCAN_NEW) + { + var statusText = format(this.text.searchingSubBoardText, subBoardGrpAndName(this.subBoardCode)); + console.print("\x01n" + replaceAtCodesAndRemoveCRLFs(statusText) + "\x01n"); + console.crlf(); + console.line_counter = 0; // Prevent pausing for screen output and when displaying a message + } + var grpIndex = msg_area.sub[this.subBoardCode].grp_index; var subIndex = msg_area.sub[this.subBoardCode].index; // Sub-board description: msg_area.grp_list[grpIndex].sub_list[subIndex].description @@ -7659,8 +7667,10 @@ function DigDistMsgReader_DisplayMsgListHelp(pChgSubBoardAllowed, pPauseAtEnd) // If pPauseAtEnd is true, then output a newline and // prompt the user whether or not to continue. - if (pPauseAtEnd) + if (pPauseAtEnd && !console.aborted) console.pause(); + + console.aborted = false; } // For the DigDistMsgReader Class: Displays help for the traditional-interface // message list @@ -7758,8 +7768,11 @@ function DigDistMsgReader_DisplayTraditionalMsgListHelp(pDisplayHeader, pChgSubB // If pPauseAtEnd is true, then output a newline and // prompt the user whether or not to continue. - if (pPauseAtEnd) + if (pPauseAtEnd && !console.aborted) console.pause(); + + // Don't set this here - This is only ever called by DisplayMsgListHelp() + //console.aborted = false; } // For the DigDistMsgReader Class: Displays help for the lightbar message list // @@ -7849,8 +7862,11 @@ function DigDistMsgReader_DisplayLightbarMsgListHelp(pDisplayHeader, pChgSubBoar console.print("\x01n\x01h\x01c?" + this.colors["tradInterfaceHelpScreenColor"] + ": Show this help screen\r\n"); // If pPauseAtEnd is true, then pause. - if (pPauseAtEnd) + if (pPauseAtEnd && !console.aborted) console.pause(); + + // Don't set this here - This is only ever called by DisplayMsgListHelp() + //console.aborted = false; } // For the DigDistMsgReader class: Displays the message list notes for the // help screens. @@ -8092,7 +8108,8 @@ function DigDistMsgReader_SetEnhancedReaderHelpLine() var helpLineScreenLen = (console.strlen(this.enhReadHelpLine) - numHotkeyChars); var numCharsRemaining = console.screen_columns - helpLineScreenLen - 1; var frontPaddingLen = Math.floor(numCharsRemaining/2); - var padding = format("%" + frontPaddingLen + "s", ""); + //var padding = format("%" + frontPaddingLen + "s", ""); + var padding = format("%*s", frontPaddingLen, ""); this.enhReadHelpLine = padding + this.enhReadHelpLine; this.enhReadHelpLine = "\x01n" + this.colors.enhReaderHelpLineBkgColor + this.enhReadHelpLine; if (console.screen_columns > 80) @@ -8104,7 +8121,10 @@ function DigDistMsgReader_SetEnhancedReaderHelpLine() // Adding 3 as a correction factor for wide terminals (this is a kludge) numCharsRemaining = console.screen_columns - helpLineScreenLen + 3; if (numCharsRemaining > 0) - this.enhReadHelpLine += format("%" + numCharsRemaining + "s", ""); + { + //this.enhReadHelpLine += format("%" + numCharsRemaining + "s", ""); + this.enhReadHelpLine += format("%*s", numCharsRemaining, ""); + } } // Create a version without the change area option @@ -8151,7 +8171,8 @@ function DigDistMsgReader_SetEnhancedReaderHelpLine() if (numCharsRemaining > 0) { frontPaddingLen = Math.floor(numCharsRemaining/2); - padding = format("%" + frontPaddingLen + "s", ""); + //padding = format("%" + frontPaddingLen + "s", ""); + padding = format("%*s", frontPaddingLen, ""); this.enhReadHelpLineWithoutChgArea = padding + this.enhReadHelpLineWithoutChgArea; } this.enhReadHelpLineWithoutChgArea = "\x01n" + this.colors.enhReaderHelpLineBkgColor + this.enhReadHelpLineWithoutChgArea; @@ -8161,7 +8182,10 @@ function DigDistMsgReader_SetEnhancedReaderHelpLine() // Adding 3 as a correction factor for wide terminals (this is a kludge) numCharsRemaining = console.screen_columns - helpLineScreenLen + 3; if (numCharsRemaining > 0) - this.enhReadHelpLineWithoutChgArea += format("%" + numCharsRemaining + "s", ""); + { + //this.enhReadHelpLineWithoutChgArea += format("%" + numCharsRemaining + "s", ""); + this.enhReadHelpLineWithoutChgArea += format("%*s", numCharsRemaining, ""); + } } } function stripCtrlFromEnhReadHelpLine_ReplaceArrowChars(pHelpLine) @@ -10417,6 +10441,8 @@ function DigDistMsgReader_DisplayEnhancedReaderHelp(pDisplayChgAreaOpt, pDisplay // I'm not sure the above is needed anymore. Should be able to use // console.pause(), which easily supports custom pause scripts being loaded. console.pause(); + + console.aborted = false; } // For the DigDistMsgReader class: Displays the enhanced reader mode message @@ -13096,7 +13122,7 @@ function DigDistMsgReader_FindThreadNextOffset(pMsgHdr, pThreadType, pPositionCu { // Look for the next message with the same thread ID. // Write "Searching.." in case searching takes a while. - console.print("\x01n"); + console.attributes = "N"; if (pPositionCursorForStatus) { console.gotoxy(1, console.screen_rows); @@ -13192,7 +13218,7 @@ function DigDistMsgReader_FindThreadNextOffset(pMsgHdr, pThreadType, pPositionCu // Perform the search // Write "Searching.." in case searching takes a while. - console.print("\x01n"); + console.attributes = "N"; if (pPositionCursorForStatus) { console.gotoxy(1, console.screen_rows); @@ -13287,7 +13313,7 @@ function DigDistMsgReader_FindThreadPrevOffset(pMsgHdr, pThreadType, pPositionCu { // Look for the previous message with the same thread ID. // Write "Searching.." in case searching takes a while. - console.print("\x01n"); + console.attributes = "N"; if (pPositionCursorForStatus) { console.gotoxy(1, console.screen_rows); @@ -13362,7 +13388,7 @@ function DigDistMsgReader_FindThreadPrevOffset(pMsgHdr, pThreadType, pPositionCu // Synchronet, so I'm not sure of the minimum version where // this will work. // Write "Searching.." in case searching takes a while. - console.print("\x01n"); + console.attributes = "N"; if (pPositionCursorForStatus) { console.gotoxy(1, console.screen_rows); @@ -13436,7 +13462,7 @@ function DigDistMsgReader_FindThreadPrevOffset(pMsgHdr, pThreadType, pPositionCu // Perform the search // Write "Searching.." in case searching takes a while. - console.print("\x01n"); + console.attributes = "N"; if (pPositionCursorForStatus) { console.gotoxy(1, console.screen_rows); @@ -15531,7 +15557,8 @@ function DigDistMsgReader_RefreshMsgAreaRectangle(pTxtLines, pTopLineIdx, pTopLe if (printableTxtLen < pWidth) { var lenDiff = pWidth - printableTxtLen; - lineText += format("\x01n%" + lenDiff + "s", ""); + //lineText += format("\x01n%" + lenDiff + "s", ""); + lineText += format("\x01n%*s", lenDiff, ""); } console.print(lineText); } @@ -20547,6 +20574,30 @@ function attrCodeStr(pAttrCodeCharStr) return str; } +// Replaces @-codes in a string and removes any newlines and carriage returns from the end +// of the string +// +// Parameters: +// pText: The text to modify +// +// Return value: The text with @-codes replaced and newlines & carriage returns removed +// from the end of the text +function replaceAtCodesAndRemoveCRLFs(pText) +{ + if (typeof(pText) !== "string") + return ""; + + var formattedText = replaceAtCodesInStr(pText); + formattedText = word_wrap(formattedText, console.screen_columns-1, formattedText.length, false).replace(/\r|\n/g, "\r\n"); + while (formattedText.lastIndexOf("\r\n") == formattedText.length-2) + formattedText = formattedText.substr(0, formattedText.length-2); + while (formattedText.lastIndexOf("\r") == formattedText.length-1) + formattedText = formattedText.substr(0, formattedText.length-1); + while (formattedText.lastIndexOf("\n") == formattedText.length-1) + formattedText = formattedText.substr(0, formattedText.length-1); + return formattedText; +} + /////////////////////////////////////////////////////////////////////////////////// // For debugging: Writes some text on the screen at a given location with a given pause. diff --git a/xtrn/DDMsgReader/readme.txt b/xtrn/DDMsgReader/readme.txt index 15bdab80eeaf4118b0fb6e15d33a44bffae26be8..727054f1adb5cd08b9c0856140afce1e5297129f 100644 --- a/xtrn/DDMsgReader/readme.txt +++ b/xtrn/DDMsgReader/readme.txt @@ -1,6 +1,6 @@ Digital Distortion Message Reader - Version 1.67 - Release date: 2023-03-09 + Version 1.68 + Release date: 2023-03-15 by @@ -176,7 +176,7 @@ Digital Distortion Message Reader is comprised of the following files: 4. ddmr_lm.js Loadable module script for setup in SCFG (only needed for Synchronet 3.19 and earlier, or Synchronet built - before 2023-02-20) + before 2023-02-20) The configuration files are plain text files, so they can be edited using any editor. diff --git a/xtrn/DDMsgReader/revision_history.txt b/xtrn/DDMsgReader/revision_history.txt index 90e39aa0a0aa93134fa30a53e41aa1da0d417ddb..d87552556fa000aa8ebe9c7bff1d73905e25451a 100644 --- a/xtrn/DDMsgReader/revision_history.txt +++ b/xtrn/DDMsgReader/revision_history.txt @@ -5,6 +5,10 @@ Revision History (change log) ============================= Version Date Description ------- ---- ----------- +1.68 2023-03-15 Makes use of console.aborted when displaying help screens + so that screen updates work better after pausing output. + Also, when running a new message scan (not new-to-you), + the current sub-board being scanned is now outputted. 1.67 2023-03-09 Fixes for time zone alignment & list key help for wide terminals 1.66 2023-03-02 When forwarding a message, the subject can now be edited