March 28, 2024, 03:42:04 AM

News:

IonicWind Snippit Manager 2.xx Released!  Install it on a memory stick and take it with you!  With or without IWBasic!


IWBasic Ver. 2.0 now available

Started by Ionic Wind Software Team, March 09, 2011, 01:33:04 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Ionic Wind Software Team

March 09, 2011, 01:33:04 PM Last Edit: August 22, 2011, 09:11:30 PM by LarryMc
Ionic Wind Software is pleased to announce the long awaited release of IWBasic Ver 2.0.

New in IWBasic Ver 2.0:
___________________________________
- $OPTION added to control 19 compiler options from within sourcecode:

  • Codepage - Sets the codepage for unicode strings.
  • ErrorLimit - Sets the upper limit for compiler error messages.
  • IncludePath - Add a search path for include files.
  • AsmVariables - Define formal and local variables for inline assembly code.
  • Warning - Sets a new or modifies the current filter for warning messages.
  • Return - Force the compiler to not alter eax,edx when returning from a subroutine.
  • Intrinsic - Enable/disable intrinsic functions.
  • Optimization - Enable/disable Optimizations.
  • CaseSensitive - Enable/disable case sensitive compilation.
  • NoVtable - Controls generation of vtable in classes.
  • Strict - Show any possible problems, for example unknown type in DECLARE (even unused).
  • ZeroVariables - If active, local variables will be initialized to zero.
  • /m - Enable or disable $main.
  • /a - Compile and assemble.
  • LibPath - Add a search path for .lib files.
  • QuoteLibPaths - Quote spaces in $$$lib.link file.
  • ResolveLibs - Convert all relative paths passed to $USE, to full paths.
  • DimOrder - Change the order of variables definition
- Set 10 compiler options from command line

  • option /As - Compile and assemble. Optional s is passed to nasm.
  • option /Bpath - include file <path> before parsing the main file.
  • option /C number - change default codepage from Ansi (CP_ACP) to number. This option ensures that unicode strigs L"" are properly converted from multibyte character set (controlled by your text editor) to unicode binary data.
  • option /D name{=value} - define a numeric constant.
  • option /E number - show up to number errors; default is 5. Does not apply to syntax errors.
  • option /H or /? displays this help.
  • option /I path - add a search path for include files. Pass full path, or a relative path to current file
  • option /P defines arguments and local variables for use in inline assembly.
  • option /R - Inputfile specifies a path to response file, where each line is a pathname to an IWBasic source file.
  • option /W number - disable warnings. 1: uninitialized variable, 2: unreferenced variable, and 5 more for advanced users. If not specified then all warnings are enabled.
- IDE dialog added for setting 18 compiler options

  • Always initialize assembly variables
  • Disable hidden "return 0"
  • Always use intrinsic functions
  • Turn on optimizations
  • Case sensitive compilation
  • Do not generate vftable in classes
  • Generate object instead assembly file
  • Be strict
  • Turn off autodefine
  • Initialize local variables to zeros
  • Call Function instead of [__imp_Function] in assembly
  • Resolve relative lib paths
  • Quote lib paths in $$$lib.link file
  • Try to create missing import libraries
  • Define the leftmost variable first: inta,b,c,d
  • Define constants ( with or without a value )
  • Define additional search paths for include files
  • Define additional search paths for lib files
- Added special constants

  • __WARNINGFILTER__  - returns the current warning filter
  • __CODEPAGE__  - returns the current codepage
  • __FILE__  - returns the current file path (a string)
  • __LINE__  - returns the current line number
  • __IWVER__  - returns a number with compiler version 0x02xxyyzz.
  • __CASESENSITIVE__ - will be defined if case sensitive mode has been enabled
- ANSI Strings

  • Added escape sequences \octal and \xHEX
  • Added multiplication operator: string*boolean - returns string if boolean=true; empty string if boolean=false.
  • & before "text" returns address of the string when assigning to non-string type.
  • Added `expr` where expr can be up to 4 bytes (4 or less characters). `A` will return 65.
- Unicode Strings

  • Added escape sequences \octal and \xHEX
  • Added multiplication operator: string*boolean - returns string if boolean=true; empty string if boolean=false.
  • & before "text" returns address of the string when assigning to non-string type.
  • Added `expr` where expr can be up to 4 bytes (2 or less characters). L`A` will return 65.
  • UTF-8 encoded strings are supported up to 6 bytes per character.
  • DBCS encoding is supported.
  • UTF-8 BOM marker (at the beginning of source file) is now detected.
