07-16-2025, 06:32 PM
Very cool! Like info forms in the old BBS days.
Elegant approach!
Sharing this link because you might find it interesting / useful. There were a bunch of these kinds of parsers back in the day of BBSes. I like how yours has input length and stuff in it. I haven't tried your code yet./
Check out the old Renegade BBS Info Form docs here:
https://renegadebbs.info/docs/
Search for "Chapter 16 - Infoform" - there is no hypertext, this is an ASCII doc file.
Another topic that might be interesting for you and your library is the concept of MCI codes:
https://renegadebbs.info/docs/mci.html
TL;DR: it's a variable that is found/replaced (like your references) but with specific data for the BBS - in this case not useful for your library unless the programmer defined them in advance, or you had one for date/time, current directory or I don't know, other things that QB64PE can introspect on
Elegant approach!
Sharing this link because you might find it interesting / useful. There were a bunch of these kinds of parsers back in the day of BBSes. I like how yours has input length and stuff in it. I haven't tried your code yet./
Check out the old Renegade BBS Info Form docs here:
https://renegadebbs.info/docs/
Search for "Chapter 16 - Infoform" - there is no hypertext, this is an ASCII doc file.
Code: (Select All)
─────────────────────────────────────────────────────────────────────────────
Chapter 16 - Infoform Questionnaire System
─────────────────────────────────────────────────────────────────────────────
──────────────────────────────
Chapter 16─A: How They're Made
──────────────────────────────
Infoform questionnaires are text files with certain commands that only
have meaning to the BBS. The questionnaire is stored in the MISC
directory, in a file with the extension .INF, .INA or .INV (No Emulation,
ANSI Emulation, or Avatar Emulation, respectively.) When users answer
the question(s), their answers are also stored in the MISC directory, in
a file with the extension ".ASW". Answers from other users are appended
to the end of the answer file.
───────────────────────────────────
Chapter 16─B: New User Questionnaire
───────────────────────────────────
A special Infoform questionnaire called NEWUSER is always given to a new
user during the new user logon process. An example is listed below:
─────────────────────────────────────────────────────────────────────────────
Alright! Only a few more questions to go before you can logon. Please
answer the questions, as they are essential for Validation and just as a
security measure. Don't worry though.... It's not a test. (it's a quiz..)
;YAre you the SysOp of a BBS (Y/N)? : *
;INO,NOSYSOP
What is the Phone # of the BBS?
###─###─####
;A ? *
;AWhat BBS software do you run? *
;AHow long has it been running for? *
;GNOSYSOP1
:NOSYSOP
Oh well! Someone's gotta do it, eh?
:NOSYSOP1
Do you know of any of the current users on this BBS, or any other good
users that could recommend you? (2 lines)
;A 1) *
;A 2) *
Ok! Thanks for answering the questions, and I'm sure you'll be validated
very soon!
─────────────────────────────────────────────────────────────────────────────
───────────────────────────────────
Chapter 16─C: Questionnaire Commands
───────────────────────────────────
Below are listed all the Infoform questionnaire commands currently
supported by Renegade. All commands must start on a separate line,
beginning with a ";" character. Labels also start on a separate line,
but beginning with a ":" character, and are followed by a string of
characters which define the label name. Everything else is treated as
straight text. A "; <string>" line is treated as a comment.
Command: A<string>*
Function: Displays <string> then inputs the string at the "*"
character.
Command: B<string>*
Function: Similar to the "A" command, except input is uppercase only.
Command: C"chars"<string>*
Function: Displays string, then inputs a single character at the "*"
character. Only accepted answers are the characters
between the quote marks ("").
Command: Dx<string>
Function: Outputs a doorfile (See Door in Menu Commands for x)
then executes <string>. All rules for standard door
commands apply.
Command: F<Flag Toggles>
Function: Will toggle the AR flags. Refer to the Commandkey "OF" in
Chapter 11─D─12 for information on the <Flag Toggles>.
Command: G<label>
Function: Goes to label <label>. If <label> doesn't exist, the
questionnaire will terminate.
Command: H
Function: Terminates questionnaire and hangs up on user.
Command: I<string>,<label>
Function: Branches to <label> if <string> was the last input
value from a "A", "B", "C", or "Y" command.
Command: K
Function: Terminate questionnaire without saving answers.
Command: L<string>
Function: Outputs <string> to the questionnaire answer file only.
Command: N<String>*
Function: Displays <string>, then accepts either a "Y", or "N"
at the "*" character. Defaults to No.
Command: Q
Function: Terminates questionnaire and saves answers in answer file.
Command: R<Flag Toggles>
Function: Will toggle the AC flags. Refer to the Commandkey "OG" in
Chapter 11─D─12 for information on the <Flag Toggles>.
Command: T<filename>
Function: Displays the file <filename>.
Command: V<level>
Function: Will validate a user up to level <level>.
Command: Y<string>*
Function: Same as N<String>, but defaults to Yes instead of No.
Command: S<ACS>,LABEL
Function: If the user matches the ACS specified between quotes,
execution will branch to LABEL, like the G command.Another topic that might be interesting for you and your library is the concept of MCI codes:
https://renegadebbs.info/docs/mci.html
TL;DR: it's a variable that is found/replaced (like your references) but with specific data for the BBS - in this case not useful for your library unless the programmer defined them in advance, or you had one for date/time, current directory or I don't know, other things that QB64PE can introspect on

