home *** CD-ROM | disk | FTP | other *** search
- ;;; -*- Mode:Lisp; Package:XLIB; Syntax:COMMON-LISP; Base:10; Lowercase:T -*-
-
- ;;; CLX Bezier Spline Extension demo program
-
- ;;;
- ;;; TEXAS INSTRUMENTS INCORPORATED
- ;;; P.O. BOX 2909
- ;;; AUSTIN, TEXAS 78769
- ;;;
- ;;; Copyright (C) 1987 Texas Instruments Incorporated.
- ;;;
- ;;; Permission is granted to any individual or institution to use, copy, modify,
- ;;; and distribute this software, provided that this complete copyright and
- ;;; permission notice is maintained, intact, in all copies and supporting
- ;;; documentation.
- ;;;
- ;;; Texas Instruments Incorporated provides this software "as is" without
- ;;; express or implied warranty.
- ;;;
-
- (in-package :xlib)
-
- (defun bezier-test (host &optional (pathname "/usr/X.V11R1/extensions/test/datafile"))
- ;; Display the part picture in /extensions/test/datafile
- (let* ((display (open-display host))
- (width 800)
- (height 800)
- (screen (display-default-screen display))
- (black (screen-black-pixel screen))
- (white (screen-white-pixel screen))
- (win (create-window
- :parent (screen-root screen)
- :background black
- :border white
- :border-width 1
- :colormap (screen-default-colormap screen)
- :bit-gravity :center
- :event-mask '(:exposure :key-press)
- :x 20 :y 20
- :width width :height height))
- (gc (create-gcontext
- :drawable win
- :background black
- :foreground white))
- (lines (make-array (* 500 4) :fill-pointer 0 :element-type 'card16))
- (curves (make-array (* 500 8) :fill-pointer 0 :element-type 'card16)))
- ;; Read the data
- (with-open-file (stream pathname)
- (loop
- (case (read-char stream nil :eof)
- (#\l (dotimes (i 4) (vector-push-extend (read stream) lines)))
- (#\b (dotimes (i 8) (vector-push-extend (read stream) curves)))
- ((#\space #\newline #\tab))
- (otherwise (return)))))
- ;; The data points were created to fit in a 2048x2048 square,
- ;; this means scale_factor will always be small enough so that
- ;; we don't need to worry about overflows.
- (let ((factor (ash (min width height) 5)))
- (dotimes (i (length lines))
- (setf (svref lines i)
- (ash (* (svref lines i) factor) -16)))
- (dotimes (i (length curves))
- (setf (svref curves i)
- (ash (* (svref curves i) factor) -16))))
-
- (map-window win) ; Map the window
- ;; Handle events
- (unwind-protect
- (loop
- (event-case (display :force-output-p t)
- (exposure ;; Come here on exposure events
- (window count)
- (when (zerop count) ;; Ignore all but the last exposure event
- (clear-area window)
- (draw-segments win gc lines)
- (draw-curves win gc curves)
- (draw-glyphs win gc 10 10 "Press any key to exit")
- ;; Returning non-nil causes event-case to exit
- t))
- (key-press () (return-from bezier-test t))))
- (close-display display))))
-