# Changelog

## Version 3.3.7

Fixed move problem in OS X

- Removed a setenv statement in main.cpp which told Qt to use native windows for OS X which a long time ago sounded like a good idea.
- Changed the tooltip in dockwidget.cpp to be much shorter and removed the duration limit for the tooltip.

## Version 3.3.6

Changed many things, biggest change was gdb.cpp

- Commented out the QSemaphore actions in debugger.cpp Now ebe uses no semaphores.
- Created a DockWidget subclass of QDockwidget to centralize adding and controlling tooltips and managing moving/resizing.
- Added a border of light gray to the "resize grip". It seemed to be 1 pixel wide on OS X. This helped with moving/resizing.
- Added a tooltip to DockWidgets to tell how to move and resize.
- The tooltip was lengthy so it is limited to 4 seconds.
- Added code to gdb.cpp and lldb.cpp to determine the process id of the program being debugged to allow the mainwindow to kill the process if it has the debug handler stuck.
- Added code to mainwindow.cpp the handle the Kill operation using the kill system call with SIGKILL to kill the process being debugged. This is followed by signaling the debug handler to send a "nextinstruction" command. This had to be done twice to make it work properly on OS X.
- Added code to mainwindow.cpp in the Kill operation to tell the sourceframe to clear the next line.
- Added code to floatwindow and frame window to set the font height and width for their tables to allow smooth font size changes.
- Made slight adjustments to eztable.cpp to calculate widths better when changing the font size for a table.
- Changed the size calculation for the width of the line number column in the editor so that it maintains nicely spaced through a wide range of font sizes.
- Changed gdb.cpp to quit using the machine interface and to read directly rather than using a reader thread. Now it reads in a loop until the gdb prompt is received and the process has paused. The prompt now has a new-line in it so that part of the prompt can be one trigger for ending the loop. After the 2 conditions are met, the code reads until there is no more data available. There are numerous small changes related to the formatting differences between the interactive gdb interface and the machine interface.

## Version 3.3.5

Worked on dockwidgets and changing directory

- Changed dockwidgets to allow moving to left, right, top and bottom
- Changed dockwidget drag tooltip to only show in the titlebar
- Added code to install_ebe.sh to create a Desktop ebe script on OS X This script has a -d option to tell ebe to retain any directory changes.
- Added code in mainwindow.cpp to write the new diretory to ~/.ebe_last_directory if the -d option was given when ebe started
- Added code in main.cpp to process -d option if present

## Version 3.3.4

After downloading install_ebe.sh on OS X it is pretty natural to follow that by executing it from there. This ended up with ebe.app being with the Downloads hierarchy and caused OS X to popup confirmation messages which were annoying.

- In ebe.pro tested for OS X to produce ebe.app in either /usr/local/bin (brew) or /opt/local/bin (port)
- Changed install_ebe.sh to produce the ebe script for OS X with the proper destination directory.
- Changed install_ebe.sh to not use sudo on OS X when copying the ebe script and ebedecl to /usr/local/bin. This matches what brew does.

## Version 3.3.3

- In lldb.cpp removed reader->start() since reader is not used
- In settings.cpp changed test in __APPLE__ to Q_OS_MAC
- For ebedecl changed makefiles to generate .cpp files from bison and flex to eliminate warnings

## Version 3.3.2

- Converted QString sprintf to QString arg use to avoid warnings

## Version 3.3.1

- Changed debugger in settings.cpp to lldb for OS X. I apparently failed to copy the file from my Mac to my main computer.

## Version 3.3.0

I was forced to revert to lldb. The primary issue was that lldb-mi was no longer available as part of the Xcode command line tools for OS X.

I tried using gdb and there is now a function in ebe_install.sh which can generate a codesigning key for gdb and sign it with no use of the Keychain Access tool. That's great but gdb behaved erratically when used in a stand-alone mode.

I learned how to use Python in lldb to write a wrapper command which executes an lldb command and then prints a completion message from Python. This made coding using lldb simpler.

Dock widgets were very difficult to use in OS X. I made the border width 5 to make the resizing work nicely. Still the moving was hazardous, so I added a tooltip to try to help. This is probably a QT issue.

lldb.cpp

