90 of 172
ZBasic Language Reference 83 ZX Microcontroller Family an enumeration, you define a structure by specifying the consituent elements. The syntax for defining a structure at the module level is: [Public | Private] Structure <name> <member-definition> ... End Structure If neither Private nor Public is specified, the structure definition is public. The ellipsis (…) in the syntax above connotes that there may be zero or more additional member definitions. A structure definition must have least one member and may have a practically unlimited number of members. A structure may be defined within a subroutine or function, either at the outer level or within any inner block. In this case, the Public and Private keywords have no useful purpose and are therefore not allowed. After a structure has been defined, the structure name may be used as a <type> in a variable or structure definition. A structure may also be used as the <type> in the formal parameter list of a subroutine or function definition. Note, however, that a Public subroutine or function cannot be defined with a parameter that is a Private Structure. A <member-definition> has the same syntax as that used to define a variable. As with an ordinary variable, a member may be a single data element or it may be an array. The syntax for a member definition is given by the two descriptions below – the first being for a non-array member and the second being for a member that is an array. {Public | Private | Dim} <name> As <type> or {Public | Private | Dim} <name>(<dim-spec-list>) As <type> As with ordinary variables, Dim has exactly the same effect as Private, i.e., the member will only be directly accessible to code within the module. In contrast, a Public member may be accessed by code outside of the module in which the structure is defined. The names of the members of each structure defined may be any legal identifier however a particular name may be used only once in each structure. The use of a name as a member in one structure does not preclude it from also being used as a member name in a different structure or as a variable, constant, parameter, etc. This circumstance is a result of the ZBasic scoping rules - a structure definition is an independent name scope. The <type> specified for a member may be any of the pre-defined types like Integer, Byte, String, etc. or it may be a user-defined type like an enumeration or another structure. The amount of space required for each member in a structure is the same as for a variable of the same type (but see the discussion below relating to sub-byte types and alignment). It is important to note that recursive structure definitions, with members that are or contain (directly or indirectly) the structure being defined, are not allowed. Examples Structure MyDate Public year as UnsignedInteger Public month as Byte Public day as Byte End Structure Structure MyTime Public hour as Byte Public minute as Byte Public seconds as Single End Structure