[comp.lang.forth] PYGMY Forth

ForthNet@willett.UUCP (ForthNet articles from GEnie) (01/05/90)

 Date: 12-28-89 (08:16)              Number: 1553 (Echo)
   To: R.BERKEY [ROBERT]             Refer#: 1494
 From: ZAFAR ESSAK                     Read: NO
 Subj: PYGMY FORTH                   Status: PUBLIC MESSAGE

 I have read the comments by you and Frank regarding LMOVE and MOVEL 
 naming conventions and the premise 

 RB> the Forth convention of having the least-changing object on top 

 However, from a human User/programmer point of view having the segment 
 followed by the offset seems the easiest to handle.  The representation 
 on the stack would automatically follow with the segment below the 
 offset. 

 As I have said in prior messages I prefer the naming as LMOVE & LFILL 
 and (now historically) LCMOVE LCMOVE> because the leading "L" serves to 
 identify a family of words which can be found quickly in a search. 
 Having two names based on position of parameters on the stack will 
 serve to confuse newcomers too, I'd bet. 

 As for the premise, I would think the top of the stack is the place 
 where one would want to see the parameters that are apt to change most. 
 I must be missing something. 
 ---
  * Via Qwikmail 2.01

 NET/Mail : British Columbia Forth Board - Burnaby BC - (604)434-5886   
-----
This message came from GEnie via willett through a semi-automated program.
Report problems to: 'uunet!willett!dwp' or 'willett!dwp@gateway.sei.cmu.edu'

ForthNet@willett.UUCP (ForthNet articles from GEnie) (01/11/90)

 Date: 01-09-90 (19:46)              Number: 235
   To: ALL                           Refer#: NONE
 From: PETE MACK                       Read: HAS REPLIES
 Subj: PROBLEM WITH HANDLES..        Status: PUBLIC MESSAGE

 please look at handles.arc.. I am having trouble opening more than 15
 files. Using int 21-funct 67.. Thank You..

 NET/Mail : LMI Forth Board, Los Angeles, CA (213) 306-3530             

 Date: 01-09-90 (22:11)              Number: 236
   To: PETE MACK                     Refer#: 496
 From: RAY DUNCAN                      Read: NO
 Subj: PROBLEM WITH HANDLES..        Status: PUBLIC MESSAGE

 I looked briefly at your test program.  I don't have time to figure out
 exactly what is wrong with it, but I can assure you that Int 21H
 Function 67H does *definitely* work as advertised.  It is only available
 in MS-DOS 3.3 and later though.

 My guess is that even though you think you are restricting the amount of
 memory assigned to the program with the Linker switch, this is not
 really happening, and the program is getting allocated all the available
 memory.  in such a case Int 21H Function 67H will fail because it can't
 allocate a new block to hold the expanded handle table. 

 It could also be that the runtime library's support for this is flakey.

 If you use int86 to resize your program's memory block (say, down to 128
 KB maximum if you are small model) with function 4ah then ask for more
 handles with function 67h it should work as expected.  I just tried it
 interactively from PC/FORTH and it worked fine.

 NET/Mail : LMI Forth Board, Los Angeles, CA (213) 306-3530             
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: 'uunet!willett!dwp' or 'willett!dwp@gateway.sei.cmu.edu'

ForthNet@willett.UUCP (ForthNet articles from GEnie) (02/14/90)

Category 1,  Topic 45
Message 24        Tue Feb 13, 1990
F.SERGEANT [Frank]           at 01:01 CST
 
 To Doug Philips re changing registers in Pygmy CODE words

 Here's a quote from screen 2102 (in ASM.DOC):

         If your routine disturbs CS, DS, BP, SP, SI, or BX
      it must restore it.  The direction flag must be left clear.

   Yes, it is perfectly proper to change the other registers without 
