Menu System
OxideBBS separates caller-facing screen art from safe menu actions.
Screen files draw what the caller sees. Menu config decides which single key invokes which internal action.
Terminal welcome art should stay informational: branding, system identity, and status only. Command lists belong on the active menu screen whose configured items are being routed at that prompt. Login menu screens should not clear the screen after terminal welcome art has been sent; otherwise the welcome art is loaded successfully and then immediately erased before the caller can see it.
Caller Flow
The configured starter flow is:
connect
-> choose login screen asset for caller capabilities
-> route login menu key
-> after login, show optional post-login screens
-> choose main menu screen asset
-> route main menu keyScreen asset selection prefers the best available variant:
- 40-column ANSI when the caller supports ANSI and width is 40 or less
- regular ANSI when the caller supports ANSI
- ASCII
- plain text
Config Shape
[flow]
login_screen = "login"
login_menu = "login"
post_login_screens = ["screen1", "screen2"]
main_menu = "main"
[screens.login]
ansi = "login/login.ans"
ansi_40 = "login/login-40.ans"
ascii = "login/login.asc"
text = "login/login.txt"
[menus.login]
screen = "login"
prompt = "Login? "
[[menus.login.items]]
key = "L"
label = "Logon"
action = "login"Menu actions are safe internal actions, not shell commands. Supported starter actions include login, new_user, doors, messages, logoff, noop, show_screen, and submenu.
submenu actions are now runtime-capable: when selected, the caller moves into the referenced menu and continues from that menu context.
See the Caller Command Reference for the current sysop-facing list of default caller keys, prompt commands, and future/reserved command notes.
Asset Layout
Starter caller screens live under assets/screens/:
assets/screens/
├── login/
├── info/
└── menus/
└── main/This keeps login screens, post-login information screens, and menu graphics separate from legacy/general ANSI files in assets/ansi/.