##// END OF EJS Templates
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN

File last commit:

r25:4adc2646 default
r25:4adc2646 default
Show More
intrinsics.ps
301 lines | 6.9 KiB | application/postscript | PostScriptLexer
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (in-package sugar-qsp.lib)
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Tutorial game works!
r6 ;;;; Functions and procedures defined by the QSP language.
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1 ;;;; They can call api and deal with locations and other data directly.
;;;; Except vars. Use VAR and SET or GET-VAR and SET-VAR api calls.
;;; 1loc
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun goto (target args)
(api:clear-text :main)
(funcall xgoto target (or args (list)))
Properly handle stringly-indexed arrays
r16 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun xgoto (target args)
(api:clear-act)
(setf (root current-location) (chain target (to-upper-case)))
(api:stash-state args)
(funcall (getprop (root locs) (root current-location))
Properly handle stringly-indexed arrays
r16 (or args (list)))
(values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
;;; 2var
;;; 3expr
;;; 4code
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun rand (a &optional (b 1))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1 (let ((min (min a b))
(max (max a b)))
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (+ min (chain *math (random (- max min))))))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
;;; 5arrays
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun copyarr (to from start count)
Properly handle stringly-indexed arrays
r16 (multiple-value-bind (to-name to-slot)
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (api:var-real-name to)
Properly handle stringly-indexed arrays
r16 (multiple-value-bind (from-name from-slot)
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (api:var-real-name from)
(for ((i start))
((< i (min (api:array-size from-name)
(+ start count))))
((incf i))
(api:set-var to-name (+ start i) to-slot
(api:get-var from-name (+ start i) from-slot))))))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun arrpos (name value &optional (start 0))
Properly handle stringly-indexed arrays
r16 (multiple-value-bind (real-name slot)
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (api:var-real-name name)
(for ((i start)) ((< i (api:array-size name))) ((incf i))
(when (eq (api:get-var real-name i slot) value)
(return-from arrpos i))))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1 -1)
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun arrcomp (name pattern &optional (start 0))
Properly handle stringly-indexed arrays
r16 (multiple-value-bind (real-name slot)
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (api:var-real-name name)
(for ((i start)) ((< i (api:array-size name))) ((incf i))
(when (funcall (getprop (api:get-var real-name i slot) 'match) pattern)
(return-from arrcomp i))))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1 -1)
;;; 6str
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun instr (s subs &optional (start 1))
(+ start (chain s (substring (- start 1)) (search subs))))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun isnum (s)
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1 (if (is-na-n s)
0
-1))
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun strcomp (s pattern)
(if (chain s (match pattern))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1 -1
0))
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun strfind (s pattern group)
(let* ((re (new (*reg-exp pattern)))
(match (chain re (exec s))))
(chain match (group group))))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun strpos (s pattern &optional (group 0))
(let* ((re (new (*reg-exp pattern)))
(match (chain re (exec s)))
(found (chain match (group group))))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1 (if found
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (chain s (search found))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1 0)))
;;; 7if
Menu, game saving
r11 ;; Has to be a function because it always evaluates all three of its
;; arguments
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun iif (cond-expr then-expr else-expr)
Menu, game saving
r11 (if cond-expr then-expr else-expr))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
;;; 8sub
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun gosub (target &rest args)
(funcall (getprop (root locs) target) args)
Properly handle stringly-indexed arrays
r16 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun func (target &rest args)
(funcall (getprop (root locs) target) args))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
;;; 9loops
;;; 10dynamic
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun dynamic (block &rest args)
Finishing lib
r20 (when (stringp block)
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (api:report-error "DYNAMIC can't evaluate arbitrary strings.\nUse {braces} to create blocks for DYNAMIC."))
(api:with-call-args args
(funcall block args))
Properly handle stringly-indexed arrays
r16 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun dyneval (block &rest args)
Finishing lib
r20 (when (stringp block)
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (api:report-error "DYNEVAL can't evaluate arbitrary strings.\nUse {braces} to create blocks for DYNEVAL."))
(api:with-call-args args
(funcall block args)))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
;;; 11main
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun main-p (s)
(api:add-text :main s)
Menu, game saving
r11 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun main-pl (s)
(api:add-text :main s)
(api:newline :main)
Menu, game saving
r11 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun main-nl (s)
(api:newline :main)
(api:add-text :main s)
Menu, game saving
r11 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun maintxt (s)
(api:get-text :main)
Menu, game saving
r11 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Menu, game saving
r11 ;; For clarity (it leaves a lib.desc() call in JS)
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun desc (s)
Use flex in html
r10 "")
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun main-clear ()
(api:clear-text :main)
Menu, game saving
r11 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Tutorial game works!
r6 ;;; 12stat
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun stat-p (s)
(api:add-text :stat s)
Menu, game saving
r11 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun stat-pl (s)
(api:add-text :stat s)
(api:newline :stat)
Menu, game saving
r11 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun stat-nl (s)
(api:newline :stat)
(api:add-text :stat s)
Menu, game saving
r11 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun stattxt (s)
(api:get-text :stat)
Menu, game saving
r11 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun stat-clear ()
(api:clear-text :stat)
Menu, game saving
r11 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun cls ()
(stat-clear)
(main-clear)
(cla)
(cmdclear)
Menu, game saving
r11 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
;;; 13diag
;;; 14act
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun curacts ()
Menu, game saving
r11 (let ((acts (root acts)))
(lambda ()
(setf (root acts) acts)
(values))))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
;;; 15objs
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun addobj (name)
(chain (root objs) (push name))
(api:update-objs)
Menu, game saving
r11 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun delobj (name)
(let ((index (chain (root objs) (index-of name))))
Tutorial game works!
r6 (when (> index -1)
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (killobj (1+ index))))
Menu, game saving
r11 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun killobj (&optional (num nil))
Sounds, save/load UI buttons
r12 (if (eq nil num)
(setf (root objs) (list))
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (chain (root objs) (splice (1- num) 1)))
(api:update-objs)
Menu, game saving
r11 (values))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
;;; 16menu
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun menu (menu-name)
Menu, game saving
r11 (let ((menu-data (list)))
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (loop :for item :in (api:get-array (api:var-real-name menu-name))
Menu, game saving
r11 :do (cond ((string= item "")
(break))
((string= item "-:-")
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (chain menu-data (push :delimiter)))
Menu, game saving
r11 (t
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (let* ((tokens (chain item (split ":"))))
Menu, game saving
r11 (when (= (length tokens) 2)
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (chain tokens (push "")))
(let* ((text (chain tokens (splice 0 (- (length tokens) 2)) (join ":")))
(loc (getprop tokens (- (length tokens) 2)))
(icon (getprop tokens (- (length tokens) 1))))
(chain menu-data
(push (create text text
loc loc
icon icon))))))))
(api:menu menu-data)
Menu, game saving
r11 (values)))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
;;; 17sound
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun play (filename &optional (volume 100))
(let ((audio (new (*audio filename))))
(setf (getprop (root playing) filename) audio)
(setf (@ audio volume) (* volume 0.01))
(chain audio (play))))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun close (filename)
Sounds, save/load UI buttons
r12 (funcall (root playing filename) stop)
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (delete (root playing filename)))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun closeall ()
(loop :for k :in (chain *object (keys (root playing)))
:for v := (getprop (root playing) k)
Sounds, save/load UI buttons
r12 :do (funcall v stop))
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (setf (root playing) (create)))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
;;; 18img
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun refint ()
Some DOM stuff, VIEW
r18 ;; "Force interface update" Uh... what exactly do we do here?
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (api:report-error "REFINT is not supported")
Some DOM stuff, VIEW
r18 )
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
;;; 19input
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun usertxt ()
(let ((input (by-id "qsp-input")))
(@ input value)))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun cmdclear ()
(let ((input (by-id "qsp-input")))
(setf (@ input value) "")))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun input (text)
(chain window (prompt text)))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
;;; 20time
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun msecscount ()
(- (chain *date (now)) (root started-at)))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Locals
r14 ;;; 21local
Some DOM stuff, VIEW
r18 ;;; 22for
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1 ;;; misc
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun rgb (red green blue)
Bugfixes
r22 (flet ((rgb-to-hex (comp)
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (let ((hex (chain (*number comp) (to-string 16))))
Bugfixes
r22 (if (< (length hex) 2)
(+ "0" hex)
hex))))
(+ "#" (rgb-to-hex red) (rgb-to-hex green) (rgb-to-hex red))))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun openqst ()
(api:report-error "OPENQST is not supported."))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun addqst ()
(api:report-error "ADDQST is not supported. Bundle the library with the main game."))
100% parser, 100% macros, 50% intrinsics, 10% api, 0% misc
r1
Use Parenscript's minifier and obfuscator... and namespaces. SAVES CURRENTLY BROKEN
r25 (defun killqst ()
(api:report-error "KILLQST is not supported."))