restoring them or to change the above registers if you restore them.   Forget
about CS, you aren't going to change it.  Suppose you want to do a DOS Int $21
call that needs other registers set up than the built  in words DOS or DOS2
provide.  For example, you might want to use  function $40 "Write to a File or
Device" and you want to use a buffer  outside of Pygmy's segment.

   CODE WRITE-BUF
    ( buf-offset  buf-seg  handle  count -  #bytes-written f)
    BX CX MOV,  ( move count from TOS to CX)
    BX POP,     ( put handle in BX)
    AX POP,     ( put seg temporarily in AX)
    DX POP,     ( put offset in DX)
           (  now we have all our parameters off the data stack)
           (  and it is free for us to use to save DS          )
    DS PUSH,    ( save DS)
    AX DS MOV,  ( reload it with segment)
    $4000 #, AX MOV,   ( tell DOS we want function $40 )
    $21 INT,           ( do it )
           ( now AX holds bytes actually written if carry is not set)
           ( or an error code if carry is set )
    DS POP,    ( restore DS )
    AX PUSH,   ( push either count or error code )
    BX BX SBB, ( convert the carry flag to a forth flag of -1 or 0 )
               ( this might have been clearer if written this way  )
               (    CS, IF,  -1 #, BX MOV, ELSE, BX BX SUB,  THEN, )
    NXT,
  END-CODE

  Note that we don't bother preserving AX or CX or DX.  BX is altered,  but
carefully, as we must see that it holds Top of Stack.  DS was saved before the
$21 INT, and restored afterwards.  I haven't tested the  above routine put it
should get the general idea across.  You could  change the code to accomodate
a different order for the operands.

  You know what must go in the various registers by consulting a  reference
book on DOS calls.  I'm looking at a Microsoft programmer's  reference manual
for MS-DOS 2.0.  

 And, what's the worst that can happen if you screw it up?  Probably  just
wiping out your hard disk.  Current backups might add to your  peace of mind,
but Forth programmers live dangerously and crash the  system all the time.  

  -- Frank
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: 'uunet!willett!dwp' or 'willett!dwp@gateway.sei.cmu.edu'

dwp@willett.UUCP (Doug Philips) (02/14/90)

In article <460.UUL1.3#5129@willett.UUCP>, F.SERGEANT [Frank] writes:
>  Here's a quote from screen 2102 (in ASM.DOC):
> 
>          If your routine disturbs CS, DS, BP, SP, SI, or BX
>       it must restore it.  The direction flag must be left clear.
(Blush).  I just assumed that that info should have been in TECH.DOC.

>                                        Suppose you want to do a DOS Int $21
> call that needs other registers set up than the built  in words DOS or DOS2
> provide.  For example, you might want to use  function $40 "Write to a File
> or Device" and you want to use a buffer outside of Pygmy's segment.
That's, in fact, one of the things I wanted to do.  I'm still struggling with
how to factor my end application, but so far I'm working bottom up and starting
with these kinds of words.

>   You know what must go in the various registers by consulting a reference
> book on DOS calls.  I'm looking at a Microsoft programmer's  reference manual
> for MS-DOS 2.0.  
I have 'The MS-DOS Encyclopedia' which purports to cover 1.x -> 3.x.

>  And, what's the worst that can happen if you screw it up?  Probably  just
> wiping out your hard disk.  Current backups might add to your  peace of mind,
> but Forth programmers live dangerously and crash the  system all the time.  
Whew, I feel soooo much better now!  :-)

Thanks for the info.

		-Doug

---
Preferred: willett!dwp@gateway.sei.cmu.edu OR ...!sei!willett!dwp
Daily: ...!{uunet,nfsun}!willett!dwp   [in a pinch: dwp@vega.fac.cs.cmu.edu]

ForthNet@willett.UUCP (ForthNet articles from GEnie) (03/11/90)

 Date: 03-08-90 (22:39)              Number: 3012 (Echo)
   To: IAN GREEN                     Refer#: 3011
 From: MICHAEL HOBSON                  Read: NO
 Subj: CMFORTH FOR MS/DOS            Status: PUBLIC MESSAGE

 [Note, Pygmy is also available on SIMTEL20 --dwp]

 Frank Sargent has written a marvelous MS/DOS Forth called Pygmy, that is
 supposed to be a very close approximation of cmForth (Chuck Moore Forth)
 that is available for downloading here on this board.  PYGMY12.ZIP is 
 the latest version, I believe.  It comes with all the source code, a 
 metacompiler (allows you to customize Pygmy with your own enhancements 
 and/or revised kernel word definitions), an 8086 Assembler and a small 
 screen editor built in.  The executable is only about 30 Kbytes!!  If 
 you re-metacompile it and leave out the editor and assembler, it fits in
 about 12 Kbytes!!  Don't make the mistake of writing this thing off as a
 toy - there are around 400 built-in words in this little mighty-mite.
 "The Elf" [^]-[^]
            \---/
 Elf - A wise (?) and helpful variety of magical being.

 P.S. -- as supplied, a full 64K segment is consumed at run-time, but 
 this can be easily changed by altering a couple of constants in the 
 source and metacompiling.   I shrunk a copy (without the screen editor) 
 to about 20K of run-time RAM with no problems.  This is small enough to 
 build really compact TSR programs with.
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: 'uunet!willett!dwp' or 'willett!dwp@gateway.sei.cmu.edu'

ForthNet@willett.UUCP (ForthNet articles from GEnie) (03/18/90)

Category 1,  Topic 45
Message 26        Sat Mar 17, 1990
F.SERGEANT [Frank]           at 15:46 CST
 
[ PYGMY 1.2 is available on SIMTEL20.  SIMTEL20 files are accessible
  both via direct FTP (for internet sites) and via BITNET listserv's
  (email servers) to uucp/mail only sites.  See the OLIS SIMTEL20 file
  for more information.  -dwp]

RC> email me or post the source for PIGMY Forth since I can't access  RC> the
archived versions?

 to Rob Chapman on UseNet

     Is the problem lack of access to an MS/PC DOS machine or lack of  access
to GEnie & the xCFBs or ... ?  Or is it just that Pygmy is on  the bulletin
boards in ARC format?  

     I enjoyed looking at your botFORTH postings and I'd like to return  the
favor.  Can you write me (Box 1613, San Marcos, TX  78667) with  your address
and the above answers (& perhaps the below requested  article)?

     I gather from the recent FORML proceedings that "bot" stands for  "bundle
of technology."  I'd like to hear (read, etc) more about that.   How about
writing up all the details you can?

     By the way, I changed Pygmy's FOR NEXT to the zero does it zero  times as
you suggested.  It will appear in PYGMY version 1.3 if I issue  another
version.

     -- Frank Sergeant
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: 'uunet!willett!dwp' or 'willett!dwp@gateway.sei.cmu.edu'

ForthNet@willett.UUCP (ForthNet articles from GEnie) (03/18/90)

Category 1,  Topic 45
Message 27        Sat Mar 17, 1990
F.SERGEANT [Frank]           at 15:47 CST
 
MB> "Cleverness" (aha! this just happens to work so I'll use it) MB> at the
expense of clarity is one of the things that gives Forth MB> a bad name in the
computer community at large.

  To Mitch Bradley on UseNet

     Yes, you are right, thanks.  The tiny savings by not defining a  C@+ or
whatever cannot justify the negative mnemonic value of using  COUNT
inappropriately.  I now plan to correct this.

   The next problem is that I like the name C@+ for this  ( a - a+1 c) while I
think botFORTH & cmFORTH would tuck the char under the address,  which is
useful also.  Tentatively I'll go with calling it C@+.

     -- Frank
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: 'uunet!willett!dwp' or 'willett!dwp@gateway.sei.cmu.edu'

wmb@MITCH.ENG.SUN.COM (03/23/90)

>    The next problem is that I like the name C@+ for this  ( a - a+1 c)
> while I think botFORTH & cmFORTH would tuck the char under the address,
> which is useful also.  Tentatively I'll go with calling it C@+.

Yes, both ways  ( adr -- adr' char )  and  ( adr -- char adr' )  have
their uses.  If C@+ is already used in other systems, by all means
try to be compatible.  If you need a different function, call it
something else.  NEXTBYTE seems like a good name to me.

Cheers,
Mitch Bradley

ForthNet@willett.UUCP (ForthNet articles from GEnie) (06/29/90)

Category 1,  Topic 45
Message 29        Thu Jun 28, 1990
F.SERGEANT [Frank]           at 02:01 CDT
 
     Len, thanks for the comments.  I'm sorry I misunderstood about the  disk
being one giant file, but glad to find out you like how Pygmy  handles files. 
(It was more amusing, though, when I thought you  objected to it being one
giant file at the same time Robert objected to  it NOT being one giant file.)

     About NUMBER, I have a few random thoughts but no definite  suggestion:

     I, also, like that it *uses* the count rather than requiring a  space at
the end of the string.  It's always seemed silly to me to use  a counted
string and ignore the count and require that it actually be a  delimited
string.  

     The only thing that makes the string a bad number is one of the 
characters not being a valid digit, so I see a certain harmony in  -DIGIT
blowing up if it gets a bad digit.  I think this is just a  mental trick.  If
I *prefer* it the way it already *is* then I don't  have to do any work to
change it!  With that disclaimer, I'll continue.

     -DIGIT blowing up is entirely satisfactory when the user uses a 
collection of Forth words as tools.  That is, he types a number and  then a
command.  It only becomes a problem when the application prompts  the user for
a number.  It is a question of who is driving whom.  Since  we are going to
the trouble of giving the user a 'turnkey' system, it  seems sloppy to allow
him to make a mistake that crashes the system.  

     I am not arguing against this.  I think there are many times when  we
*must* insulate the user & the application from each other.  I have  some
regret over it, though.  One of my favorite thoughts (not  original) is that
sometimes you need things but sometimes you only need  things because your
things need things.  So, *we* don't need any  fancier error
recovery/prevention, unless we've already added the  complexity of a fancy
user interface.  Like I said, I'm not trying to  talk us out of fancy user
interfaces.  I think we have to have them to  stay competitive (but I'm not
quite happy).

     The Michael Ham & Mike Elola & Glenn Linderman articles in FD, etc  have
been attempts to deal with this very problem.  One approach was to  detect the
error, as you've suggested, without blowing up.  Another is  to refuse to
accept an invalid keystroke.  It doesn't seem that either  of these properly
belongs in NUMBER.

     If I were to make a suggestion (you've heard of Boolean Logic, and  Ill
Logic, and CMOS Logic, and Mickey Mouse Logic, well this is based  on Inertial
Logic as I discussed earlier) it would be to leave NUMBER &  -DIGIT alone. 
They do what they do just fine.  Instead add a new word  to do just the
testing, just when it is needed.  NUMBER? might be an  acceptable name - or
VALID? or VALID-DIGITS?.  Now, I'm guessing that  this would find use
exclusively for users using decimal base.  It might  not be worth making it
general by consulting BASE, but it could be.  It  would take a string and
check it for valid digits and return a flag.   Here's a quick version that
omits checking for minus signs, etc.

 : VALID? ( a - f) 
   COUNT FOR ( a)   C@+ '0 '9 WITHIN WHILE     NEXT DROP -1 ( f) EXIT
   THEN ( a) DROP (   ) POP ( index) DROP 0 ( f)  ;

     There is more to user input validation than this.  Sometimes  negative
numbers are ok, sometimes only a certain range is ok, etc.

     Thanks for the suggestion.  I'll add it to the stack as I re-work  Pygmy
for version 1.3.
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: uunet!willett!dwp or willett!dwp@hobbes.cert.sei.cmu.edu

ForthNet@willett.UUCP (ForthNet articles from GEnie) (07/29/90)

Category 1,  Topic 45
Message 27        Sat Jul 28, 1990
F.SERGEANT [Frank]           at 10:38 CDT
 
 Alan,    
     To change colors in Pygmy, type   $bf00 ATTR ! where b is the background
color and f is the foreground color.  For  example,  $6000 ATTR ! for black on
tan, $6A00 ATTR ! for green on tan,   $0A00 ATTR ! for green on black.

     Once you find the colors you like, edit $6000 ATTR ! into (BOOT on  scr
#3074, then do

     3074 LOAD
     SAVE  <newname>.COM

 so the new colors will come up automatically next time.  (And/or make  the
change to RESET on scr #3075, replacing HEX 0700 with your number,  and regen
Pygmy.)

  -- Frank
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: uunet!willett!dwp or willett!dwp@hobbes.cert.sei.cmu.edu

ForthNet@willett.UUCP (ForthNet articles from GEnie) (08/06/90)

Category 1,  Topic 45
Message 29        Sun Aug 05, 1990
F.SERGEANT [Frank]           at 11:08 CDT
 
  Doug,
    Thanks for answering what you did & didn't like about Pygmy Forth.   I
appreciate such comments and take them seriously.  I hope there will  be some
improvements in the next version. 

  -- Frank
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: uunet!willett!dwp or willett!dwp@hobbes.cert.sei.cmu.edu

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (08/10/90)

 Date: 08-02-90 (03:46)              Number: 3617 (Echo)
   To: FRANK SERGEANT                Refer#: NONE
 From: CHRIS WATERS                    Read: NO
 Subj: PYGMY 1.3 FORTHCOMING         Status: PUBLIC MESSAGE

 FS:  To Chris Waters (of xCFB, I think)

 Hi Frank,
    Nice to hear from you.  I have no idea if I'm "of xCFB" or not.
 What is it (them? her?)?  I'm connected here through MetroLink (one of
 the several networks sharing this conference) if that's what you mean...

 FS:  I am in the process of revising Pygmy

    Let me see - the version I have is ... 1.1.  Haven't seen 1.2 yet,
 but I'll make an effort to get 1.3 as soon as you release it.  I presume
 we can look forward to an announcement here?

 FS: what would have made it easier for you to feel oriented and in contr

    Well ... as long as you ask ... I'd like to see the glossary
 grouped by category, rather than just in dictionary order.  It would
 make it a lot easier to see what's there and what's not.  Also, it would
 be nice if the help files explained how to print screens, for those of
 us who prefer to browse through hard-copy when we're getting started.

    As a *really* minor issue, I think that SHOW2 should use Epson
 printer codes by default, not Oki.  It's certainly my impression that
 Epson compatible printers are the most common.

    But none of these are major issues (and some may already have been
 addressed in 1.2).  Most of my disorientation comes from being
 unfamiliar with the dialect and not having spent a lot of time with the
 system yet.  Once I get over the learning curve, I suspect I'll give
 Pygmy a lot of use.

    Anyway, thanks for your message, and thanks for an excellent little
 system.  I'll keep my eyes on this space for further developments.

 ttyl,
 Chris

 -> MegaMail(tm) #609:~ Nothin' left to do but :-) :-) :-)
    1.20

 PCRelay:SNAKEPIT -> #150 MetroLink (tm) International Network
 4.10                Snake Pit*408-287-2353*San Jose, CA*HST/v32
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: uunet!willett!dwp or dwp@willett.pgh.pa.us

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (08/13/90)

Category 1,  Topic 45
Message 31        Sat Aug 11, 1990
F.SERGEANT [Frank]           at 17:31 CDT
 
 To Chris Waters (of MetroLink, I think, duh)
   Your message was relayed thru the an "xFCB" (I assume the East Coast  Forth
Board), if I understand things now. 

   Thank you for your suggestions.  That's just what I wanted to know.   I'll
plan to revise the glossary along the lines you have suggested.  I  am
thinking of having the *.COM file include more of the loadable  utilities so
that they'll be ready to go for someone new to Pygmy.   Then he can trim off
the ones he doesn't need, in order to cut it down  to a minimal size again. 
You have a good point about the Epson codes  being more universally useful. 
Naturally, I have an Okidata printer.   I've factored out the printer setup
and will try at least to explain in  the HELP file how to print to the Epson
and how to print out the source  code.

   My feeling is that ver 1.2 is MUCH better than 1.1 but that, at this 
point, you might as well wait for 1.3.  I haven't been completely happy  with
the file handling (in either 1.1 or 1.2) and have made some  substantial
changes for 1.3.  As it stands now, files no longer have to  be opened "in
order" - you can have the 1st file use screens 1800 thru  2200 and have the
next file use 300 thru 312 and then skip one or more  slots and open another
file with screens 900 thru 950, and so forth.   Now all aspects of file
handling is done relative to the files "unit"  number.  So far I've been
pleased with this new approach.  It goes  something like this:

       NAMEZ: MYFILE.SCR
           ( NAMEZ: in a defining word that creates a Forth word
             that returns the address of its own name.  The string
             ends in $00 so as to be a suitable "asciiz" file name.)

       FILE-NAME: DATA1  C:\FORTH\WORK\OLD\YOURFILE.SCR 
           ( FILE-NAME: in a defining word that creates a Forth word
             that returns the address of the following asciiz string.)

       3000 MYFILE.SCR 7 UNIT 
           ( plug the name & starting blk# into unit #7)
        900 DATA1 9 UNIT
           ( plug the name & starting blk# into unit #9)

     Then, whatever you want to do with a file is done with its unit#  (or
with the block numbers).
          7 OPEN  ( open the file MYFILE.SCR)
          9 MAKE  ( create the empty file named YOURFILE.SCR in
                    the C:\FORTH\WORK\OLD\ subdirectory)
        100 9 MORE ( extend that file with 100 blank screens)
          9 >EOF   ( position to end of file)
          9 >BOF   ( posititon to beginning of file)
          9 EXISTS?
             ( find out a non-zero length file of that name is present)

       3000 3050 SETTLE  ( make the heavy screens in this range in 
                           MYFILE settle to the bottom - the light 
                           screen - with only blanks - float to the 
                           top)

          9 CHOP ( truncate MYFILE.SCR so that all trailing blank 
                   screens are chopped off.  Compare this to -TRAILING 
                   on strings.)
     Also available are a few words to make sequential file access  easier,
such as

       FILE-WRITE ( a #bytes unit# -)  ( for sequential file writes)
       FILE-READ  ( a #bytes unit# -)  ( for sequential file reads).

     As I was doing this, I thought "hey, maybe this is similar to the  file
handling in BASIS.  If so, maybe I can be "compatible" with the  "standard" at
no great mental & emotional cost to myself!"  So, I got  out BASIS 11 and
looked over the file words.  Nope! I can't do it.  It  hurts too much.  Maybe
I'll change my mind.  In the meantime, if you  want it, the tools in Pygmy 1.3
will let YOU do it.  Maybe I'm wrong  and maybe I'll come around, I don't know
yet.

     After I got the file handling changed around and a few other  things, I
got interrupted by real work.  This is delaying ver 1.3  slightly, but I'm
using the new Pygmy, so this gives me a chance to  exercise it.

     Really about the only thing I dislike concerning BLOCKs for source  code
is for CODE words.  High level words seem to fit nicely in a  block, but some
of the longer CODE words, where the assembly language  is a little obscure to
begin with, and extensive comments are  especially important, MUST spread
across a number of blocks.  I have no  real solution for this yet except "be
neat, and put in those comments,  and spread across as many screens as it
takes."  Am I leaning toward  variable length, CRLF delimited, line-oriented,
sequential files for  source code?  I don't think so, but ...  Emotionally, I
am leaning  toward the-entire-disk-is-one-BLOCK-file.  I'd still keep SETTLE
and  COPIES but almost all the rest of the file handling could disappear!  I 
don't see any way in H.ll to do it, though, as I am "forced" to  co-exist with
DOS.  If I see a (pretty) way around this, BANG! goodbye  DOS.  (I don't
envision any such changes for ver 1.3, though.)

  -- Frank
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: uunet!willett!dwp or dwp@willett.pgh.pa.us

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (08/16/90)

 Date: 08-13-90 (12:14)              Number: 3647 (Echo)
   To: FRANK SERGEANT                Refer#: 3631
 From: CHRIS WATERS                    Read: NO
 Subj: PYGMY FORTH                   Status: PUBLIC MESSAGE

 [After several attempts with the same results I concluded that the
  "transmission" errors herein had already occurred before I got a hold
  of it.  Sorry for any inconvenience. -dwp]

 FS: To Chris Waters (of MetroLink, I think, duh)
  TMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
     It's ok, Frank, I'm really none to clear on all these connections
 myself.  It boggles me how many networks meet here - I've given up
 keeping track.  <g>  FWIW, your messages have an East Coast Forth Board
 tag when they appear HERE (Snakepit BBS).

     I pretty much call this board just for ForthNet.  I have another
 Sysop I'm trying to persuade to carry this conference.  Of the systems
 I've shown him, he's found Pygmy the n_fQ@%5AIMMRY9JA!=U!Qd{U"5RA+k+dto know that.

 FS: Thank you for your suggestions.  That's just what I wanted to know
  TMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
     Glad I could be of service.  I'm suprised nobody else jumped into
 this thread.  I figured your post would generate lots of responses, but
 mine was the only one I saw.

 FS:   My feeling is that ver 1.2 is MUCH better than 1.1 but that, at
  3 this point, you might as well wait for 1.3.
  TMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
     Hmm, ok, 1.1 was pretty impressive.  I'm ready to be stunned.  :)

     As far as the file vs. block access goes, I waver back and (ahem)
 forth about this issue.  Blocks certainly make make things simpler, e.g.
 editing, virtual memory, etc.  OTOH, files provide compatibility with
 worlds full of development tools.  And I get tired of re-inventing the
 wheel.  But as long as the system source is available, I can experiment
 freely, using either approach as I desire.  Actually, since most of my
 high-level definitions are 2 or 3 lines long, kilobyte blocks are too
 large.  And, as you pointed out, they are too small for assembler
 definitions.

     I haven't seen BASIS yet.  I'm going to have to check this out one
 of these days.  Some of the comments I've seen around here worry me
 slightly.  I got a couple of key things pushed throug8n the
 83-standard, and I'm ready to try again if need be.  Ghod I hope they
 gave up on floored division.  :)

 Chris

 PCRelay:SNAKEPIT -> #150 MetroLink (tm) International Network
 4.10                Snake Pit*408-287-2353*San Jose, CA*HST/v32

 NET/Mail : DC Information Exchange, MetroLink Int'l Hub.  (202)433-6639
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: uunet!willett!dwp or dwp@willett.pgh.pa.us

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (08/20/90)

 Date: 08-16-90 (07:40)              Number: 3663 (Echo)
   To: FRANK SERGEANT                Refer#: NONE
 From: JAN HOFLAND                     Read: NO
 Subj: 68HC11 & PYGMYFORTH           Status: PUBLIC MESSAGE

 Hello Frank,

 First, I want to thank you for the 68hc11 assembler you implemented for
 Jack Brown.  Jack tells me that you did it not ever using the chip.
 Well done!

 Second, thanks for pygmy forth.  When a new version is available, I
 would like to receive such a copy.  By training and experience, I am a
 digital hardware designer.  I am trying to learn enough about the inner
 workings of forth to eventually write a simple version myself.  Your
 efforts and thoughtful comments regarding how things (should) work help.

 Regards,

 Jan Hofland
 ---
  ~ EZ 1.27 ~

 NET/Mail : British Columbia Forth Board - Burnaby BC - (604)434-5886   
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: uunet!willett!dwp or dwp@willett.pgh.pa.us

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (08/20/90)

Category 1,  Topic 45
Message 34        Sun Aug 19, 1990
F.SERGEANT [Frank]           at 13:24 CDT
 
 To Chris Waters     1 of 2
 CW>I haven't seen BASIS yet ...  Ghod I hope they gave up on floored 
 CW>division.  :)

 I can't imagine what you are talking about.  The standards committee  is
composed of the finest minds in the Forth community.  They have the 
experience, insight, and level-headedness to optimize the standards  process. 
In addition, they are completely in touch with the vendors  and, through the
vendors, with all the customers (the users of Forth)  of the vendors.  Those
customers are countable.  By that I mean, the  committee can say "so many per
cent of all Forth users are now using  [floored division or zero'd division or
this vocabulary structure or  ...]."  I believe it is through this method that
they are able to  determine that the Forth-83 standard was NOT a success as it
is NOT  used by almost all the customers of the vendors, and therefore the 
current committee cannot merely update the Forth-83 standard with minor 
changes (such as "like, we said 16 bits - well, like, do it with 32  bits if
you want to, No Problem!").  Without this countability it would  be much more
difficult to determine that Forth-83 was so terribly  unacceptable to so many
people.

    I can just hear you complaining now that this method of counting  excludes
the few users of L&P's F83 (and the few users of its few  derivatives such as
F83X, Y, etc & F-PC), some of which probably DO  find the Forth-83 standard
acceptable.  Surely, and the sample made up  from the vendors' to represent
all of them.  Besides, on another level,  these people (users of non-Vended
systems) may REALLY not count.  (If  the current countable Forth users are not
felt to be a sufficiently  large sample, users of C and Pascal could be
considered as well, I  suppose.)

     Of course, in the previous paragragh I'm not being entirely  serious, or
fair.  More and more, as I search for my "perfect" Forth, I  see very similar
problems to those facing the standards committee.  Further, various of its
members such as Mitch Bradley, post messages  that explain courteously, and at
length, the reasoning and pressures  behind their decisions.  I find I have to
agree with them in many ways.  If I were on the committee I would probably say
ok ok I'm tired, let's  finish it.  I would like to see an (accurate) press
release that says  "the entire Forth community met to consider a standard and
agreed  unanimously not to even HAVE a standard."   But, I suppose it wouldn't
 be unamimous.

  -- Frank
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: uunet!willett!dwp or dwp@willett.pgh.pa.us

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (08/20/90)

Category 1,  Topic 45
Message 35        Sun Aug 19, 1990
F.SERGEANT [Frank]           at 13:25 CDT
 
 To Chris Waters     2 of 2
 CW>I haven't seen BASIS yet ...  Ghod I hope they gave up on floored 
 CW>division.  :)

     All of this is just an introduction to a discussion of floored vs  zero'd
division.  I believe that the way it currently stands they  require two new
words, one for each way, and you define / etc in your  application to use the
method you choose.

     I've recently been pouring over Knuth's book and Roedy Green's  assembly
listing on division and thinking about and worrying over  division.  The one
thing I've learned is that I ain't never gonna be a  mathematician.  I believe
that in the history of man's mathematical  progress there was a very long
period of time before negative numbers  were accepted.  Now we have no
(little?) trouble grasping them.  

     Now let's take division.  When all the numbers are positive  integers and
we want a quotient and remainder we are all agreed.  The  quotient is
"floored" (if the real quotient is not an integer, the  lower of the two
integers it falls between is chosen) and it is also  "truncated toward zero"
(of those same two integers, the one nearest to  zero is chosen).  The
remainder is the positive integer difference  between the dividend and the
product of the chosen integer quotient and  the integer divisor.  What could
be simpler?

     If we want only a quotient (no remainder), and the real quotient  is not
an integer, the problem is more complex.  Do we take the floor  or the ceiling
or round according to some particular formula (and there  are several to
choose from)?  I think we are generally agreed that we  either take the floor
(which is also the zero'd) or that we round  somehow.

     It is only we start to consider negative dividends and or negative 
divisors that things really go to hell.  What does it even MEAN to  divide
negative numbers?  I don't know.  I can go back to accounting  analogies and
consider a negative amount to be money I owe and a  positive number to be
money I have.  Consider 5 partners who owe a  thousand dollars.  Each
partner's share would be   -1000 5 /  so I can  wrap my mind around division
involving a negative dividend.  Suppose  there were only 3 partners.  -1000 3
/   now we need /MOD fer sure.   Is each one's share  -333 with a -1 left
over?  Or, is each one's share  -334 with a +2 left over?  I think we are in
the realm of philosophical  questions here.  As an accountant I'd say, "cough
up $333.33 each and  I'll pay the extra penny!"  (Accountants are happy to
write off many  dollars to make things come out even, a mere penny would be
completely  inconsequential.)  So, I can see dividing a positive or a negative
 number by a positive number, but have not been able to fully wrap my  mind
around the idea of dividing by a negative number.  What does it  MEAN?  (It
probably means nothing unless you need to do it for a  specific purpose, at
which point you know what it means.)

     Many months ago I suggested that flooring negative quotients (  -1000 3 /
-->  -334  )  didn't feel right.  It didn't correspond to my  "grade school"
understanding and every day familiarity.  I suggested a  solution: treat
negative numbers like we (and I use "we" loosely!)  treat square roots of
negative numbers.  We handle these by factoring  out that troublesome -1.  We
find its square root separately (and by  definition call it "i") and then are
left with the familiar problem of  finding a square root of a positive number.

     I liked (and still like) the idea of factoring out the -1s from  the
dividend and divisor so that we are doing division with positive  numbers
(where there is no particular controversy).  Thus,  -1000/3  would be treated
as    (-1)( 1000/3)  and  -1000/-3  would be  (-1)(-1)(1000/3)  So, we really
only need division of positive numbers  by positive numbers.  (I'm not saying
this solves any problems - just  that it is a comforting way for me to look at
it.)

     Remember, when it comes to floored vs zero'd, there is no  difference at
all for positive numbers and no difference at all when  the real quotient is
an integer.  It only matters when one or both of  the operands is negative,
and then only if there is a remainder.

     In working over some higher precision division words, I was  prepared to
try flooring.  Not because I think it is superior, but  because Robert Berkey
thinks it is superior (I think) and because he  understands it better than I
do.  However, as I looked it over more &  more, I stayed dissatisfied with
having  -1000 3 / give -334 with a +2  remainder.  I think my applications
involving negative numbers are much  more likely to concern negative dollars
or positive dollars divided by  a positive number.  In such a case, I think it
is unfair discrimination  (I fully support accurate, just discrimination) to
treat the numbers on  one side of a balance sheet as different from those on
the other side.  So, I want  -1000 3 / to give -333 with a -1 left to be dealt
with and  1000 3 / to give +333 with a +1 left to be dealt with.

     I hear you need floored with negative operands in order to control 
stepper motors without them jerking.  This makes no sense to me.  Drive  'em
from a table; drive 'em always with either +1 or -1 till a feedback  switch
goes true; scale the   -10 -9 -8 ... -1 0 +1 +2 ... +9 +10  up to 0 1 2 3 ...
18 19 20   - so what's the problem?  As always, maybe  I'll learn more in the
future and see the need for floored division  instead of zero'd. 

  -- Frank
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: uunet!willett!dwp or dwp@willett.pgh.pa.us

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (08/24/90)

Category 1,  Topic 45
Message 36        Wed Aug 22, 1990
F.SERGEANT [Frank]           at 22:37 CDT
 
 To Jan Hofland
 JH> First, I want to thank you for the 68hc11 assembler you 
 JH> implemented for Jack Brown.  Jack tells me that you did it not 
 JH> ever using the chip. Well done!

 You're very welcome.  Thanks for the encouragement.  Yes, the  assembler was
meant as a little joke (I like good jokes, not bad  jokes).  He'd been asking
if anyone knew of a pd 'HC11 assembler, so I  whipped one up for him as a
surprise.  It was something I wanted anyway  for my own use, as I planned to
wire up an 'HC11 and thought I would  need the assembler soon.  Unfortunately,
I STILL haven't got to the  'HC11 project.  I was expecting error reports, as
not using it, I  didn't feel like testing it exhaustively.  I then planned to
fix any  problems, but Jack fixed them himself!  I didn't mean to put him to 
that much work, just the work of noting errors.

 Digital hardware designer, huh?  What sort of things do you work on?   That
area is of great interest to me.  Maybe I'm an anti digital  hardware designer
(digital anti-hardware designer?) as I find one of  the most beautiful things
in the world to be eliminating/replacing the  hardware with software.  Of
course, it all depends on hardware in the  end.

 Say, is that simple Forth you want to write destined for any  particular uP? 
If it just happens to be for an 'HC11 (or any of its  subsets, such as '00 or
'01 or maybe '05) then you already HAVE the  assembler for it and you already
HAVE a metacompiling Forth (Pygmy).   The 'HC11 assembler as I originally
posted it was all set up to run  under Pygmy, so refer to that, but
incorporate Jack's corrections, but  not his changes for a different Forth. 
Then, it should be a simple  matter to re-write all the primitives for the
'HC11 and use Pygmy to  meta-(cross)-compile the new version.  You won't need
the editor, etc,  to run it as an "umbilical" Forth (use the PC as terminal &
disk server  & connect to the 'HC11 board via a serial line).  That's what I'm
going  to do when I get around to it.  I've already done it with a Zilog 
Super-8.  If you are going to try this, start by re-meta-compiling  Pygmy,
which I think you'll find to be very easy, to get some practice.   If you plan
to ROM the 'HC11 version, the trick is to declare the  variables the same way
the system variables are declared (eg, with  CONSTANTs - see RAM in PYGMY.SCR
for more details).  Hopefully, v 1.3  will be ready in time to help.

  -- Frank
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: uunet!willett!dwp or dwp@willett.pgh.pa.us

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (08/27/90)

Category 1,  Topic 45
Message 38        Sun Aug 26, 1990
R.BERKEY [Robert]            at 14:57 PDT
 
  Frank Sergeant writes, 90-08-19:

   >       I've recently been pouring over Knuth's book and Roedy
   >  Green's assembly listing on division and thinking about and
   >  worrying over division.

I got out and brought up most of Roedy Green's division code in the middle of
last month.  Just needs eighteen assembler labels, and a 43K file, with the
end result a floored */ with an intermediate 64-bit result.  Whew.  Of course,
most of his file is documentation, and the key code implements a 64-bit
divided by a 32-bit UM/MOD for the 80x8n.



   >      In working over some higher precision division words, I was
   > prepared to try flooring.

I'm curious as to which ones.  I've tried implementing a signed version of
MU/MOD ( d n -- rem d ) built with truncated-to-zero division, and another
version built with floored division.  In each case the code at first seemed to
work, but actually contained subtle bugs.



   >  I think my applications involving negative numbers are much more
   >  likely to concern negative dollars or positive dollars divided by
   >  a positive number.  In such a case, I think it is unfair
   >  discrimination  (I fully support accurate, just discrimination) to
   >  treat the numbers on one side of a balance sheet as different from
   >  those on the other side.  So, I want  -1000 3 / to give -333 with a
   >  -1 left to be dealt with and  1000 3 / to give +333 with a +1 left
   >  to be dealt with.

Those "to be dealt with" remainders make a difference.

(1) If they are being discarded, then we're talking about the numerals shown,
i.e., unrounded truncated-to-zero quotients.  (2) If the remainders are used
to adjust the quotient, that's rounded-to-nearest division, and the numerals
shown are temporary intermediates. (3) A report with both values, such as the
split-up of the partnership, is not one I'm familiar with.  Conceptually it
makes sense, but how a programmer gets involved with it isn't apparent to me.


   >      I hear you need floored with negative operands in order to
   > control stepper motors without them jerking.  This makes no sense
   > to me.  Drive 'em from a table; drive 'em always with either +1
   > or -1 till a feedback switch goes true; scale the   -10 -9 -8 ...
   > -1 0 +1 +2 ... +9 +10  up to 0 1 2 3 ...  18 19 20   - so what's
   > the problem?

   Yes, without having the code from application examples it is difficult to
verify what the problem is.

 Robert

-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: uunet!willett!dwp or dwp@willett.pgh.pa.us

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (09/03/90)

Category 1,  Topic 45
Message 39        Sun Sep 02, 1990
F.SERGEANT [Frank]           at 11:41 CDT
 
     Len made this comment in the Haydon guest conference:  

 >  In every Forth I know except one, TIB is the Address of the 
 >terminal input buffer. In Pygmy, it is a variable that contains the 
 >address. That little bit of non-standardization cost me half a day's 
 >work. This is an example of why standards are necessary.

     And, the question has come up previously as well.

     I would like to think that, rather than costing Len half a day's  work,
it provided him an opportunity (a laboratory, if you will) for  honing his
opinions about standards.

     I have always said that a quality education is expensive.

     I would like to quote from the fig-FORTH GLOSSARY:

           TIB       --- addr                     U
                     A user variable containing the
                     address of the terminal input
                     buffer.

     So, I believe Pygmy is in good company regarding its method of  handling
TIB.

     I hope I have not, and I believe I have not, misled anyone into  thinking
that Pygmy Forth is an attempt to implement the/a "standard."

     I really enjoyed Glen Haydon's remarks in the guest conference, 
especially his comments about free markets.

  -- Frank
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: uunet!willett!dwp or dwp@willett.pgh.pa.us

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (09/06/90)

 Date: 08-27-90 (08:04)              Number: 711 (Echo)
   To: FRANK SERGEANT                Refer#: 707
 From: JAN HOFLAND                     Read: NO
 Subj: PYGMY FORTH                   Status: PUBLIC MESSAGE

 Hi Frank,

 Thank you for you lengthy reply.  I work on building special purpose
 controllers for our Dynamic Signal Analyzer product line here at
 Hewlett-Packard.  The stuff I have worked on in the last few years are
 built around the Motorola processor line, both 68000 and 68020.  There
 is usually a fair amount of RAM (the controller now uses 16 Mbytes) and
 then interface to special purpose busses.  My current assignment
 involves interfacing to the SCSI bus.

 With respect to what processor to target my interest in rolling my own
 forth, the list is many.  There's the hc11 and then the RTX product line
 and even a Motorola 56001.  At this point my goal is to understand how
 to do it and what routines and procedures are necessary at the machine
 code level to support a forth system.  Truthfully, at this point I am
 more interested in learning the underlying software routines rather
 than using the result for some specific purpose.

 I look forward to the next pygmy forth release.

 Regards,

 Jan Hofland
 ---
  ~ EZ 1.27 ~ 

 NET/Mail : British Columbia Forth Board - Burnaby BC - (604)434-5886   
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: uunet!willett!dwp or dwp@willett.pgh.pa.us

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (09/09/90)

Category 1,  Topic 45
Message 41        Sat Sep 08, 1990
F.SERGEANT [Frank]           at 16:52 CDT
 
 To Jan Hofland,

    Under the guise of replying about Pgymy, I'd like to ask a bulletin 
boarding question(s).

    With luck, I may be able to release Pygmy Forth version 1.3 within 1 to  2
weeks.  The Forth part is finished, I think.  There are many questions to 
resolve about the documentation and what to include in the package.

    Now my real question: I seem to have a mental block in dealing with 
computer bulletin boards.  I seem to get along well enough in GEnie now,  but
I've tried logging on to the ECFB and feel very disoriented.  I notice  your
message had an EZ 1.27 tag and the "NET/Mail" connected with it.  What  is
that?  How does it work?  Do I understand that it is possible to log on  to
BCFB (& ECFB) and somehow download all of the new messages in one fell  swoop,
possibly as a ZIP or ARC file?  Then, compose your replies off-line  and
upload a single ZIP or ARC file next time you log on, and have the  system
distribute the various messages to their proper areas?  If so, could  you tell
me how to do it?  Thanks.  -- Frank
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: uunet!willett!dwp or dwp@willett.pgh.pa.us

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (09/21/90)

Category 1,  Topic 45
Message 43        Wed Sep 19, 1990
F.SERGEANT [Frank]           at 23:06 CDT
 
 Pygmy Forth version 1.3

     Here it is.  I uploaded it last night, so it should be available  in the
near future as file #2202 in library #12 as PYGMY13.ZIP (67K).

[See previous ForthNet note, under subject "Files on-line".  -dwp]

     The previous versions were put in library #4, but for variety I  put this
version in the "Experimental Systems" library.

     Thanks to all who made suggestions.  I have acted on some and at  least
thought about the others.  For example, Steve Palincsar suggested  it was
confusing to have the documentation in block files with a .DOC  extension.  I
took that one step further.  I put all the source code in  a single (block)
file, PYGMY.SCR.  This now includes the kernel,  meta-compiler, editor,
assembler, *Starting Forth* examples, and  miscellaneous source code.  I put
all the documentation into the single  (text) file, PYGMY.TXT.  The file
PYGMY.COM, naturally, is the  executable file.  Pygmy Forth with kernel &
editor & assembler now fits  in a 14K file, however PYGMY.COM is 15,368 bytes
long.  The extra is  due to the inclusion of SEE, >SCR, >PRN, and words to
print source code  &/or shadows, 3 or 6 screens per page.  That was done to
make it easier  (as suggested by Chris Waters) for the new recipient of Pygmy
to print  out the source code.  I also have attempted to make CONDENSED
default  to put an Epson printer into 17 cpi mode (and have also included the 
code as before for Okidata printers).  I have included YOURFILE.SCR as  an
empty block file 8 screens long so the person new to Pygmy can get  started
right away with a place to put the code he writes, without  worrying about how
to MAKE or OPEN a file.

     The major changes have to do with file handling.  New file read  and
write words let you read arbitrary numbers of bytes either directly  or
sequentially.  All file accesses are via a unit# or via block  numbers (which
ultimately find the file based on its unit#).  This has  smoothed out and
regularized and added greater flexibility, in my  opinion.  The editor (and
BLOCK) will no longer let you access past the  end of file.  Holes (spread
open the file to insert blank blocks),  SETTLE (let the "heavy" screens settle
to the bottom), & CHOP (delete  the trailing blank screens at the end of a
file) make maintenance of  block files considerably easier.

     The question I might have on my mind, if I had a previous version  of
Pygmy, is whether I should bother downloading version 1.3.  I think  it
depends on what you want to do with it.  If you downloaded it as a  curiosity
to look at briefly and set aside, I'd say no, don't bother.   You've already
seen the main ideas.  If you downloaded it and wanted to  use it, but it
wasn't quite polished enough, I'd say 1.3 is worth a  look.  If you are
actually using a previous version, I'd say you  definitely should get 1.3.  If
you are looking for a Forth for the  IBM/clone world, and think F-PC is too
large for you, I think you could  be happy with Pygmy Forth.  It is easy to
download and easy to change  so it does things your way if you don't like how
I did it.

     I might be surprised, but I think 1.3 can stand as the final  version.  I
didn't feel that way about the previous versions.  I think  I've cleaned up
all the little things that had to be cleaned up.

     I have asked myself whether there is any point to Pygmy.  There 
certainly was for me personally.  I've had fun with it.  I've enjoyed  the
correspondence connected with it.  It is the Forth I use for  everything.  It
has grown large enough to be comfortable, and thereby  lost the attribute of
being tiny (I mean, 14K is pretty big for a  Forth, don't you think?).  I
think I could have been happy using plain  BBL (not Abundance) or Guy Kelly's
Forth. Compared to F83, they and  Pygmy have more comfortable editors.  I
think Pygmy's file handling  suits me better.  I think Pygmy's meta-
compilation is the simplest.   EForth is interesting and more easily portable,
but is pretty slow,  without the re-writing that would make it less portable.
It and Beta  Forth (the Russian Forth) and Zen (I think) aren't really usable
(I  think) without an editor and assembler.  F83 is certainly usable and 
deserves a lot of credit.  Abundance and F-PC are in an entirely  different
category, and not really usable by me at all, at this time.  So, all in all, I
think Pygmy has a good mix of speed, small size, file  handling, and comfort.
At least it is a mix that seems to suit me  better than the non-commercial
alternatives that I'm aware of.  One  advantage for me is that Pygmy is mine. 
For you it is just another  Forth competing for your time & attention &
download dollar.  It is  hard for me to look at it objectively!

     I don't know why, but I have the urge for people to use it and  enjoy it.


  -- Frank
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (09/21/90)

Category 1,  Topic 45
Message 44        Wed Sep 19, 1990
F.SERGEANT [Frank]           at 23:07 CDT
 
Forth vs Assembly Language

     There has been a discussion of whether Forth can better be  popularized
by distributing it as an assembly program or as a Forth  program.  Ting
supports the former.  Bill Ragsdale suggested that it  makes no difference up
to a certain size.  figForth was distributed as  an assembly listing, but was
also distributed as a Forth listing.  I  think this has sometimes been
forgotten.  I have a strong preference to  Forth being written in Forth.  As
an argument for this, I suggest  downloading EForth (Ting & Muench) and
looking over the assembler  listing for it and then the Forth listing of it
(both are included).  I  think the Forth listing is far clearer.  There might
have been a  stronger argument in favor of the assembler listing in the dark
ages,  when only paper was distributed.  That way you could enter the hex 
codes by hand, through a monitor, then patch the I/O routines, and  finally
get something running.  When a disk or modem squeals can be  distributed, a
running Forth executable file can be distributed at the  same time (which can
re-gen itself from its source written in Forth),  thus obviating the need for
the assembly listing.

     This still leaves the question of whether it is more appealing to 
newcomers to have Forth written in Forth or in assembler.  If they have  no
interest in Forth I don't see how having Forth written in assembler  is going
to create that interest.  If they do have an interest in  Forth, I think
they'd be more interested in seeing Forth written in  itself.  Of course, the
EForth and figForth approach of giving them  both would seem to satisfy
everyone.

  -- Frank
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

heron@mars.jpl.nasa.gov (Vance Heron) (09/22/90)

In article <1778.UUL1.3#5129@willett.pgh.pa.us> ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) writes:
>Category 1,  Topic 45
>Message 44        Wed Sep 19, 1990
>F.SERGEANT [Frank]           at 23:07 CDT
> 
>Forth vs Assembly Language
>
>
>     This still leaves the question of whether it is more appealing to 
>newcomers to have Forth written in Forth or in assembler.  If they have  no
>interest in Forth I don't see how having Forth written in assembler  is going
>to create that interest.  If they do have an interest in  Forth, I think
>they'd be more interested in seeing Forth written in  itself.  Of course, the
>EForth and figForth approach of giving them  both would seem to satisfy
>everyone.
>
Let me take a stab at answering this - 
I am slightly more than a novice in forth, but I have written
some applications in it  including a Control Program for an Infrared 
Camera currently in use on the Mt Palomar 200" telescope and other
applications to test Millitary Communications Equipment (Air Farce)

Anyway - I'm not sure a novice really cares about either, but after
working/playing with it for a while I got interested in "rolling my
own" and was disappointed that none of the smaller forths I got
included source code that would enable one to start from scratch
(i.e. assembly).

Because the interpreter is such an integral part of forth, it
seems much less "satisfying" to write forth in forth (as opposed
to writing a C compiler in C).  I had the fortune to be able
to do just that in my college days, but the resulting code was
MACHINE LANGUAGE - I could use C on one machine to write a
compler that would run on a different one - once I had cross
compiled the compiler - I would have a native compiler on the
new machine (I didn't do all this, but is seemed feasable ?!?)

Given a Forth system like PYGMY (I really love it - thank you Frank)
how could I port it to a 68000 box ???  How did Frank get his 1st
interpreter up so he could interpret the rest ??  Given my almost
novice status I probably am missing something - but I think
assembly would help a larger group of programmers - if one is not
interested in Forth, they wont bother to look for source in either
language, and if one is interested in "building" a new forth, the
ability to start from scratch will probably be wanted/needed.

Just my $0.02

Vance
heron@mars.jpl.nasa.gov

ZMLEB@SCFVM.GSFC.NASA.GOV (Lee Brotzman) (09/22/90)

>
>Because the interpreter is such an integral part of forth, it
>seems much less "satisfying" to write forth in forth (as opposed
>to writing a C compiler in C).

   When I am asked about the best way to learn Forth (which I'm not asked
often), I reply that the best way is to roll your own.  It is amazingly
easy given that the rollee has some rudimentary knowledge of common computer
science techniques like linked lists, string (token) parsing, stacks, and
fundamental operating system interfaces.  I was able to do it fresh out of
college with a B.S. in Astronomy minoring in Computer Science.
   The highest hurdle is grasping the workings of the inner interpreter;
and after that, the outer interpreter.  The interpreter operation just isn't
something taught in school (at least in my school).  It isn't hard, just
different.
   Whether the interpreters are learned from assembly or C isn't important.
It's knowing them, and by induction, how to manipulate them, that all of Forth
falls into place.  From there, the operations of BRANCH and ?BRANCH, (DO) and
(LOOP), etc., is trivial.
   Some systems de-emphasize the progammers involvement with the inner workings
of Forth.  Fine.  Compared to the complexity of other software I have to
contend with daily, Forth is trivial.  Learning it on my own gave me the
insights I have applied to systems ranging from IBM System/370 mainframes,
to VAXen, to Sun workstations, to PCs.
   When it comes right down to it, they all work the same, only different.
Writing a Forth for the Commodore 64 (and then the Apple //), that was
source-compatible with IBM PCs, CP/M machines, and VAXen, proved that to me.

   Enough philosophy.

-- Lee Brotzman (FIGI-L Moderator)
-- BITNET:   ZMLEB@SCFVM          Internet: zmleb@scfvm.gsfc.nasa.gov
-- "Between an idea and implementation, is software." -- Curse from Hubble
-- Space Telescope engineer.

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (09/25/90)

Category 1,  Topic 45
Message 48        Sun Sep 23, 1990
JETHOMAS                     at 21:41 CDT
 
I liked your 1.2 Pygmy a lot, it's simple enough to grasp pretty easily.  I
was glad to see the 1.3 version, which duplicated many of the changes I made
and more besides.  The method for opening files seems unnecessarily tedious,
but it's easy to open a file once and then save the system with the file open,
so it doesn't have to be done all that often.  I probably won't do anything
about it.
  I've found a really minor bug --  you didn't change Robert Berkey's DO LOOP
code to match your new FOR NEXT, so : TEST 10 0 DO I . LOOP ; will print out:

TEST 1 2 3 4 5 6 7 8 9 ok

This is easy to fix. : (DO) ( limit index - for-index  ;R  ip - index-offset
ip )
 ( OVER 1- POP SWAP PUSH PUSH  -  1-  ; )
   OVER 1- POP SWAP PUSH PUSH  -  ; : >R COMPILE PUSH ;     : R> COMPILE POP ;

I've had a lot of fun with Pygmy.  Thanks for making it!

-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (09/25/90)

Category 1,  Topic 45
Message 50        Mon Sep 24, 1990
F.SERGEANT [Frank]           at 20:00 CDT
 
  Pygmy Forth Version 1.3 Beta Test Standings:

     JETHOMAS is in the lead with 2 reported bugs and 1 fix.  Who will  be
next?

     Bug 1: DO LOOP in the Starting Forth section wasn't changed to  match the
new FOR NEXT.  The fix is to remove the  1-  at the end of  the definition of 
(DO)  on screen 171 of PYGMY.SCR.

     Bug 2: In order for the program to open your files automatically,  you
must have OPEN'd the files before creating the new .COM file.  This  is a bug.
All you should need to do is install the file with UNIT.   The file should not
need to be open when you do SAVE to create the new  .COM file.  The quick fix
is to add  CLOSE-FILES  just prior to   OPEN-FILES  in the definition of 
(BOOT  on screen 79 of PYGMY.SCR.   Then re-meta-compile.  (Or just do   79
LOAD  SAVE  PYGMYNEW.COM ).   This fix doesn't get at the heart of the matter.
I think there still  must be an underlying bug, but I haven't found it yet. 
I'll let you  know as soon as I do.

     I hope to find the cause of 2 above before uploading a corrected  file in
the library to replace #2202.  If you pass along copies of  #2202, please make
the above two corrections.  


  To JETHOMAS

     Thanks!

 -- Frank
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (10/06/90)

Category 1,  Topic 45
Message 51        Thu Oct 04, 1990
F.SERGEANT [Frank]           at 22:57 CDT
 
Pygmy Forth 1.3 Corrections     October 4, 1990

[I'm posting this for those that want to make the changes themselves.
 When these files are available on SIMTEL20, I'll post another note. -dwp]

     Three errors have now come to light (I found the 3rd one).  I am  re-
uploading the Pygmy Forth package to correct these: PYGMY13.ZIP.  I  am also
uploading a copy of this message as PYG13FIX.ZIP.  If you have  previously
downloaded the September 17, 1990 version (GEnie file #2202) there is no need
to download this corrected PYGMY13.ZIP.  Just edit in  the following changes:


Errors corrected since version 1.3 was originally released:

     1. The definition of (DO) on screen 171 was        : (DO)  OVER 1- POP
SWAP PUSH PUSH  -  1-  ;  should be  : (DO)  OVER 1- POP SWAP PUSH PUSH  -  ; 
this adjusts for the change to FOR NEXT.

     2. In definition of (BOOT on screen 79,  the word OPEN-FILES  should be
preceded by the word CLOSE-FILES.  This eliminates the  problem of needing all
the files open at the time you save an  executable image (e.g. SAVE
PYGMY3.COM).

     3. Definition of IN, on screen 115  was             EC  M9  IN, should be
E4  M9  IN,

     Note: I do not see why the #2 fix is needed.  This makes me  suspect
there may be another, underlying, bug.  If and when I discover it I'll post
the details.

  -- Frank
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (10/12/90)

Category 1,  Topic 45
Message 53        Thu Oct 11, 1990
JETHOMAS                     at 03:54 CDT
 
  >     I haven't understood your point, yet, in setting bit 8 instead >of bit
7, for (ONEKEY.  If you wanted to set another bit, why not >bit 15, then the
16-bit number could be checked with a 0<. But, I >don't see why you want to
distinguish between the two types of keys. >The key pressed either matches a
value in the list of OF statments >or IF statements or equivalent lists, or it
is invalid for that >operation. Maybe there are some normal keystrokes (single
byte from >DOS) that have bit 7 set, and so they become indistinguishable

  Yes, that's exactly it.  There are normal keystrokes that match.  I settled
for setting bits 7 AND 8, using bit 8 to get to SPCL in the editor, and doing
255 AND to strip out any extra bits.  By setting bit 7 too, I delayed
rewriting the SPCL' jump table in the editor. That was the only place PYGMY
used special characters.  Using bit 15 would work slightly better. I have a
prejudice for a straightforward 9-bit keyboard code, but I don't really see
that it would matter. Alt-keys are coded in increasing order from left to
right across the keyboard, apparently independent of what the key stands for.
It probably wouldn't be much advantage to code the keys as one long jump table
instead of 2 shorter ones, if it ever came to doing something like that.


-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (11/04/90)

Category 1,  Topic 45
Message 54        Sat Nov 03, 1990
F.SERGEANT [Frank]           at 14:28 CST
 
Screen Attributes in Pygmy
     I'll explain how to change the foreground and background colors.   It is
all controlled by the variable ATTR (which stands for  "attribute").  The most
significant nibble controls the background  color and the next-to-most
significant nibble controls the foreground  color.  The 2 least significant
nibbles (the least significant byte)  should be set to zero.
     Do        HEX    ATTR @  U.      to see what colors are currently  set. 
On my color system I get    7100   where the 7 is a light  background and the
1 is a blue foreground.  For the monochrome system,  I believe the attribute
would be hex  700  where the (unseen) leading  zero is the background and the
7 is the foreground.
     The next step is to try different values until you get ones you  like,
for example
          HEX
          1700 ATTR !
          5400 ATTR !
          3200 ATTR ! when you find the combination you like best, you can
either type it in  each time you bring up Pygmy, or you can    SAVE
NEWPYGMY.COM   after  making the change once, or you can search across screens
in the editor  for ATTR to see where it is initialized to either $7100 or
$0700  and  change it to your values and regen (meta-compile) Pygmy.
  -- Frank
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (11/04/90)

Category 1,  Topic 45
Message 55        Sat Nov 03, 1990
F.SERGEANT [Frank]           at 14:29 CST
 
 JB>I'm having a little problem with PYGMY Forth. What I want to do is 
 JB>simple. I want to read a binary file, alter the filepointer to skip 
 JB>some header bytes, and copy the rest of the file to a diskfile or 
  Here is how I would approach it.  Suppose I just want to read the  file
PYGMY.TXT into a buffer.
    NAMEZ: PYGMY.TXT      ( define the name)
    3000 PYGMY.TXT 6 UNIT 6 OPEN     ( install & open the file)
    6 >BOF                           ( move to the beginning of file)
    100   6 +POSITION                ( skip past the 1st 100 bytes)
    PAD 200 6 FILE-READ    ( read the next 200 bytes into a buffer)
    HEX PAD 50 DU          ( DUmp the buffer to the screen )
  -- Frank
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (11/05/90)

Category 1,  Topic 45
Message 56        Sun Nov 04, 1990
J.BLACK13 [John Black]       at 09:00 EST
 
Reference message # 55
 Frank,
 I appreciate the reply on using PYGMY Forth to read binary files. Your code
works; mine didn't though I'm not sure why. Lifes too short to figure out
everything; I'll just use yours.

The next problem I'm working on is some way to issue DOS commands from Forth. 
I need to to some file renaming, deleting, unzipping, etc. I'd like to be able
to do it from Forth without resorting to external batch files.  Know of any
PYGMY routines that have been developed?  Thanks

JEB
-----
This message came from GEnie via willett through a semi-automated process.
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (01/07/91)

Category 1,  Topic 45
Message 58        Sun Jan 06, 1991
J.BLACK13 [John Black]       at 14:18 EST
 
Has anyone developed good SCAN, SKIP, or PARSE WORDS for Pygmy Forth?
 Or a Pygmy Forth way to get argv, and argc values from the DOS command line?
I've looked at some code versions of these words for Forth 83, but ignorance
of 8086 assembly language makes the code inscrutable to me.

I like Pygmy Forth because its thin rather than fat, BUT I'd like to easily be
able to add selected "fat" as I need it. Wish more selected "fat" words were
available for Pygmy. Thin is absolutely essential for writing utilities for
others to use. 128K or so taken up by a Forth system to do something needed,
but basically simple, makes Forth look cumbersome and comical.

BTW, Pygmy is nicely done and mostly user friendly  -- I'd recommend it as a
good learner system. The documentation provided with it is very useful.  It,
as all other Forths, does it own thing on some words.  I agree with most of
them.  Using FOR and NEXT and POP and PUSH rather than the more awkward
constructions they replace is nice!

Forth's strength is also its biggest impediment. Its ability to change itself
to meet the user's needs results in a multiplicity of versions that preclude
easy use of building blocks developed on other systems.  That will ensure that
only dedicated fans of the language will pursue it.  A few people really enjoy
making the bricks and cutting the lumber when they're building a house.  Most
just don't have the time for it.  I'm a fan of the language --but even I'd
like a really nice set of tools so I could get more out the door.

-----
This message came from GEnie via willett.  You cannot Reply to the author
using email.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, whatever).
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (01/10/91)

Category 1,  Topic 45
Message 59        Wed Jan 09, 1991
F.SERGEANT [Frank]           at 02:54 CST
 

 To Tom Schotland
 I think I saw some messages from you on both GEnie (via RCFB) & the CC  bbs
about Forth & the 8051.  I composed a reply and almost posted it,  but thought
better of it.  I was afraid I might talk myself into  porting Pygmy Forth to
the 8051.  But, of course, I can't resist  replying to a message that names
me!

 Pygmy Forth is customized for PCs & clones (PC/MS-DOS 8088/80x8x  machines). 
It is available for downloading everywhere (I suppose).   Look for version
1.3.  The file name on GEnie is PYGMY13.ZIP.  I think  of it as a small, but
complete Forth.  It allows up to 15 (or perhaps  many more) DOS files open at
one time.  Their origins are at different  BLOCK numbers, which makes it easy
to copy to and from the different  files, etc.  You can specify a set of files
to be opened automatically.   It can read and write any format files, but
source code loading is done  from BLOCK files.  It has some neat features from
cmFORTH such as the  COMPILER vocabulary.  All immediate words are in that
vocabulary.  Thus  there is no word IMMEDIATE.  It makes it easy to have, for
example, two  versions of the word  ."  one is in FORTH and executes outside
of colon  definitions and the other has the same name but is in COMPILER and 
compiles the string for execution at run-time.  This eliminates the  need for
abominations such as  .(.  

 It is a COMPLETE Forth.  No, I don't mean it has everything that could  be
present in a Forth; I mean you can use it when it arrives.  It comes  with
full source code, meta-compiler, editor, and assembler.  Modifying  it and
meta-compiling a new version is especially simple.  This lets  you change the
aspects of it that you disagree with me about.  For  example, it uses the
sensible approach of having ( u) FOR ... NEXT   perform the loop  u  times,
rather than  u+1  times.  0 FOR ... NEXT  performs the loop zero times.  But,
anyone who wants the u+1 and 0+1  version can make the changes and meta-
compile it his way.

 No.  It does not run on the 8051.  I have, however, made a version to  run
out of ROM for a Zilog Super-8.  I expect one day to port it to  various other
processors.  When?  Who knows.  There's no point in  waiting on me.

 What do you want in the way of a Forth for the 8051?  What would you  do with
it?  What amounts of ROM & RAM would you have available?  Talk  to it from a
PC?  Etc?

  -- Frank
-----
This message came from GEnie via willett.  You cannot Reply to the author
using email.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, whatever).
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (01/10/91)

Category 1,  Topic 45
Message 60        Wed Jan 09, 1991
F.SERGEANT [Frank]           at 02:54 CST
 

 JB>Has anyone developed good SCAN, SKIP ... for Pygmy Forth?

 Assuming a string AAAABBBB at address 100, I have a SCAN that will  hunt for
a specific character as in ( 100 8) 'A SCAN ( 100 8)  or  (  100 8) 'B SCAN (
104 4) or  ( 100 8) 'C SCAN ( 108 0).  And a SKIP that  will eat beginning
delimiters.  ( 100 8) 'A SKIP ( 104 4)  or  ( 100 8)  'B ( 100 8).  Are those
what you want?  If so:

   CODE SCAN ( a # char - a #) 
     DS AX MOV, AX ES MOV, BX AX MOV, CX POP, DI POP,
     REPNZ, AL SCAS, 0=, IF, DI DEC, CX INC, THEN,
     DI PUSH, CX BX MOV, NXT,   END-CODE

   CODE SKIP ( a # char - a #)
     DS AX MOV, AX ES MOV, BX AX MOV, CX POP, DI POP,
     REPZ, AL SCAS,  0=, NOT, IF, DI DEC, CX INC, THEN,
     DI PUSH, CX BX MOV, NXT,   END-CODE

 At least I hope that's what they do.  As for the command line, it is  sitting
in memory at address $80 in the same segment Pygmy is running  out of.  To see
it, do
     HEX 80 DUMP ( DUMP .... DUMP) 

 Byte $80 holds the number of characters and those characters begin at  byte
$81.

  Thanks for your comments.

  -- Frank
-----
This message came from GEnie via willett.  You cannot Reply to the author
using email.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, whatever).
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (01/13/91)

 Date: 01-09-91 (19:08)              Number: 823 of 834
   To: J.BLACK13 [JOHN BLACK]        Refer#: 786
 From: STEVE PALINCSAR                 Read: NO
 Subj: PYGMY FORTH                   Status: PUBLIC MESSAGE
 Conf: FORTH (58)                 Read Type: GENERAL (+)

 -> available for Pygmy. Thin is absolutely essential for writing
 -> utilities for others to use. 128K or so taken up by a Forth system to
 -> do something needed, but basically simple, makes Forth look
 -> cumbersome and comical.

 Hardly true.  A fully-featured forth like HS/Forth or UR/Forth is
 perfectly capable of creating a very reasonably sized EXE file.  I use
 HS/Forth to create 'utilities for others to use' and generally end up
 with a 30K or thereabouts EXE file.

 PCRelay:DCINFO -> #16 MetroLink (tm) International Network
 4.10              DC Info Exchange MetroLink International Hub
 <<<>>>
-----
This message came from GEnie via willett.  You cannot Reply to the author
using email.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, whatever).
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (01/13/91)

Category 1,  Topic 45
Message 62        Sat Jan 12, 1991
J.BLACK13 [John Black]       at 19:47 EST
 
Frank, thanks a lot for the SCAN and SKIP words for Pygmy Forth. I'm about to
finish up a simple program that converts a picture bitmap dump from a PCL
Laserjet format to an encapsulated Postscript format.  The file conversion is
fairly straight forward.  I'm close to getting it running as a command line
utility.  I could have done it in C, but it was a lot more interesting doing
it in Forth.

BTW, how difficult is it to make Pygmy ROMable?

JEB
-----
This message came from GEnie via willett.  You cannot Reply to the author
using email.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, whatever).
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (01/13/91)

Category 1,  Topic 45
Message 63        Sat Jan 12, 1991
J.BLACK13 [John Black]       at 20:45 EST
 
How do you end up with really small file sizes for your exe files? I may be
overlooking something.  The other related issue is running space.  Most of the
Forths I've seen expand into at least 128K in memory when you run them.  Thats
a lot of memory for something simple--particularly when its mostly unused
vocabulary space.  On the other hand, I've seen pretty complete Forths on very
small computers in a very small memory space.

JEB
-----
This message came from GEnie via willett.  You cannot Reply to the author
using email.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, whatever).
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (01/16/91)

Category 1,  Topic 45
Message 64        Mon Jan 14, 1991
F.SERGEANT [Frank]           at 02:15 CST
 

 Oops - Regarding my recent posting of CODE words for SKIP & SCAN:  After
recently re-reading some comments ROEDY GREEN posted in December  '89 I am
inclined to rename SKIP to -LEADING= and rename SCAN to  -LEADING<>.  -LEADING
would eat leading spaces (just as -TRAILING eats  trailing spaces).

 For many years I have referred to bypassing spaces (or whatever) as  "eating
spaces" but until now I hadn't considered using "eat" in the  name of the
Forth word that does it.  I'm not inclined to use  EAT-TRAILING-SPACES and EAT-
LEADING-SPACES and  EAT-LEADING-CHARACTERS-THAT-ARE-NOT-EQUAL, etc but perhaps
I'll start  pronouncing the hyphen in -TRAILING and -LEADING as "eat" (thus  -
TRAILING would be pronounced "eat trailing") and have the best of both 
worlds.

 -- Frank
-----
This message came from GEnie via willett.  You cannot Reply to the author
using email.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, whatever).
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (01/16/91)

Category 1,  Topic 45
Message 65        Mon Jan 14, 1991
F.SERGEANT [Frank]           at 02:16 CST
 

 JEB> BTW, how difficult is it to make Pygmy ROMable?

 Nothin' to it.  All you have to do is go through the source code for  Pygmy
and make sure that any time it tries to change memory, that that  memory is
RAM not ROM.

 The above is the key but might make it sound harder (or easier) than  it is.
Browse through the source code (mainly screens 0 - 80 of  PYGMY.SCR). Look for
the word RAM.  Note how CONSTANTs and system  constants work. You'll need to
initialize RAM to point to actual ram.   That will take care of system
variables (which are defined via  CONSTANT).  You'll have to change VARIABLE
so it uses CONSTANT and RAM  for any of the variables that are defined in ROM.
You'll have to see  that H (dictionary pointer) points to actual RAM.  You'll
have to see  that your ROM and RAM are in the same 64K segment (this might be
the  hardest to do on a PC).  Watch out for DEFER and IS and make sure all 
variables are initialized correctly.  Those are the main things that  come to
mind. As you browse through the source you might see other  things that need
attention.  Are you planning to run it on a PC?  If  not, getting the ROM &
RAM in the same segment should be easy.  But  then, I'd think you'd not want
to have DOS either.  In that case look  over any DOS calls and be sure they
get changed over to BIOS calls  (assuming you'll still have the BIOS ROM).  On
the other hand, you  might have been talking about putting Pygmy on another
processor, etc,  which is pretty easy, especially if you can use a PC (with
Pygmy on it)  as the terminal and file server.

 If you plan to run it on a PC from ROM, I must ask WHY?  If you'll  still
have BIOS & DOS and still want Pygmy in ROM, the simplest thing  to do would
be to put the unROMable version of Pygmy in ROM but change  the very beginning
boot up code (on scr 17) to copy itself, byte by  byte, into RAM and then do a
long jump to the RAM copy.  This way all  the problems of making it ROMable
disappear.

 I hope the above gives you the general idea.  If you'll give me more  details
on exactly what you want to accomplish I might be able to  refine my advice
somewhat.

 JEB> How do you end up with really small file sizes for your exe 
 JEB> files? I may be overlooking something.  The other related issue 
 JEB> is running space.

 I don't bother.  I just run everything out of Pygmy.  Pygmy is not set  up to
make headerless definitions (which would save some space).  With  the editor
and assembler Pygmy only takes up about 14K of disk space.   The kernel by
itself about 8K.  Using the meta-compiler you should be  able to generate a
system that has only the words in it that you want,  leaving out the editor,
assembler, unneeded file words, SEE, .S,  anything you didn't need.  This
would still let you *use* the  assembler, etc. at meta-compile time - it just
wouldn't be present in  the target image you are building.  I imagine this
could get your  utilites down to a fairly small (disk) file.

 The related question is how much RAM does it take up at run-time.  All 
programs run under DOS initially take up ALL the available ram!  All 
programs!  To take up less RAM they have to explicitly release some.   Why do
you care how much it takes up, unless you plan to start another  "process"
from within Pygmy, or unless you make it a TSR, or unless you  already have so
many TSRs loaded that you have less than 64K of RAM  available?  Pygmy always
occupies 64K of RAM.  (If the optional HASH  dictionary lookup method is used,
it takes up 128K.)  You can change  down to 10K, 12K, 20K, whatever by
initializing the stacks, disk  buffers, TIB to lower memory and then doing a
DOS call to release all  the memory above them.

 I hope I've answered what you wanted to know; if not, ask again with  some
more specifics.

  -- Frank
-----
This message came from GEnie via willett.  You cannot Reply to the author
using email.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, whatever).
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (01/28/91)

Category 1,  Topic 45
Message 67        Sat Jan 26, 1991
F.SERGEANT [Frank]           at 09:29 CST
 

 Here are the corrected definitions of SKIP & SCAN.  Other than the  names,
the only changes are the 1 #, AL OR, and the AX AX SUB,  whose  purposes are
to set the zero flag prior to the rep scas instructions.

 CODE -LEADING<>  ( a # char - a #)
    ( eat leading non-delimiters) 
    1 #, AL OR, ( force zero flg false)
    DS AX MOV, AX ES MOV,  BX AX MOV, CX POP, DI POP,
    REPNZ, AL SCAS,  0=, IF, DI DEC, CX INC, THEN,
    DI PUSH, CX BX MOV,  NXT,    END-CODE

 CODE -LEADING= ( a # char - a #)
    ( eat leading delimiters)
    AX AX SUB, ( force zero flg true)
    DS AX MOV, AX ES MOV,  BX AX MOV, CX POP, DI POP,
    REPZ, AL SCAS,  0=, NOT, IF, DI DEC, CX INC, THEN,              
    DI PUSH, CX BX MOV, NXT,     END-CODE

 : -LEADING  ( a # - a #) ( eat leading spaces) 32 -LEADING= ;

  -- Frank
-----
This message came from GEnie via willett.  You cannot Reply to the author
using email.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, whatever).
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (02/18/91)

Category 1,  Topic 45
Message 68        Sun Feb 17, 1991
C.CLARK21                    at 19:23 EST
 
I am working on a program for my Forth Construction course and I ran into a
problem.  It is a fairly simple program -- convert farenheit to celcius using
scaled integers instead of floating point numbers.  I understand how to do the
program except for one part.  I can't get the output format routine to work
correctly.

We are using the book _Starting_Forth_ by Leo Brodie for the course and I was
trying to use a routine similar to the one on page 111:
   : #.####   DUP  ABS  0  <# # # # #  46 HOLD # ROT SIGN #> TYPE SPACE;

I am using PYGMY v 1.2 to do it.  I already eliminated the 'TYPE' because
pygmy doesn't require it.  I can make it work with unsigned numbers by
removeing the DUP, ABS, ROT, and SIGN but cannont seem to make it work with
signed numbers.

Does anyone have any ideas?  I am really stuck (and the program is due
tomorrow!).

Thanks,  Craig

[I ported this because of general interest value, not because of the 
(now outdated) plea at the end.  -dwp]
-----
This message came from GEnie via willett.  You cannot Reply to the author
using email.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, whatever).
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (02/22/91)

Category 1,  Topic 45
Message 69        Thu Feb 21, 1991
F.SERGEANT [Frank]           at 01:19 CST
 
 Craig,
 .
   Damn! I'm disappointed I didn't get your message in time to help  with the
class assignment.  Any way, here is the solution in Pygmy  Forth version 1.3. 
It should work in 1.2.
 .
   : #.#### ( n -)  ( print a signed 16-bit number )
     DUP PUSH ( save sign)
     ABS  <#  # # # #   46 HOLD ( decimal point) #
     POP SIGN #>  ;
 .
   And here is how you might have approached solving it:  Search across 
screens in the file PYGMY.SCR for something like  <#  or  SIGN  until  you
found the source code for number output.  Look at the words that  use SIGN to
see how they do it.  If my 1.3 version doesn't quite work  in 1.2 you may
still get a chance to try out this paragraph.  
 .
   I'd love to hear details of your class and how the assignment worked  out. 
I hope you solved.  In the future there is always the possibility  of ugly
brute force.  Never rule it out! 
 .
 ( quick untested example of ugly brute force)
 .
 : #.####  
   DUP 0< IF ." -" THEN
   ABS 10000 U/MOD ( r q) 1 .R    ." ."  
   1000 U/MOD 1 .R 
    100 U/MOD 1 .R
     10 U/MOD 1 .R
              1 .R  ;  
 .
 -- Frank
-----
This message came from GEnie via willett.  You *cannot* reply to the author
using e-mail.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, etc.).
Report problems to: dwp@willett.pgh.pa.us _or_ uunet!willett!dwp

kebang@cs.mcgill.ca (K. LIN) (02/28/91)

Header says all

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (03/04/91)

Category 1,  Topic 45
Message 73        Sat Mar 02, 1991
F.SERGEANT [Frank]           at 17:12 CST
 
 K.LIN from Montreal asks  "PYGMY Forth -- where can I find it?"
 .
 Join GEnie and download file PYGMY13.ZIP.  Or, FIG (408) 277-0668 can  mail
you a diskette.  Or, many other bulletin boards and some shareware  houses
carry it.  Look for version 1.3.  The individual files should  have a date and
time of 10-04-90  1:31a.
 -- Frank

[You can also get it from WSMR-SIMTEL20.ARMY.MIL in PD1:<MSDOS.FORTH> or
 WUARCHIVE.WUSTL.EDU in /mirrors/msdos/forth, or if you have email only
 access to the net, drop me a note and I can email it to you. --Doug]
-----
This message came from GEnie via willett.  You *cannot* reply to the author
using e-mail.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, etc.).
Report problems to: dwp@willett.pgh.pa.us _or_ uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (03/04/91)

Category 1,  Topic 45
Message 74        Sat Mar 02, 1991
F.SERGEANT [Frank]           at 17:13 CST
 
 To Matthew Burke
 Re metacompiling in Pygmy
 .

 > I just downloaded PYGMY 1.3 from wuarchive.wustl.edu ... I have not been 
 > able to get the metacompiler to work and was wodering if anyone else 
 > had. . 
 .
     The first question is whether you are doing something wrong or  whether
the file(s) you got from wuarchive.wustl.edu are bad.  Here is  the DOS
directory listing info for the two key files for Pygmy 1.3:
 .
          PYGMY.COM   15426  10-04-90  1:31a
          PYGMY.SCR  187392  10-04-90  1:31a
 .
 If you don't get the same info, then you may not have the current  files. If
you do, then probably you do have the correct files.  If you  have the
September (1:30a) files, they should still work.
 .
 I just tried out metacompilation on my copies of the above files and  it
worked fine.  Here's what I did, running from a floppy on drive B:
 .
       B:>PYGMY
       1 LOAD
       BYE
 .
 It worked fine, creating the kernel file  H1.COM  (whose name you can  change
on screen 1 of PYGMY.SCR).  Then to verify it, I used the kernel  file to
build the rest of the Pygmy system by typing
 .
       B:>H1
       83 LOAD
       BYE
 .
 It worked fine, extending the kernel to various degrees and saving the 
results as H2.COM, H3.COM, and H4.COM.  Then from DOS I compared  PYGMY.COM to
H4.COM and they matched exactly.
 .
 So, please try the meta-compilation exactly as I demonstrated above,  from
the original files (where you have made no changes at all to  PYGMY.SCR) and
see what happens.  If it doesn't work, please report  exactly what you did and
exactly what did happen, and maybe I can  figure out what is going wrong.
 .
 You mentioned that TCREATE was missing.  Missing from *where*?  I  found it
on screen 7 of PYGMY.SCR.  Get into Pygmy and type  1 EDIT to  get into the
editor.  Then press the F3 key (for setting up a search  string) and type
TCREATE followed by the enter key.  This will cause  the editor to search
screen 1 for "TCREATE" and it won't find it.  Now  press the F10 key and the
editor will search across screens until it  comes to TCREATE or until it comes
to the end of the last screen in  PYGMY.SCR.
 .
 When in doubt, exit to DOS (with BYE) and bring up a fresh copy of 
PYGMY.COM.  When further in doubt, do a Ctrl-Alt-Del reboot of your  computer.
To eliminate all doubt, do a "master reset."  That is, turn  off power to the
computer with the Big Red Switch, wait a few minutes,  and turn the computer
on again.  Try to go back to copies of the  original files you downloaded.
 .
 One caution, after you have meta-compiled or started meta-compiling,  you
shouldn't try to meta-compile *again* without exiting to DOS and  reloading
PYGMY.COM (why? you may not care why, but it is because you  have already
redefined colon, etc and when you try to redefine them a  second time things
won't work).
 .
 Now, here is a general complaint I'd like to lodge against those who  are
guilty of it.  This applies only mildly to Matthew.  He says "I  have not been
able to get the metacompiler to work."  Now, that's not  bad.  After all, he
*did* say it was Pygmy Forth and he *did* say it  was version 1.3 and he *did*
say where he got it.  But he didn't say  *what* he did specifically in his
attempt to get it to work and he  didn't say *what* happened in response. 
Could such info have helped me  pin-point the problem?  Possibly.  Someone
else posted a sample of code  he couldn't get to work (it had nothing to do
with Pygmy) and didn't  even bother to say what Forth he was using or what
type of computer.  (In spite of that Dennis Ruffer was kind enough to answer
him.)  My  point here is that requesters of help should give as much info as 
possible.  This will increase their chance of getting appropriate  answers.
 .
 Matthew, if you are in doubt about whether you have the correct files,  you
could copy them to a floppy and send the to me and I'll compare  them to the
masters.  Or, you could ZIP them with PKZIP v1.1 and see  what CRCs you get. 
I get AA74E3CD for PYGMY.SCR and EBBCB497 for  PYGMY.COM.
 .
 Feel free to write with more info or questions as I would very much  like to
help you work this out.
 .
  -- Frank
-----
This message came from GEnie via willett.  You *cannot* reply to the author
using e-mail.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, etc.).
Report problems to: dwp@willett.pgh.pa.us _or_ uunet!willett!dwp

kebang@cs.mcgill.ca (K. LIN) (03/08/91)

In article <2436.UUL1.3#5129@willett.pgh.pa.us> ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) writes:
>Category 1,  Topic 45
>Message 73        Sat Mar 02, 1991
>F.SERGEANT [Frank]           at 17:12 CST
> 
> K.LIN from Montreal asks  "PYGMY Forth -- where can I find it?"
> .
... detail deleted
> -- Frank
>
...(Message from Doug)

I downloaded a copy from WUARCHIVE.WUSTL.EDU.  Thank you very much!
K.LIN

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (03/12/91)

Category 1,  Topic 45
Message 77        Mon Mar 11, 1991
F.SERGEANT [Frank]           at 02:14 CST
 
 This is a reply to Henry Vinerts's open letter (uploaded as file 
PYGMYLTR.TXT in library 7) to me.
 .
 Thanks for your kind words.  It sounds like you are successfully on  the path
toward learning Forth.  I didn't see anything in your letter  that I was sure
was a direct question to me.  If I over looked any such  questions, please
post them again.  If you are attending the SVFIG  meetings, I think you have
unlimited expertise available to assist you.
 .
 In addition, questions etc. may always be posted in this topic.  If  you feel
a question is too stupid to post publicly you can always email  it to me,
although, considering all the traffic I've seen on the BBS  over the years, I
don't think you should worry about anything you post  publicly.
 .
 I have been hoping to put together a few "skeleton" applications, such  that
a beginner could get started right away just by fleshing them out  or
customizing them.  I haven't done it yet, but still have hopes.
 .
 It might be harder to learn Forth in the abstract than to learn it by 
picking a specific project and doing it in Forth.  So, figure out what  you
need the computer to do for you and then use Forth to make the  computer do
it.  (Start small.)
 .
 I am interested in how a newcomer to Pygmy reacts.  I've felt that a 
software package needs to let the user feel oriented and in-charge as  quickly
as possible.  He can feel oriented and confident in proceeding  long before
all details are memorized or mastered.  At some point,  things click
(hopefully).  Then he knows how to find out any of the  details he needs to
know.  He is no longer "completely lost."  I think  (1) feedback and (2) a
proper "mental model" are important to this  feeling of orientation.  If you
were driving a car and couldn't find  out whether you'd steered, accelerated,
and braked correctly until the  end of the trip (which could occur when you
arrive at your planned  destination, or when you are dead or in a ditch) ...
well, that's what  I mean by feedback! -- it needs to be rapid.
 .
 Good luck.
 .
 -- Frank
-----
This message came from GEnie via willett.  You *cannot* reply to the author
using e-mail.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, etc.).
Report problems to: dwp@willett.pgh.pa.us _or_ uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (03/31/91)

Category 1,  Topic 45
Message 78        Sat Mar 30, 1991
L.LISLE1 [Greg]              at 18:04 EST
 
Frank;

I've just started looking at Pygmy and am quite impressed.  Having spent 4+
years with Poly4th, I feel right at home.  However, before I start changing
things to suit myself, I have a question.  Why did you put the disk buffers
under the parameter stack?  This will limit the size of the stack and the
degree of recursion.  Is there some reason I'm missing?
                                             - L. Greg Lisle -
-----
This message came from GEnie via willett.  You *cannot* reply to the author
using e-mail.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, etc.).
Report problems to: dwp@willett.pgh.pa.us _or_ uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (04/06/91)

Category 1,  Topic 45
Message 79        Thu Apr 04, 1991
F.SERGEANT [Frank]           at 01:01 CST
 
 LGL> Why did you put the disk buffers under the parameter stack?  This 
 LGL> will limit the size of the stack and the degree of recursion.
 .
 Greg, you've got a good point.  The reason I did it that way is I more  often
change the number of disk buffers than the size of the stacks.   However,
there is no reason for you not to put the stacks below the  disk buffers and
TIB.
 . 
 -- Frank
-----
This message came from GEnie via willett.  You *cannot* reply to the author
using e-mail.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, etc.).
Report problems to: dwp@willett.pgh.pa.us _or_ uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (04/12/91)

