Deconstructive Analysis: Frank Stella's Protractors

A Formalist Approach to Encoding the Structural Descriptions of Art and the Art Making Process

Alan G. Turransky
Art Department
University of Massachusetts Amherst

"A tendency to concentrate on form as opposed to allegorical and photographic content, as an attempt to dismiss the overlaying of metaphors and to regard the work of art as hermetically sealed. The idea of building a painting from a series of basic elements, an analytical, almost laboratorial interpretation of art. Punin, a Formalist art critic, went on to assert that the only way in which the artist could create a new artistic value (an original work of art) was to apply his intuition not to the systems or constructions already known, but to the series of mechanical, technical and aesthetic principles which formed the substructure of any invented phenomenon."
-John E. Bowlt, Russian Formalism and the Visual Arts

Have you ever tried to teach your native language to a foriegner? Native speakers often find that it is extremely difficult to do so due to the fact that since there are so many different levels of information contained within the language, it is often difficult to structure them for the purpose of teaching. The grammar, style, interpretation and many other aspects intertwine themselves so integrally, that by separating them at the wrong juncture can harm their meaning and power. Yet, for the purpose of teaching, it is necessary to separate and abstract these components of the language into simplistic interpretations, from which a base may be formed, providing the necessary tools and constructs needed to work with it. Once this low-level knowledge is obtained and understood, the language is reduced to a tool and one is able to go beyond mere words and phrases to really explore the artistic qualities it has to offer. This also holds true in art and the art making process. An artist must have the necessary knowledge at the low-level before the high-level creative act may be fully investigated. Once the low-level knowledge is acquired, it becomes a suitable tool for the execution of creative ideas; but until they are overcome and comprehended, they can be restrictive to the artist.


 


; grey-tone symbols for frank stella's 'protractor series'
;             copyright (c) turransky 1990    
;                 for use with Artifex        
;________________________________________________________
;STARTING COMPOSITIONAL SYMBOLS

(defsymbol start-line (:point p)                                                      ;starting line for all pictures
  (let ((i (i-coord p))(j (j-coord p)))
    (line (@@ (- i 10) (- j 90))(@@ (- i 10) (+ j 80)) :pen (@@ 10 10))))
;________________________________________________________
;PROTRACTORS

(defsymbol protractor-t (:point p)                                                    ;protractor with it's arc facing up
  (let ((i (i-coord p))(j (j-coord p)))
    (arc  p :radius 90 :start-angle 0 :delta-angle 180 :pen (@@ 10 10))
    (start-line p)))

(defsymbol protractor-b (:point p)                                                    ;protractor with it's arc facing down
  (let ((i (i-coord p))(j (j-coord p)))
    (arc p :radius 90 :start-angle 180 :delta-angle 180 :pen (@@ 10 10))
    (line (@@ i (- j 90))(@@ i (+ j 80)) :pen (@@ 10 10))))

(defsymbol protractor-l (:point p)                                                    ;protractor with it's arc facing left
  (let ((i (i-coord p))(j (j-coord p)))
    (arc p :radius 90 :start-angle 90 :delta-angle 180 :pen (@@ 10 10))
    (line (@@ (- i 90) (- j 10))(@@ (+ i 80) (- j 10)) :pen (@@ 10 10))))

(defsymbol protractor-r (:point p)                                                    ;protractor with it's arc facing right
  (let ((i (i-coord p))(j (j-coord p)))
    (arc p :radius 90 :start-angle 90 :delta-angle -180 :pen (@@ 10 10))
    (line (@@ (- i 90) j)(@@ (+ i 80) j) :pen (@@ 10 10))))
;________________________________________________________
;FANS

;******GENERAL FAN******
(defsymbol fan (:point p :number s)                                                   ;fan shaped insert for 'protractors'
  (pie p :radius 80 :start-angle s :delta-angle -180 :fil 1 :clr (%RGB 10 10 10))
  (pie p :radius 80 :start-angle s :delta-angle -171 :fil 1 :clr (%RGB 40 40 40))
  (pie p :radius 80 :start-angle s :delta-angle -153 :fil 1 :clr (%RGB 0 0 0))
  (pie p :radius 80 :start-angle s :delta-angle -135 :fil 1 :clr (%RGB 95 95 95))
  (pie p :radius 80 :start-angle s :delta-angle -117 :fil 1 :clr (%RGB 20 20 20))
  (pie p :radius 80 :start-angle s :delta-angle -99 :fil 1 :clr (%RGB 0 0 0))
  (pie p :radius 80 :start-angle s :delta-angle -81 :fil 1 :clr (%RGB 10 10 10))
  (pie p :radius 80 :start-angle s :delta-angle -63 :fil 1 :clr (%RGB 80 80 80))
  (pie p :radius 80 :start-angle s :delta-angle -45 :fil 1 :clr (%RGB 30 30 30))
  (pie p :radius 80 :start-angle s :delta-angle -27 :fil 1 :clr (%RGB 90 90 90))
  (pie p :radius 80 :start-angle s :delta-angle -9 :fil 1 :clr (%RGB 50 50 50)))
 
(defsymbol fan-t (:point p)                                                           ;fan insert facing up
  (fan p 180)(protractor-t p))

(defsymbol fan-b (:point p)                                                           ;fan insert facing down
  (fan p 0)(protractor-b p))

(defsymbol fan-l (:point p)                                                           ;fan insert facing left
  (fan p -90) (protractor-l p))

(defsymbol fan-r (:point p)                                                           ;fan insert facing right
  (fan p 90 )(protractor-r p))
