/*
   PROGRAM NAME: DirList.p
         AUTHOR: Speedy Mercer
   DATE WRITTEN: 04-08-2004
    DESCRIPTION: Returns a Temp Table of Files and Directories.

   USAGE SYNTAX:
                  RUN DirList.p (INPUT DirectoryNameToList),
                                 INPUT ShowSubs-Logical,
                                 INPUT-OUTPUT TABLE tt-File).
*/

DEFINE TEMP-TABLE tt-File NO-UNDO
  FIELD fcPathName AS CHARACTER
  FIELD fcFileName AS CHARACTER
  INDEX tt-File-prim AS PRIMARY UNIQUE fcPathName fcFileName.   

DEFINE INPUT        PARAMETER pcDir       AS CHARACTER NO-UNDO.
DEFINE INPUT        PARAMETER plRecursive AS LOGICAL   NO-UNDO.
DEFINE INPUT-OUTPUT PARAMETER TABLE       FOR tt-File.

DEFINE VARIABLE vcFile AS CHARACTER NO-UNDO EXTENT 3.

INPUT FROM OS-DIR(pcDir).
REPEAT:
   IMPORT vcFile.
   /* Skip current and parent dir */
   IF vcFile[1] EQ '.':U OR vcFile[1] EQ '..':U THEN NEXT.

  /* We only want to store files in the TT, not dirs */
  IF vcFile[3] BEGINS 'F':U THEN DO:
     CREATE tt-File.
     ASSIGN tt-File.fcPathName = REPLACE(vcFile[2],vcFile[1],'') 
            tt-File.fcFileName = vcFile[1].
  END.

  /* Recursive read - USE WITH CAUTION! ADDS LOTS OF RUN TIME! */
  IF vcFile[3] BEGINS 'D':U 
  AND plRecursive 
  THEN RUN DirList.p (INPUT vcFile[2],
                      INPUT yes,
                      INPUT-OUTPUT TABLE tt-File).
END.
INPUT CLOSE.
