.

PowerBASIC Console Compiler

"I recently bought the PowerBASIC Console Compiler for Windows. Great deal, and what a powerful package. I like it!"
- Ron Schwartz, Pension Actuary, RKS Consultants, Inc.

Ever wished for a 32-bit BASIC compiler? One with the straightforward DOS text mode interface but megabytes and megabytes of memory? Ever wished for a 32-bit Windows compiler that's truly easy to use? Well, now it's here. Today. The PowerBASIC Console Compiler for Windows. With PB/CC, it's a whole new Windows! Text mode for Win95, Win98, WinME, WinNT, and WinXP!

PowerBASIC Console Compiler CD

This newest version of PB/CC sports a number of exciting new features. A complete graphics engine, a printer package for Windows-Only printers, dynamic pointers, and thread local storage, to name just a few. But more about them later.

PB/CC supports INPUT, PRINT, LOCATE, LINE INPUT, INKEY$, INSTAT, CLS, COLOR, KEY, KEY$, and LPRINT. All of the standard text functions. But then we added more. CONSHNDL, CURSOR, INSHIFT, PAGE, PAGEACTIVE, PAGEVISIBLE, SCREENATTR, PCOPY, WAITKEY$ and WAITSTAT. A complete set of mouse handling routines. SCROLL any region of the screen in any direction. STDIN, STDOUT, and STDERR. Even a PARSE statement and PARSE$ function to extract delimited fields, and new options for the EXTRACT$ function, too. All the text tools you'll ever need.

What is a Console? The Console is a text mode interface connected right to the heart of 32-bit Windows. It looks and acts just like a text mode DOS program, but it's actually a True 32-bit Windows application! With a console application, there's no fluff, no animated puppets, just intense computing power. Port existing Basic code from DOS to Windows today! Access a flat memory model that's practically unlimited. Boost performance with true 32-bit code. Launch multiple concurrent threads. Use the CPU and numeric coprocessor directly with Inline Assembler. Choose Register Variables for your most critical code. With PB/CC, size and performance are the prime factors.

Console Program

Since the console device is a text-only window, can a console compiler offer graphics? Of course! Just open one or more graphic windows and you're ready to go! You'll use GRAPHIC PRINT to draw plain text or fancy text... Any font. Any size. Any color. Bold. Underline. Italic and strikeout. Mix any combination of fonts on any window. Print just about anything, just about anywhere, even on private bitmaps that aren't yet visible. You'll copy or stretch bitmaps. Shrink them or change them. Circles, ovals, lines and boxes. Fat lines, skinny lines, stylized lines. Arcs, circles, rounded rectangles. Ellipses, pie sections, polygons, polylines. Even get or set pixels -- one by one. Filled forms or empty. Colors or not. The choices are endless. You can mix new colors with those which exist, and measure proportional text size before you print it. Then create a custom scaling system, even with fractional floating point coordinates! Of course, once you've built that work of art, you need to load and save it. So load from a resource, load and save a BMP on disk!

Graphics Window

And then there's printing. Access to printers has always been something of an issue, but not any more. We've added extended printing (XPRINT), even for "Windows-Only" printers! Just like GRAPHIC for the screen, XPRINT offers it all on the printer. Print plain text or fancy text -- any font, any size, any color. Bitmaps and images, lines and boxes, circles and polygons, virtually all the features of the GRAPHIC screen are there for printers, too! You can retrieve the size of the printer page, the printable area, the margins, even the number of points per inch. Select landscape or portrait mode, even the print quality setting. The PRINTER$() function returns the name and port of every available printer. You can attach a printer by its name, by default, or just display a printer dialog to let the user decide. It's all in there.

Another interesting point is that graphics are extensible. Using the DC (Device Context) from PowerBASIC, you can call the Windows API, your own custom code, even third-party code for special graphic functions. With GRAPHIC GET/SET BITS, you can even manipulate the bitmap directly... each pixel is stored in succession as a long integer color value.

So, can you get here from DOS? But of course! PB/CC's high degree of compatibility with PowerBASIC, QuickBasic, GW-BASIC and BASICA means that you can port existing DOS applications to Win32 with ease. Stop CHAINing from module to module in DOS when you can create a single 32-bit machine code executable up to 2 gigabytes in size. And creating an array that uses 50 megabytes of RAM is as simple as:

    Dim x%(0 To 26214400)

