Both sides previous revisionPrevious revisionNext revision | Previous revision |
custom:menu_files [2013/10/02 23:59] – [See Also] 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. |
| |
| 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^ | ^Extension ^Description of expected contents^ |
|''.asc'' |[[Ctrl-A Codes]] for ANSI X3.64-subset and Dumb ASCII/TTY Terminals| | |''.asc'' |ASCII characters (CP437 characters, optionally)| |
|''.ans'' |ANSI X3.64 Color Terminals (only)| | |''.msg'' |ASCII/CP437 characters ((the main difference between .asc and .msg files are their selection priority, with .asc files targeting plain-ASCII terminals)) | |
|''.mon'' |ANSI X3.64 Monochrome Terminals| | |''.seq'' |PETSCII characters and control-sequences | |
|''.rip'' |RIPscrip Terminals| | |''.ans'' |ASCII/CP437 characters and ANSI X3.64 Terminal control-sequences| |
|''.wip'' |WIP Terminals (deprecated)| | |''.mon'' |ASCII/CP437 characters and ANSI X3.64 Terminal control-sequences suited for monochrome displays | |
|''.html'' |Experimental HTMLterm| | |''.rip'' |ASCII/CP437 characters and RIPscrip Terminal control-sequences| |
| |
| //All// of these file types may contain [[Ctrl-A Codes]] color/attribute codes and/or [[atcodes|@-Codes]]. |
| |
| 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/CP437 would be the most common BBS terminal-type encountered)) ^^ ANSI / ASCII ^| ||| |
| ^ Priority ^ RIP ^ Color ^ Mono ^ Color ^ Mono ^ PETSCII ^ TTY / CP437 ^ TTY / ASCII ^ |
| | 1 | ''.rip'' | ''.ans'' | ''.mon'' | ''.ans'' | ''.mon'' | ''.seq'' | ''.msg'' | ''.asc'' | |
| | 2 | ''.ans'' | ''.msg'' | ''.ans'' | ''.asc'' | ''.ans'' | ''.msg'' | ''.asc'' | ''.msg'' | |
| | 3 | ''.msg'' | ''.asc'' | ''.msg'' | ''.msg'' | ''.asc'' | ''.asc'' | | | |
| | 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 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). |
| |
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. |
===== Optional ===== | ===== Optional ===== |
| |
Optional menu file names and descriptions (do not exist by default): | Optional menu file names and descriptions (these file do not exist by default): |
| |
^Base filename ^Displayed By^Description^ | ^Base filename ^Displayed By^Description^ |
|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)| |
|subsx |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)| |
|dirsx |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)| |
|xtrnx |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//<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)| |
|textx |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| |
|tpolicy |str.cpp |File transfer policy (displayed instead of ''[[custom:text.dat]]'' strings: TransferPolicyHdr, TpUpload, TpDownload)| | |tpolicy |str.cpp |File transfer policy (displayed instead of ''[[custom:text.dat]]'' strings: TransferPolicyHdr, TpUpload, TpDownload)| |
|randomx |logon.js |Random logon screen (random1, random2, random3, etc.)| | |random//<x>// |logon.js |Random logon screen (e.g. ''random1'', ''random2'', ''random3'', etc.)| |
| |
===== See Also ===== | ===== See Also ===== |
* [[util:ASC2ANS]] utility | * [[util:ASC2ANS]] utility |
* [[util:ANS2ASC]] utility | * [[util:ANS2ASC]] utility |
| * [[resource:ANSI Editors]] |
| |
{{tag>}} | {{tag>}} |