PureBasic Changelog

What's new in PureBasic 6.10.0

Mar 29, 2024
  • - Added: WebView library to easily create HTML/CSS based UI !
  • Added: Full rework of the date library to handle years from 1601 to 9999 !
  • Added: Skeleton library to create custom skeleton to a mesh !
  • Added: SvgVectorOutput() and PdfVectorOutput() for all OS
  • Added: DPI-Aware support for OS X
  • Added: ExamineDraggedItems(), NextDraggedItem() and DraggedItemIndex() for Drag'n'drop
  • Added: GetGadgetItemText() support for ExplorerTreeGadget()
  • Added: CompareStructure(), CompareArray(), CompareList() and CompareMap() functions
  • Added: CustomSortList() and CustomSortArray() functions to Sort library
  • Added: CatchPack(), PackEntryDate()
  • Added: CreatePasswordHash() and VerifyPasswordHash() functions (BCrypt algorithm)
  • Added: DeriveCipherKey() to create a cipher key from a password (PBKDF2 algorithm)
  • Added: DateUTC() to get the date in UTC time
  • Added: ConvertDate(Date, #PB_Date_LocalTime/#PB_Date_UTC) to convert the date between UTC and localtime
  • Added: ScaleEntityBone(), MeshDirectAdd() and #PB_Mesh_Direct mode support to CreateMesh()
  • Added: AddPackDirectory(#Packer, PackedDirectoryName$) for empty directory
  • Added: UseDialogWebGadget(), UseDialogOpenGLGadget(), UseDialogScintillaGadget() to avoid big lib dependency by default when using dialogs.
  • Added: NbMaxChannels parameter for InitSound(). Range from 1 to 254.
  • Added: 'Encoding' optional parameter to OpenPreference() to handle properly UTF-8 files without BOM
  • Added: Parent window support to all requesters
  • Added: WebGadget based on Edge component with the #PB_Web_Edge constant (Windows only)
  • Added: Localhost binding for InitFastCGI()
  • Added: SystrayIconMenu() to automatically display a menu when clicking on the icon
  • Added: ListIconGaget() column alignment support
  • Added: Runtime warning if CreateThread() is used without ThreadSafe mode
  • Added: GadgetItemID() support for PanelGadget() (Windows only)
  • Added: #PB_Preference_NoBOM flag for CreatePreference() to create UTF-8 preference files without BOM
  • Added: #PB_Cipher_HMAC flag to fingerprint functions
  • Added: #PB_2DDrawing_NativeText support for DrawingMode()
  • Added: #PB_PixelFormat_NoAlpha for DrawingBufferFormat()
  • Added: #PB_EventType_ColumnClick for ListIconGadget()
  • Added: #PB_String_EscapeJSON support to EscapeString() and UnescapeString().
  • Added: #PB_Menu_SysTrayLook support to have better looking popup menu when used with SysTray (Windows only)
  • Added: #PB_EventType_Refresh support for ExplorerListGadget() (Window only)
  • Added: Case-insensitive subsystem support on Linux
  • Added: --listfunctions/constants/interfaces and --querystructure support to Windows compiler.
  • Updated: Unicode filename support for Windows compiler
  • Updated: Libvlc instead of the old xine lib on Linux to play movies
  • Updated: Reworked the Sound and Music library to use MiniAudio on Windows, OS X and Linux (SDL dependency is no more requiered for sounds on Linux).
  • Updated: SQLite version to 3.45.0
  • Updated: Toolchain on Windows now use VisualStudio 2022 and new MSVCRT for faster PureBasic programs and easier external libs integration.
  • Updated: Minimum version for Linux x86 is now Debian 12
  • Updated: Minimum version for Raspberry is now Debian 12 based PI OS
  • Changed: TextWidth(), TextHeight(), DrawText() and DrawRotatedText() now use double for X, Y coordinates.
  • Changed: Scintilla is now linked statically on Windows (distributing the scintilla.dll along your executable isn't needed anymore)
  • Changed: the SysTray lib on Linux now use AppIndicator to support modern Linux distro in GTK3
  • Changed: deprecated DESFingerprint() function - use the new CreatePasswordHash() instead.
  • Changed: ListSize() and MapSize() now properly return -1 if the list or map is freed.
  • Removed: --listpath on Linux/OSX (use --output to specify the output file)
  • Removed: Windows XP support. Minimum supported Windows version for created executables is now Windows Vista.
  • Removed: Some very old deprecated functions.
  • Fixed: A lot of libraries bugs (fixed bug list)

New in PureBasic 6.0.3 (Oct 13, 2023)

  • Added: #PB_String_NoCaseAscii for CompareMemoryString() for faster string comparison when only ascii characters are involved.
  • Added: #PB_Compiler_DPIAware compiler constant.
  • Updated Scintilla to 5.3.5 for all platforms
  • Optimized: Smaller and more readable C generated file.
  • Changed: IDE on Linux is now using GTK3 as default (GTK2 IDE is named purebasic_gtk2)
  • Fixed: A lot of compiler and libraries bugs

New in PureBasic 6.0.2 (May 17, 2023)

  • Added: HttpTimeout() to set a connection and a global timeout for Http commands.
  • Added: GTK3 IDE build for Linux for testing (purebasic_gtk3).
  • Added: ReAssembly (--reasm) support for OS X and Linux.
  • Updated: libarchive to 3.6.2 - Updated: lib7z to 22.01
  • Removed: EnableASM support for C backend as it can't be used correctly (the IDE capitalize the letters for If etc.) and avoid detecting real x86/x64 asm block leading to strange errors. The correct way is now to use the '!' sign at the line start to use directly C code.

New in PureBasic 6.0.1 (Mar 11, 2023)

  • Added: #PB_Mail_UseSMTPS and #PB_Mail_Debug for CreateMail()
  • Updated: GCC on Windows for C backend to 12.2.0 version
  • Fixed: A lot of compiler and libraries bugs (fixed bug list)

New in PureBasic 6.0.0 (Jun 25, 2022)

  • Added: Apple M1 support !
  • Added: Raspberry support (32-bit and 64-bit) !
  • Added: a new C backend compiler for all PureBasic versions
  • Added: #PB_Compiler_Backend, #PB_Backend_C and #PB_Backend_Asm compiler constants
  • Added: #PB_Compiler_64Bit and #PB_Compiler_32Bit compiler constants
  • Added: #PB_Compiler_Optimizer which is set to #True if the optimizer is enabled
  • Added: support for Windows 11, OS X 11 and 12 for OSVersion()
  • Added: /OPTIMIZER, -z, --optimizer flag to the commandline, and a 'Use code optimizer' checkbox in IDE 'Compiler Options' to turn on C optimizations
  • Added: auto DPI support for Menu and ToolBar library (Windows)
  • Added: WebGadget() support for GTK3 on linux
  • Added: CreateShader(), CreateShaderMaterial(), MaterialShaderAutoParameter(), MaterialShaderParameter(), MaterialShaderTexture()
  • Added: optional parameter to MeshFace() to create a quad
  • Added: optional force vector to WorldGravity()
  • Added: optional position mode to ApplyEntityForce()
  • Added: GetEntityMesh(), CreateCubicTexture(), CreateAnimatedMaterial()
  • Added: new mode to CreateDataMesh(): #PB_Mesh_DiagonalShortestLength, #PB_Mesh_DiagonalClosestNormal, #PB_Mesh_DiagonalAlternate, #PB_Mesh_DiagonalRegular1, #PB_Mesh_DiagonalRegular2
  • Added: new structures: Vector3, Vector4
  • Added: predefined shaders: #PB_Material_ColorShader, #PB_Material_PerpixelShader, #PB_Material_BumpShader, #PB_Material_SkyShader, #PB_Material_WaterShader, #PB_Material_WaterShaderRTT, #PB_Material_OceanShader, #PB_Material_PointSpriteSphereShader
  • Added: new modes for SetMaterialAttribute(): #PB_Material_PointSprite, #PB_Material_DepthBias
  • Added: new optional 'Color' parameter to CreateMaterial()
  • Added: new optional 'SpecularColor' parameter to MaterialShininess()
  • Added: new optional 'v' and 'w' parameter to MeshVertexTextureCoordinate()
  • Added: new optional 'Lod' parameter to CreateCamera()
  • Added: new modes for AddMaterialLayer(): #PB_Material_ModulateX2, #PB_Material_ModulateX4, #PB_Material_AddSigned, #PB_Material_Substract, #PB_Material_BlendDiffuseAlpha, #PB_Material_BlendCurrentAlpha
  • Added: New contextual constant display for AutoComplete in IDE (Fr34k)
  • Added: 3 new triggers for custom tools in IDE: 'OpenFile - Non-PB binary file', 'OpenFile - Non-PB text file', 'OpenFile - with specific extension' (HeX0R101)
  • Added: New 'Replace' shortcut (CTRL+H) which opens the find dialog with replace enabled in IDE (ChrisRfr)
  • Updated: SetMaterialColor() can now use several colortypes at once using '|'
  • Updated: fasm, polink, polib and porc to lastest versions (Windows)
  • Updated: Movie library on OS X to support modern OS X version
  • Updated: Mouse library on Windows to use RawInput instead of DirectX to support HighDPI mouse
  • Updated: SQLite to 3.38.2
  • Updated: zlib to 1.12.12
  • Updated: libpq (PostgreSQL) to 14.2
  • Changed: renamed structures PB_MeshFace -> MeshFace and PB_MeshVertex -> MeshVertex
  • Changed: the name of the /EXE commandline flag to /OUTPUT to be more coherent (still work for backcompatibilty but not documented anymore)
  • Changed: the short version of /CONSTANT from '-o' to '-co' as '-o' is now used for /OUTPUT
  • Changed: the way the map elements are created when using passive syntax, to be more consistent
  • Changed: the default subsystem for screen/sprite is now OpenGL on Windows for more consistency. DirectX9 is still available as a subsystem.
  • Changed: enabled backface culling for sprite OpenGL subsystem to be faster and be in line with DirectX9/11
  • Changed: InitNetwork() is no more needed to use network functions (deprecated)
  • Removed: x86 version of PureBasic for OS X as it's no more supported since OS X Catalina (Minimum supported OS X is now 10.10 - released in 2014).
  • Removed: the 'Help' library on Linux
  • Removed: Nvidia CG support for OGRE as it's no more supported by Nvidia since a while
  • Removed: ToolBarStandardButton() as it doesn't support high DPI

New in PureBasic 5.73 (Apr 14, 2021)

  • Added: #PB_HTTP_WeakSSL to HTTRequest() to support older servers
  • Added: Added #PB_HTTP_Debug to print in the console debug information
  • Added: New indentation option (Shardik)
  • Added: Add option to auto-wrap Find at end of file (kenmo)
  • Added: New editor shortcuts (upper/lower/invert case) (kenmo)

New in PureBasic 5.72 (Apr 18, 2020)

  • Added: #PB_HTTP_Headers to HTTPInfo() to get the headers
  • Added: #PB_HTTP_HeadersOnly to HTTPRequest() to only request the headers (GetHTTPHeaders() is now deprecated)
  • Added: Scintilla word chars selection as user preference in IDE (kenmo)
  • Added: Zoom keyboard shortcuts in IDE (kenmo)
  • Added: New editor shortcut functions in IDE (kenmo)
  • Added: Memview (idle)
  • Changed: PostEvent() now returns a result as it could fail in some extrem case
  • Changed: Sign() now returns an integer instead of a float.
  • Updated: OpenJPEG library to version 2.3.1
  • Updated: PCRE library to version 8.44
  • Updated: libpng to version 1.6.37
  • Updated: libjpeg to version 9d
  • Updated: libtiff to version 4.1.0
  • Updated: expat to version 2.2.9
  • Updated: libflac to version 1.3.3
  • Updated: libogg to version 1.3.4
  • Updated: libvorbis to version 1.3.6
  • Updated: sqlite to version 3.31.1
  • Updated: curl to version 7.68.0
  • Fixed: 'Find Previous' freezing in IDE (kenmo)
  • Fixed: Gadgets Drag'n'Drop Position in FormDesigner (ChrisR)
  • Fixed: Re-enable buttons bug in window 'Find in Files' in IDE (Sicro)
  • Fixed: Display errors in window '#WINDOW_Form_Parent' of the FormDesigner (Sicro)
  • Fixed: Many documentation issues (Andre and Mesa)
  • Fixed: Some compiler and libraries related bugs

New in PureBasic 5.70 (Aug 16, 2019)

  • Major release
  • MySQL database support, QT subsystem and much more

New in PureBasic 5.61 (Feb 4, 2018)

  • Bug-fix release
  • Fixed MacBook touchbar issue and various bugs Pure Basic compiler news

New in PureBasic 5.60 (Sep 12, 2017)

  • Major release
  • GIF decodeur, new toolbar feature and many more

New in PureBasic 5.41 (Dec 23, 2015)

  • Added: new Vector 2D library
  • Added: new CGI library with standard and FastCGI support
  • Added: Literal string escape support with the '~' operator (ex: a$ = ~"Hello\nWorld\n")
  • Added: EscapeString()/UnescapeString() function to allow escaping operation on any strings (variables etc.)
  • Added: EnumerationBinary to create bitmask enumeration automatically
  • Added: database parameter binding to ease request construction
  • Added: SetDatabaseBlob(), SetDatabaseFloat(), SetDatabaseDouble(), SetDatabaseLong()
  • Added: SetDatabaseQuad(), SetDatabaseString(), SetDatabaseNull()
  • Added: SHA2 and SHA3 (224/256/384/512-bit) support to Cipher library
  • Added: StringFingerprint()
  • Added: CRC32 support for StartFingerprint()
  • Added: ReceiveHTTPMemory(), IsJoint()
  • Added: RefreshDialog() to recalc dimension after a text change or similar
  • Added: "group" XML attribute for 'option' dialog gadget, to specify explicitly a group
  • Added: HTTPS and simple auth support for ReceiveHTTPFile() and GetHTTPHeaders()
  • Added: Auto redirect support for ReceiveHTTPFile() and ReceiveHTTPMemory()
  • Added: ASynchronous mode for ReceiveHTTPFile() and ReceiveHTTPMemory()
  • Added: HTTPProgress(), AbortHTTP() and FinishHTTP() to control async mode
  • Added: HTTPS/TLS support for SendMail()
  • Added: FlushPreferenceBuffers()
  • Added: CopyDebugOutput() to copy the debug output to the clipboard from code
  • Added: 7z archive creation
  • Added: tar (gz and bzip2) archive support for creation and decompression
  • Added: Full path in IDE recent files menu
  • Added: #PB_ProgressBar_Unknown for SetGadgetState() to indicate unknown progress
  • Added: #PB_UTF8/Ascii/Unicode support to ReadCharacter() and WriteCharacter()
  • Added: #PB_UTF8 support to URLEncoder() and URLDecoder (now the default mode)
  • Added: Windows 8.1/10 and OS X 10.9/10/11 support to OSVersion()
  • Added: #PB_Editor_xxx constants when using the 'Version' info on Windows
  • Added: #PB_Program_Ascii/Unicode/UTF8 support to RunProgram()
  • Added: linux/osx style flags for the commandline compiler on Windows to ease cross-platform scripts
  • Added: #PB_File_SharedWrite support to ReadFile() and CreateFile()
  • Added: 'IMPORTLIST' compiler interface to get all the predefined API functions
  • Added: #Null$ special string constant to affect a real null value to a string (to free it completely). It can be used as well for API function which sometimes accept NULL instead of a string address.
  • Added: #Empty$ constant
  • Added: #PB_ByteLength support to MemoryStringLength()
  • Added: #PB_Ascii, #PB_UTF8 and #PB_Unicode support to Create/Open/ReadFile() to set the default write/read mode
  • Added: #PB_ByteLength flag for PeekS() and #PB_UTF8 (only)
  • Added: CreateCone(), CameraCustomParameter(), ResizeCamera()
  • Added: #PB_Entity_DisableContactResponse and #PB_Entity_EnableContactResponse for SetEntityAttribute()
  • Added: #PB_Entity_ConeBody, #PB_Entity_PlaneBody
  • Added: FreeEntityBody(), FreeTerrainBody()
  • Added: ApplyEntityTorque(), ApplyEntityTorqueImpulse()
  • Added: Added 'CollisionGroup' and 'CollisionMask' parameter for RayCollide()
  • Added: Migration help page, to have a step by step migration guide between old on new PureBasic.
  • Added: User guide in german (thanks to Andre and Vera)
  • Updated: the Linux printer lib to use native GtkPrint instead of GnomePrint
  • Updated: the Windows compiler to VC++ 2013 for better code generation
  • Updated: SQLite to 3.8.10.2
  • Fixed: Zip archive support
  • Fixed: send mail and http request issues
  • Fixed: 'CONSTANTLIST' compiler interface, now string constants are returned as escaped strings.
  • Changed: The default GTK version is now GTK3 on Linux. A gtk2 subsystem has been added for backward compatibility.
  • Changed: The default string format for RunProgram() read/writestring is not UTF8 instead of Unicode
  • Changed: the Cipher lib to be modular (now UseMD5Fingerprint() and such commands needs to be used)
  • Changed: ExamineFingerprint() to StartFingerprint()
  • Changed: NextFingerprint() to AddFingerprintBuffer()
  • Changed: EntityPhysicBody() to CreateEntityBody()
  • Changed: TerrainPhysicBody() to CreateTerrainBody()
  • Changed: the SendMail() 'Asynchronous' parameter has been replaced by the #PB_Mail_Asynchronous flag.
  • Changed: DLLImporter has been removed and .pbl files are no more supported. New 'import library' files can be created using the '/IMPORT' switch of the pbcompiler.
  • Removed: RemovePackFile()
  • Removed: #PB_Packer_CompressedSize support for ZIP and 7z archives with PackerEntrySize()
  • Removed: AvailableScreenMemory()

New in PureBasic 5.22 (Jul 23, 2014)

  • Fixed: Some compiler and libraries related bugs

New in PureBasic 5.21 (Jul 23, 2014)

  • Changed: 'REQUEST' to 'AUTO' for dialog splitter automatic min size calc (old syntax still supported)
  • Fixed: Some compiler and libraries related bugs

New in PureBasic 5.20 (Jul 23, 2014)

  • Added: Module support for the compiler
  • Added: Runtime library
  • Added: Dialog library
  • Added: GTK3 subsystem for Linux
  • Added: DirectX11 subsystem for Windows (doesn't not support the 3D engine for now)
  • Added: Named enumeration support to allow continuing a previous enumeration
  • Added: JoystickName(), JoystickZ()
  • Added: Optional #PB_Relative flag to JoystickX/Y/Z() to have more precise values
  • Added: Optional pad number to JoystickX/Y/Z() to handle more complex gamepads
  • Added: ZoomSprite() now accepts #PB_Default as Width/Height to reset to initial sprite size
  • Added: 'Color' and 'Intensity' parameter to DisplayTransparentSprite()
  • Added: ClipSprite() now support #PB_Default for individual parameter
  • Added: #PB_Sprite_PixelCollision flag to CreateSprite(), LoadSprite() to enable pixel collision
  • Added: Zoom support to SpritePixelCollision() and SpriteCollision()
  • Added: OpenGL support for SpriteBlending() (warning, it just wraps OpenGL mode, so it can behave different than DirectX)
  • Added: 32-bit support for SpriteOutput() for DX and OpenGL
  • Added: #PB_EventType_Focus and #PB_EventType_LostFocus support to EditorGadget()
  • Added: #PB_EventType_RightClick support to ListViewGadget()
  • Added: #PB_EventType_Change support to PanelGadget() and DateGadget()
  • Added: #PB_Prototype and #PB_Module support to Defined()
  • Added: All Init() functions can be called more than once without issue (like InitSound(), InitNetwork() etc.)
  • Added: #PB_FileSystem_Force support to DeleteFile()
  • Added: #PB_FileSystem_NoExtension support to GetFilePart()
  • Added: Back color parameter to CreateImage()
  • Added: #PB_Entity_NbSubEntities to GetEntityAttribute()
  • Added: MeshIndexCount(), SetRenderQueue(), FetchEntityMaterial(), GetMeshData(), SetMeshData()
  • Added: CPUName(), Un/BindEvent(), Un/BindGadgetEvent(), Un/BindMenuEvent()
  • Added: Previous location is displayed when declaring a structure, interface, prototype or procedure twice.
  • Added: 2 license files to easy add the needed information when shipping PB programs (see reference documentation)
  • Added: Bool() is now evaluated at compile time if the whole expression is constant
  • Added: Debugger check for SortStructuredList() and SortList() to ensure the specified list is of correct type
  • Added: Linux executables created on new distribution should still work on old linux.
  • Added: #PB_EventType_FirstCustomValue for use with PostEvent()
  • Added: CameraFollow(), ExamineWorldCollisions(), NextWorldCollision(), FirstWorldCollisionEntity(), SecondWorldCollisionEntity()
  • Added: WorldCollisionContact(), WorldCollisionNormal(), WorldCollisionAppliedImpulse()
  • Added: BuildMeshTangents(), MeshVertexTangent(), CopyTexture()
  • Added: Pitch(), Roll(), Yaw()
  • Added: #PB_Gadget_RequiredSize support for GadgetWidth/Height()
  • Added: #PB_Entity_LinearSleeping, #PB_Entity_AngularSleeping, #PB_Entity_DeactivationTime, #PB_Entity_IsActive,
  • Added: #PB_Entity_AngularVelocityX/Y/Z, #PB_Entity_ScaleX/Y/Z, #PB_Entity_AngularVelocity, #PB_Entity_HasContactResponse for Get/SetEntityAttribute()
  • Optimized: Pixel sprite collision routines are now much faster with DirectX
  • Optimized: More peephole optimizations on x64 assembler output
  • Optimized: Faster compilation for big programs
  • Optimized: Linux build server have been upgraded, now using a better GCC which produce better code.
  • Changed: SpinGadget() EventType are now #PB_EventType_Up and #PB_EventType_Down instead of -1 and 1.
  • Changed: renamed ZoomSprite3D() to ZoomSprite()
  • Changed: renamed TransformSprite3D() to TransformSprite()
  • Changed: renamed RotateSprite3D() to RotateSprite()
  • Changed: renamed Sprite3DQuality() to SpriteQuality()
  • Changed: renamed Sprite3DBlending() to SpriteBlending()
  • Changed: renamed the whole 'Module' library to 'Music'
  • Changed: renamed Frame3DGadget() to FrameGadget()
  • Changed: renamed Frame3DGadget3D() to FrameGadget3D()
  • Changed: renamed #PB_Shortcut_Prior to #PB_Shortcut_PageUp and #PB_Shortcut_Next to #PB_Shortcut_PageDown
  • Changed: Packer plugin constant renamed to #PB_PackerPlugin_XXX
  • Changed: RayCollide() now returns the colliding #Entity.
  • Updated: WebGadget() on Windows doesn't needs ATL.dll anymore
  • Updated: zlib to 1.2.8
  • Updated: pqlib (PostgreSQL) to 9.2.4
  • Updated: ziplib to 0.11.1
  • Updated: SCNotification scintilla structure
  • Removed: Mozilla ActiveX support for WebGadget() on Windows as the last ActiveX version is way too old (2005)
  • Removed: Sprite3D library (merged with regular sprite library)
  • Removed: Palette library (outdated)
  • Removed: SetWindowCallback() on OS X, can be replaced with BindEvent()
  • Removed: RenderMovieFrame() and #PB_Movie_Rendered (outdated)
  • Removed: DisplayTranslucentSprite() -> replaced with 'Alpha' parameter for DisplayTransparentSprite()
  • Removed: DisplaySolidSprite() -> replaced with 'Color' parameter for DisplayTransparentSprite()
  • Removed: DisplayRGBFilter() -> can be replaced with a zoomed sprite with color
  • Removed: DisplayShadowSprite() -> can be replaced with DisplayTransparentSprite() with color
  • Removed: StartSpecialFX(), StopSpecialFX(), DisplayAlphaSprite(), ChangeAlphaIntensity(), UseBuffer()
  • Removed: Carbon subsystem on OS X, it was too old be used with new libs
  • Fixed: Many bugs

New in PureBasic 5.11 (Mar 20, 2013)

  • Fixed some compiler and libraries bugs

New in PureBasic 5.10 (Feb 15, 2013)

  • Added: Form designer is now integrated to the IDE !
  • Added: Fully reworked Packer library with ZIP, BriefLZ, 7z (unpacker only), LZMA and JCALG1.
  • Added: full IPv6 support to the network library.
  • Added: System library: ComputerName(), UserName(), MemoryStatus(), CountCPUs()
  • Added: Line continuation feature, with the following operands: ',' '|' '+' And Or Xor
  • Added: Constant string comparisons are now handled at compile time, allowing use in CompilerIf for example.
  • Added: CocoaMessage() for OS X
  • Added: 'Check syntax' to only compile the code without build/running an executable
  • Added: Array/List/Map parameter support to Interface methods
  • Added: Support for dynamic array/list/map support in structure/interface in Residents.
  • Added: #PB_Character, #PB_Unicode, #PB_Ascii and #PB_Integer flag support to FillMemory()
  • Added: #PB_RegularExpression_NoCase support to CreateRegularExpression()
  • Added: EncodeImage() with PNG, JPEG and JPEG2000 support
  • Added: #PB_Memory_NoClear support to Re/AllocateMemory()
  • Added: ImageFormat()
  • Added: #PB_Editor_WordWrap to EditorGadget()
  • Added: Multicharacter comparison in StringField()
  • Added: NbOccurrences parameter for ReplaceString()
  • Added: PostEvent(), EventData()
  • Added: return value to SetCurrentDirectory()
  • Added: #PB_String_NoCase mode parameter to FindString()
  • Added: #PB_Preference_NoSpace and #PB_Preference_GroupSeparator flags for preferences
  • Added: DatabaseColumnIndex()
  • Added: #PB_Cipher_URL and #PB_Cipher_NoPadding for Base64Encoder()
  • Added: URL compatibility to Base64Decoder()
  • Added: SetGadgetItemImage() for all gadget supporting item gadget image
  • Added: #PB_Gadget_ScreenCoordinate and #PB_Gadget_WindowCoordinate flag for GadgetX/Y()
  • Added: #PB_File_SharedRead (no effect on Linux/OSX), #PB_File_SharedWrite (no effect on Linux/OSX)
  • Added: #PB_File_Append and #PB_File_NoBuffering for OpenFile(), ReadFile() and CreateFile()
  • Added: #PB_Event_RightClick, #PB_Event_LeftClick and #PB_Event_LeftDoubleClick events
  • Added: Optional title parameter to OpenConsole()
  • Added: #PB_ScrollArea_ScrollStep added for ScrollAreaGadget()
  • Added: #PB_Ignore for ResizeImage()
  • Added: Bind a specific IP to CreateNetworkServer()
  • Added: Timeout, LocalIP$ and LocalPort parameter to OpenNetworkConnection()
  • Added: #PB_NetworkEvent_Disconnect support for NetworkClientEvent()
  • Added: #PB_Unicode, #PB_Ascii and #PB_UTF8 support to SendNetworkString()
  • Added: #PB_String_MaximumLength attribute for StringGadget()
  • Added: #PB_Event_DeactivateWindow support
  • Added: #PB_EventType_Change support for EditorGadget()
  • Added: #PB_Relative/#PB_Absolute flag for FileSeek()
  • Added: 'Offset' and 'Length' parameters to SHA1/MD5/CRC32FileFingerprint()
  • Added: GetSoundPosition(), SetSoundPosition(), SoundLength(), PauseSound(), ResumeSound()
  • Added: SoundStatus(), GetSoundFrequency()
  • Added: #PB_All support for SoundVolume()
  • Added: SetGadgetItemState() support for ExplorerListGadget()
  • Added: InputRequester add close
  • Added: InputRequester() added #PB_InputRequester_Password flag
  • Added: Random() added optional minimum value
  • Added: SetGadgetItemText() for ListIconGadget(): handling of chr(10) as in AddGadgetItem()
  • Added: made OpenWindowedScreen() stretch parameters optional
  • Added: ScreenWidth(), ScreenHeight(), ScreenDepth()
  • Added: SMTP AUTH support to mail library
  • Added: optional parameters to RemoveMailRecipient(), ability to remove all recipients
  • Added: ReadString(#File [, Flags [, Length]]) : length and #PB_File_IgnoreEOL support
  • Added: #PB_Window_InnerCoordinate support to WindowX/Y()
  • Added: #PB_Window_FrameCoordinate support to WindowWidth()/Height()
  • Added: #PB_Image_Raised support to ImageGadget()
  • Added: Support for FreeXXX(#PB_All) for all free commands
  • Added: #PB_Compiler_LineNumbering, #PB_Compiler_InlineAssembly, #PB_Compiler_EnableExplicit
  • Added: #PB_Compiler_ExecutableFormat, #PB_Compiler_IsIncludeFile
  • Added: #PB_Compiler_IsMainFile, #PB_Compiler_Filename
  • Added: Bool() compiler operator. Boolean operations are now forbidden without Bool().
  • Added: MacroExpandedCount internal keyword
  • Added: UndefineMacro
  • Added: Now XIncludeFile also take in account the main file, to avoid double inclusion
  • Added: TypeOf() for variable, structure and fields
  • Added: Defined(Label, #PB_Label) support
  • Added: CompilerElseIf
  • Added: Local labels
  • Added: Define now behave like Global and accept Dim(), NewMap() and NewList() on the same line
  • Added: 'Align' keyword support for structure, with a special #PB_Structure_AlignC value
  • Added: autocast of numeric values when string are involved, allowing to concatenate string and numeric in constants
  • Added: 'CONSTANTLIST' to Compiler interface
  • Added: editing history recording in the IDE to recover previous code states and for crash recovery
  • Added: AffectedDatabaseRows(), CheckDatabaseNull() to database library
  • Added: new Text3D library
  • Added: 'Mode' optional parameter to all ...Yaw/Roll/Pitch() functions
  • Added: 'Type' and 'Mode' optional parameter to CreateMesh()
  • Added: RayCast(), MouseRayCast(), NormalX(), NormalY(), NormalZ(), ScaleNode()
  • Added: UpdateMesh(), EnableManualEntityBoneControl(), MoveEntityBone(), RotateEntityBone(), MeshIndex()
  • Added: 'Type' optional parameter to AddSubMesh()
  • Added: 'Type' parameter to FinishMesh()
  • Added: GetMaterialColor(), GetMaterialAttribute(), ConvertLocalToWorldPosition(), ConvertWorldToLocalPosition()
  • Added: MaterialCullingMode(), FetchOrientation(), SetOrientation(), GetX(), GetY(), GetZ(), GetW(), GetLightColor()
  • Added: AttachEntityObject(): bone name can be empty, so the object is added directly to the entity
  • Changed: renamed SoundFrequency() to SetSoundFrequency()
  • Changed: renamed AddMeshVertex() to MeshVertexPosition()
  • Changed: renamed LightColor() to SetLightColor()
  • Changed: removed all MaterialXXXXColor() replaced by SetMaterialColor()
  • Changed: removed all XXXXLocate() replaced by #PB_Absolute flag for MoveXXXX() commands
  • Changed: removed ResizeEntity(), replaced by #PB_Absolute flag for ScaleEntity() command, same for ScaleNode()
  • Changed: replaced #PB_Sort_ with #PB_ to avoid possible errors
  • Changed: disallow native type for pointers
  • Changed: StrF/D(), trailing zeros are now automatically removed if no decimals are specified
  • Updated: OGRE core has been updated to 1.8.2
  • Updated: SQLite updated to 3.7.15.2
  • Updated: User-guide: new chapters about dynamic numbering and handling multiple windows added by spikey
  • Removed: SendNetworkFile(), ReceiveNetworkFile(), #PB_NetworkEvent_File to avoid possible security hole
  • Removed: DirectX7 and NT4 subsystem on Windows
  • Removed: SDL subsystem on Linux
  • Removed: PowerPC version for OS X
  • Optimized: FindString() is up to twice as fast
  • Fixed: Many bugs

New in PureBasic 5.00 (Nov 12, 2012)

  • Added: Cocoa support on OS X (now the default toolkit)
  • Added: 64-bit version of PureBasic for OS X
  • Added: Brand new Form Designer, for Windows, Linux and OS X
  • Added: Carbon subsystem for PowerPC and x86 version of PureBasic
  • Added: Multi-dimensional arrays in structure support
  • Added: InitScintilla() on Linux and OS X avoid compilation issues
  • Added: #PB_Window_NoActivate flag to OpenWindow() and HideWindow()
  • Added: #PB_EventType_RightClick support ScintillaGadget()
  • Added: Favorites section to the explorer tool (IDE)
  • Added: Trigger for custom tools when a new source file is created (IDE)
  • Added: SetWindowCallback() support to OS X to have callback events
  • Added: partial thread-safety to GTK (Linux)
  • Added: SpritePixelCollision() support for OS X and Linux
  • Updated: Scintilla updated to 3.2.2
  • Updated: Expat updated to 2.1.0
  • Updated: libjpeg updated to 8.0d
  • Updated: libpng updated to 1.5.12
  • Updated: Ogre to 1.8.0, bullet to 2.80, hydrax to 0.5.4, CEGUI to 0.7.7
  • Updated: ModPlug lib update to 0.8.8.4
  • Updated: Use of VC++ 2010 to compile Windows libraries (32-bit and 64-bit), resulting of better optimized code
  • Updated: French documentation has been greatly updated/enhanced, thanks to Jean R. VIALE.
  • Changed: SetModulePosition() is now in milliseconds, no more in pattern
  • Fixed: Many bugs
  • 3D Engine:
  • Added: EntityAnimation library
  • Added: NodeAnimation library
  • Added: VertexAnimation library
  • Added: Spline library
  • Added: CG Tookit support for the 3D engine (both DirectX and OpenGL), trough InitEngine3D()
  • Added: optional 'Mode' parameter to InitEngine3D()
  • Added: 'PickMask' parameter to MousePick() and CreateEntity()
  • Added: RenderWorld() now returns 'TimeSinceLastFrame', in milliseconds
  • Added: SkyBox() and SkyDome() now supports Fog()
  • Added: 'Color' and 'TextureSize' parameters to WorldShadows()
  • Added: #PB_World_UnderWater and #PB_World_WaterGodRays flags to CreateWater()
  • Added: RayPick(), CameraViewWidth(), CameraViewHeight(), CameraViewX(), CameraViewY(), CameraDirection()
  • Added: CameraDirectionX/Y/Z(), SetCameraFixedYawAxis()
  • Added: optional 'IsActive' parameter to render to texture for CreateCamera()
  • Added: ScaleMaterial(), MaterialFog(), ReloadMaterial(), ResetMaterial(), NodeFixedYawAxis()
  • Added: optional 'TextureCoordinateIndex' parameter to AddMaterialLayer()
  • Added: #PB_Material_Anisotropic support to MaterialFilteringMode()
  • Added: #PB_Default support as #Material to set the default settings for materials.
  • Added: #PB_Material_Wireframe, #PB_Material_Point and #PB_Material_Solid to MaterialShadingMode()
  • Added: SoundListenerLocate()
  • Added: Optional DirectionX/Y/Z parameter to NodeLookAt()
  • Added: optional 'Mode' parameter to MoveLight(), MoveEntity() and MoveNode()
  • Added: CreateTexture() now handle alpha textures as well
  • Added: #PB_Entity_Wireframe, #PB_Entity_Solid, #PB_Entity_Point, #PB_Entity_DisplaySkeleton to EntityRenderMode()
  • Added: FreeEntityJoints(), AttachEntityObject(), DetachEntityObject(), EntityBoneX/Y/Z()
  • Added: EntityBonePitch(), EntityBoneRoll(), EntityBoneYaw(), EntityFixedYawAxis()
  • Added: DirectionX/Y/Z optional parameters to EntityLookAt()
  • Added: EntityVelocity(), EntityAngularFactor(), EntityLinearFactor(), EntityCustomParameter(), EntityParentNode()
  • Added: EntityBoundingBoxX/Y/Z(), DisableEntityBody()
  • Added: #PB_Entity_VelocityX/Y/Z, #PB_Entity_MassCenterX/Y/Z, #PB_Entity_MaxVelocity to Get/SetEntityAttribute()
  • Added: LightAttenuation(), LightX/Y/Z(), LightDirection(), LightDirectionX/Y/Z()
  • Added: RotateLight(), LightPitch(), LightYaw(), LightRoll()
  • Added: GetScriptParticle(), CreateRenderTexture(), UpdateRenderTexture(), SaveRenderTexture()
  • Added: CreateCubeMapTexture(), EntityCubeMapTexture()
  • Added: HideEffect() now handle ribbon as well
  • Added: EffectID(), RibbonEffectWidth(), AttachRibbonEffect(), DetachRibbonEffect(), CreateLensFlareEffect()
  • Added: LensFlareEffectColor(), EnableHingeJointAngularMotor()
  • Added: Joint parameter for ConeTwistJoint(), HingeJoint(), PointJoint(), SliderJoint()
  • Added: #PB_HingeJoint_LowerLimit and #PB_HingeJoint_UpperLimit to Get/SetJointAttribute()
  • Added: Optional 'Pitch', 'Yaw', 'Roll' parameters to AddStaticGeometryEntity()
  • Added: FreeTerrain(), SetupTerrains(), CreateTerrain(), TerrainPhysicBody(), DefineTerrainTile()
  • Added: AddTerrainTexture(), BuildTerrain(), TerrainLocate(), TerrainHeight(), TerrainTileHeightAtPosition()
  • Added: TerrainTilePointX/Y(), TerrainTileSize(), GetTerrainTileHeightAtPoint(), SetTerrainTileHeightAtPoint()
  • Added: UpdateTerrain(), TerrainTileLayerMapSize(), GetTerrainTileLayerBlend(), SetTerrainTileLayerBlend()
  • Added: UpdateTerrainTileLayerBlend(), TerrainMousePick(), SaveTerrain(), TerrainRenderMode()
  • Added: special key handling to InputEvent3D()
  • Changed: CameraLookAt() doesn't change the direction anymore
  • Changed: Attach/DetachNodeObject() removed the 'type' object
  • Changed: 'InitialWidth' parameter has been removed for CreateRibbonEffect()
  • Removed: AnimateEntity() (replaced with Start/StopEntityAnimation())
  • Removed: #PB_Entity_Wireframe, #PB_Entity_Point and #PB_Entity_Solid to EntityRenderMode()
  • Removed: CheckEntityCollision(), NextWorldCollision(), FirstWorldCollisionEntity(), SecondWorldCollisionEntity()

New in PureBasic 4.61 (May 23, 2012)

  • Added: up-to-date VisualC SDK for Windows to create PureLibraries
  • Added: resource support for Win9x
  • Added: new User-Guide (PureBasic introduction) included in the reference manual
  • Updated: FASM version (1.69.35)
  • Updated: SQLite version (3.7.9)
  • Updated: PCRE version (8.30)
  • Changed: OpenGL subsystem is now default on linux (a new 'sdl' subsystem
  • has appear)
  • Fixed: 3D examples for linux
  • Fixed: WinAPI 64 bit residents (by Danilo)
  • Fixed: Quite some bugs in compiler and libraries

New in PureBasic 4.51 (Sep 2, 2011)

  • Fixed: Some compiler and libraries related bugs

New in PureBasic 4.50 (Jun 10, 2010)

  • Added: Support for Array, List, Map inside structures
  • Added: CopyList(), CopyMap(), CopyArray()
  • Added: FreeList(), FreeMap(), FreeArray()
  • Added: CopyStructure(), InitializeStructure()
  • Added: Volume support to PlaySound()
  • Added: Depth parameter to SaveImage()
  • Added: ImageDepth() flag to get the original or current image depth
  • Added: #PB_Image_Transparent flag for CreateImage()
  • Added: 32bit support to TGA image decoder
  • Added: RoundBox(), AbortFTPFile(), RandomData()
  • Added: #PB_2DDrawing_AllChannels mode for DrawingMode()
  • Added: Image support for ComboBoxGadget()
  • Added: Graphical console functions to linux
  • Added: Large file support to File library on Linux/OSX
  • Added: CryptRandom(), CryptRandomData(), OpenCryptRandom(), CloseCryptRandom()
  • Added: Many math functions: Exp(), ATan2(), Radian(), Degree(), [A]CosH(), [A]SinH(), [A]TanH(), IsNaN(), IsInfinity(), NaN(), Infinity(), Sign()
  • Added: 'Debugger' Library to control some debugger actions from code
  • Changed: The Image library now keeps images internally in 24bit or 32bit (loading and saving works with other bit depths)
  • Fixed: Quite some bugs in libraries and in the compiler
  • IDE/Debugger:
  • Added: Keyword underline for Break, Continue, ProcedureReturn
  • Added: StatusBar help for prototypes and interfaces
  • Added: Keyword sensitive indentation (block mode is still available)
  • Added: "Format indentation" option in the edit menu
  • Added: Indentation guides and whitespace options
  • Added: The ability to select multiple compilers in the compiler options
  • Added: Purifier tool for the debugger
  • Added: Full debugger compatibility between all OS and processors
  • Added: Network debugging for the standalone debugger
  • Added: Data breakpoints for the debugger
  • Added: Support for structured items in the 'View Array/List/Map' tab of the Variable Viewer
  • Changed: The Array, List or Map name in the Variable viewer should be entered with a "()" now to display their elements.

New in PureBasic 4.41 (Mar 24, 2010)

  • Fixed: Some compiler and libraries related bugs

New in PureBasic 4.40 (Mar 24, 2010)

  • Added: Native Linux x64 support
  • Added: Build-in Map library for hash tables
  • Added: 'Threaded' Keyword for thread-local variables
  • Added: Structure assignment copies the structure (a.point = b.point)
  • Added: ClearStructure()
  • Added: AESEncoder(), AESDecoder(), StartAESCipher(), AddCipherBuffer(), FinishCipher()
  • Added: Dylib support for OS X
  • Added: Joystick library for OS X
  • Added: Systray library for OS X
  • Added: Trim/LTrim/RTrim() got an optional character to trim
  • Added: #PB_Function, #PB_OSFunction, #PB_Map to Defined()
  • Added: ReverseString(), InsertString(), RemoveString()
  • Added: Blob support to databases
  • Added: UsePostgreSQLDatabase(): native PostgreSQL support
  • Added: Peephole optimizer to 64 bit versions to produce better code
  • Added: '.a' (ascii) and '.u' (unicode) native type to provide native unsigned byte and word
  • Added: FileBuffersSize() #PB_Default support change the buffersize to the next opened files
  • Added: #PB_URL_Protocol to Get/SetURLPart()
  • Added: #PB_Shadow_TextureAdditive
  • Added: FTPDirectoryEntryRaw(), FillMemory()
  • Added: Global, Protected, Threaded, Shared and Static accepts a type to affect variables declarations
  • Added: AddWindowTimer(), RemoveWindowTimer(), EventTimer()
  • Added: #PB_Window_Tool to create tool windows
  • Added: ShortcutGadget(), StatusBarProgress()
  • Added: StatusBarImage() now supports normal images (not just icons)
  • Added: #PB_Checkbox_ThreeState flag to create a 3 state checkbox
  • Added: CreateImageMenu(), CreatePopupImageMenu() for OSX
  • Added: Full alphachannel support for all GUI elements that display images
  • Added: Full alphachannel support for Image lib
  • Added: New drawing modes for 2DDrawing in ImageOutput()
  • Added: LinearGradient(), BoxedGradient(), CircularGradient(), EllipsicalGradient(), ConicalGradient()
  • Added: CustomGradient(), GradientColor(), ResetGradientColors(), CustomFilterCallback()
  • Added: DrawAlphaImage() for all outputs on all OS
  • Added: DrawAlphaImage() has a new transparency parameter and can be used to draw non-alpha images part transparent
  • Added: QuickDraw subsystem for WindowOutput() on OSX
  • Added: Sprite/ScreenOutput for OpenGL (all OS)
  • Added: DrawingFont() works for SDL output
  • Added: OutputWidth(), OutputHeight(), OutputDepth() for 2DDrawing
  • Added: GrabDrawingImage(), DrawRotatedText(), RGBA(), Alpha(), AlphaBlend()
  • Added: #PB_PixelFormat_ReversedY for pixel buffers that are stored upside-down (Windows ImageOutput or OpenGl)
  • Added: #PB_OS_Windows_7, #PB_OS_MacOSX_10_6 for OSVersion()
  • Updated: OGRE to 1.6.2, sqlite 3.6.14.2, PCRE to 7.9
  • Changed: Call(C)Function(Fast) parameters have been changed from 'Any' to 'Integer'.
  • Changed: OpenScreen() now accepts FlipMode and RefreshRate
  • Changed: FlipBuffers() doesn't take an optional parameter anymore
  • Removed: #PB_Image_DisplayFormat is now deprecated (value set to 24 to have 24bit as default)
  • Removed: SetRefreshRate() has been removed, the parameter is in OpenScreen() now
  • Fixed: Image Decoders are now threadsafe
  • Fixed: Quite some bugs in libraries and in the compiler
  • PureBasic IDE:
  • Added: Full project management
  • Added: Highlight matching keyword for keyword under cursor (tied to BraceMatching color setting)
  • Added: Edit->Goto matching keyword
  • Added: PB_TOOL_Preferences Environment variable for IDE tools
  • Added: Theme management to customize menu icons
  • Added: New 'Silk' theme based on the Iconsset by Mark James
  • Added: Autocomplete scans implicit variable declaration and respects scope
  • Added: Structure item autocomplete
  • Changed: moved encoding/newline setting from compiler options to file menu
  • PureBasic Debugger:
  • Optimized: greatly improved VariableViewer update speeds
  • Added: progressbar display if VariableViewer update takes long
  • Added: column sort capability to VariableViewer (Windows only)