home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / devel / lisp / clx_tar.z / clx_tar / clx / debug / util.lsp < prev   
Encoding:
Lisp/Scheme  |  1992-06-12  |  5.0 KB  |  168 lines

  1. ;;; -*- Mode:Lisp; Package:XLIB; Syntax:COMMON-LISP; Base:10; Lowercase:YES; -*-
  2.  
  3. ;; CLX utilities
  4.  
  5. ;;;
  6. ;;;             TEXAS INSTRUMENTS INCORPORATED
  7. ;;;                  P.O. BOX 2909
  8. ;;;                   AUSTIN, TEXAS 78769
  9. ;;;
  10. ;;; Copyright (C) 1987 Texas Instruments Incorporated.
  11. ;;;
  12. ;;; Permission is granted to any individual or institution to use, copy, modify,
  13. ;;; and distribute this software, provided that this complete copyright and
  14. ;;; permission notice is maintained, intact, in all copies and supporting
  15. ;;; documentation.
  16. ;;;
  17. ;;; Texas Instruments Incorporated provides this software "as is" without
  18. ;;; express or implied warranty.
  19. ;;;
  20.  
  21. ;;; Created 04/09/87 14:30:41 by LaMott G. OREN
  22.  
  23. (in-package :xlib)
  24.  
  25. (export '(display-root
  26.       display-black
  27.       display-white
  28.       report-events
  29.       describe-window
  30.       describe-gc
  31.       degree
  32.       radian
  33.       display-refresh
  34.       root-tree
  35.       window-tree))
  36.  
  37. (defun display-root (display) (screen-root (display-default-screen display)))
  38. (defun display-black (display) (screen-black-pixel (display-default-screen display)))
  39. (defun display-white (display) (screen-white-pixel (display-default-screen display)))
  40.  
  41. (defun report-events (display)
  42.   (loop
  43.     (unless
  44.       (process-event display :handler #'(lambda (&rest args) (print args)) :discard-p t :timeout 0.001)
  45.       (return nil))))
  46.  
  47. (defun describe-window (window)
  48.   (macrolet ((da (attribute &key (transform 'progn) (format "~s"))
  49.            (let ((func (intern (concatenate 'string (string 'window-)
  50.                         (string attribute)) 'xlib)))
  51.          `(format t "~%~22a ~?" ',attribute ,format (list (,transform (,func window))))))
  52.          (dg (attribute &key (transform 'progn) (format "~s"))
  53.            (let ((func (intern (concatenate 'string (string 'drawable-)
  54.                         (string attribute)) 'xlib)))
  55.          `(format t "~%~22a ~?" ',attribute ,format (list (,transform (,func window)))))))
  56.     (with-state (window)
  57.       (when (window-p window)
  58.     (da visual :format "#x~x")
  59.     (da class)
  60.     (da gravity)
  61.     (da bit-gravity)
  62.     (da backing-store)
  63.     (da backing-planes :format "#x~x")
  64.     (da backing-pixel)
  65.     (da save-under)
  66.     (da colormap)
  67.     (da colormap-installed-p)
  68.     (da map-state)
  69.     (da all-event-masks :transform make-event-keys :format "~{~<~%~1:;~s ~>~}")
  70.     (da event-mask :transform make-event-keys :format "~{~<~%~1:;~s ~>~}")
  71.     (da do-not-propagate-mask :transform make-event-keys :format "~{~<~%~1:;~s ~>~}")
  72.     (da override-redirect)
  73.     )
  74.       (dg root)
  75.       (dg depth)
  76.       (dg x)
  77.       (dg y)
  78.       (dg width)
  79.       (dg height)
  80.       (dg border-width)
  81.  
  82.       )))
  83.       
  84. (defun describe-gc (gc)
  85.   (macrolet ((dgc (name &key (transform 'progn) (format "~s"))
  86.            (let ((func (intern (concatenate 'string (string 'gcontext-)
  87.                         (string name)) 'xlib)))
  88.          `(format t "~%~22a ~?" ',name ,format (list (,transform (,func gc)))))))
  89.     (dgc function)
  90.     (dgc plane-mask)
  91.     (dgc foreground)
  92.     (dgc background)
  93.     (dgc line-width)
  94.     (dgc line-style)
  95.     (dgc cap-style)
  96.     (dgc join-style)
  97.     (dgc fill-style)
  98.     (dgc fill-rule)
  99.     (dgc tile)
  100.     (dgc stipple)
  101.     (dgc ts-x)
  102.     (dgc ts-y)
  103.     (dgc font) ;; See below
  104.     (dgc subwindow-mode)
  105.     (dgc exposures)
  106.     (dgc clip-x)
  107.     (dgc clip-y)
  108. ;;    (dgc clip-ordering)
  109.     (dgc clip-mask)
  110.     (dgc dash-offset)
  111.     (dgc dashes)
  112.     (dgc arc-mode)
  113.     ))
  114.  
  115. (defun degree (degrees)
  116.   (* degrees (/ pi 180)))
  117.  
  118. (defun radian (radians)
  119.   (round (* radians (/ 180 pi))))
  120.  
  121. (defun display-refresh (host)
  122.   ;; Useful for when the system writes to the screen (sometimes scrolling!)
  123.   (let ((display (open-display host)))
  124.     (unwind-protect
  125.     (let ((screen (display-default-screen display)))
  126.       (let ((win (create-window :parent (screen-root screen) :x 0 :y 0 :override-redirect :on
  127.                     :width (screen-width screen) :height (screen-height screen)
  128.                     :background (screen-black-pixel screen))))
  129.         (map-window win)
  130.         (display-finish-output display)
  131.         (unmap-window win)
  132.         (destroy-window win)
  133.         (display-finish-output display)))
  134.       (close-display display))))
  135.  
  136. (defun root-tree (host)
  137.   (let ((display (open-display host)))
  138.     (unwind-protect
  139.     (window-tree (screen-root (display-default-screen display)))
  140.       (close-display display)))
  141.   (values))
  142.  
  143. (defun window-tree (window &optional (depth 0))
  144.   ;; Print the window tree and properties starting from WINDOW
  145.   ;; Returns a list of windows in the order that they are printed.
  146.   (declare (arglist window)
  147.        (type window window)
  148.        (values (list window)))
  149.   (let ((props (mapcar #'(lambda (prop)
  150.                (multiple-value-bind (data type format)
  151.                    (get-property window prop)
  152.                  (case type
  153.                    (:string (setq data (coerce data 'string))))
  154.                  (list prop format type data)))
  155.                (list-properties window)))
  156.     (result (list window)))
  157.     (with-state (window)
  158.       (format t "~%~v@t#x~x~20,20t X~3d Y~3d W~4d H~3d ~s" depth (window-id window)
  159.           (drawable-x window) (drawable-y window)
  160.           (drawable-width window) (drawable-height window)
  161.           (window-map-state window)))
  162.     (dolist (prop props)
  163.       (format t "~%~v@t~{~s ~}" (+ depth 2) prop))
  164.     (dolist (w (query-tree window))
  165.       (setq result (nconc result (window-tree w (+ depth 2)))))
  166.     result))
  167.  
  168.