;________________________________________________________
;RAINBOWS

;******GENERAL RAINBOWS******   
(defsymbol rainbo (:point p :number s :number d)                                      ;rainbow shaped insert for 'protractors'
  (let ((i (i-coord p))(j (j-coord p)))
    (pie p :radius 80 :start-angle s :delta-angle d :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 1) j) :radius 80 :start-angle s :delta-angle d :clr (%RGB 99 99 99))
    (pie p :radius 70 :start-angle s :delta-angle d :fil 1 :clr (%RGB 40 40 40))
    (pie (@@ (- i 1) j) :radius 70 :start-angle s :delta-angle d :clr (%RGB 99 99 99))
    (pie p :radius 60 :start-angle s :delta-angle d :fil 1 :clr (%RGB 15 15 15))
    (pie (@@ (- i 1) j) :radius 60 :start-angle s :delta-angle d :clr (%RGB 99 99 99))
    (pie p :radius 50 :start-angle s :delta-angle d :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 1) j) :radius 50 :start-angle s :delta-angle d :clr (%RGB 99 99 99))
    (pie p :radius 40 :start-angle s :delta-angle d :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 1) j) :radius 40 :start-angle s :delta-angle d :clr (%RGB 99 99 99))
    (pie p :radius 30 :start-angle s :delta-angle d :fil 1 :clr (%RGB 50 50 50))
    (pie (@@ (- i 1) j) :radius 30 :start-angle s :delta-angle d :clr (%RGB 99 99 99))
    (pie p :radius 20 :start-angle s :delta-angle d :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 1) j) :radius 20 :start-angle s :delta-angle d :clr (%RGB 99 99 99))))
   
(defsymbol rainbo-t (:point p)                                                        ;rainbow insert facing up
  (rainbo p 0 180)(protractor-t p))

(defsymbol rainbo-b (:point p)                                                        ;rainbow insert facing down
  (rainbo p 180 180)(protractor-b p))

(defsymbol rainbo-l (:point p)                                                        ;rainbow insert facing left
  (rainbo p 90 180)(protractor-l p))

(defsymbol rainbo-r (:point p)                                                        ;rainbow insert facing right
  (rainbo p 90 -180)(protractor-r p))
;________________________________________________________
;FRAME ELEMENTS FOR RAINBOWS

(defsymbol frame-lines-t (:point p)                                                   ;framing element for a top rainbow
    (let ((i (i-coord p))(j (j-coord p)))
      (line (@@ (- i 15) (+ j 1))(@@ (- i 81)(+ j 1)) :pen (@@ 10 10))
      (line (@@ (- i 15) (- j 10))(@@ (- i 81)(- j 10)) :pen (@@ 10 10))
      (line p (@@ (- i 90) j) :clr (%RGB 90 90 90))))

(defsymbol frame-lines-b (:point p)                                                   ;framing element for a bottom rainbow
    (let ((i (i-coord p))(j (j-coord p)))
      (line (@@ (+ i 10) (+ j 1))(@@ (+ i 80)(+ j 1)) :pen (@@ 10 10))
      (line (@@ (+ i 10) (- j 10))(@@ (+ i 80)(- j 10)) :pen (@@ 10 10))
      (line p (@@ (+ i 90) j) :clr (%RGB 90 90 90))))

(defsymbol frame-lines-l (:point p)                                                   ;framing element for a left rainbow
    (let ((i (i-coord p))(j (j-coord p)))
      (line (@@ (- i 10) (- j 10))(@@ (- i 10)(- j 81)) :pen (@@ 10 10))
      (line (@@ (+ i 1) (- j 10))(@@ (+ i 1)(- j 81)) :pen (@@ 10 10))
      (line p (@@ i (- j 90)) :clr (%RGB 90 90 90))))

(defsymbol frame-lines-r (:point p)                                                   ;framing element for a right rainbow
    (let ((i (i-coord p))(j (j-coord p)))
      (line (@@ (- i 10) (+ j 10))(@@ (- i 10)(+ j 80)) :pen (@@ 10 10))
      (line (@@ (+ i 1) (+ j 10))(@@ (+ i 1)(+ j 80)) :pen (@@ 10 10))
      (line p (@@ i (+ j 90)) :clr (%RGB 90 90 90))))
;________________________________________________________
;INTERSECTIONS FOR FANS 
                           
(defsymbol fan-tt-l (:point p)                                                        ;top/top(on left side) 
  (let ((i (i-coord p))(j (j-coord p)))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 180 :delta-angle -9 :fil 1 :clr (%RGB 70 70 70))
    (pie (@@ (- i 10) (- j 90)) :radius 70 :start-angle 9 :delta-angle -9 :fil 1 :clr (%RGB 70 70 70))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 171 :delta-angle -18 :fil 1 :clr (%RGB 10 10 10))
    (pie (@@ (- i 10) (- j 90)) :radius 70 :start-angle 27 :delta-angle -18 :fil 1 :clr (%RGB 10 10 10))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 153 :delta-angle -18 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 10) (- j 90)) :radius 70 :start-angle 45 :delta-angle -18 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 135 :delta-angle -18 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 10) (- j 90)) :radius 72 :start-angle 63 :delta-angle -18 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 117 :delta-angle -18 :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 10) (- j 90)) :radius 70 :start-angle 81 :delta-angle -18 :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 99 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 10) (- j 90)) :radius 70 :start-angle 90 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))))