- Changed lldb.cpp to use lldb instead of lldb-mi.
- Changed LLDB object to the owned by the lldb thread. Previously the lldb actions were all done in the GUI thread.
- Wrote wrapper.py to make a new wrap command which issues an lldb command and then writes "LLDB DONE" when the command completes.
- Added wrapper.py to the src directory and added code to lldb.cpp to copy the file from ebe's internal files prior to importing wrapper.py.
- Removed the use of LLDBReaderThread. The lldb thread handles all the reading after it issues an lldb command.
- Removed the use of all but one of the semaphores. This one may be removed later since the requests to the lldb thread are queued.
- Simplified the reading code to read until "LLDB DONE" is received.

gdb.cpp

- Changed GDB object to the owned by the gdb thread. Previously the gdb
    actions were all done in the GUI thread.
- Removed the use of GDBReaderThread. The gdb thread handles all the
    reading after it issues an gdb command.
- Removed the use of all but one of the semaphores. This one may be removed later since the requests to the gdb thread are queued.
- Simplified the reading code to read until "LLDB DONE" is received.

debugger.cpp

- Changed the semaphore wrapper code to simply use acquire and release. Previously there was some complications probably due to misunderstanding how threads need to have objects moved to them.

dockwidget.cpp and dockwidget.h

- To simplify making general changes to QDockWidget implemented a DockWidget class.
- Added a 5 pixel margin to DockWidgets to make it easier to resize them in OS X. Previously it seemed that there was a 1 pixel area which needed to be clicked on to resize.
- Tried to fix a problem where DockWidgets can't be re-docked if you drag them out of the dock area. This is probably a QT problem specific to OS X.
- Tried with no success to make it easier to move DockWidgets around within the dock area. It turns out that it can be done in 2 drag operations.
- Added a tooltip suggesting how to move DockWidgets.

## Version 3.2.0

Version 3.2.0 is the first version to support using lldb-mi. There have been many problems involved with using gdb in MacOS X. Apple supports lldb, and with Xcode installed lldb-mi is installed. lldb-mi is a machine interface for lldb and makes it easier to interface with. Likewise this version switches to using the machine interface of gdb though this is a command line option and not a separate program.

There are a lot of changes. I would expect there to be some problems. Note that you can specify an earlier version, like 3.1.26, by adding the version to the invocation of install_ebe.sh. I can't suggest using an earlier version under OS X. It would be quicker to email me or use the sourceforge bug tracking to contact me. If you email me, please tell me you operating system, describe the problem and attach the code which exhibits the problem. I will look into it and, if necessary, I will install your OS in a virtual machine to find the solution.

BUG DISCOVERED ON SOME SYSTEMS

If some things are not working properly, try using

> sh install_ebe.sh 3.0.26

to install a working older version.

## Version 3.0.0

Version 3.0.0 is the first version to support the yasm struc (structure) definitions. You can change the format of a variable to one of the defined strucs in the program or use a pointer to define a new variable of a struc type. I decided to bump the version to 3.0.0 since this is a pretty significant change. I think this version is basically complete for assembly language. I'm sure there will be bug fixes and some minor changes, but nothing major is missing for assembly. C/C++ could benefit from something like IntelliSense, but I have no plans in that area -- yet.

There are quite a few changes. This seems to be pretty reliable in my testing. Please email me if ebe fails to operate properly. I would probably require your source code to diagnose what went wrong. I would like to wipe out the bugs.

## 3.2.1

- Added lldb.cpp, lldb.h, debugger.cpp and debugger.h to git
- These were really needed for 3.2.0

## 3.2.0

- Added code to use lldb-mi as a debugger (mainly for OS X)
- Added code to allow I/O redirection in command line text edit
- Added code in settings window to use a virtual terminal (/dev/ptyXX)
- Added code in settings window to select debugger

## 3.1.0

- Added Alt key shortcuts for all menu choices
- Added code to change the cursor blink rate (0 disables)

## 3.0.26

- Fixed register window to allow defining variable by address
- Fixed assembly data window to allow defining variable by address

## 3.0.22

- Copied 32x32 icons for the template bar to serve as 64x64
- Copied yasm template code into nasm template directories

## 3.0.20

- Changed ebedecl to be statically linked, since it was built with cygwin which is not distributed.

## 3.0.19

- Changed maximum size of Assembly Data Window variables to 512. With large arrays the program was too slow.

## 3.0.18

- Fixed problem with eflags showing as 0
- Removed trailing 0s from rip and eflags

## 3.0.17

- Added textEdit->repaint() to setNextLine and clearNextLine

## 3.0.16

- Moved table resize in eztable::setPlankCount to after the first loop

## 3.0.15

