home *** CD-ROM | disk | FTP | other *** search
- ;;; -*- Mode: Lisp; Package: Maxima; Syntax: Common-Lisp; Base: 10 -*- ;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; The data in this file contains enhancments. ;;;;;
- ;;; ;;;;;
- ;;; Copyright (c) 1984,1987 by William Schelter,University of Texas ;;;;;
- ;;; All rights reserved ;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (in-package "MAXIMA")
- ;; Maclisp compatibility definitions for the Lisp Machine. This file
- ;; is for Lisp differences only. No knowledge of Macsyma should be
- ;; contained in this file.
-
- ;; Translated code still uses this.
- (DEFQUOTE includef ( FILENAME) FILENAME)
-
- ;; Couldn't this copy to some static area?
- (DEFMACRO PURCOPY (X) X)
-
- (DEFMACRO CHARPOS (IGNOR)ignor '(CDR (CURSORPOS)))
- (DEFMACRO MAXIMA-SLEEP (SECONDS) `(PROCESS-SLEEP (FIX (f* ,SECONDS 60.))))
-
- (DEFUN LINEL (&OPTIONAL STREAM)
- #+lispm
- (FUNCALL (SI:DECODE-PRINT-ARG STREAM) ':SIZE-IN-CHARACTERS)
- #-lispm stream
- #-lispm 80
- )
-
- ;; Perhaps this should do something.
- (DEFMACRO NOINTERRUPT (IGNOR)ignor NIL)
-
- (DEFMACRO WITHOUT-TTY-INTERRUPTS (&REST FORM)
- `(LET (#+lispm (TV:KBD-INTERCEPTED-CHARACTERS NIL))
- ,@ FORM))
-
- (DEFMACRO FIXNUM-IDENTITY (X) X)
- (DEFMACRO FLONUM-IDENTITY (X) X)
-
- (proclaim '(inline *quo *dif))
- #+cl
- (DEFun *QUO (X Y)
- (cond ((and (integerp x) (integerp y))
- (truncate x y))
- (t (/ X Y))))
- #+cl
- (DEFun *DIF (X Y) (- X Y))
-
-
- ;; Keep the compiler quiet.
- ;; Use GET-PNAME or FORMAT instead of EXPLODE, EXPLODEN, EXPLODEC.
- ;; Use AREF instead of GETCHAR and GETCHARN.
- ;; Use MAKE-SYMBOL instead of MAKNAM.
- ;; Use INTERN instead of IMPLODE.
- ;; Use STRING-LESSP instead of ALPHALESSP.
- #+lispm
- (progn
- (REMPROP 'EXPLODE 'COMPILER:STYLE-CHECKER)
- (REMPROP 'EXPLODEC 'COMPILER:STYLE-CHECKER)
- (REMPROP 'EXPLODEN 'COMPILER:STYLE-CHECKER)
- (REMPROP 'ALPHALESSP 'COMPILER:STYLE-CHECKER)
- (REMPROP 'GETCHARN 'COMPILER:STYLE-CHECKER)
- (REMPROP 'GETCHAR 'COMPILER:STYLE-CHECKER)
- (REMPROP 'IMPLODE 'COMPILER:STYLE-CHECKER)
- (REMPROP 'MAKNAM 'COMPILER:STYLE-CHECKER)
- )
-
- (DEFMACRO SFA-CALL (STREAM OPERATION ARG)
- `(FUNCALL ,STREAM (READ-FROM-STRING (STRING-APPEND #\: ,OPERATION)) ,ARG))
-
- ;; Things that appear within DECLARE bodies.
-
- ;; Why doesn't this work?
- ;; Because of the brain-damaged way the lispm compiler is written. -gjc
- ;; (PUTPROP 'DECLARE '(DECLARE-OPTIMIZER) 'COMPILER:OPTIMIZERS)
- ;;
- ;; (DEFUN DECLARE-OPTIMIZER (DECLARE-FORM &AUX (RETURN-FORM NIL))
- ;; (DO ((L (REVERSE (CDR DECLARE-FORM)) (CDR L)))
- ;; ((NULL L))
- ;; (IF (NOT (MEMQ (CAAR L)
- ;; '(FIXNUM FLONUM NOTYPE MACROS ARRAY* GENPREFIX
- ;; CLOSED MUZZLED MAPEX SPLITFILE)))
- ;; (PUSH (CAR L) RETURN-FORM)))
- ;; (IF RETURN-FORM (CONS 'DECLARE RETURN-FORM) NIL))
-
- ;; These are in global, so avoid redefinition warning by using FDEFINE
- ;; rather than DEFun.
-
- ;(FDEFINE (kw FLONUM) #'(LAMBDA ( &REST IGNOR)ignor NIL))
- ;(FDEFINE (kw FIXNUM) #'(LAMBDA ("E &REST IGNOR)ignor NIL))
- ;(FDEFINE 'ARGS #'(LAMBDA ("E &REST IGNOR)ignor NIL))
-
- (DEFMACRO ARGS (&REST IGNOR)ignor NIL)
-
- #-cl
- (progn
- (DEFMACRO FLONUM (&REST IGNOR)ignor NIL)
- (DEFMACRO FIXNUM (&REST IGNOR)ignor NIL)
- (DEFMACRO MACROS ( &REST IGNOR)ignor NIL)
- (DEFMACRO CLOSED ( &REST IGNOR)ignor NIL)
- (DEFMACRO NOTYPE ( &REST IGNOR)ignor NIL)
- (DEFMACRO ARRAY* ( &REST IGNOR)ignor NIL)
- (DEFMACRO GENPREFIX ( &REST IGNOR)ignor NIL)
- (DEFMACRO MUZZLED ( &REST IGNOR)ignor NIL)
- (DEFMACRO MAPEX ( &REST IGNOR)ignor NIL)
- (DEFMACRO SPLITFILE ( &REST IGNOR)ignor NIL)
- (DEFMACRO EXPR-HASH ( &REST IGNOR)ignor NIL)
- )
- ;; Run time stuff
-
- (DEFUN SYMBOLCONC (&REST SYMS)
- (INTERN (APPLY #'concatenate 'string
- (MAPCAR #'(LAMBDA (SYM)
- (COND ((FLOATP SYM)
- (FORMAT NIL "~S" SYM))
- ((INTEGERP SYM)
- (FORMAT NIL "~D" SYM))
- ((symbolp sym)
- (symbol-name sym))
- (T SYM)))
- SYMS))))
-
- ;(DEFUN QUOTED-ARGS ("E &REST L)
- ; (MAPCAR #'(LAMBDA (X) (PUTPROP X '((1005 (FEF-ARG-OPT FEF-QT-QT))) 'ARGDESC))
- ; L))
-
-
-
- (DEFMACRO QUOTE-ARGS ( &REST L)
- `(QUOTED-ARGS-AUX ',L))
- (DEFUN QUOTED-ARGS-AUX (L)
- (MAPCAR #'(LAMBDA (X) (PUTPROP X '((1005 (FEF-ARG-OPT FEF-QT-QT))) 'ARGDESC))
- L))
-
-
- #+cl
- (PROGN 'COMPILE
-
- ;;; On the 3600, STORE isn't implemented. So, implement enough of
- ;;; it here to satisfy the cases the Macsyma uses. I have yet to find
- ;;; it using complicated side effects of the array reference -- it's either
- ;;; a (STORE (ARRAYCALL ...) ...) or a (STORE (FUNCALL ...) ...) or else
- ;;; a (STORE (array-called-as-function ...) ...). So, assume that if the CAR
- ;;; of the first form isn't ARRAYCALL or FUNCALL, then it's a STORE of the third
- ;;; form.
-
- (DEFUN STORE-MACRO-HELPER (ARRAY-REF NEW-VALUE)
- ;;this is redundant and should be caught by store but a bug in compiler..
- (cond ((or (eql (car array-ref) 'aref))(equal (car array-ref) '(function aref))
- `(setf (aref ,@ (cdr array-ref)) ,new-value))
- (t
- (CASE (LENGTH ARRAY-REF)
- (2 `(STORE-INTERNAL-1D ,@ARRAY-REF ,NEW-VALUE))
- (3 `(STORE-INTERNAL-2D ,@ARRAY-REF ,NEW-VALUE))
- (OTHERWISE (ERROR "Cannot expand STORE for array reference ~S" ARRAY-REF))))))
-
-
-
- (DEFMACRO STORE (ARRAY-REF NEW-VALUE &aux expand-1 )
- (cond ((not (memq (car array-ref ) '(aref arraycall)))
- (setq expand-1 (macroexpand-1 array-ref))
- (setq array-ref
- (cond ((memq (car expand-1 ) '(aref arraycall))
- expand-1)
- (t (macroexpand array-ref))))))
-
- (CASE (FIRST ARRAY-REF)
- (FUNCALL (STORE-MACRO-HELPER (CDR ARRAY-REF) NEW-VALUE))
- ; (ARRAYCALL (STORE-MACRO-HELPER (CDDR ARRAY-REF) NEW-VALUE))
- ;;the arrays ought to all be on in the symbol location by now --wfs
- (ARRAYCALL `(setf ,array-ref ,new-value))
- (aref `(setf ,array-ref ,new-value))
- (OTHERWISE (STORE-MACRO-HELPER `(#',(FIRST ARRAY-REF) . ,(CDR ARRAY-REF)) NEW-VALUE))))
-
-
- (DEFUN STORE-INTERNAL-1D (ARRAY-SPEC INDEX NEW-VALUE)
- (SLOOP UNTIL (ARRAYP ARRAY-SPEC)
- DO (COND ((SYMBOLP ARRAY-SPEC) (SETQ ARRAY-SPEC (SYMBOL-ARRAY ARRAY-SPEC)))
- (T (ERROR "STORE failed -- can't find array for ~S" ARRAY-SPEC))))
- (SETF (AREF ARRAY-SPEC INDEX) NEW-VALUE))
-
- (DEFUN STORE-INTERNAL-2D (ARRAY-SPEC I1 I2 NEW-VALUE)
- (SLOOP UNTIL (ARRAYP ARRAY-SPEC)
- DO (COND ((SYMBOLP ARRAY-SPEC) (SETQ ARRAY-SPEC (SYMBOL-ARRAY ARRAY-SPEC)))
- (T (ERROR "STORE failed -- can't find array for ~S" ARRAY-SPEC))))
- (SETF (AREF ARRAY-SPEC I1 I2) NEW-VALUE))
-
- ) ;End PROGN 'COMPILE
-
-
-
-
-