(defsymbol fan-tt-r (:point p)                                                        ;top/top(in right side)
  (let ((i (i-coord p))(j (j-coord p)))
    (pie (@@ (- i 10) (+ j 90)) :radius 70 :start-angle 180 :delta-angle -9 :fil 1 :clr (%RGB 70 70 70))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 9 :delta-angle -9 :fil 1 :clr (%RGB 70 70 70))
    (pie (@@ (- i 10) (+ j 90)) :radius 70 :start-angle 171 :delta-angle -18 :fil 1 :clr (%RGB 10 10 10))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 27 :delta-angle -18 :fil 1 :clr (%RGB 10 10 10))
    (pie (@@ (- i 10) (+ j 90)) :radius 70 :start-angle 153 :delta-angle -18 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 45 :delta-angle -18 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 10) (+ j 90)) :radius 72 :start-angle 135 :delta-angle -18 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 63 :delta-angle -18 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 10) (+ j 90)) :radius 70 :start-angle 117 :delta-angle -18 :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 81 :delta-angle -18 :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 10) (+ j 90)) :radius 70 :start-angle 99 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 90 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))))

(defsymbol fan-lt (:point p)                                                          ;left/top
  (let ((i (i-coord p))(j (j-coord p)))
    (pie (@@ (- i 100) (+ j 90)) :radius 70 :start-angle 270 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 9 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 100) (+ j 90)) :radius 78 :start-angle 261 :delta-angle -18 :fil 1 :clr (%RGB 10 10 10))
    (pie (@@ (- i 10) j) :radius 78 :start-angle 27 :delta-angle -18 :fil 1 :clr (%RGB 10 10 10))
    (pie (@@ (- i 100) (+ j 90)) :radius 70 :start-angle 243 :delta-angle -18 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 10) j) :radius 68 :start-angle 45 :delta-angle -18 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 100) (+ j 90)) :radius 70 :start-angle 225 :delta-angle -18 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 63 :delta-angle -18 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 100) (+ j 90)) :radius 78 :start-angle 207 :delta-angle -18 :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 10) j) :radius 78 :start-angle 81 :delta-angle -18 :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 100) (+ j 90)) :radius 70 :start-angle 189 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 10) j) :radius 80 :start-angle 90 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))))

(defsymbol fan-lt1 (:point p)                                                         ;left/top
  (let ((i (i-coord p))(j (j-coord p)))
    (pie (@@ (- i 90) (+ j 80)) :radius 70 :start-angle 270 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 10) j) :radius 80 :start-angle 9 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 90) (+ j 80)) :radius 70 :start-angle 261 :delta-angle -18 :fil 1 :clr (%RGB 10 10 10))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 27 :delta-angle -18 :fil 1 :clr (%RGB 10 10 10))
    (pie (@@ (- i 90) (+ j 80)) :radius 60 :start-angle 243 :delta-angle -18 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 10) j) :radius 60 :start-angle 45 :delta-angle -18 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 90) (+ j 80)) :radius 70 :start-angle 225 :delta-angle -18 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 63 :delta-angle -18 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 90) (+ j 80)) :radius 70 :start-angle 207 :delta-angle -18 :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 81 :delta-angle -18 :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 90) (+ j 80)) :radius 70 :start-angle 189 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 10) j) :radius 80 :start-angle 90 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))))

(defsymbol fan-tb-l-rt-bl (:point p)                                                  ;top/bottom(on left side)-right/top-bottom/left
  (let ((i (i-coord p))(j (j-coord p)))
    (pie (@@ (- i 100) (- j 90)) :radius 70 :start-angle 279 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 180 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 100) (- j 90)) :radius 70 :start-angle 297 :delta-angle -18 :fil 1 :clr (%RGB 10 10 10))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 171 :delta-angle -18 :fil 1 :clr (%RGB 10 10 10))
    (pie (@@ (- i 100) (- j 90)) :radius 70 :start-angle 315 :delta-angle -18 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 153 :delta-angle -18 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 100) (- j 90)) :radius 70 :start-angle 333 :delta-angle -18 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 135 :delta-angle -18 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 100) (- j 90)) :radius 70 :start-angle 351 :delta-angle -18 :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 117 :delta-angle -18 :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 100) (- j 90)) :radius 70 :start-angle 0 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 99 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))))

(defsymbol fan-tb-l (:point p)                                                        ;top/bottom(on left side) 
  (let ((i (i-coord p))(j (j-coord p)))
    (pie (@@ (- i 100) (- j 90)) :radius 90 :start-angle 279 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 10) j) :radius 90 :start-angle 180 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 100) (- j 90)) :radius 70 :start-angle 297 :delta-angle -18 :fil 1 :clr (%RGB 10 10 10))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 171 :delta-angle -18 :fil 1 :clr (%RGB 10 10 10))
    (pie (@@ (- i 100) (- j 90)) :radius 69 :start-angle 315 :delta-angle -18 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 10) j) :radius 69 :start-angle 153 :delta-angle -18 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 100) (- j 90)) :radius 70 :start-angle 333 :delta-angle -18 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 135 :delta-angle -18 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 100) (- j 90)) :radius 70 :start-angle 351 :delta-angle -18 :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 117 :delta-angle -18 :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 100) (- j 90)) :radius 90 :start-angle 0 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 10) j) :radius 90 :start-angle 99 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))))

