changes between 2.80 and 2.90.1

    General:
  • New utility (cecap) for capturing screenshots from remote devices (Pocket PC and Smartphone).
  • The Bind and Rebase utilities will now accept forward slashes, and also quoted strings in command files.
  • The CAB Builder will now accept forward slashes.
  • The Help file is updated for the new command line tools, runtime functions, and the IDE.
  • Default file extensions, for all tools, should now be lower case.
  • The libraries strsafe.lib and htmlhelp.lib are now part of the distribution.
  • 2.90.1: New utility (poviewp) for viewing running processes.
  • 2.90.1: The Registry Editor now have a Refresh command.


  • IDE:
  • Added support for displaying a structure/union member list in the source editor (see help file).
  • Added new commands to the source editor: Delete word (Ctrl+Backspace), Go to previous bookmark, View/Hide foldings, Expand/Collapse all foldings.
  • Added support for making (temporary) backup copies of source files.
  • Source editor will now use block cursor in replace mode.
  • Restored the possibility to have a question, before a search wraps, at the top/bottom of a file.
  • The source editor will try to position the cursor better, when moving up or down in the text.
  • Added support for opening resource scripts with syntax errors in the source editor.
  • When opening a project, the IDE will now try to restore all previously open documents.
  • Added several new project settings.
  • Smarter update of browse information when files are added to, or removed from, a project. Makes large projects much faster to work with.
  • Browse information will be built for assembler (MASM) files too. Functions should be visible in the project tree.
  • Added support for 'other files' in projects. Only text files are supported. This means stricter classification of what is a source file, and what is an 'other' file.
  • Added support for Rebar, Pager, Toolbar and Statusbar controls in the dialog editor.
  • Added support for visually changing tab order in the dialog editor.
  • Added better support for renaming dialog controls.
  • The dialog editor's check for duplicate mnemonics will now include group boxes.
  • Added support for SS_OWNERDRAW style in the dialog editor.
  • Added Fisheye lens effect to the image editor.
  • Added Hue-Saturation-Value adjustment to the image editor.
  • Added support for reading and writing GIF files in the image editor (the stupid license should be gone in most parts of the world now).
  • Added support for moving menu items, in the menu editor, through drag-and-drop.
  • Added support for pasting normal text into the binary editor.
  • Added new syntax color for operators.
  • Added support for both foreground and background color for all color elements.
  • Added (some) support for debugging add-ins and project wizards.
  • Breakpoints set in the debugger will now be reflected back to the project. Breakpoints set on impossible lines, in the source editor, will now be permanently turned off by the debugger.
  • Added Address column to Auto, Watch, Locals and Globals tabs in the debugger.
  • Added support for changing processor flags through dialogs in the debugger.
  • Double-clicking a function in the project tree, while in the debugger, will now jump to that function in the debugger.
  • Debugger will now display the current function on the status bar.
  • Added vertical scrolling to the debugger.
  • Added context menu to MDI document tabs.
  • Added support for sorting resource names in the resource tree.
  • Added new add-in functionality. Added new Options tab for add-ins.
  • Added support for better font handling.
  • Increased the maximum line length, in the string table editor, to 32,767 characters.
  • Added support for specifying character set in the version editor.
  • Added limit for array elements displayed by the debugger. Default is 100 (can be changed through, and only through, the Registry entry HKEY_CURRENT_USER\Software\Pelle Orinius\PellesC\Debugger - MaxArrayElems).
  • The Import MSVC project wizard will now copy source files, if the project directory is different from the import directory.
  • Project wizards will now try harder to use the same language as the IDE.
  • 2.90.1: Will now display the compiler and linker version in the About dialog.


  • Compiler:
  • Added support for the __fastcall calling convention. Generally not so useful, but required for device driver development.
  • Added option /Gr to enable __fastcall as the default calling convention.
  • Added option /cbstring for device driver development.
  • Added options /O1 and /O2 as aliases for /Os and /Ot.
  • Added option /MD to enable the dynamic runtime library: POCRT.DLL.
  • Added #pragma warn, to enable or disable warning messages.
  • Improved handling of intrinsic functions. Better code is generated. Added #pragma intrinsic and #pragma function, to give better control over which runtime functions are inlined. Added strcpy, _rotl, _rotr, _lrotl, _lrotr, _inp, _inpw, _inpd, _outp, _outpw, _outpd, _rdtsc and _bswap to the list of intrinsic functions.
  • Added #pragma nodefaultlib.
  • Improved support for Microsoft extension 'cast on lvalue'. Warning about this moved to level 2.
  • The compiler will not define the macro __STDC__ in Microsoft mode. This, together with some other changes, makes it possible to compile using Microsoft #include files (from the Platform SDK, for example).
  • Added support for DB, DW, DD and DQ in the inline assembler. In Microsoft mode, the pseudo instruction _emit can be used as an alias for DB.
  • Completely rewritten support for long long's. Should work better now. At least no more 'a64' errors.
  • Simplified and improved handling of arguments and locals in the ARM backend. Better support for large functions.
  • Many small code improvements added to both the X86 and ARM backends.
  • Better optimization of leaf functions (functions not calling other functions).
  • The compiler driver now supports command files, and renaming the executable file.
  • Will now assign the value 1 to _WIN32 and _CHAR_UNSIGNED, rather than just defining the symbols.
  • 2.90.1: New option (/Gm) for always undecorated __stdcall and __fastcall symbols.


  • Linker:
  • Added many small changes so that the linker can produce a valid device driver image.
  • Added option /OSVERSION to set the operating system version in the executable image. Changed the behaviour of the option /VERSION to set the image version.
  • Will now accept forward slashes, and also quoted strings in command files. Remember to quote the entire option like "-out:name with spaces.exe" not -out:"name with spaces".
  • Changed meaning of the option /RELEASE.
  • The resource section ('.rsrc') will now be emitted last (in most cases, at least).
  • Absolute symbols will now be listed in MAP files.
  • Will only use the first member directory in archives, to work better with libraries from other tools (like MinGW).

    Library Manager:
  • Will now accept forward slashes, and also quoted strings in command files.
  • Will now use the Windows temporary file directory when building the library (not the current directory).


  • C runtime:
  • Added new memory manager (for malloc, realloc, free). The HEAP is now divided into a 'small block' HEAP and a 'large block' HEAP. The threshold for small/large blocks can be changed through the global variable __bheap_threshold. The 'small block' HEAP will handle fragmentation better, the 'large block' HEAP will be able to use all available memory. The new memory manager is usually faster than the old one.
  • Added runtime functions _isascii, _iswascii, _rotl, _rotr, _lrotl, _lrotr, _inp, _inpw, _inpd, _outp, _outpw, _outpd, _rdtsc, _bswap, _snprintf, _snwprintf, _vsnwprintf, _vsnprintf.
  • Added support for dynamic runtime library: POCRT.DLL.
  • Added remove, rename, rewind, _chdir, _mkdir, _rmdir to CRTCE.LIB (missing from Microsoft's C runtime on Pocket PC).


  • Bugs:
  • Bugfix: The compiler will now accept redundant calling convention specifiers.
  • Bugfix: The compiler could sometimes emit inline functions to the wrong section.
  • Bugfix: The compiler ARM backend didn't always handle load/store of double's correctly.
  • Bugfix: The compiler didn't sign-extend values after left shift (long long's).
  • Bugfix: The compiler option /Gn (undecorated stdcall names) undecorated everything in it's way, even imported names.
  • Bugfix: The compiler preprocessor should now evaluate expressions like #if (2 - 1 - 1 != 0) left-to-right, rather than right-to-left.
  • Bugfix: The compiler will now emit values for __STDC_VERSION__ and __STDC_ISO_10646__ as long (with L suffix)
  • Bugfix: The compiler would crash if the inline specifier was applied to a function prototype, but not to the actual definition.
  • Bugfix: The compiler accepted VLA's (variable-length arrays) in global scope.
  • Bugfix: The compiler accepted redeclarations of typedef's.
  • Bugfix: The compiler will now accept struct . field (with spaces) in the inline assembler.
  • Bugfix: The compiler could crash if the conditional operator (?:) was used in an argument to an intrinsic function with two arguments (why didn't I think of that...)
  • Bugfix: The Registry Editor failed when trying to create a key at the top level (directly under HKEY_CLASSES_ROOT, for example).
  • Bugfix: The ARM disassembler in PODUMP listed some instructions wrong.
  • Bugfix: The linker didn't like merging code sections with data sections.
  • Bugfix: The browse information manager didn't properly skip quoted strings.
  • Bugfix: The CAB builder must write multiple files in reverse order (a Microsoft 'feature' ?).
  • Bugfix: Fixed several C #include files for Pocket PC (Pelles C uses the Microsoft runtime DLL on Pocket PC, which caused some incompatibilities).
  • Bugfix: Also the wide-character functions will print (null) for NULL strings.
  • Bugfix: The linker will now handle extended relocations correctly.
  • Bugfix: The linker didn't handle /ALIGN option correctly.
  • Bugfix: The compiler had problems with optional arguments in some cases.
  • Bugfix: The compiler had problems mixing pointers to defined and incomplete structures (Microsoft mode).
  • Bugfix: The IDE messed up menus for Pocket PC and Smartphones.
  • Bugfix: The dialog editor will now 'snap to grid' only if the grid is visible.
  • Bugfix: The dialog editor had problems with SS_ETCHEDHORZ, SS_ETCHEDVERT, SS_ETCHEDFRAME and SS_LEFTNOWRAP, SS_SIMPLE styles.
  • Bugfix: The debugger disassembler had problems with some addressing modes.
  • Bugfix: The 'Just-in-time' debugger setting caused problems without Administrator rights.
  • Bugfix: The IDE will never use IDOK, IDCANCEL for resource identifiers.
  • Bugfix: The compiler warned about overflow for 128<<24, but not for 1<<31.
  • Bugfix: The compiler warned about constant comparison for an unsigned constant expression. Duh.
  • Bugfix: The resource compiler didn't handle multi-byte strings, in string tables, correctly.
  • Bugfix: The menu editor could crash when activating a previously opened menu.
  • Bugfix 2.90.1: The compiler should now properly handle bit-field types other than int/unsigned int.
  • Bugfix 2.90.1: The compiler will now ignore __declspec(dllimport) when target is ARM.
  • Bugfix 2.90.1: The Windows runtime function fflush is now limited to stdin for input streams - the previous addition caused problems with other file operations, like fseek.
  • Bugfix 2.90.1: The compiler should now expand the macro BITMASK, in an expression like 0xff-BITMASK (without spaces).
  • Bugfix 2.90.1: Definitions in tlhelp32.h will now work on Pocket PC.
  • Bugfix 2.90.1: The template used to create new menu (MENUBAR) resources on Pocket PC was corrupt.
  • Bugfix 2.90.1: The linker had problems with empty sections for initialized data.