Release Notes for Version 4.685

Help Contents Release Notes Release Notes for Version 4.685
Release Notes for Version 4.686 Release Notes for Version 4.684

Release Notes for Version 4.685

In trying to built more persistence into aUCBLogo, the console window text can now be automatically saved in the file USER-aucblogo-console, where USER is replaced by the name of the computer user currently logged in. There's a check item in the menu with which you can disable autoload and -save of the console text. The same autosave mechanism is now provided for the picture data, and loadPicture and savePicture now work (I hope) correctly. Additionally I made the new primitives loadPictureText and savePictureText to enable easy exporting and importing of picture data and better debugging.

Finally I achieved persistence of all Logo nodes, so you can run any aUCBLogo program, close aUCBLogo, do something else, start aUCBLogo again and recover your last state. The last state can be running or in midst of a debugging session. This persistent mode can of course be disabled by unchecking "Autosave Nodes" in the File menu, which can be highly wanted if there are many users logged in with the same username.

Printing does now work.

Support for arbitrary precision math using the MAPM library has been added:

BigFloat BigFloatSetPrecision

The primitives Time and FileTime now have the same output format and the MilliSeconds are an additional member.

The predicate FileP / File? is now a primitve.

The new primitive Files outputs the files of the current working directory.

The following primitives are for working with directories:

DirectoryP getWorkingDirectory makeDirectory

The constructors Array, IntArray, Int16Array and FloatArray have been expanded to include a copy constructor, so such data can easily be duplicated.

The primitives saveScreenBMP and saveBMP have been deleted, because there is now saveScreen, which can save the screen in all formats supported by wxWidgets.

Additionally there's now saveScreenVector which uses the GL2PS library to generate various vector graphic formats.

BitMaxX and BitMaxY are new primitves to get the maximal allowed coordinates of a Bitmap obtained by BitCopy or a file.

The shininess of a 3D filled shape can be set now with setMaterialShininess.

To the Sphere primitive has been expanded to optionally take slices and stacks parameters, which gives more control about the drawing finesse.

The primitives readCharExt and rCE have been changed to not output a word with length 1 (a char) but to output an Int, because in the section about KeyboardValue the wxWidgets Keycode constants have been added, which all have numbers >= 300, and that's to big to fit in a char.

It is now possible to break or continue loops by using the break or continueLoop statements.

The nice primitive playWaveFast has been added for use in games and music programs. It can play multiple wave files simultanously.

You now can create a Video for Windows (.avi) file using the new primitives VideoStart..VideoFrame..VideoEnd.

The Color Database has been extended by lots of extra color names, but all still just in English.

Among other new GUI programming primitives, custom keyboard and mouse event handlers written in Logo are now supported. For the console are the following keyboard and mouse handlers:

OnChar OnKeyDown OnKeyUp KeyboardValue OnTextMouseLeftDown OnTextMouseRightDown OnTextMouseMiddleDown OnTextMouseLeftUp OnTextMouseRightUp OnTextMouseMiddleUp OnTextMouseLeftDClick OnTextMouseRightDClick OnTextMouseMiddleDClick OnTextMouseMotion

For the main graph window are those mouse handlers:

OnMouseLeftDown OnMouseRightDown OnMouseMiddleDown OnMouseLeftUp OnMouseRightUp OnMouseMiddleUp OnMouseLeftDClick OnMouseRightDClick OnMouseMiddleDClick OnMouseMotion

You can now set the mouse cursor to "busy" or normal and ask if mouse is busy with the following commands:

beginBusyCursor endBusyCursor BusyCursor?

The following standard dialogs for getting information from the user are now available:

DirSelector FileSelector getColorFromUser getFontFromUser getMultipleChoices getNumberFromUser getPasswordFromUser getTextFromUser getSingleChoice getSingleChoiceIndex MessageBox

For cleanup of texture memory there's now deleteTextures, so a texture memory overflow can be prevented, if you create many textures which you maybe only use once.

When you use Graph windows with a defined shape then setScreenRange might be useful to get away from the default [800,600] logical pixels.

setPixel can now also take 3D coordiantes as arguments.

For easier and faster plotting the new command setPixelXY has been written: It takes structured X data and equally structured Y data as separate arguments.

The DLCall primitive supports now argument-by-pointer when "IntPtr, "Int16Ptr, "Int8Ptr, "UInt8Ptr or "FloatPtr are specified as argument type.

For customizing the Logo environment, file and dir locations, the most important can now be read and changed:

LogoComspec setLogoComspec LogoEditor setLogoEditor LogoHelpDir setLogoHelpDir LogoLibDir setLogoLibDir LogoTempDir setLogoTempDir

Windows (using the constructor Frame), multiple Graph windows (using the constructor Graph) and many Controls from the wxWidgets framework are now included.

New primitives for usage with Frame:

FrameDestroy FrameOnChar FrameOnKeyDown FrameOnKeyUp FrameSetFocus FrameEnable FrameSetClientSize FrameSetColor FrameSetBackgroundColor FrameSetFontSize FrameSetFontName FrameSetFontStyle FrameSetFontWeight FrameSetShape FrameSetSizer

New primitives for usage with Graph:

GraphDestroy GraphCurrent GraphSetCurrent GraphOnChar GraphOnKeyDown GraphOnKeyUp GraphOnLeftDown GraphOnRightDown GraphOnMiddleDown GraphOnLeftUp GraphOnRightUp GraphOnMiddleUp GraphOnLeftDClick GraphOnRightDClick GraphOnMiddleDClick GraphOnMotion

