Status of source code changes suggested in November 2014

HMG Unicode versions 3.1.x related

Moderator: Rathinagiri

User avatar
kcarmody
Posts: 152
Joined: Tue Oct 07, 2014 11:13 am
Contact:

Re: Status of source code changes suggested in November 2014

Post by kcarmody »

srvet_claudio wrote:
kcarmody wrote:
srvet_claudio wrote:I think these suggestions not missing because I never implemented in HMG.
Someone implemented them in HMG for a while. All the changes marked 3.4.1a were part of the 3.4.1 release in July, but were removed from the release version some time after that, and those are marked 3.4.1b.

You did not mention the rich edit demo. As I said, my version of the rich edit demo (version 3.3.1k) was modified and put into HMG in July (version 3.4.1a), but this version was buggy and unusable for text files. After that (version 3.4.1b), the rich edit demo was reset to the form it was in 3.3.1.
Maybe I copied your files into the source folder of HMG and not checked, honestly I don't remember, I think I'm getting old.
OK, maybe so. If you did do this, then you copied only the .prg and .c files and did not copy the .ch files.

But the rich edit demo was not simply copied. It was modified by someone, and the modifications introduced bugs that were not present in my version. Did you perhaps try to compile my version of the rich edit demo, find that it would not compile (due to missing modifications in the .ch files), and then modify the demo so that it would compile?

I don't actually need to know whether you did this or not. We just need to find a way to get these features into the current version. Would you like me to develop a new proposal for the current version?
User avatar
srvet_claudio
Posts: 2193
Joined: Thu Feb 25, 2010 8:43 pm
Location: Uruguay
Contact:

Re: Status of source code changes suggested in November 2014

Post by srvet_claudio »

kcarmody wrote:Would you like me to develop a new proposal for the current version?
Ok, go on.
Best regards.
Dr. Claudio Soto
(from Uruguay)
http://srvet.blogspot.com
Carlos Britos
Posts: 245
Joined: Sat Aug 02, 2008 5:03 pm

Re: Status of source code changes suggested in November 2014

Post by Carlos Britos »

kcarmody wrote:
Carlos Britos wrote:Maybe is a false positive, but Avast report infection DRep and the file Demo.exe is deleted

I think it must be a false positive. I have run this demo since last November. AVG has never reported a problem with it, and I have never seen any symptoms of any problems. It is constructed from a modified version of HMG, with all modified source code in the folders around it.
My antivirus Symantec found risk Quarined Demo.exe
The executable I posted is made from a lightly modified version of HMG. If it has a virus, then other HMG executables may also have viruses. Have you tried running this antivirus program on other HMG executables? I have AVG, which has protected me well against viruses in the past, and it has never complained about this executable.
Hi

My first try downloading the file, was via Firefox downloader, then Avast show an alert.
My second try downloading the file was via app Downloader Express, and the Avast say all is ok.
So now I just have to say :shock: :shock:
Regards/Saludos, Carlos (bcd12a)
User avatar
andyglezl
Posts: 1461
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Contact:

Re: Status of source code changes suggested in November 2014

Post by andyglezl »

Did the antivirus detect a problem with UPX.exe or with demo.exe?
with demo.exe.
Andrés González López
Desde Guadalajara, Jalisco. México.
User avatar
kcarmody
Posts: 152
Joined: Tue Oct 07, 2014 11:13 am
Contact:

Re: Status of source code changes suggested in November 2014

Post by kcarmody »

srvet_claudio wrote:
kcarmody wrote:Would you like me to develop a new proposal for the current version?
Ok, go on.
Ok, I will do this. Is there any patch to the current version other than patch 1 mentioned at viewtopic.php?p=42140#p42140?
User avatar
kcarmody
Posts: 152
Joined: Tue Oct 07, 2014 11:13 am
Contact:

Re: Status of source code changes suggested in November 2014

Post by kcarmody »

andyglezl wrote:
Did the antivirus detect a problem with UPX.exe or with demo.exe?
with demo.exe.
I can't understand how this could be an actual virus. I built this with a lightly modified version of HMG. I built it last November. I have AVG antivirus, which has protected me well in the past. AVG has never raised an alarm about demo.exe, and I have not seen any problem that indicates that a virus is present. If demo.exe does have a virus, then other HMG executables would probably also have the same virus. I can't see how HMG could have a virus in it, since it is open source, unless there is some library HMG uses that is not open source, or unless someone did not notice some virus code in the source.

