I gave your BaCon example a try but had to make the _Bool change and change /Users to /home.
DECLARE Exclude$ = "Guest|Shared"
FUNCTION SelectFolder$(Title$, Folder$)
LOCAL Menu$ ASSOC STRING
LOCAL tLen,cnt,Amount TYPE int
LOCAL Border$ TYPE STRING
LOCAL Loop TYPE _Bool
tLen = LEN(Title$)
Loop = TRUE
Border$ = FILL$(LEN(Title$), 45 )
WHILE Loop
Count = 1
OPEN Folder$ FOR DIRECTORY AS mydir
CLEAR
PRINT Title$
PRINT Border$
REPEAT
GETFILE myfile$ FROM mydir
IF LEFT$(myfile$,1)== "." OR ISFALSE(LEN(myfile$)) OR REGEX(myfile$,Exclude$) THEN
CONTINUE
ELSE
Menu$(STR$(Count)) = myfile$
PRINT Count,") ", myfile$
INCR Count
ENDIF
UNTIL ISFALSE(LEN(myfile$))
CLOSE DIRECTORY mydir
PRINT Border$
Amount = NRKEYS(Menu$)
PRINT
INPUT "Select User: ",Selection$
blah = VAL(Selection$)
IF (blah < 1 OR blah > Amount) THEN
PRINT ">>> Invalid Selection <<"
SLEEP 1000
CONTINUE
ELSE
Loop = FALSE
ENDIF
WEND
RETURN Menu$(Selection$)
END FUNCTION
selected$ = SelectFolder$("Armando's Test Menu","/home")
PRINT
PRINT "You Selected: ", selected$
jrs@jrs-laptop:~/BaCon/bacon-3.7.3$ ./air
Armando's Test Menu
-------------------
1) jrs
-------------------
Select User: 1
You Selected: jrs
jrs@jrs-laptop:~/BaCon/bacon-3.7.3$
This is a much easier task than I first imagined.