home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / os2sdk / os2sdk11 / tk4 / spy / options.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-02-20  |  7.5 KB  |  234 lines

  1. /***************************************************************************\
  2. * options.c - Spy code for several options type dialogs
  3. *
  4. * Created by Microsoft Corporation, 1989
  5. \***************************************************************************/
  6.  
  7. #define    INCL_WINBUTTONS
  8. #define    INCL_WINDIALOGS
  9. #define    INCL_WINHEAP        /* needed for spy.h */
  10. #define    INCL_WINLISTBOXES
  11. #define    INCL_WINMESSAGEMGR
  12. #define    INCL_WINPOINTERS    /* needed for spy.h */
  13. #include <os2.h>
  14. #include <spyhook.h>
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <string.h>
  18. #include <time.h>
  19. #include "spy.h"
  20.  
  21. /* Prototypes */
  22. MRESULT CALLBACK SpyOutputsDlgProc(HWND, USHORT, MPARAM, MPARAM);
  23. MRESULT CALLBACK SpySaveListDlgProc(HWND, USHORT, MPARAM, MPARAM);
  24. MRESULT CALLBACK AboutWndProc(HWND, USHORT, MPARAM, MPARAM);
  25.  
  26. /***************************************************************************\
  27. * MRESULT CALLBACK SpyOutputsDlgProc (hwnd, msg, mp1, mp2)
  28. \***************************************************************************/
  29. MRESULT CALLBACK SpyOutputsDlgProc(hwnd, msg, mp1, mp2)
  30. HWND            hwnd;
  31. USHORT          msg;
  32. MPARAM          mp1;
  33. MPARAM          mp2;
  34. {
  35.     USHORT      wAction;
  36.  
  37.     switch (msg) {
  38.  
  39.     case WM_INITDLG:
  40.         /*
  41.          * Now initialize the output options in the dialog
  42.          */
  43.         WinSendDlgItemMsg(hwnd, DID_WINDOW, BM_SETCHECK,
  44.             (MPARAM)spyopt.fWindow, 0L);
  45.         WinSendDlgItemMsg(hwnd, DID_FILE, BM_SETCHECK,
  46.             (MPARAM)spyopt.fFile, 0L);
  47.  
  48.         WinSetDlgItemShort(hwnd, DID_WINDOWLINES, spyopt.cWindowLines, FALSE);
  49.         WinSetDlgItemText(hwnd, DID_FILENAME, spystr.szFileName);
  50.  
  51.  
  52.         break;
  53.  
  54.     case WM_COMMAND:
  55.         switch (SHORT1FROMMP(mp1)) {
  56.         case DID_OK:
  57.  
  58.             /*
  59.              * Now retrieve the output options from the
  60.              * dialog
  61.              */
  62.             spyopt.fWindow = (BOOL)WinSendDlgItemMsg(hwnd,
  63.                 DID_WINDOW, BM_QUERYCHECK, 0L, 0L);
  64.             spyopt.fFile = (BOOL)WinSendDlgItemMsg(hwnd,
  65.                 DID_FILE, BM_QUERYCHECK, 0L, 0L);
  66.  
  67.             WinQueryDlgItemShort(hwnd, DID_WINDOWLINES, &spyopt.cWindowLines, FALSE);
  68.             WinQueryDlgItemText(hwnd, DID_FILENAME,
  69.                 sizeof(spystr.szFileName), spystr.szFileName);
  70.  
  71.             /*
  72.              * Now take care of file operations
  73.              * If a file is already active, we will continue to use it, and
  74.              * ignore the case where the user may have changed file names
  75.              * Will truncate any file.
  76.              */
  77.             if (spyopt.fFile) {
  78.                  if (spyopt.hfileSpy == NULL)
  79.                     if (DosOpen((PSZ)spystr.szFileName, &spyopt.hfileSpy,
  80.                             (USHORT far *)&wAction, 0L, 0,
  81.                             0x0012, 0x00C1, 0L) != 0)
  82.                         spyopt.hfileSpy = NULL; /* Failed on open */
  83.             } else {
  84.                 if (spyopt.hfileSpy != NULL) {
  85.                     /* file open, not outputing, close it now */
  86.                     DosClose (spyopt.hfileSpy);
  87.                     spyopt.hfileSpy = NULL;
  88.                 }
  89.             }
  90.             /* Fall through to DID_CANCEL */
  91.         case DID_CANCEL:
  92.             /* Now dismiss the dialog */
  93.             WinDismissDlg(hwnd, SHORT1FROMMP(mp1));
  94.             break;
  95.         }
  96.         break;
  97.  
  98.     default:
  99.         return(WinDefDlgProc(hwnd, msg, mp1, mp2));
  100.         break;
  101.     }
  102.     return 0L;
  103. }
  104.  
  105.  
  106.  
  107.  
  108. /***************************************************************************\
  109. * MRESULT CALLBACK SpySaveListDlgProc(hwnd, msg, mp1, mp2)
  110. *
  111. * The Spy Windows Dialog procedure
  112. \***************************************************************************/
  113. MRESULT CALLBACK SpySaveListDlgProc(hwnd, msg, mp1, mp2)
  114. HWND hwnd;
  115. USHORT msg;
  116. MPARAM mp1;
  117. MPARAM mp2;
  118. {
  119.     HFILE   hfileOut;
  120.     char    szTemp[100];
  121.     char    szTime[10];
  122.     char    szDate[10];
  123.     SHORT   cItems;
  124.     SHORT   iItem;
  125.     USHORT  cch;
  126.     USHORT  cchWritten;
  127.     USHORT  wAction;
  128.     ULONG   lTemp;
  129.  
  130.     switch (msg) {
  131.  
  132.     case WM_INITDLG:
  133.         WinSendDlgItemMsg(hwnd, DID_APPEND, BM_SETCHECK,
  134.             (MPARAM)spyopt.fAppend, 0L);
  135.         /* Initialize the dialog items */
  136.         WinSetDlgItemText(hwnd, DID_FILENAME, spystr.szSaveFileName);
  137.         break;
  138.  
  139.     case WM_COMMAND:
  140.         switch (SHORT1FROMMP(mp1)) {
  141.         case DID_OK:
  142.             /*
  143.              * Get the file name, and try to open the file,
  144.              * Then loop through and dump the listbox contents to the
  145.              * file.
  146.              */
  147.             spyopt.fAppend = (BOOL)WinSendDlgItemMsg(hwnd,
  148.                 DID_APPEND, BM_QUERYCHECK, 0L, 0L);
  149.  
  150.             WinQueryDlgItemText(hwnd, DID_FILENAME,
  151.                 sizeof(spystr.szSaveFileName), spystr.szSaveFileName);
  152.  
  153.             if (DosOpen((PSZ)spystr.szSaveFileName, (HFILE far *)&hfileOut,
  154.                     (USHORT far *)&wAction, 0L, 0,
  155.                     spyopt.fAppend? 0x0011 : 0x0012, 0x00C1, 0L) == 0) {
  156.  
  157.                 /* If append, get to the end of the file */
  158.                 if (spyopt.fAppend)
  159.                     DosChgFilePtr(hfileOut, 0L, 2, (PULONG)&lTemp);
  160.  
  161.                 /* Get count of items */
  162.                 cItems = (SHORT)WinSendMsg(hwndSpyList, LM_QUERYITEMCOUNT,
  163.                             0L, 0L);
  164.  
  165.                 /* Write out a title block to the file */
  166.                 _strdate(szDate);
  167.                 _strtime(szTime);
  168.                 DosWrite(hfileOut,
  169.                         (PSZ)"***************************************\r\n",
  170.                                 41, (PUSHORT)&cchWritten);
  171.                 cch = sprintf(szTemp, "* Spy: %-10s %-10s          *\r\n",
  172.                     szDate, szTime);
  173.                 DosWrite(hfileOut, (PSZ)szTemp, cch, (PUSHORT)&cchWritten);
  174.  
  175.                 DosWrite(hfileOut,
  176.                         (PSZ)"***************************************\r\n",
  177.                                 41, (PUSHORT)&cchWritten);
  178.  
  179.  
  180.                         /* Now output the list to the file */
  181.                 for (iItem = 0; iItem < cItems; iItem++) {
  182.                     cch = (SHORT)WinSendMsg(hwndSpyList, LM_QUERYITEMTEXT,
  183.                             MPFROM2SHORT(iItem, sizeof(szTemp)),
  184.                             (MPARAM)(PSZ)szTemp);
  185.                     /* Add Newline at end of string */
  186.                     szTemp[cch++] = '\r';
  187.                     szTemp[cch++] = '\n';
  188.                     szTemp[cch] = '\0';
  189.                     DosWrite(hfileOut, (PSZ)szTemp, cch,
  190.                             (PUSHORT)&cchWritten);
  191.                 }
  192.                 DosClose(hfileOut);
  193.             }
  194.  
  195.         case DID_CANCEL:
  196.             /* Now dismiss the dialog */
  197.             WinDismissDlg(hwnd, SHORT1FROMMP(mp1));
  198.             break;
  199.         break;
  200.     }
  201.  
  202.     default:
  203.         return(WinDefDlgProc(hwnd, msg, mp1, mp2));
  204.     }
  205.     return 0L;
  206. }
  207.  
  208.  
  209.  
  210.  
  211. /**************************************************************************\
  212. * AboutWndProc(HWND hwnd, USHORT message, MPARAM mp1, MPARAM mp2)
  213. *
  214. * About Spy... Dialog procedure
  215. \***************************************************************************/
  216. MRESULT CALLBACK AboutWndProc(hwnd, message, mp1, mp2)
  217. HWND    hwnd;
  218. USHORT  message;
  219. MPARAM   mp1;
  220. MPARAM   mp2;
  221. {
  222.     switch (message) {
  223.         case WM_COMMAND:
  224.             WinDismissDlg(hwnd, TRUE);
  225.             break;
  226.         default:
  227.             return(WinDefDlgProc(hwnd, message, mp1, mp2));
  228.             break;
  229.     }
  230.     return 0L;
  231.  
  232. } /* end aboutwndproc */
  233.  
  234.