[comp.os.os9] OS-9 Discussions, V3 #14

os9@cbdkc1.UUCP (06/19/87)

OS-9 Discussions         Friday, June 19th 1987         Volume 3 : Issue 14

Today's Topics:
                                OS9 BBS's/Forums
                                     OS-9 UG
                             OS/9 and Unix/UniPlus+
                               Correction to Docs
                              Missing Documentation
                         YASE (Yet Another Screen Editor)

--------------------------------------------------------------------------

Date: 3 Jun 87 22:49:51 GMT
From: pete@wlbr.UUCP (Pete Lyall)
Subject: OS9 BBS's/Forums

Keywords: OS9 COMPUSERVE DELPHI BIX BBS
Organization: Eaton IMS, Westlake Village, CA

===================================================================
I am posting this to the NET for Kevin Darling, who has no direct
USENET access.

Pete
===================================================================

Date:  02-Jun-87 22:29 PDT
------------------------------
 
From:  Kevin Darling [73117,1375]

> In: OS-9 Discussions Volume 3 : Issue 4, From: ihnp4!ihwpt!knudsen, Subject: 
> Which BBS's support OS9?
> 
> Mike writes:
> 
> Delphi has the advantage of being cheaper (especially at 1200 baud, no
> surcharge), and being officially supported by Rainbow magazine.  All the
> Rainbow editors and staffers are on Delphi almost every night, including Kevin
> Darling, Steve Bjork, and Marty Goodman.  (Of course CIS has its heavy hitters
> too, like Pete Lyall and others.)

Thanks for the mention, Mike! However, in no way am I a Rainbow staffer, and in
fact, I cruise by Delphi simply to pass on info and help that they might
otherwise NEVER see or know of.

The CIS (CompuServe) OS9 forum is quite simply the only spot for a true OS9er
to be. It's been the place for years, and it's where you'll find the most info,
source code, quality subjects and messages, and people.

Delphi has only Greg Law, the SysOp (who still comes to CIS).

CIS has the likes of Carl Kreider, Pete Lyall, Greg Morse, James Jones, Dave
Kaleita, George Brickner and so many other software/hardware people that I
can't name them all. You can find Frank Hogg and others there. You'll also find
that some Tandy and MW employees are on (unofficially, alas!), but they do
listen and I've seen suggestions implemented.

Delphi is what I'd call a "backwater forum". Most of it's tiny data library
originally came from the CIS OS9 forum. Many of the questions I've seen there
(and on UseNet) have been or could have been answered on CIS up to months ago.
For example, the complete set of display codes for the CC3 L-II windows was
posted there (by me) back on Christmas. 

Yes, Delphi is cheaper right now at 1200. CIS has nighttime rates 24 hours a
day. Delphi might be easier reading for an OS9 novice. CIS might have better
responses and info. And on and on.

The crux answer is: you get what you pay for in this case.

Mike, you are right about not splitting up OS9 between too many forums. We do
of course need these outposts (like Bix, Delphi) to get the word out. However,
in this case, the word should be, "go to CompuServe's OS9 forum".

Thanks for listening. - Kevin Darling (OS9 UG Secretary)
-- 
                                                   Pete Lyall

Usenet:     {trwrb, scgvaxd, ihnp4, voder, vortex}!wlbr!pete
Compuserve: 76703,4230 (OS9 Forum Sysop)
OS9 (home): (805)-985-0632 (24hr./1200 baud)
Phone:      (818)-706-5693 (work 9-5 PST)

EATON Corp, IMSD, 31717 La Tienda Dr., Westlake Village, Ca. 91359
----------------------------------------------------------------------

Date: Fri, 12 Jun 87 00:32:27 EDT
------------------------------
 
From: belmonte@svax.cs.cornell.edu (Matthew Belmonte)
Subject: OS-9 UG

John,
I have a question about the OS-9 UG I thought you might be able to answer.
I sent in a cheque last November and heard nothing until March, when I
received a letter saying that my membership started in February.  I just
got an apology for the slow handling from William W. Turner III.  He
mentions that by now I should have received my May 1987 MOTD.  I have
*never* received a MOTD.  Has there been a hiatus in the publication of MOTD
lately?  My address changed on May 23, and the post office won't forward
un-enveloped, non-first-class mailings.  Does MOTD match these criteria?
(i.e., Is it sitting in a mail room rotting right now?)
These questions and more I have just sent off by snail-mail to Mr. Turner,
but I'm asking you because I thought that this way maybe I'll be able to
figure things out before next year.

Thanks in advance.

Matthew Belmonte
[I believe MOTD is not sent out first class so indeed it would not be forwarded
UNLESS you indicated to the post office that you would accept forwarding
charges for ALL material.  I'd call MOTD back to let them know my new address.
(or write) - JDD]

