File ENDLINK.C:
 If (link_step Exceeds 4) AndIf (obj_file_list.first IsNotNull)
   TraverseList(obj_file_list, file)
File INITLINK.C:
 obj_extension_string     = make_constant_string(Addr(static_pool),
 current_record_header     = (obj_record_header_ptr) object_file_element;
 last_LIDATA_record_header = (obj_record_header_ptr) last_LIDATA_record;
File TMODULE.C:
     obj_t_module::      obj_THEADR obj_seg_grp {obj_component} obj_modtail
     obj_seg_grp::       {obj_LNAMES | obj_SEGDEF | obj_EXTDEF}
                         {obj_TYPDEF | obj_EXTDEF | obj_GRPDEF}
     obj_component::     obj_data | obj_debug_record
     obj_data::          obj_content_def | obj_thread_def | obj_COMDEF |
                         obj_TYPDEF | obj_PUBDEF | obj_EXTDEF |
                         obj_FORREF | obj_MODPUB | obj_MODEXT
     obj_debug_record::  obj_LINNUM
     obj_content_def::   obj_data_record {obj_FIXUPP}
     obj_thread_def::    obj_FIXUPP  (containing only thread fields)
     obj_data_record::   obj_LIDATA | obj_LEDATA
     obj_modtail::       obj_MODEND
  |                               obj_COMDEF                                |
bit_16 obj_COMDEF()
 While obj_ptr.b8 IsNot end_of_record.b8
   len         = obj_name_length();
     far_to_lower(BytePtr(obj_ptr.b8), len);
   pub         = lookup_public(len, obj_ptr.b8, 0);
   obj_ptr.b8 += len;
   obj_name_length();  /* Eat the type index. */
   element_type  = *obj_ptr.b8++;
      element_count = obj_leaf_descriptor();
      element_size  = obj_leaf_descriptor();
      element_size  = obj_leaf_descriptor();
 obj_next_record();
  |                               obj_COMENT                                |
bit_16 obj_COMENT()
 obj_ptr.b8++;
 comment_class = *obj_ptr.b8++;
  |                             obj_component                               |
/* obj_component:: obj_data | obj_debug_record */
bit_16 obj_component()
 If obj_data() OrIf obj_debug_record()
  |                            obj_content_def                              |
/* obj_content_def:: obj_data_record {obj_FIXUPP} */
bit_16 obj_content_def()
 If Not obj_data_record()
 While obj_FIXUPP()
  |                               obj_data                                  |
/* obj_data:: obj_content_def |
              obj_thread_def  |
              obj_TYPDEF      |
              obj_PUBDEF      |
              obj_EXTDEF */
bit_16 obj_data()
 If obj_content_def() OrIf
    obj_thread_def()  OrIf
    obj_TYPDEF()      OrIf
    obj_PUBDEF()      OrIf
    obj_EXTDEF()      OrIf
    obj_FORREF()      OrIf
    obj_COMDEF()      OrIf
    obj_MODEXT()      OrIf
    obj_MODPUB()
  |                            obj_data_record                              |
/*  obj_data_record:: obj_LIDATA | obj_LEDATA */
bit_16 obj_data_record()
 If obj_LIDATA() OrIf obj_LEDATA()
  |                           obj_debug_record                              |
/* obj_debug_record:: obj_LINNUM */
bit_16 obj_debug_record()
 If obj_LINNUM()
  |                               obj_EXTDEF                                |
bit_16 obj_EXTDEF()
 While obj_ptr.b8 IsNot end_of_record.b8
   len         = obj_name_length();
     far_to_lower(BytePtr(obj_ptr.b8), len);
   pub         = lookup_public(len, obj_ptr.b8, 0);
   obj_ptr.b8 += len;
   obj_name_length();  /* Eat the type index. */
 obj_next_record();
  |                               obj_FIXUPP                                |
bit_16 obj_FIXUPP()
 While obj_ptr.b8 IsNot end_of_record.b8
   If (*obj_ptr.TRD_DAT).type_fixupp_record IsZero
     obj_FIXUPP_thread();
     obj_FIXUPP_fixup();
 obj_next_record();
  |                           obj_FIXUPP_fixup                              |
void obj_FIXUPP_fixup()
 temp                  = obj_ptr.b8[0];
 obj_ptr.b8[0]         = obj_ptr.b8[1];
 obj_ptr.b8[1]         = temp;
 LOCAT                 = *obj_ptr.LOCAT++;
 FIX_DAT               = *obj_ptr.FIX_DAT++;
      fixup.frame_referent = (void     *) snames[obj_index_segment()];
      fixup.frame_referent = (void     *) gnames[obj_index_group()];
      fixup.frame_referent = (void     *) externals[obj_index_external()];
       (void     *) (Bit_32(*obj_ptr.b16++) ShiftedLeft 4);
      fixup.target_referent = (void     *) snames[obj_index_segment()];
      fixup.target_referent = (void     *) gnames[obj_index_group()];
      fixup.target_referent = (void     *) externals[obj_index_external()];
       (void     *) (Bit_32(*obj_ptr.b16++) ShiftedLeft 4);
     fixup.target_offset = *obj_ptr.b32++;
     fixup.target_offset = *obj_ptr.b16++;
     obj_fixup_LIDATA();
  |                            obj_fixup_LIDATA                             |
void obj_fixup_LIDATA()
obj_ptr_type                           old_obj_ptr;
 old_obj_ptr   = obj_ptr;
 obj_ptr.b8    = Last_LIDATA_record_header.variant_part;
 obj_index_segment();
 obj_ptr.b16++;
 While obj_ptr.b8 IsNot end_of_last_LIDATA_record.b8
   obj_fixup_LIDATA_IDB();
 obj_ptr = old_obj_ptr;
  |                           obj_fixup_LIDATA_IDB                          |
void obj_fixup_LIDATA_IDB()
 repeat_count = *obj_ptr.b16++;  LIDATA_index += sizeof(bit_16);
 block_count  = *obj_ptr.b16++;  LIDATA_index += sizeof(bit_16);
 content      = obj_ptr.b8;
     obj_ptr.b8 = content;
       obj_fixup_LIDATA_IDB();
     obj_ptr.b8   = content;
     len          = Bit_16(*obj_ptr.b8++);  LIDATA_index += sizeof(bit_8);
   obj_ptr.b8    += len;
  |                           obj_FIXUPP_thread                             |
void obj_FIXUPP_thread()
 TRD_DAT = *obj_ptr.TRD_DAT++;
       (void     *) snames[obj_index_segment()];
       (void     *) gnames[obj_index_group()];
       (void     *) externals[obj_index_external()];
       (void     *) (Bit_32(*obj_ptr.b16++) ShiftedLeft 4);
       (void     *) snames[obj_index_segment()];
       (void     *) gnames[obj_index_group()];
       (void     *) externals[obj_index_external()];
       (void     *) (Bit_32(*obj_ptr.b16++) ShiftedLeft 4);
  |                               obj_FORREF                                |
bit_16 obj_FORREF()
 segment_index = obj_index_segment();
                 BytePtr(obj_ptr.b8),
 obj_next_record();
  |                           obj_generate_segment                          |
lseg_ptr obj_generate_segment(lname_entry_ptr segment_lname,
  |                               obj_GRPDEF                                |
bit_16 obj_GRPDEF()
 group_index         = obj_index_LNAME();
 While obj_ptr.b8 IsNot end_of_record.b8
   If *obj_ptr.b8++ IsNot 0xFF
   segment_index = obj_index_segment();
 obj_next_record();
  |                           obj_index_external                            |
bit_16 obj_index_external()
 If *obj_ptr.b8 LessThan 128
   index = Bit_16(*obj_ptr.b8++);
   index = (Bit_16(*obj_ptr.b8++ - 128) ShiftedLeft 8) +
           Bit_16(*obj_ptr.b8++);
  |                             obj_index_group                             |
bit_16 obj_index_group()
 If *obj_ptr.b8 LessThan 128
   index = Bit_16(*obj_ptr.b8++);
   index = (Bit_16(*obj_ptr.b8++ - 128) ShiftedLeft 8) +
           Bit_16(*obj_ptr.b8++);
  |                             obj_index_LNAME                             |
bit_16 obj_index_LNAME()
 If *obj_ptr.b8 LessThan 128
   index = Bit_16(*obj_ptr.b8++);
   index = (Bit_16(*obj_ptr.b8++ - 128) ShiftedLeft 8) +
           Bit_16(*obj_ptr.b8++);
  |                           obj_index_segment                             |
bit_16 obj_index_segment()
 If *obj_ptr.b8 LessThan 128
   index = Bit_16(*obj_ptr.b8++);
   index = (Bit_16(*obj_ptr.b8++ - 128) ShiftedLeft 8) +
           Bit_16(*obj_ptr.b8++);
  |                         obj_iterated_data_block                         |
void obj_iterated_data_block()
 repeat_count = *obj_ptr.b16++;
 block_count  = *obj_ptr.b16++;
   content = obj_ptr.b8;
     obj_ptr.b8 = content;
       obj_iterated_data_block();
   len = Bit_16(*obj_ptr.b8++);
              obj_ptr.b8, len);
   obj_ptr.b8 += len;
  |                     obj_iterated_data_block_length                      |
bit_32 obj_iterated_data_block_length()
 repeat_count = *obj_ptr.b16++;
 block_count  = *obj_ptr.b16++;
     length     += Bit_32(repeat_count) * obj_iterated_data_block_length();
   len         = Bit_16(*obj_ptr.b8++);
   obj_ptr.b8 += len;
  |                           obj_leaf_descriptor                           |
bit_32 obj_leaf_descriptor()
 element_size = *obj_ptr.b8++;
     return(Bit_32(*obj_ptr.b16++));
       obj_ptr.b8--;
       return((*obj_ptr.b32++) And 0x00FFFFFFL);
         return(*obj_ptr.b32++);
  |                               obj_LEDATA                                |
bit_16 obj_LEDATA()
 segment_index           = obj_index_segment();
   offset             = *obj_ptr.b32++;
   offset             = *obj_ptr.b16++;
   far_move(Addr(Lseg.data[offset]), obj_ptr.b8, len);
                   BytePtr(obj_ptr.b8),
 obj_next_record();
  |                               obj_LIDATA                                |
bit_16 obj_LIDATA()
          Current_record_header.rec_len + sizeof(obj_record_header_type) - 1);
 segment_index           = obj_index_segment();
   last_LxDATA_offset      = *obj_ptr.b32++;
   last_LxDATA_offset      = *obj_ptr.b16++;
 LIDATA_length           = obj_LIDATA_length();
   While obj_ptr.b8 IsNot end_of_record.b8
   obj_iterated_data_block();
                   BytePtr(obj_ptr.b8),
 obj_next_record();
  |                           obj_LIDATA_length                             |
