* Windows OpenFilename sample code; * Richard A. DeVenezia; * http://www.devenezia.com; * posted to comp.soft-sys.sas May 14, 2001; filename ofna catalog 'work.winapi.ofna.source'; data _null_; file ofna; input; put _infile_; cards4; routine GetOpenFileNameA module=COMDLG32 minarg=20 maxarg=20 stackpop=called returns=short ; arg 1 num input fdstart format=pib4. ; * DWORD lStructSize; arg 2 num input format=pib4. ; * HWND hwndOwner; arg 3 num input format=pib4. ; * HINSTANCE hInstance; arg 4 num input format=pib4. ; * LPCSTR lpstrFilter; arg 5 num input format=pib4. ; * LPSTR lpstrCustomFilter; arg 6 num input format=pib4. ; * DWORD nMaxCustFilter; arg 7 num update format=pib4. ; * DWORD nFilterIndex; arg 8 num input format=pib4. ; * LPSTR lpstrFile; arg 9 num input format=pib4. ; * DWORD nMaxFile; arg 10 num input format=pib4. ; * LPSTR lpstrFileTitle; arg 11 num input format=pib4. ; * DWORD nMaxFileTitle; arg 12 num input format=pib4. ; * LPCSTR lpstrInitialDir; arg 13 num input format=pib4. ; * LPCSTR lpstrTitle; arg 14 num input format=pib4. ; * DWORD Flags; arg 15 num update format=pib2. ; * WORD nFileOffset; arg 16 num update format=pib2. ; * WORD nFileExtension; arg 17 num input format=pib4. ; * LPCSTR lpstrDefExt; arg 18 num input format=pib4. ; * LPARAM lCustData; arg 19 num input format=pib4. ; * LPOFNHOOKPROC lpfnHook; arg 20 num input format=pib4. ; * LPCSTR lpTemplateName; ;;;; run; filename sascbtbl catalog 'work.winapi.ofna.source' ; data _null_; strFilter = "Text Files (*.txt)"||byte(0)||"*.txt"||byte(0) || "SAS Files (*.sas)" ||byte(0)||"*.sas"||byte(0) || byte(0); nFilterIndex = 1; length strFile $2048; strFile = byte(0); strInitialDir = "C:\Temp\"||byte(0); strDialogTitleBarText = "Only the first five files selected will be processed"||byte(0); OFN_ALLOWMULTISELECT = 00000200x; OFN_EXPLORER = 00080000x; nFileOffset = 0; nFileExtension = 0; rc = modulen ( 'GetOpenFileNameA' , 76 %* 20*4 - 2 - 2; , 0 , 0 , addr(strFilter) , 0 , 0 , nFilterIndex , addr(strFile) , 2048 , 0 , 0 , addr (strInitialDir) , addr (strDialogTitleBarText) , bor (OFN_ALLOWMULTISELECT, OFN_EXPLORER) , nFileOffset , nFileExtension , 0 , 0 , 0 , 0 ); put rc=; put nFilterIndex=; length file1-file5 $200; array f file1-file5; path = scan (strFile,1, byte(0)); do i = 1 to 5; f[i] = scan (strFile, i+1, byte(0)); end; put _all_; run;