There is an interesting discussion of false antivirus positives at How To Geek -- http://www.howtogeek.com/180162/how-to- ... -positive/ -- If an antivirus raises an alert that you think might be false, this page recommends that you upload it to VirusTotal -- https://www.virustotal.com/ -- which runs the file through 56 different antivirus programs, including Avira. I just ran demo.exe through VirusTotal, and it came up with a score of 0/56 -- out of the 56 antivirus programs in VirusTotal, none of them found a virus in demo.exe.

AV-Comparatives has done a comparison report on antivirus programs -- http://www.av-comparatives.org/wp-conte ... 503_en.pdf -- Avira has one of the highest rates of detecting true viruses (page 6) but also a high rate of false positives (page 8).
User avatar
srvet_claudio
Posts: 2193
Joined: Thu Feb 25, 2010 8:43 pm
Location: Uruguay
Contact:

Re: Status of source code changes suggested in November 2014

Post by srvet_claudio »

kcarmody wrote:
srvet_claudio wrote:
kcarmody wrote:Would you like me to develop a new proposal for the current version?
Ok, go on.
Ok, I will do this. Is there any patch to the current version other than patch 1 mentioned at viewtopic.php?p=42140#p42140?
This is the last patch: viewtopic.php?f=43&t=4400&start=160#p42442
Best regards.
Dr. Claudio Soto
(from Uruguay)
http://srvet.blogspot.com
User avatar
kcarmody
Posts: 152
Joined: Tue Oct 07, 2014 11:13 am
Contact:

Re: Status of source code changes suggested in November 2014

Post by kcarmody »

Following my discussion with Claudio earlier in this thread, I'm resubmitting the following changes, all relating to the RichEditBox control. I've developed a patch, based on Claudio's current patch (patch 6), which incorporates these changes. My patch should be installed on top of Claudio's patch.

Individual modified source files are at http://kevincarmody.com/hmg/, and a zip of files in the patch is at http://kevincarmody.com/hmg/HmgChangeProposal.zip.

This patch includes an overhauled Rich Edit demo, which uses all the source code changes (except for the SelPasteSpecial method). The new Rich Edit demo is at http://kevincarmody.com/hmg/SAMPLES/Con ... chEditBox/.

New manifest constants RTFTXTFILE_ANSI etc.

These constants are RTF and TXT file types returned by the new function GetRtfTxtFileType() and can be used by the RtfTxtLoadFile and RtfTxtSaveFile methods of the RichEditBox control.

http://kevincarmody.com/hmg/INCLUDE/i_richeditbox.ch - lines 161-169

Code: Select all

// Following 5 #defines added by Kevin Carmody, September 2015

*****************
*   File type   *
*****************

#define RTFTXTFILE_ANSI      1   // ANSI text file
#define RTFTXTFILE_UTF8      2   // UTF-8 text file
#define RTFTXTFILE_UTF16LE   3   // UTF-16 LE (little endian) text file
#define RTFTXTFILE_RTF       4   // RTF file
#define RTFTXTFILE_UTF16BE   5   // UTF-16 BE (big endian) text file
These constants are also used in the Rich Edit demo - http://kevincarmody.com/hmg/SAMPLES/Con ... x/demo.prg - lines 883-904 and lines 976-992.

New function GetRtfTxtFileType( cFile, lUtf8Test ) --> nFileType

This function returns a file type (RTF, ANSI, UTF-16, UTF-8) which can be used in RtfTxtLoadFile and RtfTxtSaveFile methods of RichEditBox control.

http://kevincarmody.com/hmg/SOURCE/h_richeditbox.prg - lines 52, 512-578

Code: Select all

// Following line added by Kevin Carmody, September 2015
#include "fileio.ch"

Code: Select all

// Following function added by Kevin Carmody, September 2015

*-----------------------------------------------------------------------------*
FUNCTION GetRtfTxtFileType ( cFile, lUtf8Test )
*-----------------------------------------------------------------------------*

LOCAL hFile    := FOPEN( cFile, FO_READ )
LOCAL cBuffer  := SPACE( 5 )
LOCAL nBufRead := 0
LOCAL nType    := 0

/*
  The following code block tests for the presence of non-ASCII characters in 
  an unmarked text file.  It assumes that such characters may be ANSI or 
  parts of UTF-8 sequences.  In UTF-8 mode, Windows reads bytes which are not 
  part of a valid UTF-8 sequence as ANSI.  It would be better to know if the 
  file contained UTF-8 sequences for non-ANSI characters, but since some ANSI 
  characters are not in the Latin-1 Supplement, testing for non-ANSI UTF-8 
  sequences is inefficient for large files.
*/

