diff -Nru picolisp-16.12/app/loc/fr picolisp-17.6/app/loc/fr --- picolisp-16.12/app/loc/fr 1970-01-01 00:00:00.000000000 +0000 +++ picolisp-17.6/app/loc/fr 2017-03-03 11:08:16.000000000 +0000 @@ -0,0 +1,79 @@ +# 02mar17abu +# Raman Gopalan + +"(@1 Positions)" "(@1 Situations)" + +"Address" "Adresse" + +"Can't print order" "Impossible d'imprimer la commande" +"Change" "Changer" +"City" "Ville" +"Contact" "Contact" +"Continued on page @1" "Suite à la page @1" +"Country" "Pays" +"Customer" "Client" +"Customer/Supplier" "Client/Fournisseur" +"Customers/Suppliers" "Clients/Fournisseurs" + +"Data" "Données" +"Date" "Date" +"Dear Sir or Madam," "Cher Monsieur/Chère Madame," +"Description" "Description" + +"EMail" "Courriel " + +"Fax" "Fax" + +"Greeting" "Salutation" + +"Home" "Accueil" + +"Incomplete customer address" "Adresse du client incomplète" +"Install" "Installer" +"Inventory" "Inventaire" +"Item" "Article" +"Items" "Articles" + +"Memo" "Note" +"Mobile" "Portable" + +"Name 2" "Nom 2" +"No customer" "Aucun client" +"No customer name" "Aucun nom de client" +"No customer number" "Aucun numéro de client" +"No item description" "Aucune description d'article" +"No item number" "Aucun numéro d'article" +"No order date" "Aucune date de commande" +"No order number" "Aucun numéro de commande" +"No positions" "Pas de situation" +"Number" "Nombre" + +"Order" "Commande" +"Orders" "Commandes" + +"Page @1" "Page @1" +"PDF-Print" "Impression PDF" +"Picture" "Photo" +"Position without item" "Situation sans article" +"Position without price" "Situation sans prix" +"Position without quantity" "Situation sans quantité" +"Price" "Prix" + +"Quantity" "Quantité" + +"Report" "Rapport" + +"Sales" "Ventes" +"Salutation" "Salutation" +"Salutations" "Salutations" +"Sex" "Sexe" +"Street" "Rue" +"Supplier" "Fournisseur" +"System" "Système" + +"Total" "Total" + +"Uninstall" "Désinstaller" +"Uninstall Picture?" "Désinstaller l'image?" + +"Zip" "Code postal" diff -Nru picolisp-16.12/app/main.l picolisp-17.6/app/main.l --- picolisp-16.12/app/main.l 2016-08-29 09:46:37.000000000 +0000 +++ picolisp-17.6/app/main.l 2017-03-02 18:14:13.000000000 +0000 @@ -1,4 +1,4 @@ -# 29aug16abu +# 02mar17abu # (c) Software Lab. Alexander Burger (allowed ("app/") @@ -35,6 +35,7 @@ ("Deutsch (CH)" "CH" . "ch") ("Español (AR)" "AR" . "ar") ("Español (ES)" "ES" . "es") + ("Français (FR)" "FR" . "fr") ("λληνικά (GR)" "GR" . "gr") ("Norsk" "NO" . "no") ("Русский" "RU" . "ru") diff -Nru picolisp-16.12/bin/pilIndent picolisp-17.6/bin/pilIndent --- picolisp-16.12/bin/pilIndent 2016-11-24 10:55:37.000000000 +0000 +++ picolisp-17.6/bin/pilIndent 2017-01-24 15:48:33.000000000 +0000 @@ -1,5 +1,5 @@ #!/usr/bin/picolisp /usr/lib/picolisp/lib.l -# 24nov16abu +# 24jan17abu (let Lst (mapcar @@ -18,7 +18,7 @@ ("\\" (++ L)) ("\"" (onOff Str)) ("#" (or Str (= "{" (cadr L)) (off L))) - ("}" (and (= "#" (cadr L)) (setq L (cddr L)))) + ("}" (and (= "#" (cadr L)) (++ L))) ("(" (or Str (inc 'N 3))) (")" (or Str (dec 'N 3))) ("[" diff -Nru picolisp-16.12/CHANGES picolisp-17.6/CHANGES --- picolisp-16.12/CHANGES 2016-12-08 09:13:42.000000000 +0000 +++ picolisp-17.6/CHANGES 2017-06-29 05:16:23.000000000 +0000 @@ -1,3 +1,19 @@ +* 29jun17 picoLisp-17.6 + 'ssl' and 'download' functions + '+TreeChart' GUI class + 'step' stores the key in '@@' + Optional 'flg' argument for 'delete', 'delq' and 'del' + Bug in 'ssl', needs SSL_clear() + Bug in case conversions for TOP character + "Edit" button in 'repl' + Added "lib/gis.l" and "lib/android.l" + Namespace chaining instead of merging + Disable '+Focus' on touch devices + Incorrect usage of 'ctl' in 'rc' and 'acquire' + Bug in 'port' in pil64 + 'tzo' function + 'expDat' accepts "." and "+/-" for "today" + * 08dec16 picoLisp-16.12 'T' result specification for 'native' '++' function diff -Nru picolisp-16.12/debian/changelog picolisp-17.6/debian/changelog --- picolisp-16.12/debian/changelog 2016-12-11 07:31:05.000000000 +0000 +++ picolisp-17.6/debian/changelog 2017-07-11 23:15:16.000000000 +0000 @@ -1,3 +1,12 @@ +picolisp (17.6-1) unstable; urgency=medium + + * New upstream version 17.6 + * Refresh patches + * debian/control: Bump Standards-Version to 4.0.0. + Updated copyright-format url. No other changes needed. + + -- Kan-Ru Chen (陳侃如) Wed, 12 Jul 2017 07:15:16 +0800 + picolisp (16.12-1) unstable; urgency=medium * New upstream version 16.12 diff -Nru picolisp-16.12/debian/control picolisp-17.6/debian/control --- picolisp-16.12/debian/control 2016-12-11 07:09:25.000000000 +0000 +++ picolisp-17.6/debian/control 2017-07-11 23:02:56.000000000 +0000 @@ -3,7 +3,7 @@ Priority: optional Maintainer: Kan-Ru Chen (陳侃如) Build-Depends: debhelper (>= 7.0.50~), dpkg-dev (>= 1.18.11~), libssl-dev, default-jdk -Standards-Version: 3.9.8 +Standards-Version: 4.0.0 Homepage: http://picolisp.com/ Vcs-Git: git://anonscm.debian.org/collab-maint/picolisp.git Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/picolisp.git;a=summary diff -Nru picolisp-16.12/debian/copyright picolisp-17.6/debian/copyright --- picolisp-16.12/debian/copyright 2016-12-11 07:09:25.000000000 +0000 +++ picolisp-17.6/debian/copyright 2017-07-11 23:06:47.000000000 +0000 @@ -1,4 +1,4 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: picolisp Source: http://software-lab.de/down.html diff -Nru picolisp-16.12/debian/patches/0001-picolisp_build_on_multi_cpu.patch picolisp-17.6/debian/patches/0001-picolisp_build_on_multi_cpu.patch --- picolisp-16.12/debian/patches/0001-picolisp_build_on_multi_cpu.patch 2016-12-11 07:09:25.000000000 +0000 +++ picolisp-17.6/debian/patches/0001-picolisp_build_on_multi_cpu.patch 2017-07-11 22:59:48.000000000 +0000 @@ -103,10 +103,10 @@ diff --git a/src64/Makefile b/src64/Makefile -index 53d2ac9..2da2354 100644 +index 7b4a436..229e8ba 100644 --- a/src64/Makefile +++ b/src64/Makefile -@@ -46,6 +46,50 @@ FMT = .c +@@ -47,6 +47,50 @@ FMT = .c ARCH = emu STRIP = : @@ -157,7 +157,7 @@ ifeq ($(UNAME), Linux) OS = Linux ifeq ($(MACHINE), arm64) -@@ -106,6 +150,8 @@ else +@@ -110,6 +154,8 @@ else endif endif @@ -166,7 +166,7 @@ baseFiles = version.l glob.l main.l \ gc.l apply.l flow.l sym.l subr.l big.l io.l db.l net.l err.l -@@ -145,7 +191,7 @@ $(lib)/ht: $(ARCH)$(SYS).ht.o +@@ -149,7 +195,7 @@ $(lib)/ht: $(ARCH)$(SYS).ht.o ### Compile ### sysdefs: sysdefs.c diff -Nru picolisp-16.12/debian/patches/0002-picolisp_fix_shbang_path.patch picolisp-17.6/debian/patches/0002-picolisp_fix_shbang_path.patch --- picolisp-16.12/debian/patches/0002-picolisp_fix_shbang_path.patch 2016-12-11 07:09:25.000000000 +0000 +++ picolisp-17.6/debian/patches/0002-picolisp_fix_shbang_path.patch 2017-07-11 22:59:48.000000000 +0000 @@ -64,13 +64,13 @@ # *Port *Sock *Name diff --git a/misc/mailing b/misc/mailing -index 1c71e3c..500df55 100755 +index 3311aff..8b4cc15 100755 --- a/misc/mailing +++ b/misc/mailing @@ -1,4 +1,4 @@ -#!bin/picolisp lib.l +#!/usr/bin/picolisp /usr/lib/picolisp/lib.l - # 17jul14abu + # 19apr17abu # (c) Software Lab. Alexander Burger diff --git a/src/mkVers b/src/mkVers diff -Nru picolisp-16.12/debian/patches/0003-picolisp_reproducible_build.patch picolisp-17.6/debian/patches/0003-picolisp_reproducible_build.patch --- picolisp-16.12/debian/patches/0003-picolisp_reproducible_build.patch 2016-12-11 07:09:25.000000000 +0000 +++ picolisp-17.6/debian/patches/0003-picolisp_reproducible_build.patch 2017-07-11 22:59:48.000000000 +0000 @@ -8,7 +8,7 @@ 1 file changed, 1 deletion(-) diff --git a/src64/lib/asm.l b/src64/lib/asm.l -index 38f3a45..aba0d29 100644 +index 1d4a772..b106872 100644 --- a/src64/lib/asm.l +++ b/src64/lib/asm.l @@ -52,7 +52,6 @@ diff -Nru picolisp-16.12/debian/patches/0006-dont_use_system_picolisp_to_bootstrap.patch picolisp-17.6/debian/patches/0006-dont_use_system_picolisp_to_bootstrap.patch --- picolisp-16.12/debian/patches/0006-dont_use_system_picolisp_to_bootstrap.patch 2016-12-11 07:09:25.000000000 +0000 +++ picolisp-17.6/debian/patches/0006-dont_use_system_picolisp_to_bootstrap.patch 2017-07-11 22:59:48.000000000 +0000 @@ -4,16 +4,16 @@ Subject: dont_use_system_picolisp_to_bootstrap --- - src64/mkAsm | 10 +--------- - 1 file changed, 1 insertion(+), 9 deletions(-) + src64/mkAsm | 13 +------------ + 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src64/mkAsm b/src64/mkAsm -index 53b81c7..288a5af 100755 +index 422d218..67c1de8 100755 --- a/src64/mkAsm +++ b/src64/mkAsm -@@ -1,14 +1,6 @@ +@@ -1,17 +1,6 @@ #!/bin/sh - # 08jun11abu + # 14dec16abu -if test -x /usr/bin/picolisp -then @@ -21,8 +21,11 @@ -elif test -x ../bin/picolisp -then - ../pil mkAsm.l "$@" --else +-elif which java >/dev/null +-then - ../ersatz/pil mkAsm.l "$@" +-else +- echo "No PicoLisp binary found for bootstrapping" -fi +../ersatz/pil mkAsm.l "$@" diff -Nru picolisp-16.12/doc/app.html picolisp-17.6/doc/app.html --- picolisp-16.12/doc/app.html 2016-02-27 10:34:31.000000000 +0000 +++ picolisp-17.6/doc/app.html 2017-01-23 11:23:22.000000000 +0000 @@ -6,7 +6,7 @@ - abu@software-lab.de
+ abu@software-lab.de
mattias.sun@gmail.com

PicoLisp Application Development

@@ -2205,7 +2205,7 @@ dialog popped up, it will fall back, and the form will be POSTed in the normal way. -

