Chipmunk Tiny Basic for PalmPilot README and Command Summary for cbasPad version 0.97b4 Please see the Revision History for important changes. Abstract: This README contains a description of cbasPad, a Tiny Basic programming language interpreter with integrated text editor for the 3Com PalmPilot. Features include math functions, sounds and morse code and simple graphics. See below for a complete list of commands, statements & functions. See for HotPaw (cbasPad Pro) yBasic, the currently maintained and much fuller featured BASIC interpreter for PalmOS 3.0 and newer devices (such as the Palm Vx and Handspring Visor). Contents: Introduction Installation Running a cbasPad Basic program Basic Statement, Command & Function Summary Additional Commands & Functions Some Warnings Examples Revision History FAQ Copyright and Disclaimer notice Introduction This a version of Tiny Basic for the 3Com PalmPilot palmtop computer. BASIC is an easy to learn computer programming language, invented at Dartmouth college around 1963. Various TINY Basic implementations were written around 1976 for use in early personal computers with very limited memory configurations (8 KBytes or less). The cbasPad interpreter was written as an experiment in writing a small Basic interpreter in portable C. After the first versions of integer cbasPad were written, various features were added to make it more useful. These added features include some limited floating point math, and various "op" commands and "fn" functions to access the PalmPilot hardware and databases. Please note that this version of cbasPad uses the old buggy PalmOS 1.0 Fpl math lib plus some simple attempts at patching some of the anomalies in this math library; thus some simple floating point math calculations will occasionally produce or display **incorrect** and wrong results. If you need more accurate calculations, produced by using the new PalmOS 3.x floating point library or the MathLib library, please upgrade to HotPaw (cbasPad Pro) Basic, found at: *** Installation: - Use the 3Com/USR Install Application and then HotSync. - You may need to select "All File Types" since a zip file doesn't preserve the Mac file creator type info. - If HotSync fails, you may need to manually delete any prc files left in your install directory in order to get HotSync working again. - If you have the 1.0 OS, you may need to install the OS 1.0.6 patch to install a program this large. - Use a defragmentation app to check for memory fragementation if you still have out-of-memory problems during an install hotsync. - cbasPad 0.92 requires a memory heap with at least one 32K block. Installing cbasPad Basic programs: - cbasPad uses it's own memo database and it's own built in memo editor. This is to prevent any accidental overwriting of the MemoPad database. - You can just hit "New";and write you own Basic program. - You can use the "import" menu item to import a page from the MemoPad. A dialog box will ask you for the Memo title. - The following web site has win32 tools for combining several cbasPad programs into one pdb file: - The following web site had a Win95 HotSync conduit for cbasPad: Running a cbasPad Basic program: - From the edit page, you can select a range of unnumbered lines and hit the "Exec" button. - From an edit page, you can hit the "Select All" button and then the "Exec" button to run either direct mode statements or the first program on the page. - From the main cbasPad index page, you can select a program from the list and hit the "Exec" button. - To stop a running program, hit the "Done" button. - To stop a running program when an input dialog is present, use the "Stop" menu item. *** The cbasPad BASIC Programming Language The cbasPad language is mostly compatible with books on programming in the BASIC language that were published between 1977 and 1988. Since these books are mostly out of print, your best bet is to try your local public library. cbasPad is a minimal subset of the Basic language, so many features of a full version of the Basic language are not present. cbasPad requires that every program begin with the "new" command and end with the "run" command. These commands should not have line numbers. Any un-numbered lines before the first "new" command are executed in direct mode (as they are encountered.) cbasPad either requires that every program line have a line number, or requires the use of the #autonum comment. If #autonum is present, then any lines without numbers are automatically assumed to have a line number that is one greater than the line number of the previous line. This means that any line numbers used as labels for "goto" and "gosub" targets must be in order and spaced far enough apart for all the intervening lines. cbasPad-memo's are limited to about 4000 characters in length. To create a longer program, one can use the #include <#TITLE> comment. cbasPad will look for a cbasPad-memo titled "#TITLE" and insert lines from that memo as an in-line [sub]routine The "print" command will append output at the end of the current cbasPad-memo. Use "dprint" or "?" to send output to a dialog box instead. You can also change the cbasPad-memo used for print output by using the op "page" command. A program can use the op "page",-1 command to create a new cbasPad-memo page for print output. There is a fairly complete list of www pointers to information on the generic Basic language near the end of my 'Basic' web page: *** Basic Statement, Command & Function Summary: Comment lines are lines that start with the '#' character. Operators, Statements, Functions and Reserved Keywords: Operators: + - * / mod ^ = <> > >= < <= and or xor not Commands and Statements: let print dprint ? input if then for to step next gosub return goto : dim float end run new rem # Functions: int() rnd() abs() sgn() sqr() exp() log() sin() cos() tan() atn() len() val() str$() chr$() hex$() mid$() asc() Special functions and commands: fre peek() poke call varptr() eval() fn op grline sound sersend Variables and Constants: Hex constants may be entered by preceding them with "0x". Variable names may be up to 15 characters in length. Integer variables names must end with the '%' character. Floating point numbers and variable are represented by a format similar to IEEE single extended. When the '#opt int' pragma is present, variables without a suffix start out as integer variables; but promote to floating point if a floating point value is assigned. Use the "float" statement to declare a floating point variable in this mode. String variables must end with the '$' character. There is a limit of 30 string variables and 1 built-in string array. Notes: ALL keywords must entered in be lower case. Lines starting with the character '#' are ignored (comments). The '#include ' comment will include statements from the cbasPad page starting with TITLE in its first line. The include comments may not be nested. cbasPad arithmetic expressions are severely limited in complexity so as to not overflow the very small PalmOS 2k application stack. In some cases parenthetical nesting may be limited to 1 level. Exponentiation must be parenthesized. e.g. x = (y ^ 2.0) The "and", "or" and "xor" operators do bit-wise operations; "not" is a boolean operator and only returns 1 or 0. print : appends to the end of the cbasPad-memo text. dprint : prints to a mini-dialog box. ? : a question mark is an alternate symbol for dprint. The "let" before an assignment is optional. dim : Numeric arrays must be dimensioned before use and are limited to one dimension. fre : returns size of free dynamic heap space. rnd(n) : returns a pseudo random integer in the range 0..n-1 int(x) : truncates toward zero. Transcendental functions only work with explicit floating point operands. log(x) : natural log (base e) sin(x) : trig function, x in radians Current String Limitations: There are a maximum of 30 string variables plus one string array; use more than 30 and you may just get aliases to existing strings. The maximum length of a string is 31 characters. Only the "=" comparison works for strings. Use "+" to concatenate two strings. Complex expressions involving strings don't work. Only 1 string array is allowed: s$(). (auto-dimensioned to 31) Current Floating Point Limitations: Power operation - (*** Parenthesis required! ***) x = (x ^ y) raises x to the y power. The parenthesis are required in cbasPad. The error of transcendental functions is unknown. Integer addition/subtraction can overflow 2^31. Integer values greater than 2^31 may overflow unless declared float. If '#opt int' comment is present, mul/div of integer operands will default to integer math. *** Program Execution Statements without line numbers, but before a "new" statement, are executed in direct execution mode in the order they are listed. Statements with line numbers or between a "new" statement and the "run" command are executed in deferred mode; that is, only after a "run" command. If the "#autonum" comment is present, unnumbered statements between the "new" statement and the first "run" command are automatically given sequential line numbers incrementing by 1 from the previous line. Any line number labels present should be in increasing order and differ by at least the number of intervening lines plus two. All statements after the first "run" command are ignored. Program execution terminates after encountering the "end" statement. When making any changes to numbered program lines, it's good form to precede the entire program with a "new" command. Single statements without line numbers can be executed by selecting just the line the statement is on, and then hitting the "Exec" button. To stop a running program, hit the "Done" button. To stop a running program when an input dialog is present, use the "Stop" menu item. *** Some Examples: # this is a comment line (because of the leading '#'). # multiple statements per line allowed. x = 7 : y = 3 + 4 # dprint prints 1 line to a dialog box. dprint "hello ",123 dprint "hello "; dprint 23+7 # ? is an abbreviation for "dprint" ? x # print appends text to your program file. print chr$(65) print "0x";hex$(255) # input can read numbers or strings. input "prompt", y input "prompt", a$ # Arrays must be dimensioned. # Arrays are limited to one dimension. dim a(4) for i=0 to 4 : a(i) = i : next i Example Statements: 10 rem - this is also a comment 20 if (x = 7) then y = 4 30 for i=0 to 10 step 2 : print i, 40 next i 50 gosub 100 90 end 100 print "sub @ 100" 120 return Additional Commands: dprint - redirects 1 line of print to a dialog box. grline x1,y1,x2,y2,1 - draw line on display [0..159] grline x1,y1,x2,y2,2 - draw gray line grline x1,y1,x2,y2,-1 - erases a line grline x1,y1,x2,y2,4 - draw rect (topLeft, extent) grline x1,y1,x2,y2,5 - draw gray rect grline x1,y1,x2,y2,7 - draw filled rect grline x1,y1,x2,y2,-7 - erase rect sound { frequency in Hz }, { duration in mS }, { vol 0..64 } sound freq, c_wpm, vol64, morse$ [ , Farnsworth_wpm ] sound 660, 18, 10, "cq de n6ywu", 13 : rem An example. sersend { mem_address }, { len }, { baud_rate 2400..19200 } - Sends data at a memory pointer out the serial port. - The serial port is automatically closed when a Basic - program is not executing. Versions of the OS prior - to 3.0 may send cruft [0x08 ?] out the serial port - before the first data byte. op "ds",a$,x,y - draws text at (x,y) op "ds",a$, n*1000 + x, y - draws text using font n - there are only 6 fonts, most have many missing chars. op "sety",y - replaces line y with following print output. op "page","title" - changes cbasPad input/output page op "page","",n - changes output page to record #n op "page","",-1 - adds a new output page and changes to it. op "dt",t$ - changes fn 30 dialog title op "it",t$ - changes input dialog title to t$ op "mfind",x$,n - finds MemoPad entry starting with x$ - returns Memo index or -1 for fail. op "dbrd","memo",n,m - reads MemoPad entry n into s$(0). - m is a char offset into the memo. - if m is -1, then read the next line - returns category number or -1 for fail. op "dbrd","addr",n - reads AddressBook entry n into s$ array. - strings longer than 31 chars will truncate. - returns category number or -1 for fail. op "dbrd","date",n - read DateBook record into s$() op "dbrd","todo",n - read Todo record in s$() op "dbrd","JBas:DBNAME",n - read the JFile database DBNAME - record# n into s$(). limit of 20 fields. op "dbrd","JFil:DBNAME",r,f - read the JFile Pro database DBNAME - record# r field #f into s$(0). op "dbrd","PmDB:DBNAME",r,f - read the HanDBase database DBNAME - record# r field #f into s$(0). op "dbrd","LSdb:LISTNAME",r,f - read from the List database LISTNAME - record# r field #f into s$(0). - only 3 fields, so f should be from 1 to 3 op "dbwr!","memo",n,1 - appends s$(0) to the end of MemoPad memo #n - if last parameter = 1, then append a linefeed. - if s$(0) = chr$(3)+chr$(12) then clear memo !!! op "dbwr!","addr",n - writes s$(0..18) to AddressBook item n - returns 1 if successful - alpha test only, may be buggy! op "dbwr!","JBas:DBNAME",n - write the JFile database DBNAME - record# n from s$(). writes 20 fields. op "dbwr!","JBas:xyz",n,f - write to JFile database "xyz" op "dbwr!","DBOS:xyz",n,f - write to DB database "xyz" - record n , field (f - 200) e.g. 203 for field 3 ( #added disclaimer: you can trash your MemoPad, AddressBook and JFile databases using the op "dbwr!" command. These are a *untested* functions! ) op "db",type,creat,i - returns length of DB record i - if non zero then 'fn 80' returns pointer to DB record - for type & creat, convert (e.g. 'DATA' & 'memo') to 32-bit integers. call a - 68k machine jsr to addr a (You can stuff 68K machine code in integer arrays. Remember that integers are 4 bytes long.) (These commands may change or be removed in future versions!) Additional Functions: sqr(x) - square root exp(x) - e ^ x log(x) - natural log of x sin(x) cos(x) tan(x) atn(x) - trig functions for x in radians abs(x) - absolute value of x sgn(x) - returns 1 for positive, -1 for negative len(a$) - returns length of string a$ val(a$) - returns numeric value of a$ or 0 str$(x) - returns string representation of x chr$(c) - returns string of ascii char c, length 1 hex$(n) - returns hex string of value n mid$(a$, n, m) - returns substring of a$ starting at n length m mid$(a$,-n) - returns right$(a$,n) eval(q$) - evaluates string q$ as a numeric expression ("1+2") varptr(y) - returns memory address of variable y (or y$). peek(a) - returns 8-bit byte at address a peek(a,2) - returns the 16-bit value at word aligned address a peek(a,4) - ... 32-bit value at word aligned address a fn 16 - returns seconds timer fn 17 - returns tick timer (100 Hz) fn 24 - returns decimal date fn 25 - returns decimal time fn 22 - waits (pauses) for 2 seconds, returns 0 fn 20 - returns scaled battery voltage fn 19 - returns length of the clipboard text fn 18 - returns memory address of the clipboard text fn 33 - returns asc(input$(1)). Waits for 1 graffiti char. - also captures presses on the rightmost 5 button. fn 38 - asc(inkey$) e.g. non-blocking form of fn 33 fn 34 - returns tick time of last pendown or input$ char fn 30 - display 9 line dialog, returns dialog button status fn 39 - returns last input or dialog button status fn 42 - temporarily clears middle of screen, returns 0 fn 48 - returns last pen tap x fn 49 - returns last pen tap y op "gnum", n - returns the first number from line n of the page op "get$", n - returns a string from line n of the current page sersend { buffer_mem_address }, { max_len }, -2 - returns length of serial data received in buffer. This function can only be used after the baud rate has been initialized by a prior "sersend" in the current running program. Use a varptr to a string variable for the buffer address and a max of 31 for the length. If the return is n > 0, then n bytes have been read from the serial port input into your string variable . Warning: Using sersend drains your battery around 4 times faster. Warning: use of undefined fn's may cause your Pilot to crash! (These functions may change or be removed in future versions!) Additional Operators: x = (x ^ y) - raise x to a power; parenthesis are required. Additional Variables: String variable name must end with a '$', e.g. name$ The print, dprint and input commands will take string vars. let a$ = "hello" : dprint a$,a$ There is one string array: s$() - auto-dimensioned on first use with 31 elements s$(0) .. s$(30) Additional Dialog Form: fn 30 - displays a dialog form with 9 lines s$(0), s$(2) ... are the prompt strings s$(1), s$(3) ... are the default & return values return value is 1 for OK, 2 for A button, 3 for B button Some Warnings: Integer overflow (> 2^32-1) will not signal any warnings. Expression depth (number of parenthesis per line) is quite limited. If you don't use the "new" command, old deleted program statements may still be in the execution buffer. You may have to turn off alarms when running cbasPad programs that leave less than 5000 bytes of free memory (use the fre function to determine how much a program uses.) An alarm occuring while having a program running, or still open after running, that leave less than 5000 bytes of free memory may cause your PalmPilot to crash. You can lock up your Pilot and corrupt ALL your data when using peek, poke and call. Use at your own risk. HotSync and backup often if you want to play with these functions. Memory above the first 32K is protected and cannot be poked without an OS write enable call (read the SDK docs). Using sersend will drain the battery much faster than normal. Installing 0.5x, or later, over 0.02x will cause hotsync to crash. Bugs: Many. Think Costa Rican rain forest. Please send bug reports to rhn@nicholson.com * Bug reports without the version number will be ignored. * Some floating point values may calculate or print incorrectly. Some syntax errors are reported without line numbers. Deep GOSUB nesting may cause stack overflow crashes. Complex expression nesting may cause stack overflow crashes. Divide by 0, log(0), overflow, etc. produce undefined results. *** Examples Example 1: # example 1 new 10 for i=1 to 7 : print 3 * i, 20 next i run # Now use the menus to "select all" # and to "run selection". Example 2: # print out character set new 10 for c=33 to 255:print chr$ c;:next run Example 3: # send the clipboard text # out the serial port new 10 a=fn 18 : n=fn 19 20 if n > 0 then sersend a,n,19200 run *************************************************************************** Revision History: *************************************************************************** This version can be installed right over versions newer than 0.50b. -- Version 0.97b4 -- (99Dec14) Added support for HanDBase databases (single field reads). Fixed a bug in the abs() function. Fixed a problem with dialog title length. Cleaned up a spurious "?" in the dprint dialog. -- Version 0.97b2 -- (99Nov24) Added support for the List database application. Fixed bug in dialog title memory allocation. -- Version 0.97 -- (99Nov11) Added support for JFile Pro database reads of single fields into s$(0). Added string inequality comparison (a$ <> b$) Added abs() function. Added string constant overflow error reporting. Change: Floating point divide by zero now throws an error. Fixed a major aliasing bug when using more than 8 string variables. Fixed a bug where numeric array variables would sometimes alias. Fixed bug in tan(0) and atn(0) . Fixed a bug in comparing fp zero and integer zero. -- Version 0.96 -- (99Jul27) Fixed some a divide and some trig function bugs. Fixed an op "mfind" bug. Added support for freeware DB (DBOS) database. Added single field DB & Jfile write. Minor speedup on loading. -- Version 0.94 -- (99Apr02) Fixed an Fpl div bug for denominators near 0.5. Fixed an if-then loop stop bug. -- Version 0.93 -- (99Jan02) Fixed a serial port output flush bug. Fixed a bug in int() rounding. atn() now does something more reasonable for negative arguments. Fixed dialog and input title string corruption bug. op "get$" & "gnum" now no longer skip blank lines -- Version 0.92 -- (98Jul20) Fixed a bug with "import" not properly closing memopad records. Fixed an array variable input bug -- Version 0.90 -- (98Jul15) Increased stack size for PalmOS 3.0 (Palm III), less nesting problems. Warning: Programs that now work under OS 3.0 may not work on older PalmPilots if they have more than one pair of parenthesis per line. -- Version 0.89 -- (98Jun06) Fixed fn 48 and fn 49 for getting last pen x,y on Palm III's. Fixed a bug with undeclared float vars becoming int vars Changed divide by zero behavior. Removed cbasPad customLaunchCmdGoto scriptability. Recompiled with Metrowerks for PalmPilot DR4 + PalmOS3 libs. -- Version 0.89a -- (98Feb06) Fixed a "dbrd" initialization bug. Added a few more memory full checks. -- Version 0.87 -- (98Jan02) Fixed another expression depth (stack overflow) bug. -- Version 0.86 -- (97Dec25) Increased number of string variables (max now 30). Alpha testing of capability to write JFile databases. Fixed a bug in op "dbrd","addr". Fixed an install (biggest record size) problem with 0.85. -- Version 0.85 -- (97Dec07) Added capability to read JFile databases using "dbrd". Added capability to clear a MemoPad memo. Added fn function to return last pen tap x,y location. -- Version 0.84 -- (97Oct11) Fixed a bogus fix to some number conversion/display bugs. -- Version 0.83 -- (97Oct07) Fixed a bug in str$(). Limited expression depth to a value less likely to cause crashes. Added asc() function Should now allow other utilities to disable the auto-off timer. -- Version 0.82 -- (97Jul20) Fixed a bug in importing non-existent memos into cbasPad. -- Version 0.81 -- (97Jul03) Fixed a bug in the int(0) function. Expanded the range over which exp(), log() and sqr() might have some resemblence of correctness. Added some protection against too deep expression nesting which could cause a stack overflow crashes. (limit is 4 or 5 parens.) op "dbrd","todo" does something which might change in future revs. -- Version 0.80 -- (97Jun27) Changed all variables and multiply to floating point by default. Up to 3 lines may now be placed in the dprint dialog by seperating the lines with the VT (ascii 0x0b) character. e.g. dprint "line 1";chr$(11);"line 2" Fixed an if-then goto freeze up bug. Fixed a 0.0^n exponent bug. -- Version 0.79 -- (97Jun20) Changed divide to produce floating point results by default. Added op command to set input & dialog titles. Added more grline options (grey lines, rects, etc.) Fixed a display bug with long strings in the fn 30 dialog. Fixed a quit during import bug. -- Version 0.78 -- (97May24) Fixed s$() init problem with op "dbrd". Added op "mfind" and op "dbwr!" commands. Added custom launch codes for scriptability from other apps. -- Version 0.77 -- (97May20) Integer variables names can end with '%' (e.g. a%, foo%). Other variables will auto-promote to floats on fp assignment. Added the '#opt int' pragma to disable auto-promotion. Bugs: In 0.77, the sersend,,-2 function might return 7608, instead of 0, if there are no bytes in the serial port receive buffer. -- Version 0.76 -- (97May17) Added a menu item to import new programs from the MemoPad. Added #include <#title> capability for longer programs. Includes cannot be nested. Added #autonum to auto number lines by +1 between "new" and "run". Linenumber labels must be in order and be different by greater than the number of intervening lines. The mod operator now coerces float operands to integer. The op "dbrd","addr",n function now returns the category number. Fixed a dialog field cursor restore bug. Now remembers top visible record shown on startup. Now hides the exec and select-all buttons when running a program. -- Version 0.75 -- (97May16) Fixed an array assignment bug (crashed mileage and battery log). Fixed a rounding error in the int() function. Added op "dbrd","addr",n to read AddressBook entry n into s$. -- Version 0.74 -- (97May12) Variables now auto promote to floats when assigned a float. Added for-next support for float index variables. ** WARNING ** the For compatibility with the 0.74 and later, please add the comment #opt int before the first numbered line when running cbasPad programs written for version 0.73, or earlier. Added op "ds" to draw strings. Now displays record numbers on main screen. Changed op "page","",-1 to add a new output page. Fix a float assignment bug in 0.72b & resource crash in 0.73b. -- Version 0.71 -- (97Apr09) Increased memory efficiency; cbasPad now uses a temporary DB for tokens. Added "cbasPad working..." while loading program. 0.70 was broken and only ran programs once before crashing. -- Version 0.68 -- (97Feb05) Fixed 1 fp compare bug. Fixed 1 low memory application switch problem. Changed fre function. Added op "pclip",s$ to paste string to clipboard. -- Version 0.67 -- (97Jan27) Fixed op "gnum" bug. Fixed a small memory leak. Better out-of-memory behavior, less crashes. -- Version 0.65 -- (97Jan18) Increased number of string vars from 8 to 12. fn 39 now returns button status of last dprint statement. -- Version 0.64 -- (97Jan09) Fixed bug in float array assignment. fn 34 returns last pendown tickcount. -- Version 0.62 -- (97Jan06) Increased the maximum program text size to 4000 characters. Added playing morse code tones via the sound command. sound 660,18,10,"cq de n6ywu",13 Added op "get$",n function (reads string from page). Added limited form of serial input polling. Added fn 22 wait/delay/pause function. Reduced code 0 rsrc size (should fix some install problems.) -- Version 0.58 -- (96Dec12) Fixed a string memory leak. Removed op "dpr" command. -- Version 0.57 -- (96Dec11) Changed the ? shortcut to dprint instead of print. Fixed a string array assignment bug. Fixed yet another floating point bug (division sign). -- Version 0.55 -- (96Dec03) Fixed op "sety" initialization bug. Disallow sound 0,d,v (frequency = 0 causes a crash). Added morse-code-like beeping. -- Version 0.54 -- (96Nov23) Fix to create non null database on first use. Added "Stop" to input dialog menus. -- Version 0.53 -- (96Nov17) Fixed length bug in the mid$(s$,start,length) function. Fixed peek() to require parenthesis around all parameters. Cosmetic cleanup of dprint dialog. Enabled use of float vars as tests in if-then statements. Added floating point equality test. -- Version 0.52 -- (96Nov16) Physical scroll buttons now scroll by page. Enabled editing in the input dialog. Added mid$() function. Reduced screen flash when executing from the main form. -- Version 0.51 -- (96Nov15) Added eval() to evaluate a string as an expression. Fixed a print bug when executing from the main form. Fixed a few float to int number conversions. -- Version 0.50 -- (96Oct25) Fixed a memory allocation leak. Changed the creator signature type to 'cBAS'. *** *** WARNING *** *** The application signature has changed in versions 0.5X from that of old versions 0.02X. You will have to *DELETE* old version 0.2b9, or earlier, of cbasPad *BEFORE* upgrading. First copy any Basic programs that you wish to save to the Memo Pad, delete the old version, and then copy your saved programs back after installing the new version of cbasPad. If you don't do this your hotsync may crash. -- Version 0.02b9 -- (96Oct19) Exec from main screen now returns to main screen. Fixed reading the 9th line of input dialog. Fixed op "db" command item indexing. Fixed val() to work with hex strings ("0x1abc"). Added hex$() to string functions. Added standard edit menu to input dialogs. -- Version 0.02b8 -- (96Oct06) Fixed integer input statement bug. Fixed string parameter precedence bugs in val() and len(). Increased size of s$() to 20 elements. Increased size of dialog form to 9 input fields. -- Version 0.02b7 -- (96Oct05) Added dialog form with 8 input fields. Added auto-dimensioned s$() array of 16 elements. Edit button replaces auto-edit mode. Exec button added to main form. -- Version 0.02b5 -- (96Oct01) Fixed string initialization bug that can hang machine. -- Version 0.02b4 -- (96Sept26) Added dprint command to replace op "dpr". Restored printing of characters with ASCII value > 129. Added alpha test versions of trig functions. Added very limited string variables (max of 8 total). -- Version 0.02b3 -- (96Sept22) Fixed handling of tabs in comment lines. Fixed printing of a few floating point values. Added rnd() function. -- Version 0.02b2 -- (96Sept14) Added experimental versions of sqr(), exp(), log() and ^. Fixed printing of a few floating point values. Cleaned up "dpr" dialog box just a little. Added method to peek at the data of other applications. -- Version 0.02b1 -- (96Sept09) Fixed a bug in array assignment. Fixed a bug that caused crashes on empty input statements. Disabled tap text select during print output. Added the command 'op "dpr"' to print to the dialog box. -- Version 0.02b0 -- (96Sept08) More floating point expressions allowed. -- Version 0.02a9 -- (96Sept07) Added limited function floating point variables. *** See the floating point limitations section below. *** Fixed an error dialog bug. Error messages are no longer repeated in the text output. Fixed a bug in illegal string variable names. -- Version 0.02a8 -- (96Sept05) Added the "new" command to clear out old programs. Stopped cursor blink when running. Increased max "run" time before sleep to 5 minutes. -- Version 0.02a7 -- (96Aug31) Fixed input form background display. Added "input" statement. Increased maximum text form length to 2K. -- Version 0.02a5 -- (96Aug24) Fixed bug in dimensioning arrays on repeated runs. Added error report dialog. Renamed Buttons to "SelectAll" and "Exec" Halt script execution after the first "run" command. Removed ability to search cbas database. Added functions to get clipboard Ptr and len. (I use this and the sersend command to upload memos to my Unix workstation.) -- Version 0.02a4 -- (96Aug18) Fixed printing negative numbers. Fixed crash on done button while running. Fixed HotSync of DB. Added print hex$(), print chr$() Cleaned up mislabled resources. Changed type of app and DB (You should delete the old cBASpadDB.) Added poke, varptr(), call, serial port transmit. -- Version 0.02a1 -- (96Aug17) Initial Experimental Release. ---------------------------------------------------------------- End of release notes. *************************************************************************** FAQ There are several PalmPilot FAQ's on the Web. Try these URL's: http://home.pacific.net.sg/~kokmun/tips.htm http://www.nicholson.com/rhn/palmfaq.txt http://www.palmpilotfaq.com/ *** Credits: cbasPad is based on the Pilot MemoPad tutorial, which is Copyright © Palm Computing 1996, and on Chipmunk Basic. Permission: cbasPad for PalmPilot is Copyright 1997,1999 by Ronald H. Nicholson, Jr., All Rights Reserved. There is NO shareware fee required for personal, educational or noncommercial use of this version of cbasPad. $0.00 (USD) ! Permission to use, copy and distribute this software without fee for non-commercial or educational purposes is hereby granted, provided that the above copyright notice appear in all copies, and that both the copyright notice and this permission notice with the following disclaimer appear in all documentation. WARRANTY AND DISCLAIMER The cbasPad program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY OF ANY KIND; not even the implied warranty of MERCHANTABILITY or fitness for ANY particular purpose or for any intellectual property non-infringement. These is explicitly no guarantee that the results of any arithmetic or mathematical calculation in cbasPad are anywhere near correct. LIMITATION OF LIABILITY UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT, OR OTHERWISE, SHALL RONALD NICHOLSON, HOTPAW OR ITS SUPPLIERS OR RESELLERS BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES. IN NO EVENT WILL HOTPAW BE LIABLE FOR ANY DAMAGES IN EXCESS OF THE AMOUNT HOTPAW RECEIVED FROM YOU FOR A LICENSE TO THIS SOFTWARE, EVEN IF RONALD NICHOLSON OR HOTPAW SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. FURTHERMORE, SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION AND EXCLUSION MAY NOT APPLY TO YOU. HIGH RISK ACTIVITIES. cbasPad Basic is not fault-tolerant and is not designed, manufactured or intended for use or resale as on-line control equipment in hazardous environments requiring fail-safe performance, such as in the operation of nuclear facilities, aircraft navigation or communication systems, air traffic control, direct life support machines, or weapons systems, in which the failure of the Software could lead directly to death, personal injury, or severe physical or environmental damage ("High Risk Activities"). Ronald Nicholson, HotPaw, and its suppliers SPECIFICALLY disclaim ANY express or implied warranty of fitness for High Risk Activities. If you do not agree to the terms of these DISCLAIMERS and LIMITATIONS you are not authorized to use the Software. *** -- 99Nov24 Copyright 1996,97,98,99 Ronald H. Nicholson, Jr. rhn@nicholson.com ***