home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / wpj_mag / wpjv1n7.zip / HELLO.ZIP / FILEO.C next >
C/C++ Source or Header  |  1993-07-26  |  7KB  |  233 lines

  1. /*============================================================================
  2.   FileO -- DLL for File Open dialog box
  3.  
  4.   File      : FileO.C
  5.  
  6.   Prototype : 
  7.  
  8.   Call      : 
  9.  
  10.   Library   : 
  11.  
  12.   24 July 1993 - dlcampbell
  13.   (c) 1993 WynApse
  14. ----------------------------------------------------------------------------*/
  15. #define WINVER 0x0300
  16. #include <windows.h>
  17. #include <string.h>
  18. #include "fileo.h"
  19.  
  20. HWND   hWndMain = NULL, hWndDlg = NULL;
  21. static HANDLE hInst;
  22. static char szFileName[128];
  23. static char szFileSpec[16] = "*.EXE";
  24. static char szDefExt[5]    = "EXE";
  25. static WORD wFileAttr      = DDL_DRIVES | DDL_DIRECTORY; /* 0x4010 */
  26.  
  27. /*============================================================================
  28.   LibMain -- Windows calls 'LibEntry' once when the first program that
  29.              requires the DLL is loaded.  LibEntry initializes the local
  30.              heap by calling LocalInit and then calls LibMain.  This simply
  31.              unlocks the data segment of the library (which is locked by
  32.              the LocalInit call in LIBENTRY) and returns 1.
  33.  
  34.   File      : FileO.C
  35.  
  36.   Prototype : int FAR PASCAL LibMain(HANDLE, WORD, WORD, LPSTR);
  37.  
  38.   Call      : LibMain(hInstance, wDataSeg, wHeapSize, lpszCmdLine);
  39.  
  40.   Library   : 
  41.  
  42.   24 July 1993 - dlcampbell
  43.   (c) 1993 WynApse
  44. ----------------------------------------------------------------------------*/
  45. int FAR PASCAL LibMain (HANDLE hInstance, WORD wDataSeg, WORD wHeapSize,
  46.                                                             LPSTR lpszCmdLine)
  47. {
  48. if (wHeapSize > 0)
  49.    UnlockData(0);
  50.  
  51. hInst = hInstance;
  52.  
  53. return 1;
  54. }                                       /* LibMain */
  55.  
  56. /*============================================================================
  57.   WEP -- this is called by Windows when the dll is released
  58.  
  59.   File      : FileO.C
  60.  
  61.   Prototype : int FAR PASCAL WEP (int bSystemExit);
  62.  
  63.   Call      : (int bSystemExit);
  64.  
  65.   Library   : 
  66.  
  67.   24 July 1993 - dlcampbell
  68.   (c) 1993 WynApse
  69. ----------------------------------------------------------------------------*/
  70. int FAR PASCAL WEP (int bSystemExit)
  71. {
  72. /*----------------------------------------------------------------------------
  73.   get rid of things you allocated in the LibMain proc here
  74. ----------------------------------------------------------------------------*/
  75.  
  76. return TRUE;
  77. }                                       /* WEP */
  78.  
  79. /*============================================================================
  80.   lstrchr --
  81.  
  82.   File      : FileO.C
  83.  
  84.   Prototype : LPSTR lstrchr(char, char);
  85.  
  86.   Call      : lstrchr(str, ch);
  87.  
  88.   Library   : 
  89.  
  90.   24 July 1993 - dlcampbell
  91.   (c) 1993 WynApse
  92. ----------------------------------------------------------------------------*/
  93. LPSTR lstrchr(LPSTR str, char ch)
  94. {
  95. while (*str)
  96.    {
  97.    if (ch == *str)
  98.       return str;
  99.    str = AnsiNext(str);
  100.    }
  101. return NULL;
  102. }                                       /* lstrchr */
  103.  
  104. /*============================================================================
  105.   DoFileOpenDlgProc
  106.  
  107.   File      : FileO.C
  108.  
  109.   Prototype : BOOL FAR PASCAL DoFileOpenDlgProc(HWND, WORD, WORD, LONG);
  110.  
  111.   Call      : WndProc(hWnd, message, wParam, lParam);
  112.  
  113.   Library   :
  114.  
  115.   24 July 1993 - dlcampbell
  116.   (c) 1993 WynApse
  117. ----------------------------------------------------------------------------*/
  118. BOOL FAR PASCAL DoFileOpenDlgProc(HWND hDlg, WORD message,
  119.                                 WORD wParam, LONG lParam)
  120. {
  121. char    cLastChar;
  122. short   nEditLen;
  123.  
  124. switch (message)
  125.    {
  126.    case WM_INITDIALOG :
  127.       SendDlgItemMessage(hDlg, IDD_FNAME, EM_LIMITTEXT, 80, 0L);
  128.       DlgDirList(hDlg, szFileSpec, IDD_FLIST, IDD_FPATH, wFileAttr);
  129.       SetDlgItemText(hDlg, IDD_FNAME, szFileSpec);
  130.       return TRUE;
  131.  
  132.    case WM_COMMAND :
  133.       switch (wParam)
  134.          {
  135.          case IDD_FLIST :
  136.             switch (HIWORD(lParam))
  137.                {
  138.                case LBN_SELCHANGE :
  139.                   if (DlgDirSelect(hDlg, szFileName, IDD_FLIST))
  140.                      lstrcat(szFileName, szFileSpec);
  141.                   SetDlgItemText(hDlg, IDD_FNAME, szFileName);
  142.                   return TRUE;
  143.  
  144.                case LBN_DBLCLK :
  145.                   if (DlgDirSelect(hDlg, szFileName, IDD_FLIST))
  146.                      {
  147.                      lstrcat(szFileName, szFileSpec);
  148.                      DlgDirList(hDlg, szFileName, IDD_FLIST, IDD_FPATH, wFileAttr);
  149.                        SetDlgItemText(hDlg, IDD_FNAME, szFileSpec);
  150.                      }
  151.                   else
  152.                      {
  153.                      SetDlgItemText(hDlg, IDD_FNAME, szFileName);
  154.                      SendMessage(hDlg, WM_COMMAND, IDOK, 0L);
  155.                      }
  156.                   return TRUE;
  157.                }
  158.             break;
  159.  
  160.          case IDD_FNAME :
  161.             if (HIWORD(lParam) == EN_CHANGE)
  162.                EnableWindow(GetDlgItem(hDlg, IDOK),
  163.                  (BOOL) SendMessage(LOWORD(lParam), WM_GETTEXTLENGTH, 0, 0L));
  164.             return TRUE;
  165.  
  166.          case IDOK :
  167.             GetDlgItemText(hDlg, IDD_FNAME, szFileName, 80);
  168.             nEditLen = lstrlen(szFileName);
  169.             cLastChar = *AnsiPrev(szFileName, szFileName + nEditLen);
  170.  
  171.             if (cLastChar == '\\' || cLastChar == ':')
  172.                lstrcat(szFileName, szFileSpec);
  173.  
  174.             if (lstrchr(szFileName, '*') || lstrchr(szFileName, '?'))
  175.                {
  176.                if (DlgDirList(hDlg, szFileName, IDD_FLIST, IDD_FPATH, wFileAttr))
  177.                   {
  178.                   lstrcpy(szFileSpec, szFileName);
  179.                   SetDlgItemText(hDlg, IDD_FNAME, szFileSpec);
  180.                   }
  181.                else
  182.                   MessageBeep(0);
  183.       
  184.                return TRUE;
  185.                }
  186.             lstrcat(lstrcat(szFileName, "\\"), szFileSpec);
  187.  
  188.             if (DlgDirList(hDlg, szFileName, IDD_FLIST, IDD_FPATH, wFileAttr))
  189.                {
  190.                lstrcpy(szFileSpec, szFileName);
  191.                SetDlgItemText(hDlg, IDD_FNAME, szFileSpec);
  192.                return TRUE;
  193.                }
  194.             szFileName[nEditLen] = '\0';
  195.  
  196.             EndDialog(hDlg, TRUE);
  197.             return TRUE;
  198.  
  199.          case IDCANCEL :
  200.             EndDialog(hDlg, FALSE);
  201.             return TRUE;
  202.          }
  203.    }
  204. return FALSE;
  205. }                                       /* DoFileOpenDlgProc */
  206.  
  207. /*============================================================================
  208.   FileOpenDlgProc
  209.  
  210.   File      : Fileo.C
  211.  
  212.   Prototype : BOOL FAR PASCAL FileOpenDlgProc(void);
  213.  
  214.   Call      : FileOpenDlgProc()
  215.  
  216.   Library   : Fileo.DLL
  217.  
  218.   Example   : 
  219.  
  220.   26 July 1993 - dlcampbell
  221.   (c) 1993 WynApse
  222. ----------------------------------------------------------------------------*/
  223. BOOL FAR PASCAL FileOpenDlgProc(void)
  224. {
  225. static FARPROC lpfnDoFileOpenDlgProc;
  226.  
  227. lpfnDoFileOpenDlgProc = MakeProcInstance(DoFileOpenDlgProc, hInst);
  228. DialogBox(hInst, "FILEOPEN", GetFocus(), lpfnDoFileOpenDlgProc);
  229. FreeProcInstance(lpfnDoFileOpenDlgProc);
  230.  
  231. WritePrivateProfileString("FileO", "FileName", szFileName, "Hello.ini");
  232. }                                       /* FileOpenDlgProc */
  233.