##// END OF EJS Templates
Fix service variables
naryl -
r42:eb403540 default
parent child Browse files
Show More
@@ -1,7 +1,7 b''
1
1
2 # start
2 # start
3 USEHTML=1
3 USEHTML=1
4 BCOLOR = RGB(255, 255, 255)
4 BCOLOR = RGB(200, 200, 200)
5 '<center><font size="20" color="#FF0000" face="Times New Roman"><b>ВСкстовый квСст</b></font></center><br>'
5 '<center><font size="20" color="#FF0000" face="Times New Roman"><b>ВСкстовый квСст</b></font></center><br>'
6 ' <b>Π’Π°ΡˆΠ° Ρ†Π΅Π»ΡŒ</b> - Π·Π°Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ <i>дСньги</i>, ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚ΡŒ Π½Π° Π½ΠΈΡ… <i>ΠΏΠΎΠ΄Π°Ρ€ΠΊΠΈ</i> ΠΈ Π΄Π°Ρ€ΠΈΡ‚ΡŒ своим <i>Π±Π»ΠΈΠ·ΠΊΠΈΠΌ</i>.'
6 ' <b>Π’Π°ΡˆΠ° Ρ†Π΅Π»ΡŒ</b> - Π·Π°Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ <i>дСньги</i>, ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚ΡŒ Π½Π° Π½ΠΈΡ… <i>ΠΏΠΎΠ΄Π°Ρ€ΠΊΠΈ</i> ΠΈ Π΄Π°Ρ€ΠΈΡ‚ΡŒ своим <i>Π±Π»ΠΈΠ·ΠΊΠΈΠΌ</i>.'
7 ACT '<b>ΠΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ</b>':GOTO 'Π”ΠΎΠΌ'
7 ACT '<b>ΠΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ</b>':GOTO 'Π”ΠΎΠΌ'
@@ -35,10 +35,12 b''
35 (resolve)))))
35 (resolve)))))
36 ,@body))))
36 ,@body))))
37
37
38 (defpsmacro define-serv-var (name (slot value &optional index) &body body)
38 (defvar *serv-vars* nil)
39
40 (defpsmacro define-serv-var (name (value &optional index) &body body)
39 (setf name (string-upcase (symbol-name name)))
41 (setf name (string-upcase (symbol-name name)))
42 (pushnew name *serv-vars* :test #'equal)
40 `(setf (getprop serv-vars ,name)
43 `(setf (getprop serv-vars ,name)
41 (create :name ,name
44 (create :name ,name
42 :slot ,slot
43 :body (lambda (,value ,@(when index (list index)))
45 :body (lambda (,value ,@(when index (list index)))
44 ,@body))))
46 ,@body))))
@@ -238,12 +238,24 b''
238 (progn
238 (progn
239 (chain slot (push value))
239 (chain slot (push value))
240 (setf (elt slot index)
240 (setf (elt slot index)
241 (length slot)))))
241 (length slot))))
242 (void))
242
243
243 (defun set-any-element (slot index value)
244 (defun set-any-element (slot index value)
244 (if (numberp index)
245 (cond ((null index)
245 (setf (elt slot index) value)
246 (chain (elt slot) (push value)))
246 (set-str-element slot index value)))
247 ((numberp index)
248 (setf (elt slot index) value))
249 ((stringp index)
250 (set-str-element slot index value))
251 (t (report-error "INTERNAL ERROR")))
252 (void))
253
254 (defun set-serv-var (name index value)
255 (let ((slot (getprop *globals name)))
256 (set-any-element slot index value))
257 (funcall (getprop serv-vars name :body) value index)
258 (void))
247
259
248 (defun get-element (slot index)
260 (defun get-element (slot index)
249 (if (numberp index)
261 (if (numberp index)
@@ -468,21 +480,21 b''
468
480
469 (defvar serv-vars (create))
481 (defvar serv-vars (create))
470
482
471 (define-serv-var backimage (:str path)
483 (define-serv-var $backimage (path)
472 (setf (@ (get-frame :main) style background-image) path))
484 (setf (@ (get-frame :main) style background-image) path))
473
485
474 (define-serv-var bcolor (:num color)
486 (define-serv-var bcolor (color)
475 (setf (@ (get-frame :all) style background-color) (rgb-string color)))
487 (setf (@ (get-frame :all) style background-color) (rgb-string color)))
476
488
477 (define-serv-var fcolor (:num color)
489 (define-serv-var fcolor (color)
478 (setf (@ (get-frame :all) style color) (rgb-string color)))
490 (setf (@ (get-frame :all) style color) (rgb-string color)))
479
491
480 (define-serv-var lcolor (:num color)
492 (define-serv-var lcolor (color)
481 (setf (@ (get-frame :style) inner-text)
493 (setf (@ (get-frame :style) inner-text)
482 (+ "a { color: " (rgb-string color) ";}")))
494 (+ "a { color: " (rgb-string color) ";}")))
483
495
484 (define-serv-var fsize (:num size)
496 (define-serv-var fsize (size)
485 (setf (@ (get-frame :all) style font-size) size))
497 (setf (@ (get-frame :all) style font-size) size))
486
498
487 (define-serv-var fname (:str font-name)
499 (define-serv-var $fname (font-name)
488 (setf (@ (get-frame :all) style font-family) (+ font-name ",serif")))
500 (setf (@ (get-frame :all) style font-family) (+ font-name ",serif")))
@@ -30,12 +30,12 b''
30 (:export #:with-frame #:with-call-args
30 (:export #:with-frame #:with-call-args
31 #:stash-state
31 #:stash-state
32
32
33 #:report-error #:sleep #:init-dom #:call-serv-loc
33 #:report-error #:sleep #:init-dom #:call-serv-loc #:*serv-vars*
34 #:newline #:clear-id #:prepare-contents #:get-id #:set-id #:append-id
34 #:newline #:clear-id #:prepare-contents #:get-id #:set-id #:append-id
35 #:init-args #:get-result #:call-loc #:call-act
35 #:init-args #:get-result #:call-loc #:call-act
36 #:get-frame #:add-text #:get-text #:clear-text #:enable-frame
36 #:get-frame #:add-text #:get-text #:clear-text #:enable-frame
37 #:add-act #:del-act #:clear-act #:update-acts
37 #:add-act #:del-act #:clear-act #:update-acts
38 #:set-str-element #:set-any-element
38 #:set-str-element #:set-any-element #:set-serv-var
39 #:*var #:new-value #:index-num #:get #:set #:kill
39 #:*var #:new-value #:index-num #:get #:set #:kill
40 #:var-real-name #:ensure-var #:var-ref #:get-var #:set-var
40 #:var-real-name #:ensure-var #:var-ref #:get-var #:set-var
41 #:get-array #:set-array #:kill-var #:array-size
41 #:get-array #:set-array #:kill-var #:array-size
@@ -47,7 +47,7 b''
47
47
48 ;;; 1loc
48 ;;; 1loc
49
49
50 (defparameter *service-variables*
50 (defparameter *special-variables*
51 '((usehtml 0)
51 '((usehtml 0)
52 (result 0)
52 (result 0)
53 ($result 0)
53 ($result 0)
@@ -63,7 +63,7 b''
63
63
64 (defpsmacro game ((name) &body body)
64 (defpsmacro game ((name) &body body)
65 (setf body (walker:walk 'for-transform body))
65 (setf body (walker:walk 'for-transform body))
66 (setf *globals* *service-variables*)
66 (setf *globals* *special-variables*)
67 (walker:walk 'globals body)
67 (walker:walk 'globals body)
68 `(progn
68 `(progn
69 ;; Game object
69 ;; Game object
@@ -169,26 +169,29 b''
169 (destructuring-bind (qspvar name index)
169 (destructuring-bind (qspvar name index)
170 var
170 var
171 (declare (ignore qspvar))
171 (declare (ignore qspvar))
172 (setf name (string-upcase name))
172 (let ((slot `(getprop
173 (let ((slot `(getprop
173 ,(if (member name *locals* :key #'first)
174 ,(if (member name *locals* :key #'first)
174 'locals '*globals)
175 'locals '*globals)
175 ,(string-upcase name))))
176 ,name))
177 (index (walker:walk 'apply-vars index))
178 (value (walker:walk 'apply-vars expr)))
176 (cond
179 (cond
180 ((member name api:*serv-vars* :test #'equalp)
181 `(api:set-serv-var ,name ,index ,value))
177 ((null index)
182 ((null index)
178 `(chain (elt ,slot) (push ,expr)))
183 `(chain (elt ,slot) (push ,value)))
179 ((or (numberp index)
184 ((or (numberp index)
180 (variable-number-p index))
185 (variable-number-p index))
181 `(setf (elt ,slot ,index)
186 `(setf (elt ,slot ,index) ,value))
182 ,(walker:walk 'apply-vars expr)))
183 ((or (literal-string-p index)
187 ((or (literal-string-p index)
184 (variable-string-p index))
188 (variable-string-p index))
185 `(api:set-str-element ,slot ,(walker:walk 'apply-vars index)
189 `(api:set-str-element ,slot ,index ,value))
186 ,(walker:walk-continue expr)))
187 (t
190 (t
188 `(api:set-any-element ,slot ,(walker:walk 'apply-vars index)
191 `(api:set-any-element ,slot ,index ,value))))))
189 ,(walker:walk-continue expr)))))))
190
192
191 (walker:deftransform apply-vars local (var &optional expr)
193 (walker:deftransform apply-vars local (var &optional expr)
194 ;; TODO: var can't be a service variable
192 (when expr
195 (when expr
193 (walker:walk 'apply-vars (list 'set var expr))))
196 (walker:walk 'apply-vars (list 'set var expr))))
194
197
@@ -365,7 +368,7 b''
365 ;;; 22for
368 ;;; 22for
366
369
367 ;; Transform because it creates a (set ...) hence it has to be processed
370 ;; Transform because it creates a (set ...) hence it has to be processed
368 ;; before the apply-vars transform. And macros are processed *after* all
371 ;; before the apply-vars transform. And macros are processed after all
369 ;; the transforms
372 ;; the transforms
370 (walker:deftransform for-transform qspfor (var from to step &rest body)
373 (walker:deftransform for-transform qspfor (var from to step &rest body)
371 `(loop :for i :from ,from :to ,to :by ,step
374 `(loop :for i :from ,from :to ,to :by ,step
General Comments 0
You need to be logged in to leave comments. Login now