;;;; This file is part of cl-ncurses, an ncurses interface for Common Lisp, ;;;; Copyright (c) 2004 Marcelo Ramos ;;;; ;;;; Permission is hereby granted, free of charge, to any person obtaining ;;;; a copy of this software and associated documentation files (the ;;;; "Software"), to deal in the Software without restriction, including ;;;; without limitation the rights to use, copy, modify, merge, publish, ;;;; distribute, sublicense, and/or sell copies of the Software, and to ;;;; permit persons to whom the Software is furnished to do so, subject to ;;;; the following conditions: ;;;; ;;;; The above copyright notice and this permission notice shall be included ;;;; in all copies or substantial portions of the Software. ;;;; ;;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ;;;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ;;;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ;;;; IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ;;;; CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ;;;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ;;;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ;;;;;;;;;;; ;; GETYX ;; ;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Routines: getyx, getparyx, getbegyx, getmaxyx ;; ;; Purpose: Get curses cursor and window coordinates. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (in-package :cl-ncurses) (export '(getyx getparyx getbegyx getmaxyx get-yx get-paryx get-begyx get-maxyx)) ; C Prototype: void getyx(WINDOW *win, int y, int x); ; C Prototype: void getparyx(WINDOW *win, int y, int x); ; C Prototype: void getbegyx(WINDOW *win, int y, int x); ; C Prototype: void getmaxyx(WINDOW *win, int y, int x); (def-struct result (x :int) (y :int)) (defmacro getyx (win y x) `(let ((r (allocate-foreign-object 'result))) (unwind-protect (progn (wrap-getyx ,win r) (setf ,x (get-slot-value r 'result 'x)) (setf ,y (get-slot-value r 'result 'y))) (free-foreign-object r)))) (defun get-yx (win) (let (x y) (getyx win x y) (values x y))) (defmacro getparyx (win y x) `(let ((r (allocate-foreign-object 'result))) (unwind-protect (progn (wrap-getparyx ,win r) (setf ,x (get-slot-value r 'result 'x)) (setf ,y (get-slot-value r 'result 'y))) (free-foreign-object r)))) (defun get-paryx (win) (let (x y) (getparyx win x y) (values x y))) (defmacro getbegyx (win y x) `(let ((r (allocate-foreign-object 'result))) (unwind-protect (progn (wrap-getbegyx ,win r) (setf ,x (get-slot-value r 'result 'x)) (setf ,y (get-slot-value r 'result 'y))) (free-foreign-object r)))) (defun get-begyx (win) (let (x y) (getbegyx win x y) (values x y))) (defmacro getmaxyx (win y x) `(let ((r (allocate-foreign-object 'result))) (unwind-protect (progn (wrap-getmaxyx ,win r) (setf ,x (get-slot-value r 'result 'x)) (setf ,y (get-slot-value r 'result 'y))) (free-foreign-object r)))) (defun get-maxyx (win) (let (x y) (getmaxyx win x y) (values x y)))