So just how fast is PB/CC anyway? We thought you'd never ask! This tiny example may give you some idea of the power of 32-bit PB/CC.

    x## = 1
    y## = 1.000001
    t! = Timer     For i& = 1 To 100000000
        x## = x## * y##
    Next     t! = Timer - t!

What do we have here? 100,000,000 iterations of a simple floating point operation. On an AMD 64 CPU, PowerBASIC 3.5 for DOS runs this loop in 1.977 seconds. Pretty respectable, we think. PB3 has been benchmarked favorably against every sort of compiler... C++, Pascal, QuickBasic, you name it. It's always competitive.

So what about the 32-bit PowerBASIC? Same computer. Same operating system (WinXP Pro). Same source code, line for line. No attempt to minimize any background tasks. Elapsed time: 0.209 seconds. May we repeat that? Elapsed time: 0.209 seconds. That's an instant gain of around 945%! Win32 versions of PowerBASIC are more than nine times faster than the best DOS Basic around!

So why the big difference? A number of reasons... Attention to detail. Attention to results. A philosophy that requires us to provide the very best possible code generation. We simply don't believe that sloppy coding can always be overcome by ever faster hardware. At some point, every programmer (ours included!) must take on the obligation to write quality code... and we take that obligation very seriously. That's why our entire compiler, including all the library code to be linked, occupies less than 300K! Compare that to multi-megabyte compilers that seem more like dinosaurs! That's a simple example of the attention we pay to careful programming.

Of course, performance is a factor of technical design issues, too. Like Register Variables. Normally, every time a variable is altered, assigned, or retrieved, memory must be accessed. That's a relatively slow process, as compared to accessing CPU and FPU registers. So PowerBASIC stores 4 float variables and 2 integer variables from each Sub/Function in a register instead of memory. Simple concept, but very effective. If those variables are referenced frequently, the improvement can be dramatic. Moreover, we let the programmer decide which variables should be register variables... that way, you can decide which will be most helpful. And if you still decline to choose, PowerBASIC will try to pick the best candidates for you, from those at hand.

Just like PowerBASIC for DOS, our console compiler creates text mode applications. They just run faster, deal with gigabytes of memory, and offer access to the Win32 API. And since the source code is so similar to PB3 and QB45, it's incredibly easy porting DOS code to Windows today!

A complete Macro facility is an exciting addition to the latest version, and that's something seldom seen in a high level language. Essentially, a Macro invokes a text substitution engine which allows you to extend the PowerBASIC language in ways not seen before. PowerBASIC supports single line macros, multi-line macros, even function macros which return a result. And they don't occupy one byte of code space unless actually used. Each macro may take up to 240 arguments, so configurability shouldn't be an issue. MACROTEMP may even be used to specify identifiers which are made unique to each macro expansion, thus avoiding name conflicts. With PowerBASIC macros, you can design your own unique, personal language!

PowerBASIC is entirely thread-safe, so multi-threaded applications are a breeze. Isn't it good to know your program can handle 2, 3, or 5000 tasks, all at the same time? You can print a report, while still allowing data entry. Watch for a hardware signal, while calculating data services. All the power you need is packed right into the PowerBASIC THREAD Statement, along with its simple extensions. PowerBASIC even offers THREADED variables for "Thread Local Storage" -- each THREAD get its own unique copy of the variable -- automatically.

Client COM services, and support for the Automation Interface lets you tap the power of components. Invoke libraries and applications with ease, all controlled from your PowerBASIC client program. Invoke an instance of Microsoft Word, load and edit documents, all under the control of PowerBASIC? It's all there now, waiting for your command...

The PowerBASIC IDE had a serious makeover, and we think you'll like the results. First, the editor has block indent/outdent and block comment/uncomment! Then add more undo space, bookmarks in the editor, and source file templates, too. Debug load/unload is faster, and file save offers tab compression for even smaller files. The debugger and editor are unified, so you can set breakpoints in advance, even in include files. How many times have you wondered "Is there an array bounds error somewhere?" or "Where's that pointer error?" Well, here's how you find it! Just set the debugger to "Break on error". Your program runs normally, in the debugger, but halts as soon as any error is generated -- even if you have no error handlers installed. The new watch windows for variables and registers are moveable and resizable -- and all dialogs remember the last used size and location. Help files for add-ons are supported, and there's a direct link to Win32 API help, too. There's color syntax highlighting with selectable colors, fonts, and keyword case. Printed listings in color. The "Code Finder" list view shows every sub, function and macro name, aliases, types, and line numbers. You can sort on any column, in either direction, and change the column order in a flash. All this, and even more, make the new IDE a joy to use.

