Pure Basic : optimized basic compiler
Deutsch  
Francais  
Introduction visual basic compiler News visual basic compiler Download visual basic compiler Screenshots optimized programming language Ordering visual basic compiler Support visual basic compiler FAQ optimized programming language Links

Changes by libraries from v3.94 to v4.00

Image

- removed : UseImage() - change UseImage(#Image) to ImageID(#Image) where just the ID is needed.

- added: CreateImage(#Image, Width, Height [, Depth]) - New Parameter
- added: LoadImage(#Image, FileName$ [, Flags]) - New Parameter
- added: CatchImage(#Image, FileName$ [, Length [, Flags]]) - New Parameters

- changed: ImageDepth(#Image) - new parameter
- changed: ImageHeight(#Image) - new parameter
- changed: ImageWidth(#Image) - new parameter
- changed: ImageID(#Image) - new parameter
- changed: ImageOutput(#Image) - new parameter

String

- added: StrD(Number [, NbDecimals])
- added: StrQ()
- added: HexQ()
- added: BinQ()
- added: StrU(): added a #PB_Quad flag
- added: ValD(), ValQ()

Thread

added: IsThread(Thread) - test if thread (still) exists.
added: CreateMutex() - create a mutex onject
added: FreeMutex(Mutex) - destroy the object
added: LockMutex(Mutex) - wait until mutex is available and lock it
added: TryLockMutex(Mutex) - lock mutex if available, otherwise return 0 immediately
added: UnlockMutex(Mutex) - unlock the mutex so other threads can lock it

Process (New)

added: GetEnvironmentVariable(Name$) - get value of an en var
added: SetEnvironmentVariable(Name$, Value$) - set the value
added: RemoveEnvironmentVariable(Name$) - delete environment variable
added: ExamineEnvironmentVariables() - examine the currently set env variables
added: NextEnvironmentVariable() - get the next variable
added: EnvironmentVariableName() - get the variable name
added: EnvironmentVariableValue() - get the variable value
added: ProgramName() - get full path to executable
added: CountProgramParameters() - get parameters count
added: IsProgram(Program) - check if Program is a valid program created with RunProgram
added: ProgramID(Program) - get the ProcessID of the program
added: ProgramRunning(Program) - returns 1 if the program is still running
added: WaitProgram(Program [, Timeout]) - waits for the program to quit (with optional timeout) returns 1 if the program has ended
added: KillProgram(Program) - forcibly terminates the program
added: ProgramExitCode(Program) - get the exitcode of the program (only valid after program has ended)
added: CloseProgram(Program) - close the interaction with the program
added: AvailableProgramOutput(Program) - returns the number of bytes available for reading
added: ReadProgramString(Program) - read a string from the program output
added: ReadProgramData(Program, *Buffer, size) - read data from the output
added: ReadProgramError(Program) - read a message from STDERR
added: WriteProgramString(Program, String$) - write to the programs input (string)
added: WriteProgramData(Program, *Buffer, size)- write datat to the programs input

changed: ProgramParameter([Index]) - get next (or at position index) parameter
changed: RunProgram()

File

added: FileBuffersSize(#File, Size) - Change the size of the buffers for the specified file.
added: FileID(#File) - Returns the unique ID which identifies the file in the operating system.
added: FlushFileBuffers(#File) - Ensure than all buffered operations are written to disk.
added: ReadChar(#File)
added: ReadQuad(#File)
added: ReadDouble(#File)
added: WriteChar(#File, Value)
added: WriteQuad(#File, Value)
added: WriteDouble(#File, Value)

changed: FileSeek(#File, NewPosition) - new parameter
changed: WriteData(#File) - new parameter
changed: ReadData(#File) - new parameter
changed: Lof(#File) - new parameter
changed: Loc(#File) - new parameter
changed: ReadByte(#File) - new parameter
changed: ReadWord(#File) - new parameter
changed: ReadLong(#File) - new parameter
changed: ReadFloat(#File) - new parameter
changed: ReadString(#File [,Format]) - new parameter
changed: ReadData(#File) - new parameter
changed: WriteByte(#File, Data) - new parameter
changed: WriteWord(#File, Data) - new parameter
changed: WriteLong(#File, Data) - new parameter
changed: WriteFloat(#File, Data) - new parameter
changed: WriteString(#File, Data [,Format]) - new parameter
changed: WriteStringN(#File, Data [,Format]) - new parameter
changed: WriteData(#File, Data, Length) - new parameter

removed : UseFile() - change UseFile(#File) to FileID(#File) where just the ID is needed.

2DDrawing

added: DrawAlphaImage()
added: TextHeight(Text$) - returns the height required for the string with the current drawing font/output
added: FillArea(x, y, BorderColor [, Color]) - if BorderColor = -1, it fills the area with the same color as on (x,y)

changed: FrontColor(Color) - joined the red, green, blue to only one color value. (add RGB() for a quick adjustion of old code)
changed: BackColor(Color) - joined the red, green, blue to only one color value.
changed: NewX = DrawText(x, y, Text$ [, FrontColor [, BackColor]]) - added x/y coordinates and optional color values
changed: TextLength(Text$) -> TextWidth(Text$) - renamed

removed: Locate(x, y) - no longer usefull.

Palette

removed: UsePalette()

changed: GetPaletteColor(#Palette, Index) - new Parameter
changed: SetPaletteColor(#Palette, Index, Color) - new Parameter

Module

changed: SetModulePosition(#Module, Position) - new Parameter
changed: GetModulePosition(#Module) - new Parameter
changed: GetModuleRow(#Module) - new Parameter
changed: StopModule(#Module) - new Parameter and -1 = stop all the modules

Database

changed: FirstDatabaseRow(#Database) - new Parameter
changed: PreviousDatabaseRow(#Database) - new Parameter
changed: NextDatabaseRow(#Database) - new Parameter
changed: GetDatabaseLong(#Database) - new Parameter
changed: GetDatabaseFloat(#Database) - new Parameter
changed: GetDatabaseString(#Database) - new Parameter
changed: DatabaseUpdate(#Database, Query$) - new Parameter
changed: DatabaseQuery(#Database, Query$) - new Parameter
changed: DatabaseColumnType(#Database, Column) - new Parameter
changed: DatabaseColumns(#Database) - new Parameter
changed: DatabaseColumnName(#Database, Column) - new Parameter

removed: UseDatabase()

Movie

changed: MovieAudio(#Movie) - new Parameter
changed: MovieHeight(#Movie) - new Parameter
changed: MovieWidth(#Movie) - new Parameter
changed: MovieInfo(#Movie) - new Parameter
changed: MovieLength(#Movie) - new Parameter
changed: RenderMovieFrame(#Movie) - new Parameter
changed: ResizeMovie(#Movie, x, y, Width, Height) - new Parameter
changed: ResumeMovie(#Movie) - new Parameter
changed: PauseMovie(#Movie) - new Parameter
changed: StopMovie(#Movie) - new Parameter
changed: MovieSeek(#Movie, Position) - new Parameter
changed: MovieStatus(#Movie) - new Parameter

removed: UseMovie()

FileSystem

added: FinishDirectory(#Directory)
added: DirectoryEntryType(#Directory)
added: DirectoryEntryDate(#Directory, DateType) - #PB_Date_Created, #PB_Date_Accessed, #PB_Date_Modified
added: GetFileDate(Filename$, DataType)
added: SetFileDate(Filename$, DataType)

changed: NextDirectoryEntry(#Directory) - new Parameter
changed: DirectoryEntryName(#Directory) - new Parameter
changed: DirectoryEntryAttributes(#Directory) - new Parameter
changed: DirectoryEntrySize(#Directory) - new Parameter
changed: IsFilename() to CheckFilename() - function name changed

removed: UseDirectory()

Important notes: NextDirectoryEntry() no longer returns the type of entry (file/type). To be consistent with other Examine...()/Next...() functions in PB, it now only returns 0 or 1 (0 means no more objects) Use DirectoryEntryType() to find out the type of entry like you did before with the result of NextDirectoryEntry(). FinishDirectory() has to be called after each ExamineDirectory().

Menu

added: GetMenuItemText(#Menu, ItemID)
added: GetMenuTitleText(#Menu, ItemID)
added: SetMenuItemText(#Menu, ItemID, Text$)
added: SetMenuTitleText(#Menu, ItemID, Text$)

changed: DisableMenuItem(#Menu, ItemID, State) - new Parameter
changed: MenuID(#Menu) - new Parameter

Console

added: EnableGraphicalConsole(State)
added: RawKey()
added: Redirection and standard output support

changed: Inkey() - now returns only 1 char or nothing (instead of always 2), use RawKey() for the extra character

Note: the old console lib used a graphical console mode, which did not output to stdout correctly. (you could not call it from commandline like: myprogram.exe > test.txt) Now you have the choise with EnableGraphicalConsole(State), and if you do not explicitly set the graphical mode, the printed stuff should be properly sent to stdout, enabling you to write better console tools. This also applies to stdin and the Input() command.

AudioCD

changed: all function name from 'CDAudio' to 'AudioCD' (less french-english..)

Toolbar

added: ToolBarHeight(#ToolBar)
added: ToolBarID(#ToolBar)

changed: ToolBarTooltip(#ToolBar, Button, Text$) - New parameter
changed: DisableToolBarButton(#ToolBar, Button, State) - New parameter

Statusbar

added: StatusBarHeight(#StatusBar)
added: StatusBarID(#StatusBar)

Font

changed: FontID(#Font) - New parameter
changed: CloseFont() to FreeFont()

removed: UseFont()

Preferences

added: ability to add/change/delete keys to existing prefs files.
added: RemovePreferenceKey(Name$)
added: RemovePreferenceGroup(Name$)
added: ExaminePreferenceGroups() - get all the group names in the file
added: NextPreferenceGroup() - go to the next group name. (the group will be set as the current one)
added: PreferenceGroupName() - get the goup name.
added: ExaminePreferenceKeys() - get all key names in the current group
added: NextPreferenceKey() - go to the next key.
added: PreferenceKeyName() - get key name
added: ReadPreferenceQuad(Key$, Default)
added: ReadPreferenceDouble(Key$, Default)
added: WritePreferenceQuad(Key$, Value)
added: WritePreferenceDouble(Key$, Value)

Sprite

added: SpriteID(#Sprite)
added: FlipBuffer() - added a flag, to have a CPU optimized synchro in fullscreen mode

renamed: DisplayTranslucideSprite() to DisplayTranslucentSprite()

changed: TransparentSpriteColor(#Sprite, R, G, B) to TransparentSpriteColor(#Sprite, Color)
changed: ClearScreen(R, G, B) to ClearScreen(Color)

Library

renamed: IsFunction() -> GetFunction()

Network

added: UDP support trough the flags #PB_Network_UDP and #PB_Network_TCP
added: GetClientIP()
added: GetClientPort()
added: EventServerNumber()

renamed: NetworkClientID() -> EventClient()

Keyboard

added: #PB_Keyboard_International and #PB_Keyboard_AllowSystemKeys flags to KeyboardMode()

Clipboard

changed: GetClipboardData(Type) to GetClipboardImage(#Image)
changed: SetClipboardData(Type, Data) to SetClipboardImage(#Image)

Memory

added: Unicode conversion support to PeekS() and PokeS() between ascii, UTF8 and UTF16
added: PeekC(), PeekD(), PeekQ()
added: PokeC(), PokeD(), PokeQ()
added: MemorySize() - return size of a memory block
added: MoveMemory()
added: CompareMemoryString(*Text1, *Test2 [Mode [, MaxLength [, Flags]]]) - New flags parameter for UTF16/UTF8/Ascii compare
added: MemoryStringLength() - New flags parameter for UTF16/UTF8/Ascii support

Note: The PeekS, PokeS, CompareMemoryString, MemoryStringLength now have a parameter that specifies the string format. Possible options are: #PB_Ascii, #PB_Unicode or #PB_UTF8. This allows you do work with strings in memory independant of the actual String mode the executable was compiled with (unicode or not).

Engine3D

changed: CreateMesh(#Mesh,MaximumVertex) - new parameter
changed: MaterialAmbientColor(#Matrix1,-1) - -1 new parameter

added: EntityRenderMode()
added: WorldShadows(#PB_Shadow_Additive)
added: ParticleEmitterDirection()
added: GetEntityMass
added: SetEntityMass
added: GetEntityFriction
added: SetEntityFriction
added: EntityPhysicBody
added: ExamineWorldCollisions
added: NextWorldCollision
added: CheckWorldCollisionEntity
added: FirstWorldCollisionEntity
added: SecondWorldCollisionEntity
added: WorldGravity
added: EnableWorldCollision
added: EnableWorldPhysics
added: Parse3DScripts

removed: RotateParticleEmitter() (was useless for now)

Window

changed: WaitWindowEvent([Timeout]) - added optional timeout value
changed: ResizeWindow(#Window, x, y, width, height) - '-1' parameters must be changed to #PB_Ignore
changed: SetWindowCallback(@procesure()[, #Window]) - added optional window parameter (to set callback for 1 window only)
changed: ResizeWindow(#Window, x, y, Width, Height) - now same as ResizeGadget()
changed: WindowID(#Window) - parameter no longer optional
changed: WindowHeight(#Window) - new parameter
changed: WindowWidth(#Window) - new parameter
changed: WindowX(#Window) - new parameter
changed: WindowY(#Window) - new parameter
changed: WindowMouseX(#Window) - new parameter
changed: WindowMouseY(#Window) - new parameter
changed: WindowOutput(#Window) - new parameter

renamed: EventWindowID() to EventWindow()
renamed: EventGadgetID() to EventGadget()
renamed: EventMenuID() to EventMenu()
renamed: ActivateWindow() to SetActiveWindow(#Window)

removed: MoveWindow()
removed: DetachMenu()
removed: UseWindow()
removed: Compatibility constants like #PB_EventCloseWindow (use the documented #PB_Event_CloseWindow instead)

added: GetActiveWindow() - returns the Window with the focus
added: DisableWindow(#Window, State) - disable user input to a window
added: GetWindowState(#Window) - get minimized/maximized state
added: SetWindowState(#Window, State)- set minimized/maximized state
added: StickyWindow(#Window, State) - make the window stay on top of all others even if disabled
added: SetWindowColor(#Window, Color)- set background color of the window
added: GetWindowColor(#Window) - get the current background color of the window
added: SmartWindowRefresh(#Window, State) - enable or disable the smart refresh feature

Gadget

added: GetActiveGadget() - returns the currently active Gadget
added: GadgetType(#Gadget) - returns a constant that identifies what kind of Gadget this is
added: SetGadgetData(#Gadget, Value) - associate a value with the Gadget (works for all Gadgets.)
added: GetGadgetData(#Gadget) - read the associated value
added: SetGadgetItemData(#Gadget, Item, Value) - associate value with gadget item (works for specific gadgets only)
added: GetGadgetItemData(#Gadget, Item)
added: SetGadgetColor(#Gadget, ColorType, Color)
added: GetGadgetColor(#Gadget, ColorType)
added: SetGadgetItemColor(#Gadget, Item, ColorType, color [, Column])
added: GetGadgetItemColor(#Gadget, Item, ColorType [, Column])

changed: ActivateGadget(#Gadget) is now SetActiveGadget(#Gadget)
changed: ResizeGadget(#Gadget, x, y, width, height), -1 should now be changed to #PB_Ignore

removed: #PB_String_MultiLine

Individual Gadget changes:

StringGadget:
- supports SetGadgetColor() for front and backcolor

TextGadget:
- Supports SetGadgetColor() for front and backcolor

ListViewGadget:
- Supports SetGadgetColor() for front and backcolor (not for individual items)
- Supprots SetGadgetItemData()
- new Flags:
#PB_ListView_Multiselect - allow multi selection
#PB_ListView_ClickSelect - multiselect + clicking and item selects/deselects it

ComboBoxGadget()
- Supports SetGadgetItemData()

ListIconGadget()
- Supports SetGadgetColor() for front and backcolor and #PB_Gadget_LineColor (for #PB_ListIcon_GridLines)
- Supports SetGadgetItemColor() for front and backcolor (can be set for each cell individually)
- Supports SetGadgetItemData()
- The event to detected a checkbox change is now #PB_EventType_Change
- Supports GetGadgetItemAttribute(#Gadget, 0, #PB_ListIcon_ColumnWidth, 2) ; return width of column 2
- Supports SetGadgetItemAttribute(#Gadget, 0, #PB_ListIcon_ColumnWidth, 100, 2) ; set width of column 2 to 100
- Supports GetGadgetItemText(#Gadget, -1, 2) ; return header text for column 2
- Supports SetGadgetItemText(#Gadget, -1, "New Text", 2) ; change header text for column 2

HyperLinkGadget()
- Supports SetGadgetColor() for frontcolor (background is always transparent)
- new Flag: #PB_Hyperlink_Underline - draw a line under the text (without the need for an underlined font)

ContainerGadget()
- supports SetGadgetColor() for backcolor

ProgressBarGadget()
- supports SetGadgetColor() for front & backcolor (not working with XP skins)
- supports SetGadgetAttribute() with #PB_ProgressBar_Minimum, #PB_ProgressBar_Maximum

ScrollBarGadget()
- Supports SetGadgetAttribute() with #PB_ScrollBar_Minimum, #PB_ScrollBar_Maximum, #PB_ScrollBar_PageLength

ScrollAreaGadget()
- supports SetGadgetColor() for backcolor
- new Flag: #PB_ScrollArea_Center - when the inner size is smaller than the outer, the inner area will be centered automatically
- new options for SetGadgetAttribute() #PB_ScrollArea_X/#PB_ScrollArea_Y to read/set the current scroll pos.
- now generates an event when being scrolled

CalendarGadget()
- supports SetGadgetColor() with the following
#PB_Gadget_BackColor - background
#PB_Gadget_FrontColor - text to display days
#PB_Gadget_TitleBackColor - background of month title
#PB_Gadget_TitleFrontColor - text color of month title
#PB_Gadget_GreyTextColor - color for days not of the current month

DateGadget()
- supports SetGadgetColor() with the same values as CalendarGadget to color the drop-down calendar
- the input area can not be colored at this time

EditorGadget()
- supports SetGadgetColor for front & backcolor
- new Flag: #PB_Editor_ReadOnly
- supports SetGadgetrAttribute() with #PB_Editor_ReadOnly to get/set the readonly flag

TrackBarGadget()
- supports SetGadgetAttribute() with #PB_TrackBar_Minimum, #PB_TrackBar_Maximum

SpinGadget()
- supports SetGadgetColor for front & backcolor (to color the edit area)
- supports SetGadgetAttribute() with #PB_Spin_Minimum, #PB_Spin_Maximum
- New Flags:
#PB_Spin_ReadOnly - The StringGadget is not editable, the number is only changeable by the arrows
#PB_Spin_Numeric - The SpinGadget will automatically update the text with value of the state, so SetGadgetText is not needed.
- EventType values:
1 - the up button was pressed
-1 - the down button was pressed
#PB_EventType_Change - the text in the edit box was changed

TreeGadget()
- Supports SetGadgetColor() for front & backcolor & #PB_Gadget_LineColor
- Supports SetGadgetItemColor() for front & backcolor
- changed management of items completly. There are no longer any nodes, just a continuous list where each item has a "sublevel". The sublevels of all items define the tree structure like this:
   + sublevel 0
   +-+ sublevel 1
   | | sublevel 1
   | +-+ sublevel 2
   | | sublevel 1
   | sublevel 0              
- new parameter to AddGadgetItem: AddGadgetItem(#Gadget, Position, Text$ [, ImageID [, Flags]]) The "Flags" parameter is always required for TReeGadget and specifies the Sublevel in which to put this item.

To create the above three, you do this:
   AddGadgetItem(#TreeGadget, -1, "sublevel 0", 0, 0)

   AddGadgetItem(#TreeGadget, -1, "sublevel 1", 0, 1)
   AddGadgetItem(#TreeGadget, -1, "sublevel 1", 0, 1)
   AddGadgetItem(#TreeGadget, -1, "sublevel 2", 0, 2)
   AddGadgetItem(#TreeGadget, -1, "sublevel 1", 0, 1)

   AddGadgetItem(#TreeGadget, -1, "sublevel 0", 0, 0)    
- new GetGadgetItemAttribute() with #PB_Tree_SubLevel (readonly) to get the sublevel of any item
- removed: OpenTreeGadgetNode()
- removed: CloseTreeGadgetNode()
- removed: TreeGadgetItemNumber() - can be easily emulated by GadgetItemID()+a run trough the item list
- removed: CountTreeGadgetNodeItems() - can be easily emulated by comparing the sublevel of the items

PanelGadget()
- added GetGadgetAttribute() with #PB_Panel_ItemWidth, #PB_Panel_ItemHeight (readonly) (there must be at least 1 tab in the panel for this to work)

SplitterGadget()
- new flags for Get/SetGadgetAttribute(): #PB_Splitter_FirstGadget, #PB_Splitter_SecondGadget With GetGadgetAttribute(), they return the #Gadget Number of the stored Gadget With SetGadgetAttribute(), you can place a new Gadget in the Splitter.

Note: The Old Gadget will not be automatically freed! (it will be put out of the splitter and on the same window as the splitter) So if you do not want the old gadget to remain, remove it with FreeGadget() This allows you to switch Gadgets in a splitter without the need to re-create any of them.

Note: You cannot have a Gadget in 2 Splitters at once, so to move a Gadget from one splitter to another, Replace it in the first splitter first, and then put it in the second one.

MDIGadget()
- The child windows of the MDIGadget are no longae "GadgetItems", but real PB Windows. This means that you can use ANY command from the WindowLib with them (except StickyWindow()). This makes some of the MDIGadget features obsolete, therefore there are some changes:
- The Gadget no longer sends any events: all close, resize, activate events are received as Window events
- GetGadgetAttribute(), Get/SetGadgetItemAttribute, Get/SetGadgetItemState(), Get/SetGadgetItemText are all no longer supported. All this can be easily done through the Window lib commands.
- RemoveGadgetItem() no longer supported.. use CloseWindow()

The Commands useable with MDIGadget now are only these: (+ the whole windowlib!)
- ClearGadgetItemList() : closes all child windows
- CountGadgetItems() : get the number of child windows in the gadget
- GetGadgetState() : get the WindowID of the Window currently in the foreground of the gadget
- SetGadgetState() : get a specific window to the foreground or arrange the child windows (All like the old MDIGadget)
- AddGadgetItem() : create an MDI Child
Note: you must now call CreateGadgetList() to add items to a MDI child, just like with normal windows.

- SetGadgetColor() can be used with #PB_Gadget_BackColor to set the MDI backcolor
- SetGadgetAttribute() can be used with #PB_MDI_Image to set a background image, #PB_MDI_TileImage can set the tile mode of the image on or off

ExplorerListGadget()
- supports SetGadgetColor() for front & backcolor & #PB_Gadget_LineColor
- Supports GetGadgetItemAttribute(#Gadget, 0, #PB_Explorer_ColumnWidth, 2) ; return width of column 2
- Supports SetGadgetItemAttribute(#Gadget, 0, #PB_Explorer_ColumnWidth, 100, 2) ; set width of column 2 to 100
- Supports GetGadgetItemText(#Gadget, -1, 2) ; return header text for column 2
- Supports SetGadgetItemText(#Gadget, -1, "New Text", 2) ; change header text for column 2

ExplorerTreeGadget()
- supports SetGadgetColor() for front & backcolor & #PB_Gadget_LineColor

  Copyright © 2017 Fantaisie Software support@purebasic.com  


By the same author, discover the new web client-side programming language
based on established BASIC rules on spiderbasic.com