;"tek40.scm", Tektronix 4000 series graphics support in Scheme. ;Copyright (C) 1992, 1994 Aubrey Jaffer ; ;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. I have made no warrantee or representation that the operation of ;this software will be error-free, and I am under no obligation to ;provide any services, by way of maintenance, update, or otherwise. ; ;3. In conjunction with products arising from the use of this ;material, there shall be no use of my name in any advertising, ;promotional, or sales literature without prior written consent in ;each case. ;THIS FILE NEEDS MORE WORK. ;The Tektronix 4000 series graphics protocol gives the user a 1024 by ;1024 square drawing area. The origin is in the lower left corner of ;the screen. Increasing y is up and increasing x is to the right. ;The graphics control codes are sent over the current-output-port and ;can be mixed with regular text and ANSI or other terminal control ;sequences. ; (tek40:init) procedure (define (tek40:init) 'noop) (define esc-string (string (integer->char #o33))) (define tek40:graphics-str (string-append (string slib:form-feed) esc-string (string (integer->char #o14)) ;; clear the screen )) (define (tek40:graphics) (display tek40:graphics-str) (force-output)) (define (tek40:text) (tek40:move 0 12) (write-char (integer->char #o37))) (define (tek40:linetype linetype) (cond ((or (negative? linetype) (> linetype 15)) (slib:error "bad linetype" linetype)) (else (display esc-string) (write-char (integer->char (+ (char->integer #\`) linetype)))))) (define (tek40:move x y) (write-char (integer->char #o35)) (tek40:draw x y)) (define (tek40:draw x y) (display (string (integer->char (+ #x20 (quotient y 32))) (integer->char (+ #x60 (remainder y 32))) (integer->char (+ #x20 (quotient x 32))) (integer->char (+ #x40 (remainder x 32)))))) (define (tek40:put-text x y str) (tek40:move x (+ y -11)) (write-char (integer->char #o37)) (display str)) (define (tek40:reset) (display tek40:graphics-str) (force-output)) (define (tek40:test) (tek40:init) ; (tek40:reset) (tek40:graphics) (tek40:linetype 0) (tek40:move 100 100) (tek40:draw 200 100) (tek40:draw 200 200) (tek40:draw 100 200) (tek40:draw 100 100) (do ((i 0 (+ 1 i))) ((> i 15)) (tek40:linetype i) (tek40:move (+ (* 50 i) 100) 100) (tek40:put-text (+ (* 50 i) 100) 100 (number->string i)) (tek40:move (+ (* 50 i) 100) 100) (tek40:draw (+ (* 50 i) 200) 200)) (tek40:linetype 0) (tek40:text))