(FILECREATED "26-JUL-78 20:49:25" <LISPUSERS>LISPUSERSHELP.;14 3815   


     changes to:  LISPUSERSHELP

     previous date: "10-JUL-78 16:05:59" <LISPUSERS>LISPUSERSHELP.;13
)


(PRETTYCOMPRINT LISPUSERSHELPCOMS)

(RPAQQ LISPUSERSHELPCOMS ((FNS LISPUSERSHELP DO?)
			  (VARS ?CHARS)
			  (P (LOAD? (QUOTE <LISPUSERS>WHOIS.COM)
				    LDFLG))
			  (LOCALVARS . T)))
(DEFINEQ

(LISPUSERSHELP
  (LAMBDA (X)                           (* lmm "26-JUL-78 20:37")
    (PROG (VAL DOC)
          (MAPC (WHEREIS X (QUOTE FNS)
			 T)
		(FUNCTION (LAMBDA (FL)
		    (AND (SETQ DOC (INFILEP (PACK* "<LISPUSERS>" FL 
						   ".TTY")))
			 (SETQ VAL (OR (WHOIS X DOC)
				       VAL))))))
          (RETURN VAL))))

(DO?
  (LAMBDA (FILE RDTBL LST)              (* lmm " 7-APR-78 01:24")
    (PROG (C TAIL FORM FN TEM LN)
          (SETQ C (PEEKC FILE))
          (COND
	    ((NULL (AND (EQ FILE T)
			(FMEMB C ?CHARS)
			(SETQ TAIL
			  (COND
			    ((AND (READLINEP)
				  (SETQ LN LINE)
				  LISPXFLG
				  (OR (EQ (INREADMACROP)
					  1)
				      (NOT (CAR LST))))

          (* Says you are arguments to a functio in apply format, and 
	  either at top level (the inreadmacrop) or one level down but 
	  havent typed a functionname, e.g. typing FOO 
	  (A B (? -
	  would tell you about FOO)))


			      (SETQ FORM (CONS (SETQ FN (CAR LINE))
					       (CAR LST)))
                                        (* For ?= purposes.)
			      LINE)
			    (T (SETQ FORM (CAR LST)))))))
                                        (* False alarm.)
	      (RETURN (TCONC LST
			     (COND
			       ((OR (SYNTAXP (SETQ C (CHCON1 C))
					     (QUOTE SEPR)
					     RDTBL)
				    (SYNTAXP C (QUOTE BREAK)
					     RDTBL))
                                        (* would have been separated 
					anyway.)
				 (QUOTE ?))
			       (T (PACK (LIST (QUOTE ?)
					      (READ FILE RDTBL))))))))
	    ((EQ C (QUOTE %
))
	      (AND
		(XNLSETQ
		  (SETQ TEM
		    (COND
		      ((AND (NEQ LAST? (SETQ LAST? (CAR TAIL)))
			    LST
			    (CDR FORM)
			    (FNCHECK (CAR FORM)
				     T NIL T TAIL))

          (* User typed ? after supplying some arguments, so only give 
	  him info about that argument.)


			(HELPSYS (LENGTH FORM)
				 (QUOTE ARGS)
				 (CAR FORM)
				 (QUOTE FD)))
		      (T (OR (HELPSYS (CAR TAIL)
				      (AND (FNTYP (CAR TAIL))
					   (QUOTE FD)))
			     (LISPUSERSHELP (CAR TAIL))))))
		  NOBREAK)
		(NULL TEM)
		(PRIN1 (QUOTE "unavailable subject.
")
		       T)))
	    ((AND (EQ (SETQ TEM (READ FILE RDTBL))
		      (QUOTE =))
		  (EQ (PEEKC FILE)
		      (QUOTE %
)))
	      (ERSETQ (PROGN (DO?= TAIL FORM)
			     (TERPRI FILE))))
	    ((AND (EQ (NTHCHAR TEM 1)
		      (QUOTE ^))
		  (EQ (PEEKC FILE)
		      (QUOTE %
)))
	      (ERSETQ (APPLY* (FUNCTION PF)
			      (CAR FORM)
			      (AND (IGREATERP (NCHARS TEM)
					      1)
				   (MKATOM (SUBSTRING TEM 2 -1))))))
	    (T (RETURN (TCONC LST (PACK (LIST (QUOTE ?)
					      TEM))))))
          (AND (CDDR LST)
	       (FRPLACD LST (FLAST LST)))
                                        (* remove the ?)
          (TERPRI T)
          (AND FN (PRIN2 FN T T))
          (AND LN (MAPRINT (CDR LN)
			   T " " " " NIL (FUNCTION (LAMBDA (X)
			       (PRIN2 X T T)))))
          (AND LST (MAPRINT (CAR LST)
			    T "(" " " NIL (FUNCTION (LAMBDA (X)
				(PRIN2 X T T)))))
                                        (* tell the user where he is)
          (RETURN LST))))
)

(RPAQQ ?CHARS (%
 = ^))
(LOAD? (QUOTE <LISPUSERS>WHOIS.COM)
       LDFLG)
(DECLARE: DOEVAL@COMPILE DONTCOPY

(LOCALVARS . T)
)
(DECLARE: DONTCOPY
  (FILEMAP (NIL (392 3650 (LISPUSERSHELP 404 . 746) (DO? 750 . 3647)))))
STOP