bit_32 obj_LIDATA_length()
 start  = obj_ptr.b8;
 While obj_ptr.b8 IsNot end_of_record.b8
   length += obj_iterated_data_block_length();
 obj_ptr.b8 = start;
  |                               obj_LINNUM                                |
bit_16 obj_LINNUM()
 obj_next_record();
  |                               obj_LNAMES                                |
bit_16 obj_LNAMES()
 While obj_ptr.b8 IsNot end_of_record.b8
   lnames[++n_lnames] = obj_name();
 obj_next_record();
  |                               obj_MODEND                                |
bit_16 obj_MODEND()
 MOD_TYP = *obj_ptr.MOD_TYP++;
 END_DAT = *obj_ptr.FIX_DAT++;
       (void     *) snames[obj_index_segment()];
       (void     *) gnames[obj_index_group()];
       (void     *) externals[obj_index_external()];
       (void     *) (Bit_32(*obj_ptr.b16++) ShiftedLeft 4);
       (void     *) snames[obj_index_segment()];
       (void     *) gnames[obj_index_group()];
       (void     *) externals[obj_index_external()];
       (void     *) (Bit_32(*obj_ptr.b16++) ShiftedLeft 4);
     start_address.target_offset = *obj_ptr.b32++;
     start_address.target_offset = *obj_ptr.b16++;
  |                               obj_MODEXT                                |