LOCAL bHasUnicodeChars := {||
   LOCAL lHasUnicode := .N.
   LOCAL cChar, cStr
   cBuffer  := SPACE( 0x400 )
   nBufRead := 1
   BEGIN SEQUENCE
      WHILE nBufRead > 0
         nBufRead := FREAD( hFile, @cBuffer, 0x400 )
         IF nBufRead > 0
            cStr := LEFT( cBuffer, nBufRead )
            FOR EACH cChar IN cStr
               IF cChar >= CHR(0x80)
                  lHasUnicode := .Y.
                  BREAK
               ENDIF
            NEXT
         ENDIF
      ENDDO
   END SEQUENCE
   RETURN lHasUnicode
   }

BEGIN SEQUENCE

   IF hFile < 0
      BREAK
   ENDIF
   nBufRead := FREAD( hFile, @cBuffer, 5 )
   DO CASE
   CASE nBufRead >= 5 .AND. LEFT( cBuffer, 5 ) == "{\rtf"
      nType := RTFTXTFILE_RTF
   CASE nBufRead >= 3 .AND. LEFT( cBuffer, 3 ) == E"\xEF\xBB\xBF"
      nType := RTFTXTFILE_UTF8
   CASE nBufRead >= 2 .AND. LEFT( cBuffer, 2 ) == E"\xFF\xFE"
      nType := RTFTXTFILE_UTF16LE
   CASE nBufRead >= 2 .AND. LEFT( cBuffer, 2 ) == E"\xFE\xFF"
      nType := RTFTXTFILE_UTF16BE
   CASE ! EMPTY( lUtf8Test ) .AND. bHasUnicodeChars:EVAL( )
      nType := RTFTXTFILE_UTF8
   OTHERWISE
      nType := RTFTXTFILE_ANSI
   ENDCASE

END SEQUENCE

FCLOSE( hFile )

RETURN nType
This function is used in http://kevincarmody.com/hmg/SAMPLES/Con ... x/demo.prg - line 880

Code: Select all

   LOCAL nFormat        := GETRTFTXTFILETYPE(cFileName, .Y.)
New function Utf16ByteSwap( cInFile, cOutFile )

This function supports the UTF-16 BE (big endian) file type for the RtfTxtLoadFile and RtfTxtSaveFile methods of RichEditBox control.

http://kevincarmody.com/hmg/SOURCE/h_richeditbox.prg - lines 52, 583-623

Code: Select all

// Following line added by Kevin Carmody, September 2015
#include "fileio.ch"

Code: Select all

// Following function added by Kevin Carmody, September 2015

*-----------------------------------------------------------------------------*
FUNCTION Utf16ByteSwap( cInFile, cOutFile )
*-----------------------------------------------------------------------------*

LOCAL hInFile   := FOPEN( cInFile , FO_READ )
LOCAL hOutFile  := FCREATE( cOutFile )
LOCAL cInBuffer := SPACE( 0x400 )
LOCAL nBufRead  := 1
LOCAL lSuccess  := .N.
LOCAL cOutBuffer, cBytePair, nBufWrite, nByte

BEGIN SEQUENCE

   IF hInFile < 0
      BREAK
   ENDIF
   IF hOutFile < 0
      BREAK
   ENDIF
   WHILE nBufRead > 0
      cOutBuffer := ""
      nBufRead   := FREAD( hInFile, @cInBuffer, 0x400 )
      IF nBufRead > 0
         FOR nByte := 1 TO nBufRead STEP 2
            cBytePair  := SUBSTR( cInBuffer, nByte, 2 )
            cOutBuffer += RIGHT( cBytePair, 1 ) + LEFT( cBytePair, 1 )
         NEXT
         nBufWrite := FWRITE( hOutFile, cOutBuffer )
         IF nBufWrite < nBufRead
            BREAK
         ENDIF
      ENDIF
   ENDDO
   lSuccess := .Y.
    
END SEQUENCE

FCLOSE( hInFile )
FCLOSE( hOutFile )

RETURN lSuccess
This function is used in RichEditBox_RtfTxtLoadFile() and RichEditBox_RtfTxtSaveFile() - see below.

Fixed RichEditBox_StreamIn( hWndControl, cFileName, lSelection, nDataFormat ) --> lSuccess

This function now skips over a byte order mark (BOM) in a Unicode text file if one is present.

