/usr/share/common-lisp/source/clx/xinerama.lisp is in cl-clx-sbcl 0.7.4-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | ;;; -*- Mode: Lisp -*-
;;;
;;; Copyright (C) 2008, Julian Stecklina
;;;
;;; ((
;;; )) This file is COFFEEWARE. As long as you retain this notice
;;; | |o) you can do whatever you want with this code. If you think,
;;; |___|jgs it's worth it, you may buy the author a coffee in return.
;;;
;;; Description:
;;;
;;; This is an implementation of the XINERAMA extension. It does not
;;; include the obsolete PanoramiX calls.
(defpackage "XLIB.XINERAMA"
(:use "COMMON-LISP" "XLIB")
(:nicknames "XINERAMA")
(:import-from "XLIB"
"WITH-BUFFER-REQUEST"
"WITH-BUFFER-REQUEST-AND-REPLY"
"DATA"
"BOOLEAN" "BOOLEAN-GET"
"CARD8" "CARD8-GET"
"CARD16" "CARD16-GET"
"CARD32" "CARD32-GET"
"INT16" "INT16-GET")
(:export "SCREEN-INFO"
"SCREEN-INFO-NUMBER"
"SCREEN-INFO-X"
"SCREEN-INFO-Y"
"SCREEN-INFO-WIDTH"
"SCREEN-INFO-HEIGHT"
"XINERAMA-QUERY-VERSION"
"XINERAMA-IS-ACTIVE"
"XINERAMA-QUERY-SCREENS"))
(in-package "XINERAMA")
(define-extension "XINERAMA")
(defun xinerama-opcode (display)
(extension-opcode display "XINERAMA"))
(defconstant +major-version+ 1)
(defconstant +minor-version+ 1)
(defconstant +get-version+ 0)
(defconstant +get-state+ 1)
(defconstant +get-screen-count+ 2)
(defconstant +get-screen-size+ 3)
(defconstant +is-active+ 4)
(defconstant +query-screens+ 5)
(defstruct screen-info
(number 0 :type (unsigned-byte 32))
(x 0 :type (signed-byte 16))
(y 0 :type (signed-byte 16))
(width 0 :type (unsigned-byte 16))
(height 0 :type (unsigned-byte 16)))
(defun xinerama-query-version (display)
(with-buffer-request-and-reply (display (xinerama-opcode display) nil)
((data +get-version+)
(card8 +major-version+)
(card8 +minor-version+))
(values
(card16-get 8) ; server major version
(card16-get 10)))) ; server minor version
(defun xinerama-is-active (display)
"Returns T, iff Xinerama is supported and active."
(with-buffer-request-and-reply (display (xinerama-opcode display) nil)
((data +is-active+))
(values
;; XCB says this is actually a CARD32, but why?!
(boolean-get 8))))
(defun xinerama-query-screens (display)
"Returns a list of screen-info structures."
(with-buffer-request-and-reply (display (xinerama-opcode display) nil)
((data +query-screens+))
(values
(loop
with index = 32
for number from 0 below (card32-get 8)
collect (prog1
(make-screen-info :number number
:x (int16-get index)
:y (int16-get (+ index 2))
:width (card16-get (+ index 4))
:height (card16-get (+ index 6)))
(incf index 8))))))
;;; EOF
|