bit_16 obj_MODEXT()
 While obj_ptr.b8 IsNot end_of_record.b8
   len         = obj_name_length();
     far_to_lower(BytePtr(obj_ptr.b8), len);
   pub         = lookup_public(len, obj_ptr.b8, tmodule_number);
   obj_ptr.b8 += len;
   obj_name_length();  /* Eat the type index. */
 obj_next_record();
  |                               obj_MODPUB                                |
bit_16 obj_MODPUB()
 group_index = obj_index_group();
 segment_index = obj_index_segment();
   frame = *obj_ptr.b16++;
 While obj_ptr.b8 IsNot end_of_record.b8
   len = obj_name_length();
     far_to_lower(BytePtr(obj_ptr.b8), len);
   pub = lookup_public(len, obj_ptr.b8, tmodule_number);
   obj_ptr.b8 += len;
       obj_ptr.b32++;      /* Eat offset. */
       obj_ptr.b16++;      /* Eat offset. */
     obj_name_length();  /* Eat type index. */
       Pub.Internal.offset  = *obj_ptr.b32++;
       Pub.Internal.offset  = *obj_ptr.b16++;
     obj_name_length();  /* Eat type index. */
 obj_next_record();
  |                              obj_modtail                                |
/* obj_modtail:: obj_MODEND */
bit_16 obj_modtail()
 If obj_MODEND()
  |                               obj_name                                  |