- Automatic string conversion (from/to unicode) when returning from a function.
- Added OEM string modifier, to create strings with diacritical characters, for display in console window.
- Preprocessor

  • $USE will search for libraries relative to current file path location, then in default locations.
  • Added keywords - $undef, $error, $warning, $if, $elif, $elifdef, $elifndef  
  • $END - all text in source file after this keyword is ignored.
- Added $REGION and $ENDREGION
- Operators (=,==,<>,!=,+,-,*,/,%,|,or,||(xor),&,&&,and,<<,>>,!,~,>,>=,<,<=) can be used with:

  • Preprocessor keywords
  • CONST
  • ENUM
  • $DEFINE
- Added operators

  • a?b:c - inlined version of IIF function.
  • == - equal
  • != - not equal
  • && - and
  • ~ - bitwise NOT
  • a=b++ - post increment
  • a=b-- - post decrement
  • b=--b  - pre decrement
  • a=++b - pre increment
- Subroutines

  • Added STATIC keyword to define static variables.
  • Added private LABELS inside subroutines.
  • Subroutine definition can wrap to multiple lines.
- Variables, constants ($define, const, setid, enum), typedef, structures and subroutine (sub, export) can be of any size.
- PRINT function has a short version: ?
- Variables and methods can be imported.
- New variable types:

  • TSTRING  - If UNICODE is defined, it will be WSTRING, else STRING.
  • ITSTRING - If UNICODE is defined, it will be IWSTRING, else ISTRING.
  • Added "T" string modifier to use with above.
- Assembly

  • Added $emit, $asm, $endasm keywords
  • Added "DECLARE name AS type" for assember labels for assembler raw data.
- Constant identifiers added

  • uq - unsigned quadword
  • b - binary
  • bu - binary unsigned
  • bq - binary quadword
  • buq - binary unsigned quadword
- Loops

  • Added BREAK keyword.
  • Char and word (signed or unsigned) can be passed to WHILE statement.
- Structures / UDTs

  • $IF directives are now allowed inside TYPE-ENDTYPE
  • Unlimited nesting levels allowed.
  • Nested UNIONs can have optional name.
  • Added single-byte initializer for structures.
- Added new definition syntax:

  • variable = NEW type
  • variable = NEW type[count]
  • typedef newtype structureName
  • typedef newtype className
  • typedef newtype interfaceName
  • interface name, base_interface
- Added structured exceptions handling. New keywords:

  • TRY
  • CATCH
  • THROW
  • LEAVE
- Added construction and destruction for classes defined in a structure (any level).
- Added fold points in IDE for do-until, for-next, while-endwhile, if-else-endif, select-endselect.
- Special return types:

  • FPU - marks a function as returning a float/double in the ST0 FPU register (for Bass users).
  • __m128 - marks a function as returning an array of 4 floats or two doubles in XMM0 register (SSE users).
- Added macro capability

  • Define with $Macro keyword
  • Undefine with $UNDEF
  • Test for existence with $IFDEF
  • Call a function from inside macro
  • Create multi-expression macros.
  • Added special macro: defined(name) - returns TRUE if 'name' is defined.
  • The = operator inside a macro will always assign a value, and == will compare.
- The LEN statement can be now used in expressions requiring a constant value, known at compile time.
- Added SIZEOF - Return the size in bytes of memory reserved for a variable (numbers, arrays, strings, classes, ...).
- GLOBAL keyword now accepts multiple variables.
- Added THREAD keyword - used to create thread-private variables.
- Automatically creates missing import libraries, when possible.
- Numerous internal changes to optimize code generation. (30+% improvement over benchmark)
- Numerous improvements in error reporting.
- User's guide is furnished in chm, pdf, and eBook formats.
- Added License Agreement and Change History to help file.

 Free User's Guide       [PDF Version] [eBook Version]
 Free ControlPak Guide [PDF Version] [eBook Version]

 Click here for an overview of IWBasic

 Try Before You Buy

 Download IWBasic Ver 2.0 here

 (Fully functional, 15 day trial. Contains purchase link*.)

 NOTE: *Owners of previous versions should contact Larry Sikes for special one-time pricing
           after downloading but before purchasing.


 Thank you for your continued support.
 The Ionic Wind Software Team
Ionic Wind Software Team