(defsymbol fan-rt1 (:point p)                                                         ;right/top
  (let ((i (i-coord p))(j (j-coord p)))
    (pie (@@ (- i 100) (- j 90)) :radius 80 :start-angle 279 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 10) j) :radius 80 :start-angle 180 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 100) (- j 90)) :radius 80 :start-angle 297 :delta-angle -18 :fil 1 :clr (%RGB 10 10 10))
    (pie (@@ (- i 10) j) :radius 80 :start-angle 171 :delta-angle -18 :fil 1 :clr (%RGB 10 10 10))
    (pie (@@ (- i 100) (- j 90)) :radius 67 :start-angle 315 :delta-angle -18 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 10) j) :radius 67 :start-angle 153 :delta-angle -18 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 100) (- j 90)) :radius 80 :start-angle 333 :delta-angle -18 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 10) j) :radius 80 :start-angle 135 :delta-angle -18 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 100) (- j 90)) :radius 80 :start-angle 351 :delta-angle -18 :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 10) j) :radius 80 :start-angle 117 :delta-angle -18 :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 100) (- j 90)) :radius 80 :start-angle 0 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 10) j) :radius 80 :start-angle 99 :delta-angle -9 :fil 1 :clr (%RGB 0 0 0))))
;________________________________________________________
;INTERSECTIONS FOR RAINBOWS  
   
(defsymbol rainbo-tt-l (:point p)                                                   ;top/top(on left side)                                                     
  (let ((i (i-coord p))(j (j-coord p)))
    (pie p :radius 80 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 90 90 90))
    (arc p :radius 80 :start-angle 180 :delta-angle -90  :clr (%RGB 99 99 99))
    (pie (@@ i (- j 90)) :radius 80 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 90 90 90))
    (arc (@@ i (- j 90)) :radius 80 :start-angle 90 :delta-angle -90  :clr (%RGB 99 99 99)) 
    (pie (@@ i (- j 90)) :radius 70 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 40 40 40))
    (arc (@@ i (- j 90)) :radius 70 :start-angle 90 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie p :radius 70 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 40 40 40))
    (arc p :radius 70 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie p :radius 60 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 15 15 15))
    (arc p :radius 60 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ i (- j 90)) :radius 60 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 15 15 15))
    (arc (@@ i (- j 90)) :radius 60 :start-angle 90 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ i (- j 90)) :radius 50 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 30 30 30))
    (arc (@@ i (- j 90)) :radius 50 :start-angle 90 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie p :radius 50 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 30 30 30))
    (arc p :radius 50 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie p :radius 40 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 0 0 0)) 
    (arc p :radius 40 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ i (- j 90)) :radius 40 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 0 0 0)) 
    (arc (@@ i (- j 90)) :radius 40 :start-angle 90 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ i (- j 90)) :radius 30 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 50 50 50))
    (arc (@@ i (- j 90)) :radius 30 :start-angle 90 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie p :radius 30 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 50 50 50))
    (arc p :radius 30 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie p :radius 20 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 80 80 80))
    (arc p :radius 20 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ i (- j 90)) :radius 20 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 99 99 99))
    (arc (@@ i (- j 90)) :radius 20 :start-angle 90 :delta-angle -90 :clr (%RGB 80 80 80))
    (line (@@ (- i 9)(- j 10)) (@@ (- i 9) (- j 90)) :pen (@@ 10 10) :clr (%RGB 0 0 0))))

(defsymbol rainbo-tt-r (:point p)                                                    ;top/top(on right side)
  (let ((i (i-coord p))(j (j-coord p)))
    (pie p :radius 80 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 90 90 90))
    (arc p :radius 80 :start-angle 90 :delta-angle -90  :clr (%RGB 99 99 99))
    (pie (@@ i (+ j 90)) :radius 80 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 90 90 90))
    (arc (@@ i (+ j 90)) :radius 80 :start-angle 180 :delta-angle -90  :clr (%RGB 99 99 99)) 
    (pie (@@ i (+ j 90)) :radius 70 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 40 40 40))
    (arc (@@ i (+ j 90)) :radius 70 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie p :radius 70 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 40 40 40))
    (arc p :radius 70 :start-angle 90 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie p :radius 60 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 15 15 15))
    (arc p :radius 60 :start-angle 90 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ i (+ j 90)) :radius 60 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 15 15 15))
    (arc (@@ i (+ j 90)) :radius 60 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ i (+ j 90)) :radius 50 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 30 30 30))
    (arc (@@ i (+ j 90)) :radius 50 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie p :radius 50 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 30 30 30))
    (arc p :radius 50 :start-angle 90 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie p :radius 40 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 0 0 0)) 
    (arc p :radius 40 :start-angle 90 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ i (+ j 90)) :radius 40 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 0 0 0)) 
    (arc (@@ i (+ j 90)) :radius 40 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ i (+ j 90)) :radius 30 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 50 50 50))
    (arc (@@ i (+ j 90)) :radius 30 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie p :radius 30 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 50 50 50))
    (arc p :radius 30 :start-angle 90 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie p :radius 20 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 80 80 80))
    (arc p :radius 20 :start-angle 90 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ i (+ j 90)) :radius 20 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 80 80 80))
    (arc (@@ i (+ j 90)) :radius 20 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (line (@@ (- i 9)(- j 10)) (@@ (- i 9) (+ j 90)) :pen (@@ 10 10) :clr (%RGB 0 0 0))))

