Code:
H DftActGrp(*No) Option(*SrcStmt : *NoDebugIO) D PATHTOLIST C CONST('/home/jamie/') D*PATHTOLIST C CONST('/') D* D* Directory Entry Structure (dirent) D* D* D p_dirent s * D dirent ds based(p_dirent) D d_reserv1 16A D d_reserv2 10U 0 D d_fileno 10U 0 D d_reclen 10U 0 D d_reserv3 10I 0 D d_reserv4 8A D d_nlsinfo 12A D nls_ccsid 10I 0 OVERLAY(d_nlsinfo:1) D nls_cntry 2A OVERLAY(d_nlsinfo:5) D nls_lang 3A OVERLAY(d_nlsinfo:7) D nls_reserv 3A OVERLAY(d_nlsinfo:10) D d_namelen 10U 0 D d_name 640A D*------------------------------------------------------------ D* Open a Directory D* D* DIR *opendir(const char *dirname) D* D*------------------------------------------------------------ D opendir PR * EXTPROC('opendir') D dirname * VALUE D*------------------------------------------------------------ D* Read Directory Entry D* D* struct dirent *readdir(DIR *dirp) D* D*------------------------------------------------------------ D readdir PR * EXTPROC('readdir') D dirp * VALUE D* a few local variables... D dh S * D PathName S 256A D Name S 256A C* Step1: Open up the directory. c eval PathName= PATHTOLIST + x'00' C eval dh = opendir(%addr(PathName)) C if dh = *NULL c eval Msg = 'Cant open directory' c dsply Msg 50 c eval *INLR = *ON c Return c endif C* Step2: Read each entry from the directory (in a loop) c eval p_dirent = readdir(dh) c dow p_dirent <> *NULL C* FIXME: This code can only handle file/dir names 256 bytes long C* because thats the size of "Name" c if d_namelen < 256 c eval Name = %subst(d_name:1:d_namelen) c movel Name dsply_me 52 c dsply_me dsply c endif c eval p_dirent = readdir(dh) c enddo C* Step3: End Program c dsply Pause 1 c eval *inlr = *On
Comment