Date: 10 Jun 87 08:52:12 GMT
------------------------------
 
From: Nigel Horne <njh@root.co.uk>
Subject: OS/9 and Unix/UniPlus+

Keywords: comparison summary
Organization: Root Computers Ltd., London, England

Following up my submission in digest volume 3 issue 4 requesting
information in the differences btw UniPlus+ and OS/9, this is what
I received.

>Does anyone have a (preferably objective) comparison between
>OS/9 (release 2.0 I guess) and UniPlus+/Unix?
>
>I'd rather not have flames/really subjective NIH attitudes,
>just *facts* to allow me to compare.
>
>If enough interest is generated I'll post, of course.

<From: jag@scmhcx.uucp>

    I just read your posting on the net about OS/9 Unisoft/Unix.  Unfortunatly
I do not know any thing about OS/9, however we have worked with Unisoft through
two ports of System V.  I enjoy working with Unisoft's port of Unix.  If you
have talked with them, their marketing, and heard that their applications are
larger than any of their competitors we are the reason for that statement.  We
also were one of their first ports to the Mc68020.

    I will not bore you with any tales of horror or success.  Because I do not
know anything about OS/9 I can only enhance the Unisoft side of the discussion.
If I can be of any help drop me e-mail, I am willing to type at length with you.

<From: witters@fluke.uucp>

I've used fairly old versions of both OS/9 and UNIPLUS UNIX.  I'd say that OS/9
is good for embedded systems where the user doesn't see the operating system.
However, UNIPLUS UNIX is better if you want something for developing
application software.  Here is a brief summary of some reasons why I believe
this to be true.

	OS/9 doesn't support search paths.  All executable programs must
	reside in a single "execution directory".  This is dangerous for
	multi-user systems because any user can wipe out the system utilities.

	UNIPLUS UNIX supports search paths.  Executable programs may reside in
	any directory.

	Both OS/9 and UNIPLUS UNIX are multi-user operating systems.

	UNIPLUS UNIX has a much better set of tools for developing software.
	They provide many of the Berkeley 4.2 enhancements (i.e. VI, AWK, GREP,
	SED, CSH, etc.)  The version of OS/9 I used didn't have any of these.

	OS/9 provides a C compiler and a line oriented text editor for
	developing software, and that's all.

	OS/9 is a multi-tasking real time operating system.

	UNIPLUS Unix is multi-tasking, but not a real time operating system.

	It is easy to add device drivers to OS/9.

	I never tried adding device drivers to UNIPLUS UNIX, but I suspect it
	is difficult at best, and perhaps not possible without buying source
	code from UNIPLUS.

	Both OS/9 and UNIPLUS UNIX support tree structured file systems.

	You can "lock" an application program into memory with OS/9 so it won't
	get swapped out.  This is handy for real time applications.

	UNIPLUS UNIX generally requires memory mapping hardware.  OS/9 doesn't
	require memory mapping hardware, but can use it if it is provided.

	It is possible to put OS/9 and application software for OS/9 in ROM
	(Read Only Memory).  I'm not sure if it is possible to do this with
	UNIPLUS UNIX, but I suspect it isn't.

Here at FLUKE we have been developing application software for OS/9 using UNIX
based mini-computers and workstations.  OS/9 is used as an embedded operating
system in equipment we sell.  The people writing the application software only
use OS/9 to run the software they've written.  The users of the equipment never
come in contact with OS/9.  They only see the application program we provide
which runs under OS/9.

If you want more information you can try contacting the following gentleman.
He used to work here and he used both UNIX and OS/9.

	James K. Peckol
	University of Aberdeen
	Department of Engineering
	King's College
	Aberdeen AB9 2UE Scotland

	Telephone: 011 44 224 480241 ext. 5498
	this is the telephone for C.T. Sprackeln head of EE.

I hope this helps.  To summarize, OS/9 is ideal for dedicated embedded
application software for small computers.  However, UNIPLUS UNIX is a much
better environment for developing software.

<From: jejones@mcrware.uucp>

Like Mr. Daleske said on comp.os.os9, the big question is: what do
you want to do?  If you have need for a large relational database,
well, I'm afraid nobody's ported INGRES, Informix, and so forth to
OS-9 that I know of, etc. so on that sort of basis one's choice may
be made for one.

If you wish comparisons purely as operating systems, then it might
be best to just sit down with the appropriate manuals, possibly
combined with talking to or visiting users.