(defsymbol rainbo-tb-r-lt-br (:point p)                                            ;top/bottom(on right side)-left/top-bottom/right
  (let ((i (i-coord p))(j (j-coord p)))
    (pie (@@ (- i 90)(+ j 90)) :radius 81 :start-angle 270 :delta-angle -90 :fil 1 :clr (%RGB 90 90 90)) 
    (pie (@@ (- i 90)(+ j 90)) :radius 81 :start-angle 270 :delta-angle -90 :clr (%RGB 99 99 99)) 
    (pie (@@ (- i 1) j) :radius 80 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 1) j) :radius 80 :start-angle 90 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 90)(+ j 90)) :radius 70 :start-angle 270 :delta-angle -90 :fil 1 :clr (%RGB 40 40 40))
    (pie (@@ (- i 90)(+ j 90)) :radius 70 :start-angle 270 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 90)(+ j 90)) :radius 60 :start-angle 270 :delta-angle -90 :fil 1 :clr (%RGB 15 15 15))
    (pie (@@ (- i 90)(+ j 90)) :radius 60 :start-angle 270 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 90)(+ j 90)) :radius 50 :start-angle 270 :delta-angle -90 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 90)(+ j 90)) :radius 50 :start-angle 270 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 90)(+ j 90)) :radius 40 :start-angle 270 :delta-angle -90 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 90)(+ j 90)) :radius 40 :start-angle 270 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 90)(+ j 90)) :radius 30 :start-angle 270 :delta-angle -90 :fil 1 :clr (%RGB 50 50 50))
    (pie (@@ (- i 90)(+ j 90)) :radius 30 :start-angle 270 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 90)(+ j 90)) :radius 20 :start-angle 270 :delta-angle -90 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 1) j) :radius 70 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 40 40 40))
    (pie (@@ (- i 1) j) :radius 70 :start-angle 90 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 1) j) :radius 60 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 15 15 15))
    (pie (@@ (- i 1) j) :radius 60 :start-angle 90 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 1) j) :radius 50 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 1) j) :radius 50 :start-angle 90 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 1) j) :radius 40 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 1) j) :radius 40 :start-angle 90 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 1) j) :radius 30 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 50 50 50))
    (pie (@@ (- i 1) j) :radius 30 :start-angle 90 :delta-angle -90  :clr (%RGB 99 99 99))
    (pie (@@ (- i 1) j) :radius 20 :start-angle 90 :delta-angle -90 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 1) j) :radius 20 :start-angle 90 :delta-angle -90  :clr (%RGB 99 99 99))))

(defsymbol rainbo-tb-l-rt-bl (:point p)                                             ;top/bottom(on left side)-right/top-bottom/left
  (let ((i (i-coord p))(j (j-coord p)))
    (pie (@@ (- i 100)(- j 90)) :radius 81 :start-angle 0 :delta-angle -90 :fil 1 :clr (%RGB 90 90 90)) 
    (pie (@@ (- i 100)(- j 90)) :radius 81 :start-angle 0 :delta-angle -90 :clr (%RGB 99 99 99)) 
    (pie (@@ (- i 10) j) :radius 80 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 90 90 90))
    (pie (@@ (- i 10) j) :radius 80 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 100)(- j 90)) :radius 70 :start-angle 0 :delta-angle -90 :fil 1 :clr (%RGB 40 40 40))
    (pie (@@ (- i 100)(- j 90)) :radius 70 :start-angle 0 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 100)(- j 90)) :radius 60 :start-angle 0 :delta-angle -90 :fil 1 :clr (%RGB 15 15 15))
    (pie (@@ (- i 100)(- j 90)) :radius 60 :start-angle 0 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 100)(- j 90)) :radius 50 :start-angle 0 :delta-angle -90 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 100)(- j 90)) :radius 50 :start-angle 0 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 100)(- j 90)) :radius 40 :start-angle 0 :delta-angle -90 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 100)(- j 90)) :radius 40 :start-angle 0 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 100)(- j 90)) :radius 30 :start-angle 0 :delta-angle -90 :fil 1 :clr (%RGB 50 50 50))
    (pie (@@ (- i 100)(- j 90)) :radius 30 :start-angle 0 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 100)(- j 90)) :radius 20 :start-angle 0 :delta-angle -89 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 100)(- j 90)) :radius 20 :start-angle 0 :delta-angle -89 :clr (%RGB 99 99 99))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 40 40 40))
    (pie (@@ (- i 10) j) :radius 70 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 10) j) :radius 60 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 15 15 15))
    (pie (@@ (- i 10) j) :radius 60 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 10) j) :radius 50 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 30 30 30))
    (pie (@@ (- i 10) j) :radius 50 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 10) j) :radius 40 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 0 0 0))
    (pie (@@ (- i 10) j) :radius 40 :start-angle 180 :delta-angle -90 :clr (%RGB 99 99 99))
    (pie (@@ (- i 10) j) :radius 30 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 50 50 50))
    (pie (@@ (- i 10) j) :radius 30 :start-angle 180 :delta-angle -90  :clr (%RGB 99 99 99))
    (pie (@@ (- i 10) j) :radius 20 :start-angle 180 :delta-angle -90 :fil 1 :clr (%RGB 80 80 80))
    (pie (@@ (- i 10) j) :radius 20 :start-angle 180 :delta-angle -90  :clr (%RGB 99 99 99))))

;*************************************************************************************
;*************************************************************************************   
; grey-tone terminating symbols for frank stella's 'protractor series'
;             copyright (c) turransky 1990    
;                 for use with Artifex        
;________________________________________________________
;FANS
 
(defsymbol fan-t- (:point p)                                                           ;fan top terminal
  (fan p 180)(protractor-t p))

(defsymbol fan-b- (:point p)                                                           ;fan bottom terminal
  (fan p 0)(protractor-b p))

(defsymbol fan-l- (:point p)                                                           ;fan left terminal
  (fan p -90) (protractor-l p))