http://kevincarmody.com/hmg/SOURCE/c_richeditbox.c - lines 190-192, 199-203, 216-233

Code: Select all

//        RichEditBox_StreamIn ( hWndControl, cFileName, lSelection, nDataFormat ) --> return lSuccess
HB_FUNC ( RICHEDITBOX_STREAMIN )
{
   HWND       hWndControl = (HWND)   HMG_parnl (1);
   TCHAR     *cFileName   = (TCHAR*) HMG_parc (2);
   BOOL       lSelection  = (BOOL)   hb_parl  (3);
   LONG       nDataFormat = (LONG)   hb_parnl (4);
   HANDLE     hFile;
   // Following 3 lines added by Kevin Carmody, September 2015
   BYTE       bUtf8Bom[3]; 
   BYTE       bUtf16Bom[2]; 
   DWORD      dwRead;
   EDITSTREAM es;
   LONG       Format;

   switch( nDataFormat )
   {
   // Comments in this switch block modified by Kevin Carmody, September 2015
      case 1:   Format = SF_TEXT; break; // ANSI or UTF-8 with BOM or mixed (UTF-8 BOM removed, overlong UTF-8 accepted, invalid UTF-8 read as ANSI)
      case 2:   Format = ( CP_UTF8 << 16 ) | SF_USECODEPAGE | SF_TEXT; break; // UTF-8 without BOM (BOM not removed)
      case 3:   Format = SF_TEXT | SF_UNICODE; break; // UTF-16 LE without BOM (BOM not removed)
      case 4:   Format = SF_RTF;  break;
      // case 5, UTF-8 RTF, removed by Kevin Carmody, September 2015, because it can never occur
      default:  Format = SF_RTF; break;
   }

   if ( lSelection )
        Format = Format | SFF_SELECTION;

   if( ( hFile = CreateFile (cFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL )) == INVALID_HANDLE_VALUE )
   {   hb_retl (FALSE);
       return;
   }

   // Following switch block added by Kevin Carmody, September 2015
   switch( nDataFormat )
   {
      case 1:   break;
      case 2:   
         if ( ! ReadFile (hFile, bUtf8Bom, 3, &dwRead, NULL) ) // read past BOM if present
            hb_retl (FALSE);
         if ( ! ( dwRead == 3 && bUtf8Bom[0] == 0xEF && bUtf8Bom[1] == 0xBB && bUtf8Bom[2] == 0xBF ) )
            SetFilePointer (hFile, 0, 0, FILE_BEGIN);
         break;
      case 3:
         if ( ! ReadFile (hFile, bUtf16Bom, 2, &dwRead, NULL) ) // read past BOM if present
            hb_retl (FALSE);
         if ( ! ( dwRead == 2 && bUtf16Bom[0] == 0xFF && bUtf16Bom[1] == 0xFE ) )
            SetFilePointer (hFile, 0, 0, FILE_BEGIN);
         break;
      case 4:   break;
      default:  break;
   }
   es.pfnCallback = EditStreamCallbackRead;
   es.dwCookie    = (DWORD_PTR) hFile;
   es.dwError     = 0;

   SendMessage ( hWndControl, EM_STREAMIN, (WPARAM) Format, (LPARAM) &es );

   CloseHandle (hFile);

   if( es.dwError )
      hb_retl (FALSE);
   else
      hb_retl (TRUE);
}
This function is called by RichEditBox_RtfTxtLoadFile() - see below.

Fixed RichEditBox_StreamOut( hWndControl, cFileName, lSelection, nDataFormat ) --> lSuccess

This function now writes a byte order mark (BOM) to a Unicode text file.

http://kevincarmody.com/hmg/SOURCE/c_richeditbox.c - lines 269-271, 278-282, 295-302

Code: Select all