Category 1,  Topic 45
Message 80        Thu Apr 11, 1991
L.LISLE1 [Greg]              at 08:00 EDT
 
Frank;

In my continued digging, I think I found a transgression against what
 _should_ be a cardinal rule, Never change the stack behavior of a
 defered word.  I kept getting file errors when trying to use SHOW.
 I discovered that .HD had been reloaded with a word for use with
 SHADOW, but it used the _second_ entry on the stack.  Shame on you!

It would also be helpful to note that use of MAKE should be followed with
MORE.  MAKE leaves an empty file (obviously) and the EDITOR doesn't like that.

Another suggestion would be the use of a word from the POLY4TH world,
 : +LOAD  ( n-) BLK @ + LOAD ;
 This would allow source load screens to be location independent.

Again, thanks for a slick implimentation.

                                             - L. Greg Lisle -

-----
This message came from GEnie via willett.  You *cannot* reply to the author
using e-mail.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, etc.).
Report problems to: dwp@willett.pgh.pa.us _or_ uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (04/16/91)

Category 1,  Topic 45
Message 81        Sun Apr 14, 1991
F.SERGEANT [Frank]           at 13:50 CDT
 
 Greg,
  You are correct.  I should not have used the DEFER'd word .HD in both  SHOW
and SHADOW, as once the code for SHADOW has been loaded it screws  up SHOW. 
The quick solution is to reload just the code for SHOW prior  to using SHOW. 
Better would be to DEFER a new word .SHD (shadow  heading) for use with SHADOW
so it would not disturb .HD used by SHOW.
 .
 Yes, when you MAKE a file it has a length of zero, and so needs to  have MORE