Thus it makes no sense to use the Thus it makes no sense to use the +JS prefix for buttons that cause a change of the HTML code, open a dialog, or jump to another page. In such cases, overall performance will even be worse, because the XMLHttpRequest is tried first (but @@ -2555,7 +2555,7 @@ ######################################################################## (de choCuSu (Dst) (diaform '(Dst) - ( "--.-.-." + (<grid> "--.-.-." # Form components ... ) (gui 'query '(+QueryChart) (cho) @@ -2565,11 +2565,11 @@ (<table> 'chart (choTtl ,"Customers/Suppliers" 'nr '+CuSu) # Table headers (do (cho) - ( (alternating) + (<row> (alternating) (gui 1 '(+DstButton) Dst) ... (gui 9 '(+TelField)) ) ) ) - ( + (<spread> (scroll (cho)) (newButton T Dst '(+CuSu) ...) (cancelButton) ) ) ) diff -Nru picolisp-16.12/doc/ChangeLog picolisp-17.6/doc/ChangeLog --- picolisp-16.12/doc/ChangeLog 2016-12-05 12:13:10.000000000 +0000 +++ picolisp-17.6/doc/ChangeLog 2017-06-28 04:59:13.000000000 +0000 @@ -1,3 +1,460 @@ +28jun17 + Avoid "push S" + src64/big.l + pilos/src/big.l + +26jun17 + Minor register size change + src64/arch/arm64.l + +24jun17 + Call shell in 'repl' + lib/form.l + Minor initialization changes + lib/android.l + +23jun17 + Unlink pipes before creation + lib/android.l + +22jun17 + Minor local declaration + lib/android.l + +20jun17 + Added 'zxing?' checking for QR-Code scanner + lib/android.l + Document volatile properties + doc/ref.html + "Call" button in 'repl' + lib/form.l + +18jun17 + 'ssl' and 'download' functions + lib/misc.l + doc/refD.html + doc/refS.html + +16jun17 + Minor ref fixes for 'pool', 'dbSync' and 'lock' + doc/refP.html + doc/refD.html + doc/refL.html + +15jun17 + 'update', 'update?' and 'location?' functions + Renamed 'hasCamera' to 'camera?' + lib/android.l + +13jun17 + Added a note in the reference of 'later' about 'rd' and 'pr', in response to + https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=857277 + doc/refL.html + +06jun17 + 'lat' and 'lon' functions + lib/gis.l + Minor fix to 'idForm', needs (fin "Var") + lib/form.l + +03jun17 + "See also" link to 'swap' + doc/refS.html + +01jun17 + '+TreeChart' GUI class + lib/form.l + +31may17 + 'step' stores the key in '@@' + lib/btree.l + doc/refS.html + +30may17 + Rename 'val' property in '+Radio' to 'rad' + lib/form.l + +26may17 + "name=" optional in 'mail' + lib/misc.l + +16may17 + Wrong charset in "Saint-Exupéry" + doc/form/form.html + +14may17 + Typos in reference (Nehal Singhal) + doc/form/form.html + doc/form/refC.html + doc/form/refD.html + doc/form/refF.html + doc/form/refI.html + doc/form/refO.html + doc/form/refQ.html + doc/form/refR.html + doc/form/refS.html + +11may17 + Minor typo + doc/refA.html + +06may17 + Missing line + loc/es + +04may17 + Omit "./" in "src64/tags" + src64/lib/asm.l + +02may17 + Removed 'cut>' and 'paste>' from '+Chart' + lib/form.l + +01may17 + Hint filename in 'repl' + lib/form.l + +30apr17 + Wrong '@' value in 'repl' + lib/form.l + +28apr17 + Fix hook for '+ObjVal' + lib/form.l + +24apr17 + Handle hook for '+ObjVal', and for 'Fld' in 'choDlg' + lib/form.l + +21apr17 + Pass hook to 'panel' + lib/form.l + +20apr17 + Evaluate 'objHook' in '(hint> . +Obj)' + lib/form.l + +19apr17 + Fixes for the mail header parser by Rowan Thorpe + misc/mailing + +18apr17 + Add '@' to the '*Run' reference + doc/refR.html + +12apr17 + Use "302 Found" instead of "301 Moved Permanently" in 'httpGate' + src/httpGate.c + +07apr17 + Simplification of 'delete' etc. + {src64,pilos/src}/subr.l + {src64,pilos/src}/sym.l + +05apr17 + Optional 'flg' argument also for 'del' + {src64,pilos/src}/subr.l + {src64,pilos/src}/sym.l + {src,mini/src}/subr.c + {src,mini/src}/sym.c + doc/refD.html + test/src/sym.l + Revert httpGate (without SSL_shutdown()) + src/httpGate.c + +04apr17 + Minor fix in 'genKey', make 'ubZval' non-destructive + pilos/init/lib/db.l + Delete multiple list elements in '(del> . +List)' + {lib,mini/lib,pilos/init/lib}/db.l + Optional 'flg' argument for 'delete' and 'delq' + {src64,pilos/src}/subr.l + {src,mini/src}/subr.c + ersatz/fun.src + doc/refD.html + test/src/subr.l + +29mar17 + Missing 'flood' function + doc/ref.html + +28mar17 + Conditional "PIE = -no-pie" for x86_64 (Mike Pechkin) + src64/Makefile + Add SSL_shutdown() to httpGate + src/httpGate.c + Bug in 'ssl', needs SSL_clear() + src/ssl.c + +25mar17 + Bug in case conversions ('fold', 'uppc' etc.) for TOP character + {src64,pilos/src}/sym.l + +24mar17 + 'repl' history as '+Hint1' + lib/form.l + 'repl' eval with environment offset + lib/form.l + +23mar17 + Unmark default namespace + {src64,pilos/src}/sym.l + +21mar17 + Clear line with ^U + lib/led.l + Suppress unnecceary "?" in 'url' + lib/form.l + +18mar17 + Handle "301 Moved Permanently" in 'httpGate' + src/httpGate.c + Default "PIE = -no-pie" for x86_64 + src64/Makefile + +17mar17 + Handle "301 Moved Permanently" in 'httpGate' + src/httpGate.c + doc/httpGate.html + +16mar17 + Removed legacy version checks + src64/arch/emu.l + pilos/make.l + +15mar17 + Fix ref example for 'struct' (03nov16: Terminate char arrays on null bytes) + doc/refS.html + Internal 'Intent' methods in addition to 'putExtra' + lib/android.l + 'repl' '@@' and '@@@' handling + 'file>' method for '+FileField' + "Edit" button in 'repl' + lib/form.l + +11mar17 + Missing part in '+Joint' example + doc/refJ.html + +10mar17 + Still bug in secondary namespace lookup + {src64,pilos/src}/sym.l + Pass either unit or zoom to + lib/svg.l + Local renames + lib/gis.l + +09mar17 + Bug lookup of long names in secondary namespaces + {src64,pilos/src}/sym.l + New files + lib/gis.l + lib/android.l + lib/nodroid.l + 'all' also for given namespace + {src64,pilos/src}/sym.l + doc/refA.html + +08mar17 + Minor change (Danilo Kordic) + lib/eled.l + Bug in 'intern' for namespaces + {src64,pilos/src}/sym.l + doc/refI.html + doc/refN.html + +07mar17 + Minor clean up in 'equ' definitions + pilos/src/defs.l + +06mar17 + 'symbols' optional 'prg' for local namespace list + {src64,pilos/src}/sym.l + lib.l + doc/refS.html + doc/refL.html + Omit 'local' and 'import' from pil32 + lib.l + Bug in namespace chaining + {src64,pilos/src}/sym.l + Added 'url1>' + lib/db.l + +04mar17 + Namespace chaining instead of merging + {src64,pilos/src}/glob.l + {src64,pilos/src}/main.l + {src64,pilos/src}/gc.l + {src64,pilos/src}/sym.l + {src64,pilos/src}/io.l + {src64,pilos/src}/err.l + src64/ht.l + lib.l + lib/debug.l + pilos/init/lib.l + pilos/init/lib/dbg.l + test/src/sym.l + doc/ref.html + doc/refI.html + doc/refL.html + doc/refP.html + doc/refS.html + doc/refZ.html + +03mar17 + French localization + loc/FR.l + loc/fr + app/loc/fr + app/main.l + +24feb17 + Input fields without border + lib.css + +17feb17 + Minor ref fix + doc/ref.html + +08feb17 + idFocus() function and disable '+Focus' on touch devices + lib/form.js + lib/form.l + +07feb17 + More "See also" entries for flow functions + doc/refA.html + doc/refC.html + doc/refI.html + doc/refN.html + doc/refO.html + doc/refU.html + doc/refW.html + +05feb17 + Minor fixes to some 'chk>' methods + lib/form.l + +30jan17 + Note 'flush' in the 'out' reference + doc/refO.html + +27jan17 + More tag fixes + doc/form/refC.html + +26jan17 + More tag fixes + doc/form/refA.html + doc/form/refC.html + doc/form/refD.html + doc/form/refF.html + doc/form/refI.html + doc/form/refJ.html + doc/form/refO.html + doc/form/refQ.html + +25jan17 + More tag fixes + doc/form/refF.html + doc/form/refO.html + doc/form/refQ.html + doc/form/refS.html + doc/form/refV.html + doc/form/form.html + +24jan17 + Bug in indent script with closing comments '}#' + bin/pilIndent + +23jan17 + More typos in docs + doc/app.html + +22jan17 + Unmatched tags (Jon / Mattias) + doc/form/refC.html + +20jan17 + Incorrect usage of 'ctl' in 'rc' and 'acquire' + lib.l + +17jan17 + Bug in 'port', guarantee 16-bit value after ntohs() + src64/net.l + More ref fixes (Jon / Mattias) + doc/form/refQ.html + +13jan17 + Missing '#' in link (Jon / Mattias) + doc/form/refP.html + +09jan17 + Make 'tzo' Linux-only + src/main.c + doc/refT.html + test/src/main.l + Remove lib/dbase.l from distribution + lib/dbase.l + Avoid race condition in 'tzo' unit test + test/src/main.l + +07jan17 + 'tzo' function + src64/sys/arm64.linux.defs.l + src64/sys/x86-64.linux.defs.l + src64/sys/ppc64.linux.defs.l + src64/sys/x86-64.freeBsd.defs.l + src64/sys/x86-64.openBsd.defs.l + src64/sys/x86-64.sunOs.defs.l + src64/sysdefs.c + src64/main.l + src64/glob.l + src/pico.h + src/tab.c + src/main.c + doc/ref.html + doc/refT.html + test/src/main.l + +02jan17 + One more example for 'fish' + doc/refF.html + +22dec16 + Preserve "LayX" in + lib/xhtml.l + +19dec16 + Add '+Rid' to 'resetButton' + lib/form.l + +18dec16 + 'expDat' accepts "." and "+/-" for "today" + lib/misc.l + doc/refE.html + test/lib/misc.l + +16dec16 + Base64-encode 'mail' subject if necessary + lib/misc.l + Wrong link to 'mail' + doc/refP.html + +14dec16 + Better error diagnostics + src64/mkAsm + +12dec16 + Minor typo, duplicated line + doc/refR.html + +09dec16 + Reverse bind order (for (pathologically) duplicated symbols) + {src64,pilos/src}/main.l + {src64,pilos/src}/flow.l + +####### 16.12 ####### 05dec16 Stub for 'PIE = -no-pie' in Linux/x86_64 (enable in Debian Sid) src64/Makefile @@ -341,7 +798,7 @@ java/Reflector.java 20jun16 - httpGate documentation (Mattias Sundblad) + 'httpGate' documentation (Mattias Sundblad) doc/httpGate.html 19jun16 diff -Nru picolisp-16.12/doc/form/form.html picolisp-17.6/doc/form/form.html --- picolisp-16.12/doc/form/form.html 2016-02-25 12:55:21.000000000 +0000 +++ picolisp-17.6/doc/form/form.html 2017-05-16 13:33:35.000000000 +0000 @@ -52,7 +52,7 @@

The first line checks whether the user has the right permissions to access this page. After that a call to a function called 'menu' follows. This function is defined in app/gui.l and creates the menu and basic page layout of this -application. Nested within the call to 'menu' is our first, direct, encounter +application. Nested within the call to 'menu' is our first, direct encounter with a form function. In this case it is a call to 'idForm'. Let us look a little closer at this call. @@ -66,7 +66,7 @@ ######################################################################## (de choCuSu (Dst) (diaform '(Dst) - ( "--.-.-." + (<grid> "--.-.-." # Form components ... ) (gui 'query '(+QueryChart) (cho) @@ -76,11 +76,11 @@ (<table> 'chart (choTtl ,"Customers/Suppliers" 'nr '+CuSu) # Table headers (do (cho) - ( (alternating) + (<row> (alternating) (gui 1 '(+DstButton) Dst) ... (gui 9 '(+TelField)) ) ) ) - ( + (<spread> (scroll (cho)) (newButton T Dst '(+CuSu) ...) (cancelButton) ) ) ) @@ -96,7 +96,7 @@ development for a more thorough description of form components.

The grid is followed by another gui component, this time a +QueryChart. The -chart is an interesting, and very useful, concept. The basic idea is to separate +chart is an interesting, and very useful concept. The basic idea is to separate how data is presented in the gui from the internal representation. See charts for more information. diff -Nru picolisp-16.12/doc/form/refA.html picolisp-17.6/doc/form/refA.html --- picolisp-16.12/doc/form/refA.html 2016-02-25 13:27:06.000000000 +0000 +++ picolisp-17.6/doc/form/refA.html 2017-01-26 06:27:37.000000000 +0000 @@ -56,7 +56,7 @@ (btn) (align "#") (NIL ,"Description") (NIL ,"Supplier") (NIL ,"City") (align ,"Price") ) (do (cho) - ( (alternating) + (<row> (alternating) (gui 1 '(+DstButton) Dst) (gui 2 '(+NumField)) (gui 3 '(+ObjView +TextField) '(: nm)) (gui 4 '(+ObjView +TextField) '(: nm)) (gui 5 '(+TextField)) (gui 6 '(+FixField) 2) ) ) ) diff -Nru picolisp-16.12/doc/form/refC.html picolisp-17.6/doc/form/refC.html --- picolisp-16.12/doc/form/refC.html 2016-02-25 13:37:40.000000000 +0000 +++ picolisp-17.6/doc/form/refC.html 2017-05-14 06:20:40.000000000 +0000 @@ -27,7 +27,7 @@ should be pressed.

  • An environment of variable bindings, to be pushed onto - and popped from - the stacks, and to be used during the un-/redo operations.
  • -
  • A single 'exe' for *un-doing* in that environment
  • +
  • A single 'exe' for *un-doing* in that environment.
  • And one or several 'exe's (i.e. a 'prg') for *doing* in that environment.
  • @@ -79,7 +79,7 @@
    -
    +Chg +
    +Chg
    A prefix taking a function argument, which is called when the user changes the value of a field. That function receives the modified value, and may modify it again or perform side-effects with it like setting other @@ -117,12 +117,12 @@ number of rows.
     . .
          (do (cho)
    -        ( (alternating)
    +        (<row> (alternating)
                (gui 1 '(+DstButton) Dst) (gui 2 '(+NumField)) (gui 3 '(+ObjView
                +TextField) '(: nm)) (gui 4 '(+TextField)) (gui 5 '(+MailField)) (gui
                6 '(+TextField)) (gui 7 '(+TextField)) (gui 8 '(+TelField)) (gui 9
                '(+TelField)) ) ) )
    -  (
    +  (<spread>
          (scroll (cho)) . .
         
    See also diaform. @@ -134,7 +134,7 @@ title of a chart in a search dialog. The function combines a transient symbol, a text string, with the number of objects of a given type in the database. Here is an example from the demo app included in the PicoLisp - distribution, in gui.l + distribution, in gui.l.
    
         (choTtl ,"Customers/Suppliers" 'nr '+CuSu)
    @@ -154,7 +154,7 @@
         
    choDlg, "choose dialog" creates a dialog that lets the user select or create an object, to be either jumped to (when called as a form), or taken into the destination field (when called as a - dialog, see +DstButton) The following + dialog, see +DstButton). The following example comes from the demo app included with the PicoLisp distribution, in cusu.l. This file implements a form that handles objects of a class called +CuSu, "CustomerSupplier". +CuSu is connected to @@ -245,11 +245,12 @@ a number:
    
    -    (gui (+Chart) 2) (<table> NIL NIL '((NIL "Text")
    -    (NIL "Number"))
    -       (do 4
    +    (gui (+Chart) 2)
    +    (<table> NIL NIL '((NIL "Text") (NIL "Number"))
    +       (do 1
               (<row> NIL
    -             (gui 1 '(+TextField) 20) (gui 2 '(+NumField) 10) ) ) )
    +            (gui 1 '(+TextField) 20)
    +            (gui 2 '(+NumField) 10) ) ) )
         
    This number tells the chart how many columns of data to @@ -267,13 +268,15 @@
    
         (gui '(+E/R +Chart) '(bin : home obj) 3
    -       '((This) (list (: nm))) # 'Put'- function '((L D) # 'Get'- function
    +       '((This) (list (: nm)))                    # 'Put'- function
    +       '((L D)                                    # 'Get'- function
               (and D (put!> D 'nm (car L)))
    -             D ) )
    +          D ) )
         (<table> NIL "Binaries" '((NIL "Name"))
            (do 6
               (<row> NIL
    -             (gui 1 '(+Able +TextField) '(curr) 30) (gui 2 '(+DelRowButton))
    +             (gui 1 '(+Able +TextField) '(curr) 30)
    +             (gui 2 '(+DelRowButton))
                  (gui 3 '(+BubbleButton)) ) ) )
         
    @@ -298,8 +301,8 @@ (<table> 'chart NIL '((NIL "Media")) (do 3 (<row> (alternating) - (gui 1 '(+ObjView +TextField) '(: nm)) # Binary name (gui 2 - '(+DelRowButton)) (gui 3 '(+BubbleButton)) ) ) + (gui 1 '(+ObjView +TextField) '(: nm)) # Binary name + (gui 2 '(+DelRowButton)) (gui 3 '(+BubbleButton)) ) ) (<row> NIL (scroll 3 T)) )
    @@ -311,8 +314,10 @@
    
         (=: mup
              (list
    -            (and (: obj mup) (in (blob @ 'txt) (till NIL T))) # txt NIL # sum
    -            NIL # min (: obj mup bin) ) )
    +            (and (: obj mup) (in (blob @ 'txt) (till NIL T))) # txt
    +            NIL # sum
    +            NIL # min
    +            (: obj mup bin) ) )
         
    'mup' is a list here, and (: mup -3) picks @@ -358,7 +363,7 @@
    cloneButton -
    This function creates a button used to clone, make a copy of, the object +
    This function creates a button used to clone, make a copy of the object in the current form. To customise the copy the form object, or it's class, may override the clone>- method (inherited from +Entity). See also +Rid, +Able, @@ -392,7 +397,7 @@ Causes an empty field to display "<Please enter some text - here>" + here>".
    @@ -405,7 +410,7 @@ ... (<table> 'chart NIL '((NIL ,"File") (NIL ,"Delete")) (do 2 - ( NIL + (<row> NIL (gui 1 '(+DocObj +TextField) (curr)) # (gui 2 '(+DelRowButton)) ) ) ) ... diff -Nru picolisp-16.12/doc/form/refD.html picolisp-17.6/doc/form/refD.html --- picolisp-16.12/doc/form/refD.html 2016-04-08 10:06:05.000000000 +0000 +++ picolisp-17.6/doc/form/refD.html 2017-05-14 06:23:38.000000000 +0000 @@ -19,7 +19,7 @@ This example shows a +TextField that has been extended with two classes, +Var and +DbHint. +Var - connects the field to a variable and +DbHint fetche + connects the field to a variable and +DbHint fetches autocomplete suggestions from the database. As you can see, +DbHint is given the argument '(nam +User). This tells it to fetch the property "nam" from the class "+User". See also (de choItem (Dst) (diaform '(Dst) - ( "--.-." + (<grid> "--.-." ... ... ) (gui 'query '(+QueryChart) (cho) @@ -148,7 +148,7 @@
    +DstButton -
    +DstButton,Destination button, has a dual behaviour, +
    +DstButton, Destination button, has a dual behaviour, manifesting itself as a button or a plain link. The button is always labeled as "@", but if +DstButton is used in a dialog which chooses an object to be stored in a field of the calling form it manifests as a button. @@ -156,13 +156,13 @@ field. Otherwise, +DstButton manifests itself as a plain link and clicking the link causes a jump to that object. Typical usage is in choice (search) dialogs, which are used both for jumping to objects and for - selecting objects in other forms.
    + selecting objects in other forms.
    The following example uses a +DstButton when presenting the search result in a QueryChart. Since we are not about to choose an object to be stored in a field of the calling form, this +DstButton will manifest as a link and cause a jump to an - object.
    Given the following 'put'- function: + object.
    Given the following 'put'- function:
    
         '((This) (list This This (: pa) (: ma) (: mate) (: job) (: dat)))
    @@ -172,7 +172,7 @@
           (<table> 'chart NIL
              '((btn) (NIL "Name") (NIL "Father") (NIL "Mother") (NIL "Partner") (NIL "Occupation") (NIL "born"))
              (do (cho)
    -            ( (alternating)
    +            (<row> (alternating)
                    (gui 1 '(+DstButton) Dst)
                    (gui 2 '(+ObjView +TextField) '(: nm))
                    (gui 3 '(+ObjView +TextField) '(: nm))
    @@ -210,7 +210,7 @@
     
         See also +TextField, gui, date and TimeTime & Date
    +    href="../app.html#timeDateFields">Time & Date.
     
    diff -Nru picolisp-16.12/doc/form/refF.html picolisp-17.6/doc/form/refF.html --- picolisp-16.12/doc/form/refF.html 2016-02-29 08:24:16.000000000 +0000 +++ picolisp-17.6/doc/form/refF.html 2017-05-14 06:26:14.000000000 +0000 @@ -40,15 +40,15 @@ See also +NumField, +TextField and Input fields + href="../app.html#inputFields">Input fields.
    +FileField -
    This field evaluates an 'exe' to find and open/ create a file, then +
    This field evaluates an 'exe' to find and open/create a file, then loads/modifies/stores the text in that file. See also +TextField + href="refT.html#+TextField">+TextField.
    @@ -61,7 +61,7 @@
    
         (de choCuSu (Dst)
            (diaform '(Dst)
    -          ( "--.-.-."
    +          (<grid> "--.-.-."
                  ,"Number" (gui 'nr '(+Var +NumField) '*CuSuNr 10)
                  ,"Name" (gui 'nm '(+Focus +Var +TextField) '*CuSuNm 30)
                  ,"Phone" (gui 'tel '(+Var +TelField) '*CuSuTel 20)
    @@ -98,10 +98,10 @@
         
    See also +Set, +Val, . + href="refV.html#+Val">+Val and formatting.
    -
    +
    form
    The basic form function. Handles operations common to the concrete form types in the library. See idForm, (menu ,"Item" (idForm ,"Item" '(choItem) 'nr '+Item T '(may Delete) '((: nr) " -- " (: nm)) - ( 4 + (<grid> 4 ,"Number" NIL (gui '(+E/R +NumField) '(nr : home obj) 10) NIL ,"Description" NIL (gui '(+E/R +Cue +TextField) '(nm : home obj) ,"Item" 30) NIL ,"Supplier" (choCuSu 0) @@ -37,7 +37,7 @@ (gui '(+View +NumField) '(cnt> (: home obj)) 12) ,"Price" NIL (gui '(+E/R +FixField) '(pr : home obj) 2 12) ) (--) - ( 2 + (<grid> 2 ,"Memo" (gui '(+BlobField) '(txt : home obj) 60 8) ,"Picture" (prog @@ -49,7 +49,7 @@ (ask ,"Uninstall Picture?" (put!> (: home top 1 obj) 'jpg NIL) ) ) ((: drop) (blob! (: home obj) 'jpg @)) ) ) ) ) - ( NIL (editButton T)) + (<spread> NIL (editButton T)) (gui '(+Upd +Img) '(and (: home obj jpg) (allow (blob (: home obj) 'jpg))) ,"Picture" ) ) ) @@ -67,7 +67,7 @@ create a heading that is displayed when a single object has been selected. Our example will use the 'nr' and 'nm' properties of an +Item object combined with " -- ". The result is something like this: "Item: 2 -- - Spare Part"

    See also
    diaform, See also diaform, form.
    diff -Nru picolisp-16.12/doc/form/refJ.html picolisp-17.6/doc/form/refJ.html --- picolisp-16.12/doc/form/refJ.html 2016-02-25 12:29:24.000000000 +0000 +++ picolisp-17.6/doc/form/refJ.html 2017-01-26 06:28:55.000000000 +0000 @@ -27,7 +27,7 @@ (gui '(+JS +Button) "@img/mapicon.gif" "@img/no.png" '(set> (: home map) (path> (: home obj) 40)) ) ... - (

    '((id . map) (style . "width: 600px; height: 400px")) + (<p> '((id . map) (style . "width: 600px; height: 400px")) (gui 'map '(+JsField) "showMap") ) diff -Nru picolisp-16.12/doc/form/refO.html picolisp-17.6/doc/form/refO.html --- picolisp-16.12/doc/form/refO.html 2016-02-26 09:53:50.000000000 +0000 +++ picolisp-17.6/doc/form/refO.html 2017-05-14 06:28:57.000000000 +0000 @@ -60,7 +60,7 @@ (<table> 'chart NIL '((btn) (NIL "Name") (NIL "Father") (NIL "Mother") (NIL "Partner") (NIL "Occupation") (NIL "born")) (do (cho) - ( (alternating) + (<row> (alternating) (gui 1 '(+DstButton) Dst) (gui 2 '(+ObjView +TextField) '(: nm)) (gui 3 '(+ObjView +TextField) '(: nm)) @@ -70,7 +70,7 @@ (gui 7 '(+DateField)) ) ) ) - Columns 2,3 and 4 use +ObjView to display the name of the 'pa', + Columns 2, 3 and 4 use +ObjView to display the name of the 'pa', 'ma' and 'mate' relations of the current object respectively. See also +Obj, +obj. @@ -97,6 +97,7 @@ href="http://picolisp.com/wiki/?OnClickButton">good article that explains +OnClick in depth. See also +Button and gui. +

    (okButton 'Exe) diff -Nru picolisp-16.12/doc/form/refP.html picolisp-17.6/doc/form/refP.html --- picolisp-16.12/doc/form/refP.html 2016-02-25 12:42:58.000000000 +0000 +++ picolisp-17.6/doc/form/refP.html 2017-01-13 13:39:08.000000000 +0000 @@ -41,7 +41,7 @@ This produces a <passwd> html tag. See also gui, +TextField + href="refG.html#gui">gui, +TextField and input fields.
    diff -Nru picolisp-16.12/doc/form/refQ.html picolisp-17.6/doc/form/refQ.html --- picolisp-16.12/doc/form/refQ.html 2016-02-25 12:45:13.000000000 +0000 +++ picolisp-17.6/doc/form/refQ.html 2017-05-14 06:30:34.000000000 +0000 @@ -17,10 +17,10 @@ dialogs, as the following example from the demo app supplied with the PicoLisp distribution. -
    
    +    
    
         (de choItem (Dst)
            (diaform '(Dst)
    -          ( "--.-."
    +          (<grid> "--.-."
                  ,"Number" (gui 'nr '(+Focus +Var +NumField) '*ItemNr 10)
                  ,"Supplier" (gui 'sup '(+Var +TextField) '*ItemSup 20)
                  (searchButton '(init> (: home query)))
    @@ -51,14 +51,14 @@
                        (NIL ,"City")
                        (align ,"Price") )
                     (do (cho)
    -                   ( (alternating)
    +                   (<row> (alternating)
                           (gui 1 '(+DstButton) Dst)
                           (gui 2 '(+NumField))
                           (gui 3 '(+ObjView +TextField) '(: nm))
                           (gui 4 '(+ObjView +TextField) '(: nm))
                           (gui 5 '(+TextField))
                           (gui 6 '(+FixField) 2) ) ) )
    -             (
    +             (<spread>
                     (scroll (cho))
                     (newButton T Dst '(+Item)
                     '(nr genKey 'nr '+Item)
    @@ -117,10 +117,10 @@
     
         
    
         '((This) (list This (: nr) This (: sup) (: sup ort) (: pr)))
    -    
    +    
    The 'put'- function is applied to each row and places the desired content - into the GUI. Since this chart is readonly, i.e. contains no input fields, + into the GUI. Since this chart is read only, i.e. contains no input fields, the corresponding 'get'- function can be omitted. Each item in the list produced by our 'put'- function matches up with a column in the table presenting the result. The first item, This, is used to create @@ -158,9 +158,9 @@ href="refD.html#diaform">diaform, +ObjView, +TextField, +FixField,charts and the select - predicate + href="refF.html#+FixField">+FixField, charts and the select + predicate. diff -Nru picolisp-16.12/doc/form/refR.html picolisp-17.6/doc/form/refR.html --- picolisp-16.12/doc/form/refR.html 2016-02-25 12:47:04.000000000 +0000 +++ picolisp-17.6/doc/form/refR.html 2017-05-14 06:32:13.000000000 +0000 @@ -101,7 +101,7 @@
    See also +Force, +ClrButton + href="refC.html#+ClrButton">+ClrButton.
    diff -Nru picolisp-16.12/doc/form/refS.html picolisp-17.6/doc/form/refS.html --- picolisp-16.12/doc/form/refS.html 2016-02-26 09:55:05.000000000 +0000 +++ picolisp-17.6/doc/form/refS.html 2017-05-14 06:33:31.000000000 +0000 @@ -40,7 +40,7 @@
    (searchButton Exe)
    Creates a button with the label "Search" and takes an Exe argument. Here is an example from the demo app included with the PicoLisp - distribution, in gui.l + distribution, in gui.l.
    
         (searchButton '(init> (: home query)))
    @@ -64,7 +64,7 @@
         
    See also +Map, gui and gui and +TextField.
    diff -Nru picolisp-16.12/doc/form/refV.html picolisp-17.6/doc/form/refV.html --- picolisp-16.12/doc/form/refV.html 2016-04-11 05:16:10.000000000 +0000 +++ picolisp-17.6/doc/form/refV.html 2017-01-25 06:48:03.000000000 +0000 @@ -14,9 +14,9 @@
    Takes a function that gets called each time a field's value is retrieved. The following example returns the square of the field's value: -
    +    
    
         (gui '(+Val +NumField) '((N) (* N N)) 10)
    -    
    +
    See also +Set, +Fmt, If the port is zero, then a single additional token is expected which should +denote an URL to redirect the request to: + +
    
    +   app 0 https://domain/foo/bar
    +
    + +This will cause httpGate to respnd with "301 Moved Permanently" and "Location: +https://domain/foo/bar". +

    Balanced names file

    If the config file contains many (hundreds or thousands) entries, then it is diff -Nru picolisp-16.12/doc/refA.html picolisp-17.6/doc/refA.html --- picolisp-16.12/doc/refA.html 2016-07-28 05:18:17.000000000 +0000 +++ picolisp-17.6/doc/refA.html 2017-05-11 06:17:36.000000000 +0000 @@ -199,9 +199,9 @@

    (align 'lst 'any ..) -> sym
    Returns a transient symbol with all any arguments packed in an aligned format. In the first form, -any will be left-aligned if cnt ist negative, -otherwise right-aligned. In the second form, all any arguments are -packed according to the numbers in lst. See also any will be left-aligned if cnt is negative, otherwise +right-aligned. In the second form, all any arguments are packed +according to the numbers in lst. See also tab, center and wrap. @@ -215,12 +215,12 @@ -> " a 12 b"
    -
    (all ['T | '0]) -> lst +
    (all ['T | '0 | 'sym]) -> lst
    Returns a new list of all internal symbols -in the system (if called without arguments, or with NIL). Otherwise -(if the argument is T), all current transient symbols are returned. Else all current -external symbols are returned. +in the system (if called without arguments, or with NIL), all +current transient symbols (if the argument is +T), all external symbols (if the +argument is zero), or all symbols of the given namespace sym.
    
     : (all)  # All internal symbols
    @@ -266,7 +266,10 @@
     
    (and 'any ..) -> any
    Logical AND. The expressions any are evaluated from left to right. If NIL is encountered, NIL is returned -immediately. Else the result of the last expression is returned. +immediately. Else the result of the last expression is returned. See also +nand, or and when.
    
     : (and (= 3 3) (read))
    diff -Nru picolisp-16.12/doc/refC.html picolisp-17.6/doc/refC.html
    --- picolisp-16.12/doc/refC.html	2015-11-16 16:21:38.000000000 +0000
    +++ picolisp-17.6/doc/refC.html	2017-02-07 11:25:54.000000000 +0000
    @@ -601,8 +601,9 @@
     to non-NIL, prgN is executed and the result returned.
     Otherwise (all conditions evaluate to NIL), NIL is
     returned. See also nond, if, if2
    -and when.
    +href="refI.html#if">if, and,
    +if2 and when.
     
     
    
     : (cond
    diff -Nru picolisp-16.12/doc/refD.html picolisp-17.6/doc/refD.html
    --- picolisp-16.12/doc/refD.html	2016-11-29 06:18:05.000000000 +0000
    +++ picolisp-17.6/doc/refD.html	2017-06-18 09:53:25.000000000 +0000
    @@ -337,14 +337,14 @@
     -> 3
     
    -
    (dbSync) -> flg +
    (dbSync 'obj) -> flg
    Starts a database transaction, by trying to obtain a lock on the database root object *DB, and then calling sync to synchronize with possible changes from -other processes. When all desired modifications to external symbols are done, -(commit 'upd) should be called. See -also Database. +href="refD.html#*DB">*DB (or obj if given), and then +calling sync to synchronize with +possible changes from other processes. When all desired modifications to +external symbols are done, (commit +'upd) should be called. See also Database.
    
     (let? Obj (rd)             # Get object?
    @@ -547,10 +547,12 @@
     -> (1 2)
     
    -
    (del 'any 'var) -> lst +
    (del 'any 'var ['flg]) -> lst
    Deletes any from the list in the value of var, and -returns the remaining list. (del 'any 'var) is equivalent to -(set 'var (delete 'any var)). See also flg is NIL and +any is contained more than once in the value of var, +only the first occurrence is deleted. (del 'any 'var) is equivalent +to (set 'var (delete 'any var)). See also delete, cut and pop. @@ -564,10 +566,11 @@ -> (a c)
    -
    (delete 'any 'lst) -> lst -
    Deletes any from lst. If any is -contained more than once in lst, only the first occurrence is -deleted. See also delq, (delete 'any 'lst ['flg]) -> lst +
    Deletes any from lst. If flg is +NIL and any is contained more than once in +lst, only the first occurrence is deleted. See also delq, del, remove and insert. @@ -591,12 +594,13 @@ -> NIL
    -
    (delq 'any 'lst) -> lst -
    Deletes any from lst. If any is -contained more than once in lst, only the first occurrence is -deleted. == is used for comparison -(pointer equality). See also delete, -asoq, (delq 'any 'lst ['flg]) -> lst +
    Deletes any from lst. If flg is +NIL and any is contained more than once in +lst, only the first occurrence is deleted. == is used for comparison (pointer equality). See +also delete, asoq, push1q, memq, mmeq and Comparing. @@ -790,6 +794,18 @@ -> NIL +
    (download 'host 'src 'dst) -> any +
    Tries to download the file src from host with +"@bin/ssl", and stores it in dst. Returns non-NIL if +successful. See also ssl. + +
    
    +: (download "de.wikipedia.org" "static/images/wikimedia-button.png" "button.png")
    +-> 0
    +: (info "button.png")
    +-> (2426 736804 . 35589)
    +
    + diff -Nru picolisp-16.12/doc/refE.html picolisp-17.6/doc/refE.html --- picolisp-16.12/doc/refE.html 2016-01-22 07:03:36.000000000 +0000 +++ picolisp-17.6/doc/refE.html 2016-12-18 09:17:25.000000000 +0000 @@ -363,7 +363,9 @@ the current locale (delimiter, and order of year, month and day). Accepts abbreviated input, without delimiter and with only the day, or the day and month, or the day, month and year of current -century. See also datStr, datStr, day, expTel. diff -Nru picolisp-16.12/doc/refF.html picolisp-17.6/doc/refF.html --- picolisp-16.12/doc/refF.html 2016-11-04 06:52:52.000000000 +0000 +++ picolisp-17.6/doc/refF.html 2017-06-18 05:32:24.000000000 +0000 @@ -222,6 +222,8 @@ href="refF.html#filter">filter.
    
    +: (fish atom '((a b) c (d e)))
    +-> (a b c d e)
     : (fish gt0 '(a -2 (1 b (-3 c 2)) 3 d -1))
     -> (1 2 3)
     : (fish sym? '(a -2 (1 b (-3 c 2)) 3 d -1))
    @@ -550,7 +552,7 @@
     
    (from 'any ..) -> sym
    Skips the current input channel until one of the strings any is found, and starts subsequent reading from that point. The found any -argument, or NIL (if none is found) is returned. See also NIL if none is found) is returned. See also till and echo. diff -Nru picolisp-16.12/doc/ref.html picolisp-17.6/doc/ref.html --- picolisp-16.12/doc/ref.html 2016-11-24 09:17:31.000000000 +0000 +++ picolisp-17.6/doc/ref.html 2017-06-20 07:53:15.000000000 +0000 @@ -370,6 +370,7 @@
  • to represent a string of length zero
  • to represent the value "Not a Number"
  • as the root of all class hierarchies +
  • as volatile property key

    For that, NIL has a special structure: @@ -981,7 +982,7 @@

    
     : 'libA~foo  # Look up 'foo' in namespace 'libA'
    --> "foo"     # "foo" is not interned in the current namespace
    +-> libA~foo  # "foo" is not interned in the current namespace
     

    Reading libA~foo is equivalent to switching the current @@ -1598,6 +1599,11 @@ modifications since the last call to commit can be discarded by calling rollback. +

    Note that a property with the key NIL is a volatile +property, which is held only in memory and not written to disk on +commit, and discarded by rollback. Volatile properties +can be used by applications for any kind of temporary data. +


    Transactions

    @@ -1792,11 +1798,10 @@

    Naming Conventions

    It was necessary to introduce - and adhere to - a set of conventions for -PicoLisp symbol names. Because all (internal) symbols have a global scope (there -are no packages or name spaces), and each symbol can only have either a value or -function definition, it would otherwise be very easy to introduce name -conflicts. Besides this, source code readability is increased when the scope of -a symbol is indicated by its name. +PicoLisp symbol names. Because all (internal) symbols have a global scope, and +each symbol can only have either a value or function definition, it would +otherwise be very easy to introduce name conflicts. Besides this, source code +readability is increased when the scope of a symbol is indicated by its name.

    These conventions are not hard-coded into the language, but should be so into the head of the programmer. Here are the most commonly used ones: @@ -2230,6 +2235,7 @@ assoc rassoc asoq + flood rank sort uniq @@ -2683,6 +2689,7 @@ sys date time + tzo usec stamp dat$ diff -Nru picolisp-16.12/doc/refI.html picolisp-17.6/doc/refI.html --- picolisp-16.12/doc/refI.html 2016-03-26 07:46:31.000000000 +0000 +++ picolisp-17.6/doc/refI.html 2017-03-08 12:03:10.000000000 +0000 @@ -122,6 +122,7 @@

    Conditional execution: If the condition any1 evaluates to non-NIL, any2 is evaluated and returned. Otherwise, prg is executed and the result returned. See also ifn, cond, when and if2. @@ -159,7 +160,12 @@
    (ifn 'any1 any2 . prg) -> any
    Conditional execution ("If not"): If the condition any1 evaluates to NIL, any2 is evaluated and returned. -Otherwise, prg is executed and the result returned. +Otherwise, prg is executed and the result returned. See also +if, nor, nand, unless and nond.
    
     : (ifn (= 3 4) (println 'OK) (println 'Bad))
    @@ -167,18 +173,16 @@
     -> OK
     
    -
    (import . lst) -> NIL +
    (import . lst) -> lst
    Wrapper function for intern. Typically used to import symbols from other namespaces, as created by symbols. lst should be a list -of symbols. An import conflict error is issued when a symbol with the same name -already exists in the current namespace. See also pico and pico and local.
    
     : (import libA~foo libB~bar)
    --> NIL
    +-> (foo bar)
     
    (in 'any . prg) -> any @@ -323,12 +327,15 @@ -> (a b c d e 777)
  • -
    (intern 'sym) -> sym +
    (intern 'sym ['flg]) -> sym
    Creates or finds an internal symbol. If a symbol with the name sym is already intern, it is returned. Otherwise, sym -is interned and returned. See also flg is +non-NIL, sym is always interned in the current +namespace even if it is found in other namespaces. See also symbols, zap, import, extern and ====. diff -Nru picolisp-16.12/doc/refJ.html picolisp-17.6/doc/refJ.html --- picolisp-16.12/doc/refJ.html 2013-04-18 07:55:41.000000000 +0000 +++ picolisp-17.6/doc/refJ.html 2017-03-11 10:34:42.000000000 +0000 @@ -25,8 +25,8 @@ (class +Ord +Entity) # Order class (rel pos (+List +Joint) ord (+Pos)) # List of positions in that order ... -(class +Pos +Entity) # Position class -(rel ord (+Joint) # Back-link to the parent order +(class +Pos +Entity) # Position class +(rel ord (+Joint) pos (+Ord)) # Back-link to the parent order
    (job 'lst . prg) -> any diff -Nru picolisp-16.12/doc/refL.html picolisp-17.6/doc/refL.html --- picolisp-16.12/doc/refL.html 2016-10-06 06:23:06.000000000 +0000 +++ picolisp-17.6/doc/refL.html 2017-06-16 13:02:36.000000000 +0000 @@ -60,7 +60,10 @@
    (later 'var . prg) -> var
    Executes prg in a pipe'ed child process. The return value of -prg will later be available in var. +prg will later be available in var. Note that +later uses pr and rd to communicate the result, so prg +should not write any data to standard output as a side effect.
    
     : (prog1  # Parallel background calculation of square numbers
    @@ -471,19 +474,20 @@
     -> NIL
     
    -
    (local . lst) -> sym -
    Wrapper function for zap. Typically -used to create namespace-local symbols. lst should be a list of -symbols. See also pico, symbols, (local) sym|lst -> sym|lst +
    Intern symbols locally in the current namespace. (local) +expects a single symbol or a list of symbols immediately following in the +current input stream. See also pico, +symbols, import and intern.
    
     : (symbols 'myLib 'pico)
    --> pico
    -myLib: (local bar foo)
    --> "foo"
    +-> (pico)
    +myLib: (local)
    +   [bar foo]
    +-> (myLib pico)
     
     myLib: (de foo (A)  # 'foo' is local to 'myLib'
        ...
    @@ -517,10 +521,10 @@
     the whole database root file if sym is NIL. Returns
     NIL if successful, or the ID of the process currently holding the
     lock. When sym is non-NIL, the lock is released at the
    -next top level call to commit or
    -rollback, otherwise only when
    -another database is opened with pool,
    -or when the process terminates. See also commit or rollback, otherwise only when another
    +database is opened with pool, or when
    +the process terminates. See also *Solo.
     
     
    
    diff -Nru picolisp-16.12/doc/refN.html picolisp-17.6/doc/refN.html
    --- picolisp-16.12/doc/refN.html	2016-12-04 07:13:21.000000000 +0000
    +++ picolisp-17.6/doc/refN.html	2017-03-08 11:52:36.000000000 +0000
    @@ -95,17 +95,17 @@
     -> NIL
     : (de foo (Lst) (car Lst))  # 'foo' calls 'car'
     -> foo
    -: (intern (name (zap 'car) "xxx"))  # Globally change the name of 'car'
    +: (intern (name (zap 'car) "xxx") T)   # Globally change the name of 'car'
     -> xxx
     : (xxx (1 2 3))
     -> 1
     : (pp 'foo)
     (de foo (Lst)
    -   (xxx Lst) )                      # Name changed
    +   (xxx Lst) )                         # Name changed
     -> foo
    -: (foo (1 2 3))                     # 'foo' still works
    +: (foo (1 2 3))                        # 'foo' still works
     -> 1
    -: (car (1 2 3))                     # Reader returns a new 'car' symbol
    +: (car (1 2 3))                        # Reader returns a new 'car' symbol
     !? (car (1 2 3))
     car -- Undefined
     ?
    @@ -115,7 +115,12 @@
     
    Logical NAND. The expressions any are evaluated from left to right. If NIL is encountered, T is returned immediately. Else NIL is returned. (nand ..) is -equivalent to (not (and ..)). +equivalent to (not (and ..)). See also and, nor, unless, ifn and nond.
    
     : (nand (lt0 7) (read))
    @@ -381,8 +386,10 @@
     result returned. Otherwise (all conditions evaluate to non-NIL),
     NIL is returned. See also cond, ifn and unless.
    +href="refI.html#ifn">ifn, unless, nor and nand.
     
     
    
     : (nond
    @@ -397,7 +404,12 @@
     
    Logical NOR. The expressions any are evaluated from left to right. If a non-NIL value is encountered, NIL is returned immediately. Else T is returned. (nor ..) is -equivalent to (not (or ..)). +equivalent to (not (or ..)). See also or, nand, unless, ifn and nond.
    
     : (nor (lt0 7) (= 3 4))
    diff -Nru picolisp-16.12/doc/refO.html picolisp-17.6/doc/refO.html
    --- picolisp-16.12/doc/refO.html	2016-03-23 07:05:08.000000000 +0000
    +++ picolisp-17.6/doc/refO.html	2017-02-07 11:19:51.000000000 +0000
    @@ -238,7 +238,10 @@
     
    (or 'any ..) -> any
    Logical OR. The expressions any are evaluated from left to right. If a non-NIL value is encountered, it is returned -immediately. Else the result of the last expression is returned. +immediately. Else the result of the last expression is returned. See also +nor, and and unless.
    
     : (or (= 3 3) (read))
    @@ -270,7 +273,9 @@
     as the descriptor of an open file. If it is a negative number, the saved output
     channel such many levels above the current one is used. Otherwise (if it is a
     list), it is taken as a command with arguments, and a pipe is opened for output.
    -See also opid,  flush is called when
    +prg is done. See also opid,  call, in,  err,  
     : (symbols)
    --> pico
    +-> (pico)
     : (cdr pico)
     -> (rollback (*NoTrace (*CtryCode (+IdxFold) genStrKey) basename ...
     
    @@ -379,7 +379,8 @@ If sym2 is non-NIL, it is opened in append-mode as an asynchronous replication journal. If sym3 is non-NIL, it is opened for reading and appending, to be used as a synchronous transaction -log during commits. See also +log during commits. Calling +(pool) without arguments just closes the current database. See also dbs, *Dbs and journal. @@ -530,7 +531,7 @@ the current output channel in Base64 format. A newline is inserted after every cnt byte-triples (character-quadruples). See also echo mail. +href="refM.html#mail">mail.
    
     : (in "image.png" (prBase64 18))  # Print 72 columns
    diff -Nru picolisp-16.12/doc/refR.html picolisp-17.6/doc/refR.html
    --- picolisp-16.12/doc/refR.html	2016-09-09 15:48:27.000000000 +0000
    +++ picolisp-17.6/doc/refR.html	2017-04-18 12:54:42.000000000 +0000
    @@ -22,7 +22,9 @@
     another number must follow to hold the remaining time)). A select
     system call is performed with these values, and the corresponding
     prg body is executed when input data are available or when a
    -timeout occurred. See also task.
    +timeout occurred (with @ set to the file
    +descriptor or timeout value). See also task.
     
     
    
     : (de *Run (-2000 0 (println '2sec)))     # Install 2-sec-timer
    @@ -95,7 +97,6 @@
     href="refA.html#+Alt">+Alt and +Swap. See also Database and Database and +Entity.
     
     

    Messages to relation objects include diff -Nru picolisp-16.12/doc/refS.html picolisp-17.6/doc/refS.html --- picolisp-16.12/doc/refS.html 2016-10-01 10:21:38.000000000 +0000 +++ picolisp-17.6/doc/refS.html 2017-06-18 09:40:08.000000000 +0000 @@ -391,6 +391,7 @@

    Stores new values any in the var arguments. See also setq, val, swap, con and def. @@ -634,6 +635,16 @@ -> 1414214
    +
    (ssl 'host 'path . prg) -> any +
    Executes prg in an input stream (using in) from "@bin/ssl" requesting path +from host. + +
    
    +: (ssl "picolisp.com" "wiki/?home" (line T))
    +-> "<!DOCTYPE html>"
    +
    +
    (stack ['cnt]) -> cnt | (.. sym . cnt)
    (64-bit version only) Maintains the stack segment size for coroutines (the main stack segment is limited - @@ -735,8 +746,10 @@
    (step 'lst ['flg]) -> any
    Single-steps iteratively through a database tree. lst is a structure as received from init. If -flg is non-NIL, partial keys are skipped. See also -tree, flg is non-NIL, partial keys are skipped. The key for +each returned value is stored in the global variable @@. See also tree, scan, iter, leaf and ((7 4) (11 22 33) 7 ("A" "B" "C" NIL)) +-> ((7 4) (11 22 33) 7 ("A" "B" "C")) # Do both in a single call (allowing conversions of data types) : (struct P '((I . 2) (1.0 . 3) N (C . 4)) -7 -4 (1.0 0.11 0.22 0.33) (7 . 8) 65 66 67 0 ) --> ((7 4) (11 22 33) 7 ("A" "B" "C" NIL)) +-> ((7 4) (11 22 33) 7 ("A" "B" "C")) # De-allocate structure : (native "@" "free" NIL P) @@ -1007,32 +1020,32 @@ -> NIL
    -
    (symbols) -> sym -
    (symbols 'sym1) -> sym2 -
    (symbols 'sym1 'sym ..) -> sym2 +
    (symbols) -> lst +
    (symbols 'lst) -> lst +
    (symbols 'lst . prg) -> any +
    (symbols 'sym1 'sym2 ..) -> lst
    (64-bit version only) Creates and manages namespaces of internal symbols: In -the first form, the current namespace is returned. In the second form, the -current namespace is set to sym1, and the previous namespace -sym2 is returned. In the third form, sym1 is assigned -a balanced copy of the existing -namespace(s) sym, and becomes the new current namespace, returning -the previous namespace sym2. If in the third form more than one -sym argument is given, possibly conflicting symbols in later -namespaces are not interned into sym2. See also pico, local, lst, and the previous +namespace list is returned. In the third form, the current namespace list is set +to lst during the execution of prg, and the result is +returned. In the fourth form, sym1 is initialized to a new +namespace if its value is NIL and not modified otherwise, and +sym1, sym2 and all following arguments are set as the +current namespace list. See also pico, +local, import, intern and load.
    
     : (symbols 'myLib 'pico)
    --> pico
    +-> (pico)
     myLib: (de foo (X)
        (bar (inc X)) )
     -> foo
     myLib: (symbols 'pico)
    --> myLib
    +-> (myLib pico)
     : (pp 'foo)
     (de foo . NIL)
     -> foo
    @@ -1040,8 +1053,8 @@
     (de "foo" (X)
        ("bar" (inc X)) )
     -> "foo"
    -: (symbols 'myLib)
    --> pico
    +: (symbols '(myLib pico))
    +-> (pico)
     myLib: (pp 'foo)
     (de foo (X)
        (bar (inc X)) )
    diff -Nru picolisp-16.12/doc/refT.html picolisp-17.6/doc/refT.html
    --- picolisp-16.12/doc/refT.html	2016-03-16 08:35:47.000000000 +0000
    +++ picolisp-17.6/doc/refT.html	2017-01-09 09:58:29.000000000 +0000
    @@ -591,6 +591,17 @@
     -> (+Tiny +Rid +JS +Able +Button)
     
    +
    (tzo) -> cnt +
    Return the time zone offset, i.e. the number of seconds east of Coordinated +Universal Time (UTC). Supported only on Linux. See also date and time. + +
    
    +: (tzo)
    +-> 3600
    +
    + diff -Nru picolisp-16.12/doc/refU.html picolisp-17.6/doc/refU.html --- picolisp-16.12/doc/refU.html 2015-01-24 17:48:50.000000000 +0000 +++ picolisp-17.6/doc/refU.html 2017-02-07 11:45:59.000000000 +0000 @@ -244,7 +244,11 @@
    Conditional execution: When the condition any evaluates to non-NIL, NIL is returned. Otherwise prg is executed and the result returned. See also when. +href="refW.html#when">when, ifn, nor, nand and nond.
    
     : (unless (= 3 3) (println 'Strange 'result))
    @@ -259,7 +263,10 @@
     NIL, prg is repeatedly executed. If prg
     is never executed, NIL is returned. Otherwise the result of
     prg is returned. See also while.
    +href="refW.html#while">while, for, loop and do.
     
     
    
     : (until (=T (setq N (read)))
    diff -Nru picolisp-16.12/doc/refW.html picolisp-17.6/doc/refW.html
    --- picolisp-16.12/doc/refW.html	2016-01-03 15:22:23.000000000 +0000
    +++ picolisp-17.6/doc/refW.html	2017-02-07 11:46:05.000000000 +0000
    @@ -59,7 +59,9 @@
     
    Conditional execution: When the condition any evaluates to non-NIL, prg is executed and the result is returned. Otherwise NIL is returned. See also unless. +href="refU.html#unless">unless, if, and +and cond.
    
     : (when (> 4 3) (println 'OK) (println 'Good))
    @@ -73,7 +75,10 @@
     non-NIL, prg is repeatedly executed. If
     prg is never executed, NIL is returned. Otherwise the
     result of prg is returned. See also until.
    +href="refU.html#until">until, for, loop and do.
     
     
    
     : (while (read)
    diff -Nru picolisp-16.12/doc/refZ.html picolisp-17.6/doc/refZ.html
    --- picolisp-16.12/doc/refZ.html	2010-04-14 07:56:44.000000000 +0000
    +++ picolisp-17.6/doc/refZ.html	2017-03-04 13:47:00.000000000 +0000
    @@ -26,7 +26,7 @@
     
     
    (zap 'sym) -> sym
    "Delete" the symbol sym. For internal symbols, that means to -remove it from the internal index, effectively transforming it to a transient +remove it from the current namespace, effectively transforming it to a transient symbol. For external symbols, it means to mark it as "deleted", so that upon a later commit it will be removed from the database file. See also intern. diff -Nru picolisp-16.12/ersatz/fun.src picolisp-17.6/ersatz/fun.src --- picolisp-16.12/ersatz/fun.src 2016-11-24 09:12:54.000000000 +0000 +++ picolisp-17.6/ersatz/fun.src 2017-04-04 08:32:15.000000000 +0000 @@ -1,4 +1,4 @@ -# 24nov16abu +# 04apr17abu # (c) Software Lab. Alexander Burger # Ersatz PicoLisp Functions @@ -2549,40 +2549,58 @@ } return ex.Car.eval(); -# (delete 'any 'lst) -> lst -delete (w x y z) +# (delete 'any 'lst ['flg]) -> lst +delete (w x y z lst) y = (x = ex.Cdr).Car.eval(); - if (!((x = x.Cdr.Car.eval()) instanceof Cell)) - return x; - if (y.equal(x.Car)) - return x.Cdr; - w = z = new Cell(x.Car, Nil); - while ((x = x.Cdr) instanceof Cell) { - if (y.equal(x.Car)) { - z.Cdr = x.Cdr; + lst = (x = x.Cdr).Car.eval(); + x = x.Cdr.Car.eval(); + for (;;) { + if (!(lst instanceof Cell)) + return lst; + if (!y.equal(lst.Car)) + break; + if (x == Nil) + return lst.Cdr; + lst = lst.Cdr; + } + w = z = new Cell(lst.Car, Nil); + while ((lst = lst.Cdr) instanceof Cell) { + if (y.equal(lst.Car)) { + if (x != Nil) + continue; + z.Cdr = lst.Cdr; return w; } - z = z.Cdr = new Cell(x.Car, Nil); + z = z.Cdr = new Cell(lst.Car, Nil); } - z.Cdr = x; + z.Cdr = lst; return w; -# (delq 'any 'lst) -> lst -delq (w x y z) +# (delq 'any 'lst ['flg]) -> lst +delq (w x y z lst) y = (x = ex.Cdr).Car.eval(); - if (!((x = x.Cdr.Car.eval()) instanceof Cell)) - return x; - if (y == x.Car) - return x.Cdr; - w = z = new Cell(x.Car, Nil); - while ((x = x.Cdr) instanceof Cell) { - if (y == x.Car) { - z.Cdr = x.Cdr; + lst = (x = x.Cdr).Car.eval(); + x = x.Cdr.Car.eval(); + for (;;) { + if (!(lst instanceof Cell)) + return lst; + if (y != lst.Car) + break; + if (x == Nil) + return lst.Cdr; + lst = lst.Cdr; + } + w = z = new Cell(lst.Car, Nil); + while ((lst = lst.Cdr) instanceof Cell) { + if (y == lst.Car) { + if (x != Nil) + continue; + z.Cdr = lst.Cdr; return w; } - z = z.Cdr = new Cell(x.Car, Nil); + z = z.Cdr = new Cell(lst.Car, Nil); } - z.Cdr = x; + z.Cdr = lst; return w; # (replace 'lst 'any1 'any2 ..) -> lst Binary files /tmp/tmpMdvM4B/w1AjrUwsAK/picolisp-16.12/ersatz/picolisp.jar and /tmp/tmpMdvM4B/8UFlUXQmUw/picolisp-17.6/ersatz/picolisp.jar differ diff -Nru picolisp-16.12/lib/android.l picolisp-17.6/lib/android.l --- picolisp-16.12/lib/android.l 1970-01-01 00:00:00.000000000 +0000 +++ picolisp-17.6/lib/android.l 2017-06-24 07:03:59.000000000 +0000 @@ -0,0 +1,209 @@ +# 24jun17abu +# (c) Software Lab. Alexander Burger + +(ifn (info "UUID") + (off *Uuid) + (setq *Uuid (in "UUID" (line T))) + (for F '("JAVA" "LISP" "RQST" "RPLY") + (native "@" "unlink" 'I F) + (native "@" "mkfifo" 'I F `(oct "600")) ) ) + +(symbols 'android 'pico) + +# SSL +(sys "LD_LIBRARY_PATH" "lib") +(sys "SSL_CERT_FILE" "tls/cert.pem") + +# Android Context +(local) CONTEXT +(de CONTEXT . {OOOO40000000000}) + +# Java I/O +# (java "cls" 'T ['any ..]) -> obj New object +# (java 'obj 'msg ['any ..]) -> any Send message to object +# (java 'obj "fld" ["fld" ..]) -> any Value of object field +# (java "cls" 'msg ['any ..]) -> any Call method in class +# (java "cls" "fld" ["fld" ..]) -> any Value of class field +# (java T "cls" ["cls" ..]) -> obj Define interface +# (java 'obj) -> [lst ..] Reflect object +# (java "cls") -> [lst lst ..] Reflect class +(local) [java *Java *Lisp] +(de java @ + (unless *Java + (setq *Java (open "JAVA") *Lisp (open "LISP")) + (task (open "RQST") R (open "RPLY") + (in @ + (out R + (ext 65535 + (symbols '(android pico) + (pr + (with (rd) # Obj + (if (get (rd) This) + (apply @ (rd)) + (rd) + NIL ) ) ) ) ) ) ) ) + (forked) + (queue '*Ext (cons 65535 java)) + (con java (cddr java)) ) + (ext 65535 + (symbols '(android pico) + (out *Java (pr (rest))) + (let? Val (in *Lisp (rd)) + (if (== 'err (car (pair Val))) + (nil (msg (cdr Val))) + Val ) ) ) ) ) + +# Android device ID +(local) [dev getString getContentResolver] +(de dev () + (java "android.provider.Settings$Secure" 'getString + (java CONTEXT 'getContentResolver) + "android_id" ) ) + +# Push-Load +(local) loadUrl +(de loadUrl @ + (java CONTEXT 'loadUrl (pass pack)) ) + +# Wake lock +(local) [wake getSystemService newWakeLock] +(de wake (Flg) + (java + (java + (java CONTEXT 'getSystemService "power") # PowerManager + 'newWakeLock 1 "PilWake" ) # New WakeLock + (if Flg 'acquire 'release) ) ) + +# Update APK +(local) [update? getInt] +(de update? () + (gt0 # (java (java CONTEXT 'getPackageManager) 'canRequestPackageInstalls) + (java "android.provider.Settings$Secure" 'getInt + (java CONTEXT 'getContentResolver) "install_non_market_apps" ) ) ) + +(local) [update startActivity setData fromFile] +(de update (File) + (java (; CONTEXT GUI) 'startActivity + (prog1 + (java "android.content.Intent" T "android.intent.action.INSTALL_PACKAGE") + (java @ 'setData + (java "android.net.Uri" 'fromFile + (java "java.io.File" T File) ) ) ) ) ) + +# Notification +(local) [ + notify setSmallIcon setContentTitle setContentText setAutoCancel setLights + getSystemService build ] +(de notify (Ttl Msg Id) + (let B (java "android.support.v4.app.NotificationCompat$Builder" T CONTEXT) + (java B 'setSmallIcon (java "de.software_lab.pilbox.R$drawable" "notify")) + (java B 'setContentTitle Ttl) + (java B 'setContentText Msg) + (java B 'setAutoCancel T) + (java B 'setLights `(hex "FFFFFF") 500 500) + (java (java CONTEXT 'getSystemService "notification") # NotificationManager + 'notify (or Id 0) (java B 'build) ) ) ) + +# Generate file content URI +(local) [fileUri getUriForFile getPackageName] +(de fileUri (File) + (out File) + (java "android.support.v4.content.FileProvider" 'getUriForFile + CONTEXT + (pack (java CONTEXT 'getPackageName) ".fileprovider") + (java "java.io.File" T File) ) ) + +# Start Activity for a result +(local) [ + startActivityForResult *ResultProxy *ProxyResults resolveActivity + getPackageManager putExtra setResultProxy good bad ] +(de startActivityForResult (Fun Action . @) + (let Intent (java "android.content.Intent" T Action) + (when (java Intent 'resolveActivity (java CONTEXT 'getPackageManager)) + (while (args) + (let S (next) + (if (str? S) + (java Intent 'putExtra S (next)) + (java Intent S (next) (next)) ) ) ) + (unless *ResultProxy + (java CONTEXT 'setResultProxy + (setq *ResultProxy (java T "de.software_lab.pilbox.ResultProxy")) ) ) + (def 'good *ResultProxy + '((Req Intent) + (when (asoq Req *ProxyResults) + (del @ '*ProxyResults) + ((cdr @) Intent) ) ) ) + (def 'bad *ResultProxy + '((Req Res) + (del (asoq Req *ProxyResults) '*ProxyResults) ) ) + (let Req (inc (0)) + (push '*ProxyResults (cons Req Fun)) + (java (; CONTEXT GUI) 'startActivityForResult Intent Req) ) ) ) ) + +# GPS access +(local) checkSelfPermission +(de location? () + (=0 + (java "android.support.v4.content.ContextCompat" + 'checkSelfPermission CONTEXT "android.permission.ACCESS_FINE_LOCATION" ) ) ) + +(local) [ + gps *LocMan *LocLsn onLocationChanged onProviderDisabled onProviderEnabled + onStatusChanged requestLocationUpdates isProviderEnabled getLastKnownLocation + getLatitude getLongitude ] +(de gps () + (unless *LocMan + (setq + *LocMan (java CONTEXT 'getSystemService "location") + *LocLsn (java T "android.location.LocationListener") ) + (def 'onLocationChanged *LocLsn + '((Loc) + (msg Loc " onLocationChanged") + NIL ) ) + (def 'onProviderDisabled *LocLsn + '((Prov)) ) + (def 'onProviderEnabled *LocLsn + '((Prov)) ) + (def 'onStatusChanged *LocLsn + '((Prov Stat Extras)) ) + (java *LocMan 'requestLocationUpdates "gps" '(L . 20000) (-3 . 100) *LocLsn) ) + (when (java *LocMan 'isProviderEnabled "gps") + (let? Loc (java *LocMan 'getLastKnownLocation "gps") + (cons + (+ (java Loc 'getLatitude) 90000000) + (+ (java Loc 'getLongitude) 180000000) ) ) ) ) + +# Camera access +(local) [camera? hasSystemFeature] +(de camera? () + (java (java CONTEXT 'getPackageManager) + 'hasSystemFeature "android.hardware.camera" ) ) + +## '((Intent) +## (setq *Picture (tmp "img")) +## (loadUrl (baseHRef) *SesId "app/camera.l") ) +(local) takePicture +(de takePicture (Dst Fun) + (startActivityForResult Fun + "android.media.action.IMAGE_CAPTURE" + "output" (fileUri Dst) ) ) + +# ZXing QR-Codes +(local) [zxing? queryIntentActivities] +(de zxing? () + (with + (java (java CONTEXT 'getPackageManager) 'queryIntentActivities + (java "android.content.Intent" T "com.google.zxing.client.android.SCAN") + 65536 ) # MATCH_DEFAULT_ONLY + (gt0 (: size)) ) ) + +## '((Intent) +## (java Intent 'getStringExtra "SCAN_RESULT") +## (java Intent 'getStringExtra "SCAN_RESULT_FORMAT") ) +(local) scanQR +(de scanQR (Fun) + (startActivityForResult Fun + "com.google.zxing.client.android.SCAN" + "SCAN_MODE" "QR_CODE_MODE" ) ) + +# vi:et:ts=3:sw=3 diff -Nru picolisp-16.12/lib/btree.l picolisp-17.6/lib/btree.l --- picolisp-16.12/lib/btree.l 2016-11-24 10:35:24.000000000 +0000 +++ picolisp-17.6/lib/btree.l 2017-05-31 16:21:08.000000000 +0000 @@ -1,4 +1,4 @@ -# 24nov16abu +# 31may17abu # (c) Software Lab. Alexander Burger # *Prune @@ -298,8 +298,11 @@ (for (V (cadr X) ((if F val revNode) V) (car @)) (con L (cons (cdr @) (cdr L))) ) (unless (and Flg (flg? (fin (car X)))) - (throw NIL - (or (cddr X) (fin (car X))) ) ) ) ) ) ) ) + (when (cddr X) + (setq @@ (car X)) + (throw NIL @) ) + (setq @@ (caar X)) + (throw NIL (fin (car X))) ) ) ) ) ) ) (====) diff -Nru picolisp-16.12/lib/dbase.l picolisp-17.6/lib/dbase.l --- picolisp-16.12/lib/dbase.l 2016-11-24 10:33:10.000000000 +0000 +++ picolisp-17.6/lib/dbase.l 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ -# 24nov16abu -# (c) Software Lab. Alexander Burger - -(de dbase (File) - (use (Cnt Hdr Siz Fld X) - (in File - (unless (= 3 (rd 1)) # Version - (quit "dBASE Version") ) - (rd 3) # Date - (setq - Cnt (rd -4) # Record count - Hdr (rd -2) # Header size - Siz (rd -2) ) # Record size - (rd 3) # Reserved - (unless (=0 (rd 1)) # Encryption Flag - (quit "Encrypted") ) - (rd 16) # Reserved - (setq Fld - (make - (until (= 13 (setq X (rd 1))) - (link - (cons - (intern # Name - (pack - (char X) - (make - (for - (L (make (do 10 (link (rd 1)))) - (n0 (car L)) - (cdr L) ) - (link (char (car L))) ) ) ) ) - (cons - (char (rd 1)) # Type - (cons - (prog (rd 4) (rd 1)) # Size - (rd 1) ) ) ) ) # Prec - (rd 14) ) ) ) ) # Skip - - (in (list "@bin/utf2" "-dd" (pack "if=" File) (pack "bs=" Hdr) "skip=1") - (prog1 - (make - (do Cnt - (setq X (make (do Siz (link (char))))) - (when (<> "*" (++ X)) - (link - (extract - '((F) - (let? S (pack (clip (cut (caddr F) 'X))) - (cons - (car F) - (case (cadr F) - ("C" S) - ("D" ($dat S)) - ("L" (bool (member S `(chop "JjTt")))) - ("N" (format S (cdddr F))) - (T "?") ) ) ) ) - Fld ) ) ) ) ) - (unless (= "^Z" (char)) - (quit "Missing EOF") ) ) ) ) ) diff -Nru picolisp-16.12/lib/db.l picolisp-17.6/lib/db.l --- picolisp-16.12/lib/db.l 2016-11-24 10:30:06.000000000 +0000 +++ picolisp-17.6/lib/db.l 2017-04-04 09:10:53.000000000 +0000 @@ -1,4 +1,4 @@ -# 24nov16abu +# 04apr17abu # (c) Software Lab. Alexander Burger # *Dbs *Jnl *Blob upd @@ -892,7 +892,7 @@ (dm del> (Obj Old Val) (and (<> Old Val) - (delete Val Old) ) ) + (delete Val Old T) ) ) (dm rel> (Obj Old New Hook) (if (or (ele> This Old) (ele> This New)) @@ -1074,6 +1074,7 @@ (dm url> (Tab)) +(dm url1> () (url> This 1)) (dm url2> () (url> This 2)) (dm url3> () (url> This 3)) (dm url4> () (url> This 4)) diff -Nru picolisp-16.12/lib/debug.l picolisp-17.6/lib/debug.l --- picolisp-16.12/lib/debug.l 2016-11-24 10:34:08.000000000 +0000 +++ picolisp-17.6/lib/debug.l 2017-03-03 18:08:22.000000000 +0000 @@ -1,10 +1,11 @@ -# 24nov16abu +# 03mar17abu # (c) Software Lab. Alexander Burger # Prompt (when symbols (de *Prompt - (unless (== (symbols) 'pico) (symbols)) ) ) + (unless (== 'pico (car (symbols))) + (car (symbols)) ) ) ) # Browsing (de docs (Dir) diff -Nru picolisp-16.12/lib/eled.l picolisp-17.6/lib/eled.l --- picolisp-16.12/lib/eled.l 2016-11-24 10:31:36.000000000 +0000 +++ picolisp-17.6/lib/eled.l 2017-03-08 15:29:01.000000000 +0000 @@ -500,7 +500,7 @@ (prinl) (quit) ) # doc ("f" (prin "(doc) ") - (doc (line T)) (quit) ) + (doc (read)) (quit) ) # show ("s" (prin "(show) ") (pp (show (any (line T)))) (quit) ) diff -Nru picolisp-16.12/lib/form.js picolisp-17.6/lib/form.js --- picolisp-16.12/lib/form.js 2016-03-01 10:01:38.000000000 +0000 +++ picolisp-17.6/lib/form.js 2017-02-08 12:12:47.000000000 +0000 @@ -1,4 +1,4 @@ -/* 01mar16abu +/* 08feb17abu * (c) Software Lab. Alexander Burger */ @@ -86,6 +86,14 @@ fld.href = decodeURIComponent(url); } +function idFocus(fld) { + try { + document.createEvent("TouchEvent"); + return true; + } catch (e) {} + setTimeout(function() {document.getElementById(fld).focus()}, 420); +} + /*** Form submit ***/ function doPost(form) { for (var i = 0; ; ++i) { diff -Nru picolisp-16.12/lib/form.l picolisp-17.6/lib/form.l --- picolisp-16.12/lib/form.l 2016-11-24 10:40:01.000000000 +0000 +++ picolisp-17.6/lib/form.l 2017-06-24 05:25:56.000000000 +0000 @@ -1,4 +1,4 @@ -# 24nov16abu +# 24jun17abu # (c) Software Lab. Alexander Burger # *PRG *Top *Gui *Btn *Get *Got *Form *Evt *Lock *Spans @@ -284,7 +284,8 @@ (when Url (off *PRG) (timeout `(* 3600 1000)) - (redirect (baseHRef) *SesId Url "?" + (redirect (baseHRef) *SesId Url + (and (args) "?") (pack (make (loop @@ -341,24 +342,50 @@ (de repl (Attr DX DY) (default DX 80 DY 25) (form Attr - (gui 'view '(+FileField) '(tmp "repl") DX DY) + (=: repl (tmp "repl")) + (gui 'view '(+FileField) (: repl) DX DY) (--) - (gui 'line '(+Focus +TextField) (*/ DX 3 4) ":") - (gui '(+JS +Button) "eval" + (gui 'line '(+Focus +Able +Hint1 +TextField) + '(= (: home view file) (: home repl)) + '(: home hint) + DX ) + (----) + (gui '(+JS +Able +Button) '(= (: home view file) (: home repl)) "Lisp" '(let Str (val> (: home line)) - (out (pack "+" (tmp "repl")) + (out (pack "+" (: home repl)) (err NIL (prinl ": " Str) (flush) (catch '(NIL) (in "/dev/null" - (setq @ "Result" "Result" (eval (any Str))) ) - (prin "-> ") - (println "Result") ) ) + (up 99 @@@ "@3") + (up 99 @@ "@2") + (up 99 @ "@1") + (setq "@3" "@2" "@2" "@1" "@1" (eval (any Str) 99)) ) ) + (println '-> "@1") ) (when *Msg (prinl @) (off *Msg)) ) + (push1 (:: home hint) Str) (clr> (: home line)) ) ) - (gui '(+JS +Button) "clear" - '(clr> (: home view)) ) ) ) + (gui '(+JS +Button) + '(if (= (: home view file) (: home repl)) ,"Edit" ,"Done") + '(file> (: home view) + (if (= (: home view file) (: home repl)) + (if (val> (: home line)) + (setq "file" (push1 (:: home hint) @)) + (set> (: home line) "file") + "file" ) + (clr> (: home line)) + (: home repl) ) ) ) + (gui '(+JS +Able +Button) '(= (: home view file) (: home repl)) "Shell" + '(let Str (val> (: home line)) + (out (pack "+" (: home repl)) + (err NIL + (prinl "$ " Str) + (flush) + (in (list "sh" "-c" Str) + (echo) ) ) ) + (push1 (:: home hint) Str) + (clr> (: home line)) ) ) ) ) # Dialogs @@ -976,10 +1003,7 @@ (extra "Var") (when (and (able) (not "*Foc")) (on "*Foc") - (javascript NIL - "window.setTimeout(\"document.getElementById(\\\"" - "i" *Form "-" (: id) - "\\\").focus()\",420)" ) ) ) + (javascript NIL "idFocus(\"" "i" *Form "-" (: id) "\")") ) ) ### Styles ### @@ -1342,26 +1366,26 @@ (class +Radio +field) # Inited by Tomas Hlavaty -# grp val lbl +# grp rad lbl -# (grp val [lbl]) -(dm T (Grp Val Lbl) +# (grp rad [lbl]) +(dm T (Grp Rad Lbl) (super) (=: grp (if Grp (field @) This)) - (=: val Val) + (=: rad Rad) (=: lbl Lbl) ) (dm show> ("Var") (showFld ( (cons '*Gui (: grp id)) - (: val) + (: rad) (not (able)) ) ) ) (dm js> () (pack - (ht:Fmt (: val)) - "&" (= (: val) (str> (: grp))) + (ht:Fmt (: rad)) + "&" (= (: rad) (str> (: grp))) (unless (able) "&=") ) ) (dm set> (Val Dn) @@ -1557,7 +1581,7 @@ (dm chk> () (and (str> This) - (not (val> This)) + (not (expDat @)) ,"Bad date format" ) ) @@ -1575,7 +1599,7 @@ (dm chk> () (and (str> This) - (not (val> This)) + (not ($tim @)) ,"Bad time format" ) ) @@ -1654,6 +1678,10 @@ (info F) (in F (ctl NIL (till NIL T))) ) ) ) ) ) +(dm file> (Exe) + (=: file Exe) + (upd> This) ) + (class +Url) # url @@ -1714,7 +1742,7 @@ (dm chk> () (and (str> This) - (not (val> This)) + (not (expTel @)) ,"Bad phone number format" ) ) @@ -1745,7 +1773,7 @@ ### GUI charts ### (class +Chart) -# home gui rows cols ofs lock put get data clip +# home gui rows cols ofs lock put get data # (cols [put [get]]) (dm T (N Put Get) @@ -1815,17 +1843,18 @@ 1 ) ) ) (put> This) ) -(dm txt> (Flg) +(dm txt1> (I Lst) + (map + '((G D) + (prin + (txt> (car G) (car D)) + (if (cdr G) "\t" "\n") ) ) + (: gui 1) + ((: put) Lst I) ) ) + +(dm txt> () (for (I . L) (: data) - (map - '((G D) - (prin (txt> (car G) (car D))) - (if - (cdr G) - (prin "^I") - (prinl (and Flg "^M")) ) ) - (: gui 1) - ((: put) L I) ) ) ) + (txt1> This I L) ) ) (dm set> (Lst) (=: ofs @@ -1852,20 +1881,6 @@ (dm chk> ()) -(dm cut> (N) - (get> This) - (=: clip (get (val> This) (: ofs))) - (set> This - (remove (or N (: ofs)) (val> This)) ) ) - -(dm paste> (Flg N) - (get> This) - (set> This - (insert - (or N (: ofs)) - (val> This) - (unless Flg (: clip)) ) ) ) - (class +Chart1 +Chart) @@ -1886,7 +1901,11 @@ (de choDlg (Dst Ttl Rel . @) (let (Hook (and (meta (cdr Rel) (car Rel) 'hook) (next)) - Fld (or (next) (list '(+DbHint +TextField) Rel 40)) + Fld + (or (next) + (if Hook + (list '(+DbHint +TextField) Rel (lit Hook) 40) + (list '(+DbHint +TextField) Rel 40) ) ) Gui (if (next) (list '(+ObjView +TextField) @) @@ -1990,7 +2009,7 @@ (gui '(+Rid +JS +Tip +Button) ,"Start search" ,"Search" Exe) ) (de resetButton (Lst) - (gui '(+Force +ClrButton) T ,"Reset" Lst) ) + (gui '(+Rid +Force +ClrButton) T ,"Reset" Lst) ) (de newButton (Able Dst . Args) (gui '(+Rid +Able +Close +Tip +Button) Able ,"Create new object" ',"New" @@ -2198,7 +2217,7 @@ (dbHint (extra Str) (: objVar) (last (: objTyp)) - (: objHook) ) ) + (eval (: objHook)) ) ) (dm txt> (Obj) (if (ext? Obj) @@ -2282,14 +2301,14 @@ (class +ObjVal +obj) -# objVar objTyp objHook +# objVar objTyp hook objHook # ([T|msg] (var . typ) [hook] ..) (dm T @ (super) (=: objVar (car (arg))) (=: objTyp (cdr (arg))) - (when (meta (: objTyp) (: objVar) 'hook) + (when (=: hook (meta (: objTyp) (: objVar) 'hook)) (=: objHook (next)) ) (pass extra) ) @@ -2310,7 +2329,12 @@ (and (: obj) (put!> @ (: objVar) NIL)) (=: obj NIL) ) ((: obj) - (=: obj (new! (: objTyp) (: objVar) Val)) ) + (dbSync) + (=: obj (new (or (meta (: objTyp) 'Dbf 1) 1) (: objTyp))) + (when (: hook) + (put> (: obj) (: hook) (eval (: objHook))) ) + (put> (: obj) (: objVar) Val) + (commit 'upd) ) (NIL (put!> @ (: objVar) Val)) ) ) (: obj) ) @@ -2343,8 +2367,8 @@ (: obj) ) -# DB query chart -(class +QueryChart +Chart) +### Incremental charts ### +(class +stepChart +Chart) # iniR iniQ query # (iniR iniQ cols [put [get]]) @@ -2353,6 +2377,10 @@ (=: iniQ Q) (pass super) ) +(dm query> (Q) + (=: query Q) + (set> This) ) + (dm init> () (query> This (eval (: iniQ))) ) @@ -2360,39 +2388,44 @@ (while (and (> (: ofs) (- (length (: data)) (max (: rows) (: iniR)))) - (; (prove (: query)) @@) ) + (step> This) ) (queue (:: data) @) ) (super) ) -(dm txt> (Flg) +(dm clr> () + (query> This (fail)) ) + + +# DB query chart +(class +QueryChart +stepChart) + +(dm step> () + (; (prove (: query)) @@) ) + +(dm txt> () (for ((I . Q) (eval (: iniQ)) (prove Q)) - (map - '((G D) - (prin (txt> (car G) (car D))) - (if (cdr G) - (prin "^I") - (prinl (and Flg "^M")) ) ) - (: gui 1) - ((: put) (; @ @@) I) ) ) ) + (txt1> This I (; @ @@)) ) ) (dm all> () (make (for (Q (eval (: iniQ)) (prove Q)) (link (; @ @@)) ) ) ) -(dm query> (Q) - (=: query Q) - (set> This) ) -(dm sort> (Exe) - (set> This - (goal - (list - (list 'lst '@@ - (by '((This) (eval Exe)) sort (val> This)) ) ) ) ) ) +# Tree traversal chart +(class +TreeChart +stepChart) -(dm clr> () - (query> This (fail)) ) +(dm step> () + (and (step (: query)) (cons @@ @)) ) + +(dm txt> () + (for ((I . Q) (eval (: iniQ)) (step Q)) + (txt1> This I (cons @@ @)) ) ) + +(dm all> () + (make + (for (Q (eval (: iniQ)) (step Q)) + (link (cons @@ @)) ) ) ) (====) @@ -2449,7 +2482,10 @@ (or (pair "Cho") (list 'choDlg NIL (lit "Cho") (lit (list (fin "Var") "Cls"))) ) - "Var" "Cls" ) + "Var" "Cls" + (and + (or (get "Cls" (fin "Var") 'hook) (meta "Cls" (fin "Var") 'hook)) + (get (: obj) @) ) ) (run "Prg") ) ) ) diff -Nru picolisp-16.12/lib/gis.l picolisp-17.6/lib/gis.l --- picolisp-16.12/lib/gis.l 1970-01-01 00:00:00.000000000 +0000 +++ picolisp-17.6/lib/gis.l 2017-06-06 12:14:10.000000000 +0000 @@ -0,0 +1,94 @@ +# 06jun17abu +# (c) Software Lab. Alexander Burger + +(symbols 'gis 'pico) + +(local) nm +(de nm (Lat Lon) + (pack + (round (- Lat 90.0)) + ", " + (round (- Lon 180.0)) ) ) + +(local) [lat lon fmt] +(de lat (Lat) + (format (- Lat 90.0) `*Scl) ) + +(de lon (Lon) + (format (- Lon 180.0) `*Scl) ) + +(de fmt (Lat Str Lon) + (when (or Lat Lon) + (pack (lat Lat) Str (lon Lon)) ) ) + + +# Latitude Field +(local) +LatField +(class +LatField +Fmt +FixField) + +(dm T @ + (pass super + '((Num) (- Num 90.0)) + '((Lat) (+ Lat 90.0)) + `*Scl ) ) + +# Longitude Field +(local) +LonField +(class +LonField +Fmt +FixField) + +(dm T @ + (pass super + '((Num) (- Num 180.0)) + '((Lon) (+ Lon 180.0)) + `*Scl ) ) + +# Clickable position field +(local) [+LatLonField msg obj lt ln] +(class +LatLonField +TextField) + +(dm T (Msg . @) + (=: msg Msg) + (pass super) + (=: able) ) + +(dm set> (X Dn) + (=: obj (car X)) + (=: lt (cadr X)) + (=: ln (cddr X)) + (super (fmt (: lt) ", " (: ln)) Dn) ) + +(dm js> () + (if (try (: msg) (: obj) (: lt) (: ln)) + (pack + (fmt (: lt) ", " (: ln)) + "&+" + (ht:Fmt (sesId (mkUrl @))) ) + (super) ) ) + +(dm val> () + (cons (: obj) (: lt) (: ln)) ) + +(dm show> ("Var") + (showFld + (if (try (: msg) (: obj) (: lt) (: ln)) + ( + (fmt (: lt) ", " (: ln)) + (mkUrl @) ) + (super "Var") ) ) ) + +# Google Maps +(local) google +(de google (Ttl Lat Lon Zoom Tar) + ( Ttl + (pack "https://www.google.com/maps/@" (fmt Lat "," Lon) "," Zoom "z") + Tar ) ) + +(local) +(de (Lat Lon DX DY) + (prinl + "" ) ) + +# vi:et:ts=3:sw=3 diff -Nru picolisp-16.12/lib/led.l picolisp-17.6/lib/led.l --- picolisp-16.12/lib/led.l 2016-11-25 09:05:31.000000000 +0000 +++ picolisp-17.6/lib/led.l 2017-03-21 15:17:11.000000000 +0000 @@ -1,4 +1,4 @@ -# 25nov16abu +# 21mar17abu # (c) Software Lab. Alexander Burger # Line editor @@ -298,6 +298,7 @@ (if (> "LPos" 1) (chgLine (remove (dec "LPos") "Line") (dec "LPos")) (beep) ) ) + ("^U" (chgLine NIL 1)) ("^V" (insChar (key))) ("^E" (and edit (edit '*History))) ("^F" (saveHistory)) diff -Nru picolisp-16.12/lib/map picolisp-17.6/lib/map --- picolisp-16.12/lib/map 2016-12-08 09:16:55.000000000 +0000 +++ picolisp-17.6/lib/map 2017-06-29 05:17:48.000000000 +0000 @@ -1,55 +1,55 @@ -! (3077 . "@src64/flow.l") -$ (3179 . "@src64/flow.l") -% (2568 . "@src64/big.l") -& (2820 . "@src64/big.l") -* (2385 . "@src64/big.l") -*/ (2442 . "@src64/big.l") -+ (2167 . "@src64/big.l") -++ (2008 . "@src64/sym.l") -- (2205 . "@src64/big.l") --> (4079 . "@src64/subr.l") -/ (2509 . "@src64/big.l") -: (3160 . "@src64/sym.l") -:: (3184 . "@src64/sym.l") -; (3077 . "@src64/sym.l") -< (2402 . "@src64/subr.l") -<= (2432 . "@src64/subr.l") -<> (2331 . "@src64/subr.l") -= (2302 . "@src64/subr.l") -=0 (2360 . "@src64/subr.l") -=1 (2368 . "@src64/subr.l") -=: (3106 . "@src64/sym.l") -== (2246 . "@src64/subr.l") -==== (1132 . "@src64/sym.l") -=T (2376 . "@src64/subr.l") -> (2462 . "@src64/subr.l") ->= (2492 . "@src64/subr.l") ->> (2623 . "@src64/big.l") -abs (2745 . "@src64/big.l") -accept (150 . "@src64/net.l") -adr (625 . "@src64/main.l") -alarm (482 . "@src64/main.l") -all (821 . "@src64/sym.l") -and (1728 . "@src64/flow.l") -any (4071 . "@src64/io.l") +! (3066 . "@src64/flow.l") +$ (3168 . "@src64/flow.l") +% (2569 . "@src64/big.l") +& (2821 . "@src64/big.l") +* (2386 . "@src64/big.l") +*/ (2443 . "@src64/big.l") ++ (2168 . "@src64/big.l") +++ (2139 . "@src64/sym.l") +- (2206 . "@src64/big.l") +-> (4084 . "@src64/subr.l") +/ (2510 . "@src64/big.l") +: (3284 . "@src64/sym.l") +:: (3308 . "@src64/sym.l") +; (3201 . "@src64/sym.l") +< (2407 . "@src64/subr.l") +<= (2437 . "@src64/subr.l") +<> (2336 . "@src64/subr.l") += (2307 . "@src64/subr.l") +=0 (2365 . "@src64/subr.l") +=1 (2373 . "@src64/subr.l") +=: (3230 . "@src64/sym.l") +== (2251 . "@src64/subr.l") +==== (1261 . "@src64/sym.l") +=T (2381 . "@src64/subr.l") +> (2467 . "@src64/subr.l") +>= (2497 . "@src64/subr.l") +>> (2624 . "@src64/big.l") +abs (2746 . "@src64/big.l") +accept (151 . "@src64/net.l") +adr (627 . "@src64/main.l") +alarm (484 . "@src64/main.l") +all (947 . "@src64/sym.l") +and (1717 . "@src64/flow.l") +any (4074 . "@src64/io.l") append (1356 . "@src64/subr.l") apply (723 . "@src64/apply.l") -arg (2641 . "@src64/main.l") -args (2617 . "@src64/main.l") +arg (2632 . "@src64/main.l") +args (2608 . "@src64/main.l") argv (3318 . "@src64/main.l") as (139 . "@src64/flow.l") -asoq (3246 . "@src64/subr.l") -assoc (3176 . "@src64/subr.l") -at (2253 . "@src64/flow.l") -atom (2580 . "@src64/subr.l") -bind (1364 . "@src64/flow.l") -bit? (2761 . "@src64/big.l") -bool (1828 . "@src64/flow.l") -box (830 . "@src64/flow.l") -box? (1164 . "@src64/sym.l") +asoq (3251 . "@src64/subr.l") +assoc (3181 . "@src64/subr.l") +at (2242 . "@src64/flow.l") +atom (2585 . "@src64/subr.l") +bind (1353 . "@src64/flow.l") +bit? (2762 . "@src64/big.l") +bool (1817 . "@src64/flow.l") +box (819 . "@src64/flow.l") +box? (1296 . "@src64/sym.l") by (1727 . "@src64/apply.l") -bye (3664 . "@src64/flow.l") -bytes (3163 . "@src64/subr.l") +bye (3653 . "@src64/flow.l") +bytes (3168 . "@src64/subr.l") caaaar (271 . "@src64/subr.l") caaadr (291 . "@src64/subr.l") caaar (99 . "@src64/subr.l") @@ -64,11 +64,11 @@ cadddr (438 . "@src64/subr.l") caddr (156 . "@src64/subr.l") cadr (45 . "@src64/subr.l") -call (3312 . "@src64/flow.l") +call (3301 . "@src64/flow.l") car (5 . "@src64/subr.l") -case (2069 . "@src64/flow.l") -casq (2113 . "@src64/flow.l") -catch (2615 . "@src64/flow.l") +case (2058 . "@src64/flow.l") +casq (2102 . "@src64/flow.l") +catch (2604 . "@src64/flow.l") cd (3047 . "@src64/main.l") cdaaar (467 . "@src64/subr.l") cdaadr (490 . "@src64/subr.l") @@ -86,125 +86,125 @@ cddr (79 . "@src64/subr.l") cdr (17 . "@src64/subr.l") chain (1157 . "@src64/subr.l") -char (3553 . "@src64/io.l") -chop (1253 . "@src64/sym.l") +char (3556 . "@src64/io.l") +chop (1384 . "@src64/sym.l") circ (820 . "@src64/subr.l") -circ? (2597 . "@src64/subr.l") -clip (1986 . "@src64/subr.l") -close (4505 . "@src64/io.l") +circ? (2602 . "@src64/subr.l") +clip (1991 . "@src64/subr.l") +close (4508 . "@src64/io.l") cmd (3300 . "@src64/main.l") cnt (1469 . "@src64/apply.l") -co (2702 . "@src64/flow.l") +co (2691 . "@src64/flow.l") commit (1415 . "@src64/db.l") con (728 . "@src64/subr.l") conc (784 . "@src64/subr.l") -cond (2023 . "@src64/flow.l") -connect (229 . "@src64/net.l") +cond (2012 . "@src64/flow.l") +connect (230 . "@src64/net.l") cons (750 . "@src64/subr.l") copy (1241 . "@src64/subr.l") -ctl (4368 . "@src64/io.l") +ctl (4371 . "@src64/io.l") ctty (3072 . "@src64/main.l") -cut (2019 . "@src64/sym.l") -date (2757 . "@src64/main.l") +cut (2150 . "@src64/sym.l") +date (2748 . "@src64/main.l") dbck (2038 . "@src64/db.l") de (533 . "@src64/flow.l") -dec (2319 . "@src64/big.l") +dec (2320 . "@src64/big.l") def (447 . "@src64/flow.l") -default (1828 . "@src64/sym.l") -del (2074 . "@src64/sym.l") +default (1959 . "@src64/sym.l") +del (2205 . "@src64/sym.l") delete (1419 . "@src64/subr.l") -delq (1470 . "@src64/subr.l") -detach (3483 . "@src64/flow.l") -diff (2779 . "@src64/subr.l") +delq (1471 . "@src64/subr.l") +detach (3472 . "@src64/flow.l") +diff (2784 . "@src64/subr.l") dir (3230 . "@src64/main.l") dm (546 . "@src64/flow.l") -do (2285 . "@src64/flow.l") -e (3140 . "@src64/flow.l") -echo (4536 . "@src64/io.l") -env (637 . "@src64/main.l") -eof (3630 . "@src64/io.l") -eol (3621 . "@src64/io.l") -err (4349 . "@src64/io.l") -errno (1623 . "@src64/main.l") +do (2274 . "@src64/flow.l") +e (3129 . "@src64/flow.l") +echo (4539 . "@src64/io.l") +env (639 . "@src64/main.l") +eof (3633 . "@src64/io.l") +eol (3624 . "@src64/io.l") +err (4352 . "@src64/io.l") +errno (1614 . "@src64/main.l") eval (174 . "@src64/flow.l") -exec (3306 . "@src64/flow.l") -ext (5279 . "@src64/io.l") -ext? (1199 . "@src64/sym.l") -extern (1065 . "@src64/sym.l") -extra (1271 . "@src64/flow.l") +exec (3295 . "@src64/flow.l") +ext (5288 . "@src64/io.l") +ext? (1330 . "@src64/sym.l") +extern (1194 . "@src64/sym.l") +extra (1260 . "@src64/flow.l") extract (1228 . "@src64/apply.l") -fifo (2184 . "@src64/sym.l") +fifo (2308 . "@src64/sym.l") file (3177 . "@src64/main.l") -fill (3434 . "@src64/subr.l") +fill (3439 . "@src64/subr.l") filter (1171 . "@src64/apply.l") -fin (2220 . "@src64/subr.l") -finally (2678 . "@src64/flow.l") +fin (2225 . "@src64/subr.l") +finally (2667 . "@src64/flow.l") find (1333 . "@src64/apply.l") fish (1671 . "@src64/apply.l") -flg? (2635 . "@src64/subr.l") -flip (1886 . "@src64/subr.l") -flush (5254 . "@src64/io.l") -fold (3630 . "@src64/sym.l") -for (2378 . "@src64/flow.l") -fork (3469 . "@src64/flow.l") -format (2085 . "@src64/big.l") +flg? (2640 . "@src64/subr.l") +flip (1891 . "@src64/subr.l") +flush (5263 . "@src64/io.l") +fold (3764 . "@src64/sym.l") +for (2367 . "@src64/flow.l") +fork (3458 . "@src64/flow.l") +format (2086 . "@src64/big.l") free (1980 . "@src64/db.l") -from (3649 . "@src64/io.l") +from (3652 . "@src64/io.l") full (1092 . "@src64/subr.l") fully (1425 . "@src64/apply.l") -fun? (783 . "@src64/sym.l") -gc (456 . "@src64/gc.l") -ge0 (2723 . "@src64/big.l") -get (2996 . "@src64/sym.l") -getd (791 . "@src64/sym.l") -getl (3309 . "@src64/sym.l") -glue (1395 . "@src64/sym.l") -group (4127 . "@src64/subr.l") -gt0 (2733 . "@src64/big.l") -hash (3128 . "@src64/big.l") -head (2007 . "@src64/subr.l") -heap (552 . "@src64/main.l") -hear (3334 . "@src64/io.l") -host (195 . "@src64/net.l") +fun? (909 . "@src64/sym.l") +gc (458 . "@src64/gc.l") +ge0 (2724 . "@src64/big.l") +get (3120 . "@src64/sym.l") +getd (917 . "@src64/sym.l") +getl (3433 . "@src64/sym.l") +glue (1526 . "@src64/sym.l") +group (4132 . "@src64/subr.l") +gt0 (2734 . "@src64/big.l") +hash (3129 . "@src64/big.l") +head (2012 . "@src64/subr.l") +heap (554 . "@src64/main.l") +hear (3337 . "@src64/io.l") +host (196 . "@src64/net.l") id (1034 . "@src64/db.l") -idx (2258 . "@src64/sym.l") -if (1909 . "@src64/flow.l") -if2 (1928 . "@src64/flow.l") -ifn (1969 . "@src64/flow.l") -in (4311 . "@src64/io.l") -inc (2252 . "@src64/big.l") -index (2827 . "@src64/subr.l") +idx (2382 . "@src64/sym.l") +if (1898 . "@src64/flow.l") +if2 (1917 . "@src64/flow.l") +ifn (1958 . "@src64/flow.l") +in (4314 . "@src64/io.l") +inc (2253 . "@src64/big.l") +index (2832 . "@src64/subr.l") info (3118 . "@src64/main.l") -insert (1594 . "@src64/subr.l") -intern (1040 . "@src64/sym.l") -ipid (3414 . "@src64/flow.l") -isa (969 . "@src64/flow.l") -job (1436 . "@src64/flow.l") +insert (1599 . "@src64/subr.l") +intern (1150 . "@src64/sym.l") +ipid (3403 . "@src64/flow.l") +isa (958 . "@src64/flow.l") +job (1425 . "@src64/flow.l") journal (977 . "@src64/db.l") -key (3482 . "@src64/io.l") -kids (518 . "@src64/main.l") -kill (3446 . "@src64/flow.l") -last (2231 . "@src64/subr.l") -le0 (2710 . "@src64/big.l") -length (2931 . "@src64/subr.l") -let (1519 . "@src64/flow.l") -let? (1644 . "@src64/flow.l") +key (3485 . "@src64/io.l") +kids (520 . "@src64/main.l") +kill (3435 . "@src64/flow.l") +last (2236 . "@src64/subr.l") +le0 (2711 . "@src64/big.l") +length (2936 . "@src64/subr.l") +let (1508 . "@src64/flow.l") +let? (1633 . "@src64/flow.l") lieu (1163 . "@src64/db.l") -line (3805 . "@src64/io.l") -lines (3958 . "@src64/io.l") +line (3808 . "@src64/io.l") +lines (3961 . "@src64/io.l") link (1188 . "@src64/subr.l") -lisp (2310 . "@src64/main.l") +lisp (2301 . "@src64/main.l") list (904 . "@src64/subr.l") -listen (162 . "@src64/net.l") +listen (163 . "@src64/net.l") lit (150 . "@src64/flow.l") -load (4288 . "@src64/io.l") +load (4291 . "@src64/io.l") lock (1195 . "@src64/db.l") -loop (2321 . "@src64/flow.l") -low? (3496 . "@src64/sym.l") -lowc (3526 . "@src64/sym.l") -lst? (2605 . "@src64/subr.l") -lt0 (2700 . "@src64/big.l") -lup (2449 . "@src64/sym.l") +loop (2310 . "@src64/flow.l") +low? (3620 . "@src64/sym.l") +lowc (3654 . "@src64/sym.l") +lst? (2610 . "@src64/subr.l") +lt0 (2701 . "@src64/big.l") +lup (2573 . "@src64/sym.l") made (1123 . "@src64/subr.l") make (1104 . "@src64/subr.l") map (859 . "@src64/apply.l") @@ -215,160 +215,161 @@ maplist (943 . "@src64/apply.l") maps (800 . "@src64/apply.l") mark (1898 . "@src64/db.l") -match (3323 . "@src64/subr.l") -max (2522 . "@src64/subr.l") +match (3328 . "@src64/subr.l") +max (2527 . "@src64/subr.l") maxi (1567 . "@src64/apply.l") -member (2645 . "@src64/subr.l") -memq (2667 . "@src64/subr.l") -meta (3416 . "@src64/sym.l") -meth (1097 . "@src64/flow.l") -method (1061 . "@src64/flow.l") -min (2551 . "@src64/subr.l") +member (2650 . "@src64/subr.l") +memq (2672 . "@src64/subr.l") +meta (3540 . "@src64/sym.l") +meth (1086 . "@src64/flow.l") +method (1050 . "@src64/flow.l") +min (2556 . "@src64/subr.l") mini (1619 . "@src64/apply.l") mix (1276 . "@src64/subr.l") -mmeq (2695 . "@src64/subr.l") -n0 (2384 . "@src64/subr.l") -n== (2274 . "@src64/subr.l") -nT (2393 . "@src64/subr.l") -name (535 . "@src64/sym.l") -nand (1763 . "@src64/flow.l") -native (1631 . "@src64/main.l") +mmeq (2700 . "@src64/subr.l") +n0 (2389 . "@src64/subr.l") +n== (2279 . "@src64/subr.l") +nT (2398 . "@src64/subr.l") +name (662 . "@src64/sym.l") +nand (1752 . "@src64/flow.l") +native (1622 . "@src64/main.l") need (936 . "@src64/subr.l") -new (841 . "@src64/flow.l") -next (2624 . "@src64/main.l") -nil (1846 . "@src64/flow.l") -nond (2046 . "@src64/flow.l") -nor (1784 . "@src64/flow.l") -not (1836 . "@src64/flow.l") +new (830 . "@src64/flow.l") +next (2615 . "@src64/main.l") +nil (1835 . "@src64/flow.l") +nond (2035 . "@src64/flow.l") +nor (1773 . "@src64/flow.l") +not (1825 . "@src64/flow.l") nth (688 . "@src64/subr.l") -num? (2616 . "@src64/subr.l") -off (1781 . "@src64/sym.l") -offset (2867 . "@src64/subr.l") -on (1770 . "@src64/sym.l") -onOff (1792 . "@src64/sym.l") -one (1817 . "@src64/sym.l") -open (4462 . "@src64/io.l") -opid (3430 . "@src64/flow.l") +num? (2621 . "@src64/subr.l") +off (1912 . "@src64/sym.l") +offset (2872 . "@src64/subr.l") +on (1901 . "@src64/sym.l") +onOff (1923 . "@src64/sym.l") +one (1948 . "@src64/sym.l") +open (4465 . "@src64/io.l") +opid (3419 . "@src64/flow.l") opt (3421 . "@src64/main.l") -or (1744 . "@src64/flow.l") -out (4330 . "@src64/io.l") -pack (1304 . "@src64/sym.l") -pair (2589 . "@src64/subr.l") +or (1733 . "@src64/flow.l") +out (4333 . "@src64/io.l") +pack (1435 . "@src64/sym.l") +pair (2594 . "@src64/subr.l") pass (764 . "@src64/apply.l") -pat? (769 . "@src64/sym.l") -path (1282 . "@src64/io.l") -peek (3537 . "@src64/io.l") +pat? (895 . "@src64/sym.l") +path (1281 . "@src64/io.l") +peek (3540 . "@src64/io.l") pick (1381 . "@src64/apply.l") -pipe (4388 . "@src64/io.l") -place (1700 . "@src64/subr.l") -poll (3426 . "@src64/io.l") +pipe (4391 . "@src64/io.l") +place (1705 . "@src64/subr.l") +poll (3429 . "@src64/io.l") pool (657 . "@src64/db.l") -pop (1984 . "@src64/sym.l") +pop (2115 . "@src64/sym.l") port (5 . "@src64/net.l") -pr (5367 . "@src64/io.l") -pre? (1571 . "@src64/sym.l") -prin (5178 . "@src64/io.l") -prinl (5192 . "@src64/io.l") -print (5218 . "@src64/io.l") -println (5249 . "@src64/io.l") -printsp (5234 . "@src64/io.l") -prior (2903 . "@src64/subr.l") -prog (1864 . "@src64/flow.l") -prog1 (1872 . "@src64/flow.l") -prog2 (1889 . "@src64/flow.l") -prop (3027 . "@src64/sym.l") -protect (542 . "@src64/main.l") -prove (3719 . "@src64/subr.l") -push (1855 . "@src64/sym.l") -push1 (1891 . "@src64/sym.l") -push1q (1940 . "@src64/sym.l") -put (2935 . "@src64/sym.l") -putl (3227 . "@src64/sym.l") +pr (5376 . "@src64/io.l") +pre? (1702 . "@src64/sym.l") +prin (5187 . "@src64/io.l") +prinl (5201 . "@src64/io.l") +print (5227 . "@src64/io.l") +println (5258 . "@src64/io.l") +printsp (5243 . "@src64/io.l") +prior (2908 . "@src64/subr.l") +prog (1853 . "@src64/flow.l") +prog1 (1861 . "@src64/flow.l") +prog2 (1878 . "@src64/flow.l") +prop (3151 . "@src64/sym.l") +protect (544 . "@src64/main.l") +prove (3724 . "@src64/subr.l") +push (1986 . "@src64/sym.l") +push1 (2022 . "@src64/sym.l") +push1q (2071 . "@src64/sym.l") +put (3059 . "@src64/sym.l") +putl (3351 . "@src64/sym.l") pwd (3036 . "@src64/main.l") -queue (2142 . "@src64/sym.l") -quit (1331 . "@src64/main.l") +queue (2266 . "@src64/sym.l") +quit (1333 . "@src64/main.l") quote (134 . "@src64/flow.l") -rand (3154 . "@src64/big.l") +rand (3155 . "@src64/big.l") range (1014 . "@src64/subr.l") -rank (3274 . "@src64/subr.l") -rassoc (3211 . "@src64/subr.l") -raw (460 . "@src64/main.l") -rd (5296 . "@src64/io.l") -read (2730 . "@src64/io.l") -remove (1653 . "@src64/subr.l") -replace (1517 . "@src64/subr.l") -rest (2670 . "@src64/main.l") -reverse (1865 . "@src64/subr.l") -rewind (5262 . "@src64/io.l") +rank (3279 . "@src64/subr.l") +rassoc (3216 . "@src64/subr.l") +raw (462 . "@src64/main.l") +rd (5305 . "@src64/io.l") +read (2733 . "@src64/io.l") +remove (1658 . "@src64/subr.l") +replace (1522 . "@src64/subr.l") +rest (2661 . "@src64/main.l") +reverse (1870 . "@src64/subr.l") +rewind (5271 . "@src64/io.l") rollback (1815 . "@src64/db.l") rot (852 . "@src64/subr.l") run (305 . "@src64/flow.l") -sect (2731 . "@src64/subr.l") -seed (3114 . "@src64/big.l") +sect (2736 . "@src64/subr.l") +seed (3115 . "@src64/big.l") seek (1285 . "@src64/apply.l") -send (1136 . "@src64/flow.l") +send (1125 . "@src64/flow.l") seq (1090 . "@src64/db.l") -set (1642 . "@src64/sym.l") -setq (1675 . "@src64/sym.l") -sigio (498 . "@src64/main.l") -size (2998 . "@src64/subr.l") -skip (3607 . "@src64/io.l") -sort (4202 . "@src64/subr.l") -sp? (760 . "@src64/sym.l") -space (5196 . "@src64/io.l") -split (1779 . "@src64/subr.l") -sqrt (2940 . "@src64/big.l") -stack (580 . "@src64/main.l") -state (2153 . "@src64/flow.l") -stem (2176 . "@src64/subr.l") -str (4125 . "@src64/io.l") -str? (1178 . "@src64/sym.l") -strip (1763 . "@src64/subr.l") -struct (2101 . "@src64/main.l") -sub? (1604 . "@src64/sym.l") +set (1773 . "@src64/sym.l") +setq (1806 . "@src64/sym.l") +sigio (500 . "@src64/main.l") +size (3003 . "@src64/subr.l") +skip (3610 . "@src64/io.l") +sort (4207 . "@src64/subr.l") +sp? (886 . "@src64/sym.l") +space (5205 . "@src64/io.l") +split (1784 . "@src64/subr.l") +sqrt (2941 . "@src64/big.l") +stack (582 . "@src64/main.l") +state (2142 . "@src64/flow.l") +stem (2181 . "@src64/subr.l") +str (4128 . "@src64/io.l") +str? (1310 . "@src64/sym.l") +strip (1768 . "@src64/subr.l") +struct (2092 . "@src64/main.l") +sub? (1735 . "@src64/sym.l") sum (1516 . "@src64/apply.l") -super (1227 . "@src64/flow.l") -swap (1698 . "@src64/sym.l") -sym (4111 . "@src64/io.l") -sym? (2624 . "@src64/subr.l") -symbols (975 . "@src64/sym.l") -sync (3294 . "@src64/io.l") -sys (864 . "@src64/main.l") -t (1855 . "@src64/flow.l") -tail (2098 . "@src64/subr.l") -tell (3366 . "@src64/io.l") -text (1433 . "@src64/sym.l") -throw (2641 . "@src64/flow.l") -tick (3382 . "@src64/flow.l") -till (3716 . "@src64/io.l") -time (2894 . "@src64/main.l") -touch (1214 . "@src64/sym.l") -trail (731 . "@src64/main.l") -trim (1946 . "@src64/subr.l") -try (1179 . "@src64/flow.l") -type (922 . "@src64/flow.l") -udp (306 . "@src64/net.l") -unify (4101 . "@src64/subr.l") -unless (2005 . "@src64/flow.l") -until (2229 . "@src64/flow.l") -up (794 . "@src64/main.l") -upp? (3511 . "@src64/sym.l") -uppc (3578 . "@src64/sym.l") -use (1677 . "@src64/flow.l") +super (1216 . "@src64/flow.l") +swap (1829 . "@src64/sym.l") +sym (4114 . "@src64/io.l") +sym? (2629 . "@src64/subr.l") +symbols (1072 . "@src64/sym.l") +sync (3297 . "@src64/io.l") +sys (866 . "@src64/main.l") +t (1844 . "@src64/flow.l") +tail (2103 . "@src64/subr.l") +tell (3369 . "@src64/io.l") +text (1564 . "@src64/sym.l") +throw (2630 . "@src64/flow.l") +tick (3371 . "@src64/flow.l") +till (3719 . "@src64/io.l") +time (2885 . "@src64/main.l") +touch (1345 . "@src64/sym.l") +trail (733 . "@src64/main.l") +trim (1951 . "@src64/subr.l") +try (1168 . "@src64/flow.l") +type (911 . "@src64/flow.l") +tzo (3009 . "@src64/main.l") +udp (307 . "@src64/net.l") +unify (4106 . "@src64/subr.l") +unless (1994 . "@src64/flow.l") +until (2218 . "@src64/flow.l") +up (796 . "@src64/main.l") +upp? (3637 . "@src64/sym.l") +uppc (3709 . "@src64/sym.l") +use (1666 . "@src64/flow.l") usec (3018 . "@src64/main.l") -val (1623 . "@src64/sym.l") +val (1754 . "@src64/sym.l") version (3435 . "@src64/main.l") -wait (3256 . "@src64/io.l") -when (1988 . "@src64/flow.l") -while (2205 . "@src64/flow.l") -wipe (3367 . "@src64/sym.l") -with (1334 . "@src64/flow.l") -wr (5384 . "@src64/io.l") -xchg (1725 . "@src64/sym.l") -xor (1805 . "@src64/flow.l") -x| (2900 . "@src64/big.l") -yield (2908 . "@src64/flow.l") +wait (3259 . "@src64/io.l") +when (1977 . "@src64/flow.l") +while (2194 . "@src64/flow.l") +wipe (3491 . "@src64/sym.l") +with (1323 . "@src64/flow.l") +wr (5393 . "@src64/io.l") +xchg (1856 . "@src64/sym.l") +xor (1794 . "@src64/flow.l") +x| (2901 . "@src64/big.l") +yield (2897 . "@src64/flow.l") yoke (1212 . "@src64/subr.l") -zap (1228 . "@src64/sym.l") -zero (1806 . "@src64/sym.l") -| (2860 . "@src64/big.l") +zap (1359 . "@src64/sym.l") +zero (1937 . "@src64/sym.l") +| (2861 . "@src64/big.l") diff -Nru picolisp-16.12/lib/misc.l picolisp-17.6/lib/misc.l --- picolisp-16.12/lib/misc.l 2016-11-24 10:42:54.000000000 +0000 +++ picolisp-17.6/lib/misc.l 2017-06-18 09:28:49.000000000 +0000 @@ -1,4 +1,4 @@ -# 24nov16abu +# 18jun17abu # (c) Software Lab. Alexander Burger # *Allow @@ -300,36 +300,40 @@ (or (format @D) 0) ) ) ) ) (de expDat (S) - (use (@Y @M @D X) - (unless (match *DateFmt (setq S (chop S))) - (if - (or - (cdr (setq S (split S "."))) - (>= 2 (length (car S))) ) - (setq - @D (car S) - @M (cadr S) - @Y (caddr S) ) - (setq - @D (head 2 (car S)) - @M (head 2 (nth (car S) 3)) - @Y (nth (car S) 5) ) ) ) - (and - (setq @D (format @D)) - (date - (nond - (@Y (car (date (date)))) - ((setq X (format @Y))) - ((>= X 100) - (+ X - (* 100 (/ (car (date (date))) 100)) ) ) - (NIL X) ) - (nond - (@M (cadr (date (date)))) - ((setq X (format @M)) 0) - ((n0 X) (cadr (date (date)))) - (NIL X) ) - @D ) ) ) ) + (cond + ((= "." S) (date)) + ((or (pre? "+" S) (pre? "-" S)) (+ (date) (format S))) + (T + (use (@Y @M @D X) + (unless (match *DateFmt (setq S (chop S))) + (if + (or + (cdr (setq S (split S "."))) + (>= 2 (length (car S))) ) + (setq + @D (car S) + @M (cadr S) + @Y (caddr S) ) + (setq + @D (head 2 (car S)) + @M (head 2 (nth (car S) 3)) + @Y (nth (car S) 5) ) ) ) + (and + (setq @D (format @D)) + (date + (nond + (@Y (car (date (date)))) + ((setq X (format @Y))) + ((>= X 100) + (+ X + (* 100 (/ (car (date (date))) 100)) ) ) + (NIL X) ) + (nond + (@M (cadr (date (date)))) + ((setq X (format @M)) 0) + ((n0 X) (cadr (date (date)))) + (NIL X) ) + @D ) ) ) ) ) ) # Day of the week (de day (Dat Lst) @@ -395,6 +399,27 @@ (de basename (F) (pack (stem (chop F) '/)) ) +(de ssl ("Host" "Path" . "Prg") + (in (list "@bin/ssl" "Host" 443 "Path") + (and + (tail '`(chop "200 OK") (line)) + (from "\r\n\r\n") + (run "Prg") ) ) ) + +(de download (Host Src Dst) + (let (F (tmp 'download) Size) + (in (list "@bin/ssl" Host 443 Src) + (and + (tail '`(chop "200 OK") (line)) + (from "Content-Length:") + (setq Size (read)) + (from "\r\n\r\n") + (out F (echo)) + (= Size (car (info F))) + `(if (== 64 64) + '(=0 (native "@" "rename" 'I F Dst)) + '(call "mv" F Dst) ) ) ) ) ) + # Print or eval (de prEval (Prg Ofs) (default Ofs 1) @@ -435,11 +460,20 @@ (out S (prinl "From: " From "^M") (prinl "To: " (or (fin To) (glue "," To)) "^M") - (prinl "Subject: " Sub "^M") + (prin "Subject: ") + (ifn (find > (chop Sub) '("~" .)) + (prinl Sub "^M") + (prin "=?utf-8?B?") + (pipe (prin Sub) + (while (ext:Base64 (rd 1) (rd 1) (rd 1))) ) + (prinl "?=^M") ) (prinl "User-Agent: PicoLisp^M") (prinl "MIME-Version: 1.0^M") (when Att - (prinl "Content-Type: multipart/mixed; boundary=\"" B "\"^M") + (prinl + "Content-Type: multipart/" + (if (cadr Att) "mixed" "alternative") + "; boundary=\"" B "\"^M" ) (prinl "^M") (prinl "--" B "^M") ) (prinl "Content-Type: text/plain; charset=utf-8^M") @@ -450,16 +484,19 @@ (when Att (loop (prinl "--" B "^M") + (prin "Content-Type: " (or (caddr Att) "application/octet-stream")) + (and (cadr Att) (prin "; name=\"" @ "\"")) + (prinl "^M") (prinl - "Content-Type: " - (or (caddr Att) "application/octet-stream") - "; name=\"" - (cadr Att) - "\"^M" ) - (prinl "Content-Transfer-Encoding: base64^M") + "Content-Transfer-Encoding: " + (if (cadr Att) "base64" "8bit") + "^M" ) (prinl "^M") - (in (car Att) (prBase64 18)) - (prinl) + (in (car Att) + (ifn (cadr Att) + (echo) + (prBase64 18) + (prinl) ) ) (prinl "^M") (NIL (setq Att (cdddr Att))) ) (prinl "--" B "--^M") ) diff -Nru picolisp-16.12/lib/nodroid.l picolisp-17.6/lib/nodroid.l --- picolisp-16.12/lib/nodroid.l 1970-01-01 00:00:00.000000000 +0000 +++ picolisp-17.6/lib/nodroid.l 2016-07-07 09:44:40.000000000 +0000 @@ -0,0 +1,6 @@ +# 07jul16abu +# (c) Software Lab. Alexander Burger + +(off *Uuid) + +# vi:et:ts=3:sw=3 diff -Nru picolisp-16.12/lib/svg.l picolisp-17.6/lib/svg.l --- picolisp-16.12/lib/svg.l 2016-11-24 10:25:53.000000000 +0000 +++ picolisp-17.6/lib/svg.l 2017-03-10 07:59:39.000000000 +0000 @@ -1,7 +1,7 @@ -# 24nov16abu +# 10mar17abu # (c) Software Lab. Alexander Burger -# *Unit *DX *DY *Pos *Page *StrokeWidth +# *DX *DY *Pos *Page *StrokeWidth # *FontSize *FontFamily *FontStyle *FontWeight (de *A4-DX . 595) @@ -15,11 +15,11 @@ *FontWeight "normal" ) # SVG Element -(de (*DX *DY *Unit . "Prg") +(de (*DX *DY Z . "Prg") (prin "") diff -Nru picolisp-16.12/lib/test.l picolisp-17.6/lib/test.l --- picolisp-16.12/lib/test.l 2015-11-10 13:00:36.000000000 +0000 +++ picolisp-17.6/lib/test.l 2016-12-21 07:20:35.000000000 +0000 @@ -1,4 +1,4 @@ -# 10nov15abu +# 21dec16abu # (c) Software Lab. Alexander Burger ### Unit Tests ### @@ -8,6 +8,9 @@ # Global usage: # pil @lib/test.l -bye + +(unless *Dbg + (quit "Needs debug mode '+'") ) + (setq *CMD (cmd) *PWD (in '(pwd) (line T)) ) diff -Nru picolisp-16.12/lib/xhtml.l picolisp-17.6/lib/xhtml.l --- picolisp-16.12/lib/xhtml.l 2016-11-24 10:28:30.000000000 +0000 +++ picolisp-17.6/lib/xhtml.l 2016-12-22 08:12:34.000000000 +0000 @@ -1,4 +1,4 @@ -# 24nov16abu +# 22dec16abu # (c) Software Lab. Alexander Burger # *JS "*JS" *Style *Menu *Tab *ID @@ -360,7 +360,7 @@ (de "Lst" (let P (and (=T (car "Lst")) (++ "Lst")) (recur ("Lst" "LayX") - (use "LayY" + (use ("LayX" "LayY") (for "L" "Lst" (let ("Args" (mapcar eval (cddar "L")) diff -Nru picolisp-16.12/lib.css picolisp-17.6/lib.css --- picolisp-16.12/lib.css 2016-09-03 09:38:21.000000000 +0000 +++ picolisp-17.6/lib.css 2017-02-24 09:20:26.000000000 +0000 @@ -1,4 +1,4 @@ -/* 03sep16abu +/* 24feb17abu * 17nov12jk * (c) Software Lab. Alexander Burger */ @@ -53,6 +53,7 @@ } input, textarea, select { + border: 0; font-size: small; background-color: white; } @@ -210,6 +211,7 @@ /* Buttons */ .submit { font-weight: bold; + font-size: smaller; background-color: #eee; background-image: -moz-linear-gradient(top, #eee, #ccc); background-image: -o-linear-gradient(top, #eee, #ccc); @@ -258,8 +260,9 @@ /* Fonts */ .tiny { - font-size: smaller; + border: 0; padding: 0; + font-size: smaller; } .note, .ask { diff -Nru picolisp-16.12/lib.l picolisp-17.6/lib.l --- picolisp-16.12/lib.l 2016-11-24 10:16:21.000000000 +0000 +++ picolisp-17.6/lib.l 2017-03-08 12:02:29.000000000 +0000 @@ -1,4 +1,4 @@ -# 24nov16abu +# 08mar17abu # (c) Software Lab. Alexander Burger (de task (Key . Prg) @@ -157,24 +157,26 @@ (de rc (File Key . @) (ctl File - (let Lst (in File (read)) - (ifn (args) - (cdr (assoc Key Lst)) - (let Val (next) - (if (assoc Key Lst) - (con @ Val) - (push 'Lst (cons Key Val)) ) - (protect - (out File (println Lst)) ) - Val ) ) ) ) ) + (in File + (let Lst (read) + (ifn (args) + (cdr (assoc Key Lst)) + (let Val (next) + (if (assoc Key Lst) + (con @ Val) + (push 'Lst (cons Key Val)) ) + (protect + (out File (println Lst)) ) + Val ) ) ) ) ) ) (de acquire (File) (ctl File - (let P (in File (rd)) - (or - (= P *Pid) - (unless (and P (kill P 0)) - (out File (pr *Pid)) ) ) ) ) ) + (in File + (let P (rd) + (or + (= P *Pid) + (unless (and P (kill P 0)) + (out File (pr *Pid)) ) ) ) ) ) ) (de release (File) (ctl File (out File)) ) @@ -208,13 +210,16 @@ (loc S (car X)) (loc S (cdr X)) ) ) ) ) -(de local Lst - (mapc zap Lst) ) +(unless (== 64 64) (from "####")) +(de local () + (symbols (list (car (symbols))) + (read) ) ) (de import Lst (for Sym Lst - (unless (== Sym (intern Sym)) - (quit "Import conflict" Sym) ) ) ) + (intern Sym T) ) + Lst ) +#### ### OOP ### (de class Lst diff -Nru picolisp-16.12/loc/es picolisp-17.6/loc/es --- picolisp-16.12/loc/es 2016-01-05 08:56:48.000000000 +0000 +++ picolisp-17.6/loc/es 2017-05-06 07:54:36.000000000 +0000 @@ -1,4 +1,4 @@ -# 05jan16abu +# 06may17abu # Armadillo # Manuel Cano @@ -74,6 +74,7 @@ "Scroll down one line" "Bajar una línea" "Scroll down one page" "Bajar una página" "Go to last line" "Ir a la última línea" +"Insert empty row" "Insertar línea vacia" "Delete row" "Borrar línea" "Shift row up" "Mover línea arriba" "Clear all input fields" "Borrar todos los campos" diff -Nru picolisp-16.12/loc/fr picolisp-17.6/loc/fr --- picolisp-16.12/loc/fr 1970-01-01 00:00:00.000000000 +0000 +++ picolisp-17.6/loc/fr 2017-03-03 11:08:28.000000000 +0000 @@ -0,0 +1,87 @@ +# 02mar17abu +# Raman Gopalan + +"Language" "Langue" + +# lib/db.l +"Boolean input expected" "Type booléen attendu" +"Numeric input expected" "Type numérique attendu" +"Symbolic type expected" "Type symbole attendu" +"String type expected" "Type chaîne de caractères attendu" +"Type error" "Erreur de type" +"Not unique" "Non unique" +"Input required" "Saisie requise" + +# lib/form.l +"Cancel" "Annuler" +"Yes" "Oui" +"No" "Non" +"Select" "Sélectionner" +"Delete row?" "Supprimer la ligne?" +"Show" "Montrer" +"Bad date format" "Mauvais format de date" +"Bad time format" "Mauvais format d'heure" +"Bad phone number format" "Mauvais format de numéro de téléphone" +"male" "mâle" +"female" "femelle" +"New" "Nouveau" +"Edit" "Modifier" +"Save" "Enregistrer" +"Done" "Terminé" +"Currently edited by '@2' (@1)" "Actuellement modifié par '@2' (@1)" +"Search" "Chercher" +"Reset" "Réinitialiser" +"New/Copy" "Nouveau/Copie" +"Restore" "Restaurer" +"Restore @1?" "Restaurer @1?" +"Delete" "Supprimer" +"Delete @1?" "Supprimer @1?" +"Data not found" "Données introuvables" +"Undo" "Annuler" +"Undo: '@1'" "Annuler: '@1'" +"Redo" "Refaire" +"Redo: '@1'" "Refaire: '@1'" + +# General +"login" "se connecter" +"logout" "se déconnecter" +"' logged in" "' connecté" +"Name" "Nom" +"Login Name" "Identifiant" +"Full Name" "Nom complet" +"Password" "Mot de passe" +"Permission denied" "Permission refusée" +"Permissions" "Autorisations" +"Role" "Rôle" +"Role Administration" "Gestion des rôles" +"Roles" "Rôles" +"User" "Utilisateur" +"User Administration" "Gestion des utilisateurs" +"Users" "Utilisateurs" +"Phone" "Téléphone" + +# Tooltips +"Open submenu" "Ouvrir le sous-menu" +"Close submenu" "Fermer le sous-menu" +"Next object of the same type" "Objet suivant du même type" +"Find or create an object of the same type" "Trouver ou créer un objet du même type" +"Choose a suitable value" "Choisissez une valeur appropriée" +"Adopt this value" "Adopter cette valeur" +"Go to first line" "Aller à la première ligne" +"Scroll up one page" "Défiler d'une page vers le haut" +"Scroll up one line" "Défiler d'une ligne vers le haut" +"Scroll down one line" "Défiler d'une ligne vers le bas" +"Scroll down one page" "Défiler d'une page vers le bas" +"Go to last line" "Aller à la dernière ligne" +"Insert empty row" "Insérer une ligne vide" +"Delete row" "Supprimer la ligne" +"Shift row up" "Déplacer la ligne vers le haut" +"Clear all input fields" "Effacer tous les champs de saisie" +"Release exclusive write access for this object" "Libérer l'accès en écriture exclusif pour cet objet" +"Gain exclusive write access for this object" "Obtenir un accès en écriture exclusif pour cet objet" +"Start search" "Lancer la recherche" +"Create new object" "Créer un nouvel objet" +"Create a new copy of this object" "Créer une nouvelle copie de cet objet" +"Mark this object as \"not deleted\"" "Marquer cet objet comme \"non supprimé\"" +"Mark this object as \"deleted\"" "Marquer cet objet comme \"supprimé\"" +"Update" "Mettre à jour" diff -Nru picolisp-16.12/loc/FR.l picolisp-17.6/loc/FR.l --- picolisp-16.12/loc/FR.l 1970-01-01 00:00:00.000000000 +0000 +++ picolisp-17.6/loc/FR.l 2017-03-03 11:08:23.000000000 +0000 @@ -0,0 +1,7 @@ +(setq + *Sep0 "," + *Sep3 "." + *CtryCode 33 + *DateFmt '(@D "/" @M "/" @Y) + *DayFmt '("Lundi" "Mardi" "Mercredi" "Jeudi" "Vendredi" "Samedi" "Dimanche") + *MonFmt '("Janvier" "Février" "Mars" "Avril" "Mai" "Juin" "Juillet" "Août" "Septembre" "Octobre" "Novembre" "Décembre") ) diff -Nru picolisp-16.12/misc/mailing picolisp-17.6/misc/mailing --- picolisp-16.12/misc/mailing 2014-07-17 13:28:37.000000000 +0000 +++ picolisp-17.6/misc/mailing 2017-04-19 07:42:02.000000000 +0000 @@ -1,5 +1,5 @@ #!bin/picolisp lib.l -# 17jul14abu +# 19apr17abu # (c) Software Lab. Alexander Burger # Configuration @@ -20,13 +20,13 @@ (quit "Bad mbox file") ) (char) (while (setq *From (lowc (till " " T))) + (line) # Skip rest of line and "\r\n" (off *Name *Subject *Date *MessageID *InReplyTo *MimeVersion *ContentType *ContentTransferEncoding *ContentDisposition *UserAgent ) (while (trim (split (line) " ")) (let L @ - (while (= ";" (last (last L))) - (char) # Skip TAB + (while (and (sub? (peek) " \t") (char)) # Skip WSP (conc L (trim (split (line) " "))) ) (setq *Line (glue " " (cdr L))) (case (pack (car L)) @@ -87,7 +87,7 @@ (prinl "You are now unsubscribed^M") (prinl "****^M^J^M") ) ) (echo "^JFrom ") - (prinl "-- ^M") + (prinl "^J-- ^M") (prinl "UNSUBSCRIBE: mailto:" *MailingList "?subject=Unsubscribe^M") (prinl ".^M") (prinl "QUIT^M") ) ) diff -Nru picolisp-16.12/src/httpGate.c picolisp-17.6/src/httpGate.c --- picolisp-16.12/src/httpGate.c 2016-07-29 06:51:34.000000000 +0000 +++ picolisp-17.6/src/httpGate.c 2017-04-12 06:07:17.000000000 +0000 @@ -1,4 +1,4 @@ -/* 29jul16abu +/* 12apr17abu * (c) Software Lab. Alexander Burger */ @@ -39,6 +39,12 @@ static char *Config; static char Ciphers[] = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:DES-CBC3-SHA"; +static char Head_302[] = + "HTTP/1.0 302 Found\r\n" + "Server: PicoLisp\r\n" + "Location: %s\r\n" + "\r\n"; + static char Head_410[] = "HTTP/1.0 410 Gone\r\n" "Server: PicoLisp\r\n" @@ -68,34 +74,38 @@ np = malloc(sizeof(name)); np->key = strdup(strtok(p, delim)); np->less = np->more = NULL; - p = np->ev[0] = malloc(5 + strlen(np->key) + 1); - strcpy(p, "NAME="), strcpy(p+5, np->key); - np->port = atoi(ps = strtok(NULL, delim)); - if (!(pw = getpwnam(strtok(NULL, delim))) || pw->pw_uid == 0 || pw->pw_gid == 0) { - free(np); - continue; - } - np->uid = pw->pw_uid; - np->gid = pw->pw_gid; - p = np->ev[1] = malloc(5 + strlen(pw->pw_dir) + 1); - strcpy(p, "HOME="), strcpy(p+5, pw->pw_dir); - p = np->ev[2] = malloc(5 + strlen(ps) + 1); - strcpy(p, "PORT="), strcpy(p+5, ps); - np->ev[3] = NULL; - np->dir = strdup(strtok(NULL, delim)); - np->log = *(p = strtok(NULL, delim)) == '^'? NULL : strdup(p); - cnt = 0; - while (p = strtok(NULL, delim)) { - if (*p == '^') - np->av[cnt] = strdup(""); - else { - p = np->av[cnt] = strdup(p); - while (p = strchr(p, '^')) - *p++ = ' '; + if ((np->port = atoi(ps = strtok(NULL, delim))) == 0) + np->dir = strdup(strtok(NULL, delim)); + else { + if (!(pw = getpwnam(strtok(NULL, delim))) || pw->pw_uid == 0 || pw->pw_gid == 0) { + free(np->key); + free(np); + continue; } - np = realloc(np, sizeof(name) + ++cnt * sizeof(char*)); + np->uid = pw->pw_uid; + np->gid = pw->pw_gid; + p = np->ev[0] = malloc(5 + strlen(np->key) + 1); + strcpy(p, "NAME="), strcpy(p+5, np->key); + p = np->ev[1] = malloc(5 + strlen(pw->pw_dir) + 1); + strcpy(p, "HOME="), strcpy(p+5, pw->pw_dir); + p = np->ev[2] = malloc(5 + strlen(ps) + 1); + strcpy(p, "PORT="), strcpy(p+5, ps); + np->ev[3] = NULL; + np->dir = strdup(strtok(NULL, delim)); + np->log = *(p = strtok(NULL, delim)) == '^'? NULL : strdup(p); + cnt = 0; + while (p = strtok(NULL, delim)) { + if (*p == '^') + np->av[cnt] = strdup(""); + else { + p = np->av[cnt] = strdup(p); + while (p = strchr(p, '^')) + *p++ = ' '; + } + np = realloc(np, sizeof(name) + ++cnt * sizeof(char*)); + } + np->av[cnt] = NULL; } - np->av[cnt] = NULL; p = np->key; if (!Names || p[0] == '@' && p[1] == '\0') port = np->port; @@ -116,11 +126,13 @@ if (np->more) freeNames(np->more); free(np->dir); - free(np->log); - for (i = 0; i < 3; ++i) - free(np->ev[i]); - for (i = 0; np->av[i]; ++i) - free(np->av[i]); + if (np->port) { + free(np->log); + for (i = 0; i < 3; ++i) + free(np->ev[i]); + for (i = 0; np->av[i]; ++i) + free(np->av[i]); + } free(np); } @@ -422,6 +434,14 @@ if (port == ports[i]) return 1; + if (np && port == 0) { + i = sprintf(buf, Head_302, np->dir); + if (ssl) + sslWrite(ssl, buf, i); + else + wrBytes(cli, buf, i); + return 0; + } if ((srv = gateConnect(port, np)) < 0) { if (!memchr(q,'~', buf + n - q)) return 1; diff -Nru picolisp-16.12/src/main.c picolisp-17.6/src/main.c --- picolisp-16.12/src/main.c 2016-02-11 14:45:14.000000000 +0000 +++ picolisp-17.6/src/main.c 2017-01-09 09:57:20.000000000 +0000 @@ -1,4 +1,4 @@ -/* 11feb16abu +/* 09jan17abu * (c) Software Lab. Alexander Burger */ @@ -1075,6 +1075,15 @@ return mkTime(h, m, isCell(cdr(x))? evCnt(ex, cdr(x)) : 0); } +// (tzo) -> cnt +any doTzo(any ex __attribute__((unused))) { +#ifdef __linux__ + return boxCnt(localtime(&Tv.tv_sec)->tm_gmtoff); +#else + return Zero; +#endif +} + // (usec ['flg]) -> num any doUsec(any ex) { if (!isNil(EVAL(cadr(ex)))) diff -Nru picolisp-16.12/src/pico.h picolisp-17.6/src/pico.h --- picolisp-16.12/src/pico.h 2016-11-24 09:11:21.000000000 +0000 +++ picolisp-17.6/src/pico.h 2017-01-07 14:24:43.000000000 +0000 @@ -1,4 +1,4 @@ -/* 24nov16abu +/* 07jan17abu * (c) Software Lab. Alexander Burger */ @@ -752,6 +752,7 @@ any doTrim(any); any doTry(any); any doType(any); +any doTzo(any); any doUdp(any); any doUnify(any); any doUnless(any); diff -Nru picolisp-16.12/src/ssl.c picolisp-17.6/src/ssl.c --- picolisp-16.12/src/ssl.c 2016-07-19 12:22:59.000000000 +0000 +++ picolisp-17.6/src/ssl.c 2017-03-28 09:12:35.000000000 +0000 @@ -1,4 +1,4 @@ -/* 19jul16abu +/* 28mar17abu * (c) Software Lab. Alexander Burger */ @@ -75,6 +75,7 @@ static void sslClose(SSL *ssl, int sd) { SSL_shutdown(ssl); + SSL_clear(ssl); close(sd); } diff -Nru picolisp-16.12/src/subr.c picolisp-17.6/src/subr.c --- picolisp-16.12/src/subr.c 2016-10-24 15:29:14.000000000 +0000 +++ picolisp-17.6/src/subr.c 2017-04-05 14:03:52.000000000 +0000 @@ -1,4 +1,4 @@ -/* 24oct16abu +/* 05apr17abu * (c) Software Lab. Alexander Burger */ @@ -557,25 +557,34 @@ return EVAL(car(x)); } -// (delete 'any 'lst) -> lst -any doDelete(any x) { - any y, z; +// (delete 'any 'lst ['flg]) -> lst +any doDelete(any ex) { + any x, y, z; + bool flg; cell c1, c2, c3; - x = cdr(x), Push(c1, y = EVAL(car(x))); - x = cdr(x); - if (!isCell(x = EVAL(car(x)))) { - drop(c1); - return x; - } - if (equal(y, car(x))) { - drop(c1); - return cdr(x); + x = cdr(ex), Push(c1, y = EVAL(car(x))); + x = cadr(x), x = EVAL(x); + flg = !isNil(EVAL(cadddr(ex))); + for (;;) { + if (!isCell(x)) { + drop(c1); + return x; + } + if (!equal(y, car(x))) + break; + x = cdr(x); + if (!flg) { + drop(c1); + return x; + } } Push(c2, x); Push(c3, z = cons(car(x), Nil)); while (isCell(x = cdr(x))) { if (equal(y, car(x))) { + if (flg) + continue; cdr(z) = cdr(x); drop(c1); return data(c3); @@ -587,25 +596,34 @@ return data(c3); } -// (delq 'any 'lst) -> lst -any doDelq(any x) { - any y, z; +// (delq 'any 'lst ['flg]) -> lst +any doDelq(any ex) { + any x, y, z; + bool flg; cell c1, c2, c3; - x = cdr(x), Push(c1, y = EVAL(car(x))); - x = cdr(x); - if (!isCell(x = EVAL(car(x)))) { - drop(c1); - return x; - } - if (y == car(x)) { - drop(c1); - return cdr(x); + x = cdr(ex), Push(c1, y = EVAL(car(x))); + x = cadr(x), x = EVAL(x); + flg = !isNil(EVAL(cadddr(ex))); + for (;;) { + if (!isCell(x)) { + drop(c1); + return x; + } + if (y != car(x)) + break; + x = cdr(x); + if (!flg) { + drop(c1); + return x; + } } Push(c2, x); Push(c3, z = cons(car(x), Nil)); while (isCell(x = cdr(x))) { if (y == car(x)) { + if (flg) + continue; cdr(z) = cdr(x); drop(c1); return data(c3); diff -Nru picolisp-16.12/src/sym.c picolisp-17.6/src/sym.c --- picolisp-16.12/src/sym.c 2016-11-24 09:09:33.000000000 +0000 +++ picolisp-17.6/src/sym.c 2017-04-05 14:16:29.000000000 +0000 @@ -1,4 +1,4 @@ -/* 24nov16abu +/* 05apr17abu * (c) Software Lab. Alexander Burger */ @@ -778,34 +778,47 @@ return val(Pop(c1)); } -// (del 'any 'var) -> lst +// (del 'any 'var ['flg]) -> lst any doDel(any ex) { any x, y; + bool flg; cell c1, c2, c3; x = cdr(ex), Push(c1, EVAL(car(x))); - x = cdr(x), Push(c2, EVAL(car(x))); + x = cadr(x), Push(c2, EVAL(x)); + flg = !isNil(EVAL(cadddr(ex))); NeedVar(ex,data(c2)); CheckVar(ex,data(c2)); if (isSym(data(c2))) Touch(ex,data(c2)); - if (isCell(x = val(data(c2)))) { - if (equal(data(c1), car(x))) { + x = val(data(c2)); + for (;;) { + if (!isCell(x)) { drop(c1); - return val(data(c2)) = cdr(x); + return x; } - Push(c3, y = cons(car(x), Nil)); - while (isCell(x = cdr(x))) { - if (equal(data(c1), car(x))) { - cdr(y) = cdr(x); - drop(c1); - return val(data(c2)) = data(c3); - } - y = cdr(y) = cons(car(x), Nil); + if (!equal(data(c1), car(x))) + break; + val(data(c2)) = x = cdr(x); + if (!flg) { + drop(c1); + return x; + } + } + Push(c3, y = cons(car(x), Nil)); + while (isCell(x = cdr(x))) { + if (equal(data(c1), car(x))) { + if (flg) + continue; + cdr(y) = cdr(x); + drop(c1); + return val(data(c2)) = data(c3); } + y = cdr(y) = cons(car(x), Nil); } + cdr(y) = x; drop(c1); - return val(data(c2)); + return val(data(c2)) = data(c3); } // (queue 'var 'any) -> any diff -Nru picolisp-16.12/src/tab.c picolisp-17.6/src/tab.c --- picolisp-16.12/src/tab.c 2016-11-24 09:10:59.000000000 +0000 +++ picolisp-17.6/src/tab.c 2017-01-07 14:24:19.000000000 +0000 @@ -1,4 +1,4 @@ -/* 24nov16abu +/* 07jan17abu * (c) Software Lab. Alexander Burger */ @@ -348,6 +348,7 @@ {doTrim, "trim"}, {doTry, "try"}, {doType, "type"}, + {doTzo, "tzo"}, {doUdp, "udp"}, {doUnify, "unify"}, {doUnless, "unless"}, diff -Nru picolisp-16.12/src/vers.h picolisp-17.6/src/vers.h --- picolisp-16.12/src/vers.h 2016-12-08 09:16:40.000000000 +0000 +++ picolisp-17.6/src/vers.h 2017-06-29 05:17:32.000000000 +0000 @@ -1 +1 @@ -static byte Version[4] = {16,12,8}; +static byte Version[4] = {17,6,29}; diff -Nru picolisp-16.12/src64/arch/arm64.l picolisp-17.6/src64/arch/arm64.l --- picolisp-16.12/src64/arch/arm64.l 2016-07-22 15:35:04.000000000 +0000 +++ picolisp-17.6/src64/arch/arm64.l 2017-06-26 07:05:26.000000000 +0000 @@ -1,4 +1,4 @@ -# 22jul16abu +# 26jun17abu # (c) Software Lab. Alexander Burger # *Globals @@ -1268,11 +1268,11 @@ (prinst "b" "6f") # Done (prinl "4:") (prinst "cmp" "x17" "x24") # Minus infinite? - (prinst "mov" "x17" "#0x7F800000") + (prinst "mov" "w17" "#0x7F800000") (prinst "b.ne" "5f") # No: Jump - (prinst "mov" "x17" "#0xFF800000") + (prinst "mov" "w17" "#0xFF800000") (prinl "5:") - (prinst "fmov" "s0" "x17") + (prinst "fmov" "s0" "w17") (prinl "6:") ) (asm std () diff -Nru picolisp-16.12/src64/arch/emu.l picolisp-17.6/src64/arch/emu.l --- picolisp-16.12/src64/arch/emu.l 2016-07-31 13:19:57.000000000 +0000 +++ picolisp-17.6/src64/arch/emu.l 2017-03-16 11:57:21.000000000 +0000 @@ -1,4 +1,4 @@ -# 31jul16abu +# 16mar17abu # (c) Software Lab. Alexander Burger # Architecture @@ -1365,7 +1365,6 @@ ((pre? ".+" X) (let N (+ (cadr D) (format (cddr (chop X)))) (for ((J . L) (cddr D) (> I J) (cdr L)) - (NIL (> I J)) # Temporary (only for 3.1.1 and older) (inc 'N (if (num? (car L)) 1 8)) ) (prin " {.p = (uint8_t*)" diff -Nru picolisp-16.12/src64/big.l picolisp-17.6/src64/big.l --- picolisp-16.12/src64/big.l 2016-06-03 08:29:30.000000000 +0000 +++ picolisp-17.6/src64/big.l 2017-06-28 05:13:20.000000000 +0000 @@ -1,4 +1,4 @@ -# 03jun16abu +# 28jun17abu # (c) Software Lab. Alexander Burger ### Destructive primitives ### @@ -1829,7 +1829,8 @@ cmp S (StkLimit) # Stack check jlt stkErr ld (S) 0 # Init to '0' - push S # Top of accumulator + ld A S # Top of accumulator + push A push X # Pointer to incrementor push X # Top of incrementor do diff -Nru picolisp-16.12/src64/err.l picolisp-17.6/src64/err.l --- picolisp-16.12/src64/err.l 2016-05-27 12:56:31.000000000 +0000 +++ picolisp-17.6/src64/err.l 2017-03-02 11:31:39.000000000 +0000 @@ -1,4 +1,4 @@ -# 27may16abu +# 02mar17abu # (c) Software Lab. Alexander Burger # Debug print routine @@ -164,7 +164,7 @@ ld C 0 # Top frame call unwindC_Z # Unwind ld (EnvProtect) 0 # Reset environments - ld (EnvIntern) pico + ld (EnvIntern) Pico1 ld (EnvTask) Nil ld (EnvCo7) 0 ld (EnvArgs) 0 diff -Nru picolisp-16.12/src64/flow.l picolisp-17.6/src64/flow.l --- picolisp-16.12/src64/flow.l 2016-11-24 08:19:41.000000000 +0000 +++ picolisp-17.6/src64/flow.l 2016-12-09 13:51:20.000000000 +0000 @@ -669,15 +669,11 @@ loop cmp Y Nil # NIL-terminated parameter list? if eq # Yes: Bind parameter symbols - ld Y S # Y on bindings + ld Y L # Y on bindings do - ld X (Y) # Symbol in X - add Y I - ld A (X) # Old value in A - ld (X) (Y) # Set new value - ld (Y) A # Save old value - add Y I - cmp Y L # End? + sub Y II # Next binding + xchg ((Y)) (Y I) # Exchange symbol value + cmp Y S # End? until eq # Yes link ld (EnvBind) L # Close bind frame @@ -705,15 +701,12 @@ push (Y) # Save last parameter's old value push Y # and the last parameter ld (Y) X # Set to unevaluated argument list - lea Y (S II) # Y on evaluated bindings + lea C (S II) # End of bindings in C + ld Y L # Y on bindings do - ld X (Y) # Symbol in X - add Y I - ld A (X) # Old value in A - ld (X) (Y) # Set new value - ld (Y) A # Save old value - add Y I - cmp Y L # End? + sub Y II # Next binding + xchg ((Y)) (Y I) # Exchange symbol value + cmp Y C # End? until eq # Yes link ld (EnvBind) L # Close bind frame @@ -762,16 +755,12 @@ ld (EnvBind) Y # Close bind frame xchg (EnvCls) ((Y) IV) # 'cls' xchg (EnvKey) ((Y) III) # 'key' - ld C (Y) # End of bindings in C - add Y I + lea C (Y I) # End of bindings in C + ld X (Y) # X on bindings do - ld X (Y) # Symbol in X - add Y I - ld A (X) # Old value in A - ld (X) (Y) # Set new value - ld (Y) A # Save old value - add Y I - cmp Y C # End? + sub X II # Next binding + xchg ((X)) (X I) # Exchange symbol value + cmp X C # End? until eq # Yes prog Z # Run body pop (EnvNext) # Restore 'next' diff -Nru picolisp-16.12/src64/gc.l picolisp-17.6/src64/gc.l --- picolisp-16.12/src64/gc.l 2016-11-03 06:53:32.000000000 +0000 +++ picolisp-17.6/src64/gc.l 2017-03-23 10:31:38.000000000 +0000 @@ -1,4 +1,4 @@ -# 03nov16abu +# 23mar17abu # (c) Software Lab. Alexander Burger # Mark data @@ -75,12 +75,13 @@ ### Prepare all cells ### ld X Nil # Symbol table or (X) 1 # Set mark bit - add X 32 # Skip padding + add X IV # Skip padding do or (X) 1 # Set mark bit add X II # Next symbol cmp X GcSymEnd until gt + or (Pico1 CDR) 1 # Mark default namespace ld X (Heaps) # Heap pointer do ld C CELLS @@ -386,6 +387,7 @@ until ge # Yes ld Y (Z I) # Next frame loop + off (Pico1 CDR) 1 # Unmark default namespace ### Sweep ### ld X 0 # Avail list ld Y (Heaps) # Heap list in Y diff -Nru picolisp-16.12/src64/glob.l picolisp-17.6/src64/glob.l --- picolisp-16.12/src64/glob.l 2016-11-24 09:04:47.000000000 +0000 +++ picolisp-17.6/src64/glob.l 2017-03-04 06:54:30.000000000 +0000 @@ -1,4 +1,4 @@ -# 24nov16abu +# 04mar17abu # (c) Software Lab. Alexander Burger (data 'Data) @@ -205,6 +205,7 @@ initFun NIL "rest" doRest initFun NIL "date" doDate initFun NIL "time" doTime + initFun NIL "tzo" doTzo initFun NIL "usec" doUsec initFun NIL "pwd" doPwd initFun NIL "cd" doCd @@ -595,6 +596,16 @@ word (short `(caddr *Version)) word Nil +# Initial namespace +: Pico1 + word pico + word Nil + +# Temporary cell +: Cell1 + word Nil + word Nil + : ExtCnt word 1 # External symbol count : ExtSkip word 0 # External tree skip :: Extern word 0 # External symbol tree @@ -613,7 +624,7 @@ : EnvOutFrames word 0 # Output frames : EnvErrFrames word 0 # Error frames : EnvCtlFrames word 0 # Control frames -:: EnvIntern word pico # Current namespace of internal symbols +:: EnvIntern word Pico1 # Current namespaces of internal symbols : EnvArgs word 0 # Varargs frame : EnvNext word 0 # Next vararg : EnvCls word 0 # Method class diff -Nru picolisp-16.12/src64/ht.l picolisp-17.6/src64/ht.l --- picolisp-16.12/src64/ht.l 2016-05-20 15:47:40.000000000 +0000 +++ picolisp-17.6/src64/ht.l 2017-03-04 09:18:57.000000000 +0000 @@ -1,4 +1,4 @@ -# 20may16abu +# 04mar17abu # (c) Software Lab. Alexander Burger (data 'HtData) @@ -157,8 +157,7 @@ call prExtNmX # Print external else push Y - ld Y ((EnvIntern)) - call isInternEXY_F # Internal symbol? + call isEnvInternEX_FCE # Internal symbol? ld C 0 if eq # Yes ld B (char "$") # Prefix with "$" diff -Nru picolisp-16.12/src64/io.l picolisp-17.6/src64/io.l --- picolisp-16.12/src64/io.l 2016-11-24 06:50:25.000000000 +0000 +++ picolisp-17.6/src64/io.l 2017-03-04 09:19:30.000000000 +0000 @@ -1,4 +1,4 @@ -# 24nov16abu +# 04mar17abu # (c) Software Lab. Alexander Burger # Close file descriptor @@ -885,8 +885,7 @@ ld B NIX # Output NIX call (PutBinBZ) else - ld Y ((EnvIntern)) - call isInternEXY_F # Internal symbol? + call isEnvInternEX_FCE # Internal symbol? ld C INTERN # Yes ldnz C TRANSIENT # No cnt X # Short name? @@ -2219,7 +2218,8 @@ ld X 0 # Clear error context atom (E) # Value must be a pair jnz symNsErrEX - ld (EnvIntern) E # Switch symbol namespace + ld (Cell1) E + ld (EnvIntern) Cell1 # Switch symbol namespace ld C 4 # Build new name lea X (L I) # Safe ld (X) ZERO @@ -2509,9 +2509,12 @@ loop call (Get_A) # Skip '"' ld X (L I) # Get name - ld Y Transient + push Z ld E 0 # No symbol yet - call internEXY_FE # Check transient symbol + ld Y Transient + ld Z Nil # No more namespaces + call internEXYZ_FE # Check transient symbol + pop Z drop jmp 99 end @@ -4931,9 +4934,15 @@ ret end push Y - ld Y ((EnvIntern)) - call isInternEXY_F # Internal symbol? + call isEnvInternEX_FCE # Internal symbol? if eq # Yes + null C # Found in other namespace? + if nz # Yes + ld E C # Print it + call outNameE + ld B (char "~") + call (PutB) + end cmp X (hex "2E2") # Dot? if eq # Yes ld B (char "\\") # Print backslash diff -Nru picolisp-16.12/src64/lib/asm.l picolisp-17.6/src64/lib/asm.l --- picolisp-16.12/src64/lib/asm.l 2016-05-30 06:09:53.000000000 +0000 +++ picolisp-17.6/src64/lib/asm.l 2017-05-04 06:14:17.000000000 +0000 @@ -1,4 +1,4 @@ -# 30may16abu +# 04may17abu # (c) Software Lab. Alexander Burger # *LittleEndian *AlignedCode *Registers optimize @@ -63,7 +63,9 @@ (mapcar '((This) (cons - (pack (: src 1) (: src 2)) + (pack + (unless (= "./" (: src 1)) (: src 1)) + (: src 2) ) (: src -2) This ) ) (idx '*Tags) ) ) diff -Nru picolisp-16.12/src64/main.l picolisp-17.6/src64/main.l --- picolisp-16.12/src64/main.l 2016-12-02 09:17:05.000000000 +0000 +++ picolisp-17.6/src64/main.l 2017-03-03 08:28:13.000000000 +0000 @@ -1,4 +1,4 @@ -# 02dec16abu +# 03mar17abu # (c) Software Lab. Alexander Burger (code 'Code) @@ -88,18 +88,20 @@ ld (StkLimit) 0 # Initially without stack limit ld L 0 # Init link register call heapAlloc # Allocate initial heap - ld E Nil # Init internal symbols - lea Z (E VI) # Skip padding and 'pico' cell - do + ld E Nil # Init NIL + ld X (E TAIL) # Get name + ld Y Pico # Use initial symbol namespace + ld Z E # NIL: No more namespaces + call internEXYZ_FE # Store NIL to internals + add E VI # Skip padding and 'Pico' cell + do # Init internal symbols ld X (E TAIL) # Get name - ld Y Pico # From initial symbol namespace - call internEXY_FE # Store to internals - ld E Z - cnt (Z TAIL) # Short name? + call internEXYZ_FE # Store to internals + cnt (E TAIL) # Short name? if nz # Yes - add Z II # Next symbol + add E II # Next symbol else - add Z IV + add E IV end cmp E SymTabEnd until gt @@ -1372,15 +1374,11 @@ loop cmp Y Nil # NIL-terminated parameter list? if eq # Yes: Bind parameter symbols - ld Y S # Y on bindings + ld Y L # Y on bindings do - ld X (Y) # Symbol in X - add Y I - ld A (X) # Old value in A - ld (X) (Y) # Set new value - ld (Y) A # Save old value - add Y I - cmp Y L # End? + sub Y II # Next binding + xchg ((Y)) (Y I) # Exchange symbol value + cmp Y S # End? until eq # Yes link ld (EnvBind) L # Close bind frame @@ -1407,15 +1405,12 @@ push (Y) # Save last parameter's old value push Y # and the last parameter ld (Y) X # Set to unevaluated argument list - lea Y (S II) # Y on evaluated bindings + lea C (S II) # End of bindings in C + ld Y L # Y on bindings do - ld X (Y) # Symbol in X - add Y I - ld A (X) # Old value in A - ld (X) (Y) # Set new value - ld (Y) A # Save old value - add Y I - cmp Y L # End? + sub Y II # Next binding + xchg ((Y)) (Y I) # Exchange symbol value + cmp Y C # End? until eq # Yes link ld (EnvBind) L # Close bind frame @@ -1461,16 +1456,12 @@ ld (EnvNext) (L) # Set new 'next' end ld (EnvBind) Y # Close bind frame - ld C (Y) # End of bindings in C - add Y I + lea C (Y I) # End of bindings in C + ld X (Y) # X on bindings do - ld X (Y) # Symbol in X - add Y I - ld A (X) # Old value in A - ld (X) (Y) # Set new value - ld (Y) A # Save old value - add Y I - cmp Y C # End? + sub X II # Next binding + xchg ((X)) (X I) # Exchange symbol value + cmp X C # End? until eq # Yes prog Z # Run body pop (EnvNext) # Restore 'next' @@ -3014,6 +3005,15 @@ pop X ret +# (tzo) -> cnt +(code 'doTzo 2) + cc localtime(Tv) # (Any) time to local time + ld4 (A TM_GMTOFF) # Time offset in seconds east of GMT + ld E A + shl E 4 # Make short number + or E CNT + ret + # (usec ['flg]) -> num (code 'doUsec 2) ld E ((E CDR)) # Eval arg diff -Nru picolisp-16.12/src64/Makefile picolisp-17.6/src64/Makefile --- picolisp-16.12/src64/Makefile 2016-12-05 12:09:18.000000000 +0000 +++ picolisp-17.6/src64/Makefile 2017-03-28 10:15:06.000000000 +0000 @@ -1,4 +1,4 @@ -# 05dec16abu +# 28mar17abu # (c) Software Lab. Alexander Burger bin = ../bin @@ -59,7 +59,9 @@ SYS = .linux FMT = .s ARCH = x86-64 - ## PIE = -no-pie + ifeq ($(shell gcc -dumpspecs | grep -q no-pie ; echo $$?), 0) + PIE = -no-pie + endif AS = as else ifeq ($(MACHINE), ppc64le) diff -Nru picolisp-16.12/src64/mkAsm picolisp-17.6/src64/mkAsm --- picolisp-16.12/src64/mkAsm 2011-06-08 16:49:19.000000000 +0000 +++ picolisp-17.6/src64/mkAsm 2016-12-14 07:35:59.000000000 +0000 @@ -1,5 +1,5 @@ #!/bin/sh -# 08jun11abu +# 14dec16abu if test -x /usr/bin/picolisp then @@ -7,8 +7,11 @@ elif test -x ../bin/picolisp then ../pil mkAsm.l "$@" -else +elif which java >/dev/null +then ../ersatz/pil mkAsm.l "$@" +else + echo "No PicoLisp binary found for bootstrapping" fi # vi:et:ts=3:sw=3 diff -Nru picolisp-16.12/src64/net.l picolisp-17.6/src64/net.l --- picolisp-16.12/src64/net.l 2016-03-23 06:50:44.000000000 +0000 +++ picolisp-17.6/src64/net.l 2017-01-17 17:33:52.000000000 +0000 @@ -1,4 +1,4 @@ -# 23mar16abu +# 17jan17abu # (c) Software Lab. Alexander Burger # (port ['T] 'cnt|(cnt . cnt) ['var]) -> cnt @@ -96,6 +96,7 @@ call needVarEX # Need variable ld2 (Addr SIN6_PORT) # Get port cc ntohs(A) # Convert to host byte order + and A (hex "FFFF") # Guarantee 16-bit value shl A 4 # Make short number or A CNT ld (E) A # Store in variable diff -Nru picolisp-16.12/src64/subr.l picolisp-17.6/src64/subr.l --- picolisp-16.12/src64/subr.l 2016-10-24 15:35:45.000000000 +0000 +++ picolisp-17.6/src64/subr.l 2017-04-07 07:25:02.000000000 +0000 @@ -1,4 +1,4 @@ -# 24oct16abu +# 07apr17abu # (c) Software Lab. Alexander Burger # (car 'var) -> any @@ -1415,101 +1415,106 @@ pop X ret -# (delete 'any 'lst) -> lst +# (delete 'any 'lst ['flg]) -> lst (code 'doDelete 2) push X + push Y + push Z ld X (E CDR) # Args ld E (X) # Eval 'any' eval link - push E # 'any' - ld E ((X CDR)) # Eval 'lst' + push E # 'any' + ld X (X CDR) + ld E (X) # Eval 'lst' eval+ - push E # 'lst' + push E # 'lst' link - atom E # Atomic? - if z # No - ld X E # Keep in X - ld A (L II) # 'any' - ld E (X) # Equal to CAR? - call equalAE_F - if eq # Yes - ld E (X CDR) # Return CDR - else - call cons_C # Cons first item into C - ld (C) (X) - ld (C CDR) Nil - tuck C # Result - link - do - ld X (X CDR) # Next item - atom X # More cells? - while z # Yes - ld A (L III) # 'any' - ld E (X) # Equal to CAR? - call equalAE_F - if eq # Yes - ld X (X CDR) # Skip this item - break T - end - call cons_A # Cons next item - ld (A) (X) - ld (A CDR) Nil - ld (C CDR) A # Append - ld C A - loop - ld (C CDR) X # Set tail - ld E (L I) # Get result - end - end + ld E ((X CDR)) # Eval 'flg' + eval + ld X (L I) # 'lst' in X + ld Y E # 'flg' in Y + ld Z L # Point to "CAR" of dummy cell + do + ld C X # Search in rest + do + atom C # Done? + jnz 90 # Yes + ld A (L II) # 'any' + ld E (C) # Equal to CAR? + call equalAE_F + while ne # No + ld C (C CDR) # Next + loop + do + cmp X C # Reached found cell? + while ne # No + call cons_A # Copy traversed cells + ld (A) (X) + ld X (X CDR) + ld (A CDR) X + ld (Z CDR) A # Append to result + ld Z A + loop + ld X (X CDR) # Skip found cell + ld (Z CDR) X + cmp Y Nil # 'flg'? + until eq # Yes +90 ld E (L I) # Get result drop + pop Z + pop Y pop X ret -# (delq 'any 'lst) -> lst +# (delq 'any 'lst ['flg]) -> lst (code 'doDelq 2) push X + push Y + push Z ld X (E CDR) # Args ld E (X) # Eval 'any' eval link - push E # 'any' - ld E ((X CDR)) # Eval 'lst' + push E # 'any' + ld X (X CDR) + ld E (X) # Eval 'lst' eval+ - push E # 'lst' + push E # 'lst' link - atom E # Atomic? - if z # No - ld X (L II) # 'any' - cmp X (E) # Equal to CAR? - if eq # Yes - ld E (E CDR) # Return CDR - else - call cons_C # Cons first item into C - ld (C) (E) - ld (C CDR) Nil - tuck C # Result - link - do - ld E (E CDR) # Next item - atom E # More cells? - while z # Yes - cmp X (E) # 'any' equal to CAR? - if eq # Yes - ld E (E CDR) # Skip this item - break T - end - call cons_A # Cons next item - ld (A) (E) - ld (A CDR) Nil - ld (C CDR) A # Append - ld C A - loop - ld (C CDR) E # Set tail - ld E (L I) # Get result - end - end + ld E ((X CDR)) # Eval 'flg' + eval + ld X (L II) # 'any' in X + ld Y E # 'flg' in Y + ld E (L I) # 'lst' in E + ld Z L # Point to "CAR" of dummy cell + do + ld C E # Search in rest + do + atom C # Done? + jnz 90 # Yes + cmp X (C) # 'any' equal to CAR? + while ne # No + ld C (C CDR) # Next + loop + do + cmp E C # Reached found cell? + while ne # No + call cons_A # Copy traversed cells + ld (A) (E) + ld E (E CDR) + ld (A CDR) E + ld (Z CDR) A # Append to result + ld Z A + loop + ld E (E CDR) # Skip found cell + ld (Z CDR) E + cmp Y Nil # 'flg'? + until eq # Yes +90 ld E (L I) # Get result drop + pop Z + pop Y pop X ret diff -Nru picolisp-16.12/src64/sym.l picolisp-17.6/src64/sym.l --- picolisp-16.12/src64/sym.l 2016-11-24 09:04:12.000000000 +0000 +++ picolisp-17.6/src64/sym.l 2017-04-07 07:29:22.000000000 +0000 @@ -1,4 +1,4 @@ -# 24nov16abu +# 07apr17abu # (c) Software Lab. Alexander Burger ### Compare long names ### @@ -30,17 +30,30 @@ pop X ret +(code 'nextIsInternEXYZ_FE 0) # Y + ld Y ((Z)) # Get next tree + ld Z (Z CDR) + ### Is symbol interned? ### # E symbol # X name -# Y tree -(code 'isInternEXY_F 0) +# Z more +(code 'isInternEXYZ_FCE 0) # Y + ld C 0 # Default current namespace cnt X # Short name? if nz # Yes - ld Y (Y) # Y on first tree +10 ld Y (Y) # Y on first tree do atom Y # Empty? - jnz ret # Return NO + if nz # Yes + atom Z # More namespaces? + jnz ret # Return NO + null C # Found in current? + ldnz C (Z) # Yes, keep next namespace + ld Y ((Z)) # Get next tree + ld Z (Z CDR) + jmp 10 # Try next + end ld A ((Y) TAIL) # Next symbol call nameA_A # Get name cmp A X # Equal? @@ -51,14 +64,33 @@ ld Y ((Y CDR)) # Symbol is greater end loop - cmp E (Y) # Same Symbol? - ret # Return YES or NO + null E # Given symbol? + if z # No + ld E (Y) # Found one + else + cmp E (Y) # Same Symbol? + if nz # No + ld C (Z) # Try next namespace if any + ld Y (C) + ld Z (Z CDR) + jmp 10 + end + end + ret # Return YES end # Long name - ld Y (Y CDR) # Y on second tree +20 ld Y (Y CDR) # Y on second tree do atom Y # Empty? - jnz ret # Return NO + if nz # Yes + atom Z # More namespaces? + jnz ret # Return NO + null C # Found in current? + ldnz C (Z) # Yes, keep next namespace + ld Y ((Z)) # Get next tree + ld Z (Z CDR) + jmp 20 # Try next + end ld A ((Y) TAIL) # Next symbol call nameA_A # Get name call cmpLongAX_F # Equal? @@ -69,19 +101,38 @@ ld Y ((Y CDR)) # Symbol is greater end loop - cmp E (Y) # Same Symbol? - ret # Return YES or NO + null E # Given symbol? + if z # No + ld E (Y) # Found one + else + cmp E (Y) # Same Symbol? + if nz # No + ld C (Z) # Try next namespace if any + ld Y (C) + ld Z (Z CDR) + jmp 20 + end + end + ret # Return YES ### Intern a symbol/name ### # E symbol # X name # Y tree -(code 'internEXY_FE 0) +# Z more +(code 'internEXYZ_FE 0) cnt X # Short name? if nz # Yes ld C (Y) # C on first tree atom C # Empty? if nz # Yes + atom Z # More namespaces? + if z # Yes + push Y + call nextIsInternEXYZ_FE # Check + pop Y + jeq Ret # Return if found + end null E # New symbol? if z call consSymX_E # Yes @@ -104,6 +155,13 @@ if lt # Symbol is smaller atom (C CDR) # Already has link? if nz # No + atom Z # More namespaces? + if z # Yes + push C + call nextIsInternEXYZ_FE # Check + pop C + jeq Ret # Return if found + end null E # New symbol? if z call consSymX_E # Yes @@ -122,6 +180,13 @@ atom (C CDR) # CDR of link? ldz C (C CDR) # Yes: Get CDR of link in C if nz # No + atom Z # More namespaces? + if z # Yes + push C + call nextIsInternEXYZ_FE # Check + pop C + jeq Ret # Return if found + end null E # New symbol? if z call consSymX_E # Yes @@ -136,6 +201,13 @@ else # Symbol is greater atom (C CDR) # Already has link? if nz # No + atom Z # More namespaces? + if z # Yes + push C + call nextIsInternEXYZ_FE # Check + pop C + jeq Ret # Return if found + end null E # New symbol? if z call consSymX_E # Yes @@ -154,6 +226,13 @@ atom (C) # CAR of link? ldz C (C) # Yes: Get CAR of link in C if nz # No + atom Z # More namespaces? + if z # Yes + push C + call nextIsInternEXYZ_FE # Check + pop C + jeq Ret # Return if found + end null E # New symbol? if z call consSymX_E # Yes @@ -172,6 +251,13 @@ ld C (Y CDR) # C on second tree atom C # Empty? if nz # Yes + atom Z # More namespaces? + if z # Yes + push Y + call nextIsInternEXYZ_FE # Check + pop Y + jeq Ret # Return if found + end null E # New symbol? if z call consSymX_E # Yes @@ -194,6 +280,13 @@ if lt # Symbol is smaller atom (C CDR) # Already has link? if nz # No + atom Z # More namespaces? + if z # Yes + push C + call nextIsInternEXYZ_FE # Check + pop C + jeq Ret # Return if found + end null E # New symbol? if z call consSymX_E # Yes @@ -212,6 +305,13 @@ atom (C CDR) # CDR of link? ldz C (C CDR) # Yes: Get CDR of link in C if nz # No + atom Z # More namespaces? + if z # Yes + push C + call nextIsInternEXYZ_FE # Check + pop C + jeq Ret # Return if found + end null E # New symbol? if z call consSymX_E # Yes @@ -226,6 +326,13 @@ else # Symbol is greater atom (C CDR) # Already has link? if nz # No + atom Z # More namespaces? + if z # Yes + push C + call nextIsInternEXYZ_FE # Check + pop C + jeq Ret # Return if found + end null E # New symbol? if z call consSymX_E # Yes @@ -244,6 +351,13 @@ atom (C) # CAR of link? ldz C (C) # Yes: Get CAR of link in C if nz # No + atom Z # More namespaces? + if z # Yes + push C + call nextIsInternEXYZ_FE # Check + pop C + jeq Ret # Return if found + end null E # New symbol? if z call consSymX_E # Yes @@ -260,12 +374,25 @@ (code 'findSymX_E 0) # Y ld E 0 # No symbol yet - ld Y ((EnvIntern)) - call internEXY_FE # New internal symbol? + ld A (EnvIntern) + ld Y ((A)) # First tree + push Z + ld Z (A CDR) # More namespaces + call internEXYZ_FE # New internal symbol? + pop Z jge Ret # No ld (E) Nil # Init to 'NIL' ret +(code 'isEnvInternEX_FCE 0) # Y + ld A (EnvIntern) + ld Y ((A)) # First tree + push Z + ld Z (A CDR) # More namespaces + call isInternEXYZ_FCE # Internal symbol? + pop Z + ret + # X name (code 'externX_E 0) # C push Y @@ -567,8 +694,7 @@ push Y ld X (E TAIL) call nameX_X # Get name - ld Y ((EnvIntern)) # Internal symbol? - call isInternEXY_F + call isEnvInternEX_FCE # Internal symbol? pop Y pop X jz renErrEX # Yes @@ -817,18 +943,20 @@ ld E Nil ret -# (all ['NIL | 'T | '0 | '(NIL . flg) | '(T . flg) | '(0)]) -> lst +# (all ['NIL | 'T | '0 | 'sym | '(NIL . flg) | '(T . flg) | '(0)]) -> lst (code 'doAll 2) push X + push Y ld E ((E CDR)) # Eval arg eval atom E # Direct tree? if z # Yes cmp (E) Nil # Internal trees? if eq # Yes + ld A (((EnvIntern))) cmp (E CDR) Nil # Short names? - ldz E (((EnvIntern))) # Yes - ldnz E (((EnvIntern)) I) + ldz E (A) # Yes + ldnz E (A I) else cmp (E) TSym # Transient trees? ldnz E (Extern) # No: External symbols @@ -841,9 +969,15 @@ else cmp E Nil # Nil? if eq # Yes - ld X (((EnvIntern)) I) # Internal symbols - call consTreeXE_E - ld X (((EnvIntern))) + ld Y (EnvIntern) # Namespace list + do + ld X (((Y)) I) # Internal symbols + call consTreeXE_E + ld X (((Y))) + call consTreeXE_E + ld Y (Y CDR) # More? + atom Y + until nz # No else cmp E TSym # T? if eq # Yes @@ -852,12 +986,22 @@ call consTreeXE_E ld X (Transient) else - ld E Nil - ld X (Extern) # External symbols + cmp E ZERO # Zero? + if eq # Yes + ld E Nil + ld X (Extern) # External symbols + else + ld Y (E) # Given namespace + ld E Nil + ld X (Y I) + call consTreeXE_E + ld X (Y) + end end + call consTreeXE_E end - call consTreeXE_E end + pop Y pop X ret @@ -921,127 +1065,95 @@ 90 drop # Return E ret -# Build balanced copy of a namespace -(code 'balanceXY) # ACE - ld E Nil # Build list - call consTreeXE_E - link - push E # Save list - link - ld A E # Get list in A - ld C 0 # Calculate length - do - atom A # More cells? - while z # Yes - inc C # Increment length - ld A (A CDR) # Next cell - loop - call balanceCEY - drop - ret - -(code 'balanceCEY 0) - do - null C # Length zero? - jz ret # Yes - push C # Save length - push E # and list - inc C # (length + 1) / 2 - shr C 1 - push C # Rest length - do - dec C # nth - while nsz - ld E (E CDR) - loop - push (E CDR) # Save rest - ld E (E) # Next symbol - ld X (E TAIL) # Get name - call nameX_X - call internEXY_FE # Insert - pop E # Retrieve rest - ld C (S II) # Get length - sub C (S) # minus rest length - call balanceCEY # Recurse - pop C # Retrieve rest length - dec C # Decrement - pop E # Retrieve list - add S I # Drop length - loop # Tail recurse - -# (symbols) -> sym -# (symbols 'sym1) -> sym2 -# (symbols 'sym1 'sym ..) -> sym2 +# (symbols) -> lst +# (symbols 'lst) -> lst +# (symbols 'lst . prg) -> any +# (symbols 'sym1 'sym2 ..) -> lst (code 'doSymbols 2) push X push Y - push Z ld X E - ld Z (E CDR) # Z on args - atom Z # Any? + ld Y (E CDR) # Y on args + atom Y # Any? if nz # No - ld E (EnvIntern) # Return current symbol namespace + ld E (EnvIntern) # Return current namespaces else - ld E (Z) # Eval first + ld E (Y) # Eval first eval - num E # Need symbol - jnz symErrEX - sym E - jz symErrEX - ld Z (Z CDR) # Second arg - atom Z # Any? - if nz # No - atom (E) # Value must be a pair - jnz symNsErrEX + atom E # List? + if z # Yes + ld Y (Y CDR) # 'prg'? + atom Y + if z # Yes + xchg (EnvIntern) E # Set new namespaces + link + push E # Save current + link + prog Y # Run 'prog' + ld (EnvIntern) (L I) # Restore namespaces + drop + pop Y + pop X + ret + end else - call checkVarEX + num E # Need symbol + jnz symErrEX + sym E + jz symErrEX + cmp (E) Nil # New namespace? + if ne # No + atom (E) # Value must be a pair + jnz symNsErrEX + else + call consE_C # Create namespace cell + ld (C) Nil # Initialize + ld (C CDR) Nil + ld (E) C + end + call consE_C # Cons symbol with NIL + ld (C) E + ld (C CDR) Nil link - push E # Save new symbol namespace - push Nil # Space for value - push Nil # and source + push C # Save link - call cons_Y # Create namespace cell - ld (Y) Nil # Initialize - ld (Y CDR) Nil - ld (L II) Y # New value + push Z do - ld E (Z) - eval # Eval next source symbol namespace - ld (L I) E # Save source + ld Z C # Keey in Z + ld Y (Y CDR) # More args? + atom Y + while z # Yes + ld E (Y) + eval # Eval next arg num E # Need symbol jnz symErrEX sym E jz symErrEX - ld C (E) # Get source value - atom C # Must be a pair + atom (E) # Value must be a pair jnz symNsErrEX - push X - ld X (C) # Source short names - call balanceXY # Balanced copy of short names - ld X (((L I)) CDR) # Source long names - call balanceXY # Balanced copy of long names - pop X - ld Z (Z CDR) # Next arg - atom Z # Any? - until nz # No - ld C (L II) # Get value - ld E (L III) # And new symbol namespace - call redefineCE # Redefine + call consE_C # Cons with NIL + ld (C) E + ld (C CDR) Nil + ld (Z CDR) C # Concatenate + loop + ld E (L I) # Get new list + pop Z drop end - xchg (EnvIntern) E # Set new symbol namespace, return old + xchg (EnvIntern) E # Set new symbol namespaces, return old end - pop Z pop Y pop X ret -# (intern 'sym) -> sym +# (intern 'sym ['flg]) -> sym (code 'doIntern 2) push X + push Y ld X E - ld E ((E CDR)) # E on arg - eval # Eval it + ld Y (E CDR) # Y on args + ld E (Y) + eval # Eval first num E # Need symbol jnz symErrEX sym E @@ -1050,14 +1162,31 @@ call nameX_X # Get name cmp X ZERO # Any? if ne # Yes - push Y - ld Y ((EnvIntern)) # Insert internal - call internEXY_FE + push Z + link + push E # Save symbol + link + ld E ((Y CDR)) # Eval 'flg' + eval + ld A (EnvIntern) # Internals + ld Y ((A)) # First tree + cmp E Nil # 'flg'? + if eq # No + ld E 0 # No symbol yet + ldz Z (A CDR) # Search all namespaces + else + ld E (L I) # Get symbol + ld Z Nil # Search only current namespace + end + call internEXYZ_FE + drop + pop Z pop Y pop X ret end ld E Nil + pop Y pop X ret @@ -1148,10 +1277,13 @@ sym E jz symErrEX push X + push Z ld X (E TAIL) call nameX_X # Get name ld Y Transient # Insert transient - call internEXY_FE + ld Z Nil # No more namespaces + call internEXYZ_FE + pop Z pop X ld Z (Z CDR) # Z on rest loop @@ -1188,8 +1320,7 @@ push Y ld X (E TAIL) # Get name call nameX_X - ld Y ((EnvIntern)) # Internal symbol? - call isInternEXY_F + call isEnvInternEX_FCE # Internal symbol? ldz E Nil # Return NIL pop Y pop X @@ -1242,7 +1373,7 @@ push Y ld X (E TAIL) call nameX_X # Get name - ld Y ((EnvIntern)) + ld Y (((EnvIntern))) call uninternEXY # Unintern symbol pop Y end @@ -2070,7 +2201,7 @@ pop X ret -# (del 'any 'var) -> lst +# (del 'any 'var ['flg]) -> lst (code 'doDel 2) push X push Y @@ -2080,11 +2211,11 @@ ld E (Y) # Eval first eval link - push E # 'any' + push E # 'any' ld Y (Y CDR) ld E (Y) # Eval second eval+ - push E # 'var' + push E # 'var' link call needVarEX # Need variable sym E # Symbol? @@ -2094,45 +2225,38 @@ call dbTouchEX # Touch it end end - ld E ((L I)) # Get value of 'var' - atom E # List? - if z # Yes - ld Y E # Keep value in Y - ld E (Y) # First element - ld A (L II) # 'any' - call equalAE_F # Equal? - if eq # Yes - ld E (Y CDR) # Get value's CDR - ld ((L I)) E # Set 'var' - else - call cons_Z # Copy first cell - ld (Z) (Y) - ld (Z CDR) Nil - tuck Z # Save it - link - do - ld Y (Y CDR) # More cells? - atom Y - while z # Yes - ld E (Y) # Next element - ld A (L III) # 'any' - call equalAE_F # Equal? - if eq # Yes - ld (Z CDR) (Y CDR) # Skip found element - ld E (L I) # Result - ld ((L II)) E # Set 'var' - jmp 90 - end - call cons_A # Copy next cell - ld (A) (Y) - ld (A CDR) Nil - ld (Z CDR) A # Append to result - ld Z (Z CDR) - loop - ld E ((L II)) # Not found: Return old value of 'var' - end - end -90 drop + ld E ((Y CDR)) # Eval 'flg' + eval + ld X ((L I)) # Get value of 'var' + ld Y E # 'flg' in Y + lea Z ((L I) -I) # Point to "CAR" of dummy cell + do + ld C X # Search in rest + do + atom C # Done? + jnz 90 # Yes + ld A (L II) # 'any' + ld E (C) # Equal to CAR? + call equalAE_F + while ne # No + ld C (C CDR) # Next + loop + do + cmp X C # Reached found cell? + while ne # No + call cons_A # Copy traversed cells + ld (A) (X) + ld X (X CDR) + ld (A CDR) X + ld (Z CDR) A # Append to result + ld Z A + loop + ld X (X CDR) # Skip found cell + ld (Z CDR) X + cmp Y Nil # 'flg'? + until eq # Yes +90 ld E ((L I)) # Get result + drop pop Z pop Y pop X @@ -3501,6 +3625,8 @@ sym E # Symbol? jz retNil # No call firstCharE_A # Get first character + cmp A TOP # Special "top" character? + jeq retNil # Yes call caseDataA_AC # Get case info and B (hex "1F") # Character type cmp B CHAR_LOWERCASE # Lower case? @@ -3516,6 +3642,8 @@ sym E # Symbol? jz retNil # No call firstCharE_A # Get first character + cmp A TOP # Special "top" character? + jeq retNil # Yes call caseDataA_AC # Get case info and B (hex "1F") # Character type cmp B CHAR_UPPERCASE # Lower case? @@ -3550,13 +3678,16 @@ call symCharCX_FACX # Next char? while nz ld E C # Save C - call caseDataA_AC # Get case info - and A (hex "FFFF") - shr A 6 # Make index - off A 1 - ld2 (A CaseLower) # Get lower case entry - add A C # plus character - and A (hex "FFFF") + cmp A TOP # Special "top" character? + if ne # No + call caseDataA_AC # Get case info + and A (hex "FFFF") + shr A 6 # Make index + off A 1 + ld2 (A CaseLower) # Get lower case entry + add A C # plus character + and A (hex "FFFF") + end ld C (S I) # Swap status xchg X (S) call charSymACX_CX # Pack char @@ -3602,13 +3733,16 @@ call symCharCX_FACX # Next char? while nz ld E C # Save C - call caseDataA_AC # Get case info - and A (hex "FFFF") - shr A 6 # Make index - off A 1 - ld2 (A CaseUpper) # Get upper case entry - add A C # plus character - and A (hex "FFFF") + cmp A TOP # Special "top" character? + if ne # No + call caseDataA_AC # Get case info + and A (hex "FFFF") + shr A 6 # Make index + off A 1 + ld2 (A CaseUpper) # Get upper case entry + add A C # plus character + and A (hex "FFFF") + end ld C (S I) # Swap status xchg X (S) call charSymACX_CX # Pack char @@ -3664,6 +3798,8 @@ do call symCharCX_FACX # Next char? while nz + cmp A TOP # Special "top" character? + continue eq # Yes ld E C # Save C call isLetterOrDigitA_F # Letter or digit? if nz # Yes diff -Nru picolisp-16.12/src64/sys/arm64.linux.defs.l picolisp-17.6/src64/sys/arm64.linux.defs.l --- picolisp-16.12/src64/sys/arm64.linux.defs.l 2016-02-11 14:29:18.000000000 +0000 +++ picolisp-17.6/src64/sys/arm64.linux.defs.l 2017-01-07 14:50:01.000000000 +0000 @@ -1,4 +1,4 @@ -# 11feb16abu +# 07jan17abu # (c) Software Lab. Alexander Burger # errno @@ -127,6 +127,7 @@ (equ TM_MDAY 12) (equ TM_MON 16) (equ TM_YEAR 20) +(equ TM_GMTOFF 40) # dir (equ D_NAME 19) diff -Nru picolisp-16.12/src64/sys/ppc64.linux.defs.l picolisp-17.6/src64/sys/ppc64.linux.defs.l --- picolisp-16.12/src64/sys/ppc64.linux.defs.l 2016-02-11 14:29:20.000000000 +0000 +++ picolisp-17.6/src64/sys/ppc64.linux.defs.l 2017-01-07 14:50:16.000000000 +0000 @@ -1,4 +1,4 @@ -# 11feb16abu +# 07jan17abu # (c) Software Lab. Alexander Burger # errno @@ -122,6 +122,7 @@ (equ TM_MDAY 12) (equ TM_MON 16) (equ TM_YEAR 20) +(equ TM_GMTOFF 40) # dir (equ D_NAME 19) diff -Nru picolisp-16.12/src64/sys/x86-64.freeBsd.defs.l picolisp-17.6/src64/sys/x86-64.freeBsd.defs.l --- picolisp-16.12/src64/sys/x86-64.freeBsd.defs.l 2016-02-11 14:29:22.000000000 +0000 +++ picolisp-17.6/src64/sys/x86-64.freeBsd.defs.l 2017-01-07 14:50:20.000000000 +0000 @@ -1,4 +1,4 @@ -# 11feb16abu +# 07jan17abu # Mansur Mamkin # errno @@ -123,6 +123,7 @@ (equ TM_MDAY 12) (equ TM_MON 16) (equ TM_YEAR 20) +(equ TM_GMTOFF 40) # dir (equ D_NAME 8) diff -Nru picolisp-16.12/src64/sys/x86-64.linux.defs.l picolisp-17.6/src64/sys/x86-64.linux.defs.l --- picolisp-16.12/src64/sys/x86-64.linux.defs.l 2016-02-11 14:29:17.000000000 +0000 +++ picolisp-17.6/src64/sys/x86-64.linux.defs.l 2017-01-07 14:50:11.000000000 +0000 @@ -1,4 +1,4 @@ -# 11feb16abu +# 07jan17abu # (c) Software Lab. Alexander Burger # errno @@ -122,6 +122,7 @@ (equ TM_MDAY 12) (equ TM_MON 16) (equ TM_YEAR 20) +(equ TM_GMTOFF 40) # dir (equ D_NAME 19) diff -Nru picolisp-16.12/src64/sys/x86-64.openBsd.defs.l picolisp-17.6/src64/sys/x86-64.openBsd.defs.l --- picolisp-16.12/src64/sys/x86-64.openBsd.defs.l 2016-03-23 06:38:38.000000000 +0000 +++ picolisp-17.6/src64/sys/x86-64.openBsd.defs.l 2017-01-07 14:50:22.000000000 +0000 @@ -123,6 +123,7 @@ (equ TM_MDAY 12) (equ TM_MON 16) (equ TM_YEAR 20) +(equ TM_GMTOFF 40) # dir (equ D_NAME 24) diff -Nru picolisp-16.12/src64/sys/x86-64.sunOs.defs.l picolisp-17.6/src64/sys/x86-64.sunOs.defs.l --- picolisp-16.12/src64/sys/x86-64.sunOs.defs.l 2016-02-11 14:29:24.000000000 +0000 +++ picolisp-17.6/src64/sys/x86-64.sunOs.defs.l 2017-01-07 14:50:25.000000000 +0000 @@ -127,6 +127,7 @@ (equ TM_MDAY 12) (equ TM_MON 16) (equ TM_YEAR 20) +(equ TM_GMTOFF 40) # dir (equ D_NAME 18) diff -Nru picolisp-16.12/src64/sysdefs.c picolisp-17.6/src64/sysdefs.c --- picolisp-16.12/src64/sysdefs.c 2016-02-11 14:28:28.000000000 +0000 +++ picolisp-17.6/src64/sysdefs.c 2017-01-07 13:54:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* 11feb16abu +/* 07jan17abu * (c) Software Lab. Alexander Burger */ @@ -175,6 +175,7 @@ equ("TM_MDAY", (char*)&tm.tm_mday - (char*)&tm); equ("TM_MON", (char*)&tm.tm_mon - (char*)&tm); equ("TM_YEAR", (char*)&tm.tm_year - (char*)&tm); + equ("TM_GMTOFF", (char*)&tm.tm_gmtoff - (char*)&tm); comment("dir"); equ("D_NAME", (char*)&dir.d_name - (char*)&dir); diff -Nru picolisp-16.12/src64/tags picolisp-17.6/src64/tags --- picolisp-16.12/src64/tags 2016-12-08 09:16:55.000000000 +0000 +++ picolisp-17.6/src64/tags 2017-06-29 05:17:48.000000000 +0000 @@ -1,5 +1,5 @@ -./defs.l,638 +defs.l,638 HEAP5,63 CELLS6,114 STACK7,187 @@ -48,7 +48,7 @@ CHAR_LETTER63,1501 CHAR_DIGIT64,1522 -sys/arm64.linux.defs.l,2117 +sys/arm64.linux.defs.l,2137 ENOENT5,59 EINTR6,108 EBADF7,155 @@ -147,31 +147,32 @@ TM_MDAY127,2212 TM_MON128,2229 TM_YEAR129,2245 -D_NAME132,2269 -SOCK_STREAM135,2296 -SOCK_DGRAM136,2316 -AF_UNSPEC137,2335 -AF_UNIX138,2353 -AF_INET6139,2369 -SOL_SOCKET140,2387 -SO_REUSEADDR141,2406 -IPPROTO_IPV6142,2427 -IPV6_V6ONLY143,2449 -INET6_ADDRSTRLEN144,2470 -NI_MAXHOST146,2497 -NI_NAMEREQD147,2519 -SOCKADDR_IN6149,2540 -SIN6_FAMILY150,2562 -SIN6_PORT151,2582 -SIN6_ADDR152,2600 -ADDRINFO154,2619 -AI_FAMILY155,2637 -AI_SOCKTYPE156,2655 -AI_ADDRLEN157,2675 -AI_ADDR158,2695 -AI_NEXT159,2712 +TM_GMTOFF130,2262 +D_NAME133,2288 +SOCK_STREAM136,2315 +SOCK_DGRAM137,2335 +AF_UNSPEC138,2354 +AF_UNIX139,2372 +AF_INET6140,2388 +SOL_SOCKET141,2406 +SO_REUSEADDR142,2425 +IPPROTO_IPV6143,2446 +IPV6_V6ONLY144,2468 +INET6_ADDRSTRLEN145,2489 +NI_MAXHOST147,2516 +NI_NAMEREQD148,2538 +SOCKADDR_IN6150,2559 +SIN6_FAMILY151,2581 +SIN6_PORT152,2601 +SIN6_ADDR153,2619 +ADDRINFO155,2638 +AI_FAMILY156,2656 +AI_SOCKTYPE157,2674 +AI_ADDRLEN158,2694 +AI_ADDR159,2714 +AI_NEXT160,2731 -./glob.l,4390 +glob.l,4424 Data4,51 AV7,77 AV08,141 @@ -279,150 +280,152 @@ Fork180,6633 Bye181,6670 Dbg182,6707 -SymTabEnd576,21881 -TgCPU579,21914 -TgOS580,21956 -Db1584,22047 -GcSymEnd587,22075 -Version590,22104 -ExtCnt598,22251 -ExtSkip599,22308 -Extern600,22362 -EnvCo603,22432 -Chr604,22465 -PutB605,22519 -Get_A606,22580 -InFile607,22640 -OutFile608,22686 -Env609,22733 -EnvBind610,22766 -Catch611,22839 -EnvInFrames612,22887 -EnvOutFrames613,22935 -EnvErrFrames614,22984 -EnvCtlFrames615,23032 -EnvIntern616,23082 -EnvArgs617,23155 -EnvNext618,23204 -EnvCls619,23251 -EnvKey620,23299 -EnvApply621,23345 -EnvMake622,23393 -EnvYoke623,23439 -CLink624,23462 -EnvParseX625,23519 -EnvParseC626,23568 -EnvParseEOF627,23591 -EnvMid628,23615 -EnvCo7629,23643 -EnvTask630,23689 -EnvProtect631,23734 -EnvTrace632,23787 -EnvEnd633,23834 -OrgTermio635,23863 -Flock636,23924 -Tms637,23979 -Addr638,24032 -TBuf640,24092 -CaseBlocks645,24229 -CaseData775,39612 -CaseUpper1112,79493 -CaseLower1136,81319 -Tio1161,83025 -Repl1163,83074 -PRepl1164,83119 -Jam1165,83166 -InBye1166,83211 -Sync1167,83258 -Month1168,83320 -_r_1171,83386 -_w_1172,83403 -_a_1173,83420 -_ap_1174,83437 -_dot_1175,83456 -Giveup1179,83509 -ExecErr1180,83535 -AllocErr1181,83571 -PidSigMsg1182,83600 -QuitMsg1183,83633 -CbErr1184,83654 -HashBlank1186,83698 -Redefined1187,83721 -SuperErr1188,83755 -ExtraErr1189,83784 -ThrowErr1190,83813 -Trc11191,83846 -Trc21192,83864 -SetFD1194,83890 -FdTooHigh1195,83915 -Delim1196,83947 -DelimEnd1197,83988 -Arrow1198,83999 -RolbLog1200,84026 -IgnLog1201,84088 -CircFree1202,84142 -BadChain1203,84180 -BadCount1204,84209 -ErrTok1206,84246 -Dashes1207,84267 -ProtErr1208,84289 -SymNsErr1209,84324 -StkErr1210,84364 -ArgErr1211,84396 -NumErr1212,84426 -CntErr1213,84459 -SymErr1214,84498 -ExtErr1215,84531 -PairErr1216,84573 -AtomErr1217,84610 -LstErr1218,84642 -VarErr1219,84673 -DivErr1220,84708 -RenErr1221,84731 -MakeErr1222,84761 -ReentErr1223,84790 -YieldErr1224,84829 -MsgErr1225,84861 -BrkErr1226,84890 -OpenErr1227,84916 -CloseErr1228,84949 -PipeErr1229,84984 -ForkErr1230,85017 -WaitPidErr1231,85046 -BadFdErr1232,85076 -NoFdErr1233,85102 -EofErr1234,85134 -SuparErr1235,85163 -BadInput1236,85209 -BadDot1237,85243 -SelectErr1238,85276 -WrBytesErr1239,85313 -WrChildErr1240,85350 -WrSyncErr1241,85387 -WrJnlErr1242,85422 -WrLogErr1243,85459 -TruncErr1244,85492 -DbSyncErr1245,85534 -TrSyncErr1246,85573 -LockErr1247,85621 -DbfErr1248,85653 -JnlErr1249,85682 -IdErr1250,85711 -DbRdErr1251,85734 -DbWrErr1252,85764 -DbSizErr1253,85795 -TellErr1254,85826 -IpSocketErr1255,85858 -IpGetsocknameErr1256,85900 -IpV6onlyErr1257,85952 -IpReuseaddrErr1258,85999 -IpBindErr1259,86050 -IpListenErr1260,86088 -UdpOvflErr1261,86130 -UndefErr1262,86164 -DlErr1263,86193 +SymTabEnd577,21920 +TgCPU580,21953 +TgOS581,21995 +Db1585,22086 +GcSymEnd588,22114 +Version591,22143 +Pico1600,22310 +Cell1605,22361 +ExtCnt609,22394 +ExtSkip610,22451 +Extern611,22505 +EnvCo614,22575 +Chr615,22608 +PutB616,22662 +Get_A617,22723 +InFile618,22783 +OutFile619,22829 +Env620,22876 +EnvBind621,22909 +Catch622,22982 +EnvInFrames623,23030 +EnvOutFrames624,23078 +EnvErrFrames625,23127 +EnvCtlFrames626,23175 +EnvIntern627,23225 +EnvArgs628,23299 +EnvNext629,23348 +EnvCls630,23395 +EnvKey631,23443 +EnvApply632,23489 +EnvMake633,23537 +EnvYoke634,23583 +CLink635,23606 +EnvParseX636,23663 +EnvParseC637,23712 +EnvParseEOF638,23735 +EnvMid639,23759 +EnvCo7640,23787 +EnvTask641,23833 +EnvProtect642,23878 +EnvTrace643,23931 +EnvEnd644,23978 +OrgTermio646,24007 +Flock647,24068 +Tms648,24123 +Addr649,24176 +TBuf651,24236 +CaseBlocks656,24373 +CaseData786,39756 +CaseUpper1123,79637 +CaseLower1147,81463 +Tio1172,83169 +Repl1174,83218 +PRepl1175,83263 +Jam1176,83310 +InBye1177,83355 +Sync1178,83402 +Month1179,83464 +_r_1182,83530 +_w_1183,83547 +_a_1184,83564 +_ap_1185,83581 +_dot_1186,83600 +Giveup1190,83653 +ExecErr1191,83679 +AllocErr1192,83715 +PidSigMsg1193,83744 +QuitMsg1194,83777 +CbErr1195,83798 +HashBlank1197,83842 +Redefined1198,83865 +SuperErr1199,83899 +ExtraErr1200,83928 +ThrowErr1201,83957 +Trc11202,83990 +Trc21203,84008 +SetFD1205,84034 +FdTooHigh1206,84059 +Delim1207,84091 +DelimEnd1208,84132 +Arrow1209,84143 +RolbLog1211,84170 +IgnLog1212,84232 +CircFree1213,84286 +BadChain1214,84324 +BadCount1215,84353 +ErrTok1217,84390 +Dashes1218,84411 +ProtErr1219,84433 +SymNsErr1220,84468 +StkErr1221,84508 +ArgErr1222,84540 +NumErr1223,84570 +CntErr1224,84603 +SymErr1225,84642 +ExtErr1226,84675 +PairErr1227,84717 +AtomErr1228,84754 +LstErr1229,84786 +VarErr1230,84817 +DivErr1231,84852 +RenErr1232,84875 +MakeErr1233,84905 +ReentErr1234,84934 +YieldErr1235,84973 +MsgErr1236,85005 +BrkErr1237,85034 +OpenErr1238,85060 +CloseErr1239,85093 +PipeErr1240,85128 +ForkErr1241,85161 +WaitPidErr1242,85190 +BadFdErr1243,85220 +NoFdErr1244,85246 +EofErr1245,85278 +SuparErr1246,85307 +BadInput1247,85353 +BadDot1248,85387 +SelectErr1249,85420 +WrBytesErr1250,85457 +WrChildErr1251,85494 +WrSyncErr1252,85531 +WrJnlErr1253,85566 +WrLogErr1254,85603 +TruncErr1255,85636 +DbSyncErr1256,85678 +TrSyncErr1257,85717 +LockErr1258,85765 +DbfErr1259,85797 +JnlErr1260,85826 +IdErr1261,85855 +DbRdErr1262,85878 +DbWrErr1263,85908 +DbSizErr1264,85939 +TellErr1265,85970 +IpSocketErr1266,86002 +IpGetsocknameErr1267,86044 +IpV6onlyErr1268,86096 +IpReuseaddrErr1269,86143 +IpBindErr1270,86194 +IpListenErr1271,86232 +UdpOvflErr1272,86274 +UndefErr1273,86308 +DlErr1274,86337 -./main.l,2274 +main.l,2292 Code4,51 Ret8,106 RetEq10,127 @@ -432,118 +435,119 @@ RetT22,250 RetE_E25,285 main30,367 -restart158,4220 -loadAllX_E166,4382 -giveupX184,4790 -execErrS191,4903 -iSignalCE196,4995 -allocC_A206,5253 -allocAE_A211,5362 -noMemory215,5476 -heapAlloc221,5555 -sighandler0244,6099 -sighandlerX251,6176 -sighandlerE258,6253 -sig351,9585 -sigTerm363,9809 -sigChld374,10027 -tcSetC395,10535 -sigTermStop408,10802 -setRaw424,11295 -setCooked452,12173 -doRaw460,12340 -doAlarm482,12743 -doSigio498,13027 -doKids518,13485 -doProtect542,13963 -doHeap552,14123 -doStack580,14766 -doAdr625,15868 -doEnv637,16086 -doTrail731,18658 -doUp794,20126 -doSys864,21585 -circE_EF892,22244 -equalAE_F927,23051 -compareAE_F1060,26260 -binSizeX_A1217,29629 -memberXY_FY1313,32271 -doQuit1331,32622 -evExprCE_E1349,33039 -evListE_E1498,36728 -evListSym1504,36863 -sharedLibC_FA1552,37883 -doErrno1623,39526 -doNative1631,39690 -natBufACZ_CZ1838,45924 -natRetACE_CE1937,48409 -doStruct2101,54708 -fetchCharC_AC2144,55588 -cbl2179,56457 -cbl12212,57182 -cbl22216,57298 -cbl32220,57344 -cbl42224,57396 -cbl52228,57448 -cbl62232,57500 -cbl72236,57552 -cbl82240,57604 -cbl92244,57656 -cbl102248,57708 -cbl112252,57761 -cbl122256,57815 -cbl132260,57869 -cbl142264,57923 -cbl152268,57977 -cbl162272,58031 -cbl172276,58085 -cbl182280,58139 -cbl192284,58193 -cbl202288,58247 -cbl212292,58301 -cbl222296,58355 -cbl232300,58409 -cbl242304,58463 -doLisp2310,58546 -lisp2354,59572 -execE2400,60687 -runE_E2412,60842 -funqE_FE2424,60994 -evSymX_E2486,62418 -evSymY_E2489,62476 -evSymE_E2491,62518 -xSymE_E2493,62555 -evCntXY_FE2514,62920 -evCntEX_FE2516,62964 -xCntEX_FE2518,63003 -xCntCX_FC2527,63180 -xCntAX_FA2536,63357 -boxE_E2545,63534 -putStringB2565,63991 -begString_S2577,64205 -endStringS_E2588,64431 -doArgs2617,65087 -doNext2624,65201 -doArg2641,65517 -doRest2670,66159 -tmDateC_E2684,66406 -dateXYZ_E2694,66583 -doDate2757,67982 -tmTimeY_E2877,71718 -doTime2894,72051 -doUsec3018,75495 -doPwd3036,75912 -doCd3047,76166 -doCtty3072,76781 -doInfo3118,78095 -doFile3177,79490 -doDir3230,80726 -doCmd3300,82344 -doArgv3318,82803 -doOpt3421,85349 -doVersion3435,85680 +restart160,4326 +loadAllX_E168,4488 +giveupX186,4896 +execErrS193,5009 +iSignalCE198,5101 +allocC_A208,5359 +allocAE_A213,5468 +noMemory217,5582 +heapAlloc223,5661 +sighandler0246,6205 +sighandlerX253,6282 +sighandlerE260,6359 +sig353,9691 +sigTerm365,9915 +sigChld376,10133 +tcSetC397,10641 +sigTermStop410,10908 +setRaw426,11401 +setCooked454,12279 +doRaw462,12446 +doAlarm484,12849 +doSigio500,13133 +doKids520,13591 +doProtect544,14069 +doHeap554,14229 +doStack582,14872 +doAdr627,15974 +doEnv639,16192 +doTrail733,18764 +doUp796,20232 +doSys866,21691 +circE_EF894,22350 +equalAE_F929,23157 +compareAE_F1062,26366 +binSizeX_A1219,29735 +memberXY_FY1315,32377 +doQuit1333,32728 +evExprCE_E1351,33145 +evListE_E1489,36621 +evListSym1495,36756 +sharedLibC_FA1543,37776 +doErrno1614,39419 +doNative1622,39583 +natBufACZ_CZ1829,45817 +natRetACE_CE1928,48302 +doStruct2092,54601 +fetchCharC_AC2135,55481 +cbl2170,56350 +cbl12203,57075 +cbl22207,57191 +cbl32211,57237 +cbl42215,57289 +cbl52219,57341 +cbl62223,57393 +cbl72227,57445 +cbl82231,57497 +cbl92235,57549 +cbl102239,57601 +cbl112243,57654 +cbl122247,57708 +cbl132251,57762 +cbl142255,57816 +cbl152259,57870 +cbl162263,57924 +cbl172267,57978 +cbl182271,58032 +cbl192275,58086 +cbl202279,58140 +cbl212283,58194 +cbl222287,58248 +cbl232291,58302 +cbl242295,58356 +doLisp2301,58439 +lisp2345,59465 +execE2391,60580 +runE_E2403,60735 +funqE_FE2415,60887 +evSymX_E2477,62311 +evSymY_E2480,62369 +evSymE_E2482,62411 +xSymE_E2484,62448 +evCntXY_FE2505,62813 +evCntEX_FE2507,62857 +xCntEX_FE2509,62896 +xCntCX_FC2518,63073 +xCntAX_FA2527,63250 +boxE_E2536,63427 +putStringB2556,63884 +begString_S2568,64098 +endStringS_E2579,64324 +doArgs2608,64980 +doNext2615,65094 +doArg2632,65410 +doRest2661,66052 +tmDateC_E2675,66299 +dateXYZ_E2685,66476 +doDate2748,67875 +tmTimeY_E2868,71611 +doTime2885,71944 +doTzo3009,75380 +doUsec3018,75588 +doPwd3036,76005 +doCd3047,76259 +doCtty3072,76874 +doInfo3118,78188 +doFile3177,79583 +doDir3230,80819 +doCmd3300,82437 +doArgv3318,82896 +doOpt3421,85442 +doVersion3435,85773 -./big.l,1019 +big.l,1019 zapZeroA_A6,106 twiceA_A47,1164 twiceBigA_A57,1393 @@ -569,34 +573,34 @@ symToNumXA_FE1677,41101 fmtNum0AE_E1790,43981 fmtNumAE_E1793,44080 -fmtWordACX_CX2042,51002 -fmtScaleCX_CX2057,51362 -doFormat2085,52040 -doAdd2167,53684 -doSub2205,54418 -doInc2252,55434 -doDec2319,57023 -doMul2385,58591 -doMulDiv2442,59809 -doDiv2509,61354 -doRem2568,62611 -doShift2623,63752 -doLt02700,65842 -doLe02710,66023 -doGe02723,66255 -doGt02733,66437 -doAbs2745,66650 -doBitQ2761,66916 -doBitAnd2820,68077 -doBitOr2860,68889 -doBitXor2900,69699 -doSqrt2940,70522 -initSeedE_E3071,73946 -doSeed3114,74830 -doHash3128,75152 -doRand3154,75735 +fmtWordACX_CX2043,51012 +fmtScaleCX_CX2058,51372 +doFormat2086,52050 +doAdd2168,53694 +doSub2206,54428 +doInc2253,55444 +doDec2320,57033 +doMul2386,58601 +doMulDiv2443,59819 +doDiv2510,61364 +doRem2569,62621 +doShift2624,63762 +doLt02701,65852 +doLe02711,66033 +doGe02724,66265 +doGt02734,66447 +doAbs2746,66660 +doBitQ2762,66926 +doBitAnd2821,68087 +doBitOr2861,68899 +doBitXor2901,69709 +doSqrt2941,70532 +initSeedE_E3072,73956 +doSeed3115,74840 +doHash3129,75162 +doRand3155,75745 -./io.l,3004 +io.l,3004 closeAX5,75 unLockFileAC15,253 wrLockFileC23,487 @@ -629,116 +633,116 @@ prTellEZ758,18527 prE764,18682 binPrintEZ766,18751 -putTellBZ1031,26494 -tellBegZ_Z1039,26684 -tellEndAZ1046,26836 -unsync1093,27943 -rdHear_FE1110,28364 -symByteCX_FACX1123,28710 -symCharCX_FACX1144,29149 -bufStringE_SZ1177,30097 -pathStringE_SZ1208,30815 -doPath1282,32832 -charSymACX_CX1294,33102 -byteSymBCX_CX1329,34026 -currFdX_C1371,35142 -currFd_C1375,35254 -rdOpenEXY1392,35627 -wrOpenEXY1533,40033 -erOpenEXY1666,44208 -ctOpenEXY1708,45227 -getStdin_A1762,46641 -getParse_A1833,48481 -pushInFilesY1856,48951 -pushOutFilesY1880,49491 -pushErrFilesY1891,49786 -pushCtlFilesY1896,49890 -popInFiles1901,49994 -popOutFiles1938,50878 -popErrFiles1964,51566 -popCtlFiles1971,51769 -getChar_A1985,52160 -getCharA_A1987,52212 -skipC_A2018,53044 -comment_A2044,53559 -skip_A2071,54077 -testEscA_AF2089,54421 -anonymousX_FE2170,56498 -rdAtomBY_E2203,57359 -rdList_E2255,58786 -readC_E2389,62214 -readA_E2401,62451 -tokenCE_E2584,66756 -doRead2730,70340 -inReadyC_F2771,71218 -fdSetCL_X2783,71500 -fdRdSetCZL2795,71734 -fdWrSetCZL2806,71948 -fdTooHigh2816,72168 -rdSetCL_F2820,72214 -wrSetCL_F2825,72330 -rdSetRdyCL_F2830,72453 -waitFdCEX_A2852,72912 -doWait3256,86368 -doSync3294,87091 -doHear3334,88031 -doTell3366,88725 -fdSetC_Y3415,89813 -doPoll3426,90047 -doKey3482,91418 -doPeek3537,92857 -doChar3553,93135 -doSkip3607,94081 -doEol3621,94428 -doEof3630,94594 -doFrom3649,94951 -doTill3716,96620 -eolA_F3790,98569 -doLine3805,98875 -doLines3958,102918 -parseBCE_E3999,103819 -doAny4071,105473 -doSym4111,106411 -doStr4125,106673 -loadBEX_E4178,107802 -doLoad4288,110524 -doIn4311,110936 -doOut4330,111256 -doErr4349,111580 -doCtl4368,111905 -doPipe4388,112250 -doOpen4462,114146 -doClose4505,115126 -doEcho4536,115717 -putStdoutB4753,121355 -newline4796,122337 -space4800,122379 -outNumE4805,122443 -outWordA4812,122571 -prExtNmX4824,122809 -outOctA4832,123003 -outAoA4845,123271 -outStringC4857,123519 -outNameE4867,123657 -prNameX4875,123774 -printE_E4885,123929 -printE4894,124065 -prinE_E5114,129913 -prinE5123,130049 -doPrin5178,131311 -doPrinl5192,131581 -doSpace5196,131649 -doPrint5218,132048 -doPrintsp5234,132343 -doPrintln5249,132632 -doFlush5254,132720 -doRewind5262,132857 -doExt5279,133247 -doRd5296,133586 -doPr5367,135485 -doWr5384,135817 +putTellBZ1030,26470 +tellBegZ_Z1038,26660 +tellEndAZ1045,26812 +unsync1092,27919 +rdHear_FE1109,28340 +symByteCX_FACX1122,28686 +symCharCX_FACX1143,29125 +bufStringE_SZ1176,30073 +pathStringE_SZ1207,30791 +doPath1281,32808 +charSymACX_CX1293,33078 +byteSymBCX_CX1328,34002 +currFdX_C1370,35118 +currFd_C1374,35230 +rdOpenEXY1391,35603 +wrOpenEXY1532,40009 +erOpenEXY1665,44184 +ctOpenEXY1707,45203 +getStdin_A1761,46617 +getParse_A1832,48457 +pushInFilesY1855,48927 +pushOutFilesY1879,49467 +pushErrFilesY1890,49762 +pushCtlFilesY1895,49866 +popInFiles1900,49970 +popOutFiles1937,50854 +popErrFiles1963,51542 +popCtlFiles1970,51745 +getChar_A1984,52136 +getCharA_A1986,52188 +skipC_A2017,53020 +comment_A2043,53535 +skip_A2070,54053 +testEscA_AF2088,54397 +anonymousX_FE2169,56474 +rdAtomBY_E2202,57335 +rdList_E2255,58788 +readC_E2389,62216 +readA_E2401,62453 +tokenCE_E2587,66821 +doRead2733,70405 +inReadyC_F2774,71283 +fdSetCL_X2786,71565 +fdRdSetCZL2798,71799 +fdWrSetCZL2809,72013 +fdTooHigh2819,72233 +rdSetCL_F2823,72279 +wrSetCL_F2828,72395 +rdSetRdyCL_F2833,72518 +waitFdCEX_A2855,72977 +doWait3259,86433 +doSync3297,87156 +doHear3337,88096 +doTell3369,88790 +fdSetC_Y3418,89878 +doPoll3429,90112 +doKey3485,91483 +doPeek3540,92922 +doChar3556,93200 +doSkip3610,94146 +doEol3624,94493 +doEof3633,94659 +doFrom3652,95016 +doTill3719,96685 +eolA_F3793,98634 +doLine3808,98940 +doLines3961,102983 +parseBCE_E4002,103884 +doAny4074,105538 +doSym4114,106476 +doStr4128,106738 +loadBEX_E4181,107867 +doLoad4291,110589 +doIn4314,111001 +doOut4333,111321 +doErr4352,111645 +doCtl4371,111970 +doPipe4391,112315 +doOpen4465,114211 +doClose4508,115191 +doEcho4539,115782 +putStdoutB4756,121420 +newline4799,122402 +space4803,122444 +outNumE4808,122508 +outWordA4815,122636 +prExtNmX4827,122874 +outOctA4835,123068 +outAoA4848,123336 +outStringC4860,123584 +outNameE4870,123722 +prNameX4878,123839 +printE_E4888,123994 +printE4897,124130 +prinE_E5123,130146 +prinE5132,130282 +doPrin5187,131544 +doPrinl5201,131814 +doSpace5205,131882 +doPrint5227,132281 +doPrintsp5243,132576 +doPrintln5258,132865 +doFlush5263,132953 +doRewind5271,133090 +doExt5288,133480 +doRd5305,133819 +doPr5376,135718 +doWr5393,136050 -./apply.l,465 +apply.l,465 applyXYZ_E4,51 applyVarXYZ_E363,11184 doApply723,22403 @@ -764,198 +768,103 @@ fishAXY1698,42597 doBy1727,43151 -./err.l,1913 +err.l,1913 dbg5,73 errnoEXY26,545 errEXYZ35,707 -unwindC_Z187,4693 -needSymAX363,9689 -needSymEX375,9888 -needVarAX386,10077 -needVarEX396,10254 -checkVarAX405,10421 -checkVarYX413,10557 -checkVarEX421,10693 -protErrEX426,10801 -symNsErrEX430,10851 -stkErr435,10926 -stkErrE437,10951 -stkErrX439,10977 -stkErrEX441,11003 -argErrAX446,11091 -argErrEX448,11118 -numErrAX452,11166 -numErrEX454,11193 -cntErrAX458,11241 -cntErrCX460,11268 -cntErrEX462,11295 -symErrAX466,11343 -symErrYX468,11370 -symErrEX470,11397 -extErrEX474,11445 -pairErrAX478,11493 -pairErrEX480,11521 -atomErrAX484,11571 -atomErrEX486,11599 -lstErrAX490,11649 -lstErrEX492,11676 -varErrAX496,11724 -varErrEX498,11751 -divErrX502,11799 -renErrEX507,11856 -makeErrX511,11904 -reentErrEX516,11963 -yieldErrX520,12015 -yieldErrEX522,12043 -msgErrYX526,12095 -msgErrAX528,12122 -msgErrEX530,12149 -brkErrX534,12197 -openErrEX540,12267 -closeErrX544,12318 -closeErrEX546,12346 -pipeErrX550,12399 -forkErrX555,12459 -waitPidErrX560,12518 -badFdErrEX565,12584 -noFdErrX569,12636 -eofErr574,12695 -suparErrE580,12761 -badInputErrB585,12822 -badDotErrE593,12913 -selectErrX598,12973 -wrBytesErr603,13037 -wrChildErr609,13112 -wrSyncErrX615,13187 -wrJnlErr620,13251 -wrLogErr626,13322 -truncErrX632,13393 -dbSyncErrX637,13455 -trSyncErrX642,13519 -lockErr647,13583 -dbfErrX653,13652 -jnlErrX658,13709 -idErrXL663,13766 -dbRdErr668,13840 -dbWrErr674,13909 -dbSizErr680,13978 -tellErr686,14048 -ipSocketErrX692,14116 -ipGetsocknameErrX697,14184 -ipV6onlyErrX702,14262 -ipReuseaddrErrX707,14330 -ipBindErrX712,14404 -ipListenErrX717,14468 -udpOvflErr722,14536 -undefinedCE729,14635 -undefinedCX731,14665 -undefinedEX733,14695 -dlErrX737,14748 -ret745,14894 -retEq747,14915 -retGt750,14944 -retLt753,14973 -retNull756,15002 -retNil759,15037 -retT762,15073 -retE_E765,15108 +unwindC_Z187,4694 +needSymAX363,9690 +needSymEX375,9889 +needVarAX386,10078 +needVarEX396,10255 +checkVarAX405,10422 +checkVarYX413,10558 +checkVarEX421,10694 +protErrEX426,10802 +symNsErrEX430,10852 +stkErr435,10927 +stkErrE437,10952 +stkErrX439,10978 +stkErrEX441,11004 +argErrAX446,11092 +argErrEX448,11119 +numErrAX452,11167 +numErrEX454,11194 +cntErrAX458,11242 +cntErrCX460,11269 +cntErrEX462,11296 +symErrAX466,11344 +symErrYX468,11371 +symErrEX470,11398 +extErrEX474,11446 +pairErrAX478,11494 +pairErrEX480,11522 +atomErrAX484,11572 +atomErrEX486,11600 +lstErrAX490,11650 +lstErrEX492,11677 +varErrAX496,11725 +varErrEX498,11752 +divErrX502,11800 +renErrEX507,11857 +makeErrX511,11905 +reentErrEX516,11964 +yieldErrX520,12016 +yieldErrEX522,12044 +msgErrYX526,12096 +msgErrAX528,12123 +msgErrEX530,12150 +brkErrX534,12198 +openErrEX540,12268 +closeErrX544,12319 +closeErrEX546,12347 +pipeErrX550,12400 +forkErrX555,12460 +waitPidErrX560,12519 +badFdErrEX565,12585 +noFdErrX569,12637 +eofErr574,12696 +suparErrE580,12762 +badInputErrB585,12823 +badDotErrE593,12914 +selectErrX598,12974 +wrBytesErr603,13038 +wrChildErr609,13113 +wrSyncErrX615,13188 +wrJnlErr620,13252 +wrLogErr626,13323 +truncErrX632,13394 +dbSyncErrX637,13456 +trSyncErrX642,13520 +lockErr647,13584 +dbfErrX653,13653 +jnlErrX658,13710 +idErrXL663,13767 +dbRdErr668,13841 +dbWrErr674,13910 +dbSizErr680,13979 +tellErr686,14049 +ipSocketErrX692,14117 +ipGetsocknameErrX697,14185 +ipV6onlyErrX702,14263 +ipReuseaddrErrX707,14331 +ipBindErrX712,14405 +ipListenErrX717,14469 +udpOvflErr722,14537 +undefinedCE729,14636 +undefinedCX731,14666 +undefinedEX733,14696 +dlErrX737,14749 +ret745,14895 +retEq747,14916 +retGt750,14945 +retLt753,14974 +retNull756,15003 +retNil759,15038 +retT762,15074 +retE_E765,15109 -./sym.l,1857 -cmpLongAX_F5,78 -isInternEXY_F37,678 -internEXY_FE79,1662 -findSymX_E261,6753 -externX_E270,6938 -uninternEXY389,10303 -nameA_A502,13395 -nameE_E510,13538 -nameX_X518,13681 -nameY_Y526,13824 -doName535,13996 -mkCharA_A606,15526 -mkStrE_E656,16964 -mkStrEZ_A683,17432 -firstByteA_B706,17847 -firstCharE_A721,18112 -isBlankE_F737,18402 -doSpQ760,18806 -doPatQ769,18968 -doFunQ783,19242 -doGetd791,19403 -doAll821,20102 -consTreeXE_E865,21170 -balanceXY925,22646 -balanceCEY943,22979 -doSymbols975,23780 -doIntern1040,25501 -doExtern1065,25916 -doHide1132,27440 -doBoxQ1164,28010 -doStrQ1178,28271 -doExtQ1199,28682 -doTouch1214,28970 -doZap1228,29220 -doChop1253,29666 -doPack1304,31025 -packECX_CX1337,31590 -packExt1375,32527 -doGlue1395,32902 -doText1433,33668 -preCEXY_F1505,35541 -subStrAE_F1520,35871 -doPreQ1571,37018 -doSubQ1604,37639 -doVal1623,37990 -doSet1642,38337 -doSetq1675,38969 -doSwap1698,39369 -doXchg1725,39840 -doOn1770,40773 -doOff1781,40955 -doOnOff1792,41140 -doZero1806,41421 -doOne1817,41603 -doDefault1828,41793 -doPush1855,42299 -doPush11891,42960 -doPush1q1940,43901 -doPop1984,44742 -doPopq2008,45198 -doCut2019,45410 -doDel2074,46638 -doQueue2142,48223 -doFifo2184,48975 -doIdx2258,50575 -idxGetXY_E2301,51452 -idxPutXY_E2320,51827 -idxDelXY_E2390,53847 -doLup2449,55367 -putACE2591,59722 -getnECX_E2734,63720 -getEC_E2775,64629 -propEC_E2845,66458 -doPut2935,68907 -doGet2996,70141 -doProp3027,70711 -doSemicol3077,71692 -doSetCol3106,72219 -doCol3160,73362 -doPropCol3184,73796 -doPutl3227,74693 -doGetl3309,76394 -doWipe3367,77502 -wipeEX3392,77967 -doMeta3416,78510 -metaCX_E3458,79286 -caseDataA_AC3484,79885 -doLowQ3496,80188 -doUppQ3511,80547 -doLowc3526,80900 -doUppc3578,82408 -doFold3630,83923 -isLetterOrDigitA_F3698,85956 - -./db.l,1134 +db.l,1134 getAdrZ_A6,117 setAdrAZ22,350 dbfBuf_AF37,589 @@ -1012,53 +921,53 @@ doFree1980,54819 doDbck2038,56285 -./gc.l,863 +gc.l,863 markE5,63 need354,1338 gc67,1635 -doGc456,12026 -cons_A490,12780 -cons_C502,13044 -cons_E514,13308 -cons_X526,13572 -cons_Y538,13836 -cons_Z550,14100 -consA_A562,14364 -consC_A578,14687 -consE_A594,14996 -consX_A610,15305 -consA_C626,15614 -consC_C642,15923 -consE_C658,16246 -consA_E674,16555 -consC_E690,16864 -consE_E706,17173 -consX_E722,17496 -consA_X738,17805 -consE_X754,18114 -consE_Y770,18423 -consY_X786,18732 -consA_Y802,19041 -consA_Z818,19350 -consAC_E834,19659 -consSymX_E852,20012 -boxNum_A872,20462 -boxNum_C884,20747 -boxNum_E896,21032 -boxNum_X908,21317 -boxNumA_A920,21602 -boxNumE_E934,21931 -consNumAC_A948,22260 -consNumAE_A966,22636 -consNumCA_C984,23012 -consNumCE_A1002,23388 -consNumCE_C1019,23755 -consNumCE_E1037,24131 -consNumEA_A1054,24481 -consNumEA_E1071,24831 -consNumEC_E1089,25207 +doGc458,12121 +cons_A492,12875 +cons_C504,13139 +cons_E516,13403 +cons_X528,13667 +cons_Y540,13931 +cons_Z552,14195 +consA_A564,14459 +consC_A580,14782 +consE_A596,15091 +consX_A612,15400 +consA_C628,15709 +consC_C644,16018 +consE_C660,16341 +consA_E676,16650 +consC_E692,16959 +consE_E708,17268 +consX_E724,17591 +consA_X740,17900 +consE_X756,18209 +consE_Y772,18518 +consY_X788,18827 +consA_Y804,19136 +consA_Z820,19445 +consAC_E836,19754 +consSymX_E854,20107 +boxNum_A874,20557 +boxNum_C886,20842 +boxNum_E898,21127 +boxNum_X910,21412 +boxNumA_A922,21697 +boxNumE_E936,22026 +consNumAC_A950,22355 +consNumAE_A968,22731 +consNumCA_C986,23107 +consNumCE_A1004,23483 +consNumCE_C1021,23850 +consNumCE_E1039,24226 +consNumEA_A1056,24576 +consNumEA_E1073,24926 +consNumEC_E1091,25302 -./flow.l,1703 +flow.l,1703 redefMsgEC4,51 putSrcEC_E25,589 redefineCE109,3406 @@ -1071,84 +980,179 @@ doDe533,14392 doDm546,14671 evMethodACEXYZ_E646,16982 -methodEY_FCYZ797,21014 -doBox830,21855 -doNew841,22075 -doType922,23985 -doIsa969,25153 -isaCE_F1020,26205 -doMethod1061,27304 -doMeth1097,27909 -doSend1136,28617 -doTry1179,29392 -doSuper1227,30231 -doExtra1271,31161 -extraXY_FCYZ1298,31704 -doWith1334,32571 -doBind1364,33254 -doJob1436,34817 -setDestructAE1484,35969 -doLet1519,36777 -doLetQ1644,40036 -doUse1677,40750 -doAnd1728,41869 -doOr1744,42134 -doNand1763,42441 -doNor1784,42804 -doXor1805,43170 -doBool1828,43577 -doNot1836,43712 -doNil1846,43870 -doT1855,44009 -doProg1864,44150 -doProg11872,44273 -doProg21889,44556 -doIf1909,44885 -doIf21928,45237 -doIfn1969,46093 -doWhen1988,46418 -doUnless2005,46703 -doCond2023,47042 -doNond2046,47462 -doCase2069,47878 -doCasq2113,48842 -doState2153,49717 -doWhile2205,50757 -doUntil2229,51149 -doAt2253,51545 -doDo2285,52147 -doLoop2321,52899 -loopX2332,53019 -doFor2378,54448 -loopY_FE2565,59702 -doCatch2615,61071 -doThrow2641,61566 -throwErrZX2672,62222 -doFinally2678,62313 -doCo2702,62853 -resumeCoroutine2732,63773 -doYield2908,69862 -closeCoFilesC3063,74216 -doBreak3077,74479 -brkLoadE_E3085,74631 -doE3140,76231 -doTrace3179,76997 -traceCY3251,78912 -execArgsE_SXZ3278,79376 -doExec3306,80075 -doCall3312,80234 -doTick3382,81989 -doIpid3414,82986 -doOpid3430,83274 -doKill3446,83569 -doFork3469,84004 -doDetach3483,84250 -forkLispX_FE3503,84728 -doBye3664,89282 -byeE3675,89445 -finishE3687,89756 +methodEY_FCYZ786,20801 +doBox819,21642 +doNew830,21862 +doType911,23772 +doIsa958,24940 +isaCE_F1009,25992 +doMethod1050,27091 +doMeth1086,27696 +doSend1125,28404 +doTry1168,29179 +doSuper1216,30018 +doExtra1260,30948 +extraXY_FCYZ1287,31491 +doWith1323,32358 +doBind1353,33041 +doJob1425,34604 +setDestructAE1473,35756 +doLet1508,36564 +doLetQ1633,39823 +doUse1666,40537 +doAnd1717,41656 +doOr1733,41921 +doNand1752,42228 +doNor1773,42591 +doXor1794,42957 +doBool1817,43364 +doNot1825,43499 +doNil1835,43657 +doT1844,43796 +doProg1853,43937 +doProg11861,44060 +doProg21878,44343 +doIf1898,44672 +doIf21917,45024 +doIfn1958,45880 +doWhen1977,46205 +doUnless1994,46490 +doCond2012,46829 +doNond2035,47249 +doCase2058,47665 +doCasq2102,48629 +doState2142,49504 +doWhile2194,50544 +doUntil2218,50936 +doAt2242,51332 +doDo2274,51934 +doLoop2310,52686 +loopX2321,52806 +doFor2367,54235 +loopY_FE2554,59489 +doCatch2604,60858 +doThrow2630,61353 +throwErrZX2661,62009 +doFinally2667,62100 +doCo2691,62640 +resumeCoroutine2721,63560 +doYield2897,69649 +closeCoFilesC3052,74003 +doBreak3066,74266 +brkLoadE_E3074,74418 +doE3129,76018 +doTrace3168,76784 +traceCY3240,78699 +execArgsE_SXZ3267,79163 +doExec3295,79862 +doCall3301,80021 +doTick3371,81776 +doIpid3403,82773 +doOpid3419,83061 +doKill3435,83356 +doFork3458,83791 +doDetach3472,84037 +forkLispX_FE3492,84515 +doBye3653,89069 +byeE3664,89232 +finishE3676,89543 + +sym.l,1880 +cmpLongAX_F5,78 +nextIsInternEXYZ_FE33,621 +isInternEXYZ_FCE41,761 +internEXYZ_FE123,2762 +findSymX_E375,10025 +isEnvInternEX_FCE387,10282 +externX_E397,10479 +uninternEXY516,13844 +nameA_A629,16936 +nameE_E637,17079 +nameX_X645,17222 +nameY_Y653,17365 +doName662,17537 +mkCharA_A732,19046 +mkStrE_E782,20484 +mkStrEZ_A809,20952 +firstByteA_B832,21367 +firstCharE_A847,21632 +isBlankE_F863,21922 +doSpQ886,22326 +doPatQ895,22488 +doFunQ909,22762 +doGetd917,22923 +doAll947,23629 +consTreeXE_E1009,25127 +doSymbols1072,26673 +doIntern1150,28548 +doExtern1194,29376 +doHide1261,30900 +doBoxQ1296,31533 +doStrQ1310,31794 +doExtQ1330,32187 +doTouch1345,32475 +doZap1359,32725 +doChop1384,33173 +doPack1435,34532 +packECX_CX1468,35097 +packExt1506,36034 +doGlue1526,36409 +doText1564,37175 +preCEXY_F1636,39048 +subStrAE_F1651,39378 +doPreQ1702,40525 +doSubQ1735,41146 +doVal1754,41497 +doSet1773,41844 +doSetq1806,42476 +doSwap1829,42876 +doXchg1856,43347 +doOn1901,44280 +doOff1912,44462 +doOnOff1923,44647 +doZero1937,44928 +doOne1948,45110 +doDefault1959,45300 +doPush1986,45806 +doPush12022,46467 +doPush1q2071,47408 +doPop2115,48249 +doPopq2139,48705 +doCut2150,48917 +doDel2205,50152 +doQueue2266,51422 +doFifo2308,52174 +doIdx2382,53774 +idxGetXY_E2425,54651 +idxPutXY_E2444,55026 +idxDelXY_E2514,57046 +doLup2573,58566 +putACE2715,62921 +getnECX_E2858,66919 +getEC_E2899,67828 +propEC_E2969,69657 +doPut3059,72106 +doGet3120,73340 +doProp3151,73910 +doSemicol3201,74891 +doSetCol3230,75418 +doCol3284,76561 +doPropCol3308,76995 +doPutl3351,77892 +doGetl3433,79593 +doWipe3491,80701 +wipeEX3516,81166 +doMeta3540,81709 +metaCX_E3582,82485 +caseDataA_AC3608,83084 +doLowQ3620,83387 +doUppQ3637,83808 +doLowc3654,84223 +doUppc3709,85860 +doFold3764,87504 +isLetterOrDigitA_F3834,89630 -./subr.l,2269 +subr.l,2269 doCar5,71 doCdr17,247 doCaar31,439 @@ -1197,89 +1201,89 @@ doCopy1241,22066 doMix1276,22800 doAppend1356,24669 -doDelete1419,26191 -doDelq1470,27352 -doReplace1517,28424 -doInsert1594,30350 -doRemove1653,31591 -doPlace1700,32700 -doStrip1763,34108 -doSplit1779,34425 -doReverse1865,36670 -doFlip1886,37034 -doTrim1946,38505 -trimE_E1956,38644 -doClip1986,39300 -doHead2007,39650 -doTail2098,41901 -doStem2176,43740 -doFin2220,44657 -doLast2231,44840 -doEq2246,45112 -doNEq2274,45578 -doEqual2302,46043 -doNEqual2331,46550 -doEq02360,47059 -doEq12368,47197 -doEqT2376,47329 -doNEq02384,47460 -doNEqT2393,47605 -doLt2402,47749 -doLe2432,48321 -doGt2462,48892 -doGe2492,49464 -doMax2522,50037 -doMin2551,50578 -doAtom2580,51115 -doPair2589,51259 -doCircQ2597,51394 -doLstQ2605,51539 -doNumQ2616,51728 -doSymQ2624,51861 -doFlgQ2635,52047 -doMember2645,52228 -doMemq2667,52581 -doMmeq2695,53109 -doSect2731,53851 -doDiff2779,54891 -doIndex2827,55937 -doOffset2867,56691 -doPrior2903,57334 -doLength2931,57809 -doSize2998,59314 -sizeCE_C3119,63214 -doBytes3163,64217 -doAssoc3176,64438 -doRassoc3211,65098 -doAsoq3246,65762 -doRank3274,66280 -doMatch3323,67328 -matchCE_F3342,67654 -doFill3434,70302 -fillE_FE3452,70596 -unifyCEYZ_F3555,72857 -doProve3719,77150 -lupCE_E3984,84820 -lookupCE_E4037,86065 -uniFillE_E4051,86318 -doArrow4079,86896 -doUnify4101,87306 -doGroup4127,87739 -doSort4202,89482 -cmpDfltA_F4357,94663 -cmpUserAX_F4362,94814 +doDelete1419,26198 +doDelq1471,27257 +doReplace1522,28302 +doInsert1599,30228 +doRemove1658,31469 +doPlace1705,32578 +doStrip1768,33986 +doSplit1784,34303 +doReverse1870,36548 +doFlip1891,36912 +doTrim1951,38383 +trimE_E1961,38522 +doClip1991,39178 +doHead2012,39528 +doTail2103,41779 +doStem2181,43618 +doFin2225,44535 +doLast2236,44718 +doEq2251,44990 +doNEq2279,45456 +doEqual2307,45921 +doNEqual2336,46428 +doEq02365,46937 +doEq12373,47075 +doEqT2381,47207 +doNEq02389,47338 +doNEqT2398,47483 +doLt2407,47627 +doLe2437,48199 +doGt2467,48770 +doGe2497,49342 +doMax2527,49915 +doMin2556,50456 +doAtom2585,50993 +doPair2594,51137 +doCircQ2602,51272 +doLstQ2610,51417 +doNumQ2621,51606 +doSymQ2629,51739 +doFlgQ2640,51925 +doMember2650,52106 +doMemq2672,52459 +doMmeq2700,52987 +doSect2736,53729 +doDiff2784,54769 +doIndex2832,55815 +doOffset2872,56569 +doPrior2908,57212 +doLength2936,57687 +doSize3003,59192 +sizeCE_C3124,63092 +doBytes3168,64095 +doAssoc3181,64316 +doRassoc3216,64976 +doAsoq3251,65640 +doRank3279,66158 +doMatch3328,67206 +matchCE_F3347,67532 +doFill3439,70180 +fillE_FE3457,70474 +unifyCEYZ_F3560,72735 +doProve3724,77028 +lupCE_E3989,84698 +lookupCE_E4042,85943 +uniFillE_E4056,86196 +doArrow4084,86774 +doUnify4106,87184 +doGroup4132,87617 +doSort4207,89360 +cmpDfltA_F4362,94541 +cmpUserAX_F4367,94692 -./net.l,192 +net.l,192 doPort5,96 -tcpAcceptA_FE111,2846 -doAccept150,4228 -doListen162,4464 -doHost195,5137 -doConnect229,6020 -serverCEY_FE278,7224 -doUdp306,7988 -getUdpZ_FB375,9921 -putUdpBZ382,10068 +tcpAcceptA_FE112,2897 +doAccept151,4279 +doListen163,4515 +doHost196,5188 +doConnect230,6071 +serverCEY_FE279,7275 +doUdp307,8039 +getUdpZ_FB376,9972 +putUdpBZ383,10119 sys/arm64.linux.code.l,94 errno_A5,67 diff -Nru picolisp-16.12/src64/version.l picolisp-17.6/src64/version.l --- picolisp-16.12/src64/version.l 2016-12-08 09:15:40.000000000 +0000 +++ picolisp-17.6/src64/version.l 2017-06-29 05:17:09.000000000 +0000 @@ -1,6 +1,6 @@ -# 05dec16abu +# 29jun17abu # (c) Software Lab. Alexander Burger -(de *Version 16 12 8) +(de *Version 17 6 29) # vi:et:ts=3:sw=3 diff -Nru picolisp-16.12/test/lib/misc.l picolisp-17.6/test/lib/misc.l --- picolisp-16.12/test/lib/misc.l 2013-10-30 16:52:11.000000000 +0000 +++ picolisp-17.6/test/lib/misc.l 2016-12-18 09:22:53.000000000 +0000 @@ -148,6 +148,11 @@ (test 733133 (expDat "2007-05-31")) (test 733133 (expDat "7-5-31")) +(let D (date) + (test D (expDat ".")) + (test (inc D) (expDat "+1")) + (test (dec D) (expDat "-1")) ) + (locale "DE" "de") (test 733133 (expDat "31.5.7")) (locale) diff -Nru picolisp-16.12/test/src/main.l picolisp-17.6/test/src/main.l --- picolisp-16.12/test/src/main.l 2016-02-02 15:20:46.000000000 +0000 +++ picolisp-17.6/test/src/main.l 2017-01-09 09:55:32.000000000 +0000 @@ -1,4 +1,4 @@ -# 02feb16abu +# 09jan17abu # (c) Software Lab. Alexander Burger ### Evaluation ### @@ -192,4 +192,16 @@ (test 40643 (time (11 17 23))) (test NIL (time NIL)) +(when (= *OS "Linux") + (test + (use (A B C) + (loop + (setq + A (+ (* 86400 (date)) (time T)) + B (+ (* 86400 (date T)) (time T)) + C (+ (* 86400 (date)) (time T)) ) + (T (= A C)) ) + (- A B) ) + (tzo) ) ) + # vi:et:ts=3:sw=3 diff -Nru picolisp-16.12/test/src/subr.l picolisp-17.6/test/src/subr.l --- picolisp-16.12/test/src/subr.l 2016-10-24 10:08:41.000000000 +0000 +++ picolisp-17.6/test/src/subr.l 2017-04-04 08:42:21.000000000 +0000 @@ -1,4 +1,4 @@ -# 24oct16abu +# 04apr17abu # (c) Software Lab. Alexander Burger ### c[ad]*r ### @@ -132,13 +132,25 @@ ### delete ### -(test (1 3) (delete 2 (1 2 3))) -(test '((1 2) (5 6) (3 4)) (delete (3 4) '((1 2) (3 4) (5 6) (3 4)))) +(test (1 3) + (delete 2 (1 2 3)) ) +(test '((1 2) (5 6) (3 4)) + (delete (3 4) '((1 2) (3 4) (5 6) (3 4))) ) +(test (1 2 3 1 2 3) + (delete 1 (1 1 2 3 1 2 3)) ) +(test (2 3 2 3) + (delete 1 (1 1 2 3 1 2 3) T) ) ### delq ### -(test '(a c) (delq 'b '(a b c))) -(test (1 (2) 3) (delq (2) (1 (2) 3))) +(test '(a c) + (delq 'b '(a b c)) ) +(test (1 (2) 3) + (delq (2) (1 (2) 3)) ) +(test '(a b c a b c) + (delq 'a '(a a b c a b c)) ) +(test '(b c b c) + (delq 'a '(a a b c a b c) T) ) ### replace ### diff -Nru picolisp-16.12/test/src/sym.l picolisp-17.6/test/src/sym.l --- picolisp-16.12/test/src/sym.l 2016-11-24 09:56:55.000000000 +0000 +++ picolisp-17.6/test/src/sym.l 2017-04-05 13:46:08.000000000 +0000 @@ -1,4 +1,4 @@ -# 24nov16abu +# 05apr17abu # (c) Software Lab. Alexander Burger ### name ### @@ -47,11 +47,11 @@ ### symbols ### (when symbols (test T (bool (pair pico))) - (test 'pico (symbols 'myLib 'pico)) ) + (test '(pico) (symbols 'myLib 'pico)) ) (when symbols (one Foo) - (test 'myLib (symbols 'pico)) ) + (test '(myLib pico) (symbols 'pico)) ) (when symbols (test 1 myLib~Foo) ) @@ -247,6 +247,8 @@ (test '((a b c)) (del '(d e f) (:: lst))) (test NIL (del '(a b c) (:: lst))) (test NIL (: lst)) ) ) +(let L (1 1 2 3 1 2 3) + (test (2 3 2 3) (del 1 'L T)) ) ### queue ###