##// END OF EJS Templates
Fix
Fix

File last commit:

r67:d0477458 default
r67:d0477458 default
Show More
intrinsic-macros.lisp
166 lines | 2.6 KiB | text/x-common-lisp | CommonLispLexer
/ src / intrinsic-macros.lisp
(in-package txt2web.lib)
;;;; Macros implementing some intrinsics where it makes sense
;;;; E.g. an equivalent JS function exists, or it's a direct API call
;;; 1loc
;;; 2var
(defpsmacro killvar (&optional varname index)
`(api-call kill-var ,varname ,index))
(defpsmacro killall ()
`(progn
(killvar)
(killobj)))
;;; 3expr
(defpsmacro no (arg)
`(- -1 ,arg))
;;; 4code
(defpsmacro qspver ()
"0.0.1")
(defpsmacro curloc ()
`*current-location)
(defpsmacro rnd ()
`(funcall rand 1 1000))
(defpsmacro qspmax (&rest args)
(if (= 1 (length args))
`(*math.max.apply nil ,@args)
`(*math.max ,@args)))
(defpsmacro qspmin (&rest args)
(if (= 1 (length args))
`(*math.min.apply nil ,@args)
`(*math.min ,@args)))
;;; 5arrays
(defpsmacro arrsize (name)
`(api-call array-size ,name))
;;; 6str
(defpsmacro len (s)
`(length ,s))
(defpsmacro mid (s from &optional count)
`(chain ,s (substring ,from ,count)))
(defpsmacro ucase (s)
`(chain ,s (to-upper-case)))
(defpsmacro lcase (s)
`(chain ,s (to-lower-case)))
(defpsmacro trim (s)
`(chain ,s (trim)))
(defpsmacro qspreplace (s from to)
`(chain ,s (replace ,from ,to)))
(defpsmacro val (s)
`(parse-int ,s 10))
(defpsmacro qspstr (n)
`(chain ,n (to-string)))
;;; 7if
;;; 8sub
;;; 9loops
;; JUMP is in ps-macros.lisp (because it's a part of a huge kludge)
(defpsmacro exit ()
`(return-from nil (values)))
;;; 10dynamic
;;; 11main
(defpsmacro desc (s)
(declare (ignore s))
"")
;;; 12stat
(defpsmacro showstat (enable)
`(api-call enable-frame :stat ,enable))
;;; 13diag
(defpsmacro msg (text)
`(alert ,text))
;;; 14act
(defpsmacro showacts (enable)
`(api-call enable-frame :acts ,enable))
(defpsmacro delact (&optional name)
(if name
`(api-call del-act ,name)
`(api-call del-act)))
(defpsmacro cla ()
`(api-call clear-act))
;;; 15objs
(defpsmacro showobjs (enable)
`(api-call enable-frame :objs ,enable))
(defpsmacro countobj ()
`(length *objs))
(defpsmacro getobj (index)
`(or (elt *objs ,index) ""))
;;; 16menu
;;; 17sound
(defpsmacro isplay (filename)
`(funcall (@ playing includes) ,filename))
;;; 18img
(defpsmacro view (&optional path)
`(api-call show-image ,path))
;;; 19input
(defpsmacro showinput (enable)
`(api-call enable-frame :input ,enable))
;;; 20time
(defpsmacro wait (msec)
`(await (api-call sleep ,msec)))
(defpsmacro settimer (interval)
`(api-call set-timer ,interval))
;;; 21local
;;; 22for
;;; misc
(defpsmacro opengame (&optional filename)
(declare (ignore filename))
`(api-call opengame))
(defpsmacro savegame (&optional filename)
(declare (ignore filename))
`(api-call savegame))