TIP: Click on subject to list as thread! ANSI
echo: synchronet
to: vela025
from: Digital Man
date: 2024-10-20 14:18:00
subject: Help using gettext.js

  Re: Help using gettext.js
  By: vela025 to Digital Man on Sun Oct 20 2024 12:55 pm

 >
 > I thought I was doing so well! but there's now an odd issue occurring when
 > swapping from one terminal type to another.
 >
 > Scenario 1: Log in a Mode 7 terminal everything's fine, Next login using an
 > ANSI terminal, message summary screen overlays some text over avatar, Log
 > out, Log in again using ANSI terminal everything is fine.

"next login" as the same user or a different user? Is either user a "guest" account (have the 'G' restriction)?

 > Scenario 2:  Login to Mode 7 after having previously used ANSI terminal and
 > some prompts are not using the BBC "language.ini" customisation (but some
 > are, and some are, but ignoring the colour codes). The main menu is shifted
 > after the first row, log out, log back in using Mode 7 and everything is
 > fine.

console.term_supports() is the function used to normally determine what the user's console's terminal type/capabilties are (compare the return values with the USER_* bit definitions for terminal types/caps in sbbsdefs.js). You're doing something unique/different using a language file to control terminal type. I'm not surprised it's a challenge.

 > I've put screenshots here:
 > http://beebs.ddns.net/BeeBS/My_Albums/Pages/Synchronet.html which probably
 > make more sense.

I looked at it, but doesn't tell me any specific cause.

 > Previously before I added the terminal type selection at logon when the user
 > used to have to change the terminal settings manually (using D from the main
 > menu) this also required the user to log out and back in for all  settings
 > to take effect. Is there a command that will "refresh" the settings to
 > ensure they're all being used?

Which "settings" are you referring to? A current client/user's terminal type is normally detected during initial connection/answer and then can be overridden by a user's terminal settings once they login. Most users's use auto-terminal type detection, so they can automatically switch between CP437/ANSI, UTF-8/ANSI and PETSCII clients without having to reconfigure anything. You're doing something unique and different with your BBS.

 > This is the terminal selection script I've cobbled together:
 >
 > switch (userChoice) {
 >     case "4":
 >              user.lang = "ascii";
 >              user.settings &= ~(USER_AUTOTERM | USER_ANSI | USER_RIP |
 > USER_WIP | USER_HTML | USER_PETSCII | USER_UTF8);
 >              user.settings &= ~USER_NO_EXASCII;
 >              user.screen_columns = 40;
 >              user.screen_rows = 25;
 >         break;

I would think an "ascii" terminal would want no extended ASCII (IBM CP437) characters, so that USER_NO_EXASCII flag should be set (not cleared).
I'm not clear why you're assuming an "ascii" terminal is only 40 columns wide and 25 lines long. That seems wrong.

 >     case "7":
 >              user.lang = "bbcmicro";
 >              user.settings &= ~(USER_AUTOTERM | USER_ANSI | USER_RIP |
 > USER_WIP | USER_HTML | USER_PETSCII | USER_UTF8);
 >              user.settings &= ~USER_NO_EXASCII;
 >              user.screen_columns = 40;
 >              user.screen_rows = 25;
 >         break;
 >     case "8":
 >              user.lang = "ansi";
 >              user.settings &= ~(USER_AUTOTERM | USER_RIP | USER_WIP |
 > USER_HTML | USER_PETSCII | USER_UTF8);
 >              user.settings &= ~USER_NO_EXASCII;
 >              user.settings |= USER_ANSI;
 >              user.screen_columns = 80;
 >              user.screen_rows = 25;
 >         break;

Why assume that ANSI terminals are 80x25? Why assume ANSI terminals are using CP437 (IBM extended ASCII) and not UTF-8? Why is "ansi" a different language than "ascii"?

You don't need to bother clearing/worrying about USER_HTML or USER_WIP flags. Those flags are deprecated and unused.

 >     default:
 >              user.lang = "ascii";
 >              user.settings &= ~(USER_AUTOTERM | USER_ANSI | USER_RIP |
 > USER_WIP | USER_HTML | USER_PETSCII | USER_UTF8);
 >              user.settings &= ~USER_NO_EXASCII;
 >              user.screen_columns = 40;
 >              user.screen_rows = 25;
 >         break;
 > }

If JS, you can just put "default:" on the line before the "case" statement you want to be the default. You don't need to copy/past blocks of code if the default is the same as another case.

Anyway, you can call console.term_supports() and log/check the return value (e.g. in hexadecimal) against the terminal-related bits you just set in user.settings. This will reflect the current flags used internally in SBBS to determine the user's terminal type.
-- 
                                            digital man (rob)

Synchronet/BBS Terminology Definition #22:
DOCSIS = Data Over Cable Service Interface Specification
Norco, CA WX: 84.3øF, 20.0% humidity, 4 mph WSW wind, 0.00 inches rain/24hrs
--- SBBSecho 3.20-Linux
                 
* Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)

SOURCE: echomail via QWK@pharcyde.org

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.