You might wish to talk to some of the British companies that distribute
OS-9 or sell hardware on which OS-9 runs; the ones I've heard of would
be Vivaway and Cumana Ltd.  Addresses etc.:

	Vivaway
	Software House
	Luton, Bedfordshire LU2 0HN
	phone: 0582-405511
	telex: 825115

	Cumana Ltd.
	Pines Trading Estate
	Broad Street
	Guilford, Surrey (I don't have the postal code--sorry!)
	phone: 483-503-121
	telex: 851-859-380

It occurs to me that you might not have seen the comp.os.os9 digest
which contained a copy of your query and John Daleske's comments, so
I append his comments to this message.

<I've eliminated repeating my comments since they are in the digest. -JDD>

-Nigel

-- 
Nigel Horne, Divisional Director, Root Technical Systems.
<njh@root.co.uk>	G1ITH	Fax:	(01) 726 8158
Phone:	+44 1 606 7799 Telex:	885995 ROOT G	BT Gold: CQQ173

Date: Tue, 16 Jun 87 03:00:30 EDT
------------------------------
 
From: mnetor!lsuc!jimomura

     This is Jim Tittsler's utility to read a TOS disk under
Atari ST OS-9 68K.  It was written mainly for his own usage
so don't be critical about it not doing things "your way."
As it is it reads files from the root directory in Drive A:

Cheers! -- Jim O.

[Note, this note included a fairly large arc format file.
I'll ask that if you want it, I will send it to you directly. - JDD ]

Date: Wed, 17 Jun 87 11:47:56 EDT
------------------------------
 
From: mnetor!lsuc!jimomura
Subject: Correction to Docs

     In the documentation file to 'tosrd' I left out that LF is automatically
removed from files during the copying.  Use the '-b' switch to copy a
binary file intact.

Cheers! -- Jim O.

Date: 18 Jun 87 15:16:34 GMT
------------------------------
 
From: mdk@cblpf.ATT.COM (Michael D King)
Subject: Missing Documentation

Organization: AT&T Bell Laboratories - Columbus

Keywords: OS9

Is anyone else out there angry that Tandy refuses to support the Color
Computer properly?  This has gone on long enough!  I feel that we should
make ourselves known to John Roach and the rest of the board members at
Tandy and convince them the CoCo deserves to have proper support.

This started over a year ago when I tried to get help with Disk Scripsit.
I was writing short stories and most of them were over 12 pages long (12
pages was about the limit of memory for my CoCoII).  In order to print
these things out, I had to spool them together, but when I printed them
they had a great big blank space between the two parts, and the page
numbers reset to page 1.  I called all the Computer Centers in Columbus and
not one of the "salespeople" knew the answer.  In fact the standard
response was, "I *DON'T KNOW ANYTHING* about the Color Computer, maybe you
should try ...."  Finally, someone suggested ATSO (Area Training and
Support),  when I called there, the guy I spoke to LAUGHED at me!!!  He
said, "Since the Color Computer is SOOOOO user-friendly, we don't have any
support staff to handle it.  I mean, we can't afford to have a person sit
around here all day waiting for a question to come in."  Then he gave me a
toll number to call in Texas.  Not even toll-free!!  I was fuming!  At the
time I was out of work and trying to write to bring in  a little money to
pay for the luxuries: food, rent, clothing.  I couldn't afford a toll call
to Texas.   So I wrote a letter to Bernie Appel.  Well, ol' Bernie had one
of his flunkies give me a call and explain to me that it just isn't
monetarily feasible to staff CoCo support around the country, could he have
one of the people in Computer Assistance give me a call?  So, a lady from
assistance called me that afternoon.  (This was almost hysterical.) She
couldn't answer my question, but she did give me a 3 minute sales pitch on
the virtues of Telewriter-64, Elite-Word, and VIP which I could order
through express-order software!

The vitriol has risen again because I recently purchased the OS9 - Level2
and the documentation was missing the command pages for MODPATCH and
MONTYPE.  I called computer assistance to see if they planned to send out
updates to the documentation to resolve these problems.  The person I spoke
to said that they had an info sheet and that she would send it to me, (by
the way, it isn't very helpful.)  But the most important thing she said was
that they NEVER sent out ANY updates for any CoCo software.  Why
bother sending in the software registration cards?

Sorry to go on so long about this, but I feel it is an important issue.  I
really love the Color Computer.  I think it is one of the best on the
market.  We represent a large part of Tandy's profit base and they treat us
like an overbearing relative: they put up with us, but they don't need us.

Let me know if anyone else has had problems like these.  Maybe if enough
data can be collected, we can force Tandy to change the way they treat us.

Mike King
..!cbosgd!cblpf!mdk
DISCLAIMER:The opinions expressed are my own, not anyone else's. Got It?

Date: 19 Jun 87 12:16:34 GMT
------------------------------
 
From:  Kurt Leibezeit
Subject:  YASE (Yet Another Screen Editor)

[NOTE:  I have included ONLY the documentation for YASE.  I have the entire
distribution in cpio format and shar format for distribution.  I am currently
working to include the binaries for shar distribution in S-record format.
Send a note to me requesting the sources if you want them. - JDD]

            YY      YY        AA        SSSSSSSSSS    EEEEEEEEEE
            YY      YY      AA  AA      SS            EE
              YY  YY      AA      AA    SS            EE
                YY        AAAAAAAAAA    SSSSSSSSSS    EEEEEEEE
                YY        AA      AA            SS    EE
                YY        AA      AA    SSSSSSSSSS    EEEEEEEEEE

                        (Yet Another Screen Editor)

Everyone should try their hand at writing an editor once. I've always wanted
to, and when I saw that Donald Krantz' and James Stanley's 68000 assembly
language tutorial used an editor as a teaching example I went right to the
checkout counter with the book. Talk about impulse buying! In the past month
I've spent a lot of time keying in and studying the code, and it has been
well worth it. For those who wish to avoid the hassle of entering 3500+ lines
of code, I am placing my porting work in the public domain.

YASE is a small, fast, Wordstar-like programming editor. The full name
of the book it appears in is "68000 Assembly Language - Techniques for
Building Programs," and it is published in softcover by Addison-Wesley. The
book is a good reference as well as a 68000 assembly language primer, and it
is especially useful for someone with assembly language experience on other,
older processors. It differs from many of other 68k assembly language books
in that it includes several large programming projects as examples; most
other books just give short example fragments that do multiple-precision
arithmetic, or add an item to an ordered list. In addition to YASE, Krantz'
book has working programs that perform bit-mapped graphics and device
interrupt servicing.

The book does have one drawback. The programs were written for the CP/M-68K
operating system, a primitive single-user, single-tasking executive patterned
after that relic of the 70's, CP/M-80. As a result, all the programs use
absolute addressing modes in some places. This is not too hard to fix,
though.

YASE has almost all the features of Wordstar in non-document mode, and it
includes some nifty windowing commands that are a significant improvement
over Wordstar. For those unfamiliar with Wordstar, I have provided a brief
description of its philosophy and features in Appendix A.

I hope you enjoy using (and possibly modifying) YASE. I would welcome your
comments, bug reports, and suggestions. I plan to support this software in a
limited way under OS-9/68000, primarily through the OS-9 User Group. You can
reach me at

			Kurt Liebezeit
			505 W. Springfield
			Champaign, IL 61820
			(217) 359-9859

Unfortunately, I will be moving in the near future, and this address will
not be valid after June 1987. After June, please contact me through my
parent's address:

			Kurt Liebezeit
			c/o M. K. Liebezeit
			56 White Oak Circle
			St. Charles, IL  60174

You might wish to thank Donald Krantz for placing YASE in the public domain.
Two years ago he wrote an article on XMODEM protocols in Dr. Dobb's Journal,
and at that time his address was

			Donald Krantz
			2845 42nd Ave. South
			Minneapolis, MN  55406

										Enjoy!

								             Kurt Liebezeit
                                             May 8th, 1987

                              APPENDIX A

                            YASE OPERATION

To start YASE you just type its name. This edition of the program does not
accept any command line arguments, and it will prompt you for the name of
a file to edit. If you are creating a new file, just type in the name you
will want the file to have when it is stored. YASE will tell you that the
file could not be found, but you will be given an empty window on the screen
to enter text into. If you are editing an existing file, YASE will read the
file into the buffer and place the cursor at the beginning for you.

YASE is essentially a modeless editor. You don't have to switch between a
cursor movement mode and an insert/overwrite mode. YASE accomplishes this by
using control key sequences as editor commands; non-control key sequences are
assumed to be intended for insertion into the file. This is in direct
contrast to editors like OS-9's SCRED which require you to explicitly enter
and exit insert mode.

YASE is capable of editing multiple files at once. It does this by dedicating
a window to each file that is "open." Each window has a border; on terminals
that support it you can make YASE use line graphics characters to draw the
window outline. At any given time one window is actively being edited. Each
window behaves just as though it were a little peephole on the file that
is associated with that window: you can move around the file, insert text,
delete text, and save your work. There are also some commands to manipulate
windows.

YASE doesn't have any of the document editing features of Wordstar document
mode: it won't reformat paragraphs, or perform word wrap, etc. YASE has some
other limitations as well. It is memory-based, and cannot edit files larger
than its buffer size (set for 32k in the distribution copy). You can set the
file buffer size at assembly time to any value up to 64k, but no higher.
Another limitation of YASE is that does not scroll the screen, but rather
repaints the window when the cursor moves to a part of the file that is not
within the current view. This slows down YASE's update rate, but there is no
way to make scrolling work with arbitrarily sized windows.

YASE has the following cursor control commands (^S means hold down the
control key while striking the S key):

	^S		Move the cursor one character to the left. If at the start of a
			line, move to the end of the previous line.
	^D		Move the cursor one character to the right. If at the end of a
			line move the cursor to the start of the next line.
	^E		Move the cursor up one line. YASE will attempt to keep the cursor
			at the same column number. YASE always behaves in a predictable
			way; regardless of whether you got to the present column by
			inserting or cursor movement commands, YASE always tries to go to
			the nearest column above the one you are on. This is a difference
			from SCRED.
	^X		Moves the cursor down a line. Obeys the same conventions for
			cursor columns as ^E.

Notice that the four basic cursor movement commands form a diamond pattern
under your left hand. The remaining cursor movement commands for moving
by word and page build on this convention; these keys are further from the
the center of the diamond, and they move the cursor further.

	^A		Move left one word. Leaves the cursor on the start of the word.
	^F		Move right one word. Leaves the cursor on the start of the word.
	^R		Moves the cursor up by one less than the number of lines in a
			window. If the active window has five lines, ^R will move the
			cursor up by four lines. YASE will try and keep the cursor on the
			same column.
	^C		Move the cursor down by the number of lines in the active window.
			Again, YASE tries to keep the cursor on the same column.

There are also some other, non-cursor-movement single keystroke commands:

	RETURN	Terminates a line and moves the cursor to the end of the next
			line.
	TAB		Moves the cursor to the next tab stop. Tab stops are fixed, and
			may be set to any power of two when you customize YASE. The
			distribution copy has tab stops at multiples of four columns.
	^L		Repeats the last find (^QF) of replace (^QA) command. See the
			summary of Quick commands later in this appendix.
	^P		^P is the literal prefix that causes the next character you
			type to go directly into the file. This enables you to insert
			unprintable characters such as form feeds into the file. Control
			characters in the text are displayed as a circumflex followed by
			an uppercase ASCII character.
	^V		YASE is always in one of two modes: "insert on" and "insert off."
			^V toggles between the modes. In insert mode, new characters push
			text ahead of the cursor; when insert is off, new characters
			replace characters in the file. Also, when insert is off YASE
			will extend a line rather than overwrite the carriage return.
	^N		Opens a new line by inserting a carriage return. This pushes
			down text that is below and to the right of the cursor.
	^T		Deletes one word to the right of the cursor.
	^Y		Deletes the entire line that the cursor is on, and pulls up any
			lines that follow.
	BACKSP	The backspace key performs the same action that the cursor-left
			(^S) key does - backspace is non-destructive.
	DELETE	The delete key, which is usually ignored under OS-9, actually is
			a delete-left character key. This is consistent with Wordstar,
			but can cause confusion when you switch back and forth between
			YASE and the OS-9/68k shell.

In addition to the single-keystroke commands that we have reviewed, YASE
also has many double-keystroke commands. These are grouped according to
function. The functional groups are: Quick commands to move through and find
text quickly; Block commands to deal with blocks of text as a unit; and
finally Window commands to manipulate the windowing interface. The Quick
commands all begin with ^Q (hold the control key down while typing Q), and
they include:

	^QR		Move the cursor to the top (beginning) of the buffer.
	^QC		Move the cursor to the bottom (end) of the buffer.
	^QF		Search for a text string. YASE will prompt you for an unambiguous
			search string, and will position the cursor on the beginning of
			the first occurrence after the cursor. You may use the literal
			prefix ^P to enter unprintable characters into the search string.
			The maximum length of the search text is limited to 80 chars.
	^QA		Search for a text string, and replace. Works just like ^QF, except
			that it also prompts you for replacement text string. Note that
			you can repeat a ^QF or ^QA with the same search and replace
			text by using ^L.
	^QB		Move the cursor to the start of a previously marked block. See
			the block commands.
	^QK		Moves the cursor to the end marker of a block.

YASE supports operations on blocks of text in much the same way that Wordstar
does. Before you can perform a block move, copy, or delete you must set the
block start and end markers. Only a single block may be defined at any given
time, but the block may be as large as you wish. All block copies, moves, and
and deletes write the marked text to a scratch buffer called the paste
buffer; YASE has an added command called the paste command that inserts the
current contents of the paste buffer into the text. This enables you to
delete a block from one place, and then issue repeated paste command to
insert copies of the deleted text into various places in the file. This also
allows you to move text between files: mark the text in file 1, delete it in
file 1 (which also puts a copy of the deleted text in the paste buffer),
make file2 active in another window, and then issue a paste command in file2.

Also included in the block functions are commands that you must use to save
your current work buffer to disk, end and save the editing session, or even
abandon all the changes made since the last save.

All the block commands are prefixed by ^K. YASE's block commands have two
very significant limitations, though: the block markers are not shown
anywhere on the screen, and any modification (insert, delete, or overwrite)
erases the block start and end markers. This means that once you mark a block
you better do something with it before making any other changes to the file.

	^KB		Sets the current cursor location as the start of a block.
	^KK		Sets the current cursor location as the end of a block. Note the
			the block end marker must be set farther from the start of the
			file than the block start marker, or YASE will complain.
	^KC		Copies the marked block to the current cursor position. The text
			is also copied into the paste buffer.
	^KV		Moves the marked block of text from its marked position to the
			cursor position. The text is also copied into the paste buffer.
	^KP		Inserts the contents of the paste buffer at the cursor location.
	^KY		Deletes the marked block. The marked block is removed from the
			file and the deleted text is placed in the paste buffer. The
			cursor position is unchanged.
	^KW		Writes the marked block to a disk file. YASE will prompt you for
			the name of the file that the text is to be stored in.
	^KR		Read in an entire file and insert the contents at the cursor
			position. YASE will prompt you for the name of the file to be
			read in.
	^KX		Tells YASE that you are done editing the file in the current
			window. YASE will delete the old copy on the disk, then write
			the contents of the memory buffer to the disk to become the new
			version. Note that the current version of YASE does not make a
			backup. If there are no other windows open YASE will exit.
	^KD		Same as ^KX.
	^KQ		Abandons (quits) the file being edited. If you have made changes
			to the file YASE will ask for confirmation, otherwise it just
			quits. If there are no other windows open YASE will exit.
	^KS		Saves a copy of the file just as ^KX, but returns to editing
			instead of exiting. If you are paranoid or working with flaky
			hardware/software you should use this command often.

Window commands are a new feature that YASE adds to Wordstar's command set,
and you access them by typing ^W as a prefix.

	^WP		Pops a new window to edit another file. The editor will prompt
			you for a filename, and then it will draw another window on top
			of the one you are currently editing with the new file in the
			new window. The old window is unchanged, but it will no longer
			be active until you exit the new window, or rotate windows using
			the ^WR command.
	^WR		Rotates the windows on the screen and refreshes the display. The
			bottom editing window is brought to the top, and it becomes the
			active editing window. If you have several windows on the screen
			you can cycle through them by using ^WR repeatedly. The content
			of the paste buffer is unchanged, and this makes it possible
			to transfer text between windows.
	^WE		This command, along with its companion command ^WX, allows you to
			reposition the currently active window. When you press ^WE, the
			cursor will be placed on the upper left corner of the active
			window; you can then use the standard cursor movement commands to
			move the cursor around the screen. When you have the cursor where
			you want it, you press the return key. This tells YASE that the
			cursor is where you want the upper left hand corner of the active
			window to be. It will then redraw the screen to make the window
			the right size. YASE will allow you to make windows as small as
			one line high, but it will not make any window narrower than 12
			columns. Note that YASE does not redraw the window border until
			you hit the return key - it doesn't drag or "rubber-band" the
			border. YASE responds to the following keys when resizing windows:

				^E		Move the cursor up one line.
				^X		Move the cursor down one line.
				^R		Move the cursor to the top of the display, just below
						the command window.
				^C		Move the cursor to the bottom of the display.
				^S		Move the cursor one position to the left.
				^D		Move the cursor one position to the right.
				^A		Move the cursor to the far left-most column.
				^F		Move the cursor to the far right-most column.
				RETURN	Marks the current cursor position, redraws the screen
						with the new window size, and returns to editing.
	^WX		Works the same as ^WE, but this time it repositions the lower
			right hand corner of the active window. You use the same cursor
			movement keys as above.

                              APPENDIX B

                      CUSTOMIZATION INSTRUCTIONS

You should find the following files in this release of YASE:

case.a          crt.a           cursor.h        edit.h          edit0.a 
edit1.a         edit2.a         edit3.a         edit4.a         errors.a 
exec.a          group1.a        group2.a        group3.a        lineed.a 
makefile        printf.a        vscreen.a       window.a        yase.doc 

In addition, you may have one or more executable files included in your
release distribution. If you received this via a medium that does not support
object code, you can generate an executable version by simply typing

$ make yase

and OS-9's make utility will generate an executable file. The file should
have a CRC of $7FD174. If you run into problems, it will probably be because
the makefile assumes that l68 will find the library sys.l on device /dd. Just
edit the makefile entry for linking yase so that it will find sys.l in the
right place.
 
As shipped, YASE should work with most any terminal that uses standard clear-
screen and cursor addressing. You may wish to customize YASE, however, to
take advantage of special features of your terminal such as line graphics
for window borders.

All the customization changes that you should ever need to make will be in
two files, cursor.h and crt.a; customization changes involve changing data
in the VSECT portion of crt.a, and definitions at the top of cursor.h. I
would like to explain how YASE expects data in the strings of the VSECT
before discussing the customization process in detail. YASE expects strings
with the same structure that the old Wordstar editor used: if your terminal
expects a two byte sequence $1B,$25 (ESC %) to turn off graphics, you would
put the length of the sequence (2) in a byte at the proper label, followed
by the bytes of the sequence itself. Thus for this example we would see this
entry in the VSECT:

graphic_off_seq		dc.b	2,$1B,$25

Please note that r68 will not accept spaces between operands; they must be
squeezed together as shown. If you put a space in, r68 treats the rest of
the line as a comment. Also, if your terminal doesn't support a string you
must at least have a single zero byte at the label.

Here are the detailed instructions for customizing YASE:

1.	Set screen size in file cursor.h using definitions for lines and cols.
	The default is 24 by 80. You actually get to use one less than the
	number of columns on the screen because YASE has to keep some terminals
	from scrolling when writing to the last column.

2.	You might need to set up the way YASE addresses (moves) the cursor.
	If your terminal's cursor addressing sequence is row then column (the
	default), you can leave ROW_THEN_COL set to 1 in cursor.h. Most terminals
	use <ESC><=><row+$20><col+$20>, so this usually won't need changing. If
	your terminal is different, you'll need to set the lead-in string (which
	is <ESC><=> in the default case) in the VSECT section of crt.a. Then
	you must set the offset value to be added to the row and column numbers
	in definition CURSOR_OFFSET in file cursor.h. Finally, set ROW_THEN_COL
	in cursor.h to zero if your terminal expects the column before the row.

