home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / games / gi / tape.cpp < prev    next >
C/C++ Source or Header  |  1993-11-18  |  5KB  |  172 lines

  1. /*--------------------------------------------------------------------------*/
  2. /*                                                                          */
  3. /*   Main-Module   : Configurationsmodul zu Tape.c                            */
  4. /*                                                                          */
  5. /*   Version       : V1.00                                                  */
  6. /*                                                                          */
  7. /*   Date          : 31.10.93                                               */
  8. /*                                                                          */
  9. /*   Written       : RF / SC                                                */
  10. /*                                                                          */
  11. /*     Revision History :
  12.  
  13.                                                                             */
  14. /*--------------------------------------------------------------------------*/
  15. #define INCL_PM
  16. #include <OS2.H>
  17. #include <DIR.H>
  18. #include <STDLIB.H>
  19. #include <STRING.H>
  20. #include <PMTHREAD.HPP>
  21. #include <CHECKBOX.HPP>
  22.  
  23. /*---- Globals ----*/
  24. PMWINTHREAD msgloop;
  25. FILEDLG     filedlg;
  26. HWND        wid[8], title;
  27. char        *text[] = { "Tape-Control                   Status: Stop",
  28.                         "Tape-Control                   Status: Record",
  29.                         "Tape-Control                   Status: Play" };
  30.  
  31. /*---- Extern ----*/
  32. extern USHORT    modeflag;
  33. extern long        event;
  34. extern char        filename[];
  35. extern long        count;
  36. extern HWND        globhwnd;
  37. extern BOOL        cfgpresent;
  38. extern unsigned stoponover;
  39.  
  40. /*--------------------------------------------------------------------------*/
  41. /*--------------------------------------------------------------------------*/
  42. void Active (HWND hwnd, unsigned mode)
  43.     {
  44.     char    tmp[10];
  45.  
  46.     WinEnableControl (hwnd, 101, mode);
  47.     WinEnableControl (hwnd, 102, mode);
  48.     WinEnableControl (hwnd, 105, mode);
  49.     WinEnableControl (hwnd, 106, mode);
  50.     WinEnableControl (hwnd, 107, mode);
  51.  
  52.     WinSetWindowText (title, text[modeflag]);
  53.  
  54.     itoa (count, tmp, 10);
  55.     WinSetWindowText (wid[3], tmp);
  56.     }
  57. /*--------------------------------------------------------------------------*/
  58. unsigned GetName (HWND hwnd)
  59.     {
  60.     HWND        hwnddlg;
  61.     unsigned    error;
  62.     char        drive[MAXDRIVE], dir[MAXDIR];
  63.  
  64.     filedlg.cbSize = sizeof (FILEDLG);
  65.     filedlg.fl = FDS_CENTER | FDS_OPEN_DIALOG;
  66.     filedlg.pszTitle = "Choose a file or enter a new name";
  67.     if (filename[0])
  68.         {
  69.         fnsplit (filename, drive, dir, 0, 0);
  70.         fnmerge (filename, drive, dir, "*", ".TAP");
  71.         strcpy (filedlg.szFullFile, filename);
  72.         }
  73.     else
  74.         strcpy (filedlg.szFullFile, "*.TAP");
  75.  
  76.     hwnddlg = WinFileDlg (HWND_DESKTOP, hwnd, &filedlg);
  77.     if (hwnddlg && filedlg.lReturn == DID_OK)
  78.         {
  79.         strcpy (filename, filedlg.szFullFile);
  80.         WinSetWindowText (wid[6], filename);
  81.         error = NOERR;
  82.         }
  83.     else
  84.         error = ECANCEL;
  85.  
  86.     return (error);
  87.     }
  88. /*--------------------------------------------------------------------------*/
  89. MRESULT    EXPENTRY dlgproc (HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
  90.     {
  91.     int            i;
  92.     char        tmp[10];
  93.  
  94.     switch (msg)
  95.         {
  96.         case WM_INITDLG:
  97.             for (i=0; i<8; i++)
  98.                 wid[i] = WinWindowFromID (hwnd, 101+i);
  99.             title = WinWindowFromID (hwnd, FID_TITLEBAR);
  100.             globhwnd = hwnd;
  101.             cfgpresent = TRUE;
  102.             WinSendMsg (hwnd, WM_USER, 0, 0);
  103.             WinCheckButton (hwnd, 115, stoponover);
  104.             Active (hwnd, 1);
  105.             return (FALSE);
  106.         case WM_COMMAND:
  107.         case WM_CONTROL:
  108.             switch (SHORT1FROMMP (mp1))
  109.                 {
  110.                 case 101:     // Play
  111.                     count = 0;
  112.                     modeflag = 2;
  113.                     event++;
  114.                     Active (hwnd, 0);
  115.                     break;
  116.                 case 102:    // Record
  117.                     //count = 0;
  118.                     modeflag = 1;
  119.                     event++;
  120.                     Active (hwnd, 0);
  121.                     break;
  122.                 case 103:    // Stop
  123.                     modeflag = 0;
  124.                     Active (hwnd, 1);
  125.                     break;
  126.                 case 105:    // Reset Counter
  127.                     CheckBoxSet (wid[4], 0);
  128.                     WinSetWindowText (wid[3], "0");
  129.                     count = 0;
  130.                     event++;
  131.                     break;
  132.                 case 106:    // File...
  133.                     GetName (hwnd);
  134.                     break;
  135.                 case 107:
  136.                     WinQueryWindowText (wid[6], 256, filename);
  137.                     break;
  138.                 case 108:    // End
  139.                     cfgpresent = FALSE;
  140.                     WinDismissDlg (hwnd, FALSE);
  141.                     break;
  142.                 case 115:    // Stop on Overplay
  143.                     stoponover = WinQueryButtonCheckstate (hwnd, 115);
  144.                     break;
  145.                 }
  146.             break;
  147.         case WM_USER:
  148.             switch (mp1)
  149.                 {
  150.                 case 0:        // update counter
  151.                     itoa (count, tmp, 10);
  152.                     WinSetWindowText (wid[3], tmp);
  153.                     break;
  154.                 case 1:        // error in TAPE.DLL -> STOP
  155.                     modeflag = 0;
  156.                     Active (hwnd, 1);
  157.                     break;
  158.                 }
  159.             break;
  160.         default:
  161.             return (WinDefDlgProc (hwnd, msg, mp1, mp2));
  162.         }
  163.     return (0L);
  164.     }
  165. /*--------------------------------------------------------------------------*/
  166. void main(void)
  167.     {
  168.     WinDlgBox (HWND_DESKTOP, HWND_DESKTOP, dlgproc, 0, 100, NULL);
  169.     }
  170. /*--------------------------------------------------------------------------*/
  171.  
  172.