Extra debugging tools? PowerBASIC shines with an array of built-in functions. PROFILE gives an overview. A list of every sub and function, how many times each was called, and the total time spent executing each of them. CALLSTK captures all stack frames above you. It answers, "How did I get here?". TRACE generates an execution log of each sub, function, label, and TRACE PRINT, as they're executed in sequence. It gives you parameter values, return values, even error codes. TRACE answers "Where have I been?", and "How did I get here?". With these tools, debugging might now be fun!

You know, a quality compiler must offer data types to suit the needs. And PowerBASIC handles that with ease. Signed and unsigned integers to 64-bit. Single, double, and extended precision float. Two forms of currency. Dynamic strings, fixed strings, ASCIIZ strings. User-defined Types and Unions. Guids. Variants, pointers, and more. Now, we've added BIT and SIGNED BIT variables in TYPES and UNIONS. Each may be from 1 to 31 bits wide, packed one after another. Perfect for bit coding, or translation from C code. And FIELD variables? They work with the new FIELD statement, just like in DOS versions of BASIC. A FIELD is a string, mapped to a specific section of a file buffer, or even another string. They're allocated at run-time, so they can be changed as needed. Much like a TYPE that can be altered under program control. Best of all, a new internal design makes them fast, fast, fast!

Pointers are great, but sometimes the syntax is daunting, particularly for very simple tasks. So we implemented Dynamic Pointers, using the original PEEK/POKE as a model: xx# = PEEK(DOUBLE,addr&) This retrieves the double precision value stored at addr&, assigning it to xx#. Very straightforward and it works for all data types. And unlike the old PEEK and POKE, it's just as fast as a pointer variable! Speaking of simplification, LOCAL, STATIC, GLOBAL, and RESET can now use a list of variables, like: STATIC abc, bcd, xyz AS STRING And, ARRAY ASSIGN lets you assign values to every element of an array in a single statement!

Tired of the hassle of "drag and drop form designers"? Lost in a sea of API calls just to display text and numbers in a window? With PB/CC, it's a whole new Windows! Compile Basic code to sizzling text mode programs. For Windows 95, 98, Me, NT, 2000, or even WinXP. Put your programming effort where it belongs -- at the core of your code. And when your calculations are complete, it's a simple matter to PRINT, or even LPRINT, the results!

Did you say Internet? Create CGI apps for your web server! It's the perfect tool. PB/CC offers Standard Input & Output for easy communication. Get standalone executables as small as 10K. All with no run-time requirements of any kind. Whether your program looks up names, or simply calculates a mortgage, it can take data from a web form, process as needed, then deliver the results right to the browser of a distant end user.

You know, a typical shopping cart program written in Visual Basic needs some 5 Megabytes of RAM. So, using VB, you may find you're limited to around 20 simultaneous connections. But use PB/CC instead, and memory needs plummet! To around 100K total! That means 1000 simultaneous connections on that very same Web Server!

Built-in support for TCP and UDP means that your application can now communicate with far-away servers on the Internet or local servers on your Intranet. Send email messages with SMTP. Download web pages using HTTP. Even create your own TCP or UDP server for communication with other applications.

High-speed Serial Communications means you can can access modems or other serial devices without struggling with obscure API calls. Dial into remote computers that aren't connected to the internet with just a few lines of code.