added to it before the editor can access it.  An alternative  I sometimes use
is DOS's COPY command.  For example, if I want to  create a new block file
named TEST.SCR I might do  

      C:\PYG\>COPY YOURFILE.SCR TEST.SCR

 from DOS.  If the YOURFILE.SCR that comes with Pygmy hasn't been  changed,
this will create a TEST.SCR file with 8 empty blocks.  
 .
 I haven't particulary needed +LOAD and +THRU yet for what I do, as my  source
code tends to sit at fixed block locations and I'd rather think  in fixed
rather than relative block numbers.  But, I don't object to  them.
 .
 -- Frank
-----
This message came from GEnie via willett.  You *cannot* reply to the author
using e-mail.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, etc.).
Report problems to: dwp@willett.pgh.pa.us _or_ uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (04/18/91)

 Date: 04-13-91 (16:37)              Number: 1888 of 1896
   To: FRANK SERGEANT                Refer#: NONE
 From: JAMES MEYER                     Read: NO
 Subj: PYGMY FORTH                   Status: PUBLIC MESSAGE
 Conf: FORTH (58)                 Read Type: GENERAL (+)

 Frank,
     I have recently downloaded Pygmy and am exploring it on my XT
 at home.  I tried to use it on an AT with EGA at work and had
 problems.  Using PYGMYC.COM and making the patch for the color
 board (CGA?) resulted in a cursor that works fine while compiling,
 but not in the screen editor.  Has anyone else reported and/or
 solved a problem like this?
 Jim
 ---
  ~ EZ 1.33 ~ YATL...Yet Another Tag Line
  ~ RNet 1.08D:MetroLink: Data Bit NETWork * Alexandria, VA * (703) 719-9648

 PCRelay:DCINFO -> #16 MetroLink (tm) International Network
 4.10              DC Info Exchange MetroLink International Hub
 <<<>>>
