Both sides previous revisionPrevious revisionNext revision | Previous revision |
custom:menu_files [2018/10/25 03:36] – [Menu Files] More details about the new-improve display/menu file selection process digital man | custom:menu_files [2024/10/24 13:56] (current) – [Optional] Clarify that group/lib/section numbering is 1-based for menu files digital man |
---|
Menu files displayed to the remote terminal client / user are stored in the ''[[dir:text]]/menu'' directory. | Menu files displayed to the remote terminal client / user are stored in the ''[[dir:text]]/menu'' directory. |
| |
Other display files (mainly used during the terminal server's new user registration process), are stored in the ''[[dir:text]]'' directory. | Menu files that have been translated to alternate languages (represented by ''[[dir:ctrl]]/text.//lang//.ini'' files) are stored in their ''[[dir:text]]/menu///lang//'' directory. |
| |
| Other display files (mainly used during the terminal server's //new user// registration process), are stored in the ''[[dir:text]]'' directory. |
| |
Menu files may have one of the following file suffixes / extensions: | Menu files may have one of the following file suffixes / extensions: |
^Extension ^Description of expected contents^ | ^Extension ^Description of expected contents^ |
|''.asc'' |ASCII characters (CP437 characters, optionally)| | |''.asc'' |ASCII characters (CP437 characters, optionally)| |
|''.msg'' |ASCII/CP437 characters ((the main difference between .asc and .msg files are their selection priority with .asc files targeted at plain-ASCII terminals)) | | |''.msg'' |ASCII/CP437 characters ((the main difference between .asc and .msg files are their selection priority, with .asc files targeting plain-ASCII terminals)) | |
|''.seq'' |PETSCII characters and control-sequences | | |''.seq'' |PETSCII characters and control-sequences | |
|''.ans'' |ASCII/CP437 characters and ANSI X3.64 Terminal control-sequences| | |''.ans'' |ASCII/CP437 characters and ANSI X3.64 Terminal control-sequences| |
Although you may have multiple menu files with the same base filename and different suffixes/extensions, only one menu file will be selected and displayed to the terminal user based on their configured or auto-detected terminal type/capabilities. The menu/display file selection priority is as follows (the highest-priority file type that exists on disk will be displayed to the user): | Although you may have multiple menu files with the same base filename and different suffixes/extensions, only one menu file will be selected and displayed to the terminal user based on their configured or auto-detected terminal type/capabilities. The menu/display file selection priority is as follows (the highest-priority file type that exists on disk will be displayed to the user): |
| |
| ^ ANSI / CP437 ^^ ANSI / ASCII ^^ | | |^ ANSI / CP437((ANSI/CP437 would be the most common BBS terminal-type encountered)) ^^ ANSI / ASCII ^| ||| |
^ RIP ^ Color ^ Mono ^ Color ^ Mono ^ PETSCII ^ TTY/CP437 ^ TTY/ASCII ^ | ^ Priority ^ RIP ^ Color ^ Mono ^ Color ^ Mono ^ PETSCII ^ TTY / CP437 ^ TTY / ASCII ^ |
| ''.rip'' | ''.ans'' | ''.mon'' | ''.ans'' | ''.mon'' | ''.seq'' | ''.msg'' | ''.asc'' | | | 1 | ''.rip'' | ''.ans'' | ''.mon'' | ''.ans'' | ''.mon'' | ''.seq'' | ''.msg'' | ''.asc'' | |
| ''.ans'' | ''.msg'' | ''.ans'' | ''.asc'' | ''.ans'' | ''.msg'' | ''.asc'' | ''.msg'' | | | 2 | ''.ans'' | ''.msg'' | ''.ans'' | ''.asc'' | ''.ans'' | ''.msg'' | ''.asc'' | ''.msg'' | |
| ''.msg'' | ''.asc'' | ''.msg'' | ''.msg'' | ''.asc'' | ''.asc'' | | | | | 3 | ''.msg'' | ''.asc'' | ''.msg'' | ''.msg'' | ''.asc'' | ''.asc'' | | | |
| ''.asc'' | | ''.asc'' | | ''.msg'' | | | | | | 4 | ''.asc'' | | ''.asc'' | | ''.msg'' | | | | |
| |
Each of these file types may be preempted by a terminal-width specific file with a name ending in ''.//X//col//.ext//'' where ''//X//'' is the (exact) number of screen columns (e.g. usually 80 or 40) and ''//.ext//'' is one of the supported file extensions from the above list. | Each of these file types may be preempted by a terminal-width specific file with a name ending in ''.//X//col//.ext//'' where ''//X//'' is the **exact** number of screen columns required to display the file correctly (e.g. 40, 80, 132) and ''//.ext//'' is one of the supported file extensions from the above list. To specify a **minimum** number of screen columns for a display file, use filenames ending in ''.c//X.ext//'' where //X// is the minimum number of screen columns to display the file correctly. |
| |
If you only have **one** display file for any particular base filename, it should have either a ''.msg'' or ''.asc'' extension and contain no terminal-control sequences (e.g. ANSI, PETSCII, or RIP). | If you only have **one** display file for any particular base filename, it should have either a ''.msg'' or ''.asc'' extension and contain no terminal-control sequences (e.g. ANSI, PETSCII, or RIP). |
| |
See the [[http://cvs.synchro.net/cgi-bin/viewcvs.cgi/text/menu/|Menu Directory]] in [[dev:CVS]] for default menu files and their contents. | See the [[https://gitlab.synchro.net/main/sbbs/-/tree/master/text/menu|Menu Directory]] in [[dev:git]] for default menu files and their contents. |
| |
Most menu files are loaded/displayed by a [[custom:command shell]], so the name and location (e.g. sub-directory) of those files may depend on which command shell is in use by the users of your [[server:terminal]] server. | Most menu files are loaded/displayed by a [[custom:command shell]], so the name and location (e.g. sub-directory) of those files may depend on which command shell is in use by the users of your [[server:terminal]] server. |
|dlprot |str.cpp |Download transfer protocols (displayed instead of dynamically generated list)| | |dlprot |str.cpp |Download transfer protocols (displayed instead of dynamically generated list)| |
|ulprot |str.cpp |Upload transfer protocols (displayed instead of dynamically generated list)| | |ulprot |str.cpp |Upload transfer protocols (displayed instead of dynamically generated list)| |
| |upload |shell_lib.js | Displayed before the prompt for user-supplied filename to upload | |
|grps |execmsg.cpp |Message Group listing (displayed instead of dynamically generated list)| | |grps |execmsg.cpp |Message Group listing (displayed instead of dynamically generated list)| |
|subs//<x>// |execmsg.cpp |Message Sub-board listing, //<x>// is the group number| | |subs//<x>// |execmsg.cpp |Message Sub-board listing, //<x>// is the (one-based) group number| |
|libs |execfile.cpp|File Library listing (displayed instead of dynamically generated list)| | |libs |execfile.cpp|File Library listing (displayed instead of dynamically generated list)| |
|dirs//<x>// |execfile.cpp|File Directory listing, //<x>// is the library number| | |msglist | msglist.js|Used by [[module:msglist|Message List]]| |
| |msgview | msglist.js|Used by [[module:msglist|Message List]]| |
| |msgtabs |writemsg.cpp|Internal message editor tab bar| |
| |dirs//<x>// |execfile.cpp|File Directory listing, //<x>// is the (one-based) library number| |
| |xtrn_sec_head |xtrn_sec.js |External Program Sections header| |
|xtrn_sec |xtrn_sec.js |External Program Sections (displayed instead of dynamically generated list)| | |xtrn_sec |xtrn_sec.js |External Program Sections (displayed instead of dynamically generated list)| |
|xtrn//<x>// |xtrn_sec.js |External Program listing, //<x>// is the section number| | |xtrn_sec_tail |xtrn_sec.js |External Program Sections footer| |
| |xtrn//<x>//_head |xtrn_sec.js |External Program list header, //<x>// is the (one-based) section number| |
| |xtrn//<code>//_head |xtrn_sec.js |External Program list header, //<code>// is the section code| |
| |xtrn_head | xtrn_sec.js | External Program list header (global)| |
| |xtrn//<x>// |xtrn_sec.js |External Program listing, //<x>// is the (one-based) section number| |
| |xtrn//<code>// |xtrn_sec.js |External Program listing, //<code>// is the section code| |
|xtrn///<code>//|xtrn_sec.js|Message displayed just before executing the external program represented by //<code>//| | |xtrn///<code>//|xtrn_sec.js|Message displayed just before executing the external program represented by //<code>//| |
| |xtrn//<x>//_tail |xtrn_sec.js |External Program list footer, //<x>// is the (one-based) section number| |
| |xtrn//<code>//_tail |xtrn_sec.js |External Program list footer, //<code>// is the section code| |
| |xtrn_tail | xtrn_sec.js | External Program list footer (global)| |
|text_sec |text_sec.cpp|Text File Section listing (displayed instead of dynamically generated list)| | |text_sec |text_sec.cpp|Text File Section listing (displayed instead of dynamically generated list)| |
|text//<x>// |text_sec.cpp|Text File listing, //<x>// is the text file section number| | |text//<x>// |text_sec.cpp|Text File listing, //<x>// is the (one-based) text file section number| |
|chan |chat.cpp |Multinode Chat Channels (displayed instead of dynamically generated list)| | |chan |chat.cpp |Multinode Chat Channels (displayed instead of dynamically generated list)| |
|tmessage |default.src |Displays when the user enters the transfer section| | |tmessage |default.src |Displays when the user enters the transfer section| |