//        RichEditBox_StreamOut ( hWndControl, cFileName, lSelection, nDataFormat ) --> return lSuccess
HB_FUNC ( RICHEDITBOX_STREAMOUT )
{
   HWND       hWndControl = (HWND)   HMG_parnl (1);
   TCHAR     *cFileName   = (TCHAR*) HMG_parc (2);
   BOOL       lSelection  = (BOOL)   hb_parl  (3);
   LONG       nDataFormat = (LONG)   hb_parnl (4);
   HANDLE     hFile;
   // Following 3 lines added by Kevin Carmody, September 2015
   BYTE       bUtf8Bom[3]  = {0xEF, 0xBB, 0xBF};
   BYTE       bUtf16Bom[2] = {0xFF, 0xFE}; 
   DWORD      dwWritten;
   EDITSTREAM es;
   LONG       Format;

   switch( nDataFormat )
   {
   // Comments in this switch block modified by Kevin Carmody, September 2015
      case 1:   Format = SF_TEXT; break; // ANSI (non-ANSI characters converted to question marks)
      case 2:   Format = ( CP_UTF8 << 16 ) | SF_USECODEPAGE | SF_TEXT; break; // UTF-8 without BOM
      case 3:   Format = SF_TEXT | SF_UNICODE; break; // UTF-16 LE without BOM
      case 4:   Format = SF_RTF;  break;
      // case 5, UTF-8 RTF, removed by Kevin Carmody, September 2015, because it can never occur
      default:  Format = SF_RTF; break;
   }

   if ( lSelection )
        Format = Format | SFF_SELECTION;

   if( ( hFile = CreateFile (cFileName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL )) == INVALID_HANDLE_VALUE )
   {   hb_retl (FALSE);
       return;
   }

   // Following switch block added by Kevin Carmody, September 2015
   switch( nDataFormat )
   {
      case 1:   break;
      case 2:   WriteFile( hFile, bUtf8Bom, 3, &dwWritten, NULL ); break; // write UTF-8 BOM at head of file
      case 3:   WriteFile( hFile, bUtf16Bom, 2, &dwWritten, NULL ); break; // write UTF-16 LE BOM at head of file
      case 4:   break;
      default:  break;
   }
   es.pfnCallback = EditStreamCallbackWrite;
   es.dwCookie    = (DWORD_PTR) hFile;
   es.dwError     = 0;

   SendMessage ( hWndControl, EM_STREAMOUT, (WPARAM) Format, (LPARAM) &es );
   
   CloseHandle (hFile);

   if( es.dwError )
      hb_retl (FALSE);
   else
      hb_retl (TRUE);
}
This function is used in RichEditBox_RtfTxtSaveFile() - see below.

New RichEditBox property HasUnicodeChars (read only)

This property detects whether a rich edit control contains non-ASCII Unicode characters.

http://kevincarmody.com/hmg/SOURCE/h_controlmisc.prg - lines 10266-10268, at end of _RichEditBox_GetProperty()

Code: Select all

   // Following case added by Kevin Carmody, September 2015
   CASE Arg3 == "HASUNICODECHARS"
        xData  := RichEditBox_HasUnicodeChars ( hWndControl )
        RetVal := .T.
http://kevincarmody.com/hmg/INCLUDE/i_window.ch - line 164

Code: Select all

;; // Following line modified by Kevin Carmody, September 2015
#xtranslate <w>. \<c\> . \<p:RTFTextMode,AutoURLDetect,Zoom,SelectRange,CaretPos,Value,GetSelectText,GetTextLength,ViewRect,HasUnicodeChars\> => GetProperty ( <"w">, \<"c"\> , \<"p"\> ) ;;
http://kevincarmody.com/hmg/SOURCE/h_richeditbox.prg - lines 418-440

Code: Select all

// Following function added by Kevin Carmody, September 2015

/*
  The following function tests for the presence of non-ASCII characters in 
  a rich edit control.  It would be better to know if the control contained
  non-ANSI characters, but since some ANSI characters are not in the Latin-1 
  Supplement, testing for non-ANSI characters is inefficient for large 
  documents.
*/

*-----------------------------------------------------------------------------*
FUNCTION RichEditBox_HasUnicodeChars( hWndControl )
*-----------------------------------------------------------------------------*

LOCAL cBuffer     := RichEditBox_GetText( hWndControl , .N. )
LOCAL lHasUnicode := .N.
LOCAL cChar

FOR EACH cChar IN cBuffer
   IF cChar >= CHR(0x80)
      lHasUnicode := .Y.
   ENDIF
NEXT

RETURN lHasUnicode
This function is used in http://kevincarmody.com/hmg/SAMPLES/Con ... x/demo.prg - line 945

Code: Select all

   LOCAL lUnicode := wMain.ebDoc.HASUNICODECHARS
New RichEditBox method RtfTxtLoadFile( cFile, lSelection, nType ) --> lSuccess

This method is a synonym for the RtfLoadFile method. It now uses the file type returned by GetRtfTxtFileType(). It skips over a byte order mark in a Unicode text file, and it supports UTF-16 BE (big endian Unicode text file).

http://kevincarmody.com/hmg/SOURCE/h_controlmisc.prg - lines 10440-10442

