Using DATA statements in libraries

by Richard Russell, March 2011

Because you cannot use line numbers or labels in libraries (or other INSTALLed modules), the conventional forms of the RESTORE statement cannot be used. At first sight it might appear that this precludes the use of DATA statements in libraries, but in fact they can be used by means of the relative version RESTORE +.

For example the following code could be placed in a library:

        DEF PROCrestore
        RESTORE +1
        ENDPROC
        DATA Here,are,some,data,items,in,a,library
        DATA Here,is,some,more,data

Calling PROCrestore moves the data pointer so that the next items to be READ will be taken from the subsequent DATA statements:

        PROCrestore
        READ A$,B$,C$,D$

(this code could be in the main program or in a library).

Note the use of RESTORE +1 rather than RESTORE +2, as might superficially seem more correct. This ensures that the code will work correctly even if the library is crunched using the concatenate lines option (resulting in the ENDPROC being moved onto the same line as the RESTORE).

If you find that disconcerting you could always move the ENDPROC until after the DATA statements:

        DEF PROCrestore
        RESTORE +1
        DATA Here,are,some,data,items,in,a,library
        DATA Here,is,some,more,data
        ENDPROC