lname_entry_ptr obj_name()
 len = obj_name_length();
     far_to_lower(BytePtr(obj_ptr.b8), len);
   name        = lookup_lname(len, obj_ptr.b8);
   obj_ptr.b8 += len;
  |                            obj_name_length                              |
bit_16 obj_name_length()
 If *obj_ptr.b8 LessThan 128
   return(Bit_16(*obj_ptr.b8++));
   return((Bit_16(*obj_ptr.b8++ - 128) ShiftedLeft 8) +
          (Bit_16(*obj_ptr.b8++)));
  |                             obj_next_record                             |
void obj_next_record()
   file_read(object_file_element,  sizeof(obj_record_header_type) - 1);
     file_read(object_file_element,  sizeof(obj_record_header_type) - 1);
                           Bit_32(sizeof(obj_record_header_type)-1);
                      sizeof(obj_record_header_type)-1, \
   obj_ptr.b8 = Current_record_header.variant_part;
   RepeatIf obj_COMENT()
  |                               obj_PUBDEF                                |
bit_16 obj_PUBDEF()
 group_index = obj_index_group();
 segment_index = obj_index_segment();
   frame = *obj_ptr.b16++;
 While obj_ptr.b8 IsNot end_of_record.b8
   len = obj_name_length();
     far_to_lower(BytePtr(obj_ptr.b8), len);
   pub = lookup_public(len, obj_ptr.b8, 0);
   obj_ptr.b8 += len;
       obj_ptr.b32++;      /* Eat offset. */
       obj_ptr.b16++;      /* Eat offset. */
     obj_name_length();  /* Eat type index. */
       Pub.Internal.offset  = *obj_ptr.b32++;
       Pub.Internal.offset  = *obj_ptr.b16++;
     obj_name_length();  /* Eat type index. */
 obj_next_record();
  |                               obj_SEGDEF                                |
