• Welcome to PlanetSquires Forums.
 

WinFBE on GitHub (July 9, 2016)

Started by Paul Squires, July 09, 2016, 01:42:02 AM

Previous topic - Next topic

Paul Squires

New code in GitHub repository July 9, 2016.

Many changes in the editor. Too many to remember and list here.

- Fixed "Find Next" (F3)
- Added "General Options" in "Environment Options"
- Added "Close Function List on selection" option
- Added "Close Project Manager on selection" option
- Eliminated several areas that contributed to visual flickering in the editor
- Function List now shows sub/function names in sorted order







Paul Squires
PlanetSquires Software
WinFBE Editor and Visual Designer

José Roca

Suggestion: It is customary to allow navigation between tabs with Ctrl+W.

Paul Squires

Quote from: Jose Roca on July 09, 2016, 02:08:07 AM
Suggestion: It is customary to allow navigation between tabs with Ctrl+W.

Sounds good. I will put that in there.
Paul Squires
PlanetSquires Software
WinFBE Editor and Visual Designer

Paul Squires

Fixed column editing mode by activating SCI_SETADDITIONALSELECTIONTYPING for each document. Now when you select a column and start to type, the characters will apply to all rows in the column.
Paul Squires
PlanetSquires Software
WinFBE Editor and Visual Designer

Paul Squires

Quote from: TechSupport on July 09, 2016, 02:24:49 AM
Quote from: Jose Roca on July 09, 2016, 02:08:07 AM
Suggestion: It is customary to allow navigation between tabs with Ctrl+W.

Sounds good. I will put that in there.

I am looking at https://en.wikipedia.org/wiki/Table_of_keyboard_shortcuts and under "Tab management" for Windows it lists:

Ctrl+W:  Close current tab

Ctrl+Tab:  Go to next tab

Ctrl+Shift+Tab:  Go to previous tab

Do those key combinations look okay?
Paul Squires
PlanetSquires Software
WinFBE Editor and Visual Designer

José Roca

Yes.

BTW the editor sometimes GPFs after changing an option and clicking the OK button. This time it has happened changing the charset. But it is not consistent, sometimes GPFs and sometimes not.

José Roca

Another suggestion. In CSED I added an image list to the tab control with a red "x" icon. If you click on it, the tab is closed. More handy than the right click menu when you only want to close individual tabs. You may need two sizes for the icons, 16 and 32 pixels, because 16 pixels is too small with higher DPI settings.


José Roca

This is progressing very well. A good editor and a very lightweight class to deal with BSTRs that works with the FB itntrinsic operators and can also be used with the Windows API functions. With the addition of a string builder class to add speed, we don't need to ask for a native implementation anymore, although it will be very welcome if it comes.

I will add to the wrappers some functions that return strings and that I have been avoiding until now.

Also I have plans for new separate include files for date and time functions, CD ROM, Shell, File System, operating system, etc., and the Ole Container.


José Roca

Forgot it: I also need a class for variants.

Paul Squires

Quote from: Jose Roca on July 09, 2016, 03:45:00 AM
BTW the editor sometimes GPFs after changing an option and clicking the OK button. This time it has happened changing the charset. But it is not consistent, sometimes GPFs and sometimes not.

Thanks Jose, is it the 64 bit version of the EXE that you are experiencing this problem with, or both?
Paul Squires
PlanetSquires Software
WinFBE Editor and Visual Designer

Paul Squires

Quote from: TechSupport on July 09, 2016, 02:41:54 AM
Ctrl+W:  Close current tab

Ctrl+Tab:  Go to next tab

Ctrl+Shift+Tab:  Go to previous tab

This has now been implemented. New code in repository.
Also, added saving and restoring of bookmarks for each document in a project.
Paul Squires
PlanetSquires Software
WinFBE Editor and Visual Designer

Paul Squires

Quote from: Jose Roca on July 09, 2016, 04:01:50 AM
This is progressing very well. A good editor and a very lightweight class to deal with BSTRs that works with the FB itntrinsic operators and can also be used with the Windows API functions. With the addition of a string builder class to add speed, we don't need to ask for a native implementation anymore, although it will be very welcome if it comes.

As soon as I hear that the class is now okay to be used in production code, I will start converting WSTRING code in the editor to use CBSTR.
Paul Squires
PlanetSquires Software
WinFBE Editor and Visual Designer

Paul Squires

New code added:

- Close icons in the top tabcontrol tabs. Uses the same red close "X" icon from Jose's CSED editor.
Paul Squires
PlanetSquires Software
WinFBE Editor and Visual Designer

Paul Squires

New code added:

- Project Options dialog. Added another textbox for Other Compiler Options 64 bit. Now you can have different compiler option switches for both 32 and 64 bit compilers. Very useful if using the "-x" switch that allows you to save resulting compiled file under a specific name.
Paul Squires
PlanetSquires Software
WinFBE Editor and Visual Designer

José Roca

Quote
As soon as I hear that the class is now okay to be used in production code, I will start converting WSTRING code in the editor to use CBSTR.

The class has become very simple. Instead of trying to do the allocations/deallocations in the code of the class, which can cause memory leaks for not freeing temporary strings, it delegates the task to the compiler. The class simply stores the resulting string provided by the compiler in a BSTR and returns a pointer to the string data when the compiler asks for it. Therefore, the temporary strings are allocated and freed by the compiler.

The only code that has an infinitesimal possibility to fail is:


OPERATOR CBStr.Let (BYREF bstrHandle AS AFX_BSTR)
   IF bstrHandle = NULL THEN EXIT OPERATOR
   ' Free the current OLE string
   IF m_bstr THEN SysFreeString(m_bstr)
   ' Detect if the passed handle is an OLE string.
   ' If it is an OLE string it must have a descriptor; otherwise, don't.
   ' Get the length in bytes looking at the descriptor and divide by 2 to get the number of
   ' unicode characters, that is the value returned by the FreeBASIC LEN operator.
   DIM res AS DWORD = PEEK(DWORD, CAST(ANY PTR, bstrHandle) - 4) \ 2
   ' If the retrieved length is the same that the returned by LEN, then it must be an OLE string
   IF res = .LEN(*bstrHandle) THEN
      ' Attach the passed handle to the class
      m_bstr = bstrHandle
   ELSE
      ' Allocate an OLE string with the contents of the string pointed by bstrHandle
      m_bstr = SysAllocString(*bstrHandle)
   END IF
END OPERATOR


As the compiler does not support BSTRs natively, it has no way to know if the pointer is a BSTR or a WSTRING. Therefore, we can't have an overloaded function for BSTR and another for WSTRINGs. Even if I have used BYREF bstrHandle AS AFX_BSTR, the passed pointer can be a BSTR or a WSTRING.

To ascertain it, I peek the value of the prefix dword, that in the case of a BSTR contains the length in bytes of the string data, and compare it with the length of the string data. In the case of a WSTRING these four bytes before the string data will likely contain garbage and what are the odds that this value will coincide exactly with the length of the string?