-----
This message came from GEnie via willett.  You *cannot* reply to the author
using e-mail.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, etc.).
Report problems to: dwp@willett.pgh.pa.us _or_ uunet!willett!dwp

ForthNet@willett.pgh.pa.us (ForthNet articles from GEnie) (04/20/91)

Category 1,  Topic 45
Message 83        Fri Apr 19, 1991
F.SERGEANT [Frank]           at 00:26 CDT
 
 <James Meyer asks about running Pygmy on at AT with EGA>
 .
 Jim, first, are you sure you are using version 1.3?  The PYGMYC.COM was  only
used several versions earlier (where PYGMYC.COM was supposed to work  on color
systems and PYGMY.COM worked on monochrome systems).  I thought  all the kinks
had been worked out by version 1.2 for automatically  determining whether the
system was color or monochrome.  Please let me know  which version you are
using.
 .
 If it is 1.3 then the 1st idea that comes to mind is perhaps some other 
software has set the EGA into some strange mode (not 80x25 with video  buffer
starting at $B8000).  If so, perhaps you can reset the mode to a  plain 'ol
CGA compatible mode and see what happens.  Let me know all the  details you
can and I hope we can get it working.
 .
 -- Frank
-----
This message came from GEnie via willett.  You *cannot* reply to the author
using e-mail.  Please post a follow-up article, or use any instructions
the author may have included (USMail addresses, telephone #, etc.).
Report problems to: dwp@willett.pgh.pa.us _or_ uunet!willett!dwp