on a single line separated by semicolons. For instance: TYPE employee_record=name:STRING;number(2):INTEGER;former:BOOLEAN defines an employee record type named employee_record with three elements, name, number and former. The employee_record type can now be used in a definition like any other type, for instance, DIM employees(100):employee_record, which defines an array of 100 employee_record's. The elements are accessed in code using dot notation, for instance, employees(50).name="Bob". Runtime Editing Line numbers were used in most BASIC dialects primarily as a way to support the editor. Users would edit particular lines of code by typing a number, with the text following either adding to or replacing the lines already in memory. As every line of code had a number, this also made them suitable for indicating the target of a GOTO or GOSUB, compared to other languages like FORTRAN where a separate "line label" was used for this purpose. BASIC09 did not normally use line numbers, so its editor had to be modified to allow the user to edit lines without referring to them by number. However, BASIC09 did not assume any sort of full-screen capability, so using cursor keys was not an option. Instead, the system had a separate editor prompt and allowed the user to move about using the and keys, moving forward or backward one line at a time. To insert a new line of code without a line number, the user left a blank at the start of the statement. Note that the language is case sensitive for user-provided values like procedure and variable names, but not for keywords. Keywords typed into the editor in lower case will be shown in upper case when the program is LISTed. BASIC09 allowed multiple statements on a single line of code, but used the as a separator instead of the used in most dialects. This is because it used the colon in the := assignment operator, which was in addition to the normal =. := was identical in effect to =, but made the difference between assignments and comparisons more obvious. Compiler The internal multipass compiler converts BASIC09 source code into a tokenized, optimized, bytecode, called I-code. I-code differs from the more traditional tokenizing approach found in most BASICs in that a number of items were placed directly in memory instead of using references that then had to be looked up. For instance, in MS-based interpreters, a variable reference in code is left in string