3.	You may also need to set up the way that YASE performs a clear screen
	operation. Most terminals accept $1A (control-Z) as a clear screen
	character. If yours is different, change the string in file crt.a.

4.	If the clear screen operation also homes the cursor to the upper left
	corner of the screen, leave CLS_HOMES in cursor.h defined non-zero. If
	you aren't sure you can set it to zero with no ill effect.

5.	Now you must decide how you want YASE to draw the borders of the windows.
	The distribution copy uses plus signs, minus signs, and vertical bars to
	draw borders; this should work on any terminal, but it isn't very spiffy.

	If your terminal supports line graphics, you can put the character codes
	in the definitions in cursor.h for UL_COR etc. If the graphics
	character codes are greater than 128 and thus can't be confused with
	file data chars, you are done.

	On the other hand, if you have a terminal like the Qume QVT-101 which
	uses ordinary characters in a special mode to draw graphics, you have to
	be tricky. Put the characters in the UL_COR, etc. just like before but
	set the high (eighth) bit using a construction like  'a'!$80  . Then set
	definition GRAPHIC_7BIT to 1 (non-zero) so that YASE will know that it
	has to reset the high bit before sending out the char to the terminal.
	Finally, go to file crt.a and edit the strings so that they contain the
	data necessary to turn graphics mode on and off. You can check out the
	QVT-101 example files to see how all this is done.

