MexScript
BMS stands for Binary MultiEx Scripts. It is the format used by MultiEx Commander to take apart an impressive array of GRAFs. The file format consists of a text file which a series of instructions to be run through an interpreter. The interpreter uses the instructions to traverse through a GRAF file and search for key data such as names, offsets, and sizes of various constituent files.
Basics
Each line of a BMS script contains a single statement. The statement can be broken down into a series of tokens.
Questions: Are all statements constrained to one line? or can they span multiple lines? If the former, then the semi-colon at the end of each line seems superfluous. Or can there be comments after the semi-colon?
Statements
The first token on a statement line indicates what operation that line is to perform. These are the known statement types:
- Do
- FindLoc
- For
- Get
- GetDString
- GoTo
- IDString
- ImpType
- Log
- Math
- Next
- SavePos
- Set
- While
Comments
Does BMS make provision for comments?
Case Sensitivity
Is BMS case sensitive? Does it have to be written as IDString, or will idstring or iDstrINg both work?
Variables
BMS scripts can declare variables and perform basic arithmetic operations on them and control operations with them.
Control Structures
BMS scripts are executed in order from top to bottom unless an alternate control structure is encountered. These control structures include Do..While and For..Next loops.
Question: Is there any equivalent to the 'while {}' C structure or WHILE..WEND structure in BASIC? IOW, a pre-evaluation control structure instead of just the post-evaluation version?
Do..While
The structure of the Do..While loop is as follows:
Do ; statement 1 ; -- statement n ; While condition ;
Condition compares 2 values, e.g., a variable and a constant, and branches execution back to statement 1 if the condition is evaluated to be true. The available comparison operators are:
< - less than > - greater than <> - not equal o What are all the operators?
For..Next
The structure of the For..Next loop is as follows:
For I = 1 to M; statement 1 ; -- statement n ; Next I ;
This example performs the sequence of statement between the the For and Next statements for M iterations.
Statement Reference
Do
FindLoc
For
Get
GetDString
GoTo
IDString
ImpType
Log
Log name offset size unknown1 unknown2 ;
The Log statement signals to the interpreting engine that it has found the information for a particular file including the file's name, absolute offset within the GRAF file, and the number of contiguous bytes it occupies in the GRAF.
- name: A text string indicating the filename. If the filename can not be determined, set this to NULL ("").
- offset: The absolute offset of the file within the GRAF.
- size: The number of contiguous bytes that the file occupies in the GRAF beginning from offset.
- unknown1:
- unknown2:
obviously, those last 2 arguments are a bit fuzzy to me; someone please help me out on those