Question Canned code for selecting a directory?

Rob Fitzpatrick

ProgressTalk.com Sponsor
I'm writing a character-mode utility and want to prompt the user for the name of a directory in which to save some files. I've done this in the past with a simple update statement.

I know that Progress provides some code that gives you a dialog box for opening or saving a file (e.g. adeedit/_dlggetf.p or adecomm/_filecom.p). Do they provide something similar that implements a directory-picker dialog? In other words, a character equivalent of SYSTEM-DIALOG GET-DIR.
 

Osborne

Active Member
Many years ago I created my own directory selection routine, and although very basic if any help have listed the main parts:
Code:
DEFINE VARIABLE vDirectory AS CHARACTER NO-UNDO.
DEFINE VARIABLE vDirectories AS CHARACTER LABEL "Directories" NO-UNDO.
DEFINE VARIABLE vDirSeparator AS CHARACTER NO-UNDO.

DEFINE FRAME fDir
    vDirectories AT ROW 2 COL 4
    VIEW-AS SELECTION-LIST SINGLE SCROLLBAR-VERTICAL SIZE 34 BY 8
    WITH SIDE-LABELS THREE-D VIEW-AS DIALOG-BOX CENTERED SIZE 55 BY 11
    TITLE "Directories".

ON RETURN OF vDirectories IN FRAME fDir DO:
   ASSIGN FILE-INFO:FILENAME = vDirectory + vDirSeparator + SELF:SCREEN-VALUE
   vDirectory = FILE-INFO:PATHNAME.
   RUN list_directories.
END.

vDirectory = SESSION:TEMP-DIRECTORY.
IF OPSYS = "UNIX" THEN vDirSeparator = CHR(47).
ELSE vDirSeparator = CHR(92).
RUN list_directories.

VIEW FRAME fDir.
ENABLE ALL WITH FRAME fDir.
WAIT-FOR GO, END-ERROR, WINDOW-CLOSE OF FRAME fDir.

ASSIGN FILE-INFO:FILENAME = vDirectory + vDirSeparator + vDirectories:SCREEN-VALUE
                            vDirectory = FILE-INFO:PATHNAME.
MESSAGE "Directory selected =" vDirectory VIEW-AS ALERT-BOX INFORMATION.

PROCEDURE list_directories:
   DEFINE VARIABLE vDirName AS CHARACTER NO-UNDO.
   DEFINE VARIABLE vFiles AS CHARACTER EXTENT 3 NO-UNDO.
   DEFINE VARIABLE vFilesList AS CHARACTER NO-UNDO.

   INPUT FROM OS-DIR(vDirectory).
   REPEAT:
      IMPORT vFiles.
      IF INDEX(vFiles[3], "D") > 0 AND vFiles[1] <> "." THEN
         vFilesList = vFilesList + (IF vFilesList <> "" THEN "," ELSE "") + vFiles[1].
   END.
   INPUT CLOSE.

   DO WITH FRAME fDir:
      ASSIGN vDirectories:LIST-ITEMS IN FRAME fDir = vFilesList
             vDirectories:SCREEN-VALUE = ENTRY(1,vDirectories:LIST-ITEMS).
      APPLY "ENTRY" TO vDirectories.
   END.
END PROCEDURE.
 
Last edited:
  • Like
Reactions: rzr
Top