6.	If you wish, you can use YASE's terminal init and deinit strings in the
	VSECT part of crt.a to assign and deassign function keys, or set special
	screen widths, or whatever.

7.	You may wish to increase or decrease YASE's buffer size by changing the
	definition for BUF_SIZE at the top of file cursor.h. Note that YASE
	always requests storage for at least one edit buffer AND one paste
	buffer. The default buffer size in this release is 32k, which means YASE
	requests 32k for a paste buffer plus 32k for every open file window.
	Since there is always at least one file being edited, YASE takes up 64k+
	of data storage.

                              APPENDIX C

                  CHANGES MADE TO YASE FOR EDITION #1

I am listing here all the changes that I have made in YASE in this first
release. One major change that I have made involved changing absolute
data references to register indirect with offset. I also had to change the
way the case() function worked, since it performed an absolute indirect jump;
instead I used a macro in edit.h to make all case jump destinations relative
to the jump point in the case() function. One other place I had to change
was the error table; instead of absolute addresses, I made the table entry
contain offsets relative to the start of the error table.

Of course, OS-9's I/O calls are very different from CP/M-68k, and I rewrote
the code in crt.a and edit1.a to use OS-9 I/O. Luckily, OS-9's I/O is a lot
cleaner than CP/M-68k's, and I was able to eliminate all the code in file
fileprim.a - you won't find that file in this release. I used direct calls
in edit1.a. I tried to make the terminal routines generic enough for you
to just change the data in the VSECT in crt.a; you shouldn't need to mess
with the code that reads the strings. I also added functions for turning on
and turning off line graphics for drawing borders. One thing that you should
know is that I used the eighth (high) bit of bytes to define graphics
characters; putc treats chars with the eighth bit set as graphics characters,
and turns on graphics mode before sending them to the screen. I did this
because my terminal, a QVT-101, uses ordinary a's and j's, etc. to draw
lines in graphics mode, and I didn't want the virtual screen handler to be
confused by an "a" that was actually a graphics char. There are also some
functions for initializing and deinitializing the terminal in crt.a.

