not part of the language itself, handled instead by placing the compiler directive at the top of the file. The language provided the keyword to provide an easy method for declaring external procedures, thus avoiding the need for the programmer to declare the procedure parameter types and order. All user-accessible system service declarations (such as file system, process handling, communications, and the like) were available through this mechanism, and users could also add their own procedure declarations to the system's list. This is similar to, but more refined and narrower scope than the C-language #include mechanism. In contrast to Pascal, where and were separate concepts, SPL uses a more C-like approach where any can be prefixed with a type to turn it into a function. In keeping with the syntax of other ALGOL-like languages, the types of the parameters were listed after the name, not part of it. For instance: INTEGER PROCEDURE FACT(N); VALUE N; INTEGER N; Declares a function FACT that takes a value N that is an integer. The indicates that this variable is "pass-by-value" and therefore changes to it inside the procedure will not be seen by the caller. The procedure sets its return value by an assignment statement to its name: FACT := expression; Although frowned upon, ALGOL and Pascal allowed code to be labeled using a leading name ending with a colon, which could then be used for the target of loops and statements. One minor difference is that SPL required the label names to be declared in the variable section using the keyword. SPL added to this concept with the statement which allowed these labels to be further defined as "entry points" that could be accessed from the command line. Labels named in the entry statement(s) were exposed to the operating system and could be called from the RUN command. For instance, one could write a program containing string functions to convert to uppercase or lowercase, and then provide ENTRY points for these two. This could be called from the command line as . Data types Where SPL differs most noticeably from ALGOL is that its data types are very machine specific, based on the 3000's 16-bit big endian word format. The type is a 16-bit signed type, with 15 bits of value and the least significant bit as the sign. is a 32-bit integer, not a floating-point type. is a 32-bit floating-point value