Special features of PowerBASIC Console Compiler

  • #STACK sets the program stack size
  • ACODE$() translates unicode strings to ansi
  • ARRAY SORT, SCAN, INSERT, DELETE
  • ARRAYATTR() returns status, data type, subscripts, etc.
  • ASCIIZ strings supported for Windows compatibility
  • Assembler is built-in for opcodes through Pentium class
  • BIN$() allows optional leading zeros to a fixed field size
  • BIT CALC set/reset a bit based upon a dynamic calculation
  • BIT SHIFT, ROTATE, TEST, SET, RESET and TOGGLE
  • BITS() function for bit pattern conversion between signed/unsigned
  • CALLSTK captures the entire stack frame
  • CHOOSE(index&, choice1, choice2...) chooses one of several values
  • CHR$() function may take multiple or a range of parameters
  • Client COM/Automation Support - Access and manipulate COM Objects
  • Client/Server Network communications using TCP and UDP
  • CLSID$(program_id$) returns the associated CLSID
  • Code pointer variables particularly suitable for callbacks
  • Compile to true machine code for maximum performance
  • Conditional compilation (#IF/#ELSEIF/#ELSE/#ENDIF)
  • CONSHNDL returns the handle of the Console Window
  • CSET centers data within a string with optional padding character
  • Currency variables with choice of two or four decimal digits
  • Data pointer variables with multiple levels of indirection
  • DECR statement for optimized execution
  • DISKFREE function returns the free space
  • DISKSIZE function returns the disk size
  • Extended-precision (80-bit) floating point variables
  • EXTRACT$() returns characters up to a delimiter
  • FILECOPY Statement supports overwrite of a previous version
  • FILENAME$() function returns the name of an open file
  • FILESCAN obtains the number of strings in a file
  • FLUSH statement ensures file data buffers are written to disk
  • FUNCNAME$ returns the name of the current Sub/Function
  • GUID variables are supported for COM Objects.
  • HEX$() allows optional leading zeros to a fixed field size
  • Huge file sizes greater than 2 Gigabytes are supported
  • IIF(expr, truepart, falsepart) returns one of two values
  • INCR statement for optimized execution
  • ISFALSE and ISTRUE operators
  • ITERATE statement restarts loop structures
  • JOIN$() packs a string array into a dynamic string
  • LINE INPUT #1, x$() reads an entire sequential file
  • MACRO defines a single-line, multi-line, or function Macro
  • MACROTEMP defines Temporary identifiers
  • MAT statement provides optimized Matrix operations
  • MAX() and MAX$() functions take an unlimited number of arguments
  • MIN() and MIN$() functions take an unlimited number of arguments
  • Native support for I/O redirection (STDOUT, STDIN and STDERR)
  • OCT$() allows optional leading zeros to a fixed field size
  • PAGEACTIVE returns the current active page number
  • PAGEVISIBLE returns the current visible page number
  • PARSE$() function extracts a delimited field from a string
  • PARSE assigns each delimited string to an array element
  • PARSECOUNT returns the count of delimited fields in a string
  • PEEK/POKE, PEEK$/POKE$ for memory access
  • PRINT #1, x$() writes an entire array to a sequential file
  • PROFILE creates a complete profile of program execution
  • PUT #1,, x$() writes an entire array to a binary file
  • Quad-word 64-bit integer variables
  • READ$(n) function returns a specific DATA item
  • Register variables for both integer and floating point optimization
  • Regular Expression Search and Replace
  • REMAIN$() returns the remainder of a string after extraction
  • REMOVE$() returns a string with certain characters removed
  • REPEAT$() repeats an entire string expression
  • REPLACE statement replaces characters or expressions
  • RESET var sets a variable or array to zero or null
  • RND(x,y) returns a random integer between x and y
  • ROUND() function rounds a number to n decimal digits
  • SERIAL port communication is directly supported at all speeds
  • SETEOF statement sets the end-file position
  • Short-Circuit expression evaluation optimizes execution speed
  • STRDELETE$() deletes a portion of a string
  • String functions support ANY operator to operate on character basis
  • String functions support negative position to count from string end
  • STRINSERT$() inserts a string into another string
  • STRREVERSE$() reverses the character sequence in a string
  • SUB/FUNCTION may take up to 32 parameters
  • SWITCH(expr1, value1, expr2, value2...) returns one of a series
  • TAB$() expands tab characters to a specified tabstop
  • TALLY() counts the occurrences of a sub-string expression
  • Threads are supported as an intrinsic part of the language
  • THREADCOUNT returns the number of active threads
  • THREADID function returns the thread identifier
  • TRACE creates a trace log of complete program execution
  • TRY, CATCH, FINALLY, END TRY offers structured error handling
  • UCODE$() translates ansi strings to the unicode equivalent
  • User-Defined Types and Unions with optional alignment
  • Unsigned byte, word, and double word variables
  • USING$() function formats one or more expressions
  • Variant variables are supported for COM Objects.
  • VARIANTVT() returns the internal VT data type code
  • VERIFY() validates that all characters in string1 occur in string2
  • Win32 API may be easily accessed, including ODBC and TAPI

New Features in PB/CC Version 4

  • #COMPILER defines the compiler for this program
  • #CONSOLE ON|OFF enables/disables auto-creation of a console
  • ARRAY ASSIGN assigns values to multiple elements of an array
  • BGR function translates an RGB value to BGR format
  • BITS function converts signed and unsigned values.
  • CONSOLE GET LOC retrieves the location of the console on the desktop
  • CONSOLE GET SCREEN retrieves the rows and columns on the screen
  • CONSOLE GET SIZE retrieves the pixel size of the console window
  • CONSOLE GET VIEW retrieves the viewport position on the virtual screen
  • CONSOLE GET VIRTUAL retrieves the size of the virtual screen
  • CONSOLE SET FOCUS directs focus to the console
  • CONSOLE SET LOC moves the console window
  • CONSOLE SET SCREEN changes the size of the console window
  • CONSOLE SET VIEW moves the viewport position on the virtual screen
  • CONSOLE SET VIRTUAL changes the size of the virtual screen
  • DATA statement offers improved error checking
  • DESKTOP GET CLIENT retrieves the client size of the desktop
  • DESKTOP GET LOC retrieves the location of the client area of the desktop
  • DESKTOP GET SIZE retrieves the total size of the desktop
  • END statement terminates a program for DOS compatibility
  • ENVIRON modifies environment variables
  • ERL retrieves the last line number executed before an error occurred
  • FIELD defines the variables of a file buffer or a FIELD string
  • FILEATTR enumerates file numbers in use
  • GLOBAL may declare a list of variables of one type
  • GRAPHIC ARC draws an arc
  • GRAPHIC ATTACH selects a window or bitmap for drawing
  • GRAPHIC BITMAP END closes a graphic bitmap
  • GRAPHIC BITMAP LOAD loads a bitmap from a resource or disk
  • GRAPHIC BITMAP NEW creates an empty memory bitmap
  • GRAPHIC BOX draws a box with square or rounded corners
  • GRAPHIC CHR SIZE retrieves the character size of the selected font
  • GRAPHIC CLEAR erases a window or bitmap
  • GRAPHIC COLOR sets the default colors
  • GRAPHIC COPY copies a bitmap to a window or another bitmap
  • GRAPHIC ELLIPSE draws an ellipse or circle
  • GRAPHIC FONT selects a font and style for GRAPHIC PRINT
  • GRAPHIC GET BITS retrieves a device independent bitmap
  • GRAPHIC GET CLIENT retieves the client size of a graphic window or bitmap
  • GRAPHIC GET DC retrieves the Device Context handle
  • GRAPHIC GET LOC retrieves the screen location of a graphic window
  • GRAPHIC GET MIX retrieves the color mix mode
  • GRAPHIC GET PIXEL retrieves the color of a specific pixel
  • GRAPHIC GET POS retrieves the last graphic point referenced
  • GRAPHIC GET PPI retrieves the resolution of the display device
  • GRAPHIC LINE draws a line
  • GRAPHIC PAINT fills an area with a color or pattern
  • GRAPHIC PIE draws a pie section
  • GRAPHIC POLYGON draws a polygon
  • GRAPHIC POLYLINE draws a polyline
  • GRAPHIC PRINT draws text on a graphic window or bitmap
  • GRAPHIC REDRAW updates buffered graphics to a window or bitmap
  • GRAPHIC RENDER draws an image on a graphic window or bitmap
  • GRAPHIC SAVE stores an image to a bitmap (.BMP) file
  • GRAPHIC SCALE defines a custom coordinate system for a window or bitmap
  • GRAPHIC SET BITS redraws a device independent bitmap
  • GRAPHIC SET FOCUS directs focus to a graphic window
  • GRAPHIC SET LOC moves a graphic window
  • GRAPHIC SET MIX changes the color mix mode
  • GRAPHIC SET PIXEL changes the color of a specific pixel
  • GRAPHIC SET POS changes the last graphic point referenced
  • GRAPHIC STRETCH copies and stretches a bitmap image
  • GRAPHIC STYLE changes the drawing line style
  • GRAPHIC TEXT SIZE calculates the size of text to be printed
  • GRAPHIC WIDTH changes the drawing line style
  • GRAPHIC WINDOW creates a new graphic window
  • GRAPHIC WINDOW END closes a graphic window
  • HI returns the high part of many data types
  • INPUT reads a keyboard line to multiple variables
  • JOIN$ adds a binary option for enhanced data packing
  • KEY assigns a string expression to a function key
  • KEY$ retrieves the string assigned to a function key
  • LEFT$ may take a negative length value
  • LO returns the low part of many data types
  • LOCAL may declare a list of variables of one type
  • MAK creates values of many data types
  • MID$ may take a negative length value
  • NUL$ creates a string of nul characters
  • PARSE adds a binary option for enhanced data packing
  • PARSE$ adds a binary option for enhanced data packing
  • PARSECOUNT adds a binary option for enhanced data packing
  • PEEK acts as a dynamic pointer for any data type
  • PEEK$ acts as a dynamic pointer for strings
  • POKE acts as a dynamic pointer for any data type
  • POKE$ acts as a dynamic pointer for strings
  • PRINTERCOUNT retrieves the number of installed printers
  • PRINTER$ retrieves printer names and printer port names
  • RESET may accept multiple parameters
  • RESUME retries a statement which caused an error
  • RESUME NEXT jumps after a statement which caused an error
  • RIGHT$ may take a negative length value
  • SHELL offers a HANDLES option
  • STATIC may declare a list of variables of one type
  • THREADED declares Thread Local Storage variables
  • TYPE offers BIT and SIGNED BIT member variables
  • UNION offers BIT and SIGNED BIT member variables
  • XPRINT draws text on a "Windows-Only" (GDI) printer
  • XPRINT ARC draws an arc
  • XPRINT ATTACH selects a host-based (GDI) printer for XPRINT
  • XPRINT BOX draws a box with square or rounded corners
  • XPRINT CANCEL aborts a print job
  • XPRINT CHR SIZE retrieves the character size of the selected font
  • XPRINT CLEAR erases a window or bitmap
  • XPRINT CLOSE detaches a printer so printing can begin
  • XPRINT COLOR sets the default colors
  • XPRINT COPY copies a bitmap to the host printer
  • XPRINT ELLIPSE draws an ellipse or circle
  • XPRINT FONT selects a font and style for XPRINT
  • XPRINT FORMFEED starts a new printer page
  • XPRINT GET CLIENT retieves the client size of the host printer page
  • XPRINT GET DC retrieves the Device Context handle
  • XPRINT GET LINES retrieves the number of lines which can be printed
  • XPRINT GET MARGIN retrieves the margin sizes
  • XPRINT GET MIX retrieves the color mix mode
  • XPRINT GET ORIENTATION retrieves the paper orientation
  • XPRINT GET PIXEL retrieves the color of a specific pixel
  • XPRINT GET POS retrieves the last point referenced
  • XPRINT GET PPI retrieves the resolution of the host printer
  • XPRINT GET QUALITY retrieves the print quality setting
  • XPRINT GET SIZE retrieves the total page size
  • XPRINT LINE draws a line
  • XPRINT PIE draws a pie section
  • XPRINT POLYGON draws a polygon
  • XPRINT POLYLINE draws a polyline
  • XPRINT RENDER draws an image on the host printer page
  • XPRINT SCALE defines a custom coordinate system for a window or bitmap
  • XPRINT SET MIX changes the color mix mode
  • XPRINT SET ORIENTATION changes the paper orientation
  • XPRINT SET PIXEL changes the color of a specific pixel
  • XPRINT SET POS changes the last point referenced
  • XPRINT SET QUALITY changes the print quality setting
  • XPRINT STRETCH copies and stretches a bitmap image
  • XPRINT STYLE changes the drawing line style
  • XPRINT TEXT SIZE calculates the size of text to be printed
  • XPRINT WIDTH changes the drawing line style
  • XPRINT$ retrieves the name of the attached host printer

Minimum System Requirements

  • Personal computer with a 80386 or higher processor
  • Any 32/64 bit version of Windows including WinVista or Win2008.
  • A hard disk with 11 Mb available for installation
  • CD-ROM or DVD drive, or Internet connection, for installation
Buy Now

Order Today   Read about our Satisfaction Guarantee

PB/CC 4 is priced at $169. Registered owners of PB/CC 3 can upgrade to PB/CC 4 for $89, while upgrades from prior versions are $119. Delivery costs are additional.

Click here for more information about upgrades.

On-line Manual for
PB Console Compiler 4
Documentation for this product is provided in electronic form. An optional printed manual is available for $39 plus shipping.

See also...

. .