Code: Select all

   // Following case modified by Kevin Carmody, September 2015
   CASE Arg3 == "RTFLOADFILE" .OR. Arg3 == "RTFTXTLOADFILE"
        xData := RichEditBox_RtfTxtLoadFile ( hWndControl, Arg4, Arg5, Arg6 )   // by default save in SF_RTF format
        RetVal := .T.
http://kevincarmody.com/hmg/INCLUDE/i_window.ch - lines 172-173, 175

Code: Select all

;; // Following 2 lines modified by Kevin Carmody, September 2015
#xtranslate <w>. \<c\> . \<p:RTFLoadFile,RTFSaveFile,RtfTxtLoadFile,RtfTxtSaveFile\> (\<arg1\>,\<arg2\>,\<arg3\>) => DoMethod ( <"w">, \<"c"\> , \<"p"\> , \<arg1\> , \<arg2\>, \<arg3\> ) ;;
#xtranslate <w>. \<c\> . \<p:RTFLoadFile,RTFSaveFile,RtfTxtLoadFile,RtfTxtSaveFile\> (\<arg1\>,\<arg2\>) => DoMethod ( <"w">, \<"c"\> , \<"p"\> , \<arg1\> , \<arg2\> ) ;;
;; // Following line added by Kevin Carmody, September 2015
#xtranslate <w>. \<c\> . \<p:RTFLoadFile,RTFSaveFile,RtfTxtLoadFile,RtfTxtSaveFile\> (\<arg1\>) => DoMethod ( <"w">, \<"c"\> , \<"p"\> , \<arg1\> ) ;;
http://kevincarmody.com/hmg/SOURCE/h_richeditbox.prg - lines 445-477

Code: Select all

// Following function added by Kevin Carmody, September 2015

*-----------------------------------------------------------------------------*
FUNCTION RichEditBox_RtfTxtLoadFile( hWndControl, cFile, lSelection, nType )
*-----------------------------------------------------------------------------*

LOCAL lSuccess := .N.
LOCAL cTempFile

IF ! HB_ISLOGICAL( lSelection )
   lSelection := .N.
ENDIF
IF ! HB_ISNUMERIC( nType )
   nType := RTFTXTFILE_RTF
ENDIF

IF lSelection
   RichEditBox_UnSelectAll( hWndControl )
ENDIF
IF RichEditBox_RTFLoadResourceFile( hWndControl, cFile, lSelection )
   lSuccess := .T.
ELSE
   IF nType == RTFTXTFILE_UTF16BE
      cTempFile := GETTEMPFOLDER() + "_RtfTxtLoadFile.txt"
      lSuccess  := Utf16ByteSwap( cFile, cTempFile )
      IF lSuccess
         lSuccess := RichEditBox_StreamIn( hWndControl, cTempFile, lSelection, RTFTXTFILE_UTF16LE )
      ENDIF
      DELETE FILE ( cTempFile )
   ELSE
      lSuccess := RichEditBox_StreamIn( hWndControl, cFile, lSelection, nType )
   ENDIF
ENDIF

RETURN lSuccess
This method is used in http://kevincarmody.com/hmg/SAMPLES/Con ... x/demo.prg - line 906

Code: Select all

      IF ! wMain.ebDoc.RTFTXTLOADFILE(cFileName, .N., nFormat)
New RichEditBox method RtfTxtSaveFile( cFile, lSelection, nType ) --> lSuccess

This method is a synonym for the RtfSaveFile method. It now uses the file type returned by GetRtfTxtFileType(), writes a byte order mark to a Unicode text file, and supports UTF-16 BE (big endian Unicode text file).

http://kevincarmody.com/hmg/SOURCE/h_controlmisc.prg - lines 10445-10447

Code: Select all

   // Following case modified by Kevin Carmody, September 2015
   CASE Arg3 == "RTFSAVEFILE" .OR. Arg3 == "RTFTXTSAVEFILE"
        xData := RichEditBox_RtfTxtSaveFile ( hWndControl, Arg4, Arg5, Arg6 )   // by default save in SF_RTF format
        RetVal := .T.
http://kevincarmody.com/hmg/INCLUDE/i_window.ch - lines 172-173, 175

Code: Select all