bit_16 obj_SEGDEF()
 acbp    = *obj_ptr.acbp++;
   address  = (Bit_32(*obj_ptr.b16++) ShiftedLeft 4L);  /* Frame */
   address += Bit_32(*obj_ptr.b8++);                    /* Offset */
   length = *obj_ptr.b32++;
   length = Bit_32(*obj_ptr.b16++);
 segment_index         = obj_index_LNAME();
 class_lname           = lnames[obj_index_LNAME()];
 lseg = obj_generate_segment(segment_lname,
 obj_next_record();
  |                              obj_seg_grp                                |
/* obj_seg_grp:: {obj_LNAMES | obj_SEGDEF | obj_EXTDEF}
                 {obj_TYPDEF | obj_EXTDEF | obj_GRPDEF} */
bit_16 obj_seg_grp()
 While obj_LNAMES() OrIf obj_SEGDEF() OrIf obj_EXTDEF()
 While obj_TYPDEF() OrIf obj_EXTDEF() OrIf obj_GRPDEF()
  |                               obj_THEADR                                |
bit_16 obj_THEADR()
 tmodule_name = obj_name();
 obj_next_record();
  |                             obj_thread_def                              |
/* obj_thread_def:: obj_FIXUPP  (containing only thread fields) */
bit_16 obj_thread_def()
 If obj_FIXUPP()
  |                              obj_tmodule                                |
/* obj_t_module:: obj_THEADR obj_seg_grp {obj_component} obj_modtail */
bit_16 obj_tmodule()
 obj_next_record();
 If Not obj_THEADR()
 If Not obj_seg_grp()
 While obj_component()
 If Not obj_modtail()
  |                               obj_TYPDEF                                |
bit_16 obj_TYPDEF()
 obj_next_record();
File FIXUP.C:
 obj_ptr.b8       = object_file_element;
 end_of_record.b8 = Addr(obj_ptr.b8[len]);
 size             = *obj_ptr.b8++;
    While obj_ptr.b8 IsNot end_of_record.b8
        offset = *obj_ptr.b32++;
        value  = *obj_ptr.b32++;
        offset = *obj_ptr.b16++;
        value  = *obj_ptr.b16++;
    While obj_ptr.b8 IsNot end_of_record.b8
        offset = *obj_ptr.b32++;
        value  = *obj_ptr.b32++;
        offset = *obj_ptr.b16++;
        value  = *obj_ptr.b16++;
    While obj_ptr.b8 IsNot end_of_record.b8
        offset = *obj_ptr.b32++;
        value  = *obj_ptr.b32++;
        offset = *obj_ptr.b16++;
        value  = *obj_ptr.b16++;
 repeat_count = *obj_ptr.b16++;
 block_count  = *obj_ptr.b16++;
   content = obj_ptr.b8;
     obj_ptr.b8 = content;
   len = Bit_16(*obj_ptr.b8++);
     far_move(lseg_data_ptr, obj_ptr.b8, len);
   obj_ptr.b8 += len;
 obj_ptr.b8       = object_file_element;
 end_of_record.b8 = Addr(obj_ptr.b8[temp_file_header.rec_len]);
 While obj_ptr.b8 IsNot end_of_record.b8
File LIBRARY.C:
     obj_tmodule();
File GLOBALS.C:
obj_record_header_ptr                  current_record_header;
obj_ptr_type                           end_of_record;
obj_ptr_type                           end_of_last_LIDATA_record;
obj_record_header_ptr                  last_LIDATA_record_header;
string_ptr                             obj_extension_string;
file_info_list                         obj_file_list = {Null, Null};
obj_ptr_type                           obj_ptr;
File OBJECT.C:
file_info_ptr                          obj_file;
 TraverseList(obj_file_list, obj_file)
   file_open_for_read(obj_file);
   obj_tmodule();
File ORDER.C:
       obj_generate_segment(generated_lname,
   lseg = obj_generate_segment(c_common_lname,
     lseg = obj_generate_segment(FAR_BSS_lname,
   lseg = obj_generate_segment(HUGE_BSS_lname,
File USERINP.C:
 default_extension = obj_extension_string;
 process_user_input_files(Addr(obj_file_list),
 copy_string(default_filename, string((*(obj_file_list.first)).filename));