(defsymbol fan-r- (:point p)                                                           ;fan right terminal
  (fan p 90 )(protractor-r p))
;________________________________________________________
;RAINBOWS

(defsymbol rainbo-t- (:point p)                                                        ;rainbow top terminal
  (rainbo p 0 180)(protractor-t p))

(defsymbol rainbo-b- (:point p)                                                        ;rainbow bottom terminal
  (rainbo p 180 180)(protractor-b p))

(defsymbol rainbo-l- (:point p)                                                        ;rainbow left terminal
  (rainbo p 90 180)(protractor-l p))

(defsymbol rainbo-r- (:point p)                                                        ;rainbow right terminal
  (rainbo p 90 -180)(protractor-r p))
;________________________________________________________


;rules for frank stella's 'protractor series'
;        copyright (c) turransky 1990          
;---------------------------------------------------------------------
;START BUILDING COMPOSITION

(DEFRULE transform-sl-fan ()                                                  ;start transforming the fan 'start-line'
  (start-line p) -> 
  (let ((i (i-coord p))(j (j-coord p)))
    (list (fan-t p)
          (ONE
           (12 (fan-b p))                                                     ;tb
           (12 (list (fan-b (@@ (- i 90)(+ j 90)))                            ;tb-r
                     (fan-lt (@@ (+ i 10)(+ j 0)))                            
                     (line (@@ (- i 10) j)(@@ (- i 10)(+ j 90)) :pen (@@ 10 10))
                     (line (@@ (- i 90)(+ j 90))(@@ (- i 90) j) :pen (@@ 10 10))))      
           (12 (list (fan-l (@@ (- i 90)(+ j 90)))                            ;tl
                     (fan-lt1 p)                                            
                     (line (@@ (- i 90) j)(@@ (- i 90) j) :pen (@@ 10 10))))
           (12 (list (fan-b (@@ (- i 90)(- j 90)))                            ;tb-l
                     (fan-tb-l (@@ (+ i 10)(+ j 0)))
                     (line (@@ (- i 10) j)(@@ (- i 10)(- j 90)) :pen (@@ 10 10))
                     (line (@@ (- i 90)(- j 90))(@@ (- i 90) j) :pen (@@ 10 10))))   
           (12 (list (fan-r (@@ (- i 90)(- j 90)))                            ;tr
                     (fan-rt1 (@@ (+ i 10)(+ j 0)))
                     (line (@@ (- i 10) j)(@@ (- i 10)(- j 90))
                           (@@ (- i 90)(- j 90)) :pen (@@ 10 10))))   
           (12 (list (fan-t (@@ i (- j 90)))                                  ;tt-l
                     (fan-tt-l p)))
           (12 (list (fan-t (@@ i (+ j 90)))                                  ;tt-r                           
                     (fan-tt-r p)))
           (16 nil)))))

(DEFRULE transform-sl-rainbo ()                                               ;start transforming the rainbow 'start-line'
  (start-line p) -> 
  (let ((i (i-coord p))(j (j-coord p)))
    (list (rainbo-t p)
          (ONE
           (12 (list (rainbo-b p)(frame-lines-b p)))                          ;tb            
           (12 (list (rainbo-b (@@ (- i 90)(+ j 90)))                         ;tb-r
                     (rainbo-tb-r-lt-br p)
                     (line (@@ (- i 10) j)(@@ (- i 10)(+ j 90)) :pen (@@ 10 10))
                     (line (@@ (- i 90)(+ j 90))(@@ (- i 90) j) :pen (@@ 10 10))
                     (frame-lines-b (@@ (- i 90)(+ j 90)))))     
           (12 (list (rainbo-l (@@ (- i 90)(+ j 90)))                         ;tl
                     (rainbo-tb-r-lt-br p)
                     (line (@@ (- i 10) j)(@@ (- i 10)(+ j 80))
                           (@@ (- i 90)(+ j 80)) :pen (@@ 10 10))
                     (frame-lines-l (@@ (- i 90)(+ j 90))))) 
           (12 (list (rainbo-b (@@ (- i 90)(- j 90)))                         ;tb-l
                     (rainbo-tb-l-rt-bl (@@ (+ i 10)(- j 1)))
                     (line (@@ (- i 10) j)(@@ (- i 10)(- j 90)) :pen (@@ 10 10))
                     (line (@@ (- i 90)(- j 90))(@@ (- i 90) j) :pen (@@ 10 10))
                     (frame-lines-b (@@ (- i 90)(- j 90)))))
           (12 (list (rainbo-r (@@ (- i 90)(- j 90)))                         ;tr
                     (rainbo-tb-l-rt-bl (@@ (+ i 9)(- j 0)))
                     (line (@@ (- i 10) j)(@@ (- i 10)(- j 90))
                           (@@ (- i 90)(- j 90)) :pen (@@ 10 10))
                     (frame-lines-r (@@ (- i 90)(- j 90)))))
           (12 (list (rainbo-t (@@ i (- j 90)))                               ;tt-l
                     (rainbo-tt-l (@@ (- i 1) j))
                     (frame-lines-t (@@ i (- j 90)))))
           (12 (list (rainbo-t (@@ i (+ j 90)))                               ;tt-r
                     (rainbo-tt-r (@@ (- i 1) j))
                     (frame-lines-t (@@ i (+ j 90)))))
           (16 nil))
          (frame-lines-t p))))
;---------------------------------------------------------------------
;ADD TO COMPOSITION