The main window layout mechanism of wxWidgets is supported with the constructor BoxSizer and the applicable primitives:

BoxSizerAdd BoxSizerDestroy

Be aware of the command FrameSetSizer: it enables a sizer on a Frame.

The new controls are (here follow the constructors alphabetically, the detailed listing of primitives afterwards):

Button CheckBox ChoiceBox ComboBox FloatControl Gauge IntControl ListBox ListControl RadioButton Slider StaticText TextControl ToggleButton

New primitives for usage with Button:

ButtonDestroy ButtonOnClick ButtonEnable

New primitives for usage with CheckBox:

CheckBoxDestroy CheckBoxOnClick CheckBoxValue CheckBoxSet CheckBoxEnable

New primitives for usage with ChoiceBox:

ChoiceBoxDestroy ChoiceBoxSelection ChoiceBoxSetSelection ChoiceBoxSetChoices ChoiceBoxAppend ChoiceBoxSetItem ChoiceBoxRemoveItem ChoiceBoxCount ChoiceBoxSetBackgroundColor ChoiceBoxSetColor ChoiceBoxSetFontSize ChoiceBoxSetFontName ChoiceBoxSetFontStyle ChoiceBoxSetFontWeight ChoiceBoxOnChar ChoiceBoxOnKeyDown ChoiceBoxOnKeyUp ChoiceBoxOnSelect ChoiceBoxEnable

New primitives for usage with ComboBox:

ComboBoxDestroy ComboBoxSelection ComboBoxSetSelection ComboBoxSetChoices ComboBoxAppend ComboBoxSetItem ComboBoxRemoveItem ComboBoxCount ComboBoxValue ComboBoxSetValue ComboBoxSetBackgroundColor ComboBoxSetColor ComboBoxSetFontSize ComboBoxSetFontName ComboBoxSetFontStyle ComboBoxSetFontWeight ComboBoxOnChar ComboBoxOnKeyDown ComboBoxOnKeyUp ComboBoxOnSelect ComboBoxOnChange ComboBoxOnEnter ComboBoxEnable

New primitives for usage with FloatControl:

FloatControlDestroy FloatControlValue FloatControlSetValue FloatControlSetRange FloatControlOnChange FloatControlEnable

New primitives for usage with Gauge:

GaugeDestroy GaugeValue GaugeSetValue GaugeSetRange GaugeSetColor GaugeSetBackgroundColor

New primitives for usage with IntControl:

IntControlDestroy IntControlValue IntControlSetValue IntControlSetRange IntControlOnChange IntControlEnable

New primitives for usage with ListBox:

ListBoxDestroy ListBoxSelections ListBoxSetSelections ListBoxSetChoices ListBoxAppend ListBoxSetItem ListBoxRemoveItem ListBoxCount ListBoxSetBackgroundColor ListBoxSetColor ListBoxSetFontSize ListBoxSetFontName ListBoxSetFontStyle ListBoxSetFontWeight ListBoxOnChar ListBoxOnKeyDown ListBoxOnKeyUp ListBoxOnSelect ListBoxOnDClick ListBoxEnable

New primitives for usage with ListControl:

ListControlDestroy ListControlInsertColumn ListControlInsertItem ListControlSetItem ListControlGetItem ListControlDeleteItem ListControlSetRow ListControlSetColumn ListControlSet ListControlGetRow ListControlGetColumn ListControlGet ListControlItemCount ListControlColumnCount ListControlColumn ListControlRow ListControlText ListControlSort ListControlSetBackgroundColor ListControlSetColor ListControlSetFontSize ListControlSetFontName ListControlSetFontStyle ListControlSetFontWeight ListControlOnChar ListControlOnKeyDown ListControlOnKeyUp ListControlOnItemSelected ListControlOnItemActivated ListControlOnColClick ListControlEnable

New primitives for usage with RadioButton:

RadioButtonDestroy RadioButtonOnClick RadioButtonValue RadioButtonSet RadioButtonEnable

New primitives for usage with Slider:

SliderDestroy SliderValue SliderSetValue SliderSetRange SliderOnScroll SliderEnable

New primitives for usage with StaticText:

StaticTextDestroy StaticTextLabel StaticTextSetLabel StaticTextSetBackgroundColor StaticTextSetColor StaticTextSetFontSize StaticTextSetFontName StaticTextSetFontStyle StaticTextSetFontWeight

New primitives for usage with TextControl:

TextControlDestroy TextControlValue TextControlSetValue TextControlWrite TextControlAppend TextControlSetInsertionPointEnd TextControlCursor TextControlSetCursor TextControlInsertMode TextControlOverwriteMode TextControlSetBackgroundColor TextControlSetColor TextControlSetFontSize TextControlSetFontName TextControlSetFontStyle TextControlSetFontWeight TextControlOnChar TextControlOnKeyDown TextControlOnKeyUp TextControlOnChange TextControlOnEnter TextControlEnable

New primitives for usage with ToggleButton:

ToggleButtonDestroy ToggleButtonOnClick ToggleButtonSetValue ToggleButtonValue ToggleButtonEnable

And for the debugging of the Garbage Collector (and for my amusement) I wrote a memory window, accessable through the view menu, where one can inspect every Node by pointing with the mouse to it: a tooltip window with a textual representation of that Node will show up then. It's pretty interesting to see the GC working!

You can always ask me if you experience problems with aUCBLogo!

Andreas Micheler

Release Notes for Version 4.686 Release Notes for Version 4.684