pcs/scpsdemo.s

135 lines
3.2 KiB
ArmAsm
Raw Normal View History

2023-05-20 05:57:04 -04:00
;
; This is an example of using SCOOPS. Please refer to chapter 5 in the
; Language Reference Manual for TI Scheme.
;
; The first thing that needs to be done is to define classes for different
; types. We will define three types, points, lines and rectangles.
(load "scoops.fsl")
;;;
;;; Point, Line and Rectangle
;;;
;;;
;;; Class POINT
;;;
(define-class point
(instvars (x (active 0 () move-x))
(y (active 0 () move-y))
(color (active 'yellow () change-color)))
(options settable-variables
inittable-variables))
(compile-class point) ; see page 45 in the language reference manual
;;;
;;; Class LINE
;;;
(define-class line
(instvars (len (active 50 () change-length))
(dir (active 0 () change-direction)))
(mixins point) ; inherit x, y, and color from point class.
(options settable-variables))
(compile-class line)
;;;
;;; Class RECTANGLE
;;;
(define-class rectangle
(instvars (height (active 60 () change-height)))
(mixins line) ; inherit color and width (len) from line
(options settable-variables))
(compile-class rectangle)
; In order to have an occurance of a class you will need to use the
; MAKE-INSTANCE procedure. For example:
; (define p1 (make-instance point))
; Then to change parts of the class use the send function. For example
; to change the color of the point previously defined:
; (send p1 change "color" 'cyan)
;
;;;
;;; Methods for POINT
;;;
(define-method (point erase) ()
(set-pen-color! 'black)
(draw))
(define-method (point draw) ()
(draw-point x y))
; having both a draw and redraw function here may seem to be unnecessary.
; you will see why both are needed as we continue
(define-method (point redraw) ()
(set-pen-color! color)
(draw))
(define-method (point move-x) (new-x)
(erase)
(set! x new-x)
(redraw)
new-x)
(define-method (point move-y) (new-y)
(erase)
(set! y new-y)
(redraw)
new-y)
(define-method (point change-color) (new-color)
(erase)
(set! color new-color)
(redraw)
new-color)
;;;
;;; Methods for LINE
;;;
; inherit erase, redraw, move-x, move-y and change-color from point.
(define-method (line draw) ()
(position-pen x y)
(draw-line-to (truncate (+ x (* len (cos dir))))
(truncate (+ y (* len (sin dir))))))
(define-method (line change-length) (new-length)
(erase)
(set! len new-length)
(redraw)
new-length)
(define-method (line change-direction) (new-dir)
(erase)
(set! dir new-dir)
(redraw)
new-dir)
;;;
;;; Methods for RECTANGLE
;;;
; inherit erase, redraw, move-x, move-y and change-color from point.
(define-method (rectangle draw) ()
(position-pen x y)
(draw-line-to (+ x len) y)
(draw-line-to (+ x len) (+ y height))
(draw-line-to x (+ y height))
(draw-line-to x y))
(define-method (rectangle change-height) (new-height)
(erase)
(set! height new-height)
(redraw)
new-height)