;; // Following 2 lines modified by Kevin Carmody, September 2015
#xtranslate <w>. \<c\> . \<p:RTFLoadFile,RTFSaveFile,RtfTxtLoadFile,RtfTxtSaveFile\> (\<arg1\>,\<arg2\>,\<arg3\>) => DoMethod ( <"w">, \<"c"\> , \<"p"\> , \<arg1\> , \<arg2\>, \<arg3\> ) ;;
#xtranslate <w>. \<c\> . \<p:RTFLoadFile,RTFSaveFile,RtfTxtLoadFile,RtfTxtSaveFile\> (\<arg1\>,\<arg2\>) => DoMethod ( <"w">, \<"c"\> , \<"p"\> , \<arg1\> , \<arg2\> ) ;;
;; // Following line added by Kevin Carmody, September 2015
#xtranslate <w>. \<c\> . \<p:RTFLoadFile,RTFSaveFile,RtfTxtLoadFile,RtfTxtSaveFile\> (\<arg1\>) => DoMethod ( <"w">, \<"c"\> , \<"p"\> , \<arg1\> ) ;;
http://kevincarmody.com/hmg/SOURCE/h_richeditbox.prg - lines 482-507

Code: Select all

// Following function added by Kevin Carmody, September 2015

*-----------------------------------------------------------------------------*
FUNCTION RichEditBox_RtfTxtSaveFile( hWndControl, cFile, lSelection, nType )
*-----------------------------------------------------------------------------*

LOCAL lSuccess := .N.
LOCAL cTempFile

IF ! HB_ISLOGICAL( lSelection )
   lSelection := .N.
ENDIF
IF ! HB_ISNUMERIC( nType )
   nType := RTFTXTFILE_RTF
ENDIF

IF nType == RTFTXTFILE_UTF16BE
   cTempFile := GETTEMPFOLDER() + "_RtfTxtLoadFile.txt"
   lSuccess := RichEditBox_StreamOut( hWndControl, cTempFile, lSelection, RTFTXTFILE_UTF16LE )
   IF lSuccess
      lSuccess  := Utf16ByteSwap( cTempFile, cFile )
   ENDIF
   DELETE FILE ( cTempFile )
ELSE
   lSuccess := RichEditBox_StreamOut( hWndControl, cFile, lSelection, nType )
ENDIF

RETURN lSuccess
This method is used in http://kevincarmody.com/hmg/SAMPLES/Con ... x/demo.prg - line 993

Code: Select all

      IF ! wMain.ebDoc.RTFTXTSAVEFILE(cFileName, .N., nFormat)
New RichEditBox method SelPasteSpecial

Paste special - needs documentation of clipboard format argument.

http://kevincarmody.com/hmg/SOURCE/h_controlmisc.prg - lines 10458-10460

Code: Select all

   // Following case added by Kevin Carmody, September 2015
   CASE Arg3 == HMG_UPPER ("SelPasteSpecial")
        RichEditBox_PasteSpecial ( hWndControl, Arg4 )
        RetVal := .T.
http://kevincarmody.com/hmg/INCLUDE/i_window.ch - line 179

Code: Select all

;; // Following line added by Kevin Carmody, September 2015
#xtranslate <w>. \<c\> . \<p:SelPasteSpecial\> (\<arg1\>) => DoMethod ( <"w">, \<"c"\> , \<"p"\> , \<arg1\> ) ;;
This method is not used in the Rich Edit demo.

Enhanced RichEditBox method RtfLoadFile( cFile, lSelection, nType ) --> lSuccess

This method is a synonym for the RtfTxtLoadFile method described above.

http://kevincarmody.com/hmg/SOURCE/h_controlmisc.prg - lines 10440-10442

Code: Select all

   // Following case modified by Kevin Carmody, September 2015
   CASE Arg3 == "RTFLOADFILE" .OR. Arg3 == "RTFTXTLOADFILE"
        xData := RichEditBox_RtfTxtLoadFile ( hWndControl, Arg4, Arg5, Arg6 )   // by default save in SF_RTF format
        RetVal := .T.
http://kevincarmody.com/hmg/INCLUDE/i_window.ch - lines 172-173, 175

Code: Select all

;; // Following 2 lines modified by Kevin Carmody, September 2015
#xtranslate <w>. \<c\> . \<p:RTFLoadFile,RTFSaveFile,RtfTxtLoadFile,RtfTxtSaveFile\> (\<arg1\>,\<arg2\>,\<arg3\>) => DoMethod ( <"w">, \<"c"\> , \<"p"\> , \<arg1\> , \<arg2\>, \<arg3\> ) ;;
#xtranslate <w>. \<c\> . \<p:RTFLoadFile,RTFSaveFile,RtfTxtLoadFile,RtfTxtSaveFile\> (\<arg1\>,\<arg2\>) => DoMethod ( <"w">, \<"c"\> , \<"p"\> , \<arg1\> , \<arg2\> ) ;;
;; // Following line added by Kevin Carmody, September 2015
#xtranslate <w>. \<c\> . \<p:RTFLoadFile,RTFSaveFile,RtfTxtLoadFile,RtfTxtSaveFile\> (\<arg1\>) => DoMethod ( <"w">, \<"c"\> , \<"p"\> , \<arg1\> ) ;;
This method is not used in the Rich Edit demo.