- Changed uLong/sLong types to long long variants
- Switched %precedence to %left in ebedecl bison file

## 3.0.14

- Fixed problem with deleting variables from asm data window
- Fixed issue with reducing the size of the asm data table
- If the asm data window has no vars, there is no contest menu

## 3.0.13

- Fixed issue with showing asm variables when using as

## 3.0.12

- Fixed stack frame format crash on empty table
- Fixed edit settings to preserve subwindow placements
- Changed to not use ebedecl with as assembler
- Fixed asm data window crash on empty table

## 3.0.11

- Skip running ebedecl when using as
- Fixed crash on right-clicking empty asm data window

## 3.0.10

- Fixed error in parsing nasm listing file

## 3.0.9

- Changed gdb "tty" command to "set inferior-tty"
- Changed settings.cpp to use nasm instead of yasm
- Changed sourceframe.cpp to parse nasm listing file syntax

## 3.0.8

- Repaired size computation for asm vars in .bss
- Repaired register format as decimal

## 3.0.6

- Repaired the stack frame window
- Ordered locals 1-4 increasing downwards
- Added scrollareas to stack frame window and float register window

## 3.0.5

- Changed from a QWebView to a QTextBrowser for Help and Library
- This should make it easier to build

## 3.0.4

- Fixed OS X menu issue, by building an app
- Moved .qm files to resources
- Modified install script to install properly
- Added 32/64 directories to src/assembly/mac

## 3.0.3

- Removed Fortran support
- Fixed hello.hal (template program)

## 3.0.2

- Eliminated fpreg error message when program is not running
- Extended time for printing gdb taking too long under Windows
- Eliminated infinite loop on stack in setValues

## 3.0.1

- Fixed unitialized variable in registerwindow.cpp
- Fixed return with no value in ebedecl/symbols.cpp
- Repaired ebedecl/Makefile to use g++ on symbols.cpp

## 3.0.0

- Support for struc expansion in assembly data window
- Fixed problem with data window changing size with memory errors

## 2.7.10

- Changed register window to recover format changes for 1 register
- Fixed variable access code to use correct frame numbers
- Fixed problem with displaying argv strings

## 2.7.9

- Added code to handle typedefs on demand
- Switched class/struct definitions to be on demand
- Fixed bugs with class/struct pointer expansion

## 2.7.8

- Worked on prettify code.
- Added prettify function for Assembly
- Skip astyle use on Fortran
- Made prettify changes part of the undo/redo stack, so a person can undo an undesirable prettify operations.

## 2.7.7

- Disabled use of astyle (prettify) for Fortran and Assembly

## 2.7.6

- Fixed problem with 1D array of simple data types

## 2.7.5

- Changed expand/collapse icons to +/-
- Implemented finalPlank function to find the last one requested
- Changed all data delivery to be by individual requests

## 2.7.4

- Implemented nearly universal install script
- Started working on Cygwin ebe. Discovered that Cygwin Qt uses X libraries and did not wish to make ebe users have to use X.
- Cygwin ebe hangs at irregular points. Apparently one of the ebe threads dies unexpectedly.

## 2.7.3

- Added support for PCBSD and hopefully a few other BSDs
- Fixed terminal window problem with PCBSD

## 2.7.2

- Changed startup test for gdb running. Now ebe should display its gui even if gdb is not running. However clicking on the Run button should popup an error message if gdb is not running.

## 2.7.1

- Fixed a highlight bug
- Data window now tracks recursive calls
- Fixed bug with reusing variables in the data window

## 2.7.0

- Implemented a custom table widget to support the data window, the assembly data window and the register windows.
- Revised a large number of library files to be proper html in order to work with Qt5.

## 2.6.0

- Changed the assenbly data window, the stack frame, the register window and the floating point window to track data changes in red.

## 2.5.8

- Updated source code in library sample programs

## 2.5.7

- Added instruction documentation for loop, rep and string instructions.

## 2.5.6

- Added instruction documentation to the library

## 2.5.5

- Fixed bug in stack frame window. It previously could crash when clearing out old names.
- Fixed bug in settings.cpp. It needed quotes around ebe.inc in yasm command.
- Fixed errors with console window.

## 2.5.4

- Added define/delete options to asm data window

## 2.5.3

- Fixed bugs in aliasing and assembly data window

## 2.5.2

- Added format change menu to assembly data window

## 2.5.1

- Added format change menu to stack frame window
- Added assembly data window

## 2.5.0

- Added stack frame window

