A compilation unit is a unit of VSI Pascal code that can be compiled independently; the term refers to either a program or a module. Both programs and modules have declaration sections but only programs have executable sections. A program can be compiled, linked, and run by itself, but a module cannot be executed unless it is linked with a main program written in PASCAL, or another language. A module may contain routine declarations but these cannot be executed independently of a program.
1 – PROGRAM
A program is a set of instructions that can be compiled and executed by itself. Syntax: [[attribute-list]] PROGRAM comp-unit-identifier [[({file-identifier},...)]]; [[declaration-section]] BEGIN {statement};... END. The 'attribute-list' is one or more identifiers that provide additional information about the compilation unit. The 'comp-unit-identifier' specifies the name of the program. The identifier appears only in the heading and has no other purpose within the compilation unit. The 'file-identifier' specifies the names of any file variables associated with the external files used by the compilation unit. The 'declaration-section' is a VSI Pascal declaration section. The 'statement' is any VSI Pascal statement. The program heading includes all information preceding the program block. If your program contains any input or output routines, you must list all the external file variables that you are using in the compilation unit's heading. File variables listed in a heading must also be declared locally in the block, except for the predeclared file variables INPUT and OUTPUT. The INPUT identifier corresponds to a predefined external file that accepts input from the default device (usually, your terminal); the OUTPUT identifier corresponds to a predefined external file that sends output to the default device (usually, your terminal). If you redeclare INPUT or OUTPUT in a nested block, you lose access to the default input or output devices.
2 – MODULE
A module is a set of instructions that can be compiled, but not executed, by itself. Module blocks contain only a declaration section and TO BEGIN DO and TO END DO sections. Syntax: [[attribute-list]] MODULE comp-unit-identifier [[({file-identifier},...)]]; [[declaration-section]] [[TO BEGIN DO statement;]] [[TO END DO statement;]] END. The 'attribute-list' is one or more identifiers that provide additional information about the compilation unit. The 'comp-unit-identifier' specifies the name of the program. The identifier appears only in the heading and has no other purpose within the compilation unit. The 'file-identifier' specifies the names of any file variables associated with the external files used by the compilation unit. The 'declaration-section' is a VSI Pascal declaration section. The 'statement' is any VSI Pascal statement. Each module must be in a separate file; you cannot place multiple modules (or a module and a program) in the same file. You can compile modules and a program together or separately (the syntax of compilation depends on the operating system command-line interpreter you are using). The module syntax of VSI Pascal is slightly different than that of Extended Pascal. However, the concepts in both languages are the same. The module heading includes all information preceding the module block. If your program contains any input or output routines, you must list all the external file variables that you are using in the compilation unit's heading. File variables listed in a heading must also be declared locally in the block, except for the predeclared file variables INPUT and OUTPUT. The INPUT identifier corresponds to a predefined external file that accepts input from the default device (usually, your terminal); the OUTPUT identifier corresponds to a predefined external file that sends output to the default device (usually, your terminal). If you redeclare INPUT or OUTPUT in a nested block, you lose access to the default input or output devices.