[net.micro.amiga] Questions an comments on Amiga Lisp.

ross@ulowell.UUCP (Ross) (01/14/86)

(de line!-eater!-killer () (cond ((eaten) poison) (t nil)))

Hello all.  I have recently been attempting to use the Lisp function
(exec REGISTER:vector):number 
to invoke exec to call functions in the exec library.  The documentation
on this is useless.  For starters its incorrect, the documentation 
says that number is to be an offset into the exec library, but number
is the value returned by the function.  So, (set -216 (exec vec)) is
what the documentation tells us to do.  Next I tried just a vector
as the only argument so:
(setq vec (mkvect 7)) % 8 elemets for registers d0-d3,a0-a3
(putv vec 1 2)        % put a two in pos 1 so it will go in reg d1
vec         
[nil,2,nil,nil,nil,nil,nil]
                      % if you change the other positions to say 0
                      % it makes no difference
(exec vec)
          error message like "Bad type to exec function"
          error message like "Bad pointer "
             .
             .    Info about the bad pointer we passed
             .     
          
           Some numbers about the end of code.

(exec vec -216)

          Same thing save that Some numbers about end of code changes.
          Giving the function three arguments has no effect.  This
    	  means that exec wants two not one argument as stated in the
      	  documentation.  My guess is the second argument is supposed
	  do be the offset in the exec library.  -216 is AvailMem
          I think.  I believe that argument one is supposed to be
          a vector of size 8 because sending it anything else results
          in a task held; I have not tried everything, just a lot of
          things.  The farthest I have gotten is 

(exec vec r)
 	
	  where r is a vector of size 1   like [-216] does not return
          a bad pointer error, but it still returns a bad type 
          error.  There is a function call!-library, but you have to
          know the library number, which the documentation states you
          have to get from exec, no doubt calling OpenLibrary.

If anybody out there has any experience with using exec to call functions
then please help, or if you have a pointer where I can look I would
greatly appreciate that.
    I am doing this because the Amiga Lisp is a sound product.  It is
fast, has a compiler, and works.  It is a very basic implementation 
with the exception that it handles avl trees.  (tyi) and (tyo) are there
and do work, but only after the eol is entered on the Amiga.  Vectors,
which are the structures used to pass the registers to exec, look
suspiciously like they could be used as C structures for purposes of
calling Amiga functions.  If I can get exec to work it opens up all
sorts of possibilites for this lisp.  I dislike waiting 4 minutes
every time I want to test something. Lisp has a compiler, which
generates fast code, and has the call on demand facility. 
Thanks.

Ross   
        

UUCP:    ...decvax!wanginst!ulowell!ross
ARPA:    "ross@ulowell"@csnet-relay      ;;; sorry don't know domains yet
POSTAL:
	Ross Miller
	University of Lowell
        Computer Science
	1 University Ave.
	Lowell MA 01854.