## 2.4.7

- Added message for errors like divide by 0, segfault
- Repaired glitch in listing file parsing

## 2.4.5

- Fixed problems with comment/uncomment & shift left/right

## 2.4.4

- Fixed problem with DLLs causing 0xc000007b error

## 2,4,3

- Added popup menu for source window tabs
- Added msvcp110.dll to install exe

## 2.4.2

- Fixed scroll problem when resizing
- Fixed stack display on entering a function
- Reordered open patterns to stick with the same language

## 2.4.0

- Added stack display to the data window
- First version using Visual Studio Express 2012
- No update provided.
- Need to try the 64 bit version on 32 bit Windows. The latest gcc seems to be versatile. Email me with your results with C/C++ or fortran if you test this. Thanks

## 2.3.6

- Fixed error with stepping into asm function calls

## 2.3.4

- Fixed error with negative register values

## 2.3.3

- Fixed bug with expert mode

## 2.3.2

- Added expert mode to protect users from changes to ebe's external commands.
- Added Indonesian

## 2.3.1

- Assembly works again
- Added Japanese

## 2.3.0

- Added language translations for Arabic, Chinese, French, German, Hindi, Portuguese, Russian, Spanish and Swedish Arabic, French, Hindi, Spanish and Swedish have been edited by speakers of those languages. The others are from Google Translate.
- Fixed problem with using start-based asm files in Linux.

## 2.2.0

- Implemented console window

## 2.1.1

- Addded Fortran and Assembly highlighting
- Added version number to about.html
- Switched to mingw compilers which means that 64 bit executables are smaller than before. There is no need to choose the 32 bit version of ebe. You need to re-install rather than update.

## 2.1.0

- Added support for Windows Assembly programming
- Rearranged library files
- Prepared Fortran files to include from the code snippet toolbar
- Added code to save/restore cursor positions for files

## 2.0.25

- Fixed problem with restoring widget sizes

## 2.0.24

- Added integer add and and multiply to bit bucket

## 2.0.23

- Added integer conversions to bit bucket.

## 2.0.22

- First version of the bit bucket
- Illustrates bit operators ! - ~ | || & && ^ << >> rotate left/right

## 2.0.21

- Left out cmath from new C++ toybox code

## 2.0.20

- Added support for Fortran to the toybox.

## 2.0.19

- Changes to support assembly under OS X
- Changes to data window

## 2.0.18

- Results now can be used to update variables in the toybox
- This means with variable a, a++ will update the value of a.

## 2.0.17

- Added files to library
- Improved data support for assembly and fortran
- Added clear button to terminal window
- Revised variable definition dialog
- Added array checkbox to array bounds and variable definition dialogs

## 2.0.16

- Added libary of code snippets; icon on template toolbar
- Revised program to find ebe.rcc with .exe file

## 2.0.15

- Added a missing DLL: msvcr100.dll

## 2.0.14

- Changed the installer to avoid needing to logout and back in

## 2.0.13

- Added more options for formatting floating point data in the data window.

## 2.0.12

- First version supporting Fortran debugging
- Handles basic types and arrays
- Fixed handling or char ** and char * types
- Fixed identification of globals under Windows
- Fixed output of stderr to be unbuffered

## 2.0.11

- Added more floating point formats to the toybox
- Fixed link commands for Fortran and C
- Added closeEvent function to mainwindow
- Fortran debugging is not really useful yet

## 2.0.10

- First version with toybox - spreadsheet like tool to experiment
- with C++ numeric expressions

## 2.0.09

- Fixed problem with spaces in pathnames
- Implemented EOF handling using Control-D (C OR Z)
- Handling of data types for 32 bit programs improved
- Users will probably need to remove old .ebe.ini files

## 2.0.06

- Solved problem with loading template main programs
- Repaired gdb.cpp data item types/sizes issues
- Fetched settings from .ebe.ini on directory change
- Made settings changes take effect upon save
- Allowed _ to start identifiers

## 2.0.05

- Gave up on reading template code from resource files and used string constants.
- Removed a pointless char array from gdb.cpp.

## 2.0.04

- Repaired problem with determining next line/file from gdb
- Fixed issue with added lines looking like breakpoints after setting 1 breakpoint.
- Bug: When lines are deleted breakpoints are not handled properly.

## 2.0.03

- Added change directory to file menu
- Added code to implement project popup menu
- Non-functional version

## 2.0.02

- Added edit settings menu option
- Added function key shortcuts for debugging