One big departure from the code in the book is the way YASE handles memory
allocation. In the CP/M-68k world it was safe to assume that the program
would have all the system memory - there are no other programs competing with
YASE for memory. Under OS-9 YASE works a bit differently. YASE asks
the operating system for memory using F$SRqMem each time it needs a buffer,
and it returns memory to the operating system each time it done with a
buffer. This means that OS-9 YASE has a used list, but no free list.

One thing about the source code in the book bothered me a lot: Donald used
a lot of hard-coded constants in some places. I have tried to make everything
symbolic. Buffer size, tab size, screen jump increment, border chars, screen
size, and even command key definitions are defined in file cursor.h - that
way if you really want 8 column tabs you just change the file and re-assemble.
By the way, all the customization you should ever need to do is in two files:
cursor.h has some definitions, and crt.a has some terminal strings.

I have found only a single bona fide bug in the code from the book, and a
minor one at that. The delete char right command (^G) could mess up the
current line count if you deleted a blank line. I fixed it by detecting if
the char being deleted was a newline.

I have used YASE extensively in the two weeks since I got it debugged, and I
haven't found any other bugs. This document was prepared with YASE, of course.

                               APPENDIX D

                        ENHANCEMENT SUGGESTIONS

There are just a few words I would like to say about future enhancements to
YASE. To start with, you should be aware of some the design choices inherent
in its organization. One of YASE's basic principles is that the routines
that manipulate the buffer do NOT communicate with the routines that paint
the screen. This means that after every keystroke YASE calls align_scr() to
get the cursor within the vertical confines of the window, and then it calls
prtscr() to repaint the ENTIRE screen. Of course, the virtual screen
interface ensures that only changes are actually sent to the terminal, but
there are still a couple of tight loops that need to run as fast as possible
to keep YASE responsive. I would be especially wary of adding code to either
one of the routines I mentioned. You might wish to purchase the book before
attempting anything major.

