root/lang/commonlisp/cl-win32ole/trunk/api/invoke.lisp @ 10948

Revision 10948, 0.9 kB (checked in by quek, 5 years ago)

lang/commonlisp/cl-win32ole/trunk import.

Line 
1(in-package :cl-win32ole)
2
3(defun split-ole-args (args &optional acc)
4  (if (endp args)
5      (progn
6        (when (consp (car acc))
7          (setf (car acc) (reverse (car acc))))
8        (reverse acc))
9      (progn
10        (if (symbolp (car args))
11            (progn
12              (when (consp (car acc))
13                (setf (car acc) (reverse (car acc))))
14              (push (list (car args)) acc))
15            (push (car args) (car acc)))
16        (split-ole-args (cdr args) acc))))
17
18(defun ole (dispatch &rest args)
19  (let ((ole-args (split-ole-args args))
20        (result dispatch))
21    (dolist (i ole-args result)
22      (setf result (apply #'invoke result i)))))
23
24(defun (setf ole) (new-value dispatch &rest args)
25  (let* ((butlast (butlast args))
26         (last (last args))
27         (object (apply #'ole dispatch butlast)))
28    (apply #'property object (car last) (list new-value))))
Note: See TracBrowser for help on using the browser.