Date:  1-Nov-82 14:56:40
From: Cris Perdue <Perdue at HP-HULK>
Subject: APPEND
Class: Request, deficiency

  In PSL the function APPEND now takes exactly 2 arguments.
  Could it be extended to take an arbitrary number.  Probably
  0 and 1 should also be legitimate numbers of arguments.
  What say?

RESPONSE (Eric):

  Someday...

Date: 30-Oct-82 18:49:42
From: douglas <LANAM at HP-HULK>
Subject: difference in apply betwen compiled and interpreted code.
Class: Bug

  Dealing with apply to nexprs.:
  18 lisp> (dn nexpr (a) (princ a) (terpri))
  NEXPR
  19 lisp> (de calling-function (arg) (apply (function nexpr) (list arg))
  19 lisp> )
  CALLING-FUNCTION
  20 lisp> (calling-function 'a)
  A
  NIL
  21 lisp> (calling-function '(a b))
  (A B)
  NIL
  22 lisp> (compile '(calling-function))
  *** Function `CALLING-FUNCTION' has been redefined
  *** (CALLING-FUNCTION): base 257007, length 3 words
  NIL
  23 lisp> (calling-function '(a b))
  ((A B))
  NIL
  24 lisp> (calling-function 'a)
  (A)
  NIL
  25 lisp> ^C


  --------
  Note:  This bug does not exist on the vax. On the vax, this function
  runs the same interpretively and compiled.  (The interpretive
  version on the 20 is the same definition as that on the vax).  This
  use to work on the 20 until about 3 weeks ago.
	  douglas

RESPONSE (Eric):

  Fixed.

Date: 27-Oct-82 17:16:07
From: douglas <LANAM at HP-HULK>
Subject: bug in psl - (tr get)
Class: Bug


  Do (tr get) in psl, and you get an endless message:
  ***** Undefined function 'GET' called from compiled code

  over and over and over and over ...
	  douglas

RESPONSE (Eric):

  It should not let you (tr get).  This could be fixed by
  changing DEBUG not to use REMD, and using some other method of
  avoiding the "foo redefined" message.

Date: 22-Oct-82 09:38:48
From: douglas <LANAM at HP-HULK>
Subject: function timings.
Class: Request

  Is it possible to make a version of psl that gives me a profile
  of all the lisp functions called and how much cpu time was spent
  in each. (I would assume since this involves some overhead, it
  should not be put in the standard psl).  It would be preferable
  to have this on the vax.

RESPONSE (Lanam):

  Doug has written a package to do this.

Date: 18-Oct-82 12:29:47
From: Alan Snyder <AS at HP-HULK>
Subject: compiler bug
Class: Compiler bug

  The compiler incorectly compiles the first clause of the COND in
  the function below.  It compiles to return M2, rather than M1.

  (de foo (i1 i2)
    (let ((m1 (> i1 3)) 
	  (m2 (> i2 4))
	  )
      (cond ((not (eq m1 m2))
	     m1)
	    (t
	     (+ i1 i2))
	    )))

RESPONSE (Eric):

  Fixed.

Date: 15 Oct 1982 1131-PDT
From: PERDUE at HP-HULK
Subject: Make-String
Class: Documentation bug

  The reference manual claims that the first argument to make-string
  is the upper limit for indices into the string, but in fact it
  is the number of characters in the string.

RESPONSE ():

  Still extant.

Date:  9-Oct-82 12:14:25
From: douglas <LANAM at HP-HULK>
Subject: Terminal interrupt (^B) error
Class: Bug

  Similar to the one on the vax, on the 20 it also tries to
  reexecute previously typed in expressions.

  8 lisp> (show 'thing)

  (thing (ako ($if-added (add-instance)) ($if-removed (remove-instance)))
	 (instance ($value (request) (domain) (rule))
		   ($if-added (add-ako))
		   ($if-removed (remove-ako)))
	 (self ($value (%(fname :frame)))))

  nil
  Time: 120 ms
  9 lisp> *** Break in cleario at 43316
  Break loop
  ***** `show' is an unbound ID
  ***** Continuation requires a value for `show'
  Break loop
  thing
  Time: 1 ms
  12 lisp break>>> ^C

	  douglas

RESPONSE ():

  Extant bug.

Date:  7-Oct-82 15:17:52
From: Alan Snyder <AS at HP-HULK>
Subject: Interaction with EXEC location printout
Class: Bug

  PSL is apparently using a reserved location in an improper way.
  The location ".JBSYM" (whatever that is) is supposed to point
  to a symbol table, but it apparently does not contain a proper
  value, since if you ask EXEC to print out locations in symbolic
  mode, the EXEC will blow up trying to do a symbol table lookup.
  Please fix this bug.  (I have noticed NDDT get screwed up doing
  symbol table lookup also; perhaps this is the cause of that
  problem as well.)  (This analysis is based on information provided
  by Tim Eldredge.)

RESPONSE (Eric):

  BARE-PSL is now created with no symbol table at all.  This
  prevents the EXEC from being blown up, but prevents debugging
  at times.  The LINKER was trying to make a symbol table that
  wouldn't fit in memory with PSL.

Date:  6-Oct-82 10:00:11
From: FILMAN at HP-HULK
Subject: Re: apply and list
Class: Complaint, documentation deficiency

  If only EXPRs can be correctly applied, then you need to fix the 
  documentation, where it says:

  "We permit macros and fexprs to be applied;"

  though the rest of the sentence presents a confusing disclaimer.
  In any case, why can FEXPRs and MACROS be correctly applied?
					  Bob

RESPONSE (Eric):

  They can be applied, but the result of Apply(FexprOrMacro, X) is
  the same as Apply(cdr getd FexprOrMacro, X).  That means that
  the code is treated as though it were an EXPR.  FEXPRs take a
  single argument, which is a list of unevaluated parameters.  In
  the case of EXPRs, Apply(X, Y) is the same as Eval(cons(X, for
  each U in Y collect list('QUOTE, U))).  This is not the case for
  FEXPRs or macros.  In the case of macros, Apply can be used to
  perform macro expansion, i.e.  (apply 'let '((let ((x y)) z)))
  returns ((lambda (x) z) y).  In the case of FEXPRs, the list
  given to APPLY should have one element, which is the formal
  parameter to the function, e.g. if x=1, y=2 and z=3, then (apply
  'list '((x y z))) returns (1 2 3).  This type of thing is only
  dome in unusual situations, e.g. in Eval.  It is generally not
  recommended that macros and fexprs be given to APPLY.  The
  function which does what you want is EVAL.

Date:  5-Oct-82 17:47:25
From: FILMAN at HP-HULK
Subject: Apply and list
Class: Inquiry, deficiency

  Apply doesn't seem to work with list.  I.e.:

  (apply 'list '(3 4 5)) ==> nil

  Is this a feature or a bug?
					  Bob

RESPONSE (Eric):

  Only EXPRs can be APPLYed correctly.  LIST is a FEXPR.

Date:  5 Oct 1982 1628-PDT
From: Alan Snyder <AS at HP-HULK>
Subject: Fast vector access
Class: Compiler bug

  The PSL compiler still has a bug related to fast vector access:

  (de foo (v)
    (cons
     (+ (igetv v 0) (igetv v 1))
     (+ (igetv v 2) (igetv v 3))
     ))
  FOO
  (setf v [1 2 3 4])
  [1 2 3 4]
  (foo v)
  (3 . 7)
  (compile '(foo))
  *** (FOO): base 460253, length 6 words
  NIL
  (foo v)
  (0 . 7)

  (*ENTRY FOO EXPR 1)
  (*ALLOC 0)
  (*MOVE (MEMORY (REG 1) (WCONST 4)) (REG 2))
  (*WPLUS2 (REG 2) (MEMORY (REG 1) (WCONST 3)))
  (*MOVE (MEMORY (REG 1) (WCONST 1)) (REG 1))
  (*WPLUS2 (REG 1) (MEMORY (REG 1) (WCONST 2)))
  (*LINKE 0 CONS EXPR 2)

RESPONSE (Eric):

  Fixed.

Date:  5-Oct-82 15:11:06
From: Cris Perdue <Perdue at HP-HULK>
Subject: Documentation for REPEAT
Class: Documentation bug

  Documentation for REPEAT is still incorrect in the latest
  PSL reference manual.  The syntax is:
  Repeat ([S:form], E:form): nil

RESPONSE ():

  Still extant.

Date:  2-Oct-82 14:15:18
From: douglas <LANAM at HP-HULK>
Subject: Printing of error messages in compiler.
Class: Suggestion

  Could the error messages that are longer than one line, be
  indented about 1 tab stop (5-8 spaces on the 2nd and succeeding
  lines so that they stand out and are easier to distinguish and
  read).  An example would be

  *** Car in (car (foo 'foo1 (foo2 (foo3 'ffo4 (foo4 'xjks) 'sdjkl)
	(append (foo2 'x) (apply 'foo3 '4))))), not used, therefore not
	compiled.

  Due to macros, a number of these come up in my program.

	  thanks,
		  douglas

RESPONSE (Cris):

  Low priority.

Date:  2-Oct-82 12:48:03
From: douglas <LANAM at HP-HULK>
Subject: PRINC does too much.
Class: Complaint

  Princ should not check the position of the line to determine
  whether or not the atom will fit.  There should be a higher
  level function with that property.  I thought princ should
  just print the atom.  (or is there a lower level princ with
  out that check and possibly added carriage return not printed).
	  douglas

RESPONSE (Eric):

  Improvement is needed.

Date:  2-Oct-82 12:46:12
From: douglas <LANAM at HP-HULK>
Subject: Please do not have psl come up in the editor.
Class: Complaint

  This is not a desired start up position.
  1) Reading logs of background jobs is very difficult, if you can get
  them to work at all.
  2) Nmode does not work on a lot of terminals.  (including the ever
  popular chipmunk.
  3) The first thing I want to do in a lisp is dskin or fasl in my
  files, not edit a command to do this.
  4) It is even difficult to run do's with this type of mode.
	  (shell scripts).
	  douglas

RESPONSE (AS):

  PSL no longer comes up in the editor.

Date:  1-Oct-82 11:23:53
From: Alan Snyder <AS at HP-HULK>
Subject: Printing of the escape character (!)
Class: Complaint, deficiency

  The atom - prints as !- in Lisp mode.
  The atom + prints as !+ in Lisp mode.
  I believe this is a mistake.
  The printer should not insert unnecessary !'s.

RESPONSE (Cris):

  Extant deficiency.  I assume it will be fixed when someone
  shows he/she is being really hurt.  It's a real crock in my
  personal opinion.

Date: 30-Sep-82 11:09:01
From: Alan Snyder <AS at HP-HULK>
Subject: "<foo> already loaded" messages
Class: Request, complaint

  I would like to reiterate a request made previously, I believe, by
  Doug to get rid of the "FOO already loaded" messages.  If you
  feel strongly that some sort of warning is needed when people
  type (LOAD FOO) by hand, then I would suggest having LOAD return
  a string that would be printed by the Read-Eval-Print loop.
  I don't think there is any need to print these messages when
  the LOAD is contained in a file (either source or object) that
  is being read.

RESPONSE (Eric):

  Fixed.

Date: 29-Sep-82 11:34:48
From: douglas <LANAM at HP-HULK>
Subject: upon exit of psl (or interrupt with ^c).
Class: Request

  Can the terminal keys be restored upon exit of psl-nmode
  (or interrupt with ^c)?
	  dougla

  Add to things psl should do when ^c is typed:
  restore cntl-s.  (This should be possible since emacs does this).
	  douglas

RESPONSE (Cris):

  Use C-X C-Z to exit NMODE; this problem does not occur when
  using ^C to exit PSL in its ordinary top loop.

Date: 29-Sep-82 10:01:01
From: douglas <LANAM at HP-HULK>
Subject: Bug in nmode
Class: Bug, deficiency

  If you type
  (expression) 
  cntrl-] E.

  where the cntrl-] E is on the start of a new line, 
  you get
  Exiting NMODE Lisp
  End of File read!,

  shouldn't it execute the last expression?  Why should typing a carriage
  return before the cntrl-] E make a difference?
	  douglas

RESPONSE (Alan):

  If RETURN is typed before Lisp-E, NMODE is not supposed to read
  the previous expression.  "End of File read!" is a reasonable
  response.  "Exiting NMODE Lisp" is a confusing message, but not
  generated by NMODE.

Date: 28-Sep-82 20:59:41
From: douglas <LANAM at HP-HULK>
Subject: Close all parenthsis to a particular level.
Class: Request

  How about adding the ability of ] to close all parenthesis (as in franz,
  maclisp, ucilisp).  It would be nice if it could stop at [ (as in franz,
  maclisp, ucilisp).  But I realize you use [] for reading arrayes, thus
  maybe you could use {} for this type of bracketing.  It would be nice
  to type } to close an expression instead of )))))) (and have to count
  them also, or wait for the editor to match them flipping the screen
  at 1200 baud (That process is a pain to go through in the editor).
	  douglas

RESPONSE (Cris):

  This is a relatively low priority now, I'd say.

Date: 28-Sep-82 13:50:35
From: Cris Perdue <Perdue at HP-HULK>
Subject: CompileTime and DskIn
Class: Note

  (CompileTime (dskin "blah.sl")) has the effect of treating the
  contents of blah.sl as though they were textually embedded in
  the file with the CompileTime form: those forms are compiled.

  (CompileTime (load blah)) on the other hand causes the
  definitions in blah.b to be made available at compile time.
  Even if there is a text file blah.lap rather than binary
  blah.b, "load" seems to only load the definitions.

  If a file with (CompileTime (load foo)) in it is compiled, and
  if foo.lap (another source file) exists rather than foo.b, then
  the contents of foo.lap are effectively included in the source
  file I am trying to compile.  This is a difference in behavior
  between compiled and non-compiled files.

RESPONSE (Eric):

  Extant bug.  This is the actual behavior.  LOAD should always
  make the definitions available rather than compiling them.  It
  is intended that DSKIN result in compiling the contents of the
  file referred to.

Date: 28-Sep-82 11:19:30
From: Alan Snyder <AS at HP-HULK>
Subject: RETURN complaint
Class: Compiler bug, complaint

  The PSL compiler now produces an error message if it
  encounters a RETURN with no arguments.  This is fine.
  However, it still generates an invocation of "NIL".
  It should be possible to avoid generating garbage code
  when there are errors in the source.

RESPONSE (Eric):

  A warning is now issued, but code to return NIL is generated
  and compilation continues.

Date: 28-Sep-82 11:01:15
From: Cris Perdue <Perdue at HP-HULK>
Subject: Documentation update for CopyStringToFrom
Class: Note

  Copy all characters from OLD into NEW.  This operation is destructive.
  If the lengths of OLD and NEW differ, only the lesser number of
  characters is copied.  If NEW is longer than OLD, the part not
  copied into is left unchanged.

RESPONSE ():

  To be put into the manual.

Date: 27-Sep-82 13:01:31
From: Alan Snyder <AS at HP-HULK>
Subject: Undefined functions
Class: Complaint

  The error "Undefined function FOO called from compiled code" should
  (i.e., ought to be, for the user's sake) continuable.

RESPONSE (Eric):

  Yes, that would be one benefit of loading a register with the
  number of arguments being passed to a function.  The problem
  now is that continuation is performed by interpreting a LISP
  form, and it is not known how many arguments should be put in
  the list to be evaluated.

Date: 27-Sep-82 11:27:15
From: Cris Perdue <Perdue at HP-HULK>
Subject: EOF handling
Class: Inquiry

  There appears to be no documentation in the reference manual
  concerning end of file handling, except for the case of READ.
  It appears to be undocumented for ChannelReadChar in particular.

RESPONSE (Cris):

  See below, message from AS.

Date: 27-Sep-82 04:33:32
From: douglas <LANAM at HP-HULK>
Subject: Speed of psl
Class: Inquiry

  I am finding psl on the vax to be much slower than psl on the 20.
  Is this true?  Is there any reason for this?
  (Things are noticiable a factor of 4 slower with equivalent
  load averages - but I did not do any timings).
	  douglas

RESPONSE ():

  ??

Date: 27-Sep-82 09:02:49
From: Alan Snyder <AS at HP-HULK>
Subject: ChannelRead exception handling
Class: Bug, documentation error

  The manual says that ChannelRead will catch $READ$ and return
  $EOF$.  This is false; only Read does the catch.

RESPONSE (Eric):

  None of the input functions use THROW any more.  Thus no
  catches are performed, either.  READ and company return the
  value of the variable $EOF$.  Character at a time functions
  return (char EOF).

Date: 24-Sep-82 14:20:40
From: FILMAN at HP-HULK
Subject: Page and section numbers
Class: Suggestion, complaint

  I find confusing the fact that (in the PSL manual) page and section numbers
  are annotated the same way.  When the index refers to 8.5, I don't know
  whether to rush off to section 8.5 (wrong) or page 8.5 .  How about 8.5 for
  sections and 8-5 for pages, or something like that?
					  Bob

RESPONSE ():

  No response yet.

Date: 27 Sep 1982 03:57:05-PDT
From: douglas at HP-Hewey
Subject: VAX version and prettyprint
Class: VAX deficiency

  The module prettyprint does not exist on the vax 
  (only the older module pretty).
	douglas

RESPONSE (Eric):

  Fixed.

Date: 23-Sep-82 15:26:13
From: douglas <LANAM at HP-HULK>
Subject: Backtrace.
Class: Complain

  I found if you have

  (x (y (z a))) and you get an error evaluating (z a), you might find x and
  y on the backtrace stack even though you haven't executed it yet.
  Worse, if you trace y, y will never say it is entered but will be on 
  the backtrace stack.  
	  douglas

RESPONSE (Cris):

  Just what should appear on the backtrace stack and when is has
  been a matter of some debate.  The phenomenon you are seeing
  occurs just in interpreted code.

Date: 22-Sep-82 15:34:38
From: douglas <LANAM at HP-HULK>
Subject: DO loops
Class: Bug

  do still returns t when there are no clauses after the test.
  the manual says it returns nil.

RESPONSE (Eric):

  USEFUL has been rebuilt and presumably DO is correct.

Date: 20-Sep-82 15:50:44
From: douglas <LANAM at HP-HULK>
Subject: Scanner
Class: Bug

  1.2xa is read as two tokens 1.2 and xa.
  1.2ea gives a error message that the exponent is missing.

  same with 1.2x-a and 1.2e-a

  1xa is two atoms 1 and xa.
  1ea says that the exponent in the float is missing.
	  douglas

RESPONSE (Cris):

  Still extant.
  I consider this a relatively low priority.  Common LISP has a
  well-defined and general scanner that we should implement
  eventually.

Date: 20-Sep-82 11:07:38
From: Alan Snyder <AS at HP-HULK>
Subject: Excess right parens during compilation
Class: Complaint

  When compiling a file, extra right parens should produce
  a warning message, as (in my case) they often are the result
  of a paren mismatch in the middle of a function definition.

RESPONSE (Eric):

  The compiler now gives a warning message about this.

Date: 20-Sep-82 10:43:11
From: Alan Snyder <AS at HP-HULK>
Subject: Functions to "replace" MAIN
Class: Complaint

  I have found when writing functions designed to "replace" MAIN,
  that it is necessary for those functions to initialize the
  variables CurrentReadMacroIndicator* and CurrentScanTable*,
  otherwise after a SaveSystem when the program comes up, the
  scan table will be in a very strange state.  I believe that
  this initialization should be performed by a "pre-main"
  procedure and that user-written "main" procedures should be
  spared these details, which tend to be system-dependent.  Your
  source code for Main claims "Redefine this function to call
  whatever top loop is desired."  I agree, except that "this
  function" should be one that does nothing except invoke the
  "standard" top loop.

RESPONSE (Eric):

  Fixed.

Date: 20-Sep-82 09:06:06
From: PAULSON
Subject: Read macros, the "BUG" function
Class: Bug, deficiency

  Two problems:
    (1) Read macros are apparently not attached to read tables.  Therefore
  a read macro for one read table may interfere with other read tables,
  including the system read table.  
    (2) the function BUG bombs on directory access privileges.

RESPONSE (Cris):

  Still extant.  At some point the Common LISP input mechanisms
  should be implemented for PSL, solving the read macro problem.

RESPONSE (Cris):

  The BUG function is still incorrect, but in a different way.

Date: 18-Sep-82 15:54:10
From: douglas <LANAM at HP-HULK>
Subject: What does #<Code:0> mean?
Class: Inquiry

  Why is this the return value of faslin?

RESPONSE (Eric):

  No comment on this question.  Faslin now returns NIL.

Date: 17-Sep-82 11:40:31
From: Alan Snyder <AS at HP-HULK>
Subject: Use of fluid variables
Class: Suggestion

  As part of the current effort to "clean up" PSL, I would like
  to suggest that an effort be made to reduce or eliminate the
  use of fluid variables as "optional" or "implied" arguments,
  by defining new functions with explicit arguments.  For
  example, instead of having SpecialReadFunction*,
  SpecialWriteFunction*, and SpecialCloseFunction*, there
  should be an additional function OpenSpecial that takes four
  arguments, the filename, and the three functions.  Another
  example is DumpFileName*: currently there is no way to save a
  PSL that does not have DumpFileName* bound to the name of the
  file it was dumped to.  In the case of "system" programs, the
  default dump file should probably be "PSL.EXE" (i.e.,
  something that would write in the user's directory).  There
  should be a variant of DumpLisp that takes the filename as an
  argument (and does NOT bind DumpFileName*).  These are the
  two examples that come to mind, there may be others.

RESPONSE (Eric):

  DumpLisp and SaveSystem now take arguments rather than using
  fluid variables.  The problem with fluid variables and "open"
  is still extant.

Date: 17-Sep-82 11:14:26
From: Alan Snyder <AS at HP-HULK>
Subject: message "($FLUID FOO) not compiled"
Class: Compiler complaint, inquiry

  What does the message "($FLUID FOO) not compiled" mean?  It sounds
  like the compiler has broken or something, although the program
  seems to work.  Furthermore, why shouldn't it be compiled?
  Did the compiler run out of registers or something?
  Suggested fix: either fix the compiler to compile it, or change
  the error message to be more informative to naive users.

RESPONSE (Eric):

  The message has been changed to "not used, therefore not compiled."

Date: 17-Sep-82 09:54:27
From: Alan Snyder <AS at HP-HULK>
Subject: Endings of strings
Class: Complaint

  If I forget the ending " on a string in a file, then I get one message
  "string continued over EOL" for every succeeding line in the file
  when the file is read in.  There should be only one message given.
  Furthermore, if you believe that multi-line strings are bad (which I
  do), then you should probably generate an Error so that you don't
  read the remainder of the file in "reverse polarity" (in terms of
  what is inside vs. outside of string literals).
  (Manual note: I couldn't find anything in my manual that addresses
  the issue of multi-line string literals.)

RESPONSE (Eric):

  There is (and has been) a flag to turn off the message.  I
  don't plan to change this; some major users in fact depend
  heavily on multi-line string literals.

Date: 17-Sep-82 02:46:17
From: douglas <LANAM at HP-HULK>
Subject: Proposal for inum/wnum arithmetic.
Class: Suggestion

  I have thought of a reason for having both i and w commands.
  I think the w should be what both are now (just do the machine
  operation and dont worry about tags).
  But the i commands (iplus, ishift, ilor, etc.) could take their
  arguments make sure they are working on a full word (either
  go down the pointer to the integer object or move the immediate
  number into a full word (or register), play with it there, then
  if the number if to be passed to another procedure or used outside
  the context of the i num arithmetic functions, to be send to
  a function that would convert the word back to psl format.
  If small, convert to immediate format, if big, return the pointer
  to the object.  This way I could have access to a full word
  on any machine, and be able to produce efficient open code,
  and not have to worry about the psl tag bits.

  The proposal would be if the system sees
  (ilor (ishift x n) (iland a b)), that x, n, a, and b would be converted
  first, then the operations done, and then the one result would be 
  converted back.  No type checking would be done (if it is an immediate
  number, the pointer would be followed and its location used, for 
  efficiency.).

  How does this idea sound?

RESPONSE (Eric):

  Not altogether right.  Some of this would be more applicable to
  Franz LISP than it is to PSL.

Date: 16 Sep 1982 1141-PDT
From: Kendzierski at HP-HULK (Nancy)
Subject: UNION clause of FOR
Class: Documentation bug

    The manual states that "(UNION EXP) is similar to (COLLECT EXP), but
  only adds an element to the list if it is not equal to anything already
  there."  However, I get the following results with COLLECT and UNION:

  -----------------------------
  (for (from i 1 4)
    (collect (cond ((= i 1) 1)
		   ((= i 2) 1)
		   ((= i 3) 3)
		   ((= i 4) 3))
	     ))

  Returned:  (1 1 3 3)
  -----------------------------
  (for (from i 1 4)
    (union (cond ((= i 1) 1)
		 ((= i 2) 1)
		 ((= i 3) 3)
		 ((= i 4) 3))
	   ))

  Returned:  3
  -----------------------------

RESPONSE (Cris):

  Actually, UNION is similar to JOIN rather than COLLECT.  Thanks.
  (The manual is incorrect.)

Date: 13 Sep 1982 1249-PDT
From: Alan Snyder <AS at HP-HULK>
Subject: Make-String
Class: Bug in COMMON.SL

  Make-String in compiled form creates a string with 1 too many elements.

RESPONSE (Eric):
	Fixed.

Date: 10 Sep 1982 1606-PDT
From: Alan Snyder <AS at HP-HULK>
Subject: (APPLY x (LIST a b c...))
Class: Bug, complaint

  The manual states that (APPLY x (LIST a b c...)) is compiled in
  such a way that the list (LIST a b c ...) is not actually
  constructed.  This is a very useful optimization that I rely
  upon to make message passing efficient in my OBJECTS package.
  However, I was recently surprised to discover that the
  optimization is not performed if there are six or more elements
  in the list.  I surmise that this is somehow related to the
  number of real (as opposed to virtual) registers in the DEC-20
  implementation, but don't see any reason why this should
  prevent the optimization from being carried out.  What gives?

RESPONSE (Eric)

  It's a nasty interaction between optimized compilation of LIST and
  optimized compilation of APPLY.  I can fix it.

RESPONSE (Eric):

  Fixed.

Date: 10-Sep-82 10:49:18
From: douglas <LANAM at HP-HULK>
Subject: configuration of bps and heap on 20
Class: Request

  Can the configuration of the above in psl be changed by moving approx.
  20K-30K of heap space from heap to bps in bare-psl and psl?
	  thanks,
		  douglas

Date: 10-Sep-82 10:22:02
From: douglas <LANAM at HP-HULK>
Subject: Breakfunction property
Class: Documentation deficiency, documentation bug

  I found if you set the value of breakfunction on the propertylist of
  an atom, and type the atom at the break level, it will execute
  that function.  This needs to be documented somewhere.  Also the
  help file printed at the level should be able to be updated to
  reflect any changes the user may make.   I am not sure I like having
  atoms automatically changed into functions at type in, but I do like
  being able to change the break system to take control characters
  instead of alphabetic characters.
	  douglas

Date: 10-Sep-82 09:07:36
From: douglas <LANAM at HP-HULK>
Subject: warnings by compiler.
Class: Request

  When the compiler says something is declared fluid, could you
  include the function that caused this on the same line in the
  message.  Due to the fast number of lisp systems, I have a hard
  time remembering whether yours does it before it prints the
  function name concerning it or after.
	  douglas

RESPONSE (Eric):

  Fixed.

Date:  9-Sep-82 15:08:09
From: douglas <LANAM at HP-HULK>
Subject: psl space allocations on the vax
Class: Request

  Could the psl on the vax be reconfigured so that there is 100K words of
  bps free at its startup (currently it is approx 46K words)?
	  thanks,
		  douglas

Date:  9-Sep-82 14:32:52
From: douglas <LANAM at HP-HULK>
Subject: " . . .  not compiled" message
Class: Inquiry, complaint, request

  Does the following mean the whole phrase was not compiled or
  just the car was not compiled?

  *** (car (merge-comment
	    (*i-put-datum (frame ($local type))
			  (get-field-location 'nil ($local key1))
			  '3 '(insert-frame (fname :frame)))
	    'finherit: 'continue))
  not compiled.


  If the first, it is very, very wrong since all of these functions are my
  own and do side effects (set property lists).
  If the second, the message should be changed to something like, return
  value of car is not used and thus car is not being compiled.
	  douglas

RESPONSE (Eric)

  It means just the CAR was not compiled.  I'll see what I can do about
  the message.

RESPONSE (Eric)

  Fixed the message.

Date:  9-Sep-82 14:29:09
From: douglas <LANAM at HP-HULK>
Subject: Fluid and macro of the same name
Class: Bug, deficiency

  One cannot use the same name for a fluid and a macro.
  Please fix this soon.  It is a very annoying restriction that
  shouldn't exist.
	  douglas

RESPONSE (Eric)

  Fixed.

Date:  3-Sep-82 13:06:38
From: FILMAN at HP-HULK
Subject: emode and []
Class: EMODE deficiency, EMODE complaint

  The s-expression functions in emode don't seem to know about []'s.
  Since these are the default construction of defstruct, this is a serious
  deficiency.
					  Bob

Date:  3-Sep-82 11:57:28
From: Cris Perdue <Perdue at HP-HULK>
Subject: STEP bug
Class: Bug

  Try (step '(plus 3 4)).  Step using ^N.  The stepper breaks after
  a couple of steps.

RESPONSE(Benson):

  Fixed.

Date:  3-Sep-82 04:52:14
From: douglas <LANAM at HP-HULK>
Subject: can you change princ,
Class: Request

  Can you change the printing of the following by princ, so that the open 
  parens are on the beginning of the line, not the end?   I think that
  this would be more pleasant to look at.
  Currently:
  (THING (WCHEM-CLASS (WCH) (WCHO (C-O-STRETCH-ALCOHOL) (O-H-DEFORMATION (
  (THING (WCHEM-CLASS (WCH) (WCHO (C-O-STRETCH-ALCOHOL) (O-H-DEFORMATION (
  O-H-STRETCH-FREE-OH-ALCOHOL) (O-H-STRETCH-INTRAMOLECULAR-H-BONDED-ALCOHOL) (
  C=O-STRETCH-OVERTONE) (C=O-STRETCH))))


    (Actually I tried to copy this off my terminal and one line got mixed up,
    but it still displays what is currently done.
	    douglas

RESPONSE(Benson):

  That's what PRETTYPRINT is for.  It has been suggested that the top loop
  use PRETTYPRINT instead of PRINT.  Any opinions?

Date:  2-Sep-82 15:17:00
From: Alan Snyder <AS at HP-HULK>
Subject: Garbage collection trap request
Class: Feature request

  I would like to have the GC starting and ending messages
  printed by specific functions that are invoked at the beginning
  and ending of each garbage collection.  These functions should
  take as arguments all information that they use to construct an
  appropriate message.  This change would allow me to alter the
  form of announcement without mucking with the GC itself.  In
  particular, I don't want to have to make an altered copy of the
  GC code or access its private variables.  I realize that the
  GC-start function would have to be written to not allocate any
  storage.  I need this feature to display a GC announcement in
  NMODE.

Date:  2-Sep-82 12:13:04
From: douglas <LANAM at HP-HULK>
Subject: flag *continuableerror
Class: Documentation request

  I found a flag *continuableerror which should be documented in the manual.
  (It is very useful).

Date:  2-Sep-82 11:45:35
From: FILMAN at HP-HULK
Subject: printing circular structures to depth
Class: Feature request, notice, miscellaneous

  Unfortunately, PSL doesn't have a printlevel function (that
  prints a structure only to a certain depth).  Nor does the
  circular printing function deal with circularity in vectors.

  I've written a (not deeply thought-out) depth-limited printing
  function of my own.  Since PSL doesn't come with the most
  complete set of user utilities, how about a user-utility
  function area for such contributions?

					  Bob

Date:  2-Sep-82 11:05:43
From: Alan Snyder <AS at HP-HULK>
Subject: Char-UpCase and Char-DownCase
Class: Bug

  Char-UpCase and Char-DownCase return NIL instead of their
  argument when no conversion is done.

RESPONSE (Eric):
	Fixed.

Date:  2-Sep-82 10:53:48
From: FILMAN at HP-HULK
Subject: atomic rules
Class: Complaint

  In PSL, (atom x) == (not (pairp x)).  Thus, vectors, code pointers
  strings, etc are all atoms.

  I know that this is documented.  However, it is counter-intuitive
  (counter-intuitive == the other lisps I've played with don't do it this
  way).  Not having read the fine print, I spent an afternoon discovering this
  fact.
					  Bob

RESPONSE (Eric)

  I agree it is confusing, but it conforms to all the other Lisps
  I know of!  Perhaps you are confusing atoms with symbols (called
  litatoms in Interlisp?)

Date:  2-Sep-82 10:43:26
From: douglas <LANAM at HP-HULK>
Subject: continuable break.
Class: Inquiry, feature request

  Is there a function that would be (contbreak) ?
  Which is something to (break) as (conterror) is to (error)?
	  douglas

RESPONSE (Eric)

  That's really what ContinuableError is.  It just puts you in
  a break loop where you can fix things.

Date:  2-Sep-82 01:58:26
From: douglas <LANAM at HP-HULK>
Subject: break package and returning new values.
Class: Inquiry

  I have read through the break package, and tried a few things, and can
  not find how I can do something that means
  (return value) where value is a lisp-expression to be evaluated and become
  the value of the call to break(or conterror), without calling 
  the editor.  I would like to be able to return a value or evaluate an
  expression that may not be similar to the expression that caused the 
  error and return that value back from the break point (similar to
  what one can do in maclisp/franz/lisp machine lisp).
  How do I do this?
	  douglas

RESPONSE(Snyder):

  Just type the expression at the break handler, then type 'C' for
  "continue using last value".

Date:  1-Sep-82 23:02:45
From: douglas <LANAM at HP-HULK>
Subject:

  Did someone change faslout?  It use to echo input, but now it doesn't
  seem to.

  Can you change faslout back to echoing input that is just
  passed to the fasl file.  I can not figure out easily when I
  finish typing an expression to faslout any more.

Date:  1-Sep-82 22:58:44
From: douglas <LANAM at HP-HULK>
Subject: defn* and *defn
Class: Documentation request

  what is defn* and *defn?  and what is dfprint*?  They are on page
  19.3.  They seem important yet are pretty much undocumented.
  What are they.

RESPONSE (Eric)

  *DEFN and DFPRINT* are used by the top loop to allow processing
  other than evaluation.  if *DEFN is non-NIL, DFPRINT* is applied to
  each form instead of being evaluated.  This is the means by
  which FASLOUT and other functions work.

Date:  1-Sep-82 22:55:56
From: douglas <LANAM at HP-HULK>
Subject: macros expanding to "bothtimes"
Class: Complaint, bug, deficiency

  HP-PSL 3.0, 27-Aug-82
  1 lisp> (bothtimes (setq x 2))
  2
  2 lisp> x
  2
  3 lisp> (dm x (y) `(bothtimes (setq . ,(cdr y)))
  3 lisp> )
  X
  4 lisp> (x z 4)
  4
  5 lisp> z
  4
  6 lisp> (faslout "junk")
  FASLOUT: (DSKIN files) or type in expressions
  When all done execute (FASLEND)
  T
  7 lisp> (bothtimes (setq a 3))
  3
  8 lisp> (x b 4)
  9 lisp> (faslend)
  *** Init code length is 2
  *** A declared fluid
  *** B declared fluid
  **FASL**INITCODE**NIL
  10 lisp> a
  3
  11 lisp> b
  NIL
  12 lisp> (quit)

  I do not think this is correct, the call to x on line 8 should be expanded
  by the compiler and then the system should notice that it is a bothtimes
  clause and should be executed at compile time and compiled.  Instead it
  appears to be just compiled.

  The x is expanded (it is just not executed at compile time like it 
  is suppose to be).

  Can you fix this soon?  
	  thanks,
		  douglas

Date:  1-Sep-82 17:00:41
From: FILMAN at HP-HULK
Subject: trace
Class: Inquiry

  The function "trace" is defined but doesn't trace; nor is it documented in
  my version of the documentation.
				  Bob

Date:  1-Sep-82 12:08:02
From: FILMAN at HP-HULK
Subject: circular structure bugs
Class: Bug, deficiency

  1) Printx doesn't handle circular vector structures.  Since defstruct
  makes vectors, this is a serious problem

  2) Consider the following sequence:

  (setq bbb '[a b c d])
  (indx bbb 3)			--> d
  (setindx bbb 3 bbb)		--> prints the appropriate circular structure
  (indx bbb 3)			--> an infinite structure
  (indx (indx bbb 3) 3)		--> produces a push down overflow error
  (indx (indx (indx bbb 3) 3) 1)  --> also produces a push down overflow error

  What gives?
					  Bob

Date:  1-Sep-82 12:01:03
From: douglas <LANAM at HP-HULK>
Subject: br does not work with macros.
Class: Bug

  If you have a function x which is a macro.  Say
  (dm x (y) (rplaca y 'princ))

  then do (br x) .

  Before the call to br, 
  (x 'a) typed into the interpretor will execute the princ and return a.

  After the call to br,
  typeing (x 'a) to the interpretor will cause the expression
  (princ 'a) to be returned but not evaluated.

	  douglas

Date:  1-Sep-82 11:52:25
From: douglas <LANAM at HP-HULK>
Subject: compiletime
Class: Bug

  do 
  @psl
  (compiletime (setq a 1))
  a

  You will get that a has been set to 1.  I do not think this is right.

RESPONSE (Eric)

  (compiletime xxx) really means (eval-when (compile eval) xxx)
  in the current setup.  I think (eval-when (compile) xxx) does
  what you want.

Date: 31-Aug-82 11:14:18
From: douglas <LANAM at HP-HULK>
Subject: declaration of functions and variables.
Class: Deficiency, feature request

  I think it is better to have a declaration statement to declare
  something as a fexpr or as a nexpr, if you wish to use it before
  defining it in compiled code.
  Currently the manual says to write a dummy version.
  But something like :
  (declare (*fexpr x) (*nexpr x)) would be better.
  It could also be used in compiling files that reference other
  files but that you don't wish to load everything in to compile it.

  Also,
  (fluid x) should not set x to nil.

  and there should be two property list names for function type and
  variable type, not one, you should be able to use a name as a
  global variable and a fexpr.
	  douglas

Date: 31-Aug-82 10:46:17
From: douglas <LANAM at HP-HULK>
Subject: feature in print.
Class: Request

  It would be nice if print could know about readmacrochars that
  do as follows ^lisp-expression => (tag lisp-expression).
  An example is quote.
  Note: it should make sure the tagged list is of length 2 before
  doing the special print(at least in the case of quote).
	  douglas

Date: 30-Aug-82 15:34:57
From: FILMAN at HP-HULK
Subject: break and emode
Class: Deficiency

  When trying to "q" from a break in emode, the cursor goes to the end of
  the second following line, not the next line.  That is, if the screen is:
  (cursor shown by *)

  q*
  first line
  second line

  and you execute a meta-e, you get:

  q
  first line
  second line*

  not what you should get, which is:

  q
  first line*
  second line


					  Bob

Date: 30-Aug-82 13:38:40
From: FILMAN at HP-HULK
Subject: emode, breaks and "a"
Class: Bug

  Giving an "a" from emode inside a break seems to confuse the emode
  page printing routines some.
					  Bob

Date: 30-Aug-82 10:34:10
From: FILMAN at HP-HULK
Subject: break window
Class: Inquiry

  What happened to the break window?
					  Bob

RESPONSE(Perdue):

  It was removed because it behaved very poorly in various
  slightly "unusual" situations.

Date: 28-Aug-82 03:57:53
From: douglas <LANAM at HP-HULK>
Subject: interrupt and dumpsave.
Class: Deficiency

  If you do 
  (load interrupt)
  (savesystem "xxx.exe")
  (quit)
  @xxx.exe

  The interrupts will not work in xxx.exe, but the system will think the
  file was already loaded.

	  douglas

RESPONSE (Eric)

  The function (INITIALIZEINTERRUPTS) is called when the module
  is loaded.  It needs to be called in a fresh core image as well.
  It's not clear to me what the best way to ensure that is.

Date: 28-Aug-82 03:56:46
From: douglas <LANAM at HP-HULK>
Subject: vector print length limit.
Class: Feature request

  There should be a special variable (say *printlength) which is set to 
  the maximum number of elements in a vector, list, (half-words vectors),
  which are printed out.  The rest could be printed ... .
  This variable could be reset by the user (nil for no limit).  But I
  think there should be a limit in the system (say 25-30?), often I
  get a strange error in compiled code which results in the endless
  printing of a vector.
	  douglas

Date: 27-Aug-82 16:09:05
From: douglas <LANAM at HP-HULK>
Subject: Printing "quote" expressions
Class: Bug

  @psl

  1 lisp> '(quote a b)
  'A
  2 lisp>

	  douglas

RESPONSE (Eric)

  Fixed (see BUG-FIX.LOG).

Date: 27-Aug-82 14:55:33
From: douglas <LANAM at HP-HULK>
Subject: file function needed.
Class: Feature request

  Is there a function which can tell me when a file was last written to 
  the disk?  I could use such a function.
  (I know this is machine/operating system dependent).
	  douglas

RESPONSE(Snyder):

  The file <HP-PSL.EMODE>DIRECTORY.SL has functions that almost
  do what you want.  Take the part of FILE-DELETED-STATUS that
  does at GTJFN to get a JFN, then pass that to JFN-WRITE-DATE.

RESPONSE(Perdue):

  It appears that we will be adopting the Common LISP file
  manipulation functions.

Date:      26 Aug 1982 17:21-PDT (Thursday)
From:	   Liu (?) at HP-PCD
Subject:   Function cells, function bindings, property lists
Class:	   Inquiry, documentation deficiency

  We run psl on VAX/750 under UNIX.

  The problems are

  (1) I first defined a function "x".  Then I initialized the property
      list of "x" by using "SetProp" which turned my function definition
      into "NIL".

  (2) I went on typing my function definition again.  Then I looked at
      my property list.  It has my function definition with some other
      goodies in it.

  I'll imagine the function cell and the property cell are two seperate
  entities.  So, these side effects are unexpected and undesired.

  Following is a sample of the problems.

  1 lisp> (de x (y) (car y))
  X
  2 lisp> (pp x)
  (DE X (Y) (CAR Y))
  T
  3 lisp> (setprop 'x '((color . red)))
  ((COLOR . RED))
  4 lisp> (prop 'x)
  ((COLOR . RED))
  5 lisp> (pp x)
  *** X has ill-formed definition.
  (DE X NIL)
  T
  6 lisp> (de x (y) (car y))
  Do you really want to redefine the system function `X'?(Y or N)y
  *** Function `X' has been redefined
  X
  7 lisp> (pp x)
  (DE X (Y) (CAR Y))
  T
  8 lisp> (prop 'x)
  ((*LAMBDALINK LAMBDA (Y) (CAR Y)) USER (COLOR . RED))

RESPONSE(Perdue):

  Thanks for the good observation.  It turns out that the
  function cell in PSL always contains a machine instruction,
  so the lambda expression can't be stored there.  PSL stores
  the lambda expression on the property list.  I don't believe
  this fact is documented.

RESPONSE (Eric)

  Calling SETPROP is inadvisable under almost any situation.

Date:      26 Aug 1982 16:35-PDT (Thursday)
From:	   Someone at HP-PCD
Subject:   "apply" function
Class:	   Comment

  When the function "(apply 'plus '(1 2 3))" is entered, psl returns a line
  of the form

  #<Unknown:15602127320>

  rather than the result "6".

RESPONSE(Perdue):

  PLUS is a MACRO, so you don't get what you expect as an answer.
  In general, applying a macro causes it to perform macro expansion
  but not to evaluate the expanded form.  Probably applying a macro
  ought to either be an error.  In some LISPs (apply fn arglist)
  is equivalent to (eval (cons fn arglist)) when fn is a macro, but
  these are not equivalent when fn is a normal function.

Date: 26-Aug-82 15:27:19
From: FILMAN at HP-HULK
Subject: ***** Unexpected EOF while reading {99}
Class: Inquiry

  I get the above message in a break, and all the ^q's I give it don't pop.
  Is there some sure way back to the top level?
					  Bob

RESPONSE(Perdue):

  Say "a" rather than "q" to get out.  There is a menu that tends to come
  up these days, even when you don't want it.  When you don't want it,
  use ^XO to get out of it.  A couple of ^XOs and it will even disappear
  from the screen.  We'll get rid of that menu altogether in a day or so.

Date: 26-Aug-82 12:14:36
From: FILMAN at HP-HULK
Subject: closures
Class: Comment, documentation deficiency

  I was pleased to see the documentation on closures on page 10.9
  of the psl manual.  Unfortunately, this stuff is not
  implemented.  Perhaps a better warning than "[??? Not yet
  connected to V3 ???]" could be associated with this material.
					  Bob

Date: 26-Aug-82 12:12:28
From: FILMAN at HP-HULK
Subject: defstruct
Class: Documentation deficiency

  The defstruct documentation in the psl manual does not correspond to the
  implementation in psl.  For example, defstructp doesn't exist.  Chris
  assures me that the defstruct in psl is lisp machine defstruct.  Perhaps
  the manual could be adjusted for this reality.
					  Bob

Date: 26-Aug-82 11:54:50
From: FILMAN at HP-HULK
Subject: emode and mm
Class: Bug

  If you're in emode, and call mm, the exit from mm leaves emode confused.
  The various controll characters to the screen get printed.  Doing an ^x^z
  and a continue psl fixes the problem.
					  Bob

Date: 26-Aug-82 11:23:54
From: douglas <LANAM at HP-HULK>
Subject: bugs in emode.
Class: Bug, inquiry

  try the following:
  @psl
  1 lisp> (emode)
  ^\e^L

  (that is type meta-e, cntl-l as the first input to emode).

  can ctrl-h work the same as ^b ?  It does in emacs.

	  douglas

Date: 26-Aug-82 10:58:53
From: FILMAN at HP-HULK
Subject: Handling of macro expansion in the interpreter
Class: Comment

  This is a subtle one, that most lisp's get wrong.

  In PSL, macros eat stack.  For example, the sequence

  (setq x 1000)
  (dm awhile (l)(cond  ((eval (cadr l)) (eval (caddr l)) l)
		       (t nil)))
  (awhile (greaterp x 0) (setq x (sub1 x)))

  gets a stack overflow; it needn't.  I believe that stanford 1.6 lisp
  does this right, while uci-lisp does it wrong.

					  Bob

Date: 26 Aug 1982 0857-PDT
From: douglas <LANAM>
Subject: you can do a funcall or apply on a code pointer.
Class: Comment

Date: 26-Aug-82 09:47:51
From: douglas <LANAM at HP-HULK>
Subject: why are there global variables which can be bound statically?
Class: Inquiry, complaint

  what is really gained by this?

RESPONSE(Perdue):

  It is thought that it is not meaningful to rebind certain
  global variables.  The declaration is useful to some LISP
  implementations.

message continues:

  I find it unreasonable that I can not do
  (let ((out* (open "junk" 'output))) (princ ....))))

  And if I can't do it this way, I have to use a catch to make sure that
  out* is bound correctly after the body of the let is executed.
	  douglas

RESPONSE(Perdue):

  The official PSL I/O system will probably be redone along the
  lines of Common LISP.

Date: 26-Aug-82 09:22:25
From: douglas <LANAM at HP-HULK>
Subject: errors in manual.
Class: Documentation bug

  Page 14.1:

  Under the function savesystem, is a spelling error.
  lispbannner!* should be lispbanner!*.


  On page 13.2 is the following :

  BREAKOUT!* (initially: NIL)     global
	  similar to BREAKOUT!*.

Date: 25-Aug-82 13:50:26
From: FILMAN at HP-HULK
Subject: Page headings in the manual
Class: Documentation

  The psl manual "swaps" the page and section numbers on left and right pages,
  but leaves the "PSL Manual" and section names unswapped.  This is a bit
  confusing.

RESPONSE(Kendzierski):

  This has been remedied in newer editions of the manual.

Date: 25-Aug-82 13:40:16
From: FILMAN at HP-HULK
Subject: "bug" function
Class: Bug

  The (bug) function gives an access failure (and dies in emode)

  The function defstructp is undefined.
Date: 22-Aug-82 13:45:20
From: PAULSON at HP-HULK
Subject: SUBSTRING
Class: Complaint, documentation deficiency

  In INTERLISP, (SUBSTRING STR N M) gives you the Nth through Mth
  elements of the string.  Makes sense, right?  And in ZLisp,
  (NSUBSTRING STR N M) gives you the (N+1)th through (M+1)th
  elements.  Fine- ZLisp does zero-indexing.  But in PSL,
  (SUBSTRING N M) gives you the (N+1)th through Mth elements.
  This does not make sense at all (and it isn't documented
  either.)

RESPONSE (Eric)

  SUBSTRING in PSL is exactly the same as SUBSTRING in Zetalisp,
  except that the END argument is required, not optional, and the
  AREA argument is not used.

Date: 20 Aug 1982 17:34:58-PDT
From: Martin.Griss <Griss at UTAH-20>
Subject: [Norman.kentvax at UDel-Relay: psl stray queries]
Class: Miscellaneous

  this is a very initial bunch of psl queries/thoughts.
  it is also a test to see if i can get mail out of this vax
  & over to you lot.
  (a)i

  (a) on vax psl 'messages' and 'real output' get interleaved in what
  seems to be an assynchronous manner. at least i seem to get error
  messages all mixed in with the stuff i print, so the idiom
      print <my own messages>;
      error 'stop here;
  is not as helpful as I would like.

RESPONSE (Eric)

  VAX Unix terminal output has been changed to be line buffered
  to speed it up.  This should have the side benefit of removing
  the interleaving of stdout and errout.

  (b) I have tried to use
      rlisp <<here | tee logfile
      on echo;
      ....

      to get a copy of input & output of a set of standartd tests. the
      'on echo;' seems not to be honoured? also the error recovery is
      a mess in this case because i go into lisp syntax & need to type
      special error-break-loop commands to escape it, and these are
      abominated unless i am in the error loop.

  (c) in ann error
  I wanted to see the value of fluid variables called a,b,c,d,...
  but of course some of these letters gave magic effects! i ended
  up with going (eval 'c) & similar nasties. yuk. also could the 
  backtrace print values that fluids have on the stack, or could i
  have some similar easy way to see values of fluids that have been
  covered up by subsequent bindings. furthermore the mess one gets on
  going (backtrace) is a MESS and i find it hard to see the stuff that
  i want for all the muck that i dont.

RESPONSE (Eric)

  Yes, backtrace and break are both weak.

  (d) try printing (expt 2 31). for me it gives an infinite string of -
  signs!!!!!!!

RESPONSE (Eric)

  The problem is due to the fact that the most negative number in
  a 2's complement representation has no positive counterpart.
  The solution (courtesy of Alan Snyder) is to do the computations
  on numbers less than zero, so that positive numbers are negated
  before processing rather than negative numbers being negated.
  This will probably be fixed in PSL soon.

  (e) lack of bignums is mildly bothersome - for work with reduce I guess
  i will lash up a botched bignum package representing numbers as vectors
  (so they pass the atom test), cos i presume your proper version is in
  the pipeline but not ready yet.

RESPONSE (Eric)

  Bignums do exist, as a loadable module.  Do (LOAD BIG).

  (f) i looked for the followng functions without apparent success:
	 random()    generate random number
	 timeofday() like date() but gives wallclock time
	    (I wanted it to help generate a good seed for my own
	     random number generator!)

RESPONSE (Eric)

  (RANDOM) is obtained by LOADing MATHLIB.  It uses (TIME) to
  generate its seed.  If (TIME) is not documented it should be.

  (g) in rlisp, various things I expected to be errors were not
  trapped very hard, e.g. a missing ')' seemed to be continuable
  when i didn't expect/want it to. also "help help" failed by
  turning into (help 'help) internally, not (help help), and in a
  break look following an error (help <anything?>) complained
  about the help package not being loaded even though I had
  called it from rlisp.

RESPONSE (Eric)

  There were bugs in the help system which I believe have been
  fixed.  HELP HELP; is still parsed incorrectly in RLisp, and
  that probably will not be fixed.

  (h) i suspect that often while in an break loop i want further
  errors ignored rather than letting them push me further into
  deeper break loops. I might be happy to have a break level that
  eats simple 1-char commands to continue, quit, backtrace with
  one char that pushes me into a brand new read-eval-print loop.
  for rlisp I guess that should be an rlisp r-e-p loop?

RESPONSE (Eric)

  It has been suggested that there be an absolute limit on depth
  of break loops.  In any case it seems clear that the break loop
  mechanism should be redesigned; this is far from the only complaint.

  I will try to collect further notes to pass on as I think of things:
  just put these somewhere in your big pile of gripes!

  Was good to see you in Pittsburg. cheers. arthur

Date: 19-Aug-82 10:07:31
From: Alan Snyder <AS at HP-HULK>
Subject: WNOT
Class: CMACRO Bug

  The *WNOT CMACRO produces bad code when its argument is
  an integer constant.  For example, the expression
  (WNot 7) produces (SETCM (REG 1) 7), which computes
  the complement of the contents of register 7.

RESPONSE (Eric)

  This case should be caught and evaluated in the first pass of
  the compiler.  The CMACRO should never be used.

Date: 19-Aug-82 09:35:24
From: LANAM at HP-HULK
Subject: History list package
Class: Deficiency

  When you do (hist), it tell you things like:
  5       Inp: (HIST)
	  Ans: NIL
  6       Inp: Q
	  Ans: NIL


  But it doesn't tell me that the Q on (inp 6) is a response to the break
  package, not the evaluation of the atom q.  It also doesn't tell me that
  (ans 4) is nil because it never existed.{History is an undefined function}.

RESPONSE (Eric)

  In general whenever a value is not returned by a function in the
  top loop, such as if an error occurs, NIL is put in the value
  position.  Would it be preferable to put something else there,
  such as "Abnormal termination"?

Date: 18-Aug-82 12:16:33
From: Alan Snyder <AS at HP-HULK>
Subject: Fast arithmetic and fast vector access
Class: Compiler bug

  There is a serious PSL compiler bug relating
  to the interaction between fast arithmetic
  and fast vector access.  In the following code,
  note that register 1 is clobbered by the MOVE
  instruction before it is used as an index
  register in the ADD instruction.  (Possibly
  useful info: if the vector fetch is replaced
  by CAR, the compiler does the right thing,
  i.e., moves V to a free register before
  loading register 1.)  PLEASE FIX THIS BUG!!!!
  ----------------------------------------------
  (CompileTime (Load Fast-Vector))
  (de test (v a)
    (WPlus2 (IGetV v 0) a))
  ----------------------------------------------
  (*ENTRY TEST EXPR 2)
  (*ALLOC 0)
  (*MOVE (REG 2) (REG 1))
  (*WPLUS2 (REG 1) (MEMORY (REG 1) (WCONST 1)))
  (*EXIT 0)
  ----------------------------------------------
	  (MOVE (REG 1) (REG 2))
	  (ADD (REG 1) (INDEXED (REG 1) 1))
	  (POPJ (REG ST) 0)
  ----------------------------------------------

RESPONSE (Eric)

  I believe this bug has been fixed in the latest release from Utah.

Date: 18-Aug-82 09:52:47
From: Alan Snyder <AS at HP-HULK>
Subject: PRINTX
Class: Deficiency

  PRINTX apparently does not handle shared structures involving
  Vectors.

RESPONSE (Eric)

  True.  Don Morrison wrote a quick and dirty circular structure
  printer GRAPH-TO-TREE, obtained by LOADing GRAPH-TREE, which
  correctly handles circular vectors.

Date: 15-Aug-82 12:36:13
From: LANAM at HP-HULK
Subject: bug in macroexpand.

  HP-PSL 3.0, 12-Aug-82
  1 lisp> (macroexpand '(setq a b c d))
  (SETQ A B)

  The result should have been '(setq a b c d)).

RESPONSE (Perdue):

  Right on expanding SETQ.  There may be an associated compiler bug, too.

RESPONSE (Eric)

  I fixed the source for MACROEXPAND.  The compiler does its own
  processing and is not affected.

Date: 14-Aug-82 18:59:24
From: LANAM at HP-HULK
Subject: what does ($fluid :value) not compiled mean?
Class: Inquiry

  I got this between two functions I compiled, but there was no code between
  the two function (and the declaration was pages earlier).
	  thanks,
		  douglas

RESPONSE (Eric)

  "*** FOO not compiled" from the compiler means that FOO has no side
  effects and is used in a place where no value is required.  The
  compiler does not issue code for such expressions.

Date: 14-Aug-82 18:33:00
From: LANAM at HP-HULK
Subject: Compiling variables in the CAR position
Class: Inquiry, complaint

  HP-PSL 3.0, 12-Aug-82
  1 lisp> (setq *comp t)
  T
  2 lisp> (defun a (b) (b b))
  *** Functional form converted to APPLY (B B)
  *** (A): base 412016, length 3 words
  A


  Why is it, if the function and argument have the same name, it
  gives me this message, but if I change either the name of the
  function or the argument, it doesn't give me this message?
  I don't think this message should pop up.

  Even if the function b was declared already.
  (defun a (b) (B b)) causes the system to think that b is a variable bound
  to a function.
  I think this is wrong.  If I had wanted that I would have done
  (apply b (list b)) instead of (b b).

RESPONSE (Perdue):

  (defun a (b) (b b)) is compiled heuristically.  The compiler guesses
  whether the call on b is directly a function call or whether "b" is
  used as a function-valued variable.  On the basis of local context it
  guesses b is a variable in function position.  I'm sure it will be
  a low priority for fixing, since it is easily worked around.

RESPONSE (Eric)

  This handling of variables in the function position goes against
  the accepted practice in recent Lisp systems.  I made the decision
  to do it that way, but have gotten only complaints about it.
  (Of course those who like it that way probably wouldn't say
  anything about it unless it went away!)  On reflection and further
  use I believe it should not have been done this way.  It is also
  inconsistent with the Common Lisp definition.  Should it be changed
  now?

Date: 14-Aug-82 14:57:28
From: LANAM at HP-HULK
Subject: (reset) should end a (faslout)

  If i do (faslout), get an error, and do (reset),
  I do not think the system should be in fasl mode any more.
  I think if I wanted to continue the (faslout), or save it,
  I would use the continue option of the break package, and
  not do (reset).
	  douglas

RESPONSE (Eric)

  FASLOUT sets a global variable and returns, rather than binding
  a fluid and doing the processing within that binding.  One
  solution is to write a COMPILE-FILE function which binds *DEFN
  so that popping out will abandon processing.

Date: 12-Aug-82 16:36:41
From: LANAM at HP-HULK
Subject: READ
Class: Bug

  do (let () (setq y (readch)) (unreadchar y) (read))word

  the system will return
  wORD

  note: that read normally changes all the characters in its word to 
  upper case.
  But if the character was sent back to the input stream from unreadchar,
  its initial case remains and the atom that read interns has its first
  character in lower case if it was typed that way.
  The above should have returned WORD.

  The above is with *raise = t.
	  douglas

RESPONSE (Eric)

  This wsa due to a bug in READCH and has been fixed.  By the way,
  UNREADCHAR is not the correct dual to READCH (in fact it is not
  currently defined).  UNREADCHAR is the dual of READCHAR, which
  returns a character (integer) instead of an ID.

Date: 12-Aug-82 16:27:30
From: LANAM at HP-HULK
Subject: search in emode
Class: Proposal

  I looked at the source to search.red in pe: and found that it does 
  a very dumb search algorithm.
  The search algorithm should be replaced with the kmp algorithm
  which can be found in most data structures/algorithm books.
  I have a version running in lisp (but not fully compatible with
  emode functions) which I can send.  The whole algorithm is
  about 20 lines of code.
  I also have a version in pascal which runs on my 9836 ( i debugged
  it on there when the hulk was down and moved it over.
  ----
  I am including the whole algorithm in lisp slightly commented.
  This version to work with emode needs to convert some or the list
  of characters and vectors of character to vectors of ints, and
  needs to ignore case (this version does not ignore case).
  This code has been checked and works.  I am using a variation of
  it in my program for my search through the history table.
  It runs much faster than the algorithm currently used in emode.
  If you wish to install it, I can help in debugging this part of
  the code and checking it works, if you can get someone else
  to interface it to the reset of emode and set up the correct
  accessing of emode data structures.
	  douglas
  -----
  %%
  %% Implemenation of Knuth_Morris_Pratt algorithm.
  %%
  %%
  %% p: input-pattern format vector of characters:
  %% 	'[a b c].
  %%
  %% output failure link vector to be used by emode_kmp_scan.
  %%
  (defun emode_kmp_flowchart_construction (p)
    (let ((m (size p)))
      (let ((*flink (mkvect (iplus2 1 m))))
	(iputv *flink 0 -1)
	(do ((i 1 (+ 1 i)))
	    ((> i m) *flink)
	  (do ((j (igetv *flink (- i 1)) (igetv *flink j)))
	      ((or (eq j -1) (eq (igetv p j) (igetv p (- i 1))))
	       (iputv *flink i (+ j 1))))))))

  %%
  %% p : input _string in vector format '[ a b c]
  %% m : upper bound of vector p (answer for above is 2).
  %% s : line of characters to be searched 
  %%     format list of characters: '(A b c d e . ..)
  %% *flink : failure link vector from emode_kmp_flowchart_construction.
  %%  
  %% returns t if succeed, nil if not found.
  %%
  (defun emode_kmp_scan (p m s *flink)
    (and s
	 (prog (j)
	   (setq j 0)
	   %%
	   %% if next character does not match use failure links
	   %% to back up and try again.
	   %%
	  loop (cond ((and (neq j -1) (neq (igetv p j) (car s)))
		      (setq j (igetv *flink j)) (go loop)))
	   %%
	   %% if you have matched the entire pattern => succeed.
	   %%
	   (and (= j m) (return t))
	   (or (setq j (+ 1 j) s (cdr s)) 
	       %% 
	       %% move pointer in line,
	       %%
	       %% if no more line, fail.
	       (return nil))
	   (go loop))))


Date: 12-Aug-82 11:06:18
From: LANAM at HP-HULK
Subject: GO inside AND
Class: Compiler deficiency

  The Psl compiler
	  does not allow a go inside an and clause inside a prog.
  ex:
  10 lisp> (defun xx () (prog () loop (and (go loop))))
  ***** (GO LOOP) INVALID GO
  XX

  Thus causing me to have to say 
  (cond (expression (go loop))) inside a prog
  when i want to say (and should be allowed to say):
  (and expression (go loop))
	  douglas

RESPONSE (Eric)

  This use of GO within AND is in violation of Standard Lisp.
  There isn't a good reason for this restriction and it should
  probably be removed from the compiler.  In the meantime, if you
  use (WHEN foo (GO xx)) instead of (AND foo (GO xx)), everything
  should be fine.  Use of OR in this fashion should be replaced by
  (UNLESS foo (GO xx)).

Date: 11 Aug 1982 0932-PDT
From: JOHNSON at HP-HULK
Subject: Documentation Bug
Class: Documentation Bug

  Section 5.1, paragraph 2 of <HP-PSL>HP-PSL.R contains the meaningless
  sentence: "Some of the <PSL> directories have no corresponding <PSL>
  directory."

Date: 10 Aug 1982 1620-PDT
From: Kendzierski at HP-HULK (Nancy)
Subject: REPEAT
Class: Horrid documentation bug

  The manual states that the REPEAT construct (section 9.3; page 9.7)
  is repeated until the value of the expression is NIL.

RESPONSE (Perdue):

  Actually, Nancy had quite a bit more to say, but the real problem
  is that the documentation for the LISP REPEAT is totally
  scrambled, though the RLISP documentation looks OK.  Syntax for
  repeat is really:

  (REPEAT <stmt> . . .  <condition>)

  The statements are executed until the condition becomes true.
  The condition is really and end-test.

Date: 10-Aug-82 13:28:27
From: LANAM at HP-HULK
Subject: word size
Class: Inquiry

  Is there a function which returns the word size (number of bits) that
  logical operations operate on, built into psl?

Date: 10-Aug-82 13:27:26
From: LANAM at HP-HULK
Subject: bug in print and lshift.
Class: Bug

  type the following to the top level of the psl interpreter on the 20.
  (lshift 2 34)

  You get an endless unstoppable output of hyphens.
  ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...
	  douglas

RESPONSE (Eric)

  See response above to Norman.

Date: 10-Aug-82 12:01:02
From: LANAM at HP-HULK
Subject: addresses
Class: Inquiry

  What function returns the address of a lisp object?
  What function takes an address (from above function) or some other int,
  and gives me the lisp object at that address?

RESPONSE (Eric)

  The first operation can be done but is probably not advisable.
  There is no defined function to do it from the interpreter, but
  the macro INF can be used in compiled code by LOADing SYSLISP.
  The second probably cannot be done, since the tag defines the type
  of an object and is not recoverable from the address.  (This may
  not be completely true, you can sometimes tell from the contents
  of the object).  Perhaps you could explain why you want to do this,
  there may be some more appropriate operation.

Date: 10-Aug-82 11:40:02
From: LANAM at HP-HULK
Subject: documentation of compiled in line functions.
Class: Suggestion

  They should be mentioned where their non compiled in line
  counterpart is.

RESPONSE (Perdue):

  The fast arithmetic procedures that are compiled in line turn out
  to be described in the section on SYSLISP, section 21.4 in
  particular.

Date: 10-Aug-82 11:37:05
From: LANAM at HP-HULK
Subject: (maxint) => ???
Class:  Inquiry

  Is there a function that return maxint and minint?
  also maxfloat, and minfloat?

RESPONSE (Eric)

  Currently none.  The Common Lisp definition says these are
  constant global variables (not exactly the same names, though).

Date: 10-Aug-82 10:31:26
From: LANAM at HP-HULK
Subject: bug in time with garbage collection
Class: Bug, deficiency

  When *time = t,
  the system should report cpu and garbage collection time seperately,
  not as one total number.
  Cpu time: 496 ms.  GC time: 2500 ms.
  not
  Time: 2996 ms.

  The current timing given is misleading.
	  douglas

RESPONSE (Eric)

  Currently GC time is not saved.  It would be pretty simple
  to do, just a matter of choosing how.  

Date:  9-Aug-82 11:03:03
From: LANAM at HP-HULK
Subject: Fast vector access
Class: Bug

  I got the message:
  (memory ($local y) (wconst 19)) not compiled 
  when I did:
  (defun xx (y) (do ((i 100 (sub1 i))) (eq i 0)) (igetv y 18)))

RESPONSE (Perdue):

  Looks like a bug.  Please use WGETV rather than igetv until we
  find out that igetv is for public consumption.  I think they will
  do the same thing anyway.

RESPONSE (Eric)

  This is not a bug!  See the comment above on "*** FOO not
  compiled".  If you want to have this compiled, you must do
  something with a side effect inside the loop.

Date:  9-Aug-82 09:08:11
From: LANAM at HP-HULK
Subject: fluid
Class: Inquiry, documentation deficiency

  (fluid '(abc)) will set the value of abc to nil.

  Why?  The documentation does not say that such a thing is done.
  It should leave abc as an unbound variable.
	  douglas

RESPONSE (Eric)

  This is in conformance with the Standard Lisp report.  If it is
  not described in the PSL manual it should be.

Date: 29 Jul 1982 17:39:24-PDT
From: Tony Hearn <HEARN at RAND-AI>
Subject: Strange REDUCE bug
Class: Bug

  If you do in REDUCE on the VAX:

  x := x+1;

  x;

  You SHOULD, I believe, get a "push down stack overflow" error. Instead,
  you go off into mystery (system seems to hang) and finally get an "illegal
  instruction" message and a core dump.

RESPONSE (Eric)

  Stack overflow on VAX Unix is not handled well by the operating
  system.  Franz Lisp has the same problem.  Perhaps 4.2BSD will
  do a better job.

Date: 26 Jul 1982 17:35:58-PDT
from: lseward at RAND-UNIX
Subject: PSL distribution files
Class: News

  I am listing off sources and have been straightening out the vax-comp and
  vax-interp files.  Suggestion: have subdirectories src, build, and bin
  and put the appropriate things in them.  Otherwise the statement (in the
  documentation) "This directories contains sources for ..." is very
  misleading.

  larry

Date: 13 Jul 1982 12:23:31-PDT
From: Galway@UTAH-20 at HP-Speech
Subject: break loop "feature"
Class: Comment, proposal

  The current break handler inherits the reader, evaluator, and printer from
  whatever the current TopLoop uses (if TopLoop is being used).  I suspect
  that this is a mistake, since it makes it awkward to deal with special
  "exotic" top loops.  It's already somewhat confusing that depending upon
  the circumstances you will either get a LISP reader, or and Rlisp reader.

  Think about how wonderful it would be if your reader only returned vectors
  to be "evaluated" by adding them up (say, for a desk calculator or
  something).

  I suggest that instead we only have one, or maybe two, break loops.
  Default would use LISP's READ/EVAL/PRINT.  And perhaps it should notice
  when Rlisp is in effect, and use its READ/EVAL/PRINT in that case.

  Comments?

RESPONSE (Eric)

  Definitely.  The break loop is all wrong.  Lets redo it.

Date: 25 Jun 1982 2106-PDT
From: LANAM
Subject: package proprosal
Class: Proposal

  I would like the system to remember the package definition name of a
  variable and functions in .b files so that I dont' get the system
  binding files which were compiled in package a but loaded in package
  b refering to package b functions when a package is not specified.
  Just binding everything to global would not work since then it would
  be a nuisance to have to always write out a local package name in a
  file on every function and variable.
  (This is a proposal to send along with any bug reports to martin).
	  douglas

RESPONSE (Eric)

  Packages are not fully integrated into the system.  This will
  probably have to wait for a redesign of PSL to include packages
  in the kernel.

Date: 6-Aug-82 14:09:27
From: LANAM at HP-HULK
Subject: bug with *time
Class: Bug

  If the first thing you say to psl is
  (setq *time t)

  you get back
  Time: 211392 ms  (or some such large number).

RESPONSE (Eric)

  True.

Date: 4 Aug 1982 01:36:20-PDT
From: daemon at HP-Speech
From: Tony Hearn <HEARN at RAND-AI>
Subject: PSL cannot read bignums correctly

  The source for the bigfloat package contains bignums. It does not seem
  to read or maybe compile correctly.

  Can PSL currently read bignums?

RESPONSE (Griss):

  PSL can read bignums with BIG loaded.  Without it, bignums will
  not be read correctly.  It is probably true that bignum
  constants cannot be compiled in either case.

RESPONSE (Eric)

  This has been fixed completely.

  Date: 27 Jul 1982 16:18:52-PDT
  From: Martin.Griss <Griss at UTAH-20>
  Subject: ExitTopLoop
  Class: Proposal

  Id like to add  and ExitTopLoop comand,
  eg !$exitTopLoop!$ as distinguided atom? Or some such,
  perhaps have on property list of atom and action function,
  ala Break, perhaps using toploop name as key?

  GET(InputValue,ModuleName,...).

Date: 27 Jul 1982 1058-PDT
From: BATALI
Subject: Easy file reading
Class: Complaint

  There ought to be an expr to read a file.
  The only way to do this now is something like:
  (eval `(dskin ,filename))
  I see no reason why dskin should not be an nexpr: virtually
  all present uses of it use string arguments so it wouldn't
  matter.

     L&C,
     John

RESPONSE (Eric)

  Definitely.  Let's make DSKIN an EXPR with ONE argument, since
  that's all it's used for 99.99...% of the time.  Incompatible
  with some existing code?

Date: 27 Jul 1982 16:19:23-PDT
From: Martin.Griss <Griss at UTAH-20>
Subject: VAX QUIT
Class: Proposal, response

  I think QUIT should have an associated function, FullStop or some such.
   (Or have 2 low level functions, QuitAndKeep, QuitAndKill), and let
  system admin choose which QUIT is which.

Date: 25 Jun 1982 1948-PDT
From: LANAM
Subject: VAX cntrl-d
Class: Bug

  Type cntrl-d (eof) as the first character, and the system will go into
  an endless loop.
	  douglas

Date: 26 Jul 1982 17:36:09-PDT
From: Eric Benson <BENSON at UTAH-20>
Subject: VAX QUIT
Class: Response, comment

  Perhaps it's a misfeature.  The alternative is to make (QUIT) irrevocable.
  Reading EOF will cause the PSL process to terminate, which allows the use
  of shell scripts and/or I/O redirection.  If you want to do that from the
  terminal, type one or more ^Ds.

Date: 26 Jul 1982 17:35:51-PDT
Subject:VAX QUIT
From: hearn at RAND-RELAY
Class: Comment, complaint

  When you do (quit) to psl, you get the message "stopped", and you have
  a job sitting there. My UNIX guys say this is a bug, and should be fixed.
  I know that you can restart the stopped job, but apart from that facility,
  the stopped job does get in the way every so often. Furthermore, when I
  try to do "time preduce", I can't get the timing info out.

RESPONSE (Eric)

  The function (EXITLISP) has been added to the VAX Unix version
  and should be in the next edition of the manual.  It calls the
  Unix subroutine exit(), which will kill off the process as you wish.

Date: 29 Jul 1982 1412-PDT
From: BATALI
Subject: Use of variables w. same name as functions
Class: Bug, comment, complaint

  The function:

  (defun or-list? (list predicate)
    (cond ((null list) nil)
	  ((funcall predicate (car list)) t)
	  (t (or-list? (cdr list) predicate))))

  Is T if any of the predicate applied to any of its elements is T.
  It works fine interpreted, but the compiler goes into an infinite loop
  printing:
  Functional form converted to (APPLY PREDICATE (LIST (CAR LIST)))

  Not a pretty sight.

    Ghastly,
     John

RESPONSE (Perdue):

  This bug is due to use of "list" as both a local variable and a
  function, and it occurs even though "list" is not explicitly used
  as a function here at all.  The problem is inherent in any LISP
  that allows variables in the "function position" and has both a
  variable and function binding cell for atoms.

RESPONSE (Eric)

  See previous comment.

Date: 6-Aug-82 10:31:49
From: LANAM at HP-HULK
Subject: structure of variable historylist*
Class: Inquiry, complaint

  why is the car of history an endless structure:
  (historylist* (historylist* (historylist* (historylist* ....

  the (caddr historylist*) is also this strange structure.
  isn't there a simplier structure that could be used?

	  douglas

RESPONSE (Eric)

  This only happens when you try to get the value of historylist*
  from the top loop!  Of course it becomes circular.  It's really
  just an a-list of inputs and outputs.

Date: 5-Aug-82 16:20:10
From: LANAM at HP-HULK
Subject: + and - as start of atom names.
Class: Request

  It would be nice if the scanner was changed such that if
  + and - are followed directly by an alphabetic character,
  (ex +a), then an atom is returned ( +a ), instead of
  two atoms (+ and a).
	  douglas

RESPONSE (Eric)

  Yes, it would be nice.  This will require a rewrite of the
  token scanner.  Perhaps we can get Lisp code from CMU for
  the Common Lisp token scanner.

Date: 5-Aug-82 16:05:15
From: LANAM at HP-HULK
Subject: (eval and macros)
Class: Inquiry, bug

  is there any reason the following should produce different results:

  (eval expression)
  and
  (eval (macroexpand expression))

  I have an example (a bit hairy and long), where the second is correct
  and the first gives a strange error message about trying to set the
  number 2.
  could someone spend some time to look at this to decide what may be
  the problem.
	  thanks,
		  douglas

Date: 5-Aug-82 15:37:32
From: LANAM at HP-HULK
Subject: can the sytem just break instead of halt when bps size is exceeded?
Class:  Inquiry, request

  Date: 5-Aug-82 15:23:44
  From: LANAM at HP-HULK
  Subject: what is bps?

  I got error ?
  fatal error : bps exhausted during faslout.  
  and the system aborted.
  what happened?

RESPONSE (Perdue):

  You ran out of space for compiled code.

  PSL provides no information about the sizes of spaces, so far as
  I know.  I'm very interested in this myself, and I don't even
  know the initial sizes of most of the spaces.  Binary program
  space is not reclaimed.  Maybe someday it will be.

RESPONSE (Eric)

  Yes, this will require a redesign of low-level storage allocation
  in PSL.

Date: 5-Aug-82 15:09:07
From: LANAM at HP-HULK
Subject: package system and faslout/faslin
Class: Comment, advice

  faslout/faslin known nothing about the package system, and will produce
  a file that can not be read in successfully, if that file references
  variables in packages.
  (usually you will get an operating system error (illegal instruction)).

  The manual's suggestion to rename functions in global is not a real
  solution, and suggests further that the package system is not really
  usuable in a real sense yet.

  This section of the system is not finished and I do not feel is in a 
  useful enough state to be advertised or included in the manual.
	  douglas

RESPONSE (Eric)

  Totally true!

Date: 5-Aug-82 13:05:17
From: Cris Perdue <Perdue>
Subject: Unwanted PSL messages
Class: Response

  To not get bothered about redefining system functions, set the
  global flag *usermode to NIL.  The flag *redefmsg determines whether
  you are told when functions are redefined.  There is currently
  no way to get a quiet dskin, except modifying the code or writing
  your own.

  I don't know if you can turn off the "*** blah already loaded"
  message.  There is no mechanism established for forcing the system
  to reload a library module unless you specify "pl:" as the location
  of the module.

RESPONSE (Eric)

  There is currently no way to turn off the *** ... already loaded
  message.  It mostly generates more heat than light, perhaps it
  should just be removed?

Date:  5 Aug 1982 1259-PDT
From: Cris Perdue <Perdue at HP-HULK>
Subject: Re: start up file.
Class: Response

  No, there is no "init file".  We have had several requests for that
  feature, so perhaps it can be added soon.

RESPONSE (Eric)

  Yes, init files would be nice.  They do require some system
  dependent primitives, especially the ability to find the home
  directory of a user.  Not a hard job, but the primitives should
  be specified before doing it.

Date: 5-Aug-82 08:31:23
From: LANAM at HP-HULK
Subject: tr bug
Class: Request

  tr shouldn't ask me how many arguments a compiled function takes.
  Why can't it just create a nexpr instead and not worry about the number
  of arguments?
  (sometimes I don't feel like looking up the answer to this question).

RESPONSE (Eric)

  Code blocks should include the number of arguments they expect
  so that this query needn't happen.

Date: 5-Aug-82 14:02:21
From: LANAM at HP-HULK
Subject: FASLOUT
Class: Bug, deficiency

  (faslout) during (faslout) should not be executed.
  (it currently is).
	  douglas

RESPONSE (Eric)

  Fixed.

Date: 3-Aug-82 15:22:56
From: LANAM at HP-HULK
Subject: bug with faslout/faslend.

  do
  (faslout "foo")
  then do something to cause an error, (any error or break will do).
  such as: 
  (eval-when (compile) (+ 'a 'b))
  {actually macros can cause errors, as can any eval-when construct}.
  If you do (faslend) in the break point, then (reset),
  the system will only echo your input after that.
  If you do (faslend) again,
  an error (illegal instruction) occurs, and psl will halt.

Date: 3-Aug-82 15:13:55
From: LANAM at HP-HULK
Subject: package/compiler/fasl bug
Class: Fatal bug

  With the following file (called a.lisp), do the following and you will get
  illegal instruction.
  (load package)
  (faslout "A")
  (dskin "a.lisp")
  (faslend)
  (faslin "a.b")

  file a.lisp:
  -----------

  (\load \package)
  (\setpackage '\global)

  (eval-when (compile)
    (createpackage  'franz 'global)
    (setpackage 	'franz))

  (createpackage  'franz 'global)
  (setpackage 	'franz)

  (eval-when (compile)
	  (localintern 'franz\xx))

  (de franz\xx (yy) yy)


Date: 2-Aug-82 15:43:38
From: BATALI at HP-HULK
Subject: TYPE function
Class: Request

  It would be just dreamy if there were a function TYPE, which
  returns an ID signifying the type of its argument:
  (type 'foo)  => ID
  (type 5)  => FIXNUM
  (type '(a b)) => PAIR
  Etc.

RESPONSE (Perdue):

  Yes, probably named TYPEP, as in Common LISP.  See similar
  requests made very early.

Date: Fri Jul 30 14:04:39 1982
From: John Tupper (hp-pcd)
Subject: TR
Class: Bug

  Vax psl bug:
	  When the debug package is loaded, the normal trace functions
  don't work correctly.
	  After loading the debug stuff, (UNTR) does not restore the original
  definition of the function. (TR) works fine, and (UNTR) will cause tracing
  to halt; it just doesn't restore the original definition.

			  maddog


RESPONSE (Eric)

  The "standard" PSL TR function is very poor.  The 20 and Vax
  systems should be changed to autoload DEBUG instead of using
  this brain-damaged version.

Date: 30-Jul-82 15:41:22
From: Alan Snyder <AS at HP-HULK>
Subject: EMODE cursor movement
Class: Bug

  EMODE (on the HP2648 at least) fails to check for attempts to move the
  cursor off the right edge of the screen.  For example, if you type in
  a line that is longer than the screen width, the cursor will move to
  the next line and occasionally random stuff will come out (parts of
  escape sequences, it looks like).

Date: Fri Jul 30 11:40:05 1982
From: tw cook (hp-pcd)
Subject: testing 'bug' function - ignore
Class: News

  I have implemented the 'bug' function in our PSL - it just fires up
  'mail' to PSL, which forwards both to PSL at labs and to the notesgroup
  LISPERS here.  Those of you at hplabs who are listening - does stuff
  mailed to PSL@HULK get eventually sent on to Griss & crew?  Should I
  mail to them as well?  If so, how do I get there (via mail)?

  Thanks,
  tw

Date:    30 Jul 1982 11:28-PDT (Friday)
From:    Ching-Chao.Liu <hp-pcd!ching>
Subject: FUnboundP
Class: Manual bug

  On page 10.4 of psl manual, the description of FUnBoundP is incorrect.
  It should be 

     Tests whether there is a definition in the function cell of U;
     returns NIL if there is a definition, T if not.

Date: 27-Jul-82 16:38:49
From: LANAM at HP-HULK
Subject: break package
Class: Comment

  In a break package, if I have a variable i (or q, c, r, m, or e), and
  want to print its value, i need to do 
  (eval 'i)

RESPONSE (Eric)

  Yes, it's clumsy.  Break loop needs reworking (actually starting
  over).  See other previous comments.

  From: Alan Snyder <AS at HP-HULK>
  Subject: PSL bug
  Class: Deficiency

  The ContError macro is not very robust.  For example, consider
  the following expansion (admittedly, the argument is improper):

  (MacroExpand '(ContError 0 "" file-name file-name))
    ==>
  (CONTINUABLEERROR 0 (BLDMSG "" FILE-NAME) (LIST '#<Unknown:261740000002>))

  Naturally, this form will cause the garbage collector to barf.

  When the compiler is given this sort of stuff, it produces the
  following lovely code:

  ------------------------------------------------------------
  Compiling TEST
  Source Code:
  (LAMBDA (FILE-NAME) (TEST1 (CONTERROR 0 "s" FILE-NAME FILE-NAME)))
  ------------------------------------------------------------
  Expanded Source Code:
  (LAMBDA (FILE-NAME)
     (TEST1
	(CONTINUABLEERROR
	   0
	   (BLDMSG "s" FILE-NAME)
	   (LIST '#<Unknown:254000006725>))))
  ------------------------------------------------------------
  Object Code:
  (*ENTRY TEST EXPR 1)
  (*ALLOC 1)
  (*MOVE (REG 1) (REG 2))
  (*MOVE '"s" (REG 1))
  (*LINK BLDMSG EXPR 2)
  (*MOVE (REG 1) (FRAME 1))
  (*MOVE '#<Unknown:254000006725> (REG 1))
  (*LINK NCONS EXPR 1)
  (*MOVE (REG 1) (REG 3))
  (*MOVE (FRAME 1) (REG 2))
  (*MOVE '0 (REG 1))
  (*LINK CONTINUABLEERROR EXPR 3)
  (*LINKE 1 TEST1 EXPR 1)

  L0003L0004		(FULLWORD 0)
		  (STRING "s")
		  (*ENTRY TEST EXPR 1)
		  (ADJSP (REG ST) 1)
		  (MOVE (REG 2) (REG 1))
		  (MOVE (REG 1) "L0001")
		  (PUSHJ (REG ST) (ENTRY BLDMSG))
		  (MOVEM (REG 1) (INDEXED (REG ST) 0))
		  (MOVE (REG 1) "L0002")
		  (PUSHJ (REG ST) (ENTRY NCONS))
		  (MOVE (REG 3) (REG 1))
		  (MOVE (REG 2) (INDEXED (REG ST) 0))
		  (SETZM (REG 1))
		  (PUSHJ (REG ST) (ENTRY CONTINUABLEERROR))
		  (ADJSP (REG ST) -1)
		  (JRST (ENTRY TEST1))
  L0002		(FULLWORD (MKITEM 10 "L0003"))
  L0001		(FULLWORD (MKITEM 4 "L0004"))
  *** Function `TEST' has been redefined
  *** (TEST): base 374744, length 17 words
  ------------------------------------------------------------

  There is no warning message of any kind.  However, when
  the compiled code is loaded and executed, it will also
  create bad data that the garbage collector will barf on.

RESPONSE (Eric)

  Fixed.  See BUG-FIX.LOG

Date: 27 Jul 1982 1638-PDT
From: LANAM at HP-HULK
Subject: break package problem
Class: Deficiency

  In a break package, if I have a variable i (or q, c, r, m, or e), and
  want to print its value, i need to do 
  (eval 'i)

RESPONSE (Eric):

  Same as above.

Date: 27 Jul 1982 1629-PDT
From: LANAM at HP-HULK
Subject: string "123" => 123  conversion function needed?
Class: Inquiry

  Is there a function that will convert "123" into the number 123,
  or "12.4e2" into the number "12.4e2" ?

RESPONSE (Eric):

  A read-from-string function should be implemented.  It should
  be quite easy.

Date: 27 Jul 1982 1439-PDT
From: LANAM at HP-HULK
Subject: br
Class: Inquiry

  If i use br, How do I continue from a break level.
  I tried every letter given by ?. 
  'R' gave an error, something about nil undefined.
  'c' did something similar.
  'q' went to top level.
	  douglas

RESPONSE (Eric)

  BR has never worked right.  It should be removed along with
  TR in MINI-TRACE

Date: 27 Jul 1982 1433-PDT
From: LANAM at HP-HULK
Subject: untr
Class: Deficiency

  untr does untrace a function, but unlike the manual says, it does
  not restore the original definition.  It leaves a strange lisp function
  around which is similar to the function when it is traced.  It would
  be nice if the functions definition was restored to its original place.

RESPONSE (Eric)

  Yes, UNTR in DEBUG doesn't remove the tracing function, it just
  suppresses the tracing.  The function to resore it to its
  original state is RESTR, as described in the manual in section
  16.10.

Date: Mon Jul 26 15:10:41 1982
In-real-life: Tw Cook
Subject: psl bug?
Class: Bug

  In the Vax version:

  If you run (help emode) [or any long help] then do a control-C to try and
  interrupt it, you get thrown into a break loop which I have not been able
  to exit from.  Is this an error in the help code, rather than
  in psl itself?

RESPONSE (Eric)

  The interrupt handler on the VAX has some strange behavior I have
  not been able to track down.

Date: 26 Jul 1982 1520-PDT
From: LANAM at HP-HULK
Subject: bad feature : read macros on property list.
Class: Deficiency

  By having the function associated with read macros stored on the property list,
  there is an inability to have different read macros in different read tables,
  for the same character.
	  douglas

RESPONSE (Eric)

  True.  The whole input/output subsystem is very poor, for which
  there's no one to blame but me.  See previous comments about the
  token scanner.

Date: 26 Jul 1982 1155-PDT
From: Alan Snyder <AS>
Subject: EMODE bug
Class: Bug

  EMODE believes that ^Z marks the end of a text file.

RESPONSE (Eric)

  PSL uses a character as the EOF marker, which happens to be
  ^Z on the Dec-20.  Any file with a ^Z in it will not be read
  correctly.

Date: 24 Jul 1982 1044-PDT
From: LANAM at HP-HULK
Subject: scanner read bug with numbers.
Class: Bug

  45 lisp> 1.000000000000000000000000000000000000000000000000000
  0.0
  46 lisp> 1.222222222222222222222222222222222222222222222222222222
  1.7682604E33
  47 lisp> 100000000000000000000000000000000000000000000000
  0
  48 lisp> 2222222222222222222222222222222
  2386092942
  49 lisp> 1000000000000000000000
  25209864192
  50 lisp> 1000000000000
  3567587328

	  douglas

  FIXED (Benson):

  Actually, just a crude patch that should improve things.

Date: 24 Jul 1982 1043-PDT
From: LANAM at HP-HULK
Subject: can prettyprint do better than this with the following please?
Class: Request

  (DEF
     FRANZ\FACT
     (EXPR LAMBDA (N) (COND ((EQ N 0) 1) (T (* N (FRANZ\FACT (!- N 1)))) )))

  I would like the cond split up into 2 lines (one per clause).


Date: 23 Jul 1982 1738-PDT
From: LANAM at HP-HULK
Subject: apply on macros.
Class: inquiry

  Is there an apply that works on any function (whether the function is a
  macro or not), and acts the same whether the function was written as 
  a macro or an expr or a fexpr?  This would be very useful (especially
  with the number of basic functions written as macros in psl).


RESPONSE (Eric)

  The function you want is EVAL, not APPLY.  APPLY is meant to
  be a primitive operation which does no evaluation.

Date: 23 Jul 1982 1718-PDT
From: LANAM at HP-HULK
Subject: how easy is it to redefine the psl reader?
Class: inquiry

  Is there a table describing the automaton?  Or is it hardwired in?
  Is the table accessable in lisp and changable?  This would be very
  useful.


RESPONSE (Eric)

  It is hardwired in.  See previous comments on the token scanner.

Date: 23 Jul 1982 1715-PDT
From: LANAM at HP-HULK
Subject: identifiers starting with numbers
Class: request

  I would like the system to read an atom like 1+ as the atom |1+|, not
  the number 1 and the atom +.   How can I teach the system to handle this?
  1a would be an atom. 1 a would be the number 1 followed by the atom a.
  I need this feature to handle a franz conversion since a basic franz function
  is 1+ and 1-.
	  douglas


RESPONSE (Eric)

  Likewise.

Date: 23 Jul 1982 1657-PDT
From: LANAM at HP-HULK
Subject: identifier bug.
Class: Deficiency

  Characters and identifiers should be separate entities.
  The character c and the identifier c are not the same
  thing.  Currently in the system, it is possible to
  intern a single character-name identifier into a package,
  but it is impossible to type its name back in.
  (setpackage 'franz)
  (localintern 'a)
  => franz\a
  (Setq franz\a 3) will set global\a
  (set (localintern 'a) 3) will set franz\a.
  franz\a is interpreted as global\a.

  I should be able to have my franz\a.
	  douglas


RESPONSE (Eric)

  Single character identifiers are treated very specially in PSL.
  Since packages are not integrated, they cannot be interned in
  packages other than GLOBAL.

Date: 21 Jul 1982 16:48:33-PDT
From: hearn@RAND-RELAY at HP-Speech
Subject: Readch()
Class: Inquiry, Bug

  Readch does not do case conversion, irrespective of the setting of *raise.
  If *raise is on, shouldn't lower case be converted to upper case?

RESPONSE:

    Date: 21 Jul 1982 16:48:40-PDT
    From: BENSON@UTAH-20 at HP-Speech
    Subject: Re: Question on readch()

    I've changed the source for ReadCh so that it does case
    conversion on *Raise.  This bit of Standard Lisp compatibility
    seems to have slipped through the cracks until now.  I guess
    ReadCh just isn't used that much.

Date: 21 Jul 1982 1549-PDT
From: Alan Snyder <AS at HP-HULK>
Subject: UnBoundP
Class: Documentation deficiency

  The function UnBoundP should be described (or mentioned)
  in the chapter on Identifiers.

Date: 21 Jul 1982 1422-PDT
From: Alan Snyder <AS>
Subject: DEFSTRUCT
Class: Deficiency

  Using DEFSTRUCT (from NSTRUCT) causes the PSL compiler
  to produce "function redefined" messages.  As far as
  the user is concerned, these messages are spurious
  and should be suppressed.

Date: 21 Jul 1982 1253-PDT
From: Alan Snyder <AS>
Subject: "Constant" list structure
Class: Deficiency, comment

  PSL allows a program to modify "constant" list structure that
  has been created by the compiler in the code space.  Since
  this "constant" list structure is not scanned by the garbage
  collector, any pointers inserted into it will not be updated
  when garbage collection occurs, and will henceforth point
  to randomness.  PSL should use the address protection provided
  by the hardware to prevent modification of "constant"
  list structure.

RESPONSE (Benson):

  It is incorrect to modify list structure constants.  They are placed
  in code space on the VAX when a dumplisp is done.

Date: 21 Jul 1982 1127-PDT
From: Alan Snyder <AS>
Subject: Unhandled THROW
Class: Deficiency, documentation bug

  The manual (section 9.4) says that an unhandled THROW is treated
  as an ERROR in the context of the THROW.  In fact, what happens
  is that PSL is restarted at top-level.  I would prefer that it
  behave as the manual describes.

RESPONSE (Eric)

  It's very hard to fix with the current implementation of CATCH.

Date: 16 Jul 1982 0244-PDT
From: BATALI
Subject: Compiler bug
Class: Bug

  Here is an interesting function:

  (de c3 () (cond ((= 3 3) 'yes) (t (= 3 3))))

  Interpreted:
  (c3)
  YES

  Compiled:
  (c3)
  T

  Obviously the compiler is doing something grossly clever, obviously it
  is doing it wrong.

       --John

Date: 16 Jul 1982 0237-PDT
From: BATALI
Subject: Compiler bug
Class: Bug, deficiency

  The compiler doesn't enforce the restrictions on the placement of
  RETURN statements. (See pages 9.4 and 9.5 of the manual.)

  This function gets an error if interpreted, but returns its argument
  when compiled:

  (de just-return (arg) (return arg))

  Actually, the compiler ought to complain about this one.

       --John

Date: 16 Jul 1982 0149-PDT
From: BATALI
Subject: RPLACHAR (String package)
Class: Bug, compiler bug

  The function RPLACHAR stores a character into a string.  It works fine
  in interpreted code, but when called from a compiled function, we get:

  ***** Undefined function STRINF called from compiled code

  Looking on the property list of RPLACHAR, we notice a CMACRO property
  whose value is:

  (LAMBDA (S I X) (PUTSTRBYT (STRINF S) I X))

  Which seems to be where the call to STRINF comes from.

  Giving RPLACHAR a CMACRO property of nil "fixes" the problem.

       --John

RESPONSE (Eric)

  Fixed.

Date: 15 Jul 1982 1258-PDT
From: Alan Snyder <AS>
Subject: EMODE C-M-B
Class: Bug, comment

  C-M-B (backwards s-expr) loses if the corresponding left paren
  is the first character in the buffer: it leaves the cursor
  to the right of the paren.  There is explicit code that
  makes this adjustment, and this code is marked in the source
  as being a "KLUDGE!".  I don't know why this kludge is there.

Date: 14 Jul 1982 1404-PDT
From: Alan Snyder <AS>
Subject: STRING< (String package)
Class: Bug

  The function STRING< in STRINGS.LSP has the interesting property
  that both of the following forms evaluate to NIL:

    (string< "b" "aa")
    (string< "aa" "b")

  This anomoly results from the improper testing of string length
  in the function.  The other string comparison functions seem
  to have the same bug.

     [This seems to have been fixed.]

Date: 14 Jul 1982 0759-PDT
From: Alan Snyder <AS>
Subject: EMODE bug
Class: Bug

  I fixed a bug in REFRESH.RED: ClearWindow() previously
  failed to clear the associated virtual screen, causing
  the old contents to later reappear in place of empty
  lines.

Date: 13 Jul 1982 1739-PDT
From: Cris Perdue <Perdue at HP-HULK>
Subject: FIND module
Class: Documentation deficiency

  The "find" module is not loaded in bare PSL, but the documentation
  does not mention the fact.

Date: 13 Jul 1982 1144-PDT
From: Alan Snyder <AS>
Subject: FindPrefix, FindSuffix -- request
Class: Request

  FindPrefix and FindSuffix should convert their string argument
  to upper case.

Date: 13 Jul 1982 1140-PDT
From: Alan Snyder <AS>
Subject: PrettyPrint
Class: Request

  For direct use by a human, it would be better if PRETTYPRINT returned
  NIL, instead of its argument.  That way, the user doesn't have to
  see the same object printed twice by the Read/Eval/Print loop.

Date: 13 Jul 1982 1120-PDT
From: LANAM
Subject: Interning with the package system
Class: Inquiry

  How can I get the package-specifier prefix in a string and concat it
  with other strings, and then intern it.
  I tried, and the package-specifier prefix character got an escape
  character inserted before it.

RESPONSE (Benson):

  Can't be done.

Date: 13 Jul 1982 1114-PDT
From: Alan Snyder <AS>
Subject: COND
Class: Deficiency

  COND behaves differently in some cases depending upon whether
  it is interpreted or compiled.  An example is provided by
  the following function:

    (de foo (a) (cond ((= a 3) 4) a))

  If interpreted, FOO will return the parameter A unless A is 3.
  If compiled, FOO will return NIL in those same cases.
  The compiled code is shown below:

  ------------------------------------------------------------
  Compiling FOO
  Source:
  (LAMBDA (A) (COND ((= A 3) 4) A))
  ------------------------------------------------------------
  Object:
  (*ENTRY FOO EXPR 1)
  (*ALLOC 0)
  (*JUMPNOTEQ (LABEL G0004) (REG 1) '3)
  (*MOVE '4 (REG 1))
  (*EXIT 0)
  (*LBL (LABEL G0004))
  (*MOVE 'NIL (REG 1))
  (*MOVE 'NIL (REG 1))
  (*EXIT 0)
  *** Function `FOO' has been redefined
  *** (FOO): base 334750, length 7 words
  ------------------------------------------------------------

Date: 13 Jul 1982 1056-PDT
From: Alan Snyder <AS>
Subject: ErrorSet
Class: Deficiency

  ErrorSet is currently implemented as an EXPR.  This fact has the subtle,
  yet critical effect that the form enclosed in the error set can only
  use fluid variables.  If you don't declare the variables fluid, the
  code will work interpretively, but will execute incorrectly when compiled.
  No warning is given by the compiler, nor is there any hint in the manual
  that this problem exists.

  Note: the file directory.sl that we sent to Utah fails when compiled for
  this reason.  I suggest you send a message to Will about this.

RESPONSE (Eric)

  Yes, this is also true of CATCH.  I have implemented *CATCH which
  is a special form and open-compiles.  It will be easy to define
  ERRSET as a macro or special form now.

Date: 13 Jul 1982 1045-PDT
From: BATALI
Subject: Readmacros
Class: Deficiency, comment

  I've been experimenting with read macros in PSL.  None of the
  advertised functions for creating them exist, but the following
  works: 

  (defmacro define-read-macro (table id fname)
    `(progn
      (put ',id 'lispreadmacro ',fname)
      (putv ,table (id2int ',id) 11)   ;; delimiter
      ',id))

  This does what PutReadMacro is supposed to do (but it doesn't evaluate
  the id or the fname).

  Note how this seems to work: If the reader (actually, the function
  ChannelReadTokenWithHooks) sees a character with code 11 in the
  scantable, it looks for the LISPREADMACRO property on the id
  corresponding to the character.  If there is one there, it applys it
  in place of ChannelReadTokenWithHooks to the input channel.

  This would be fine and not very interesting and I certainly wouldn't
  be sending you this long message if it weren't for the fact that this
  scheme means you can't "bind" a scantable and expect different
  behaviour from characters.  This is because, although the scantable
  can be bound, the system still looks for the LISPREADMACRO property of
  the id.  So it is not possible for a character to have different
  properties on different scantables. Thus:

  (define-read-macro somerandomscantable* !( ChannelTotallyTrashSystem)

  Would lose no matter which scan table is currently in effect.

  We need the ability to pair characters with functions in particular
  scantables only.  It is very likely that the PSL people understand
  this, and indeed, the relevant sections of the manual (pp 13.10 - 13.11
  and 13.18) seem to claim that this is what ought to go on.

       --John

RESPONSE (Eric)

  This was reported earlier (actually later because this is in
  reverse chronological order).

Date: 13 Jul 1982 1030-PDT
From: BATALI
Subject: Unwind-Protect
Class: Suggestion

  Here is the code for unwind-protect.
  It has the same semantics as the lisp-machine version
  (except in interpreted code that happens to use the 
  variable unwind-protect-value).  The only problem is
  the problem with catch being an EXPR.

  (defmacro unwind-protect (protected-form . undo-forms)
    `(let ((unwind-protect-value (catch nil ',protected-form)))
       (progn . ,undo-forms)
       (if throwsignal!*
	   (throw throwtag!* unwind-protect-value)
	   unwind-protect-value)))

Date: 12 Jul 1982 1836-PDT
From: BATALI
Subject: Dipthongs
Class: Inquiry, documentation deficiency

  What are dipthongs?  Why are they neat?
  How do I use them?
  Why aren't they documented?

Date: 12 Jul 1982 1145-PDT
From: Cris Perdue <Perdue at HP-HULK>
Subject: EMODE terminal handling
Class: Deficiency

  EMODE does not use the terminal driver that corresponds to TOPS-20's
  idea of what the terminal type is.  It just uses whatever terminal
  driver is loaded (HP2648A in our case).

Date: 12 Jul 1982 1102-PDT
From: Johnson
Subject: PSL String Package
Class: Request, remark

  A routine to convert from STRING to INTEGER would be nice.

  The SUBSTRING function is peculiar:  its last argument is
  one greater than the index of the last character to be
  extracted, even given that indexes begin at zero!

Date:  9 Jul 1982 1456-PDT
From: Alan Snyder <AS>
Subject: PSL internal bug
Class: Bug

  The following example demonstrates a bug in PSL.  It is the shortest example I
  could find, derived from a real attempt at compiling a file.  The offending
  object is a machine instruction, the exact identity of which changes with
  different programs.  In this case, it is "CAMN 0(17)".  The example is highly
  sensitive to change.  For instance, if the function name is changed to "FOO",
  no error is reported.  Similarly, no error is reported if any of the loaded
  modules are omitted.

  -------------------------------------------------------------------------------
  @psl:bare-psl
  PSL 3.0, 9-Jun-82 
  1 lisp> (load emode common jsys)
  NIL
  2 lisp> (faslout "nul:")
  FASLOUT: (DSKIN files) or type in expressions
  When all done execute (FASLEND)
  T
  3 lisp> (de fooo (name)
  3 lisp>   (let ((n (string-length name)))
  3 lisp>     (cond ((= (indx name (- n 1)) (char >))
  3 lisp>            (concat name "*.*.*"))
  3 lisp> 	  name)))
  FOOO4 lisp> (faslend)

  *** Init code length is 1
  **FASL**INITCODE**NIL
  5 lisp> (reclaim)
  ***** Fatal error during garbage collection
  Illegal item in heap at 502462
  -------------------------------------------------------------------------------

Date:    30 Jul 1982 11:27-PDT (Friday)
From:    John.Tupper <hp-pcd!maddog>
Subject: bug report

  I have found a bug in the vax version of the psl zpedit.
  When I add something to the end of an s-expression [with the n command]
  the editor changes the old last expression to nil.

  start:
  (LIST (CAR X) (CDR Y))
  execute:
  (N (BOGUS BO GUS))
  finish:
  (LIST (CAR X) NIL (BOGUS BO GUS))

  The same thing happens with the bo command.

  start:
  (LIST (CAR X) (CDR Y))
  execute:
  bo 3
  finish:
  (LIST (CAR X) NIL)

				  icky-poo,
				  maddog

Date:  9 Jul 1982 0948-PDT
From: SOREFF at HP-THOR
Subject: Structure editor "A" command
Class: Bug

  I've constructed an example of how the "(a s-expression)" command in the
  structure editor can fail. It seems to fail when one is adding an item after
  the last expression in a list. I've edited the log slightly, removing blank
  lines to make it more compact.
  @take psl
  PSL 3.0, 9-Jun-82 
  1 lisp> (load zpedit)
  NIL
  2 lisp> (setq a '(b c d e f g))
  (B C D E F G)
  3 lisp> (editv a)
  EDIT
  -E- p
  (B C D E F G)
  -E- 3 p
  D
  -E- (a z) 0 p
  (B C D (Z) E F G)
  -E- 7 p (a y) 0 p
  G
  (B C D (Z) E F NIL (Y))
  -E- pp
  (B C D (Z) E F NIL (Y))
  -E- 8 p
  (Y)
  -E- (a x)
  -E- p
  ... NIL (X))
  -E- ^
  -E- p
  (B C D (Z) E F NIL NIL (X))
  -E- ok
  A
  4 lisp> (quit)

Date:  9 Jul 1982 0938-PDT
From: Alan Snyder <AS>
Subject: DOLIST
Class: Bug

  DOLIST (in PU:COMMON.SL) fails to bind the loop variable.

Date:  8 Jul 1982 1447-PDT
From: Alan Snyder <AS>
Subject: EMODE C-M-B
Class: Bug, deficiency

  EMODE C-M-B (backward sexpr) gets excessively confused by comments.
  For example, when at the end of the following text

     (setq a b)
     %%%%%%%%%%

  C-M-B will stop at the "b".
  (Probably other commands have similar problems.)
  I think the reason for this is that '%' (the comment character)
  is ignored by scan-word by not by skip-blanks.
  Thus in the implementation of C-M-B, skip-blanks skips back
  to the '%', and then skip-word skips back to the 'b'.
  The probable fix would be to change the scan table.

Date:  7 Jul 1982 1651-PDT
From: SOREFF at HP-THOR
Subject: Structure editor "N" command
Class: Bug

  I think I've run into a bug in the PSL structure editor. The "N" command,
  which appears to be supposed to append an s-expression on the end of the
  current list, does that, but also changes the expression just before the
  added one to NIL. 
  @login guest 
   Job 5 on TTY152 7-Jul-82  4:41PM
   Previous LOGIN: 7-Jul-82  4:40PM
  @take <psl>logical-names
  @r <psl>bare-psl
  PSL 3.0, 9-Jun-82 
  1 lisp> (load zpede^F^Fit)
  ***** `ZPED^FIT' load module not found {99}
  Break loop
  2 lisp break>> q
  3 lisp> (load zpedit)
  NIL
  4 lisp> (setq tst '(a b c d e f g))
  (A B C D E F G)
  5 lisp> (editv tst)

  EDIT


  -E- p

  (A B C D E F G)

  -E- (-3 z) p

  (A B Z C D E F G)

  -E- (n x) p

  (A B Z C D E F NIL X)

  -E- ok
  TST
  6 lisp> (quit)

Date:  7 Jul 1982 0929-PDT
From: Alan Snyder <AS>
Subject: NTH and PNTH
Class: Bug

  The function NTH produces obscure error messages if the
  index argument is out of range.  The error messages are
  obscure because (1) they refer to the function PNTH,
  which the user should have no need to know about, and
  (2) they report an index which is different than the
  value given in the call to NTH.

    [8/4/82 - This has been fixed.]

  A similar comment applies to PNTH: the error message
  reports an incorrect index value.

    [8/4/82 - This hasn't.]

Date:  7 Jul 1982 0852-PDT
From: Cris Perdue <Perdue at HP-HULK>
Subject: IN and EVIN
Class: Documentation deficiency, bug

  IN and EVIN, available from RLISP, are not defined as functions.
  IN even has an entry in the manual, though there is no description
  of what it does (page 31.12).  These should be available from LISP.

Date:  6 Jul 1982 1212-PDT
From: Cris Perdue <Perdue at HP-HULK>
Subject: RDS, WRS
Class: Complaint

  RDS and WRS are virtually guaranteed to cause lossage concerning
  I/O channels, especially since there is no UNWIND-PROTECT in PSL.

Date:  6 Jul 1982 1209-PDT
From: Cris Perdue <Perdue at HP-HULK>
Subject: Debugging
Class: Deficiency

  There are various deficiencies concerned with debugging.

  There is no genuine backtrace that uses the saved variable bindings,
  even for interpreted code.

  The error handling system is so portable that it evidently cannot
  use the DEC-20 APR trap mechanism, etc..

  It is difficult to set up an interpreted version of a subsystem that
  is usually compiled.  (This is a separate issue from the capabilities
  of the system internals.)  In particular, facilities for requiring
  certain files to be present when a procedure is loaded for interpretive
  execution don't exist.  Also functions for loading interpreted and
  compiled code are distinct, not to mention the additional distinct
  function for loading "system" files (files in pl:).

Date:  6 Jul 1982 1041-PDT
From: Johnson
Subject: DSKIN
Class: Inquiry

  (DskIn "foo.lsp") prints the values of all the forms evaluated in
  foo.lsp.  Is there a silent version of DskIn?

RESPONSE (Benson):

  Yes:  LAPIN.

Date:  2 Jul 1982 2335-PDT
From: Cris Perdue <Perdue at HP-HULK>
Subject: DEC-20 REENTER and CONTINUE
To: psl at HP-HULK

  On the DEC-20, ^C followed by REENTER or CONTINUE screws up
  badly for some reason.  I would think they would just not
  be available commands.

Date:  2 Jul 1982 2334-PDT
From: Cris Perdue <Perdue at HP-HULK>
Subject: Debugger user interface
Class: Bug

  The "break loop" does not establish echoing as it is entered.

Date:  2 Jul 1982 2329-PDT
From: Cris Perdue <Perdue at HP-HULK>
Subject: FINDPREFIX and FINDSUFFIX
Class: Documentation deficiency, bug

  These are not loaded with the USEFUL library and there whereabouts
  is not documented in the manual, though they themselves are.
  They appear in pu:find.red.

Date:  1 Jul 1982 1406-PDT
From: Kendzierski (Nancy)
Subject: CRLF variable
Class: Bug, documentation bug

  The manual (page 20.2, section 20.3.1 "TOPS-20 User Level
  Interface") states that "a global variable, CRLF, is provided
  with the <CR><LF> string.  Attempts to use this global variable
  result in a CRLF is an unbound id {99} message from psl.

RESPONSE (Benson):

  Loading the EXEC module defines CRLF.

Date: 30 Jun 1982 1057-PDT
From: Cris Perdue <Perdue at HP-HULK>
Subject: "FLAGS"
Class: Inquiry, deficiency

  In Chapter 12 of the manual the RLISP "On" and "Off" constructs are
  discussed briefly.  It appears that LISP users should not just
  set the corresponding global variables, because On and Off may
  have additional side effects.  If this is true, there should be
  some easy way of doing On and Off in LISP.

Date: 28 Jun 1982 1746-PDT
From: Cris Perdue <Perdue at HP-HULK>
Subject: C-M-rubout in EMODE
Class: Bug

  Sometimes (always?) goes into an infinite loop.

Date: 28 Jun 1982 1714-PDT
From: Kendzierski (Nancy)
Subject: PSL logical names
Class: Inquiry

  How come p20d: as <psl.20-dist> isn't defined in the
  <psl>logical-names.cmd file?  It is listed in the manual on page
  22.2.

Date: 6/23/82
From: Kendzierski
Subject: !*SAVENAMES
Where: Page 16.18
Class: Inquiry

  Why is !*SAVENAMES initially NIL?

Date: 6/23/82
From: Kendzierski
Subject: RCRef
Where: Page 18.3
Class: Inquiry

  Is RCRef only available in RLisp?  Why? or How is it used in
  Lisp?
From: Kendzierski

Date: 6/23/82
Subject: !*LOSE
Where: Page 16.18
Class: Documentation deficiency

  !*LOSE -- what is this?  It's constantly referred to, but never
  defined/explained

Date: 6/23/82
From: Kendzierski
Subject: #+
Where: Page 18.3
Class: Inquiry

  Why doesn't #+ accept three arguments?  Because the third is
  optional?

Date: 6/23/82
From: Kendzierski
Subject: ANYREG
Class: Inquiry

  If the most common adjust function removes ANYREG to eliminate
  looking for it in patterns, why have it?

Date: 6/11/82
From: AS
Subject: I/O channels
Class: improvement, section 13.1, page 13.1

  Why is a channel an integer instead of something more abstact?
  If you allow I/O to strings and lists, then why limit the maximum
  number of channels?

Date: 6/11/82
From: AS
Re: improvement, section 13.2, page 13.3

  Using global variables to initialize channel functions when a
  channel is OPENed is poor.  It would be better to define a
  separate OPEN-SPECIAL that takes additional arguments, or use a
  keyword init list a la Zetalisp.  Similar comments about misuse
  of global variables apply elsewhere, e.g.  DUMPLISP.

Date: 6/11/82
From: AS
Re: manual, section 13.6, page 13.13

  PRINTF is an expr that takes a variable number of arguments.  If
  this is possible then you should explain how users can do it.

Date: 6/11/82
From: AS
Subject: LISP vs. RLISP syntax
Class: Inquiry, bug
Where: manual, section 16.5, page 16.13

  Can EMBEDding be done using Lisp syntax?  If so, how?  Can STUBs
  be defined using Lisp syntax?  If so, how?

Date: 6/11/82
From: AS
Subject: EDITF
Class:  Bug, inquiry
Where: manual, section 17.5, page 17.11

  I was not able to achieve any effect by giving extra command
  arguments to EDITF.  In any case, COMS:forms is not a defined
  type; it should be either [COMS:form] or COMS:form-list.

Date: 6/11/82
From: AS
Subject:  FIELD, GETFIELD
Class: Documentation deficiency
Re: manual, section 21.2.8, page 21.7

  Is the field accessing function FIELD or GETFIELD?  Both names
  are used in the manual.  Neither name is defined in our PSL.

Date: 6/25/82
From: Filman
Subject: READ, Interactive input
Class: Feature request

  It would be very nice to have some way of telling PSL to consider
  all open parens to be closed, like right square bracket ("]") in
  some LISPs.

  It would also be nice not to get an error message whenever one
  types excess right parentheses.

Date: 6/25
From: Perdue, Griss, AS
Subject:  Common-LISP compatibility library
Class: Documentation bug

  The Common-LISP compatibility library has been split into 2
  parts:  a compatible part which redefines no PSL functions, and
  an incompatible part that does.  The incompatible part is
  PL:CLCOMP.

Date: 18 Jun 1982
From: SOREFF at HP-THOR
Subject: Module loaded test

  Is there any predicate which checks to see if an atom is the name
  of a load module which has been loaded?

RESPONSE (Perdue):

  No, but it is currently the practice to use the expression
  "(memq <atom> options*)" to determine this.

Date: 18 Jun 1982 1424-PDT
From: Cris Perdue <Perdue at HP-HULK>
Subject: Char macro

  The char macro is not well documented and the use of <Ctrl-G> is
  almost certainly not correct.

Date: 18 Jun 1982 1425-PDT
From: Cris Perdue <Perdue at HP-HULK>
Subject: PLAP: logical name
Class: Distribution of PSL

  The name PLAP: is used in the full-restore.ctl file, but is not
  a standard logical name.  It should be PL: instead.

RESPONSE (Griss):

  The file full-restore.ctl is not documented, wasn't intended for
  distribution.  Something will be done to make things consistent.

Date: 18 Jun 1982 1429-PDT
From: Cris Perdue <Perdue at HP-HULK>
Subject: Batch control files
Class: Distribution of PSL

  The batch control files use the standard logical names.  For
  this to work properly, users who rebuild PSL should have a
  BATCH.CMD file that TAKEs the logical-names command file.  This
  approach is cleaner than having mentions of the actual name of
  the PSL directory, if not others, in each batch control file.

Date: 18 Jun 1982 1431-PDT
From: Cris Perdue <Perdue at HP-HULK>
Subject: Building new directories
Class: Documentation bug

  The DEC-20 release notes suggest the use of the standard logical
  names as arguments to the TOPS-20 BUILD command.  Our version of
  BUILD does not accept a logical name for the building of a NEW
  directory (it's OK for old ones, although that feature may be
  a local addition to the code).

Date: 6/16/82
From: Alan Snyder <AS>
Subject: PSL compiler bug; RETURN
Class: Bug

  I have discovered what appears to be a bug in the PSL compiler.
  When you use (RETURN) with no argument, the compiler generates
  a "call" to the function NIL, which is undefined.  The interpreter
  has no problem.  For example:

  16 June 1982                 Alan Snyder
  ----------------------------------------
  Compiling TEST
  Source:
  (LAMBDA NIL
     (PROG NIL
	(RETURN))
     3)
  ----------------------------------------
  Object:
  (*ENTRY TEST EXPR 0)
  (*ALLOC 0)
  (*LINK NIL EXPR 0)
  (*MOVE '3 (REG 1))
  (*EXIT 0)
  *** Function `TEST' has been redefined
  *** (TEST): base 326164, length 3 words
  ----------------------------------------
RESPONSE (csp):

  Definitely a bug.  Not hard to fix, the solution awaits a
  decision about just what error checking there should be on
  RETURN.

RESPONSE (Benson):

  The compiler now gives a warning message.

  From: Lanam
  Subject: Packages
  Class: Bugs, Information

  Doug uncovered the following:

  The current package is never changed as a module is loaded.
  This means that if one changes the current package, it should be
  reset as soon as possible.  Some functions are "autoloaded".  Be
  aware of this when changing the current package.

Date: 5/27
From: Lanam
Class: Bug

  asin (n) where n > 1 or n < -1 gives the error
  that REDERR is an undefined function.

Date: 5/27
From: Lanam
Class: Deficiency

  I can not find any method of general type checking or
  type coersion.

Date: 5/27
From: Lanam
Class: Bug

  (close) with no arguments says nil is an undefined
  function.

Date: 5/27
From: Lanam
Class: Note

  (car nil) and (cdr nil) is illegal.  I would prefer
  (car nil) => nil and (cdr nil) => nil.

Date: 5/27
From: Lanam
Subject: Reader
Class: Bug

  Typing an extra ")"  to the top level interpreter
  gives you an error message.  It would be nicer if it was just
  ignored.

Date: 5/27
From: Lanam
Subject:  Getd, Putd
Class: Comment

  It would be nice if (putd new-function-name (getd old-function
  name)) worked.  At present the best I can see is

  (let ((x (getd ..)))
    (putd new (car x) (cdr x)))

Date: 5/27
From: Lanam
Subject: Lexprs
Class: Feature request

  Need a package that allows lexpr and (arg n) inside
  lexprs.

Date: 5/27
From: Lanam
Subject: Defun
Class: Deficiency

  Defun in common lisp compatibility only handles
  exprs, not macros, or fexprs.

Date: 5/27
From: Lanam
Subject: Function/special definition
Class: Bug

  Cannot have the names of fexprs or macros or nexprs,
  be the name of a special variable also.

Date: 5/27
From: Lanam
Subject: Char function
Class: Documentation bug

  There are two char functions described in the manual.  The one
  mentioned as being loaded with the Common-LISP strings package is
  not loaded in with the strings package.

Date: 5/24
From: Goldstein
Subject: Argument checking
Class: Clarification

  Is it the case that PSL does not check for functions that receive
  the wrong number of arguments?  Is it able to do so (for
  interpretive & for compiled code)?  It would be nice if it had
  such an error checking mode.

Date: 5/24
From: Goldstein
Subject: Section 8.7
Class: Documentation deficiency

  The arguments to the string functions are not defined.

Date: 5/24
From: Goldstein
Subject: Globals, fluids; Section 10.4
Class: Bug, Documentation bug

  The manual claims that global variables cannot be rebound.
  However, no error occured for: ((lambda (throwtag*) 1) 1) which
  rebinds this global??

Date: 5/24
From: Goldstein
Subject: Closures, Section 10.3.1
Class: Question

  What is the timetable for implementing closures.  Altbind is
  unavailable at our site.

Date: 5/24
From: Goldstein
Subject: Global variables; Section 12.2

  The description of the globals is frequently missing or too
  cryptic.

Date: 5/24
From: Goldstein
Subject: Lisp Rlisp compatibility
Class: Deficiency

  If RLISP is only a parser for Lisp, then there should be
  functions: On, Off, In, Out. Why don't these functions exist.
  Ditto for <=, >=, etc.

RESPONSE (Griss, as told to Perdue):

  This situation is basically historical.  The problems with On,
  Off, In, Out, etc. are due to the RLISP preprocessor doing some
  semantics as well as parsing.  It is gradually being cleaned up.

Date: 5/23
From: Goldstein
Subject: Definition of Equal, sec 4.2
Class: Documentation deficiency

  Comment about open-compiling that begins "... Otherwise, ..." is
  confusing.  The text says that "This is not true of EQ and Eqn".
  What is not true.  EQ is supposed to be open-compiled as well.

Date: 5/23
From: Goldstein
Subject: Definition of EqCar, sec 4.2
Class: Deficiency, Inquiry

  EqCar(U,V) does not complain if (Car U) is illegal, e.g. (EQCAR
  "ab" V).  (1) Does the definition check, or is some random thing
  happening; and (2) should it report an error if (CAR U) is
  illegal.

RESPONSE (Perdue):

  1) The definition checks that U is pairp.
  2) It evidently should not report an error if U is not pairp.

Date: 5/23
From: Goldstein
Subject: Definition of Null, sec 4.2
Class: Manual, Inquiry

  Is it reasonable to place documentation of Null in 4.2.2, Is Null
  a predicate for testing Type of an Object?

Date: 5/23
From: Goldstein
Subject: Definition of Intern and NewId, sec 4.2
Class: Manual deficiency

  Interning a newId does not lose NewId's property list, if no previous
  ID with this print name has been interned, e.g.
	  (setq x (newId "ABC")) %No atom with this print name exists.
	  (put x 'prop 'val)
	  (intern x)
	  (get 'ABC 'prop) --> val
  Manual could be clearer in this regard.

Date: 5/23
From: Goldstein
Subject: Arithmetic functions
Class: Manual, Inconsistency

  MACRO rather than NEXPR is used for the multi-argument functions
  like PLUS.  What is the rationale for this.

Date: 5/23
From: Goldstein
Subject:  Help function
Class: Inconsistency

  (help top-loop) and (help toploop) are not the same.  The former
  just prints the file.  The latter executes a function that prints
  the file, then prints the current bindings of the reader,
  printer, etc.  This might be confusing to a novice user.
  Perhaps, the file should be toploop.hlp (without the - sign).

Date: 5/22
From: Goldstein
Subject: Backtrace
Class: Improvement

  It would be nice if BACKTRACE did not print the functions that it
  itself put on the stack, since they are artifacts of its use and
  not relevant to debugging.

Date: 5/22
From: Goldstein
Subject: EMODE
Class: Improvement

  (1) bind backspace to the rubout handler.

  (2) Commands like read and write file should use the default file
  associated with the current buffer.

  (3) Auto save and Auto fill are two important additions.

  (4) Write should say that the file was written.

Date: 5/22
From: Goldstein
Subject: HELP function
Class: Improvement

  It would be nice if the HELP function also informed the user of
  some dynamic properties, e.g. HELP <module> should let the user
  know if the module is loaded.

Date: 5/22
From: Goldstein
Subject: HELP function
Class: Documentation deficiency

  (HELP) states that a certain set of help files are available.  In
  fact, there is a larger set corresponding to thse described in
  the manual.

Date: 5/22
From: Goldstein
Subject: EMACS function
Class: Bug

  (EMACS) tries to run <EDITORS>EMACS.EXE.  The HP HULK has no
  directory <EDITORS>.

Date: 5/22
From: Goldstein
Subject: MMFORK variable
Class: Consistency

  The manual describes the convention that globals have the suffix
  !*.  But, the MM command uses the variable MMFORK with no suffix.

Date: 5/22
From: Goldstein
Subject: HELP function
Class: Bug

  In RLISP mode, HELP FOR; losses because the parser 
  attempts to parse FOR unless FOR appears in quotes.

Date: 5/22
From: Goldstein
Subject:  External, Internal, Exported; section 21.2
Class: Documentation bug

  In the example, EXPORTED ... appears, but it is not documented in
  the preceding text.  Only external, internal are documented.

Date: 5/22
From: Goldstein
Subject: SYSLISP; p21.3
Class: Documentation deficiency

  The manual does not explain how to reformulate a LISP function
  into a SYSLISP function when in LISP mode, i.e. is there a some
  kind of reformulator that converts calls to plus to calls to
  wplus2.

Date: 5/22
From: Goldstein
Subject: *TIME variable
Class: Bug

  Executing (setq !*Time T) causes an error which caused system to
  begin prompting with line number 1.  This only happened the first
  time, and did not repeat when !*Time was toggled.  Repeatable in
  a fresh PSL.  Does not occur in RLISP mode, only in LISP mode.

Date: 5/8
From: Goldstein
Subject: How to make a dribble file
Class: Inquiry

  It appears that PSL cannot write to two channels at the same
  time, thus preventing a dribble file.

RESPONSE (Griss):

  Redefine PRINT functions to write to two channels or define your
  own special channel with a writechannel function that writes to
  two other channels.

Date: 5/8
From: Goldstein
Subject: TOPS-20, DOCMDS, CMDS
Class: Documentation deficiency, Bug

  These functions do not seemed to be defined.

RESPONSE (Griss):

  Help file erroneously mentions exec0.  Exec, MM and EMACS are
  autoloading.  The rest are obtained by LOAD EXEC;.

Date: 5/8
From: Goldstein
Subject: Prettyprinting
Class: Inquiry

  Is there a prettyprinter?

RESPONSE (Griss):

  Yes, the function Prettyprint.

Date: 5/8
From: Goldstein
Subject: PPF
Class: Bugs

  Debug module has the function PPF which apparently pretty
  prints in RLISP format.  PPF tries to print according to
  the currently loaded parser.  Unfortunately, it detects whats
  loaded by looking for the function RPRINT, which is autoloading.

  Also, ppf and plist lose when the fn or plist is not defined.

RESPONSE (Griss):

  True.

Date: 5/8
From: Goldstein
Subject: Interrupt characters
Class: Documentation deficiency

  There don't seem to be any interrupt characters, e.g.  control-g
  to return to toplevel.  (An interrupt package is mentioned, but
  not cited as complete.).

RESPONSE (Griss):

  Interrupts exist (Load Interrupt), but not documented.

Date: 5/8
From: Goldstein
Subject: LAPOUT, LAPEND
Class: Obsolete, Inquiry

  The functions LAPOUT, and LAPEND do not seem to exist.  Possibly
  a renaming has taken place since the 18 January manual.

RESPONSE (Griss):

  FASLOUT and FASLEND are the correct functions.

Date: 5/8
From: Goldstein
Subject: Saving a PSL
Class: Inquiry, obsolete

  I tried SAVESYSTEM, followed by the TOPS-20 SAVE command.
  However, when I tried to run the resulting .exe file, I got the
  complaint "No starting address".  How is a PSL saved and
  restarted.  (Manual, p.14.1)

RESPONSE (Griss):

  The file on the tape is still incorrect.  Patch needed to handle
  tops 20 release.

  RESOLUTION:

  Apparently fixed.

Date: 5/8
From: Goldstein
Subject: HELP
Class: Documentation bug, documentation deficiency

  The manual claims that HELP of no arguments prints a message.  It
  works in Lisp mode as (HELP) and in RLISP mode as HELP; but
  HELP(); loses??

RESPONSE (Griss):

  help() still loses.  help mini-editor requires ! before -.

Date: 5/8
From: Goldstein
Subject: Rubout handler
Class: Inquiry

  The Rubout handler is line-oriented, and apparently one cannot
  rubout accross cr's.  Is this true?

RESPONSE (Griss):

  Yes.

Date: 5/8
From: Goldstein
Subject: PSL memory usage
Class: Inquiry

  What is the size of various PSL spaces.

Date: 5/8
From: Goldstein
Subject: PSL memory usage
Class: Feature request

  One would like an INQUIR function that prints out PSL memory
  usage statistics.

Date: 5/8
From: Goldstein
Subject: HELP facility
Class: Documentation bug; Bug

  Note that some help files are incorrect; eg HELP editor refers to
  minieditor, not mini-editor