(DEFRULE transform-pt-fan ()                                                  ;build off of a top fan
  (fan-t p) ->
  (let ((i (i-coord p))(j (j-coord p)))
    (list (fan-t- p)
          (one 
           (15 (fan-b- p))                                                     ;tb
           (15 (list (fan-l- (@@ (- i 90)(+ j 90)))                            ;tl
                     (fan-lt1 (@@ (+ i 0)(+ j 0)))
                     (line (@@ (- i 90)(+ j 0))(@@ (- i 90)(+ j 0)) :pen 10)
                     (line (@@ (- i 10)(+ j 0))(@@ (- i 10)(+ j 80))
                           (@@ (- i 90)(+ j 80)) :pen (@@ 10 10))))
           (15 (list (fan-r- (@@ (- i 90)(- j 90)))                            ;tr
                     (fan-rt1 (@@ (+ i 10)(+ j 0)))
                     (line (@@ (- i 90)(+ j 0))(@@ (- i 90)(+ j 0)) :pen (@@ 10 10))
                     (line (@@ (- i 10)(+ j 0))(@@ (- i 10)(- j 90))
                           (@@ (- i 90)(- j 90)) :pen (@@ 10 10))))
           (15 (list (fan-t- (@@ i (- j 90)))                                  ;tt-l
                     (fan-tt-l p)))
           (15 (list (fan-t- (@@ i (+ j 90)))                                  ;tt-r
                     (fan-tt-r p)))
           (25 nil)))))

(DEFRULE transform-pt-rainbo ()                                               ;build off of a top rainbow
  (rainbo-t p) ->
  (let ((i (i-coord p))(j (j-coord p)))
    (list (rainbo-t- p)
          (one 
           (15 (list (rainbo-b- p)(frame-lines-b p)))                          ;tb           
           (15 (list (rainbo-l- (@@ (- i 90)(+ j 90)))                         ;tl
                     (rainbo-tb-r-lt-br p)
                     (line (@@ (- i 10)(+ j 0))(@@ (- i 10)(+ j 80))
                           (@@ (- i 90)(+ j 80)) :pen (@@ 10 10))
                     (frame-lines-l (@@ (- i 90)(+ j 90)))))
           (15 (list (rainbo-r- (@@ (- i 90)(- j 90)))                         ;tl
                     (rainbo-tb-l-rt-bl (@@ (+ i 9)(+ j 0)))
                     (line (@@ (- i 10)(+ j 0))(@@ (- i 10)(- j 90))
                           (@@ (- i 90)(- j 90)) :pen (@@ 10 10))
                     (frame-lines-r (@@ (- i 90)(- j 90)))))
           (15 (list (rainbo-t- (@@ i (- j 90)))                               ;tt-l
                     (rainbo-tt-l (@@ (- i 1) j))
                     (frame-lines-t (@@ i (- j 90)))))
           (15 (list (rainbo-t- (@@ i (+ j 90)))                               ;tt-r
                     (rainbo-tt-r (@@ (- i 1) j))
                     (frame-lines-t (@@ i (+ j 90)))))
           (25 nil))
          (frame-lines-t p))))

(DEFRULE transform-pr-fan ()                                                  ;build off of a right fan
  (fan-r p) -> 
  (let ((i (i-coord p))(j (j-coord p)))
    (list (fan-r- p)
          (ONE 
           (25 (fan-l- p))                                                     ;rl non-intersecting*
           (25 (list (fan-t- (@@ (+ i 90)(+ j 90)))                            ;rt
                     (fan-rt1 (@@ (+ i 100)(+ j 90)))
                     (line (@@ (+ i 80)(+ j 90))(@@ (+ i 80) j) p :pen (@@ 10 10))))
           (25 (list (fan-b- (@@ (- i 90)(+ j 90)))                            ;rb
                     (fan-lt1 (@@ (+ i 10)(+ j 10)))
                     (line (@@ (- i 10)(+ j 80))(@@ (- i 10)(+ j 80)) :pen (@@ 10 10))
                     (line (@@ (- i 90)(+ j 90))(@@ (- i 90) j) p :pen (@@ 10 10))))
           (25 nil)))))


(DEFRULE transform-pr-rainbo ()                                               ;build off of a right rainbow
  (rainbo-r p) -> 
  (let ((i (i-coord p))(j (j-coord p)))
    (list (rainbo-r- p)
          (ONE 
           (25 (list (rainbo-l- p)(frame-lines-l p)))                          ;rl non-intersecting
           (25 (list (rainbo-t- (@@ (+ i 90)(+ j 90)))                         ;rt
                     (rainbo-tb-l-rt-bl (@@ (+ i 99)(+ j 90)))
                     (line (@@ (+ i 80)(+ j 90))(@@ (+ i 80) j) p :pen (@@ 10 10))
                     (frame-lines-t (@@ (+ i 90)(+ j 90)))))
           (25 (list (rainbo-b- (@@ (- i 90)(+ j 90)))                         ;rb
                     (rainbo-tb-r-lt-br p)
                     (line (@@ (- i 90)(+ j 90))(@@ (- i 90) j) p :pen (@@ 10 10))
                     (frame-lines-b (@@ (- i 90)(+ j 90)))))
           (25 nil))
          (frame-lines-r p))))

