picolisp

Unnamed repository; edit this file to name it for gitweb.
git clone https://logand.com/git/picolisp.git/
Log | Files | Refs | README | LICENSE

commit 457c3bd5a0092d769da944883c662fc1639e0782
parent c260ea732839ceaa7c53baa81f7b27fe2cf9030d
Author: Alexander Burger <abu@software-lab.de>
Date:   Sun, 23 Jun 2013 09:50:51 +0200

'flg' argument to 'info' -> call lstat()
Diffstat:
MCHANGES | 1+
Mdoc/refI.html | 6++++--
Mlib/map | 12++++++------
Msrc/main.c | 14++++++++------
Msrc/vers.h | 2+-
Msrc64/arch/emu.l | 3++-
Msrc64/main.l | 19++++++++++++++-----
Msrc64/tags | 258+++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc64/version.l | 4++--
9 files changed, 165 insertions(+), 154 deletions(-)

diff --git a/CHANGES b/CHANGES @@ -1,4 +1,5 @@ * DDjun13 picoLisp-3.1.3 + 'info' optional 'flg' argument '+Swap' relation prefix class Allow unlimited number of coroutines Default coroutine stack segment size 1 MB diff --git a/doc/refI.html b/doc/refI.html @@ -263,10 +263,12 @@ href="refO.html#offset">offset</a></code>. -> 3 </code></pre> -<dt><a name="info"><code>(info 'any) -> (cnt|T dat . tim)</code></a> +<dt><a name="info"><code>(info 'any ['flg]) -> (cnt|T dat . tim)</code></a> <dd>Returns information about a file with the name <code>any</code>: The current size <code>cnt</code> in bytes, and the modification date and time (UTC). For -directories, <code>T</code> is returned instead of the a size. See also <code><a +directories, <code>T</code> is returned instead of the size. If <code>flg</code> +is non-<code>NIL</code> and <code>any</code> is the name of a symbolic link, +then the link itself is used, not the file that it refers to. See also <code><a href="refD.html#dir">dir</a></code>, <code><a href="refD.html#date">date</a></code>, <code><a href="refT.html#time">time</a></code> and <code><a diff --git a/lib/map b/lib/map @@ -34,7 +34,7 @@ append (1339 . "@src64/subr.l") apply (713 . "@src64/apply.l") arg (2614 . "@src64/main.l") args (2590 . "@src64/main.l") -argv (3242 . "@src64/main.l") +argv (3251 . "@src64/main.l") as (139 . "@src64/flow.l") asoq (3021 . "@src64/subr.l") assoc (2986 . "@src64/subr.l") @@ -89,7 +89,7 @@ circ (817 . "@src64/subr.l") circ? (2403 . "@src64/subr.l") clip (1800 . "@src64/subr.l") close (4403 . "@src64/io.l") -cmd (3224 . "@src64/main.l") +cmd (3233 . "@src64/main.l") cnt (1413 . "@src64/apply.l") co (2548 . "@src64/flow.l") commit (1403 . "@src64/db.l") @@ -112,7 +112,7 @@ del (1986 . "@src64/sym.l") delete (1402 . "@src64/subr.l") delq (1453 . "@src64/subr.l") diff (2590 . "@src64/subr.l") -dir (3154 . "@src64/main.l") +dir (3163 . "@src64/main.l") dm (545 . "@src64/flow.l") do (2141 . "@src64/flow.l") e (2971 . "@src64/flow.l") @@ -129,7 +129,7 @@ extern (1032 . "@src64/sym.l") extra (1269 . "@src64/flow.l") extract (1218 . "@src64/apply.l") fifo (2097 . "@src64/sym.l") -file (3101 . "@src64/main.l") +file (3110 . "@src64/main.l") fill (3256 . "@src64/subr.l") filter (1161 . "@src64/apply.l") fin (2034 . "@src64/subr.l") @@ -240,7 +240,7 @@ onOff (1747 . "@src64/sym.l") one (1780 . "@src64/sym.l") open (4360 . "@src64/io.l") opid (3245 . "@src64/flow.l") -opt (3345 . "@src64/main.l") +opt (3354 . "@src64/main.l") or (1640 . "@src64/flow.l") out (4236 . "@src64/io.l") pack (1279 . "@src64/sym.l") @@ -342,7 +342,7 @@ uppc (3469 . "@src64/sym.l") use (1573 . "@src64/flow.l") usec (2965 . "@src64/main.l") val (1597 . "@src64/sym.l") -version (3359 . "@src64/main.l") +version (3368 . "@src64/main.l") wait (3175 . "@src64/io.l") when (1884 . "@src64/flow.l") while (2061 . "@src64/flow.l") diff --git a/src/main.c b/src/main.c @@ -1,4 +1,4 @@ -/* 06may13abu +/* 23jun13abu * (c) Software Lab. Alexander Burger */ @@ -1092,18 +1092,20 @@ any doCtty(any ex) { return T; } -// (info 'any) -> (cnt|T dat . tim) +// (info 'any ['flg]) -> (cnt|T dat . tim) any doInfo(any x) { + any y; cell c1; struct tm *p; struct stat st; - x = evSym(cdr(x)); + y = evSym(x = cdr(x)); { - char nm[pathSize(x)]; + char nm[pathSize(y)]; - pathString(x, nm); - if (stat(nm, &st) < 0) + pathString(y, nm); + x = cdr(x); + if ((isNil(EVAL(car(x)))? stat(nm, &st) : lstat(nm, &st)) < 0) return Nil; p = gmtime(&st.st_mtime); Push(c1, boxCnt(p->tm_hour * 3600 + p->tm_min * 60 + p->tm_sec)); diff --git a/src/vers.h b/src/vers.h @@ -1 +1 @@ -static byte Version[4] = {3,1,2,12}; +static byte Version[4] = {3,1,2,13}; diff --git a/src64/arch/emu.l b/src64/arch/emu.l @@ -1,4 +1,4 @@ -# 23may13abu +# 23jun13abu # (c) Software Lab. Alexander Burger # Byte order @@ -772,6 +772,7 @@ (waitpid i i "int" i) (free - p) (stat i p "struct stat") + (lstat i p "struct stat") (fcntl i i i p) (pipe i "int") (select i i "fd_set" "fd_set" "fd_set" (2 . -2)) diff --git a/src64/main.l b/src64/main.l @@ -1,4 +1,4 @@ -# 28may13abu +# 23jun13abu # (c) Software Lab. Alexander Burger (code 'Code) @@ -3052,17 +3052,26 @@ pop X ret -# (info 'any) -> (cnt|T dat . tim) +# (info 'any ['flg]) -> (cnt|T dat . tim) (code 'doInfo 2) push X push Y push Z - ld E ((E CDR)) # Get arg + ld X (E CDR) # Args + ld E (X) # Get 'any' call evSymE_E # Evaluate to a symbol call pathStringE_SZ # Write to stack buffer - ld E S # path name pointer + ld Y S # path name pointer sub S (%% STAT) # 'stat' structure - cc stat(E S) # Get status + ld X (X CDR) # Eval 'flg' + ld E (X) + eval + cmp E Nil # NIL? + if eq # Yes + cc stat(Y S) # Get status + else + cc lstat(Y S) # or link status + end ld E Nil # Preload return value nul4 # 'stat' OK? if ns diff --git a/src64/tags b/src64/tags @@ -48,122 +48,119 @@ CHAR_LETTER63,1516 CHAR_DIGIT64,1537 -sys/x86-64.freeBsd.defs.l,1994 -ENOENT5,56 -EINTR6,71 -EBADF7,85 -EAGAIN8,99 -EACCES9,115 -EPIPE10,131 -ECONNRESET11,146 -O_RDONLY14,180 -O_WRONLY15,197 -O_RDWR16,214 -O_CREAT17,229 -O_EXCL18,247 -O_TRUNC19,265 -O_APPEND20,284 -F_GETFD21,301 -F_SETFD22,317 -FD_CLOEXEC23,333 -BUFSIZ26,361 -PIPE_BUF27,379 -MAXPATHLEN28,398 -stdin29,417 -stdout30,442 -stderr31,468 -RTLD_LAZY35,504 -RTLD_GLOBAL36,522 -FLOCK39,553 -L_TYPE40,568 -L_WHENCE41,584 -L_START42,602 -L_LEN43,618 -L_PID44,632 -SEEK_SET45,647 -SEEK_CUR46,664 -F_RDLCK47,681 -F_WRLCK48,697 -F_UNLCK49,713 -F_GETFL50,729 -F_SETFL51,745 -F_GETLK52,761 -F_SETLK53,778 -F_SETLKW54,795 -F_SETOWN55,813 -O_NONBLOCK56,830 -O_ASYNC57,849 -STAT60,874 -ST_MODE61,889 -ST_SIZE62,905 -ST_MTIME63,922 -S_IFMT64,940 -S_IFDIR65,959 -TMS68,988 -TMS_UTIME69,1001 -TMS_STIME70,1019 -TERMIOS73,1048 -C_IFLAG74,1065 -C_LFLAG75,1081 -C_CC76,1098 -ISIG77,1112 -VMIN78,1127 -VTIME79,1141 -TCSADRAIN80,1156 -SIGACTION83,1184 -SIGSET_T84,1203 -SA_HANDLER85,1221 -SA_MASK86,1240 -SA_FLAGS87,1257 -SIG_DFL88,1274 -SIG_IGN89,1290 -SIG_UNBLOCK90,1306 -SIGHUP91,1326 -SIGINT92,1341 -SIGUSR193,1356 -SIGUSR294,1373 -SIGPIPE95,1390 -SIGALRM96,1407 -SIGTERM97,1424 -SIGCHLD98,1441 -SIGCONT99,1458 -SIGSTOP100,1475 -SIGTSTP101,1492 -SIGTTIN102,1509 -SIGTTOU103,1526 -SIGIO104,1543 -SIGNALS105,1558 -WNOHANG108,1583 -WUNTRACED109,1599 -FD_SET112,1627 -TM_SEC115,1652 -TM_MIN116,1667 -TM_HOUR117,1682 -TM_MDAY118,1698 -TM_MON119,1715 -TM_YEAR120,1731 -D_NAME123,1755 -SOCK_STREAM126,1781 -SOCK_DGRAM127,1801 -AF_UNSPEC128,1820 -AF_INET6129,1838 -SOL_SOCKET130,1856 -SO_REUSEADDR131,1879 -IPPROTO_IPV6132,1900 -IPV6_V6ONLY133,1922 -INET6_ADDRSTRLEN134,1943 -NI_MAXHOST135,1969 -NI_NAMEREQD136,1991 -SOCKADDR_IN6137,2011 -SIN6_FAMILY138,2033 -SIN6_PORT139,2053 -SIN6_ADDR140,2071 -ADDRINFO141,2089 -AI_FAMILY142,2107 -AI_SOCKTYPE143,2125 -AI_ADDRLEN144,2145 -AI_ADDR145,2165 -AI_NEXT146,2182 +sys/x86-64.linux.defs.l,1959 +ENOENT5,59 +EINTR6,108 +EBADF7,155 +EAGAIN8,194 +EACCES9,227 +EPIPE10,268 +ECONNRESET11,303 +O_RDONLY14,365 +O_WRONLY15,382 +O_RDWR16,399 +O_CREAT17,414 +O_EXCL18,431 +O_TRUNC19,448 +O_APPEND20,466 +F_GETFD21,486 +F_SETFD22,502 +FD_CLOEXEC23,518 +BUFSIZ26,546 +PIPE_BUF27,564 +MAXPATHLEN29,585 +RTLD_LAZY32,613 +RTLD_GLOBAL33,631 +FLOCK36,662 +L_TYPE37,702 +L_WHENCE38,722 +L_START39,744 +L_LEN40,760 +L_PID41,775 +SEEK_SET42,790 +SEEK_CUR43,807 +F_RDLCK44,824 +F_WRLCK45,840 +F_UNLCK46,856 +F_GETFL47,872 +F_SETFL48,888 +F_GETLK49,904 +F_SETLK50,920 +F_SETLKW51,936 +F_SETOWN52,953 +O_NONBLOCK53,970 +O_ASYNC54,992 +STAT57,1019 +ST_MODE58,1061 +ST_SIZE59,1083 +ST_MTIME60,1100 +S_IFMT61,1118 +S_IFDIR62,1144 +TMS65,1180 +TMS_UTIME66,1214 +TMS_STIME67,1232 +TERMIOS70,1261 +C_IFLAG71,1304 +C_LFLAG72,1320 +C_CC73,1337 +ISIG74,1351 +VMIN75,1364 +VTIME76,1377 +TCSADRAIN77,1391 +SIGACTION80,1419 +SIGSET_T81,1462 +SA_HANDLER82,1481 +SA_MASK83,1500 +SA_FLAGS84,1516 +SIG_DFL86,1536 +SIG_IGN87,1552 +SIG_UNBLOCK88,1568 +SIGHUP90,1589 +SIGINT91,1615 +SIGUSR192,1630 +SIGUSR293,1647 +SIGPIPE94,1664 +SIGALRM95,1681 +SIGTERM96,1698 +SIGCHLD97,1715 +SIGCONT98,1732 +SIGSTOP99,1749 +SIGTSTP100,1766 +SIGTTIN101,1783 +SIGTTOU102,1800 +SIGIO103,1817 +SIGNALS104,1832 +WNOHANG107,1894 +WUNTRACED108,1910 +FD_SET111,1938 +TM_SEC114,1975 +TM_MIN115,1990 +TM_HOUR116,2005 +TM_MDAY117,2021 +TM_MON118,2038 +TM_YEAR119,2054 +D_NAME122,2078 +SOCK_STREAM125,2105 +SOCK_DGRAM126,2125 +AF_UNSPEC127,2144 +AF_INET6128,2162 +SOL_SOCKET129,2180 +SO_REUSEADDR130,2199 +IPPROTO_IPV6131,2220 +IPV6_V6ONLY132,2242 +INET6_ADDRSTRLEN133,2263 +NI_MAXHOST135,2290 +NI_NAMEREQD136,2312 +SOCKADDR_IN6138,2333 +SIN6_FAMILY139,2355 +SIN6_PORT140,2375 +SIN6_ADDR141,2393 +ADDRINFO143,2412 +AI_FAMILY144,2430 +AI_SOCKTYPE145,2448 +AI_ADDRLEN146,2468 +AI_ADDR147,2488 +AI_NEXT148,2505 ./glob.l,4331 Data4,51 @@ -413,7 +410,7 @@ sys/x86-64.freeBsd.defs.l,1994 UndefErr1247,85443 DlErr1248,85472 -./main.l,2261 +./main.l,2242 Code4,51 Ret8,106 Retc10,127 @@ -512,7 +509,6 @@ sys/x86-64.freeBsd.defs.l,1994 putStringB2538,62459 begString2550,62673 endString_E2561,62899 -msec_A2576,63247 doArgs2590,63556 doNext2597,63670 doArg2614,63986 @@ -526,13 +522,13 @@ sys/x86-64.freeBsd.defs.l,1994 doPwd2983,73752 doCd2994,74007 doCtty3019,74623 -doInfo3056,75557 -doFile3101,76652 -doDir3154,77888 -doCmd3224,79506 -doArgv3242,79965 -doOpt3345,82511 -doVersion3359,82842 +doInfo3056,75564 +doFile3110,76822 +doDir3163,78058 +doCmd3233,79676 +doArgv3251,80135 +doOpt3354,82681 +doVersion3368,83012 ./big.l,1059 zapZeroA_A6,106 @@ -1257,9 +1253,9 @@ sys/x86-64.freeBsd.defs.l,1994 getUdpZ_FB373,9872 putUdpBZ380,10017 -sys/x86-64.freeBsd.code.l,94 -errno_A5,64 -errnoC10,158 -wifstoppedS_F21,537 -wifsignaledS_F27,688 -wtermsigS_A36,897 +sys/x86-64.linux.code.l,94 +errno_A5,67 +errnoC10,169 +wifstoppedS_F16,287 +wifsignaledS_F21,413 +wtermsigS_A28,568 diff --git a/src64/version.l b/src64/version.l @@ -1,6 +1,6 @@ -# 11jun13abu +# 23jun13abu # (c) Software Lab. Alexander Burger -(de *Version 3 1 2 12) +(de *Version 3 1 2 13) # vi:et:ts=3:sw=3