This becomes a problem when one considers ways to handle the block marker
problem. Currently YASE does not highlight a block in any way, and it erases
the block markers whenever you make a new change in the file. Unfortunately,
most of the schemes for highlighting the block and/or making block markers
move with file changes involve tests within those tight loops. You don't
want to be checking for the start of a marked block when printing the screen,
since that will only slow things down.

You can run into a similar problem if you plan to make YASE into a virtual
memory editor capable of editing files larger than the memory buffer. Most
virtual memory schemes for editors involve more complicated data structures,
and it will take more time to pull data out of the structures.

So, what does it make sense to change? Here are my suggestions. I plan to
at least attempt these changes, so you if you aren't really into hacking up
the code (in a good sense, that is) you might consider contacting me to
see what the current status is.

Currently, when YASE writes a file to disk it first deletes any old file by
the filename selected, and then creates a new file. This is somewhat risky;
a better idea would be to erase a backup, rename the original to make it a
backup, then save the edit buffer with the file name selected.

Another nice touch would be to add command line arguments. YASE should be
able to read a buffer size specification off the command line, as well as
read an arbitrary number of files into windows in preparation for editing.

Error reporting in the current version is adequate but not great. It would
be nice if YASE used OS-9's error codes and error messages to greater
advantage.

In the book the authors mention that the find and replace command doesn't
check to make sure that there is room in the buffer for the replacement
text. It would be nice if this routine were as bullet-proof as the rest of
the code.

YASE lacks one of Wordstar's useful Quick commands: ^QY, which deletes from
the cursor column to the end of the line. It shouldn't be too hard to add,
since no changes to the data structure's design or display routines would be
needed.

One of the enhancements I plan to work on concerns YASE's ability to adapt
to different terminals automatically. It would be nice if it could read
OS-9's termset file to get the info it needs.

One final feature that would be nice would be the ability to execute a shell
command. It really isn't feasible to direct shell output to a window, so
instead one would simply set the cursor to the bottom line of the screen
and let the shell take off.

If you make changes to YASE, please release your new version to the public.
And by all means, please document changes thoroughly! The job's not over till
the paperwork's done...
 
-------------------------------------
The views expressed in OS-9 Discussions are those of the individual authors
only.  Copies of digests are available by mail request.
------
Moderator:  John Daleske   cbosgd!cbdkc1!daleske    daleske@cbdkc1.ATT.COM
Submissions should go to:  cbosgd!os9               os9@cbosgd.ATT.COM
Comments to the moderator  cbosgd!os9-request       os9-request@cbosgd.ATT.COM

*********************
End of OS-9 Discussions
*********************