[net.micro.6809] BASIC09 for CoCo OS-9

sdyer@bbncca.ARPA (Steve Dyer) (12/15/83)

Well, I found a copy at my local Radio Shack, as promised.  I haven't had
much time to play with it, only about an hour.  It's an interactive
compiler, generating something called 'I-code'.  The program has several
different modes: SYSTEM, the command level, EDIT, procedure entry using the
same syntax as the OS-9 command, EDIT, EXECUTION mode, and DEBUG mode.
There is also a mechanism to run "packed" I-code modules outside of the
BASIC09 development/debugging environment.  The program comes with a manual
which seems fairly thorough as far as the language and environment goes,
but says preciously little about installing the program on your system.  I
guess you usually just copy them to /d0/CMDS-- I didn't have enough space
left there, so I had to go through a few contortions.

The language seems quite nice, with all the interactive advantages of
BASIC, but with the control and data structures of PASCAL.  One strange
thing, though.  It seems that the language does not support user-defined
functions, only procedures.  I find this hard to believe, and it dampens
my enthusiasm a bit.  Perhaps I've misread the manual.  Can any BASIC09
gurus out there comment on this?
-- 
/Steve Dyer
decvax!bbncca!sdyer
sdyer@bbncca

emjej@uokvax.UUCP (12/28/83)

#R:bbncca:-38700:uokvax:3500023:000:1354
uokvax!emjej    Dec 26 09:06:00 1983

Re true functions in BASIC09: there aren't any. (I'm disappointed, too.)

Other problems:

1. There are no global TYPE declarations. (Boy, this makes for a lot of
   typing (no pun intended) if you want to write a set of procedures to
   manipulate a TYPE.)

2. The debug mode won't let you print or tweak fields in a structure.
   (I hope everyone writes RS and Microware about this--the symbol table
   info and stuff to do that right ought to be available; I don't see
   why they didn't. This is the only blemish I can find on a *very*
   good debugging facility.)

3. No heap, and no reference types.

4. Procedures can't be passed as parameters (but you can invoke them
   using a string expression for the name of the one you want to run,
   so that problem is bypassable).

Those are the only gripes I have (well, the pretty-printing could be done
a little different--natter, grommish :-> ) about the language. The looping
constructs are pretty nice. For those who haven't seen them yet--there are
the traditional FOR, WHILE, and REPEAT, along with the generic

	LOOP
		<statement>*
	ENDLOOP

but also, within any loop one can have

	EXITIF <boolean> THEN
		<statement>*
	ENDEXIT

which has the following semantics: if <boolean> then execute the <statement>s
and then leave the innermost loop one happens to be in at the time.

						James Jones