
{ A CLT$SCL_PROCEDURE_HEADER is the first thing in a CLT$SCL_PROCEDURE
{ SEQuence is used to hold and SCL command or function procedure on an object
{ library
{
{ The COMMAND_OR_FUNCTION_NAME field of the header is the first name from the
{ declaration for the procedure.
{
{ The INITIAL_LINE_FOR_ECHOING field of the header is a relative pointer to a
{ line of text that can be used when the proc is executed for echoing in lieu
{ of echoing the declaration header.  This line immediately follows the header.
{
{ The PARAMETER_DESCRIPTION_TABLE field of the header is a relative pointer to
{ the procedure's PDT which immediately follows the initial line for echoing.
{
{ The CHECK_PARAMETER_STATEMENTS field of the header is a relative pointer to
{ an array that follows the PDT, each element of which is a relative pointer to
{ the clt$input_data for the optional CHECK / CHECEND statement for the
{ corresponding procedure parameter.
{
{ The last thing in the clt$scl_procedure is the clt$input_data for the entire
{ procedure.
{
{ The ENTIRE_PROCEDURE field of the header is a relative pointer to the
{ clt$input_data for all the lines of the procedure, which is the last thing in
{ the clt$scl_procedure.  The pointers to clt$input_data for the parameter
{ CHECK / CHECKEND statements mentioned above, and the other pointer in the
{ header actually point to subsets of the data pointed to by this field.
{
{ The PROCEDURE_DECLARATION field of the header is a relative pointer to the
{ clt$input_data for the lines that contain the procedure's declaration.
{
{ The CHECK_STATEMENT field of the header is a relative pointer to the
{ clt$input_data for the optional CHECK / CHECEND statement for the procedure
{ as a whole.
{
{ The PROCEDURE_BODY field of the header is a relative pointer to the
{ clt$input_data for the lines that comprise the body of the procedure,
{ including the PROCEND or FUNCEND statement (if present).
{
{ The header also contains the information necessary to distinguish the above
{ described format for a clt$scl_procedure from that used prior to NOS/VE
{ release 1.3.1.
{
{ The old format consisted of just the "raw" data for the procedure as a series
{ of lines.  Each line was represented by a clt$command_line_size followed by
{ the line's text of that length.
{
{ To distinguish between the old format and that described above, use is made
{ of the fact that for procedures in the old format, their declaration lines
{ could not exceed 256 (osc$max_string_size) characters in length.  However,
{ the clt$command_line_size type used for the length of each line occupies two
{ bytes and can represent lengths of up to 65535 (clc$max_command_line_size).
{ The first byte of a clt$scl_procedure_header (the IDENTIFYING_FIRST_BYTE
{ field) is always set to its maximum value, 0FF(16), a value which could not
{ occur in the old format.  The VERSION field of the header identifies the
{ version of the clt$scl_procedure format subsequent to release 1.3.1.  (This
{ allows for future changes to the format in an upward compatible fashion.)

  TYPE
    clt$scl_procedure_header = record
      identifying_first_byte: 0 .. 0ff(16),
      version: clt$declaration_version,
      command_or_function_name: clt$command_name,
      initial_line_for_echoing: REL (clt$scl_procedure) ^clt$command_line,
      parameter_description_table: REL (clt$scl_procedure)
            ^clt$parameter_description_table,
      check_parameter_statements: REL (clt$scl_procedure) ^array [1 .. * ] of
            REL (clt$scl_procedure) ^clt$input_data,
      entire_procedure: REL (clt$scl_procedure) ^clt$input_data,
      procedure_declaration: REL (clt$scl_procedure) ^clt$input_data,
      check_statement: REL (clt$scl_procedure) ^clt$input_data,
      procedure_body: REL (clt$scl_procedure) ^clt$input_data,
    recend;

*copyc clt$command_line
*copyc clt$command_name
*copyc clt$declaration_version
*copyc clt$input_data
*copyc clt$parameter_description_table
*copyc clt$scl_procedure