Enhanced RichEditBox method RtfSaveFile( cFile, lSelection, nType ) --> lSuccess

This method is a synonym for the RtfTxtSaveFile method described above.

http://kevincarmody.com/hmg/SOURCE/h_controlmisc.prg - lines 10445-10447

Code: Select all

   // Following case modified by Kevin Carmody, September 2015
   CASE Arg3 == "RTFSAVEFILE" .OR. Arg3 == "RTFTXTSAVEFILE"
        xData := RichEditBox_RtfTxtSaveFile ( hWndControl, Arg4, Arg5, Arg6 )   // by default save in SF_RTF format
        RetVal := .T.
http://kevincarmody.com/hmg/INCLUDE/i_window.ch - lines 172-173, 175

Code: Select all

// Following 2 lines modified by Kevin Carmody, September 2015
#xtranslate <w>. \<c\> . \<p:RTFLoadFile,RTFSaveFile,RtfTxtLoadFile,RtfTxtSaveFile\> (\<arg1\>,\<arg2\>,\<arg3\>) => DoMethod ( <"w">, \<"c"\> , \<"p"\> , \<arg1\> , \<arg2\>, \<arg3\> ) ;;
#xtranslate <w>. \<c\> . \<p:RTFLoadFile,RTFSaveFile,RtfTxtLoadFile,RtfTxtSaveFile\> (\<arg1\>,\<arg2\>) => DoMethod ( <"w">, \<"c"\> , \<"p"\> , \<arg1\> , \<arg2\> ) ;;
// Following line added by Kevin Carmody, September 2015
#xtranslate <w>. \<c\> . \<p:RTFLoadFile,RTFSaveFile,RtfTxtLoadFile,RtfTxtSaveFile\> (\<arg1\>) => DoMethod ( <"w">, \<"c"\> , \<"p"\> , \<arg1\> ) ;;
This method is not used in the Rich Edit demo.

Enhanced function DoMethod ( Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9 )

Enabled this function to return a value from a RichEditBox method.

http://kevincarmody.com/hmg/SOURCE/h_controlmisc.prg - line 8869

Code: Select all

Function DoMethod ( Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9 )
// Following line modified by Kevin Carmody, September 2015
Local xData, i, hWnd
http://kevincarmody.com/hmg/SOURCE/h_controlmisc.prg - lines 8881-8882

Code: Select all

// Following 2 lines modified by Kevin Carmody, September 2015
IF _RichEditBox_DoMethod ( @xData, Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9 ) == .T.
   Return xData
ENDIF
http://kevincarmody.com/hmg/SOURCE/h_controlmisc.prg - line 10416

Code: Select all

// Following line modified by Kevin Carmody, September 2015
Function _RichEditBox_DoMethod ( xData, Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9 )
The return value is used in http://kevincarmody.com/hmg/SAMPLES/Con ... x/demo.prg - lines 906

Code: Select all

      IF ! wMain.ebDoc.RTFTXTLOADFILE(cFileName, .N., nFormat)
The return value is used in http://kevincarmody.com/hmg/SAMPLES/Con ... x/demo.prg - lines 993

Code: Select all

      IF ! wMain.ebDoc.RTFTXTSAVEFILE(cFileName, .N., nFormat)
User avatar
srvet_claudio
Posts: 2193
Joined: Thu Feb 25, 2010 8:43 pm
Location: Uruguay
Contact:

Re: Status of source code changes suggested in November 2014

Post by srvet_claudio »

Thanks Kevin,
I will include this changes in the new release.
Best regards.
Dr. Claudio Soto
(from Uruguay)
http://srvet.blogspot.com
User avatar
kcarmody
Posts: 152
Joined: Tue Oct 07, 2014 11:13 am
Contact:

Re: Status of source code changes suggested in November 2014

Post by kcarmody »

srvet_claudio wrote:Thanks Kevin,
I will include this changes in the new release.
Thanks Claudio :)
Post Reply