(DEFRULE transform-pl-fan ()                                                  ;build off of a left fan
  (fan-l p) -> 
  (let ((i (i-coord p))(j (j-coord p)))
    (list (fan-l- p)
          (ONE 
           (25 (fan-r p))                                                     ;lr non-intersecting*
           (25 (list (fan-t- (@@ (+ i 90)(- j 90)))                            ;lt
                     (fan-lt1 (@@ (+ i 90)(- j 90)))
                     (line (@@ (+ i 0)(- j 90)) (@@ (+ i 0)(- j 90)) :pen (@@ 10 10))
                     (line (@@ (+ i 80)(- j 90))(@@ (+ i 80)(- j 10))
                           (@@ (+ i 0)(- j 10)) :pen (@@ 10 10))))
           (25 (list (fan-b- (@@ (- i 90)(- j 90)))                            ;lb
                     (fan-rt1 (@@ (+ i 10)(+ j 0))) 
                     (line (@@ (+ i 0)(- j 90)) (@@ (+ i 0)(- j 90)) :pen (@@ 10 10))
                     (line (@@ (+ i 0)(- j 10)) (@@ (- i 90)(- j 10))
                           (@@ (- i 90)(- j 90)) :pen (@@ 10 10))))
           (25 nil)))))

(DEFRULE transform-pl-rainbo ()                                               ;build off of a left rainbow
  (rainbo-l p) -> 
  (let ((i (i-coord p))(j (j-coord p)))
    (list (rainbo-l- p)
          (ONE 
           (25 (list (rainbo-r- p)(frame-lines-r p)                            ;lr non-intersecting
                     (frame-lines-t p))(frame-lines-b p))                      
           (25 (list (rainbo-t- (@@ (+ i 90)(- j 90)) )                        ;lt
                     (rainbo-tb-r-lt-br (@@ (+ i 90)(- j 90)))
                     (line (@@ (+ i 80)(- j 90))(@@ (+ i 80)(- j 10)) 
                           (@@ (+ i 0)(- j 10)) :pen (@@ 10 10))
                     (frame-lines-t (@@ (+ i 90)(- j 90)))))
           (25 (list (rainbo-b- (@@ (- i 90)(- j 90)))                         ;lb
                     (rainbo-tb-l-rt-bl (@@ (+ i 10)(+ j 0)))
                     (line (@@ (+ i 0)(- j 10)) (@@ (- i 90)(- j 10))
                           (@@ (- i 90)(- j 90)) :pen (@@ 10 10))
                     (frame-lines-b (@@ (- i 90)(- j 90)))))
           (25 nil))
          (frame-lines-l p))))

(DEFRULE transform-pb-fan ()                                                  ;build off of a bottom fan
  (fan-b p) ->
  (let ((i (i-coord p))(j (j-coord p)))
    (list (fan-b- p)
          (ONE 
           (25 (list (fan-t- (@@ (+ i 90)(+ j 90)))                            ;tb-r
                     (fan-rt1 (@@ (+ i 100)(+ j 90)))
                     (line (@@ (+ i 80)(+ j 0))(@@ (+ i 80)(+ j 90)) :pen (@@ 10 10))
                     (line p (@@ (+ i 0)(+ j 90)) :pen (@@ 10 10))))
           (25 (list (fan-t- (@@ (+ i 90)(- j 90)))                            ;tb-l
                     (fan-lt (@@ (+ i 100)(- j 90)))
                     (line (@@ (+ i 80)(+ j 0))(@@ (+ i 80)(- j 90)) :pen (@@ 10 10))
                     (line p (@@ (+ i 0)(- j 90)) :pen (@@ 10 10))))
           (50 nil)))))

(DEFRULE transform-pb-rainbo ()                                               ;build off of a bottom rainbow
  (rainbo-b p) ->
  (let ((i (i-coord p))(j (j-coord p)))
    (list (rainbo-b- p)
          (ONE 
           (25 (list (rainbo-t- (@@ (+ i 90)(+ j 90)))                         ;bt-r
                     (rainbo-tb-l-rt-bl (@@ (+ i 99)(+ j 90)))
                     (line (@@ (+ i 80)(+ j 0))(@@ (+ i 80)(+ j 90)) :pen (@@ 10 10))
                     (line p (@@ (+ i 0)(+ j 90)) :pen (@@ 10 10))
                     (frame-lines-t (@@ (+ i 90)(+ j 90)))))
           (25 (list (rainbo-t- (@@ (+ i 90)(- j 90)))                         ;bt-l
                     (rainbo-tb-r-lt-br (@@ (+ i 90)(- j 90)))
                     (line (@@ (+ i 80)(+ j 0))(@@ (+ i 80)(- j 90)) :pen (@@ 10 10))
                     (line p (@@ (+ i 0)(- j 90)) :pen (@@ 10 10))
                     (frame-lines-t (@@ (+ i 90)(- j 90)))))
           (50 nil))
          (frame-lines-b p))))

;---------------------------------------------------------------------
;---------------------------------------------------------------------

;control, init & end structures for frank stella'a 'protractor series'
;                 copyright (c) turransky 1990               
;---------------------------------------------------------------------
;CONTROL STRUCTURE

(DEFCONTROL
  (cond ((equal forb '"fan")
         (list  (transform-sl-fan)
                (transform-pt-fan)
                (transform-pl-fan)
                (transform-pr-fan)
                (transform-pb-fan)))
        (t (list (transform-sl-rainbo)
                 (transform-pt-rainbo)
                 (transform-pl-rainbo)
                 (transform-pr-rainbo)
                 (transform-pb-rainbo)))))

;---------------------------------------------------------------------
;INITIALIZATION STRUCTURE

(DEFINIT (setf forb (get-string-from-user  "Would you like a Fan or a Rainbow?")))
;---------------------------------------------------------------------
;END STRUCTURE

(DEFEND nil)