procedures. In addition to code in the workspace, if the program invokes RUN with a procedure name that could not be found, it would then look for a disk file with the same name and load and run that file. This worked not only with BASIC09 code, but also any other executable program, including machine language files. This meant that BASIC09 could easily call system routines. In addition to RUN, other common BASIC commands likewise used names. For instance, LIST bob would print out the source code ("list") the procedure named "bob", while LIST* prints out all of the procedures currently in memory. The prettyprinted output from LIST could be redirected to a file or a printer with a shell-like notation, e.g. LIST bob >/p. One could also SAVE and LOAD procedures from storage. Structured programming In addition to the organizational properties of the PROCEDURE, BASIC09 also included a number of extensions to the flow control statements found in BASIC to provide more structure. For instance, the IF statement could be used in the traditional IF...THEN format on a single line, or it could be used in a structured multi-line format: IF x>10 THEN PRINT "x is larger than 10" ELSE PRINT "x is smaller than 10" ENDIF FOR/NEXT loops naturally have a structured format as the NEXT can be placed on any line, but BASIC09 also added WHILE/ENDWHILE and REPEAT/UNTIL for additional clarity when working with non-indexed loops. It also included the center-exit LOOP/ENDLOOP which used the EXITIF statement for testing anywhere in the loop's body. Data types BASIC09 included several built-in data types. In addition to the traditional string (STRING) and 40-bit floating point (REAL) types found in most BASICs of the era, it also included the 16-bit signed INTEGER, the 8-bit unsigned BYTE, and the logical BOOLEAN type. The BOOLEAN types were not packed into bytes, a single BOOLEAN used an entire 8-bit byte to store a single value. The language provided separate bytewise boolean operators for bitwise operations on BYTEs and INTEGERs. In contrast to other BASICs that also operated different base types, BASIC09 did not "decorate" the variable name to indicate the type, and instead used the DIM for definitions; for instance, DIM a,b:BOOLEAN to declare two BOOLEAN variables, or DIM c(5):INTEGER for an array of five INTEGERs. Additionally, BASIC09 included the TYPE keyword, which allowed compound types to be defined, with each "element" listed