105 lines
3.4 KiB
Scheme
105 lines
3.4 KiB
Scheme
|
;;;
|
|||
|
;;; Copyright (c) 1985 Massachusetts Institute of Technology
|
|||
|
;;;
|
|||
|
;;; This material was developed by the Scheme project at the
|
|||
|
;;; Massachusetts Institute of Technology, Department of
|
|||
|
;;; Electrical Engineering and Computer Science. Permission to
|
|||
|
;;; copy this software, to redistribute it, and to use it for any
|
|||
|
;;; purpose is granted, subject to the following restrictions and
|
|||
|
;;; understandings.
|
|||
|
;;;
|
|||
|
;;; 1. Any copy made of this software must include this copyright
|
|||
|
;;; notice in full.
|
|||
|
;;;
|
|||
|
;;; 2. Users of this software agree to make their best efforts (a)
|
|||
|
;;; to return to the MIT Scheme project any improvements or
|
|||
|
;;; extensions that they make, so that these may be included in
|
|||
|
;;; future releases; and (b) to inform MIT of noteworthy uses of
|
|||
|
;;; this software.
|
|||
|
;;;
|
|||
|
;;; 3. All materials developed as a consequence of the use of
|
|||
|
;;; this software shall duly acknowledge such use, in accordance
|
|||
|
;;; with the usual standards of acknowledging credit in academic
|
|||
|
;;; research.
|
|||
|
;;;
|
|||
|
;;; 4. MIT has made no warrantee or representation that the
|
|||
|
;;; operation of this software will be error-free, and MIT is
|
|||
|
;;; under no obligation to provide any services, by way of
|
|||
|
;;; maintenance, update, or otherwise.
|
|||
|
;;;
|
|||
|
;;; 5. In conjunction with products arising from the use of this
|
|||
|
;;; material, there shall be no use of the name of the
|
|||
|
;;; Massachusetts Institute of Technology nor of any adaptation
|
|||
|
;;; thereof in any advertising, promotional, or sales literature
|
|||
|
;;; without prior written consent from MIT in each case.
|
|||
|
;;;
|
|||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|||
|
;;;
|
|||
|
;;; Modified by Texas Instruments Inc 8/15/85
|
|||
|
;;;
|
|||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|||
|
|
|||
|
;;;; Command Argument Reader
|
|||
|
|
|||
|
;; Public
|
|||
|
(define (with-command-argument-reader thunk)
|
|||
|
(fluid-let ((*magnitude* '())
|
|||
|
(*negative?* '())
|
|||
|
(*multiplier-exponent* '())
|
|||
|
(*autoargument-mode?* '()))
|
|||
|
(thunk)))
|
|||
|
|
|||
|
;; Public
|
|||
|
(define (reset-command-argument-reader!)
|
|||
|
;; Call this at the beginning of a command cycle.
|
|||
|
(set-fluid! *magnitude* #!FALSE)
|
|||
|
(set-fluid! *negative?* #!FALSE)
|
|||
|
(set-fluid! *multiplier-exponent* 0)
|
|||
|
(set-fluid! *autoargument-mode?* #!FALSE))
|
|||
|
|
|||
|
;; Public
|
|||
|
(define (command-argument-prompt)
|
|||
|
(let ((prefix (if (autoargument-mode?) "Autoarg" "Arg"))
|
|||
|
(value (command-argument-value)))
|
|||
|
(cond (value (string-append prefix " " (obj->string value)))
|
|||
|
((command-argument-negative?) (string-append prefix " -"))
|
|||
|
(else ""))))
|
|||
|
|
|||
|
;; Public
|
|||
|
(define (command-argument-negative?)
|
|||
|
(fluid *negative?*))
|
|||
|
|
|||
|
;; Public
|
|||
|
(define (command-argument-value)
|
|||
|
;; This returns the numeric value of the argument, or #!FALSE if none.
|
|||
|
(let ((m (command-argument-magnitude))
|
|||
|
(s (command-argument-multiplier-exponent)))
|
|||
|
(and (or m (not (zero? s)))
|
|||
|
((if (command-argument-negative?) - identity-procedure)
|
|||
|
(* (or m 1)
|
|||
|
(integer-expt (command-argument-multiplier-base) s))))))
|
|||
|
|
|||
|
;; Public
|
|||
|
(define (command-argument-magnitude)
|
|||
|
(fluid *magnitude*))
|
|||
|
|
|||
|
;; Public
|
|||
|
(define (command-argument-multiplier-exponent)
|
|||
|
(fluid *multiplier-exponent*))
|
|||
|
|
|||
|
;; Public
|
|||
|
(define (command-argument-multiplier-base)
|
|||
|
*multiplier-base*)
|
|||
|
|
|||
|
;; Public
|
|||
|
(define (autoargument-mode?)
|
|||
|
(fluid *autoargument-mode?*))
|
|||
|
|
|||
|
;;;; Value
|
|||
|
(define integer-expt
|
|||
|
(lambda (b e)
|
|||
|
(if (zero? e)
|
|||
|
1
|
|||
|
(* b (integer-expt b (sub1 e))))))
|
|||
|
|
|||
|
|