home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 18 REXX / 18-REXX.zip / listea.zip / LISTEA.CMD next >
OS/2 REXX Batch file  |  1995-03-27  |  70KB  |  1,017 lines

  1. /*------------------------------------------------------------------------*\
  2. |                                                                          |
  3. |           LISTEA.CMD   - Version 1.3 - Version Date 1995-03-27           |
  4. |               Copyright (C) 1994-95 by C F S Nevada, Inc.                |
  5. |                                                                          |
  6. |                  by Dick Goran  - Voice    702-732-9616                  |
  7. |                                 - FAX      702-732-3847                  |
  8. |                                 - CIS      71154,2002                    |
  9. |                                 - Internet 71154.2002@compuserve.com     |
  10. |                                                                          |
  11. | ------------------------------------------------------------------------ |
  12. |  REXXLIB.DLL  - OS/2 REXX external function library                      |
  13. |                 (c) Copyright 1992-94 Quercus Systems                    |
  14. \*------------------------------------------------------------------------*/
  15. /*
  16.      This program will build a file, LISTEA.TXT, in the same directory
  17.      where this program resides. This file will contain a text listing
  18.      of all of the Extended Attributes (in both hex and character
  19.      notation) for all directories and files in the object system
  20.      except that REXX metafiles are not detailed and non-local drives
  21.      are ignored.
  22.  
  23.      Two temporary work files, SYS001 and SYS002, area created in the
  24.      same directory where LISTEA.CMD resides while the program is
  25.      running. They are erased on completion.
  26.  
  27.      This program may take a considerable amount of time to run
  28.      depending on the speed of the system and the number of files to
  29.      be processed.
  30.  
  31.      The file created by this program, LISTEA.TXT, will be large (2 MB
  32.      - 3 MB) and can be viewed with any viewer or ASCII editor capable
  33.      of handling large files.
  34.  
  35.      An index list of the EA names encountered is included at the end
  36.      of LISTEA.TXT with the name of a file which contains this EA.
  37.      Also, the number of times that that EA type occurs in the system
  38.      is indicated.
  39.  
  40. Updates:
  41.          94/01/12 - Eliminate non LOCAL drives
  42.          94/01/21 - Minor changes
  43.          94/02/04 - Check floppies & check for NOTREADY with DOSDISK()
  44.          94/04/07 - Do not put unused drives in title line
  45.    1.1   94/12/31 - Warp DIR output variances
  46.    1.2   95/02/18 - NLS date parsng variances
  47.    1.3   95/03/27 - Set appropriate DIRCMD value to prevent user
  48.                        established conflicts
  49.                     Shorten data shown for .ASSOCTABLE
  50.                     Handle .ICON1 & .IBMLT.THUMBNAIL like .ICON
  51.                     Ignore ?:\OS2\ARCHIVES\*.*
  52. */
  53. parse Version         REXX_Version .                              /* 0053 */
  54. parse Source          OS_Name,                                    /* 0054 */
  55.                       Calling_Environment,                        /* 0055 */
  56.                       program_path_and_name                       /* 0056 */
  57. GBL.environment     = 'OS2ENVIRONMENT'                            /* 0057 */
  58. GBL.boot_drive      = LEFT( VALUE( 'RUNWORKPLACE',, GBL.environment ), 2 )
  59. GBL.program_name    = FILESPEC( 'N', program_path_and_name )      /* 0059 */
  60. GBL.program_path    = FILESPEC( 'D', program_path_and_name ) ||,  /* 0060 */
  61.                       FILESPEC( 'P', program_path_and_name )      /* 0061 */
  62. GBL.program_version = 1.3           /* version / mod of this program */
  63. call TIME 'E'                       /* set elapsed timer - sssss.uuuuu */
  64.                                                                   /* 0064 */
  65. say 'Begin' GBL.program_name 'at' TIME('N')                       /* 0065 */
  66. call REGISTER_REQUIRED_FUNCTIONS                                  /* 0066 */
  67.                                                                   /* 0067 */
  68.    SIGNAL ON ERROR                  /* trap object time errors     */
  69.    SIGNAL ON FAILURE                /* trap object time errors     */
  70.    SIGNAL ON HALT                   /* trap object time errors     */
  71.    SIGNAL ON NOVALUE                /* trap object time errors     */
  72.    SIGNAL ON SYNTAX                 /* trap object time errors     */
  73.                                                                   /* 0073 */
  74. /*-------------------------------*\                               /* 0074 */
  75. |  Retrieve NLS dependent values  |                               /* 0075 */
  76. \*-------------------------------*/                               /* 0076 */
  77. GBL.sDate_character =,                                            /* 0077 */
  78.    STRIP( SysIni( 'USER', 'PM_National', 'sDate' ), 'T', '00'x )  /* 0078 */
  79.                                                                   /* 0079 */
  80. /*----------------------------*\                                  /* 0080 */
  81. |  Define output & work files  |                                  /* 0081 */
  82. \*----------------------------*/                                  /* 0082 */
  83. output_file = GBL.program_path || 'LISTEA.TXT'                    /* 0083 */
  84. output_disk = TRANSLATE( FILESPEC( 'D', output_file ) )           /* 0084 */
  85. call SysFileDelete output_file                                    /* 0085 */
  86. output_file_line_count = 0                                        /* 0086 */
  87. free_space = DOSDISK( 'F', output_disk )                          /* 0087 */
  88. if free_space < (2 * 1024 * 1024) then                            /* 0088 */
  89.    do                                                             /* 0089 */
  90.       call LINEOUT 'CON:',,                                       /* 0090 */
  91.                'WARNING! There may not be adequate free space on drive ' ||,
  92.                output_disk || '.'                                 /* 0092 */
  93.       call LINEOUT 'CON:',,                                       /* 0093 */
  94.                '         However, program will continue.'         /* 0094 */
  95.    end                                                            /* 0095 */
  96.                                                                   /* 0096 */
  97. SYS001 = GBL.program_path || 'LISTEA.SY1' /* directory lines              */
  98. SYS002 = GBL.program_path || 'LISTEA.SY2' /* ea file size & full name     */
  99.                                                                   /* 0099 */
  100. /*-------------------------------*\                               /* 0100 */
  101. |  Table & constant declarations  |                               /* 0101 */
  102. \*-------------------------------*/                               /* 0102 */
  103. call INITIALIZE                     /* setup tables & constants           */
  104. output_width  = 76                  /* output page max line width         */
  105. ea_max_length = 0                   /* length of longest name             */
  106. GBL.spaces    = COPIES( ' ', 3 )    /* nbr of indent spaces               */
  107.                                                                   /* 0107 */
  108. /* signal PROCESS_SYS002 */         /* for test use only */       /* 0108 */
  109.                                                                   /* 0109 */
  110. /*------------------------------------*\                          /* 0110 */
  111. |  Put EA file size & names in SYS002  |                          /* 0111 */
  112. \*------------------------------------*/                          /* 0112 */
  113. say COPIES( GBL.spaces, 1 ) ||,                                   /* 0113 */
  114.     'Retrieving directory & file names'                           /* 0114 */
  115. call SysFileDelete SYS002                                         /* 0115 */
  116. do w = 1 to WORDS(drive_table)                                    /* 0116 */
  117.    call PROCESS_DRIVE  WORD( drive_table, w )                     /* 0117 */
  118. end                                                               /* 0118 */
  119. call STREAM SYS002, 'C', 'CLOSE'                                  /* 0119 */
  120.                                                                   /* 0120 */
  121. /*---------------------------------------*\                       /* 0121 */
  122. |  Sort and write all EAs to output file  |                       /* 0122 */
  123. \*---------------------------------------*/                       /* 0123 */
  124. PROCESS_SYS002:                                                   /* 0124 */
  125.                                                                   /* 0125 */
  126. say COPIES( GBL.spaces, 1 ) ||,                                   /* 0126 */
  127.     'Sorting directory & file names'                              /* 0127 */
  128. file_table. = ''                    /* initialize array */        /* 0128 */
  129. file_table_max_length = 0                                         /* 0129 */
  130. e = 0                                                             /* 0130 */
  131. do while LINES(SYS002) > 0                                        /* 0131 */
  132.    e = e + 1                                                      /* 0132 */
  133.    input_line = LINEIN(SYS002)                                    /* 0133 */
  134.    file_table.e = input_line                                      /* 0134 */
  135.    file_table_max_length = MAX( file_table_max_length,,           /* 0135 */
  136.                                 LENGTH( input_line ) - 9 )        /* 0136 */
  137. end                                                               /* 0137 */
  138. call STREAM SYS002, 'C', 'CLOSE'                                  /* 0138 */
  139.                                                                   /* 0139 */
  140. file_table.0 = e                                                  /* 0140 */
  141. call ARRAYSORT 'file_table', 1, file_table.0,,                    /* 0141 */
  142.                                 10, file_table_max_length         /* 0142 */
  143.                                                                   /* 0143 */
  144. call SysCurState 'OFF'              /* turn off cursor */         /* 0144 */
  145. call CHAROUT 'CON:', COPIES( GBL.spaces, 1 ) ||,                  /* 0145 */
  146.                      'Building ' ||,                              /* 0146 */
  147.                      output_file    ||,                           /* 0147 */
  148.                      COPIES( ' ', 3 )                             /* 0148 */
  149. title = 'Listing of EAs on Drives ' ||,                           /* 0149 */
  150.         title                                                     /* 0150 */
  151. heading.1 =,                                                      /* 0151 */
  152.          DATE('O') ||,                                            /* 0152 */
  153.          COPIES( ' ', 2 ) ||,                                     /* 0153 */
  154.          TIME('N')                                                /* 0154 */
  155. space_count = ( output_width - LENGTH(heading.1) - LENGTH(title) ) % 2
  156. if space_count < 1 then space_count = 1                           /* 0156 */
  157. heading.1 = heading.1 ||,                                         /* 0157 */
  158.          COPIES( ' ', space_count ) ||,                           /* 0158 */
  159.          title                                                    /* 0159 */
  160. call LINEOUT output_file, heading.1 || '0D0A'x                    /* 0160 */
  161.                                                                   /* 0161 */
  162. bksp = '08'x                                                      /* 0162 */
  163. progress_list = '─\|/'                                            /* 0163 */
  164. progress_subscript = 1                                            /* 0164 */
  165. do e = 1 to file_table.0                                          /* 0165 */
  166.    call FORMAT_EA_ITEM file_table.e                               /* 0166 */
  167.    call CHAROUT 'CON:', bksp ||,                                  /* 0167 */
  168.                        SUBSTR( progress_list, progress_subscript, 1 )
  169.    progress_subscript = progress_subscript + 1                    /* 0169 */
  170.    if progress_subscript > LENGTH(progress_list) then             /* 0170 */
  171.       progress_subscript = 1                                      /* 0171 */
  172. end                                                               /* 0172 */
  173. call LINEOUT 'CON:', bksp || ' '                                  /* 0173 */
  174.                                                                   /* 0174 */
  175. /*--------------------------------------*\                        /* 0175 */
  176. |  Write sorted EA index to output file  |                        /* 0176 */
  177. \*--------------------------------------*/                        /* 0177 */
  178. heading.2 =,                                                      /* 0178 */
  179.    '0C'x ||,                                                      /* 0179 */
  180.    CENTER( 'EA Index List', output_width )                        /* 0180 */
  181. call LINEOUT output_file,  heading.2 ||,                          /* 0181 */
  182.                            '0D0A'x                                /* 0182 */
  183.                                                                   /* 0183 */
  184. output_line = LEFT( 'EA Name', 22 ) ||,                           /* 0184 */
  185.               LEFT( 'Type',     8 ) ||,                           /* 0185 */
  186.               LEFT( 'Ct.',      7 ) ||,                           /* 0186 */
  187.               'Example'                                           /* 0187 */
  188. call LINEOUT output_file, output_line                             /* 0188 */
  189.                                                                   /* 0189 */
  190. output_line = COPIES( '-', 19 ) ||,                               /* 0190 */
  191.               COPIES( ' ',  3 ) ||,                               /* 0191 */
  192.               COPIES( '-',  4 ) ||,                               /* 0192 */
  193.               COPIES( ' ',  4 ) ||,                               /* 0193 */
  194.               COPIES( '-',  4 ) ||,                               /* 0194 */
  195.               COPIES( ' ',  3 ) ||,                               /* 0195 */
  196.               COPIES( '-', 39 )                                   /* 0196 */
  197. call LINEOUT output_file, output_line                             /* 0197 */
  198.                                                                   /* 0198 */
  199. call ARRAYSORT 'ea_table', 1, ea_table.0                          /* 0199 */
  200. do i = 1 to ea_table.0                                            /* 0200 */
  201.    parse value ea_table.i with ea_name ea_hex_value ea_example    /* 0201 */
  202.    output_line = LEFT( ea_name, 22) ||,                           /* 0202 */
  203.                  C2X( ea_hex_value ) ||,                          /* 0203 */
  204.                  COPIES( ' ', 3 ) ||,                             /* 0204 */
  205.                  FORMAT( ea_table.ea_name, 5 ) ||,                /* 0205 */
  206.                  COPIES( ' ', 3 ) ||,                             /* 0206 */
  207.                  ea_example                                       /* 0207 */
  208.    call WRITE_OUTPUT_FILE output_line                             /* 0208 */
  209. end                                                               /* 0209 */
  210. call STREAM output_file, 'C', 'CLOSE'                             /* 0210 */
  211. call SysCurState 'ON'               /* turn on cursor */          /* 0211 */
  212.                                                                   /* 0212 */
  213. call SysFileDelete SYS001           /* erase work files                   */
  214. call SysFileDelete SYS002                                         /* 0214 */
  215.                                                                   /* 0215 */
  216. call EOJ 0                                                        /* 0216 */
  217.                                                                   /* 0217 */
  218. !tr!=VALUE('TRACE',,'OS2Environment'); if !tr!<>'' then do;TRACE(!tr!);nop;end
  219. /*------------------------------------------------------------------------*\
  220. |                                                                          |
  221. |                                End of Job                                |
  222. |                                                                          |
  223. \*------------------------------------------------------------------------*/
  224. EOJ:                                                              /* 0224 */
  225.    Procedure                                                      /* 0225 */
  226.                                                                   /* 0226 */
  227. if ARG() = 0 then                                                 /* 0227 */
  228.    eoj_rc = 0                                                     /* 0228 */
  229. else                                                              /* 0229 */
  230.    eoj_rc = ARG(1)                                                /* 0230 */
  231.                                                                   /* 0231 */
  232. elapsed_time = TIME('E')            /* get elapsed time - sssss.uuuuu */
  233. parse value elapsed_time with seconds '.' micro_seconds           /* 0233 */
  234. if SUBSTR( micro_seconds, 1, 1 ) >= 5 then                        /* 0234 */
  235.    seconds = seconds + 1                                          /* 0235 */
  236. ss = FORMAT( seconds // 60, 2 )                                   /* 0236 */
  237. minutes = ( seconds - ss ) / 60                                   /* 0237 */
  238. mm = FORMAT( minutes // 60, 2 )                                   /* 0238 */
  239. hh = FORMAT( ( minutes - mm ) / 60, 2 )                           /* 0239 */
  240. duration = hh':'mm':'ss                                           /* 0240 */
  241.                                                                   /* 0241 */
  242. parse Source   . . program_path_and_name                          /* 0242 */
  243. program_name = FILESPEC( 'N', program_path_and_name )             /* 0243 */
  244. say 'EOJ  ' program_name 'at' TIME('N') ||,                       /* 0244 */
  245.     ', duration' TRANSLATE( duration, '0', ' ' )                  /* 0245 */
  246. exit eoj_rc                                                       /* 0246 */
  247.                                                                   /* 0247 */
  248. /*------------------------------------------------------------------------*\
  249. |                                                                          |
  250. |          Get each EA and write to output file & build EA matrix          |
  251. |                                                                          |
  252. \*------------------------------------------------------------------------*/
  253. FORMAT_EA_ITEM:                                                   /* 0253 */
  254.    Procedure expose,                                              /* 0254 */
  255.       ea_max_length,                                              /* 0255 */
  256.       ea_table.,                                                  /* 0256 */
  257.       GBL.,                                                       /* 0257 */
  258.       output_file,                                                /* 0258 */
  259.       output_file_line_count,                                     /* 0259 */
  260.       contig_hex_tt,                                              /* 0260 */
  261.       spread_hex_tt,                                              /* 0261 */
  262.       SYS001 SYS002,                                              /* 0262 */
  263.       tt_128                                                      /* 0263 */
  264.                                                                   /* 0264 */
  265. parse arg file_size file_name                                     /* 0265 */
  266. file_name = STRIP(file_name)                                      /* 0266 */
  267. crlf = '0D0A'x                                                    /* 0267 */
  268.                                                                   /* 0268 */
  269. ea_count = DOSEALIST( file_name, 'name_stem', 'value_stem', 'flag_stem' )
  270. if ea_count ¬> 0 then                                             /* 0270 */
  271.    do                                                             /* 0271 */
  272.       say '0D0A'x || 'DOSEALIST unexpected return code of ' ||,   /* 0272 */
  273.           ea_count                                                /* 0273 */
  274.       say '   for' file_name                                      /* 0274 */
  275.       say '   Data for above file will not appear in ' ||,        /* 0275 */
  276.           FILESPEC( 'N', output_file )                            /* 0276 */
  277.       return                                                      /* 0277 */
  278.    end                                                            /* 0278 */
  279.                                                                   /* 0279 */
  280. do i = 1 to name_stem.0                                           /* 0280 */
  281.    name = STRIP( name_stem.i, 'L', '.' )                          /* 0281 */
  282.                                                                   /* 0282 */
  283.    /*------------------------*\                                   /* 0283 */
  284.    |  Write Formatted output  |                                   /* 0284 */
  285.    \*------------------------*/                                   /* 0285 */
  286.    output_line = file_name                                        /* 0286 */
  287.    if file_size = '<DIR>' then                                    /* 0287 */
  288.       do                                                          /* 0288 */
  289.          output_line = output_line || ' <DIR>'                    /* 0289 */
  290.       end                                                         /* 0290 */
  291.                                                                   /* 0291 */
  292.    list_control = 0                 /* < 0 name only, > 0 truncate value */
  293.    select                                                         /* 0293 */
  294.       when LEFT( name, 5 ) = 'REXX.' then                         /* 0294 */
  295.          list_control = -1                                        /* 0295 */
  296.       when name = 'ICON' then                                     /* 0296 */
  297.          list_control = -1                                        /* 0297 */
  298.       when name = 'ICON1' then                                    /* 0298 */
  299.          list_control = -1                                        /* 0299 */
  300.       otherwise                                                   /* 0300 */
  301.          nop                                                      /* 0301 */
  302.    end                                                            /* 0302 */
  303.    select                                                         /* 0303 */
  304.       when name = 'ASSOCTABLE' then                               /* 0304 */
  305.          do                                                       /* 0305 */
  306.             list_control = POS( 'FEFF02'x, value_stem.i ) - 1     /* 0306 */
  307.          end                                                      /* 0307 */
  308.       when name = 'IBMLT.THUMBNAIL' then                          /* 0308 */
  309.          do                                                       /* 0309 */
  310.             list_control = POS( '00'x, value_stem.i, 34 )         /* 0310 */
  311.          end                                                      /* 0311 */
  312.       otherwise                                                   /* 0312 */
  313.          nop                                                      /* 0313 */
  314.    end                                                            /* 0314 */
  315.                                                                   /* 0315 */
  316.    if list_control < 0 then                                       /* 0316 */
  317.       if i = 1 then                                               /* 0317 */
  318.          do                                                       /* 0318 */
  319.             if output_file_line_count > 0 then                    /* 0319 */
  320.                output_line = crlf || output_line /* precede with blank line */
  321.             call WRITE_OUTPUT_FILE output_line                    /* 0321 */
  322.          end                                                      /* 0322 */
  323.       else                                                        /* 0323 */
  324.          nop                                                      /* 0324 */
  325.    else                                                           /* 0325 */
  326.       do                                                          /* 0326 */
  327.          if output_file_line_count > 0 then                       /* 0327 */
  328.             output_line = crlf || output_line /* precede with blank line */
  329.          call WRITE_OUTPUT_FILE output_line                       /* 0329 */
  330.       end                                                         /* 0330 */
  331.                                                                   /* 0331 */
  332.    output_line = COPIES( ' ', 3 ) ||,                             /* 0332 */
  333.                  LEFT( 'Flag = ''' || C2X(flag_stem.i) || '''x', 15) ||,
  334.                  'Name = ' ||,                                    /* 0334 */
  335.                  LEFT( name_stem.i, 35 ) ||,                      /* 0335 */
  336.                  'Length = ''' ||,                                /* 0336 */
  337.                  D2X( LENGTH(value_stem.i), 4 ) ||,               /* 0337 */
  338.                  '''x'                                            /* 0338 */
  339.    call WRITE_OUTPUT_FILE output_line                             /* 0339 */
  340.                                                                   /* 0340 */
  341.    if list_control = 0 then                                       /* 0341 */
  342.       do                                                          /* 0342 */
  343.          call FORMAT_EA_DETAIL  value_stem.i                      /* 0343 */
  344.       end                                                         /* 0344 */
  345.    else                                                           /* 0345 */
  346.       if list_control > 0 then                                    /* 0346 */
  347.          do                                                       /* 0347 */
  348.             call FORMAT_EA_DETAIL  LEFT( value_stem.i, list_control )
  349.          end                                                      /* 0349 */
  350.                                                                   /* 0350 */
  351.    /*---------------------------------*\                          /* 0351 */
  352.    |  Cross index EA name in EA table  |                          /* 0352 */
  353.    \*---------------------------------*/                          /* 0353 */
  354.    if ea_table.name = '' then                                     /* 0354 */
  355.       do                                                          /* 0355 */
  356.          e = ea_table.0 + 1                                       /* 0356 */
  357.          ea_table.0 = e                                           /* 0357 */
  358.          ea_table.e = name,                                       /* 0358 */
  359.                       SUBSTR( value_stem.i, 2, 1 ) ||,            /* 0359 */
  360.                       SUBSTR( value_stem.i, 1, 1 ),               /* 0360 */
  361.                       file_name                                   /* 0361 */
  362.          ea_table.name = 1                                        /* 0362 */
  363.          if LENGTH(name) > ea_max_length then                     /* 0363 */
  364.             ea_max_length = LENGTH(name)                          /* 0364 */
  365.       end                                                         /* 0365 */
  366.    else                                                           /* 0366 */
  367.       do                                                          /* 0367 */
  368.          ea_table.name = ea_table.name + 1                        /* 0368 */
  369.       end                                                         /* 0369 */
  370.                                                                   /* 0370 */
  371. end                                                               /* 0371 */
  372.                                                                   /* 0372 */
  373. return                                                            /* 0373 */
  374.                                                                   /* 0374 */
  375. /*------------------------------------------------------------------------*\
  376. |                                                                          |
  377. |                     Format hex & character EA detail                     |
  378. |                                                                          |
  379. \*------------------------------------------------------------------------*/
  380. FORMAT_EA_DETAIL:                                                 /* 0380 */
  381.    Procedure expose,                                              /* 0381 */
  382.       output_file,                                                /* 0382 */
  383.       output_file_line_count,                                     /* 0383 */
  384.       GBL.program_name,                                           /* 0384 */
  385.       contig_hex_tt,                                              /* 0385 */
  386.       spread_hex_tt,                                              /* 0386 */
  387.       SYS001 SYS002,                                              /* 0387 */
  388.       tt_128                                                      /* 0388 */
  389.                                                                   /* 0389 */
  390. ea_data               = ARG(1)                                    /* 0390 */
  391. hex_displacement      = 0                                         /* 0391 */
  392. prev_character_string = ''                                        /* 0392 */
  393. sameness_switch       = 0                                         /* 0393 */
  394.                                                                   /* 0394 */
  395. do until ea_data = ''                                             /* 0395 */
  396.    parse value ea_data with leading_token 17 ea_data              /* 0396 */
  397.                                                                   /* 0397 */
  398.    temp_character_string = LEFT( leading_token, 16 )              /* 0398 */
  399.    if temp_character_string <> prev_character_string then         /* 0399 */
  400.       do                                                          /* 0400 */
  401.          temp_hex_string = TRANSLATE( spread_hex_tt,,             /* 0401 */
  402.                                       C2X(temp_character_string),,
  403.                                       contig_hex_tt )             /* 0403 */
  404.          word_count = ( LENGTH(leading_token) - 1 ) % 4           /* 0404 */
  405.          byte_count = LENGTH(leading_token) - ( 4 * word_count )  /* 0405 */
  406.          temp_hex_length = ( 9 * word_count ) + ( 2 * byte_count )
  407.          output_line = COPIES( ' ', 10 ) ||,                      /* 0407 */
  408.                        '+' || D2X( hex_displacement, 4 ) ||,      /* 0408 */
  409.                        COPIES( ' ', 3 ) ||,                       /* 0409 */
  410.                        '| ' ||,                                   /* 0410 */
  411.                        LEFT( temp_hex_string, temp_hex_length ) ||,
  412.                        COPIES( ' ', 35 - temp_hex_length ) ||,    /* 0412 */
  413.                        ' |' ||,                                   /* 0413 */
  414.                        COPIES( ' ', 3 ) ||,                       /* 0414 */
  415.                        TRANSLATE( temp_character_string, tt_128 ) /* 0415 */
  416.          call WRITE_OUTPUT_FILE output_line                       /* 0416 */
  417.          sameness_switch = 0                                      /* 0417 */
  418.       end                                                         /* 0418 */
  419.    else                                                           /* 0419 */
  420.       if sameness_switch = 0 then                                 /* 0420 */
  421.          do                                                       /* 0421 */
  422.             output_line = COPIES( ' ', 10 ) ||,                   /* 0422 */
  423.                           '+' || D2X( hex_displacement, 4 ) ||,   /* 0423 */
  424.                           COPIES( ' ', 3 ) ||,                    /* 0424 */
  425.                           '| ' ||,                                /* 0425 */
  426.                           LEFT( 'same', 35 ) ||,                  /* 0426 */
  427.                           ' |'                                    /* 0427 */
  428.             call WRITE_OUTPUT_FILE output_line                    /* 0428 */
  429.             sameness_switch = 1                                   /* 0429 */
  430.          end                                                      /* 0430 */
  431.                                                                   /* 0431 */
  432.    hex_displacement = hex_displacement + 16                       /* 0432 */
  433.    prev_character_string = temp_character_string                  /* 0433 */
  434. end                                                               /* 0434 */
  435. return                                                            /* 0435 */
  436.                                                                   /* 0436 */
  437. /*------------------------------------------------------------------------*\
  438. |                                                                          |
  439. |                       Initialize translate tables                        |
  440. |                                                                          |
  441. \*------------------------------------------------------------------------*/
  442. INITIALIZE:                                                       /* 0442 */
  443.    Procedure expose,                                              /* 0443 */
  444.       contig_hex_tt,                                              /* 0444 */
  445.       drive_table,                                                /* 0445 */
  446.       ea_table.,                                                  /* 0446 */
  447.       heading.,                                                   /* 0447 */
  448.       hex_tt,                                                     /* 0448 */
  449.       GBL.,                                                       /* 0449 */
  450.       output_width,                                               /* 0450 */
  451.       output_file,                                                /* 0451 */
  452.       spread_hex_tt,                                              /* 0452 */
  453.       title,                                                      /* 0453 */
  454.       tt_128,                                                     /* 0454 */
  455.       tt_256                                                      /* 0455 */
  456.                                                                   /* 0456 */
  457. drive_table  = SysDriveMap( 'A', 'LOCAL' )                        /* 0457 */
  458. ea_table.    = ''; ea_table.0   = 0                               /* 0458 */
  459. output_width = 76                   /* output page max line width         */
  460. title = ''                                                        /* 0460 */
  461.                                                                   /* 0461 */
  462. hex_tt = COPIES( '00'x, 256 )                                     /* 0462 */
  463. hex_tt = OVERLAY( XRANGE('30'x, '39'x), hex_tt, X2D(30) + 1 ) /* 0 - 9    */
  464. hex_tt = OVERLAY( XRANGE('41'x, '46'x), hex_tt, X2D(41) + 1 ) /* A - F    */
  465. hex_tt = OVERLAY( XRANGE('41'x, '46'x), hex_tt, X2D(61) + 1 ) /* a - f    */
  466.                                                                   /* 0466 */
  467. /* used for hex display of data */                                /* 0467 */
  468. contig_hex_tt = XRANGE('01'x, '21'x)                              /* 0468 */
  469. spread_hex_tt = XRANGE('01'x, '08'x) || '21'x ||,                 /* 0469 */
  470.                 XRANGE('09'x, '10'x) || '21'x ||,                 /* 0470 */
  471.                 XRANGE('11'x, '18'x) || '21'x ||,                 /* 0471 */
  472.                 XRANGE('19'x, '20'x)                              /* 0472 */
  473.                                                                   /* 0473 */
  474. tt_128 = COPIES( '.', 32 ) || XRANGE('20'X, '7F'X) || COPIES( '.', 128 )
  475. tt_256 = '2E01 0203 0405 062E 2E2E 2E0B 0C2E 0E0F'X ||,           /* 0475 */
  476.          '1011 1213 1415 1617 1819 1A2E 1C1D 1E1F'X ||,           /* 0476 */
  477.          XRANGE('20'X, 'FE'X) || '.'                              /* 0477 */
  478. return                                                            /* 0478 */
  479.                                                                   /* 0479 */
  480. /*------------------------------------------------------------------------*\
  481. |                                                                          |
  482. |                Build Work File 02 From Directory Entries                 |
  483. |                                                                          |
  484. \*------------------------------------------------------------------------*/
  485. PROCESS_DRIVE:                                                    /* 0485 */
  486.    Procedure expose,                                              /* 0486 */
  487.       GBL. SYS001 SYS002 title                                    /* 0487 */
  488.                                                                   /* 0488 */
  489. drive = ARG(1)                                                    /* 0489 */
  490. notready_switch = ''                                              /* 0490 */
  491. call ON NOTREADY name DRIVE_NOTREADY                              /* 0491 */
  492. call STREAM drive || '*', 'D'       /* check for not ready */     /* 0492 */
  493. call OFF NOTREADY                                                 /* 0493 */
  494. if notready_switch <> '' then                                     /* 0494 */
  495.    do                                                             /* 0495 */
  496.       say COPIES( GBL.spaces, 2 ) ||,                             /* 0496 */
  497.           'Drive ' ||,                                            /* 0497 */
  498.           drive ||,                                               /* 0498 */
  499.           ' is not ready and is being ignored.'                   /* 0499 */
  500.       return                                                      /* 0500 */
  501.    end                                                            /* 0501 */
  502.                                                                   /* 0502 */
  503. /* ignore drives which are not ready */                           /* 0503 */
  504. if DOSDISK( 'T', drive ) = -1 then                                /* 0504 */
  505.    do                                                             /* 0505 */
  506.       say COPIES( GBL.spaces, 2 ) ||,                             /* 0506 */
  507.           'Drive ' ||,                                            /* 0507 */
  508.           drive ||,                                               /* 0508 */
  509.           ' is not ready and will be ignored.'                    /* 0509 */
  510.       return                                                      /* 0510 */
  511.    end                                                            /* 0511 */
  512.                                                                   /* 0512 */
  513. /* ignore CD-ROM drives */                                        /* 0513 */
  514. if DOSFILESYS(drive) = 'CDFS' then                                /* 0514 */
  515.    do                                                             /* 0515 */
  516.       say COPIES( GBL.spaces, 2 ) ||,                             /* 0516 */
  517.           'Drive ' ||,                                            /* 0517 */
  518.           drive ||,                                               /* 0518 */
  519.           ' is a CD-ROM and will be ignored.'                     /* 0519 */
  520.       return                                                      /* 0520 */
  521.    end                                                            /* 0521 */
  522.                                                                   /* 0522 */
  523. /* Clear any user specified DIRCMD value */                       /* 0523 */
  524. GBL.dircmd_value = VALUE( 'DIRCMD', '', GBL.environment )         /* 0524 */
  525.                                                                   /* 0525 */
  526. title = title STRIP(drive)                                        /* 0526 */
  527. say COPIES( GBL.spaces, 2 ) ||,                                   /* 0527 */
  528.     'Drive ' ||,                                                  /* 0528 */
  529.     drive    ||,                                                  /* 0529 */
  530.     ' is being read to extract EAs.'                              /* 0530 */
  531. '@dir' drive || '\*.* /s /n /a: 1>' SYS001                        /* 0531 */
  532. if GBL.dircmd_value <> '' then                                    /* 0532 */
  533.    do                                                             /* 0533 */
  534.       /* Restore original value */                                /* 0534 */
  535.       call VALUE 'DIRCMD', GBL.dircmd_value, GBL.environment      /* 0535 */
  536.    end                                                            /* 0536 */
  537.                                                                   /* 0537 */
  538. path_name = ''                                                    /* 0538 */
  539. directory_of_constant = 'Directory of '                           /* 0539 */
  540. do while LINES(SYS001) > 0                                        /* 0540 */
  541.    directory_line = LINEIN(SYS001)                                /* 0541 */
  542.                                                                   /* 0542 */
  543.    parse value directory_line with . (directory_of_constant) directory_of_value
  544.    if directory_of_value <> '' then                               /* 0544 */
  545.       do                                                          /* 0545 */
  546.          path_name = directory_of_value                           /* 0546 */
  547.          if RIGHT( path_name, 1 ) <> '\' then                     /* 0547 */
  548.             path_name = path_name || '\'                          /* 0548 */
  549.          iterate                                                  /* 0549 */
  550.       end                                                         /* 0550 */
  551.                                                                   /* 0551 */
  552.    if ( SUBSTR( directory_line, 3, 1 ) <> GBL.sDate_character )  |,
  553.       ( SUBSTR( directory_line, 6, 1 ) <> GBL.sDate_character ) then iterate
  554.    parse var directory_line,                                      /* 0554 */
  555.               file_date,                                          /* 0555 */
  556.               file_time,                                          /* 0556 */
  557.               file_size,                                          /* 0557 */
  558.               file_ea_size,                                       /* 0558 */
  559.               file_name                                           /* 0559 */
  560.    if file_ea_size = 0 then iterate                               /* 0560 */
  561.    if ( file_name = '.' )  |,                                     /* 0561 */
  562.       ( file_name = '..' ) then iterate                           /* 0562 */
  563.    full_file_name = path_name ||,                                 /* 0563 */
  564.                     STRIP(file_name)                              /* 0564 */
  565.                                                                   /* 0565 */
  566.    /* ignore all \OS2\ARCHIVES directories */                     /* 0566 */
  567.    if POS( '\OS2\ARCHIVES', full_file_name ) > 0 then iterate     /* 0567 */
  568.                                                                   /* 0568 */
  569.    output_line = LEFT( file_size, 9 ) ||,                         /* 0569 */
  570.                  full_file_name                                   /* 0570 */
  571.    call LINEOUT SYS002, output_line                               /* 0571 */
  572. end                                                               /* 0572 */
  573. call STREAM SYS001, 'C', 'CLOSE'                                  /* 0573 */
  574. call SysFileDelete SYS001                                         /* 0574 */
  575. return                                                            /* 0575 */
  576.                                                                   /* 0576 */
  577. DRIVE_NOTREADY:                                                   /* 0577 */
  578.    Procedure expose notready_switch                               /* 0578 */
  579. notready_switch = 1                                               /* 0579 */
  580. return                                                            /* 0580 */
  581.                                                                   /* 0581 */
  582. /*------------------------------------------------------------------------*\
  583. |                                                                          |
  584. |                   Register external function routines                    |
  585. |                                                                          |
  586. \*------------------------------------------------------------------------*/
  587. REGISTER_REQUIRED_FUNCTIONS:                                      /* 0587 */
  588.    Procedure expose REXX_Version                                  /* 0588 */
  589.                                                                   /* 0589 */
  590. /*----------------------------------------*\                      /* 0590 */
  591. |  Load REXXUtil External Function Module  |                      /* 0591 */
  592. \*----------------------------------------*/                      /* 0592 */
  593. function_name      = 'SysLoadFuncs'                               /* 0593 */
  594. entry_name         = 'SysLoadFuncs'                               /* 0594 */
  595. module             = 'RexxUtil'                                   /* 0595 */
  596. anticipated_return = ''                                           /* 0596 */
  597. call REGISTER_ROUTINE function_name module entry_name anticipated_return
  598.                                                                   /* 0598 */
  599. /*-----------------------------------*\                           /* 0599 */
  600. |  Load the REXXLIB Function Package  |                           /* 0600 */
  601. \*-----------------------------------*/                           /* 0601 */
  602. if REXX_Version = 'REXX/Personal' then                            /* 0602 */
  603.    do                                                             /* 0603 */
  604.       module = 'qrexxlib'                                         /* 0604 */
  605.    end                                                            /* 0605 */
  606. else                                                              /* 0606 */
  607.    do                                                             /* 0607 */
  608.       module = 'rexxlib'                                          /* 0608 */
  609.    end                                                            /* 0609 */
  610. entry_name         = 'rexxlibregister'                            /* 0610 */
  611. function_name      = 'RexxLibRegister'                            /* 0611 */
  612. anticipated_return = '1'                                          /* 0612 */
  613. call REGISTER_ROUTINE function_name module entry_name anticipated_return
  614. return                                                            /* 0614 */
  615.                                                                   /* 0615 */
  616.                                                                   /* 0616 */
  617. REGISTER_ROUTINE:                                                 /* 0617 */
  618. parse ARG  function_name,                                         /* 0618 */
  619.            module,                                                /* 0619 */
  620.            entry_name,                                            /* 0620 */
  621.            anticipated_return                                     /* 0621 */
  622.                                                                   /* 0622 */
  623. if RxFuncQuery(function_name) = 0 then return      /* function registered */
  624.                                                                   /* 0624 */
  625. if LENGTH(module) > 8 then                                        /* 0625 */
  626.    do                                                             /* 0626 */
  627.       dll_drive = FILESPEC( 'D', module )                         /* 0627 */
  628.       dll_path  = STRIP( FILESPEC( 'P', module ), 'T', '\' )      /* 0628 */
  629.       module    = FILESPEC( 'N', module )                         /* 0629 */
  630.       '@' || dll_drive                                            /* 0630 */
  631.       '@cd' dll_drive || dll_path                                 /* 0631 */
  632.    end                                                            /* 0632 */
  633. else                                                              /* 0633 */
  634.    do                                                             /* 0634 */
  635.       dll_drive = ''                                              /* 0635 */
  636.    end                                                            /* 0636 */
  637.                                                                   /* 0637 */
  638. parse var module module_fname '.' module_fext                     /* 0638 */
  639. if RxFuncAdd( function_name, module_fname, entry_name ) = 0 then  /* 0639 */
  640.    do                                                             /* 0640 */
  641.       register_call = 'call' function_name                        /* 0641 */
  642.       interpret register_call                                     /* 0642 */
  643.       if WORD( RESULT, 1 ) <> WORD( anticipated_return, 1 ) then  /* 0643 */
  644.          do                                                       /* 0644 */
  645.             Say function_name 'returned' RESULT '-',              /* 0645 */
  646.                                          anticipated_return 'was expected'
  647.             exit 255                                              /* 0647 */
  648.          end                                                      /* 0648 */
  649.    end                                                            /* 0649 */
  650. else                                                              /* 0650 */
  651.    do                                                             /* 0651 */
  652.       Say 'RxFuncAdd returned' RESULT 'registering' module        /* 0652 */
  653.       exit 254                                                    /* 0653 */
  654.    end                                                            /* 0654 */
  655. if dll_drive <> '' then                                           /* 0655 */
  656.    do                                                             /* 0656 */
  657.       '@' || LEFT( GBL.program_path_and_name, 2 )                 /* 0657 */
  658.    end                                                            /* 0658 */
  659. return                                                            /* 0659 */
  660.                                                                   /* 0660 */
  661. /*------------------------------------------------------------------------*\
  662. |                                                                          |
  663. |                              Trap Routines                               |
  664. |                                                                          |
  665. \*------------------------------------------------------------------------*/
  666. ERROR:   call TRAP_PROCESSING SIGL, 'ERROR',   RC                 /* 0666 */
  667. FAILURE: call TRAP_PROCESSING SIGL, 'FAILURE', RC                 /* 0667 */
  668. HALT:    call TRAP_PROCESSING SIGL, 'HALT',    ''                 /* 0668 */
  669. NOVALUE: call TRAP_PROCESSING SIGL, 'NOVALUE', ''                 /* 0669 */
  670. SYNTAX:  call TRAP_PROCESSING SIGL, 'SYNTAX',  RC                 /* 0670 */
  671.                                                                   /* 0671 */
  672. /* Rev. 94/06/14 */                                               /* 0672 */
  673. TRAP_PROCESSING:                                                  /* 0673 */
  674.    parse Source . . TRAP.path_and_program                         /* 0674 */
  675.    if POS( ':', TRAP.path_and_program ) > 0 then                  /* 0675 */
  676.       /* get source line if it is available */                    /* 0676 */
  677.       do                                                          /* 0677 */
  678.          trap_source_line = STRIP( SOURCELINE(ARG(1)) )           /* 0678 */
  679.       end                                                         /* 0679 */
  680.    else                                                           /* 0680 */
  681.       /* program is running in macrospace */                      /* 0681 */
  682.       do                                                          /* 0682 */
  683.          TRAP.path_and_program = VALUE( 'TEMP',, 'OS2ENVIRONMENT' ) ||,
  684.                                  TRAP.path_and_program            /* 0684 */
  685.          trap_source_line = 'Source line is not available.'       /* 0685 */
  686.       end                                                         /* 0686 */
  687.                                                                   /* 0687 */
  688.    parse value FILESPEC( 'N', TRAP.path_and_program ) with,       /* 0688 */
  689.       TRAP.fn '.' TRAP.fe                                         /* 0689 */
  690.    trap_file_name = FILESPEC( 'D', TRAP.path_and_program ) ||,    /* 0690 */
  691.                     FILESPEC( 'P', TRAP.path_and_program ) ||,    /* 0691 */
  692.                     TRAP.fn || '.' || 'DMP'                       /* 0692 */
  693.                                                                   /* 0693 */
  694.    /*------------------------------------------*\                 /* 0694 */
  695.    |  check for reason not to create .DMP file  |                 /* 0695 */
  696.    \*------------------------------------------*/                 /* 0696 */
  697.    if ARG(2) = 'HALT',                                            /* 0697 */
  698.          |,                                                       /* 0698 */
  699.       RxFuncQuery( 'VARDUMP' ) <> 0,                              /* 0699 */
  700.          |,                                                       /* 0700 */
  701.       POS( ':', trap_file_name ) = 0 then                         /* 0701 */
  702.       do                                                          /* 0702 */
  703.          trap_file_name = ''                                      /* 0703 */
  704.       end                                                         /* 0704 */
  705.                                                                   /* 0705 */
  706.    /*------------------------*\                                   /* 0706 */
  707.    |  Build trap message box  |                                   /* 0707 */
  708.    \*------------------------*/                                   /* 0708 */
  709.    dbl.h    = 'CD'x                 /* ═ double line - horizontal   */
  710.    dbl.v    = 'BA'x                 /* ║ double line - vertical     */
  711.    dbl.bl   = 'C8'x                 /* ╚ double line - bottom left  */
  712.    dbl.br   = 'BC'x                 /* ╝ double line - bottom right */
  713.    dbl.tl   = 'C9'x                 /* ╔ double line - top left     */
  714.    dbl.tr   = 'BB'x                 /* ╗ double line - top right    */
  715.    say ' '                                                        /* 0715 */
  716.    trap_error_description =,                                      /* 0716 */
  717.       'Error line = ' || ARG(1) ||,                               /* 0717 */
  718.       '; ' ||,                                                    /* 0718 */
  719.       ARG(2) ||,                                                  /* 0719 */
  720.       ' error.'                                                   /* 0720 */
  721.    if ARG(3) <> '' then                                           /* 0721 */
  722.       trap_error_description = trap_error_description ||,         /* 0722 */
  723.                                '  Return code = ' || ARG(3)       /* 0723 */
  724.    say dbl.tl || COPIES( dbl.h, LENGTH(trap_error_description) + 2 ) || dbl.tr
  725.    say dbl.v  || COPIES( ' ',   LENGTH(trap_error_description) + 2 ) || dbl.v
  726.    say dbl.v               trap_error_description                       dbl.v
  727.    if trap_file_name <> '' then                                   /* 0727 */
  728.       do                                                          /* 0728 */
  729.    say dbl.v  || COPIES( ' ',   LENGTH(trap_error_description) + 2 ) || dbl.v
  730.    say dbl.v     CENTER( 'See: ' || trap_file_name,,              /* 0730 */
  731.                                       LENGTH(trap_error_description) )  dbl.v
  732.       end                                                         /* 0732 */
  733.    say dbl.v  || COPIES( ' ',   LENGTH(trap_error_description) + 2 ) || dbl.v
  734.    say dbl.bl || COPIES( dbl.h, LENGTH(trap_error_description) + 2 ) || dbl.br
  735.    say ' '                                                        /* 0735 */
  736.    say 'Source line at time of trap:'                             /* 0736 */
  737.    say '   ' || trap_source_line                                  /* 0737 */
  738.    say ' '                                                        /* 0738 */
  739.                                                                   /* 0739 */
  740.    /*---------------------------------*\                          /* 0740 */
  741.    |  Create .DMP file if appropriate  |                          /* 0741 */
  742.    \*---------------------------------*/                          /* 0742 */
  743.    if trap_file_name <> '' then                                   /* 0743 */
  744.       do                                                          /* 0744 */
  745.          call SysFileDelete trap_file_name                        /* 0745 */
  746.          /* remove meaningless labels from dump for clarity */    /* 0746 */
  747.          drop dbl. TRAP. RC RESULT SIGL !tr!                      /* 0747 */
  748.          call VARDUMP trap_file_name  /* write variables to program.DMP file */
  749.       end                                                         /* 0749 */
  750.    exit -254                                                      /* 0750 */
  751.                                                                   /* 0751 */
  752. /*------------------------------------------------------------------------*\
  753. |                                                                          |
  754. |                   Write output line & tally line count                   |
  755. |                                                                          |
  756. \*------------------------------------------------------------------------*/
  757. WRITE_OUTPUT_FILE:                                                /* 0757 */
  758.    Procedure expose,                                              /* 0758 */
  759.       GBL.program_name,                                           /* 0759 */
  760.       output_file,                                                /* 0760 */
  761.       output_file_line_count,                                     /* 0761 */
  762.       SYS001 SYS002                                               /* 0762 */
  763.                                                                   /* 0763 */
  764. output_file_line_count = output_file_line_count + 1               /* 0764 */
  765. call LINEOUT output_file, ARG(1)                                  /* 0765 */
  766. if RESULT <> 0 then                                               /* 0766 */
  767.    do                                                             /* 0767 */
  768.       call LINEOUT 'CON:', '0D0A'x ||,                            /* 0768 */
  769.                            'Error writing line number ' ||,       /* 0769 */
  770.                            output_file_line_count ||,             /* 0770 */
  771.                            ' to ' ||,                             /* 0771 */
  772.                            output_file || '.'                     /* 0772 */
  773.       call LINEOUT 'CON:', 'Possibly insufficient disk space.'    /* 0773 */
  774.       call LINEOUT 'CON:', 'Work files - ' ||,                    /* 0774 */
  775.                            SYS001 || ' & ' || SYS002 ||,          /* 0775 */
  776.                            ' not erased.'                         /* 0776 */
  777.       call EOJ 255                                                /* 0777 */
  778.    end                                                            /* 0778 */
  779. return                                                            /* 0779 */
  780. /*---------  REXX Cross Reference  - Created: 03/27/95 0:51am ----------*\
  781.      J:\REXXPROG\LISTEA\LISTEA.CMD - Directory time stamp 3/12/95 4:44p
  782.  
  783. ---- VARIABLES ----
  784. !tr!                0218<  0218   0218   0747
  785. Calling_Environment
  786.                     0055
  787. DRIVE_NOTREADY      0491
  788. GBL.                0257   0449   0487
  789. GBL.boot_drive      0058<
  790. GBL.dircmd_value    0524<  0532   0535
  791. GBL.environment     0057<  0058   0524   0535
  792. GBL.program_name    0059<  0065   0384   0759
  793. GBL.program_path    0060<  0083   0097   0098
  794. GBL.program_path_and_name
  795.                     0657
  796. GBL.program_version
  797.                     0062<
  798. GBL.sDate_character
  799.                     0077<  0552   0553
  800. GBL.spaces          0106<  0113   0126   0145   0496   0506   0516   0527
  801. OS_Name             0054
  802. RC                  0666   0667   0670   0747
  803. RESULT              0643   0645   0652   0747   0766
  804. REXX_Version        0053   0588   0602
  805. SIGL                0666   0667   0668   0669   0670   0747
  806. SYS001              0097<  0213   0262   0387   0487   0531   0540   0541
  807.                     0573   0574   0762   0775
  808. SYS002              0098<  0115   0119   0131   0133   0138   0214   0262
  809.                     0387   0487   0571   0762   0775
  810. TRAP.               0747
  811. TRAP.fe             0689
  812. TRAP.fn             0689   0692
  813. TRAP.path_and_program
  814.                     0674   0675   0683<  0684   0688   0690   0691
  815. Version             0053
  816. X                   0474   0474   0475   0476   0477   0477
  817. anticipated_return  0596<  0597   0612<  0613   0621   0643   0646
  818. bksp                0162<  0167   0173
  819. byte_count          0405<  0406
  820. contig_hex_tt       0260   0385   0403   0444   0468<
  821. crlf                0267<  0320   0328
  822. dbl.                0747
  823. dbl.bl              0711<  0734
  824. dbl.br              0712<  0734
  825. dbl.h               0709<  0724   0734
  826. dbl.tl              0713<  0724
  827. dbl.tr              0714<  0724
  828. dbl.v               0710<  0725   0725   0726   0726   0729   0729   0730
  829.                     0731   0733   0733
  830. directory_line      0541<  0543   0552   0553   0554
  831. directory_of_constant
  832.                     0539<  0543
  833. directory_of_value  0543   0544   0546
  834. dll_drive           0627<  0630   0631   0635<  0655
  835. dll_path            0628<  0631
  836. drive               0489<  0492   0498   0504   0508   0514   0518   0526
  837.                     0529   0531
  838. drive_table         0116   0117   0445   0457<
  839. duration            0240<  0245
  840. e                   0130<  0132<  0132   0140   0165   0356<  0357
  841. ea_count            0269<  0270   0273
  842. ea_data             0390<  0395   0396   0396
  843. ea_example          0201   0207
  844. ea_hex_value        0201   0203
  845. ea_max_length       0105<  0255   0363   0364<
  846. ea_name             0201   0202
  847. ea_table.           0256   0446   0458<
  848. ea_table.0          0199   0200   0356   0357<  0458<
  849. ea_table.e          0358<
  850. ea_table.ea_name    0205
  851. ea_table.i          0201
  852. ea_table.name       0354   0362<  0368<  0368
  853. elapsed_time        0232<  0233
  854. entry_name          0594<  0597   0610<  0613   0620   0639
  855. eoj_rc              0228<  0230<  0246
  856. file_date           0555
  857. file_ea_size        0558   0560
  858. file_name           0265   0266<  0266   0269   0274   0286   0361   0559
  859.                     0561   0562   0564
  860. file_size           0265   0287   0557   0569
  861. file_table.         0128<
  862. file_table.0        0140<  0141   0165
  863. file_table.e        0134<  0166
  864. file_table_max_length
  865.                     0129<  0135<  0135   0142
  866. file_time           0556
  867. flag_stem.i         0333
  868. free_space          0087<  0088
  869. full_file_name      0563<  0567   0570
  870. function_name       0593<  0597   0611<  0613   0618   0623   0639   0641
  871.                     0645
  872. heading.            0447
  873. heading.1           0151<  0155   0157<  0157   0160
  874. heading.2           0178<  0181
  875. hex_displacement    0391<  0408   0423   0432<  0432
  876. hex_tt              0448   0462<  0463<  0463   0464<  0464   0465<  0465
  877. hh                  0239<  0240
  878. i                   0200   0280   0317
  879. input_line          0133<  0134   0136
  880. leading_token       0396   0398   0404   0405
  881. list_control        0292<  0295<  0297<  0299<  0306<  0310<  0316   0341
  882.                     0346   0348
  883. micro_seconds       0233   0234
  884. minutes             0237<  0238   0239
  885. mm                  0238<  0239   0240
  886. module              0595<  0597   0604<  0608<  0613   0619   0625   0627
  887.                     0628   0629<  0629   0638   0652
  888. module_fext         0638
  889. module_fname        0638   0639
  890. name                0281<  0294   0296   0298   0304   0308   0358   0363
  891.                     0364   0491
  892. name_stem.0         0280
  893. name_stem.i         0281   0335
  894. notready_switch     0490<  0494   0578   0579<
  895. output_disk         0084<  0087   0092
  896. output_file         0083<  0084   0085   0147   0160   0181   0188   0197
  897.                     0210   0258   0276   0382   0451   0760   0765   0772
  898. output_file_line_count
  899.                     0086<  0259   0319   0327   0383   0761   0764<  0764
  900.                     0770
  901. output_line         0184<  0188   0190<  0197   0202<  0208   0286<  0289<
  902.                     0289   0320<  0320   0321   0328<  0328   0329   0332<
  903.                     0339   0407<  0416   0422<  0428   0569<  0571
  904. output_width        0104<  0155   0180   0450   0459<
  905. path_name           0538<  0546<  0547   0548<  0548   0563
  906. prev_character_string
  907.                     0392<  0399   0433<
  908. program_name        0243<  0244
  909. program_path_and_name
  910.                     0056   0059   0060   0061   0242   0243
  911. progress_list       0163<  0168   0170
  912. progress_subscript  0164<  0168   0169<  0169   0170   0171<
  913. register_call       0641<  0642
  914. sameness_switch     0393<  0417<  0420   0429<
  915. seconds             0233   0235<  0235   0236   0237
  916. space_count         0155<  0156   0156   0158
  917. spread_hex_tt       0261   0386   0401   0452   0469<
  918. ss                  0236<  0237   0240
  919. temp_character_string
  920.                     0398<  0399   0402   0415   0433
  921. temp_hex_length     0406<  0411   0412
  922. temp_hex_string     0401<  0411
  923. title               0149<  0150   0155   0159   0453   0460<  0487   0526<
  924.                     0526
  925. trap_error_description
  926.                     0716<  0722<  0722   0724   0725   0726   0729   0731
  927.                     0733   0734
  928. trap_file_name      0690<  0701   0703<  0727   0730   0743   0745   0748
  929. trap_source_line    0678<  0685<  0737
  930. tt_128              0263   0388   0415   0454   0474<
  931. tt_256              0455   0475<
  932. value_stem.i        0306   0310   0337   0343   0348   0359   0360
  933. w                   0116   0117
  934. with                0201   0233   0396   0543   0688
  935. word_count          0404<  0405   0406
  936. x                   0078   0160   0162   0179   0182   0267   0272   0306
  937.                     0310   0462   0463   0463   0464   0464   0465   0465
  938.                     0468   0468   0469   0469   0469   0470   0470   0470
  939.                     0471   0471   0471   0472   0472   0709   0710   0711
  940.                     0712   0713   0714   0768
  941.  
  942. ---- LABELS ----
  943. DRIVE_NOTREADY      0577:
  944. EOJ                 0216   0224:  0777
  945. ERROR               0068   0666:
  946. FAILURE             0069   0667:
  947. FORMAT_EA_DETAIL    0343   0348   0380:
  948. FORMAT_EA_ITEM      0166   0253:
  949. HALT                0070   0668:
  950. INITIALIZE          0103   0442:
  951. NOVALUE             0071   0669:
  952. OFF                 0493
  953. ON                  0491
  954. PROCESS_DRIVE       0117   0485:
  955. PROCESS_SYS002      0124:
  956. REGISTER_REQUIRED_FUNCTIONS
  957.                     0066   0587:
  958. REGISTER_ROUTINE    0597   0613   0617:
  959. SYNTAX              0072   0670:
  960. TRAP_PROCESSING     0666   0667   0668   0669   0670   0673:
  961. WRITE_OUTPUT_FILE   0208   0321   0329   0339   0416   0428   0757:
  962.  
  963. ---- FUNCTIONS ----
  964. ARG                 0227   0230   0390   0489   0678   0697   0717   0719
  965.                     0721   0723   0765
  966. ARRAYSORT           0141   0199
  967. C2X                 0203   0333   0402
  968. CENTER              0180   0730
  969. CHAROUT             0145   0167
  970. COPIES              0106   0113   0126   0145   0148   0153   0158   0190
  971.                     0191   0192   0193   0194   0195   0196   0204   0206
  972.                     0332   0407   0409   0412   0414   0422   0424   0462
  973.                     0474   0474   0496   0506   0516   0527   0724   0725
  974.                     0729   0733   0734
  975. D2X                 0337   0408   0423
  976. DATE                0152
  977. DOSDISK             0087   0504
  978. DOSEALIST           0269
  979. DOSFILESYS          0514
  980. FILESPEC            0059   0060   0061   0084   0243   0276   0627   0628
  981.                     0629   0688   0690   0691
  982. FORMAT              0205   0236   0238   0239
  983. LEFT                0058   0184   0185   0186   0202   0294   0333   0335
  984.                     0348   0398   0411   0426   0569   0657
  985. LENGTH              0136   0155   0155   0170   0337   0363   0364   0404
  986.                     0405   0625   0724   0725   0729   0731   0733   0734
  987. LINEIN              0133   0541
  988. LINEOUT             0090   0093   0160   0173   0181   0188   0197   0571
  989.                     0765   0768   0773   0774
  990. LINES               0131   0540
  991. MAX                 0135
  992. OVERLAY             0463   0464   0465
  993. POS                 0306   0310   0567   0675   0701
  994. RIGHT               0547
  995. RxFuncAdd           0639
  996. RxFuncQuery         0623   0699
  997. SOURCELINE          0678
  998. STREAM              0119   0138   0210   0492   0573
  999. STRIP               0078   0266   0281   0526   0564   0628   0678
  1000. SUBSTR              0168   0234   0359   0360   0552   0553
  1001. SysCurState         0144   0211
  1002. SysDriveMap         0457
  1003. SysFileDelete       0085   0115   0213   0214   0574   0745
  1004. SysIni              0078
  1005. TIME                0063   0065   0154   0232   0244
  1006. TRACE               0218
  1007. TRANSLATE           0084   0245   0401   0415
  1008. VALUE               0058   0218   0524   0535   0683
  1009. VARDUMP             0748
  1010. WORD                0117   0643   0643
  1011. WORDS               0116
  1012. X2D                 0463   0464   0465
  1013. XRANGE              0463   0464   0465   0468   0469   0470   0471   0472
  1014.                     0474   0477
  1015.  
  1016. \*-------------------  End of REXX Cross Reference  -------------------*/
  1017.