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

  1.  
  2. #define VAR_SCOPE extern
  3.  
  4. #include "fsp.h"
  5.  
  6. VOID    FAR      pfnTextPrtThd   ( PVOID pv );
  7.  
  8. /***************************************************************************/
  9. /* Text Window Proc                                                        */
  10. /***************************************************************************/
  11. MRESULT EXPENTRY pfnwpTextWin ( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ) 
  12. {
  13.    PUSEREC    pRecScn = WinQueryWindowPtr ( hwnd, 0 );
  14.     
  15.    switch ( msg ) 
  16.    {
  17.       case WM_CREATE:
  18.           
  19.       break;
  20.        
  21.       case WM_ACTIVATE:
  22.           
  23.          if ( SHORT1FROMMP ( mp1 ) ) 
  24.          {
  25.             hwndFoc = HWNDFROMMP ( mp2 );
  26.              
  27.             WinSendMsg ( WinQueryHelpInstance ( hwnd ), HM_SET_ACTIVE_WINDOW,
  28.                          MPFROMLONG ( WinQueryWindow ( hwnd, QW_PARENT ) ),
  29.                          MPFROMLONG ( WinQueryWindow ( hwnd, QW_PARENT ) ) );
  30.          }
  31.          else 
  32.          {
  33.             hwndFoc = HWNDFROMMP ( mp2 );
  34.              
  35.             WinSendMsg ( WinQueryHelpInstance ( hwnd ), HM_SET_ACTIVE_WINDOW,
  36.                          NULL, NULL );
  37.          }
  38.           
  39.       break;
  40.        
  41.       case WM_SIZE:
  42.           
  43.          if ( pRecScn )
  44.             WinSetWindowPos ( pRecScn->pdr->hwndE, 0, 0, 0,
  45.                               SHORT1FROMMP ( mp2 ),
  46.                               SHORT2FROMMP ( mp2 ),
  47.                               SWP_SHOW | SWP_SIZE | SWP_MOVE );
  48.       break;
  49.        
  50.       case UWM_SETRECPTR: //*** Store Data Pointer **************************
  51.       {
  52.          pRecScn = PVOIDFROMMP ( mp1 );
  53.           
  54.          WinSetWindowPtr ( hwnd, 0, pRecScn );
  55.       }
  56.       break;
  57.  
  58.       case UWM_PARAMS:
  59.       {
  60.          PDATREC  pdr;
  61.          MRESULT  mres;
  62.          SWP      swp;
  63.          IPT      ipt;
  64.          BOOL     fbRet;
  65.          PBYTE    pbyte;
  66.          PBYTE    pbScn;
  67.          ULONG    ulFLen;
  68.          ULONG    ulDLen;
  69.          ULONG    ulELen;
  70.  
  71.          pRecScn = PVOIDFROMMP ( mp1 );
  72.           
  73.          WinSetWindowPtr ( hwnd, 0, pRecScn );
  74.           
  75.          pdr = pRecScn->pdr;
  76.           
  77.          pfnSetWinPos ( hwnd, pdr );
  78.           
  79.          pdr->hwndM = WinWindowFromID ( WinQueryWindow ( hwnd, QW_PARENT ), FID_MENU );
  80.           
  81.          pdr->pszStat = malloc ( 80 );
  82.           
  83.          //*** Hack Tree Shift Bug ******************************************
  84.          if ( pRecScn == pRec )
  85.          {
  86.          RECTL rcl;
  87.          WinQueryWindowRect ( hwndM, &rcl);
  88.          WinSetWindowPos ( hwndC, 0, 0, 0,
  89.                            rcl.xRight,
  90.                            rcl.yTop,
  91.                            SWP_SIZE | SWP_MOVE );
  92.          }
  93.          //*** Create & Init Edit *******************************************
  94.           
  95.          pdr->hwndE = WinCreateWindow ( hwnd, WC_MLE, NULL,
  96.                                         MLS_VSCROLL | MLS_HSCROLL,
  97.                                         0,0,0,0, hwnd, HWND_TOP, WID_CONT, NULL, NULL );
  98.           
  99.          WinQueryWindowPos ( hwnd, &swp );
  100.           
  101.          WinSetWindowPos ( pdr->hwndE, HWND_TOP,
  102.                            0, 0,
  103.                            swp.cx,
  104.                            swp.cy,
  105.                            SWP_SIZE | SWP_MOVE | SWP_SHOW );
  106.          //2
  107.          if ( pdr->ulOpts & SCB_CONVERT ) 
  108.             WinSendMsg ( pdr->hwndE, MLM_FORMAT, MPFROMLONG ( MLFIE_CFTEXT ), NULL );
  109.          else
  110.             WinSendMsg ( pdr->hwndE, MLM_FORMAT, MPFROMLONG ( MLFIE_NOTRANS ), NULL );
  111.           
  112.          WinSendMsg ( pdr->hwndE, MLM_SETFONT, MPFROMP ( &pdr->fat ), NULL );
  113.           
  114.          WinSendMsg ( pdr->hwndE, MLM_SETTEXTLIMIT, MPFROMLONG ( -1 ), NULL );
  115.  
  116.          pfnSetPresColors ( pdr->hwndE, pdr->ulNBClr, pdr->ulNFClr, pdr->ulHBClr, pdr->ulHFClr );
  117.           
  118.          if ( ! pdr->ulDLen )
  119.          {
  120.             if ( ulTextOpts & SCB_TXTWRAP )
  121.             {
  122.                WinSendMsg ( pdr->hwndE, MLM_SETWRAP, MPFROMSHORT ( 1 ), NULL );
  123.                pdr->ulOpts |= SCB_TXTWRAP;
  124.             }
  125.             else
  126.                WinSendMsg ( pdr->hwndE, MLM_SETWRAP, MPFROMSHORT ( 0 ), NULL );
  127.          }
  128.          else
  129.          {
  130.             if ( pRecScn->pdr->ulOpts & SCB_TXTWRAP )
  131.                WinSendMsg ( pdr->hwndE, MLM_SETWRAP, MPFROMSHORT ( 1 ), NULL );
  132.             else
  133.                WinSendMsg ( pdr->hwndE, MLM_SETWRAP, MPFROMSHORT ( 0 ), NULL );
  134.          }
  135.  
  136.          //*** Set Text *****************************************************
  137.           
  138.          ulDLen = min ( 64000, pdr->ulDLen );
  139.           
  140.          pbyte = malloc ( 64000 );
  141.           
  142.          pbScn = pdr->pvDat;
  143.           
  144.          WinSendMsg ( pdr->hwndE, MLM_SETIMPORTEXPORT,
  145.                       MPFROMP ( pbyte ),
  146.                       MPFROMLONG ( ulDLen ) );
  147.           
  148.          ipt = 0L;
  149.           
  150.          ulFLen = 0;
  151.           
  152.          fbRet = TRUE;
  153.           
  154.          while ( fbRet ) 
  155.          {
  156.             memcpy ( pbyte, pbScn, ulDLen );
  157.              
  158.             mres = WinSendMsg ( pdr->hwndE, MLM_IMPORT,
  159.                                 MPFROMP ( &ipt ), MPFROMP ( ulDLen ) );
  160.              
  161.             ulELen = LONGFROMMR ( mres );
  162.              
  163.             if ( pdr->ulOpts & SCB_CONVERT )
  164.                ulELen += pfnStrChrCnt ( pbyte, ulDLen, '\r' );
  165.              
  166.             ulFLen += ulELen;
  167.              
  168.             pbScn += ulELen;
  169.              
  170.             ulDLen = min ( 64000, ( pdr->ulDLen - ulFLen ) );
  171.              
  172.             if ( ! ulELen )
  173.                fbRet = FALSE;
  174.              
  175.             if ( ulFLen >= pdr->ulDLen ) 
  176.                fbRet = FALSE;
  177.             else if ( ( ulFLen + 32000 ) > pdr->ulDLen )
  178.                ulDLen = pdr->ulDLen - ulFLen;
  179.          }
  180.           
  181.          free ( pbyte );
  182.           
  183.          WinSendMsg ( pdr->hwndE, MLM_SETCHANGED, MPFROMSHORT ( FALSE ), NULL );
  184.           
  185.          WinSendMsg ( pdr->hwndE, MLM_FORMAT, MPFROMLONG ( MLFIE_NOTRANS ), NULL );
  186.           
  187.          WinSetFocus ( HWND_DESKTOP, pdr->hwndE );
  188.  
  189.          //*** Create & Init Search *****************************************
  190.           
  191.          pdr->psSrch = malloc ( sizeof ( SRCHREC ) );
  192.           
  193.          memset ( pdr->psSrch, 0, sizeof ( SRCHREC ) );
  194.           
  195.          pdr->psSrch->hwndE = hwnd;
  196.           
  197.          pdr->psSrch->pszFnd = malloc ( 1 );
  198.  
  199.          *pdr->psSrch->pszFnd = 0;
  200.  
  201.          pdr->ulOpts |= SCB_OPENED;
  202.       }
  203.       break;
  204.        
  205.       case WM_INITMENU:
  206.       {
  207.          HWND    hwndMenu;
  208.  
  209.          WinSendMsg ( WinQueryHelpInstance ( hwnd ), HM_SET_ACTIVE_WINDOW,
  210.                       MPFROMLONG ( WinQueryWindow ( hwnd, QW_PARENT ) ),
  211.                       MPFROMLONG ( WinQueryWindow ( hwnd, QW_PARENT ) ) );
  212.           
  213.          hwndMenu = WinWindowFromID ( WinQueryWindow ( hwnd, QW_PARENT ), FID_MENU );
  214.           
  215.          if ( pRecScn->pdr->ulOpts & SCB_TXTWRAP )
  216.             WinCheckMenuItem ( hwndMenu, MID_TEXT_WRAP, TRUE );
  217.          else
  218.             WinCheckMenuItem ( hwndMenu, MID_TEXT_WRAP, FALSE );
  219.           
  220.          switch ( SHORT1FROMMP ( mp1 ) ) 
  221.          {
  222.             case MID_TEXT_FILE:
  223.                if ( pqi.pDriverData )
  224.                   WinEnableMenuItem ( hwndMenu, MID_TEXT_PRINT, TRUE  );
  225.                else
  226.                   WinEnableMenuItem ( hwndMenu, MID_TEXT_PRINT, FALSE );
  227.             break;
  228.                 
  229.             case MID_TEXT_EDIT:
  230.             {
  231.                SHORT    sRc1;
  232.                SHORT    sRc2;
  233.  
  234.                if (  pfnIsMyClip ( hwnd, CF_TEXT ) )
  235.                   WinEnableMenuItem ( hwndMenu, MID_TEXT_PASTE, TRUE );
  236.                else
  237.                   WinEnableMenuItem ( hwndMenu, MID_TEXT_PASTE, FALSE );
  238.                 
  239.                sRc1 = (SHORT) WinSendMsg ( pRecScn->pdr->hwndE, MLM_QUERYSEL,
  240.                                            MPFROMSHORT ( MLFQS_MINSEL ), NULL );
  241.                 
  242.                sRc2 = (SHORT) WinSendMsg ( pRecScn->pdr->hwndE, MLM_QUERYSEL,
  243.                                            MPFROMSHORT ( MLFQS_MAXSEL ), NULL );
  244.                 
  245.                if (  sRc1 != sRc2 ) 
  246.                {
  247.                   WinEnableMenuItem ( hwndMenu, MID_TEXT_CUT,   TRUE );
  248.                   WinEnableMenuItem ( hwndMenu, MID_TEXT_COPY,  TRUE );
  249.                   WinEnableMenuItem ( hwndMenu, MID_TEXT_CLEAR, TRUE );
  250.                }
  251.                else 
  252.                {
  253.                   WinEnableMenuItem ( hwndMenu, MID_TEXT_CUT,   FALSE );
  254.                   WinEnableMenuItem ( hwndMenu, MID_TEXT_COPY,  FALSE );
  255.                   WinEnableMenuItem ( hwndMenu, MID_TEXT_CLEAR, FALSE );
  256.                }
  257.                 
  258.                if ( pRecScn->pdr->psSrch->hwndS )
  259.                   WinEnableMenuItem ( hwndMenu, MID_TEXT_FIND, FALSE );
  260.                else 
  261.                   WinEnableMenuItem ( hwndMenu, MID_TEXT_FIND, TRUE  );
  262.                 
  263.                if ( *pRecScn->pdr->psSrch->pszFnd ) 
  264.                   WinEnableMenuItem ( hwndMenu, MID_TEXT_FNDNXT, TRUE );
  265.                else 
  266.                   WinEnableMenuItem ( hwndMenu, MID_TEXT_FNDNXT, FALSE );
  267.             }
  268.             break;
  269.              
  270.          }
  271.       }
  272.       break;
  273.        
  274.       case WM_HELP:
  275.       {
  276.          SHORT   sId;
  277.  
  278.          sId = WinQueryWindowUShort ( hwnd, QWS_ID );
  279.  
  280.          WinSendMsg ( hwndH, HM_DISPLAY_HELP,
  281.                       MPFROM2SHORT ( sId, 0 ), MPFROMSHORT ( HM_RESOURCEID ) );
  282.       }
  283.       break;
  284.        
  285.       case WM_COMMAND:
  286.           
  287.          switch ( SHORT1FROMMP ( mp1 ) ) 
  288.          {
  289.             case MID_TEXT_IMP:
  290.             {
  291.                PDATREC  pdr;
  292.                PSZ      pszFileTmp;
  293.                MRESULT  mres;
  294.                IPT      ipt;
  295.                PBYTE    pbyte;
  296.                HFILE    hfil;
  297.                APIRET   apiret;
  298.                ULONG    ulBytesRead;
  299.                 
  300.                pszFileTmp = pfnFileNameBuf ( "*.*" );
  301.       
  302.                if ( pfnFileDialog ( hwnd, "Import", TRUE, pszFileTmp ) )
  303.                {
  304.                   pdr = pRecScn->pdr;
  305.                    
  306.                   pbyte = malloc ( 64000 );
  307.                    
  308.                   WinSendMsg ( pdr->hwndE, MLM_FORMAT, MPFROMLONG ( MLFIE_CFTEXT ), NULL );
  309.                    
  310.                   WinSendMsg ( pdr->hwndE, MLM_SETIMPORTEXPORT,
  311.                                MPFROMP ( pbyte ),
  312.                                MPFROMLONG ( 1024 ) );
  313.                    
  314.                   mres = WinSendMsg ( pdr->hwndE, MLM_QUERYSEL, MPFROMLONG ( MLFQS_CURSORSEL ), NULL );
  315.                    
  316.                   ipt = LONGFROMMR ( mres );
  317.                    
  318.                   apiret = DosOpen ( pszFileTmp, &hfil, &ulBytesRead, 0L, 0L,
  319.                                      OPEN_ACTION_FAIL_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS,
  320.                                      OPEN_SHARE_DENYNONE|OPEN_ACCESS_READONLY, 0L );
  321.                    
  322.                   if ( apiret ) 
  323.                   {
  324.                      pfnMsgOK (  hwnd, APP_TITLE, "Could not open file." );
  325.  
  326.                      break;
  327.                   }
  328.                    
  329.                    
  330.                   DosRead ( hfil, pbyte, 1024, &ulBytesRead );
  331.                    
  332.                   WinSendMsg ( pdr->hwndE, MLM_DISABLEREFRESH, NULL, NULL );
  333.                    
  334.                   while ( ulBytesRead ) 
  335.                   {
  336.                      mres = WinSendMsg ( pdr->hwndE, MLM_IMPORT,
  337.                                          MPFROMP ( &ipt ),
  338.                                          MPFROMLONG ( ulBytesRead /*ulFLen */ ) );
  339.                       
  340.                      DosRead ( hfil, pbyte, 1024, &ulBytesRead );
  341.                   }
  342.                    
  343.                   DosClose ( hfil );
  344.                    
  345.                   free ( pbyte );
  346.                    
  347.                   WinSendMsg ( pdr->hwndE, MLM_ENABLEREFRESH, NULL, NULL );
  348.                    
  349.                   WinSendMsg ( pdr->hwndE, MLM_SETCHANGED, MPFROMSHORT ( TRUE ), NULL );
  350.                    
  351.                   pdr->fbModified = TRUE;
  352.                   //fbModified      = TRUE;
  353.                    
  354.                   WinSendMsg ( pdr->hwndE, MLM_FORMAT, MPFROMLONG ( MLFIE_NOTRANS ), NULL );
  355.                    
  356.                }
  357.  
  358.                free ( pszFileTmp );
  359.             }
  360.             break;
  361.              
  362.             case MID_TEXT_EXP:
  363.             {
  364.                PDATREC  pdr;
  365.                PSZ      pszFileTmp;
  366.                MRESULT  mres;
  367.                IPT      ipt;
  368.                BOOL     fbRet;
  369.                PBYTE    pbyte;
  370.                APIRET   apiret;
  371.                HFILE    hfil;
  372.                ULONG    ulBytesWrit;
  373.                ULONG    ulFLen;
  374.                ULONG    ulDLen;
  375.                ULONG    ulELen;
  376.                 
  377.                pszFileTmp = pfnFileNameBuf ( "*.txt" );
  378.       
  379.                if ( pfnFileDialog ( hwnd, "Export", FALSE, pszFileTmp ) )
  380.                {
  381.                   pdr = pRecScn->pdr;
  382.                    
  383.                   /* Open File */
  384.                    
  385.                   ulBytesWrit = 0;
  386.                    
  387.                   apiret = DosOpen ( pszFileTmp, &hfil, &ulBytesWrit, 0L, 0L,
  388.                                      OPEN_ACTION_REPLACE_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW,
  389.                                      OPEN_SHARE_DENYREADWRITE|OPEN_ACCESS_WRITEONLY, 0L );
  390.                    
  391.                   if ( apiret ) 
  392.                   {
  393.                      pfnMsgOK ( hwnd, APP_TITLE, "Could not open file." );
  394.  
  395.                      break;
  396.                   }
  397.                    
  398.                   //*** Get Length & Alloc **********************************
  399.                    
  400.                   WinSendMsg ( pdr->hwndE, MLM_FORMAT, MPFROMLONG ( MLFIE_CFTEXT ), NULL );
  401.                    
  402.                   mres = WinSendMsg ( pdr->hwndE, MLM_QUERYTEXTLENGTH, NULL, NULL );
  403.                    
  404.                   ipt = LONGFROMMR ( mres );
  405.                    
  406.                   mres = WinSendMsg ( pdr->hwndE, MLM_QUERYFORMATTEXTLENGTH,
  407.                                       MPFROMLONG ( 0 ), MPFROMLONG ( ipt ) );
  408.                    
  409.                   ipt = LONGFROMMR ( mres );
  410.                    
  411.                   pdr->ulDLen = ipt;
  412.                    
  413.                   //*** Get Text ********************************************
  414.                    
  415.                   ulDLen = min ( 64000, pdr->ulDLen );
  416.                   ipt    = 0;
  417.                   ulFLen = 0;
  418.                   pbyte  = malloc ( 64000 );
  419.                   fbRet  = TRUE;
  420.                    
  421.                   WinSendMsg ( pdr->hwndE, MLM_SETIMPORTEXPORT,
  422.                                MPFROMP ( pbyte ), MPFROMLONG ( 64000 ) );
  423.                    
  424.                   while ( fbRet ) 
  425.                   {
  426.                      mres = WinSendMsg ( pdr->hwndE, MLM_EXPORT,
  427.                                          MPFROMP ( &ipt ), 
  428.                                          MPFROMP ( &ulDLen ) );
  429.                       
  430.                      ulELen = LONGFROMMR ( mres );
  431.                       
  432.                      DosWrite ( hfil, pbyte, ulELen, &ulBytesWrit );
  433.                       
  434.                      ulFLen += ulELen;
  435.                       
  436.                      ulDLen = min ( 64000, ( pdr->ulDLen - ulFLen ) );
  437.                       
  438.                      if ( ulFLen >= pdr->ulDLen )
  439.                         fbRet = FALSE;
  440.                      else if ( ( ulFLen + ulDLen ) > pdr->ulDLen )
  441.                         ulDLen = pdr->ulDLen - ulFLen;
  442.                   }
  443.                    
  444.                   free ( pbyte );
  445.                    
  446.                   DosClose ( hfil );
  447.                    
  448.                   WinSendMsg ( pdr->hwndE, MLM_FORMAT, MPFROMLONG ( MLFIE_NOTRANS ), NULL );
  449.                    
  450.                }
  451.                free ( pszFileTmp );
  452.             }
  453.             break;
  454.              
  455.             case MID_TEXT_SAVE:
  456.                 
  457.                WinSendMsg ( hwnd, UWM_SAVE, NULL, NULL );
  458.                 
  459.             break;
  460.              
  461.             case MID_TEXT_EXIT:
  462.  
  463.                WinPostMsg ( WinQueryWindow(hwnd,QW_PARENT), WM_SYSCOMMAND, MPFROM2SHORT ( SC_CLOSE, 0 ), NULL );
  464.  
  465.             break;
  466.              
  467.             case MID_TEXT_SAVE_EXIT:
  468.  
  469.                WinSendMsg ( hwnd, UWM_SAVE, NULL, NULL );
  470.                WinPostMsg ( WinQueryWindow(hwnd,QW_PARENT), WM_SYSCOMMAND, MPFROM2SHORT ( SC_CLOSE, 0 ), NULL );
  471.  
  472.             break;
  473.              
  474.             case MID_TEXT_FONT:
  475.             {
  476.                PDATREC   pdr;
  477.                HPS       hps;
  478.  
  479.                pdr = pRecScn->pdr;
  480.                hps = WinGetPS ( pdr->hwndE );
  481.       
  482.                if ( pfnGetFont ( hwnd, hps, NULLHANDLE, &pdr->fxPtSz, &pdr->fat ) )
  483.                {
  484.                   WinSendMsg ( pdr->hwndE, MLM_SETFONT,
  485.                                MPFROMP ( &pdr->fat ), NULL );
  486.  
  487.                   pdr->fbModified = TRUE;
  488.                }
  489.       
  490.                WinReleasePS ( hps );
  491.             }
  492.             break;
  493.              
  494.             case MID_TEXT_COLOR:
  495.                 
  496.                WinDlgBox ( HWND_DESKTOP, hwnd, pfndpColors, 0L,
  497.                            DLG_COLORS, &pRecScn->pdr->hwndE );
  498.                 
  499.             break;
  500.              
  501.             case MID_TEXT_TITLE:
  502.             {
  503.                WinDlgBox ( HWND_DESKTOP, hwnd, pfndpSetTitle, 0L, DLG_SET_TITLE, pRecScn );
  504.             }
  505.             break;
  506.              
  507.             case MID_TEXT_PRINT:
  508.             {
  509.                pRecPrt = pRecScn;
  510.  
  511.                WinDlgBox ( HWND_DESKTOP, hwnd, pfndpPrint,  0L,
  512.                            DLG_PRINT, (PVOID) pfnTextPrtThd );
  513.             }
  514.             break;
  515.              
  516.             case MID_TEXT_WRAP:
  517.             {
  518.                PDATREC   pdr;
  519.  
  520.                pdr = pRecScn->pdr;
  521.                 
  522.                if ( pdr->ulOpts & SCB_TXTWRAP ) 
  523.                {
  524.                   pdr->ulOpts &= ~SCB_TXTWRAP;
  525.                    
  526.                   WinSendMsg ( pdr->hwndE, MLM_SETWRAP, MPFROMSHORT ( 0 ), NULL );
  527.                }
  528.                else 
  529.                {
  530.                   pdr->ulOpts |= SCB_TXTWRAP;
  531.                    
  532.                   WinSendMsg ( pdr->hwndE, MLM_SETWRAP, MPFROMSHORT ( 1 ), NULL );
  533.                }
  534.  
  535.                pdr->fbModified = TRUE;
  536.             }
  537.             break;
  538.              
  539.             case MID_TEXT_FIND:
  540.                
  541.                WinLoadDlg ( HWND_DESKTOP, hwnd, pfndpSearch, 0L, DLG_SEARCH, 
  542.                             pRecScn->pdr->psSrch );
  543.                 
  544.             break;
  545.              
  546.             case MID_TEXT_FNDNXT:
  547.                 
  548.                WinPostMsg ( hwnd, UWM_SEARCH, NULL, NULL );
  549.                 
  550.             break;
  551.              
  552.             case MID_TEXT_CUT:
  553.                 
  554.                WinSendMsg ( pRecScn->pdr->hwndE, MLM_CUT, NULL, NULL );
  555.                 
  556.                pRecScn->pdr->fbModified = TRUE;
  557.  
  558.             break;
  559.              
  560.             case MID_TEXT_COPY:
  561.                 
  562.                WinSendMsg ( pRecScn->pdr->hwndE, MLM_COPY, NULL, NULL );
  563.                 
  564.             break;
  565.              
  566.             case MID_TEXT_PASTE:
  567.                 
  568.                WinSendMsg ( pRecScn->pdr->hwndE, MLM_PASTE, NULL, NULL );
  569.                 
  570.                pRecScn->pdr->fbModified = TRUE;
  571.  
  572.             break;
  573.              
  574.             case MID_TEXT_CLEAR:
  575.                 
  576.                WinSendMsg ( pRecScn->pdr->hwndE, MLM_CLEAR, NULL, NULL );
  577.                 
  578.                pRecScn->pdr->fbModified = TRUE;
  579.  
  580.             break;
  581.  
  582.             default:
  583.                WinPostMsg ( hwndM, msg, mp1, mp2 );
  584.          }
  585.           
  586.       break;
  587.        
  588. /*      case WM_CONTROL:
  589.           
  590.          if ( SHORT1FROMMP ( mp1 ) == WID_CONT )
  591.          {
  592.             switch ( SHORT2FROMMP ( mp1 ) ) 
  593.             {
  594.                case MLN_CHANGE:
  595.                {
  596.                   pRecScn->pdr->fbModified = TRUE;
  597.                   fbModified = TRUE;
  598.                }
  599.                return ( MRESULT ) TRUE;
  600.                 
  601.             }
  602.          }
  603.       break;*/
  604.        
  605.       case UWM_SAVE:
  606.       {
  607.          PDATREC  pdr;
  608.          MRESULT  mres;
  609.          IPT      ipt;
  610.          BOOL     fbRet;
  611.          PBYTE    pbyte;
  612.          PBYTE    pbScn;
  613.          ULONG    ulFLen;
  614.          ULONG    ulDLen;
  615.          ULONG    ulELen;
  616.  
  617.          pdr = pRecScn->pdr;
  618.           
  619.          pdr->ulRelRev = REL_REV;
  620.  
  621.          //*** Get Length & Alloc *******************************************
  622.           
  623.          //1WinSendMsg ( pdr->hwndE, MLM_FORMAT, MPFROMLONG ( MLFIE_NOTRANS ), NULL );
  624.           
  625.          mres = WinSendMsg ( pdr->hwndE, MLM_QUERYTEXTLENGTH, NULL, NULL );
  626.           
  627.          ipt = LONGFROMMR ( mres );
  628.           
  629.          if ( ! ( pdr->ulOpts & SCB_CONVERT ) ) 
  630.          {
  631.             mres = WinSendMsg ( pdr->hwndE, MLM_QUERYFORMATTEXTLENGTH,
  632.                                 MPFROMLONG ( 0 ), MPFROMLONG ( ipt ) );
  633.              
  634.             ipt = LONGFROMMR ( mres );
  635.          }
  636.           
  637.          pdr->pvDat = realloc ( pdr->pvDat, ipt );
  638.           
  639.          pbScn = pdr->pvDat;
  640.           
  641.          pdr->ulDLen = ipt;
  642.           
  643.          pdr->ulDEnt = 1;
  644.           
  645.          //*** Get Text *****************************************************
  646.           
  647.          ulDLen = min ( 64000, pdr->ulDLen );
  648.           
  649.          ipt = 0L;
  650.           
  651.          ulFLen = 0;
  652.           
  653.          pbyte = malloc ( 64000 );
  654.           
  655.          WinSendMsg ( pdr->hwndE, MLM_SETIMPORTEXPORT,
  656.                       MPFROMP ( pbyte ),
  657.                       MPFROMLONG ( 64000 ) );
  658.           
  659.          fbRet = TRUE;
  660.           
  661.          while ( fbRet ) 
  662.          {
  663.             mres = WinSendMsg ( pdr->hwndE, MLM_EXPORT,
  664.                                 MPFROMP ( &ipt ),
  665.                                 MPFROMP ( &ulDLen ) );
  666.              
  667.             ulELen = LONGFROMMR ( mres );
  668.              
  669.             memcpy ( pbScn, pbyte, ulELen );
  670.              
  671.             ulFLen += ulELen;
  672.             pbScn  += ulELen;
  673.             ulDLen  = min ( 64000, ( pdr->ulDLen - ulFLen ) );
  674.              
  675.             if ( ulFLen >= pdr->ulDLen )
  676.                fbRet = FALSE;
  677.             else if ( ( ulFLen + ulDLen ) > pdr->ulDLen )
  678.                ulDLen = pdr->ulDLen - ulFLen;
  679.          }
  680.           
  681.          free ( pbyte );
  682.           
  683.          //2WinSendMsg ( pdr->hwndE, MLM_FORMAT, MPFROMLONG ( MLFIE_CFTEXT ), NULL );
  684.           
  685.          //*** Set Completion States ****************************************
  686.           
  687.          pdr->fbModified = FALSE;
  688.          pfnSetWhen ( &pRecScn->cdWri, &pRecScn->ctWri );
  689.           
  690.          pfnGetWinPos ( hwnd, pdr );
  691.           
  692.          //pdr->sPtSize = pfnFmToFat ( pdr->hwndE, &pdr->fat );
  693.          //pfnGetDefFattrs ( pdr->hwndE, NULLHANDLE, &pdr->fat, &pdr->fxPtSz );
  694.           
  695.          pfnGetPresColors ( pdr->hwndE, &pdr->ulNBClr, &pdr->ulNFClr, &pdr->ulHBClr, &pdr->ulHFClr );
  696.           
  697.          pdr->ulOpts &= ~SCB_CONVERT;
  698.           
  699.          fbModified = TRUE;
  700.           
  701.          WinSendMsg ( pdr->hwndE, MLM_SETCHANGED, MPFROMSHORT ( FALSE ), NULL );
  702.       }
  703.       break;
  704.        
  705.       case UWM_SEARCH:
  706.       {
  707.          PDATREC          pdr;
  708.          MLE_SEARCHDATA   mlesd;
  709.          ULONG            ulSrchHow;
  710.          //MRESULT          mr;
  711.  
  712.          pdr = pRecScn->pdr;
  713.           
  714.          mlesd.cb        = sizeof ( MLE_SEARCHDATA );
  715.          mlesd.pchFind   = pdr->psSrch->pszFnd;
  716.          mlesd.cchFind   = strlen ( pdr->psSrch->pszFnd );
  717.          mlesd.iptStart  = -1;
  718.          mlesd.iptStop   = -1;
  719.           
  720.          ulSrchHow = MLFSEARCH_SELECTMATCH;
  721.           
  722.          if ( pdr->psSrch->fbCase )
  723.             ulSrchHow |= MLFSEARCH_CASESENSITIVE;
  724.           
  725.          if ( !  WinSendMsg ( pdr->hwndE, MLM_SEARCH,
  726.                               MPFROMLONG ( ulSrchHow ), MPFROMP ( &mlesd ) ) )
  727.             pfnMsgOK ( hwnd, APP_TITLE, "Text not found." );
  728.           
  729.          /*if ( ! mlesd.cchFound && pdr->psSrch->fbWrap )
  730.          {
  731.             WinSendMsg ( pdr->hwndE, MLM_SETFIRSTCHAR,
  732.                          MPFROMLONG ( 0 ), NULL );
  733.              
  734.             mlesd.iptStart  = -1;
  735.             mlesd.iptStop   = -1;
  736.              
  737.             WinSendMsg ( pdr->hwndE, MLM_SEARCH,
  738.                          MPFROMLONG ( ulFLen ), MPFROMP ( &mlesd ) );
  739.              
  740.             //WinPostMsg ( hwnd, UWM_SEARCH, NULL, NULL );
  741.          }
  742.           
  743.          if ( ! mlesd.cchFound )
  744.          {
  745.             pfnMsgOK ( hwnd, APP_TITLE, "Text not found." );
  746.          }*/
  747.       }
  748.       break;
  749.        
  750.       case WM_CLOSE:
  751.       {
  752.          PDATREC  pdr;
  753.  
  754.          pdr = pRecScn->pdr;
  755.           
  756.          if ( WinSendMsg ( pdr->hwndE, MLM_QUERYCHANGED, NULL, NULL ) || pdr->fbModified )
  757.          {
  758.             if ( pfnMsgYesNo ( hwnd, APP_TITLE,
  759.                                "This entry has been modified. Save changes ?" ) )
  760.                WinSendMsg ( hwnd, UWM_SAVE, NULL, NULL );
  761.          }
  762.           
  763.          pdr->ulOpts &= ~SCB_OPENED;
  764.           
  765.          pdr->hwndD   = 0;
  766.          pfnHaveAKid ( pRecScn, FALSE );
  767.           
  768.          free ( pdr->psSrch->pszFnd );
  769.          free ( pdr->psSrch );
  770.          free ( pdr->pszStat );
  771.           
  772.          WinSendMsg ( hwndC, CM_SETRECORDEMPHASIS,
  773.                       MPFROMP ( pRecScn ),
  774.                       MPFROM2SHORT ( FALSE, CRA_INUSE ) );
  775.           
  776.          WinDestroyWindow ( WinQueryWindow ( hwnd, QW_PARENT ) );
  777.       }
  778.       break;
  779.        
  780.       case WM_PRESPARAMCHANGED:
  781.           
  782.          pRecScn->pdr->fbModified = TRUE;
  783.          fbModified = TRUE;
  784.           
  785.       break;
  786.        
  787.       case WM_ERASEBACKGROUND:
  788.           
  789.       return ( MRESULT ) ( TRUE );
  790.        
  791.       default:
  792.       return WinDefWindowProc ( hwnd, msg, mp1, mp2 );
  793.        
  794.    }
  795.     
  796.    return ( MRESULT ) FALSE;
  797.     
  798. }
  799. //****************************************************************************
  800. // Print Thread
  801. //****************************************************************************
  802. VOID    FAR      pfnTextPrtThd       ( PVOID pv )
  803. {
  804.    HMQ         hmq;
  805.    PDATREC     pdr;
  806.    LONG        lCharsOut;
  807.    LONG        lCharsLeft = 1;
  808.    LONG        lNewBottom;
  809.    PSZ         psz;
  810.    BOOL        fbCauseText = FALSE;
  811.    CHAR        ach32[32];
  812.    PBYTE       pbBuf;
  813.  
  814.    hmq = WinCreateMsgQueue ( WinQueryAnchorBlock ( hwndM ), 0 );
  815.  
  816.    pdr = pprtCtl->pPrtRec->pdr;
  817.  
  818.    ++pprtCtl->ulPrtPage;
  819.  
  820.    pdr->ulPrtPage = pprtCtl->ulPrtPage;
  821.  
  822.    //*** Set Entry Font *****************************************************
  823.  
  824.    if ( pprtCtl->fbNewFont )
  825.    {
  826.       pdr->fxPtSzPrt = pprtCtl->defPrtAll.fxPtSz;
  827.       pdr->fatPrt    = pprtCtl->defPrtAll.fat;
  828.    }
  829.  
  830.    if ( pdr->fxPtSzPrt )
  831.    {
  832.       pprtCtl->defPrtAll.fxPtSz = pdr->fxPtSzPrt;
  833.       pprtCtl->defPrtAll.fat    = pdr->fatPrt;
  834.    }
  835.  
  836.    pfnCvtVecFont     ( pprtCtl->hpsPrinter, 
  837.                        pprtCtl->defPrtAll.fxPtSz,
  838.                        &pprtCtl->defPrtAll.fat );
  839.  
  840.    pfnSetPaintFont   ( pdr->hwndD, pprtCtl->hpsPrinter, 
  841.                        &pprtCtl->defPrtAll.fat, FONTID_ALL );
  842.  
  843.    GpiQueryFontMetrics ( pprtCtl->hpsPrinter, sizeof ( FONTMETRICS ), 
  844.                          &pprtCtl->fmAll );
  845.  
  846.    //*** Get Text to Print **************************************************
  847.  
  848.    pbBuf = NULL;
  849.  
  850.    if ( ! pdr->hwndD )
  851.    {
  852.       if ( pdr->ulDLen )
  853.          psz = (PSZ) pdr->pvDat;
  854.       else
  855.          psz = " ";
  856.    }
  857.    else
  858.    {
  859.       MRESULT  mres;
  860.       IPT      ipt;
  861.       BOOL     fbRet;
  862.       PBYTE    pbyte;
  863.       PBYTE    pbScn;
  864.       ULONG    ulFLen;
  865.       ULONG    ulDLen;
  866.       ULONG    ulELen;
  867.       ULONG    ulTLen;
  868.  
  869.       //*** Get Length & Alloc *******************************************
  870.        
  871.       //1WinSendMsg ( pdr->hwndE, MLM_FORMAT, MPFROMLONG ( MLFIE_NOTRANS ), NULL );
  872.        
  873.       mres = WinSendMsg ( pdr->hwndE, MLM_QUERYTEXTLENGTH, NULL, NULL );
  874.        
  875.       ipt = LONGFROMMR ( mres );
  876.        
  877.       if ( ! ( pdr->ulOpts & SCB_CONVERT ) ) 
  878.       {
  879.          mres = WinSendMsg ( pdr->hwndE, MLM_QUERYFORMATTEXTLENGTH,
  880.                              MPFROMLONG ( 0 ), MPFROMLONG ( ipt ) );
  881.           
  882.          ipt = LONGFROMMR ( mres );
  883.       }
  884.        
  885.       pbBuf = malloc ( ipt );
  886.        
  887.       pbScn = pbBuf;
  888.        
  889.       psz = pbBuf;
  890.  
  891.       ulTLen = ipt;
  892.        
  893.       //pdr->ulDEnt = 1;
  894.        
  895.       //*** Get Text *****************************************************
  896.        
  897.       ulDLen = min ( 64000, ulTLen );
  898.        
  899.       ipt = 0L;
  900.        
  901.       ulFLen = 0;
  902.        
  903.       pbyte = malloc ( 64000 );
  904.        
  905.       WinSendMsg ( pdr->hwndE, MLM_SETIMPORTEXPORT,
  906.                    MPFROMP ( pbyte ),
  907.                    MPFROMLONG ( 64000 ) );
  908.        
  909.       fbRet = TRUE;
  910.        
  911.       while ( fbRet ) 
  912.       {
  913.          mres = WinSendMsg ( pdr->hwndE, MLM_EXPORT,
  914.                              MPFROMP ( &ipt ),
  915.                              MPFROMP ( &ulDLen ) );
  916.           
  917.          ulELen = LONGFROMMR ( mres );
  918.           
  919.          memcpy ( pbScn, pbyte, ulELen );
  920.           
  921.          ulFLen += ulELen;
  922.          pbScn  += ulELen;
  923.          ulDLen  = min ( 64000, ( ulTLen - ulFLen ) );
  924.           
  925.          if ( ulFLen >= ulTLen )
  926.             fbRet = FALSE;
  927.          else if ( ( ulFLen + ulDLen ) > ulTLen )
  928.             ulDLen = ulTLen - ulFLen;
  929.       }
  930.        
  931.       free ( pbyte );
  932.    }
  933.  
  934.    //*** Print the Text *****************************************************
  935.  
  936.    while ( lCharsLeft && fbPrinting )
  937.    {
  938.       //*** Print Heading ***************************************************
  939.  
  940.       if ( fbCauseText )
  941.       {
  942.          pfnPrintPageEject ( pdr->hwndD, pprtCtl->hpsPrinter );
  943.  
  944.          ++pprtCtl->ulPrtPage;
  945.       }
  946.       else
  947.       {
  948.          fbCauseText = TRUE;
  949.  
  950.          if ( ulTreeOpts & SCB_PRTHEAD )
  951.          {
  952.             pfnSelPaintFont ( hwndM, pprtCtl->hpsPrinter, 
  953.                               &pprtCtl->defPrtHed.fat, FONTID_HED );
  954.       
  955.             lCharsOut = pfnPaintTextRect ( pprtCtl->hpsPrinter, 
  956.                                            pprtCtl->pPrtRec->crecCore.pszTree,
  957.                                            &pprtCtl->rclPage, &pprtCtl->fmHed,
  958.                                            &lNewBottom, &lCharsLeft, 
  959.                                            DT_LEFT | DT_VCENTER,
  960.                                            FALSE, FALSE, FALSE );
  961.       
  962.             if ( ! lCharsOut )
  963.                lCharsLeft = 0;
  964.  
  965.             pprtCtl->rclBody.yTop = lNewBottom - pprtCtl->fmAll.lMaxBaselineExt;
  966.          }
  967.       }
  968.  
  969.       //*** Print Text ******************************************************
  970.  
  971.       pfnSelPaintFont ( hwndM, pprtCtl->hpsPrinter, 
  972.                         &pprtCtl->defPrtAll.fat, FONTID_ALL );
  973.  
  974.  
  975.       lCharsOut = pfnPaintTextRect ( pprtCtl->hpsPrinter, psz,
  976.                                      &pprtCtl->rclBody, &pprtCtl->fmAll,
  977.                                      &lNewBottom, &lCharsLeft, 
  978.                                      DT_LEFT | DT_VCENTER,
  979.                                      FALSE, FALSE, FALSE );
  980.    
  981.       if ( lCharsLeft )
  982.          psz += lCharsOut;
  983.  
  984.       //*** Print Text Number ***********************************************
  985.  
  986.       if ( ulTreeOpts & SCB_PRTPAGE )
  987.       {
  988.          pfnSelPaintFont ( hwndM, pprtCtl->hpsPrinter, 
  989.                            &pprtCtl->defPrtCnt.fat, FONTID_CNT );
  990.    
  991.    
  992.          sprintf ( ach32, "-  %d  -", pprtCtl->ulPrtPage );
  993.       
  994.          pfnPaintText ( pprtCtl->hpsPrinter, ach32, 
  995.                         &pprtCtl->rclFoot, &pprtCtl->fmCnt,
  996.                         DT_CENTER | DT_BOTTOM, FALSE, FALSE );
  997.       }
  998.    }
  999.  
  1000.    //*** Clear Out **********************************************************
  1001.  
  1002.    if ( pbBuf )
  1003.       free ( pbBuf );
  1004.  
  1005.    if ( fbPrinting )
  1006.       WinPostMsg ( pprtCtl->hwndPrtDlg, UWM_DONE, NULL, NULL );
  1007.  
  1008.    WinDestroyMsgQueue ( hmq );
  1009.  
  1010.    DosPostEventSem ( evtThdDone );
  1011.  
  1012.    //DosExit ( EXIT_THREAD, 0 );
  1013.    _endthread ();
  1014. }
  1015.