home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: InfoMgt / InfoMgt.zip / code25.zip / fspmisc.c < prev    next >
Text File  |  1995-10-04  |  40KB  |  1,236 lines

  1.  
  2. #define VAR_SCOPE extern
  3.  
  4. #include "fsp.h"
  5.  
  6. //*** #define's ************************************************************* */
  7.  
  8. #define UWM_SHOW    WM_USER + 2
  9.  
  10. /***************************************************************************/
  11. /* Set Title Dialog Proc                                                   */
  12. /***************************************************************************/
  13. MRESULT EXPENTRY pfndpSetTitle ( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )
  14. {
  15.    PUSEREC  pR = (PUSEREC) WinQueryWindowULong ( hwnd, QWL_USER );
  16.    HWND     hwndEnt;
  17.  
  18.    switch ( msg ) 
  19.    {
  20.       case WM_INITDLG:
  21.       {
  22.          HWND hwndE;
  23.  
  24.          pR = PVOIDFROMMP ( mp2 );
  25.           
  26.          WinSetWindowULong ( hwnd, QWL_USER, (ULONG) pR );
  27.           
  28.          hwndE = WinWindowFromID ( hwnd, DIT_TITLE );
  29.           
  30.          WinSendMsg ( hwndE, MLM_FORMAT, MPFROMLONG ( MLFIE_CFTEXT ), NULL );
  31.           
  32.          WinSendMsg ( hwndE, MLM_SETTEXTLIMIT, MPFROMLONG ( -1 ), NULL );
  33.           
  34.          if ( strcmp ( pR->crecCore.pszTree, DEF_ENT_NAME ) )
  35.          {
  36.             ULONG ulLen;
  37.             IPT   ipt;
  38.  
  39.             ulLen = strlen ( pR->crecCore.pszTree );
  40.              
  41.             WinSendMsg ( hwndE, MLM_SETIMPORTEXPORT,
  42.                          MPFROMP ( pR->crecCore.pszTree ), MPFROMLONG ( ulLen ) );
  43.              
  44.             ipt = 0;
  45.              
  46.             WinSendMsg ( hwndE, MLM_IMPORT, MPFROMP ( &ipt ), MPFROMLONG ( ulLen ) );
  47.          }
  48.       }
  49.       break;//return (MRESULT) TRUE;
  50.        
  51.       case WM_HELP:
  52.       {
  53.          SHORT   sId;
  54.  
  55.          sId = WinQueryWindowUShort ( hwnd, QWS_ID );
  56.  
  57.          WinSendMsg ( hwndH, HM_DISPLAY_HELP,
  58.                       MPFROM2SHORT ( sId, 0 ), MPFROMSHORT ( HM_RESOURCEID ) );
  59.       }
  60.       break;
  61.        
  62.       case WM_COMMAND:
  63.           
  64.          switch ( COMMANDMSG(&msg)->cmd ) {
  65.              
  66.             case DIT_HELP:
  67.             {
  68.                SHORT   sId;
  69.       
  70.                sId = WinQueryWindowUShort ( hwnd, QWS_ID );
  71.       
  72.                WinSendMsg ( hwndH, HM_DISPLAY_HELP,
  73.                             MPFROM2SHORT ( sId, 0 ), MPFROMSHORT ( HM_RESOURCEID ) );
  74.             }
  75.             break;
  76.              
  77.             case DID_CANCEL:
  78.  
  79.                WinDismissDlg ( hwnd, FALSE );
  80.                 
  81.             break;
  82.              
  83.             case DID_OK:
  84.             {
  85.                HWND   hwndE = WinWindowFromID ( hwnd, DIT_TITLE );
  86.                 
  87.                if ( WinSendMsg ( hwndE, MLM_QUERYCHANGED, NULL, NULL ) ) 
  88.                {
  89.                   MRESULT   mres;
  90.                   IPT       ipt;
  91.                   ULONG     ulLen;
  92.  
  93.                   mres = WinSendMsg ( hwndE, MLM_QUERYTEXTLENGTH, NULL, NULL );
  94.                    
  95.                   ipt = LONGFROMMR ( mres );
  96.                    
  97.                   mres = WinSendMsg ( hwndE, MLM_QUERYFORMATTEXTLENGTH,
  98.                                       MPFROMLONG ( 0 ), MPFROMLONG ( ipt ) );
  99.                    
  100.                   ipt = LONGFROMMR ( mres );
  101.                    
  102.                   ulLen = (ULONG) ipt;
  103.                    
  104.                   pR->crecCore.pszTree = realloc ( pR->crecCore.pszTree, ulLen + 1 );
  105.                    
  106.                   pR->crecCore.pszTree[ulLen] = 0;
  107.                    
  108.                   WinSendMsg ( hwndE, MLM_SETIMPORTEXPORT,
  109.                                MPFROMP ( pR->crecCore.pszTree ), MPFROMLONG ( ipt ) );
  110.                    
  111.                   ipt = 0;
  112.                    
  113.                   mres = WinSendMsg ( hwndE, MLM_EXPORT, MPFROMP ( &ipt ), MPFROMP ( &ulLen ) );
  114.                    
  115.                   if ( hwndEnt = pfnEntryOpen ( pR, 0 ) )
  116.                      WinSetWindowText ( hwndEnt, pR->crecCore.pszTree );
  117.                    
  118.                   WinSendMsg ( hwndC, CM_INVALIDATERECORD,
  119.                              MPFROMP ( &pR ), MPFROM2SHORT ( 1, CMA_TEXTCHANGED ) );
  120.  
  121.                   fbModified = TRUE;
  122.       
  123.                   if ( pR == pRec ) 
  124.                   {
  125.                      pfnFrameTitle ( WinQueryWindow ( hwndM, QW_PARENT ), 
  126.                                      "PM Scrapbook", pR->crecCore.pszTree );
  127.                   }
  128.                }
  129.  
  130.                WinDismissDlg ( hwnd, TRUE );
  131.             }
  132.             break;
  133.              
  134.          };
  135.           
  136.       break;
  137.        
  138.       default:
  139.       return WinDefDlgProc ( hwnd, msg, mp1, mp2 );
  140.        
  141.    }
  142.     
  143.      return FALSE;
  144. }
  145.  
  146. /***************************************************************************/
  147. /* Color Dialog Window Proc                                                */
  148. /***************************************************************************/
  149. MRESULT EXPENTRY pfndpColors      ( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ) 
  150. {
  151.    HWND      hwndE;
  152.    HWND      hwndV;
  153.    MRESULT   mres;
  154.    USHORT    usX;
  155.    USHORT    usY;
  156.    ULONG     ulVal;
  157.     
  158.    static PULONG    pulSel;
  159.    static ULONG     ulNBOrg;
  160.    static ULONG     ulNFOrg;
  161.    static ULONG     ulHBOrg;
  162.    static ULONG     ulHFOrg;
  163.     
  164.    hwndE = (HWND) WinQueryWindowULong ( hwnd, QWL_USER );
  165.     
  166.    switch ( msg ) 
  167.    {
  168.       case WM_INITDLG:
  169.           
  170.          pulSel = PVOIDFROMMP ( mp2 );
  171.           
  172.          hwndE = (HWND) *pulSel;
  173.           
  174.          WinSetWindowULong ( hwnd, QWL_USER, (ULONG) hwndE );
  175.           
  176.          hwndV = WinWindowFromID ( hwnd, DIT_VALSET );
  177.           
  178.          //*** Set Value Set ************************************************
  179.           
  180.          ulVal = 0;
  181.           
  182.          for ( usX = 0; usX < 2; ++usX ) 
  183.          {
  184.             for ( usY = 0; usY < 8; ++usY ) 
  185.             {
  186.                WinSendMsg ( hwndV, VM_SETITEM, MPFROM2SHORT ( (usX+1), (usY+1) ), MPFROMLONG ( ulVal ) );
  187.                 
  188.                ++ulVal;
  189.             }
  190.          }
  191.           
  192.          //*** Get Current Pres Colors *************************************/
  193.           
  194.          WinQueryPresParam ( hwndE, PP_BACKGROUNDCOLORINDEX,       0, NULL, 4L, &ulNBOrg, QPF_NOINHERIT );
  195.          WinQueryPresParam ( hwndE, PP_FOREGROUNDCOLORINDEX,       0, NULL, 4L, &ulNFOrg, QPF_NOINHERIT );
  196.          WinQueryPresParam ( hwndE, PP_HILITEBACKGROUNDCOLORINDEX, 0, NULL, 4L, &ulHBOrg, QPF_NOINHERIT );
  197.          WinQueryPresParam ( hwndE, PP_HILITEFOREGROUNDCOLORINDEX, 0, NULL, 4L, &ulHFOrg, QPF_NOINHERIT );
  198.           
  199.          //*** Set Sample Fields ********************************************
  200.           
  201.          pulSel = &ulNBOrg;
  202.           
  203.          WinCheckButton ( hwnd, DIT_NBG, TRUE );
  204.           
  205.          WinSendMsg ( hwnd, UWM_SHOW, NULL, NULL );
  206.           
  207.       break;//return (MRESULT) FALSE;
  208.        
  209.       case WM_HELP:
  210.       {
  211.          SHORT   sId;
  212.  
  213.          sId = WinQueryWindowUShort ( hwnd, QWS_ID );
  214.  
  215.          WinSendMsg ( hwndH, HM_DISPLAY_HELP,
  216.                       MPFROM2SHORT ( sId, 0 ), MPFROMSHORT ( HM_RESOURCEID ) );
  217.       }
  218.       break;
  219.        
  220.       case UWM_SHOW:
  221.           
  222.          WinSetPresParam ( WinWindowFromID ( hwnd, DIT_N_SAMP ), PP_BACKGROUNDCOLORINDEX, 4L, &ulNBOrg );
  223.          WinSetPresParam ( WinWindowFromID ( hwnd, DIT_N_SAMP ), PP_FOREGROUNDCOLORINDEX, 4L, &ulNFOrg );
  224.          WinSetPresParam ( WinWindowFromID ( hwnd, DIT_H_SAMP ), PP_BACKGROUNDCOLORINDEX, 4L, &ulHBOrg );
  225.          WinSetPresParam ( WinWindowFromID ( hwnd, DIT_H_SAMP ), PP_FOREGROUNDCOLORINDEX, 4L, &ulHFOrg );
  226.           
  227.          usX = ( (*pulSel) < 8 ) ? 1 : 2;
  228.          usY = ( (*pulSel) % 8 ) + 1;
  229.           
  230.          usY = (*pulSel);
  231.           
  232.           
  233.          if ( usY < 8 ) 
  234.             ++usY;
  235.          else
  236.             usY -= 7;
  237.           
  238.          WinSendMsg ( WinWindowFromID ( hwnd, DIT_VALSET ), VM_SELECTITEM, MPFROM2SHORT ( usX, usY ), 0L );
  239.           
  240.       break;
  241.        
  242.       case WM_CONTROL:
  243.           
  244.          switch ( SHORT1FROMMP ( mp1 ) ) 
  245.          {
  246.             case DIT_VALSET://VN_SELECT:
  247.                 
  248.                if ( SHORT2FROMMP ( mp1 ) != VN_SELECT ) 
  249.                   break;
  250.                 
  251.                mres = WinSendDlgItemMsg ( hwnd, DIT_VALSET, VM_QUERYSELECTEDITEM, NULL, NULL );
  252.                 
  253.                if ( WinQueryButtonCheckstate ( hwnd, DIT_NBG ) )
  254.                   pulSel = &ulNBOrg;
  255.                else if ( WinQueryButtonCheckstate ( hwnd, DIT_NFG ) )
  256.                   pulSel = &ulNFOrg;
  257.                else if ( WinQueryButtonCheckstate ( hwnd, DIT_HBG ) )
  258.                   pulSel = &ulHBOrg;
  259.                else
  260.                   pulSel = &ulHFOrg;
  261.                 
  262.                usX = SHORT1FROMMR ( mres );
  263.                usY = SHORT2FROMMR ( mres );
  264.                 
  265.                *pulSel = ( ( usX - 1 ) * 8 ) + ( usY - 1 );
  266.                 
  267.                WinSendMsg ( hwnd, UWM_SHOW, NULL, NULL );
  268.                 
  269.                //pfnSetPresColors ( hwndE, ulNBOrg, ulNFOrg, ulHBOrg, ulHFOrg );
  270.                 
  271.             break;
  272.              
  273.             case DIT_NBG: case DIT_NFG: case DIT_HBG: case DIT_HFG://BM_SETHILITE://SETCHECK://CLICK:
  274.                 
  275.                if ( WinQueryButtonCheckstate ( hwnd, DIT_NBG ) )
  276.                   pulSel = &ulNBOrg;
  277.                else if ( WinQueryButtonCheckstate ( hwnd, DIT_NFG ) )
  278.                   pulSel = &ulNFOrg;
  279.                else if ( WinQueryButtonCheckstate ( hwnd, DIT_HBG ) )
  280.                   pulSel = &ulHBOrg;
  281.                else
  282.                   pulSel = &ulHFOrg;
  283.                 
  284.                WinSendMsg ( hwnd, UWM_SHOW, NULL, NULL );
  285.                 
  286.             break;
  287.              
  288.          };
  289.           
  290.       break;
  291.        
  292.       case WM_COMMAND:
  293.           
  294.          switch ( COMMANDMSG(&msg)->cmd ) 
  295.          {
  296.             case DIT_HELP:
  297.             {
  298.                SHORT   sId;
  299.       
  300.                sId = WinQueryWindowUShort ( hwnd, QWS_ID );
  301.       
  302.                WinSendMsg ( hwndH, HM_DISPLAY_HELP,
  303.                             MPFROM2SHORT ( sId, 0 ), MPFROMSHORT ( HM_RESOURCEID ) );
  304.             }
  305.             break;
  306.              
  307.             case DID_CANCEL:
  308.                 
  309.                WinDismissDlg ( hwnd, FALSE );
  310.                 
  311.             break;
  312.              
  313.             case DIT_OK:
  314.                 
  315.                pfnSetPresColors ( hwndE, ulNBOrg, ulNFOrg, ulHBOrg, ulHFOrg );
  316.                 
  317.                WinDismissDlg ( hwnd, TRUE );
  318.                 
  319.             break;
  320.              
  321.          };
  322.           
  323.       break;
  324.        
  325.       default:
  326.       return WinDefDlgProc ( hwnd, msg, mp1, mp2 );
  327.        
  328.    }
  329.     
  330.      return FALSE;
  331. }
  332.  
  333. /***************************************************************************/
  334. /* Search Dialog Proc                                                      */
  335. /***************************************************************************/
  336. MRESULT EXPENTRY pfndpSearch  ( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ) 
  337. {
  338.    PSRCHREC  ps = (PSRCHREC) WinQueryWindowULong ( hwnd, QWL_USER );
  339.     
  340.    switch ( msg ) 
  341.    {
  342.       case WM_INITDLG:
  343.           
  344.          ps = PVOIDFROMMP ( mp2 );
  345.           
  346.          ps->hwndS = hwnd;
  347.  
  348.          ps->fbFirst = TRUE;
  349.  
  350.          WinSetWindowULong ( hwnd, QWL_USER, (ULONG) ps );
  351.           
  352.          if ( *ps->pszFnd )
  353.             WinSetDlgItemText ( hwnd, DIT_FIND, ps->pszFnd );
  354.          else
  355.             WinSetDlgItemText ( hwnd, DIT_FIND, pszSearch );
  356.           
  357.          WinSendDlgItemMsg ( hwnd, DIT_CASE, BM_SETCHECK,
  358.                              MPFROMLONG ( ps->fbCase ), NULL );
  359.           
  360.          WinSendDlgItemMsg ( hwnd, DIT_WRAP, BM_SETCHECK,
  361.                              MPFROMLONG ( ps->fbWrap ), NULL );
  362.           
  363.          pfnSelEntry ( hwnd, DIT_FIND );
  364.  
  365.       return (MRESULT) TRUE;
  366.        
  367.       case WM_HELP:
  368.       {
  369.          SHORT   sId;
  370.  
  371.          sId = WinQueryWindowUShort ( hwnd, QWS_ID );
  372.  
  373.          WinSendMsg ( hwndH, HM_DISPLAY_HELP,
  374.                       MPFROM2SHORT ( sId, 0 ), MPFROMSHORT ( HM_RESOURCEID ) );
  375.       }
  376.       break;
  377.        
  378.       case WM_COMMAND:
  379.           
  380.          switch ( COMMANDMSG(&msg)->cmd ) {
  381.              
  382.             case DIT_HELP:
  383.             {
  384.                SHORT   sId;
  385.       
  386.                sId = WinQueryWindowUShort ( hwnd, QWS_ID );
  387.       
  388.                WinSendMsg ( hwndH, HM_DISPLAY_HELP,
  389.                             MPFROM2SHORT ( sId, 0 ), MPFROMSHORT ( HM_RESOURCEID ) );
  390.             }
  391.             break;
  392.              
  393.             case DID_CANCEL:
  394.  
  395.                ps->hwndS = NULLHANDLE;
  396.  
  397.                WinDismissDlg ( hwnd, FALSE );
  398.                 
  399.             break;
  400.              
  401.             case DIT_OK:
  402.             {
  403.                ULONG     ulLen;
  404.  
  405.                ulLen = WinQueryDlgItemTextLength ( hwnd, DIT_FIND );
  406.                 
  407.                ++ulLen;
  408.                 
  409.                ps->pszFnd = realloc ( ps->pszFnd, ulLen );
  410.                 
  411.                WinQueryDlgItemText ( hwnd, DIT_FIND, ulLen, ps->pszFnd );
  412.                 
  413.                ps->fbCase = FALSE;
  414.                ps->fbWrap = FALSE;
  415.                 
  416.                if ( WinSendDlgItemMsg ( hwnd, DIT_CASE,  BM_QUERYCHECK, NULL, NULL ) )
  417.                   ps->fbCase = TRUE;
  418.                 
  419.                if ( WinSendDlgItemMsg ( hwnd, DIT_WRAP,  BM_QUERYCHECK, NULL, NULL ) ) 
  420.                   ps->fbWrap = TRUE;
  421.                 
  422.                WinPostMsg ( ps->hwndE, UWM_SEARCH, PVOIDFROMMP ( ps ), NULL );
  423.             }
  424.             break;
  425.              
  426.          };
  427.           
  428.       break;
  429.        
  430.       default:
  431.       return WinDefDlgProc ( hwnd, msg, mp1, mp2 );
  432.        
  433.    }
  434.     
  435.      return FALSE;
  436. }
  437.  
  438. /***************************************************************************/
  439. /* Date Edit Dialog Window Proc                                            */
  440. /***************************************************************************/
  441. MRESULT EXPENTRY pfndpEditDate    ( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ) 
  442. {
  443.    ULONG     ulVal;
  444.    PDATEREC  pd;
  445.    CDATE     cd;
  446.     
  447.    pd = (PDATEREC) WinQueryWindowULong ( hwnd, QWL_USER );
  448.     
  449.    switch ( msg ) 
  450.    {
  451.       case WM_INITDLG:
  452.           
  453.          pd = PVOIDFROMMP ( mp2 );
  454.           
  455.          WinSetWindowULong ( hwnd, QWL_USER, (ULONG) pd );
  456.           
  457.          WinSetWindowText ( hwnd, pd->pszTtl );
  458.           
  459.          if ( ! pd->pcdate->year ) 
  460.             pfnSetWhen ( &cd, NULL );
  461.          else 
  462.             cd = *pd->pcdate;
  463.           
  464.          WinSendDlgItemMsg ( hwnd, DIT_YEAR,  SPBM_SETLIMITS, MPFROMLONG ( 3000L ), MPFROMLONG ( 1900L ) );
  465.          WinSendDlgItemMsg ( hwnd, DIT_YEAR,  SPBM_SETCURRENTVALUE, (MPARAM) cd.year, NULL );
  466.           
  467.          WinSendDlgItemMsg ( hwnd, DIT_MONTH, SPBM_SETLIMITS, MPFROMLONG ( 12L ), MPFROMLONG ( 1L ) );
  468.          WinSendDlgItemMsg ( hwnd, DIT_MONTH, SPBM_SETCURRENTVALUE, (MPARAM) cd.month, NULL );
  469.           
  470.          WinSendDlgItemMsg ( hwnd, DIT_DAY,   SPBM_SETLIMITS, MPFROMLONG ( 31L ), MPFROMLONG ( 1L ) );
  471.          WinSendDlgItemMsg ( hwnd, DIT_DAY,   SPBM_SETCURRENTVALUE, (MPARAM) cd.day, NULL );
  472.           
  473.       return (MRESULT) TRUE;
  474.        
  475.       case WM_HELP:
  476.       {
  477.          SHORT   sId;
  478.  
  479.          sId = WinQueryWindowUShort ( hwnd, QWS_ID );
  480.  
  481.          WinSendMsg ( hwndH, HM_DISPLAY_HELP,
  482.                       MPFROM2SHORT ( sId, 0 ), MPFROMSHORT ( HM_RESOURCEID ) );
  483.       }
  484.       break;
  485.        
  486.       case WM_COMMAND:
  487.           
  488.          switch ( COMMANDMSG(&msg)->cmd ) 
  489.          {
  490.             case DIT_HELP:
  491.             {
  492.                SHORT   sId;
  493.       
  494.                sId = WinQueryWindowUShort ( hwnd, QWS_ID );
  495.       
  496.                WinSendMsg ( hwndH, HM_DISPLAY_HELP,
  497.                             MPFROM2SHORT ( sId, 0 ), MPFROMSHORT ( HM_RESOURCEID ) );
  498.             }
  499.             break;
  500.              
  501.             case DID_CANCEL:
  502.                 
  503.                WinDismissDlg ( hwnd, FALSE );
  504.                 
  505.             break;
  506.              
  507.             case DIT_OK:
  508.                 
  509.                ulVal = 0;
  510.                 
  511.                WinSendDlgItemMsg ( hwnd, DIT_YEAR,  SPBM_QUERYVALUE, MPFROMP ( &ulVal ), MPFROM2SHORT ( NULL, SPBQ_UPDATEIFVALID ) );
  512.                pd->pcdate->year = ulVal;
  513.                 
  514.                WinSendDlgItemMsg ( hwnd, DIT_MONTH, SPBM_QUERYVALUE, MPFROMP ( &ulVal ), MPFROM2SHORT ( NULL, SPBQ_UPDATEIFVALID ) );
  515.                pd->pcdate->month = ulVal;
  516.                 
  517.                WinSendDlgItemMsg ( hwnd, DIT_DAY,   SPBM_QUERYVALUE, MPFROMP ( &ulVal ), MPFROM2SHORT ( NULL, SPBQ_UPDATEIFVALID ) );
  518.                pd->pcdate->day = ulVal;
  519.                 
  520.                WinDismissDlg ( hwnd, TRUE );
  521.                 
  522.             break;
  523.              
  524.          };
  525.           
  526.       break;
  527.        
  528.       case WM_CONTROL:
  529.           
  530.          switch ( SHORT1FROMMP ( mp1 ) ) 
  531.          {
  532.             case DIT_MONTH: case DIT_DAY:
  533.                 
  534.                switch ( SHORT2FROMMP ( mp1 ) ) 
  535.                {
  536.                   case SPBN_CHANGE:
  537.                       
  538.                      WinSendDlgItemMsg ( hwnd, DIT_MONTH, SPBM_QUERYVALUE, MPFROMP ( &ulVal ), MPFROM2SHORT ( NULL, SPBQ_UPDATEIFVALID ) );
  539.                      cd.month = ulVal;
  540.                       
  541.                      switch ( cd.month ) 
  542.                      {
  543.                         case 1: case 3: case 5: case 7: case 8: case 10: case 12:
  544.                             
  545.                            WinSendDlgItemMsg ( hwnd, DIT_DAY,   SPBM_SETLIMITS, MPFROMLONG ( 31L ), MPFROMLONG ( 1L ) );
  546.                             
  547.                         break;
  548.                          
  549.                         case 2:
  550.                             
  551.                            WinSendDlgItemMsg ( hwnd, DIT_YEAR,  SPBM_QUERYVALUE, MPFROMP ( &ulVal ), MPFROM2SHORT ( NULL, SPBQ_UPDATEIFVALID ) );
  552.                             
  553.                            if ( ( ulVal % 4 ) ) 
  554.                               WinSendDlgItemMsg ( hwnd, DIT_DAY,   SPBM_SETLIMITS, MPFROMLONG ( 29L ), MPFROMLONG ( 1L ) );
  555.                            else 
  556.                               WinSendDlgItemMsg ( hwnd, DIT_DAY,   SPBM_SETLIMITS, MPFROMLONG ( 28L ), MPFROMLONG ( 1L ) );
  557.                             
  558.                         break;
  559.                          
  560.                         default:
  561.                             
  562.                            WinSendDlgItemMsg ( hwnd, DIT_DAY,   SPBM_SETLIMITS, MPFROMLONG ( 30L ), MPFROMLONG ( 1L ) );
  563.                             
  564.                         break;
  565.                          
  566.                      }
  567.                       
  568.                   break;
  569.                    
  570.                }
  571.                 
  572.             break;
  573.              
  574.          }
  575.           
  576.       break;
  577.        
  578.       default:
  579.       return WinDefDlgProc ( hwnd, msg, mp1, mp2 );
  580.        
  581.    }
  582.     
  583.      return FALSE;
  584. }
  585.  
  586. //****************************************************************************
  587. // About Proc
  588. //****************************************************************************
  589. MRESULT EXPENTRY pfndpAbout          ( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ) 
  590. {
  591.     
  592.    switch ( msg ) {
  593.        
  594.       case WM_INITDLG:
  595.           
  596.          WinSetWindowText ( WinWindowFromID ( hwnd, DIT_VERSION ),
  597.                             VERSION_STR );
  598.  
  599.          if ( fbUnregistered )
  600.             WinSetWindowText ( WinWindowFromID ( hwnd, DIT_REGISTERED ),
  601.                                "Unregistered Copy" );
  602.          else
  603.          {
  604.             WinSetWindowText ( WinWindowFromID ( hwnd, DIT_REGISTERED ),
  605.                                "Registered Copy - Thanks !" );
  606.  
  607.             WinShowWindow ( WinWindowFromID ( hwnd, DIT_REGINFO ), FALSE );
  608.          }
  609.           
  610.       break;
  611.        
  612.       case WM_COMMAND:
  613.           
  614.          switch ( SHORT1FROMMP ( mp1 ) ) 
  615.          {
  616.             case DIT_HELP:
  617.             {
  618.                SHORT   sId;
  619.       
  620.                sId = WinQueryWindowUShort ( hwnd, QWS_ID );
  621.       
  622.                WinSendMsg ( hwndH, HM_DISPLAY_HELP,
  623.                             MPFROM2SHORT ( sId, 0 ), MPFROMSHORT ( HM_RESOURCEID ) );
  624.             }
  625.             break;
  626.              
  627.             case DID_OK:
  628.                 
  629.                WinDismissDlg ( hwnd, TRUE );
  630.                 
  631.             break;
  632.  
  633.             case DIT_REGINFO:
  634.                 
  635.                WinDlgBox ( HWND_DESKTOP, hwnd, pfndpRegInfo,
  636.                            0L, DLG_REGINFO, NULL );
  637.             break;
  638.  
  639.             case DIT_REGISTER:
  640.                if ( WinDlgBox ( HWND_DESKTOP, hwnd, pfndpRegister,
  641.                            0L, DLG_REGISTER, NULL ) )
  642.                   WinDismissDlg ( hwnd, TRUE );
  643.  
  644.             break;
  645.              
  646.          }
  647.           
  648.       break;
  649.        
  650.       default:
  651.       return WinDefDlgProc ( hwnd, msg, mp1, mp2 );
  652.        
  653.    }
  654.     
  655.      return ( MRESULT ) FALSE;
  656. }
  657.  
  658. //****************************************************************************
  659. // Registration Info
  660. //****************************************************************************
  661. MRESULT EXPENTRY pfndpRegInfo        ( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )
  662. {
  663.     
  664.    switch ( msg ) {
  665.        
  666.       case WM_INITDLG:
  667.           
  668.       break;
  669.        
  670.       case WM_COMMAND:
  671.           
  672.          switch ( SHORT1FROMMP ( mp1 ) ) 
  673.          {
  674.             case DIT_HELP:
  675.             {
  676.                SHORT   sId;
  677.       
  678.                sId = WinQueryWindowUShort ( hwnd, QWS_ID );
  679.       
  680.                WinSendMsg ( hwndH, HM_DISPLAY_HELP,
  681.                             MPFROM2SHORT ( sId, 0 ), MPFROMSHORT ( HM_RESOURCEID ) );
  682.             }
  683.             break;
  684.              
  685.             case DID_OK:
  686.                 
  687.                WinDismissDlg ( hwnd, TRUE );
  688.                 
  689.             break;
  690.          }
  691.           
  692.       break;
  693.        
  694.       default:
  695.       return WinDefDlgProc ( hwnd, msg, mp1, mp2 );
  696.        
  697.    }
  698.     
  699.      return ( MRESULT ) FALSE;
  700. }
  701.  
  702. /***************************************************************************/
  703. /* Guess a Printer Font                                                    */
  704. /***************************************************************************/
  705. VOID             pfnGuessPrintFattr( PFATTRS pfat )
  706. {
  707.    memset ( pfat, 0, sizeof ( FATTRS ) );
  708.  
  709.    pfat->usRecordLength = sizeof ( FATTRS );
  710.    pfat->fsSelection    = 64;
  711.    pfat->lMatch         = 0;
  712.    pfat->idRegistry     = 0;
  713.    pfat->usCodePage     = 850;
  714.    pfat->lMaxBaselineExt= 10;
  715.    pfat->lAveCharWidth  = 10;
  716.    pfat->fsType         = 0;
  717.    pfat->fsFontUse      = 4;
  718.  
  719.    strcpy ( pfat->szFacename, "Times New Roman" );
  720. }
  721.  
  722. /***************************************************************************/
  723. /* Setup New Print Control Record                                          */
  724. /***************************************************************************/
  725. VOID             pfnNewPrintCtl   ( HWND hwnd )
  726. {
  727.    ULONG   ulSize;
  728.  
  729.    pprtCtl = (PPRINTCTL) malloc ( sizeof ( PRINTCTL ) );
  730.  
  731.    memset ( pprtCtl, 0, sizeof ( PRINTCTL ) );
  732.  
  733.    pprtCtl->hwndPrtDlg = hwnd;
  734.    pprtCtl->ulPrtPage  = 0;
  735.    pprtCtl->pPrtRec    = pRecPrt;
  736.     
  737.    //*** Default All Font ***************************************************
  738.  
  739.    ulSize = sizeof ( DEFAULTREC );
  740.  
  741.    if ( ! PrfQueryProfileData ( HINI_USERPROFILE, PRG_TITLE, FONT_ALL_KEY,
  742.                                 &pprtCtl->defPrtAll, &ulSize ) )
  743.    {
  744.       //pfnGetDefFattrs ( WinQueryWindow ( hwndM, QW_PARENT ), NULLHANDLE,
  745.         //                &pprtCtl->defPrtAll.fat, &pprtCtl->defPrtAll.fxPtSz );
  746.  
  747.       pfnGuessPrintFattr ( &pprtCtl->defPrtAll.fat );
  748.       pprtCtl->defPrtAll.fxPtSz = 0x000A0000;
  749.        
  750.       pprtCtl->defPrtAll.ulOpts  = 0;
  751.       pprtCtl->defPrtAll.ulStyl  = 0;
  752.        
  753.       pprtCtl->defPrtAll.ulNBClr = CLR_BACKGROUND;
  754.       pprtCtl->defPrtAll.ulNFClr = CLR_NEUTRAL;
  755.       pprtCtl->defPrtAll.ulHBClr = CLR_DARKGRAY;
  756.       pprtCtl->defPrtAll.ulHFClr = CLR_BACKGROUND;
  757.    }
  758.  
  759.    pprtCtl->defPrtTmp.fat    = pprtCtl->defPrtAll.fat;
  760.    pprtCtl->defPrtTmp.fxPtSz = pprtCtl->defPrtAll.fxPtSz;
  761.        
  762.    //*** Default Heading Font ***********************************************
  763.  
  764.    ulSize = sizeof ( DEFAULTREC );
  765.  
  766.    if ( ! PrfQueryProfileData ( HINI_USERPROFILE, PRG_TITLE, FONT_HED_KEY,
  767.                                 &pprtCtl->defPrtHed, &ulSize ) )
  768.    {
  769.       //pfnGetDefFattrs ( WinQueryWindow ( hwndM, QW_PARENT ), NULLHANDLE,
  770.         //                &pprtCtl->defPrtHed.fat, &pprtCtl->defPrtHed.fxPtSz );
  771.  
  772.       pfnGuessPrintFattr ( &pprtCtl->defPrtHed.fat );
  773.       pprtCtl->defPrtHed.fxPtSz = 0x00120000;
  774.        
  775.       pprtCtl->defPrtHed.ulOpts  = 0;
  776.       pprtCtl->defPrtHed.ulStyl  = 0;
  777.        
  778.       pprtCtl->defPrtHed.ulNBClr = CLR_BACKGROUND;
  779.       pprtCtl->defPrtHed.ulNFClr = CLR_NEUTRAL;
  780.       pprtCtl->defPrtHed.ulHBClr = CLR_DARKGRAY;
  781.       pprtCtl->defPrtHed.ulHFClr = CLR_BACKGROUND;
  782.    }
  783.  
  784.    //*** Default Contents Font **********************************************
  785.  
  786.    ulSize = sizeof ( DEFAULTREC );
  787.  
  788.    if ( ! PrfQueryProfileData ( HINI_USERPROFILE, PRG_TITLE, FONT_CNT_KEY,
  789.                                 &pprtCtl->defPrtCnt, &ulSize ) )
  790.    {
  791.       //pfnGetDefFattrs ( WinQueryWindow ( hwndM, QW_PARENT ), NULLHANDLE,
  792.         //                &pprtCtl->defPrtCnt.fat, &pprtCtl->defPrtCnt.fxPtSz );
  793.  
  794.       pfnGuessPrintFattr ( &pprtCtl->defPrtCnt.fat );
  795.       pprtCtl->defPrtCnt.fxPtSz = 0x00120000;
  796.        
  797.       pprtCtl->defPrtCnt.ulOpts  = 0;
  798.       pprtCtl->defPrtCnt.ulStyl  = 0;
  799.        
  800.       pprtCtl->defPrtCnt.ulNBClr = CLR_BACKGROUND;
  801.       pprtCtl->defPrtCnt.ulNFClr = CLR_NEUTRAL;
  802.       pprtCtl->defPrtCnt.ulHBClr = CLR_DARKGRAY;
  803.       pprtCtl->defPrtCnt.ulHFClr = CLR_BACKGROUND;
  804.    }
  805. }
  806.  
  807. /***************************************************************************/
  808. /* Setup Print Boundries                                                   */
  809. /***************************************************************************/
  810. VOID             pfnPrintBounds   ( HWND hwnd )
  811. {
  812.    pprtCtl->rclPage.xLeft   = pprtCtl->hci.xLeftClip;
  813.    pprtCtl->rclPage.xRight  = pprtCtl->hci.xRightClip;
  814.    pprtCtl->rclPage.yBottom = pprtCtl->hci.yBottomClip;
  815.    pprtCtl->rclPage.yTop    = pprtCtl->hci.yTopClip;
  816.  
  817.    pprtCtl->rclBody = pprtCtl->rclPage;
  818.    pprtCtl->rclFoot = pprtCtl->rclPage;
  819.  
  820.    if ( ulTreeOpts & SCB_PRTPAGE )
  821.    {
  822.       pprtCtl->rclFoot.yTop    = pprtCtl->rclFoot.yBottom +
  823.                                  pprtCtl->defPrtCnt.fat.lMaxBaselineExt * 2;
  824.  
  825.       pprtCtl->rclBody.yBottom = pprtCtl->rclFoot.yTop;
  826.    }
  827. }
  828. /***************************************************************************/
  829. /* Set Current Date and/or Time                                            */
  830. /***************************************************************************/
  831. VOID             pfnSetWhen       ( PCDATE pcd, PCTIME pct ) 
  832. {
  833.    DATETIME ddt;
  834.     
  835.    DosGetDateTime ( &ddt );
  836.     
  837.    if ( pcd ) 
  838.    {
  839.       pcd->day   = ddt.day;
  840.       pcd->month = ddt.month;
  841.       pcd->year  = ddt.year;
  842.    }
  843.     
  844.    if ( pct ) 
  845.    {
  846.       pct->hours   = ddt.hours;
  847.       pct->minutes = ddt.minutes;
  848.       pct->seconds = ddt.seconds;
  849.    }
  850.     
  851.    return;
  852. }
  853.  
  854. //****************************************************************************
  855. // Fix Container Columns
  856. //****************************************************************************
  857. VOID             pfnFixCnrCols       ( PUSEREC pRecIn, USHORT usId, BOOL fbVisible )
  858. {
  859.    FIELDINFOINSERT   fInfIns;
  860.    SHORT             sX;
  861.    PDATREC           pdr;
  862.     
  863.    pdr = pRecIn->pdr;
  864.     
  865.    pdr->colInfo[usId].fbVisible = fbVisible;
  866.  
  867.    if ( ! fbVisible )
  868.    {
  869.       WinSendMsg ( pdr->hwndE, CM_REMOVEDETAILFIELDINFO,
  870.                    MPFROMP ( &pdr->colInfo[usId].pfinf ),
  871.                    MPFROM2SHORT ( 1, CMA_INVALIDATE ) );
  872.    }
  873.    else
  874.    {
  875.       fInfIns.cb                   = sizeof ( FIELDINFOINSERT );
  876.       fInfIns.pFieldInfoOrder      = NULL;//(PFIELDINFO)CMA_END;
  877.       fInfIns.cFieldInfoInsert     = 1;
  878.       fInfIns.fInvalidateFieldInfo = TRUE;
  879.       
  880.       if ( ! usId )
  881.          fInfIns.pFieldInfoOrder = (PFIELDINFO)CMA_FIRST;
  882.       else
  883.          for ( sX = usId - 1; sX >= 0 && ! fInfIns.pFieldInfoOrder; --sX )
  884.             if ( pdr->colInfo[sX].fbVisible )
  885.                fInfIns.pFieldInfoOrder = pdr->colInfo[sX].pfinf;
  886.       
  887.       if ( ! fInfIns.pFieldInfoOrder )
  888.          fInfIns.pFieldInfoOrder = (PFIELDINFO)CMA_FIRST;
  889.  
  890.       WinSendMsg ( pdr->hwndE, CM_INSERTDETAILFIELDINFO,
  891.                    MPFROMP ( pdr->colInfo[usId].pfinf ), MPFROMP ( &fInfIns ) );
  892.    }
  893.  
  894.    if ( fbVisible )
  895.       pdr->ulStyl |= pdr->colInfo[usId].ulShowMask;
  896.    else
  897.       pdr->ulStyl &= ~pdr->colInfo[usId].ulShowMask;
  898.  
  899.    return;
  900. }
  901.  
  902. /***************************************************************************/
  903. /* Set Window Position                                                     */
  904. /***************************************************************************/
  905. VOID             pfnSetWinPos     ( HWND hwnd, PDATREC pdr ) 
  906. {
  907.    SWP  swp;
  908.    HWND hwndPar;
  909.    BOOL fbSet = FALSE;
  910.    //CHAR ach80[81];
  911.     
  912.    if ( pdr->ulDLen ) 
  913.    {
  914.       pdr->swp.fl |= ( SWP_SHOW | SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_ACTIVATE );
  915.       pdr->swp.fl &= ~SWP_RESTORE;
  916.  
  917.       pdr->swp.hwndInsertBehind = NULLHANDLE;
  918.  
  919.       WinQueryWindowPos ( WinQueryWindow ( pdr->hwndD, QW_PARENT ), &swp );
  920.        
  921.       if ( ( pdr->swp.x + pdr->swp.cx ) > ( swp.x + swp.cx ) ||
  922.            ( pdr->swp.y + pdr->swp.cy ) > ( swp.x + swp.cy ) ||
  923.            ( pdr->swp.y < 0          ) || ( swp.x < 0      ) )
  924.       {
  925.          //if ( ulTreeOpts & SCB_WINOWN )
  926.             fbSet = FALSE;
  927.          /*else
  928.             fbSet = TRUE;*/
  929.       }
  930.       else if ( ( ! pdr->swp.cx ) || ( ! swp.cy ) ) 
  931.          fbSet = FALSE;
  932.       else if ( WinSetWindowPos ( pdr->hwndD, HWND_TOP,
  933.                              pdr->swp.x,
  934.                              pdr->swp.y,
  935.                              pdr->swp.cx,
  936.                              pdr->swp.cy,
  937.                              pdr->swp.fl ) ) 
  938.       {
  939.          fbSet = TRUE;
  940.           
  941.          if ( (pdr->swp.fl & SWP_MINIMIZE) || (pdr->swp.fl & SWP_MAXIMIZE) ) 
  942.          {
  943.             WinSetWindowUShort ( WinQueryWindow ( pdr->hwndD, QW_PARENT ), QWS_XRESTORE,  pdr->swp.x  );
  944.             WinSetWindowUShort ( WinQueryWindow ( pdr->hwndD, QW_PARENT ), QWS_YRESTORE,  pdr->swp.y  );
  945.             WinSetWindowUShort ( WinQueryWindow ( pdr->hwndD, QW_PARENT ), QWS_CXRESTORE, pdr->swp.cx );
  946.             WinSetWindowUShort ( WinQueryWindow ( pdr->hwndD, QW_PARENT ), QWS_CYRESTORE, pdr->swp.cy );
  947.          }
  948.       }
  949.       else 
  950.          fbSet = FALSE;
  951.    }
  952.     
  953.    if ( ! fbSet ) 
  954.    {
  955.       WinQueryWindowPos ( WinQueryWindow ( pdr->hwndD, QW_PARENT ), &pdr->swp );
  956.        
  957.       if ( ( ! pdr->swp.cx ) || ( ! swp.cy ) ||
  958.            (pdr->swp.fl & SWP_MINIMIZE) || (pdr->swp.fl & SWP_MAXIMIZE)) 
  959.       {
  960.          hwndPar = WinQueryWindow ( pdr->hwndD, QW_PARENT );
  961.           
  962.          pdr->swp.x  = WinQueryWindowUShort ( hwndPar, QWS_XRESTORE  );
  963.          pdr->swp.y  = WinQueryWindowUShort ( hwndPar, QWS_YRESTORE  );
  964.          pdr->swp.cx = WinQueryWindowUShort ( hwndPar, QWS_CXRESTORE );
  965.          pdr->swp.cy = WinQueryWindowUShort ( hwndPar, QWS_CYRESTORE );
  966.  
  967.          WinQueryWindowPos ( hwndPar, &pdr->swp );
  968.       }
  969.        
  970.       pdr->swp.x = pdr->swp.cx / 4;
  971.       pdr->swp.y = pdr->swp.cy / 4;
  972.       pdr->swp.cx /= 2;
  973.       pdr->swp.cy /= 4;
  974.       pdr->swp.cy *= 3;
  975.        
  976.       WinSetWindowPos ( pdr->hwndD, HWND_TOP,
  977.                         pdr->swp.x,
  978.                         pdr->swp.y,
  979.                         pdr->swp.cx,
  980.                         pdr->swp.cy,
  981.                         SWP_SIZE | SWP_MOVE | SWP_SHOW | SWP_ZORDER);
  982.    }
  983.     
  984.    return;
  985. }
  986.  
  987. /***************************************************************************/
  988. /* Get Window Position                                                     */
  989. /***************************************************************************/
  990. VOID             pfnGetWinPos     ( HWND hwnd, PDATREC pdr ) 
  991. {
  992.    WinQueryWindowPos ( pdr->hwndD, &pdr->swp );
  993.     
  994.    if ( (pdr->swp.fl & SWP_MINIMIZE) || (pdr->swp.fl & SWP_MAXIMIZE) ) 
  995.    {
  996.       pdr->swp.x  = WinQueryWindowUShort ( pdr->hwndD, QWS_XRESTORE  );
  997.       pdr->swp.y  = WinQueryWindowUShort ( pdr->hwndD, QWS_YRESTORE  );
  998.       pdr->swp.cx = WinQueryWindowUShort ( pdr->hwndD, QWS_CXRESTORE );
  999.       pdr->swp.cy = WinQueryWindowUShort ( pdr->hwndD, QWS_CYRESTORE );
  1000.    }
  1001.     
  1002.    return;
  1003. }
  1004.  
  1005. /***************************************************************************/
  1006. /* Set Presentation Colors                                                 */
  1007. /***************************************************************************/
  1008. BOOL             pfnSetPresColors ( HWND hwnd, ULONG ulNB, ULONG ulNF, ULONG ulHB, ULONG ulHF ) 
  1009. {
  1010.    LONG nbRGB, nfRGB, hbRGB, hfRGB;
  1011.  
  1012.    HPS hps = WinGetPS ( hwnd );
  1013.  
  1014.    nbRGB = GpiQueryRGBColor ( hps, 0, PP_BACKGROUNDCOLORINDEX       );
  1015.    nfRGB = GpiQueryRGBColor ( hps, 0, PP_FOREGROUNDCOLORINDEX       );
  1016.    hbRGB = GpiQueryRGBColor ( hps, 0, PP_HILITEBACKGROUNDCOLORINDEX );
  1017.    hfRGB = GpiQueryRGBColor ( hps, 0, PP_HILITEFOREGROUNDCOLORINDEX );
  1018.  
  1019.    if ( ( nbRGB == nfRGB ) || ( hbRGB == hfRGB ) )
  1020.       pfnMsgOK ( hwnd, APP_TITLE, 
  1021.                  "Entry colors may require adjusting. Non-contrasting colors found." );
  1022.  
  1023.    WinReleasePS ( hps );
  1024.  
  1025.    WinSetPresParam ( hwnd, PP_BACKGROUNDCOLORINDEX,       4L, &ulNB );
  1026.     
  1027.    WinSetPresParam ( hwnd, PP_FOREGROUNDCOLORINDEX,       4L, &ulNF );
  1028.     
  1029.    WinSetPresParam ( hwnd, PP_HILITEBACKGROUNDCOLORINDEX, 4L, &ulHB );
  1030.     
  1031.    WinSetPresParam ( hwnd, PP_HILITEFOREGROUNDCOLORINDEX, 4L, &ulHF );
  1032.     
  1033.    return TRUE;
  1034. }
  1035.  
  1036. /***************************************************************************/
  1037. /* Get Presentation Colors                                                 */
  1038. /***************************************************************************/
  1039. BOOL             pfnGetPresColors ( HWND hwnd, PULONG pulNB, PULONG pulNF, PULONG pulHB, PULONG pulHF ) 
  1040. {
  1041.    if ( pulNB )
  1042.       WinQueryPresParam ( hwnd, PP_BACKGROUNDCOLORINDEX,       0, NULL, 4L, pulNB, QPF_NOINHERIT );
  1043.     
  1044.    if ( pulNF )
  1045.       WinQueryPresParam ( hwnd, PP_FOREGROUNDCOLORINDEX,       0, NULL, 4L, pulNF, QPF_NOINHERIT );
  1046.     
  1047.    if ( pulHB )
  1048.       WinQueryPresParam ( hwnd, PP_HILITEBACKGROUNDCOLORINDEX, 0, NULL, 4L, pulHB, QPF_NOINHERIT );
  1049.     
  1050.    if ( pulHF )
  1051.       WinQueryPresParam ( hwnd, PP_HILITEFOREGROUNDCOLORINDEX, 0, NULL, 4L, pulHF, QPF_NOINHERIT );
  1052.     
  1053.    return TRUE;
  1054. }
  1055.  
  1056. /***************************************************************************/
  1057. /* Set Frame Title                                                         */
  1058. /***************************************************************************/
  1059. BOOL             pfnFrameTitle    ( HWND hwnd, PSZ pszApp, PSZ pszHuh ) 
  1060. {
  1061.    ULONG   ulLen;
  1062.    PSZ     pszBuf;
  1063.     
  1064.    ulLen = strlen ( pszApp ) + 8;
  1065.     
  1066.    if ( pszHuh )
  1067.       ulLen += CCHMAXPATH;
  1068.    else
  1069.       ulLen += CCHMAXPATH;
  1070.  
  1071.    pszBuf = malloc ( ulLen );
  1072.     
  1073.    if ( ( ulTreeOpts & SCB_TITFILE ) && *pszCurrFile )
  1074.       sprintf ( pszBuf, "%s - %s", pszApp, pszCurrFile );
  1075.    else
  1076.       sprintf ( pszBuf, "%s - %s", pszApp, pRec->crecCore.pszTree );
  1077.     
  1078.    WinSetWindowText ( hwnd, pszBuf );
  1079.     
  1080.    free ( pszBuf );
  1081.     
  1082.    return TRUE;
  1083. }
  1084.  
  1085. /***************************************************************************/
  1086. /* Search a String for a String                                            */
  1087. /***************************************************************************/
  1088. PSZ              pfnStrSearch     ( PSZ pszBuf, ULONG ulBLen, PSZ pszStr, ULONG ulSLen, BOOL fbCase ) 
  1089. {
  1090.    ULONG       ulX;
  1091.    PSZ         pszScn;
  1092.    PSZ         pszRet;
  1093.     
  1094.    //*** Get Sizes **********************************************************
  1095.     
  1096.    if ( ! pszBuf || ! pszStr ) 
  1097.       return NULL;
  1098.     
  1099.    if ( ! ulBLen )
  1100.       ulBLen = strlen ( pszBuf );
  1101.     
  1102.    if ( ! ulSLen )
  1103.       ulSLen = strlen ( pszStr );
  1104.     
  1105.    if ( ! ulBLen || ! ulSLen )
  1106.       return NULL;
  1107.     
  1108.    if ( ulSLen > ulBLen )
  1109.       return NULL;
  1110.     
  1111.    //*** Get Ready **********************************************************
  1112.     
  1113.    pszRet = NULL;
  1114.    pszScn = pszBuf;
  1115.    ulX    = 0;
  1116.     
  1117.    while ( ulX <= ( ulBLen - ulSLen ) && ! pszRet )
  1118.    {
  1119.       if ( fbCase ) 
  1120.       {
  1121.          if ( ! strncmp ( pszScn, pszStr, ulSLen ) ) 
  1122.          {
  1123.             pszRet = pszScn;
  1124.              
  1125.          }
  1126.       }
  1127.       else 
  1128.       {
  1129.          if ( ! strnicmp ( pszScn, pszStr, ulSLen ) ) 
  1130.          {
  1131.             pszRet = pszScn;
  1132.          }
  1133.       }
  1134.        
  1135.       ++ulX;
  1136.       ++pszScn;
  1137.        
  1138.    }
  1139.     
  1140.    return pszRet;
  1141. }
  1142.  
  1143. /***************************************************************************/
  1144. /* Count Occurrences of a Character in a String                            */
  1145. /***************************************************************************/
  1146. ULONG            pfnStrChrCnt     ( PSZ pszBuf, ULONG ulBLen, CHAR chHuh ) 
  1147. {
  1148.    ULONG       ulX;
  1149.    ULONG       ulRet;
  1150.    PSZ         pszScn;
  1151.     
  1152.    if ( ! pszBuf )
  1153.       return 0;
  1154.     
  1155.    if ( ! ulBLen )
  1156.       ulBLen = strlen ( pszBuf );
  1157.     
  1158.    pszScn = pszBuf;
  1159.    ulRet  = 0;
  1160.    ulX    = 0;
  1161.     
  1162.    while ( ulX < ulBLen ) 
  1163.    {
  1164.       if ( *pszScn == chHuh ) 
  1165.          ++ulRet;
  1166.        
  1167.       ++ulX;
  1168.       ++pszScn;
  1169.    }
  1170.     
  1171.    return ulRet;
  1172. }
  1173.  
  1174. /***************************************************************************/
  1175. /* Register the Product                                                    */
  1176. /***************************************************************************/
  1177. MRESULT EXPENTRY pfndpRegister  ( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )
  1178. {      
  1179.    MRESULT mr = MRFROMLONG ( FALSE );
  1180.  
  1181.    switch ( msg )
  1182.    {
  1183.       case WM_INITDLG:
  1184.       {
  1185.          //mr = MRFROMLONG ( TRUE );
  1186.       }
  1187.       break;
  1188.        
  1189.       case WM_COMMAND:
  1190.       {
  1191.          CHAR theName[80];
  1192.          CHAR theCode[80];
  1193.  
  1194.          switch ( SHORT1FROMMP ( mp1 ) )
  1195.          {
  1196.             case DID_CANCEL:
  1197.             {
  1198.                WinDismissDlg ( hwnd, FALSE );
  1199.             }
  1200.             break;
  1201.  
  1202.             case DID_OK:
  1203.             {
  1204.                WinQueryDlgItemText ( hwnd, DIT_CUSTOMER, 80, theName );
  1205.                WinQueryDlgItemText ( hwnd, DIT_KEY,      80, theCode );
  1206.  
  1207.                if ( keyIsValid ( theName, theCode ) )
  1208.                {
  1209.                   //WinSetDlgItemText   ( hwnd, DIT_MSG, "Key matches." );
  1210.                   colStrs.regCode = REGED_CODE;
  1211.                   if ( pfnSaveOpts () )
  1212.                   {
  1213.                      pfnMsgOK ( hwnd, APP_TITLE, "Thank you for registering PM Scrapbook !" );
  1214.                      WinDismissDlg ( hwnd, TRUE );
  1215.                   }
  1216.                   else
  1217.                      pfnMsgOK ( hwnd, APP_TITLE, "An error occurred registering PM Scrapbook !" );
  1218.                }
  1219.                else
  1220.                   pfnMsgOK ( hwnd, APP_TITLE, "Invalid name and/or key entered. Please try again." );
  1221.                   //WinSetDlgItemText   ( hwnd, DIT_MSG, "Invalid key !" );
  1222.             }
  1223.             break;
  1224.          }
  1225.       }
  1226.       break;
  1227.  
  1228.       default:
  1229.       {
  1230.          mr = WinDefDlgProc ( hwnd, msg, mp1, mp2 );
  1231.       }
  1232.       break;           
  1233.    }
  1234.    return mr;
  1235. }
  1236.