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 83142b787d6feaa59abd4eec316102bee02996a5
parent 4af5880d55557e18abc109bf09da16cd6bd8fa59
Author: Commit-Bot <unknown>
Date:   Fri, 10 Sep 2010 17:47:57 +0000

Automatic commit from picoLisp.tgz, From: Fri, 10 Sep 2010 17:47:57 GMT
Diffstat:
Mlib/tags | 100++++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/io.c | 15+++++++++------
Msrc64/db.l | 43++++++++++++++++++++++---------------------
Msrc64/io.l | 51+++++++++++++++++++++++++--------------------------
4 files changed, 106 insertions(+), 103 deletions(-)

diff --git a/lib/tags b/lib/tags @@ -29,7 +29,7 @@ adr (613 . "@src64/main.l") alarm (487 . "@src64/main.l") all (772 . "@src64/sym.l") and (1643 . "@src64/flow.l") -any (3779 . "@src64/io.l") +any (3778 . "@src64/io.l") append (1329 . "@src64/subr.l") apply (597 . "@src64/apply.l") arg (2243 . "@src64/main.l") @@ -82,26 +82,26 @@ cdddr (245 . "@src64/subr.l") cddr (79 . "@src64/subr.l") cdr (17 . "@src64/subr.l") chain (1132 . "@src64/subr.l") -char (3261 . "@src64/io.l") +char (3260 . "@src64/io.l") chop (1093 . "@src64/sym.l") circ (816 . "@src64/subr.l") clip (1786 . "@src64/subr.l") -close (4167 . "@src64/io.l") +close (4166 . "@src64/io.l") cmd (2846 . "@src64/main.l") cnt (1297 . "@src64/apply.l") co (2566 . "@src64/flow.l") -commit (1493 . "@src64/db.l") +commit (1494 . "@src64/db.l") con (725 . "@src64/subr.l") conc (781 . "@src64/subr.l") cond (1938 . "@src64/flow.l") connect (201 . "@src64/net.l") cons (747 . "@src64/subr.l") copy (1216 . "@src64/subr.l") -ctl (4107 . "@src64/io.l") +ctl (4106 . "@src64/io.l") ctty (2644 . "@src64/main.l") cut (1797 . "@src64/sym.l") date (2358 . "@src64/main.l") -dbck (2086 . "@src64/db.l") +dbck (2087 . "@src64/db.l") de (549 . "@src64/flow.l") dec (2323 . "@src64/big.l") def (473 . "@src64/flow.l") @@ -114,13 +114,13 @@ dir (2777 . "@src64/main.l") dm (561 . "@src64/flow.l") do (2158 . "@src64/flow.l") e (2932 . "@src64/flow.l") -echo (4198 . "@src64/io.l") +echo (4197 . "@src64/io.l") env (625 . "@src64/main.l") -eof (3338 . "@src64/io.l") -eol (3329 . "@src64/io.l") +eof (3337 . "@src64/io.l") +eol (3328 . "@src64/io.l") errno (1358 . "@src64/main.l") eval (208 . "@src64/flow.l") -ext (4927 . "@src64/io.l") +ext (4926 . "@src64/io.l") ext? (1034 . "@src64/sym.l") extern (900 . "@src64/sym.l") extra (1284 . "@src64/flow.l") @@ -135,13 +135,13 @@ find (1206 . "@src64/apply.l") fish (1497 . "@src64/apply.l") flg? (2419 . "@src64/subr.l") flip (1686 . "@src64/subr.l") -flush (4902 . "@src64/io.l") +flush (4901 . "@src64/io.l") fold (3343 . "@src64/sym.l") for (2247 . "@src64/flow.l") fork (3276 . "@src64/flow.l") format (2089 . "@src64/big.l") -free (2028 . "@src64/db.l") -from (3357 . "@src64/io.l") +free (2029 . "@src64/db.l") +from (3356 . "@src64/io.l") full (1066 . "@src64/subr.l") fun? (734 . "@src64/sym.l") gc (439 . "@src64/gc.l") @@ -153,14 +153,14 @@ glue (1234 . "@src64/sym.l") gt0 (2702 . "@src64/big.l") head (1807 . "@src64/subr.l") heap (542 . "@src64/main.l") -hear (3079 . "@src64/io.l") +hear (3078 . "@src64/io.l") host (184 . "@src64/net.l") -id (1024 . "@src64/db.l") +id (1025 . "@src64/db.l") idx (2037 . "@src64/sym.l") if (1824 . "@src64/flow.l") if2 (1843 . "@src64/flow.l") ifn (1884 . "@src64/flow.l") -in (4003 . "@src64/io.l") +in (4002 . "@src64/io.l") inc (2256 . "@src64/big.l") index (2611 . "@src64/subr.l") info (2681 . "@src64/main.l") @@ -168,23 +168,23 @@ intern (875 . "@src64/sym.l") ipid (3221 . "@src64/flow.l") isa (978 . "@src64/flow.l") job (1448 . "@src64/flow.l") -journal (967 . "@src64/db.l") -key (3188 . "@src64/io.l") +journal (968 . "@src64/db.l") +key (3187 . "@src64/io.l") kill (3253 . "@src64/flow.l") last (2031 . "@src64/subr.l") length (2687 . "@src64/subr.l") let (1498 . "@src64/flow.l") let? (1559 . "@src64/flow.l") -lieu (1153 . "@src64/db.l") -line (3513 . "@src64/io.l") -lines (3666 . "@src64/io.l") +lieu (1154 . "@src64/db.l") +line (3512 . "@src64/io.l") +lines (3665 . "@src64/io.l") link (1163 . "@src64/subr.l") lisp (1921 . "@src64/main.l") list (887 . "@src64/subr.l") listen (151 . "@src64/net.l") lit (183 . "@src64/flow.l") -load (3980 . "@src64/io.l") -lock (1181 . "@src64/db.l") +load (3979 . "@src64/io.l") +lock (1182 . "@src64/db.l") loop (2190 . "@src64/flow.l") low? (3215 . "@src64/sym.l") lowc (3245 . "@src64/sym.l") @@ -200,7 +200,7 @@ mapcar (871 . "@src64/apply.l") mapcon (925 . "@src64/apply.l") maplist (817 . "@src64/apply.l") maps (674 . "@src64/apply.l") -mark (1946 . "@src64/db.l") +mark (1947 . "@src64/db.l") match (3062 . "@src64/subr.l") max (2314 . "@src64/subr.l") maxi (1395 . "@src64/apply.l") @@ -233,31 +233,31 @@ offset (2651 . "@src64/subr.l") on (1583 . "@src64/sym.l") onOff (1613 . "@src64/sym.l") one (1646 . "@src64/sym.l") -open (4129 . "@src64/io.l") +open (4128 . "@src64/io.l") opid (3237 . "@src64/flow.l") opt (2967 . "@src64/main.l") or (1659 . "@src64/flow.l") -out (4023 . "@src64/io.l") +out (4022 . "@src64/io.l") pack (1144 . "@src64/sym.l") pair (2381 . "@src64/subr.l") pass (638 . "@src64/apply.l") pat? (720 . "@src64/sym.l") path (1200 . "@src64/io.l") -peek (3245 . "@src64/io.l") +peek (3244 . "@src64/io.l") pick (1253 . "@src64/apply.l") pid (157 . "@src64/flow.l") -pipe (4044 . "@src64/io.l") -poll (3141 . "@src64/io.l") -pool (647 . "@src64/db.l") +pipe (4043 . "@src64/io.l") +poll (3140 . "@src64/io.l") +pool (648 . "@src64/db.l") pop (1773 . "@src64/sym.l") port (5 . "@src64/net.l") -pr (5018 . "@src64/io.l") +pr (5017 . "@src64/io.l") pre? (1411 . "@src64/sym.l") -prin (4826 . "@src64/io.l") -prinl (4840 . "@src64/io.l") -print (4866 . "@src64/io.l") -println (4897 . "@src64/io.l") -printsp (4882 . "@src64/io.l") +prin (4825 . "@src64/io.l") +prinl (4839 . "@src64/io.l") +print (4865 . "@src64/io.l") +println (4896 . "@src64/io.l") +printsp (4881 . "@src64/io.l") prog (1779 . "@src64/flow.l") prog1 (1787 . "@src64/flow.l") prog2 (1804 . "@src64/flow.l") @@ -276,50 +276,50 @@ rand (2959 . "@src64/big.l") range (988 . "@src64/subr.l") rank (2970 . "@src64/subr.l") raw (465 . "@src64/main.l") -rd (4944 . "@src64/io.l") +rd (4943 . "@src64/io.l") read (2532 . "@src64/io.l") replace (1490 . "@src64/subr.l") rest (2272 . "@src64/main.l") reverse (1665 . "@src64/subr.l") -rewind (4910 . "@src64/io.l") -rollback (1879 . "@src64/db.l") +rewind (4909 . "@src64/io.l") +rollback (1880 . "@src64/db.l") rot (848 . "@src64/subr.l") -rpc (5051 . "@src64/io.l") +rpc (5050 . "@src64/io.l") run (331 . "@src64/flow.l") sect (2515 . "@src64/subr.l") seed (2944 . "@src64/big.l") seek (1159 . "@src64/apply.l") send (1150 . "@src64/flow.l") -seq (1080 . "@src64/db.l") +seq (1081 . "@src64/db.l") set (1482 . "@src64/sym.l") setq (1515 . "@src64/sym.l") sigio (503 . "@src64/main.l") size (2752 . "@src64/subr.l") -skip (3315 . "@src64/io.l") +skip (3314 . "@src64/io.l") sort (3869 . "@src64/subr.l") sp? (711 . "@src64/sym.l") -space (4844 . "@src64/io.l") +space (4843 . "@src64/io.l") split (1579 . "@src64/subr.l") stack (571 . "@src64/main.l") state (2028 . "@src64/flow.l") stem (1976 . "@src64/subr.l") -str (3833 . "@src64/io.l") +str (3832 . "@src64/io.l") str? (1013 . "@src64/sym.l") strip (1563 . "@src64/subr.l") sub? (1444 . "@src64/sym.l") sum (1344 . "@src64/apply.l") super (1237 . "@src64/flow.l") -sym (3819 . "@src64/io.l") +sym (3818 . "@src64/io.l") sym? (2408 . "@src64/subr.l") -sync (3042 . "@src64/io.l") +sync (3040 . "@src64/io.l") sys (3073 . "@src64/flow.l") t (1770 . "@src64/flow.l") tail (1898 . "@src64/subr.l") -tell (3111 . "@src64/io.l") +tell (3110 . "@src64/io.l") text (1272 . "@src64/sym.l") throw (2510 . "@src64/flow.l") tick (3189 . "@src64/flow.l") -till (3424 . "@src64/io.l") +till (3423 . "@src64/io.l") time (2491 . "@src64/main.l") touch (1049 . "@src64/sym.l") trim (1746 . "@src64/subr.l") @@ -336,12 +336,12 @@ use (1592 . "@src64/flow.l") usec (2596 . "@src64/main.l") val (1463 . "@src64/sym.l") version (2981 . "@src64/main.l") -wait (3004 . "@src64/io.l") +wait (3002 . "@src64/io.l") when (1903 . "@src64/flow.l") while (2080 . "@src64/flow.l") wipe (3090 . "@src64/sym.l") with (1349 . "@src64/flow.l") -wr (5035 . "@src64/io.l") +wr (5034 . "@src64/io.l") xchg (1538 . "@src64/sym.l") xor (1720 . "@src64/flow.l") x| (2871 . "@src64/big.l") diff --git a/src/io.c b/src/io.c @@ -1,4 +1,4 @@ -/* 02sep10abu +/* 10sep10abu * (c) Software Lab. Alexander Burger */ @@ -1494,14 +1494,17 @@ any doSync(any ex) { return Nil; p = (byte*)&Slot; cnt = sizeof(int); - do { - if ((n = write(Mic, p, cnt)) >= 0) - p += n, cnt -= n; + for (;;) { + if ((n = write(Mic, p, cnt)) >= 0) { + if ((cnt -= n) == 0) + break; + p += n; + } else if (errno != EINTR) writeErr("sync"); if (*Signal) sighandler(ex); - } while (cnt); + } Sync = NO; do waitFd(ex, -1, -1); @@ -3223,7 +3226,7 @@ void db(any ex, any s, int a) { tail(s) = ext(x); } else if (*p == At) - *p = At2; // loaded -> dirty + *p = At2; // loaded -> dirty else { // NIL & 1 | 2 adr n; cell c[1]; diff --git a/src64/db.l b/src64/db.l @@ -1,4 +1,4 @@ -# 07sep10abu +# 09sep10abu # (c) Software Lab. Alexander Burger # 6 bytes in little endian format @@ -405,27 +405,28 @@ cmp A C # OK? jne dbWrErr # No null (DbJnl) # Journal? - jz Ret # No - cmp A ((DbFile) III) # Size (in A and C) equal to current file's block size? - if eq # Yes - ld A BLKSIZE # Use block unit size instead + if nz # Yes + cmp A ((DbFile) III) # Size (in A and C) equal to current file's block size? + if eq # Yes + ld A BLKSIZE # Use block unit size instead + end + cc putc_unlocked(A (DbJnl)) # Write size + sub S (+ BLK 2) # <S> Buffer + ld A ((DbFile) I) # Get file number + ld (S) B # Store low byte + shr A 8 + ld (S 1) B # and high byte + ld A E # Get position + shr A ((DbFile) II) # Un-shift for current file + call setAdrAS # Set block address in buffer + cc fwrite(S (+ BLK 2) 1 (DbJnl)) # Write file number and address + cmp A 1 # OK? + jne wrJnlErr # No + cc fwrite(Z C 1 (DbJnl)) # Write C bytes from buffer Z + cmp A 1 # OK? + jne wrJnlErr # No + add S (+ BLK 2) # Drop buffer end - cc putc_unlocked(A (DbJnl)) # Write size - sub S (+ BLK 2) # <S> Buffer - ld A ((DbFile) I) # Get file number - ld (S) B # Store low byte - shr A 8 - ld (S 1) B # and high byte - ld A E # Get position - shr A ((DbFile) II) # Un-shift for current file - call setAdrAS # Set block address in buffer - cc fwrite(S (+ BLK 2) 1 (DbJnl)) # Write file number and address - cmp A 1 # OK? - jne wrJnlErr # No - cc fwrite(Z C 1 (DbJnl)) # Write C bytes from buffer Z - cmp A 1 # OK? - jne wrJnlErr # No - add S (+ BLK 2) # Drop buffer ret (code 'logBlock) diff --git a/src64/io.l b/src64/io.l @@ -1,4 +1,4 @@ -# 07sep10abu +# 10sep10abu # (c) Software Lab. Alexander Burger # Close file descriptor @@ -2587,18 +2587,18 @@ cmp (C I) (C II) # Data in buffer ('ix' < 'cnt')? ret # Yes: Return 'c' -(code 'rdSetRdyASL_F 0) # Z +(code 'rdSetRdyAL_F 0) # Z ld C A shl C 3 # Vector index cmp C (InFDs) # 'fd' >= 'InFDs'? - jge rdSetASL_F # Yes + jge rdSetAL_F # Yes add C (InFiles) # Get vector ld C (C) # Slot? null C # Any? - jz rdSetASL_F # No + jz rdSetAL_F # No cmp (C I) (C II) # Data in buffer ('ix' < 'cnt')? if z # No - call rdSetASL_F + call rdSetAL_F if nz # Yes call slowNbC_FA # Try non-blocking read jge retnz @@ -2607,7 +2607,7 @@ end ret -(code 'rdSetASL_F 0) # Z +(code 'rdSetAL_F 0) # Z lea Z (L -V) # Beyond last 'poll' structure do cmp Z (L -V) # More structures? @@ -2619,7 +2619,7 @@ test A (| POLLIN POLLHUP) # Ready? ret # Return 'nz' -(code 'wrSetASL_F 0) # Z +(code 'wrSetAL_F 0) # Z lea Z (L -V) # Beyond last 'poll' structure do cmp Z (L -V) # More structures? @@ -2784,7 +2784,7 @@ if nz # Yes push Z # Outer loop count ld A (Y I) # Get child's 'hear' fd - call rdSetASL_F # Ready? + call rdSetAL_F # Ready? if nz # Yes ld C (Y I) # Get 'hear' fd again ld E 2 # Size of count @@ -2793,15 +2793,14 @@ if ge # Yes if z call clsChildY # Close child - pop Z - continue T + jmp 20 # Continue end - sub S PIPE_BUF # <S II> Pipe buffer + sub S PIPE_BUF # <S I> Pipe buffer push Y # <S> Outer child index ld C (Y I) # Get 'hear' fd again ld2 (Buf) # Get size ld E A - lea X (S II) # Buffer pointer + lea X (S I) # Buffer pointer call rdBytesCEX_F # Read data? if nz # Yes set (L -IV) 1 # Still got data from pipe @@ -2814,7 +2813,7 @@ if nz # Yes ld2 (Buf) # Get size ld C A - lea X (S II) # and data + lea X (S I) # and data call wrChildCXY # Write to child end end @@ -2825,15 +2824,14 @@ call clsChildY # Close child pop Y add S PIPE_BUF # Drop 'tell' buffer - pop Z - continue T + jmp 20 # Continue end pop Y add S PIPE_BUF # Drop 'tell' buffer end end ld A (Y II) # Get child's 'tell' fd - call wrSetASL_F # Ready? + call wrSetAL_F # Ready? if nz # Yes ld C (Y II) # Get 'tell' fd again ld X (Y V) # Get buffer pointer @@ -2867,7 +2865,7 @@ call clsChildY # Close child end end - pop Z +20 pop Z end add Y VI # Increment by sizeof(child) loop @@ -2876,7 +2874,7 @@ ld A (Spkr) # Speaker open? null A if nz # Yes - call rdSetASL_F # Ready? + call rdSetAL_F # Ready? if nz # Yes ld C (Spkr) # Get fd ld E I # Size of slot @@ -2900,7 +2898,7 @@ if nz # Yes cmp A (L -I) # Different from argument-fd? if ne # Yes - call rdSetRdyASL_F # Ready? + call rdSetRdyAL_F # Ready? if nz # Yes call rdHear_FE # Read expression? if nc # Yes @@ -2935,7 +2933,7 @@ atom A # End of tasklist? while z # No cmp E (A) # Member? - jeq 20 # Yes: Skip + jeq 30 # Yes: Skip ld A (A CDR) loop ld A (E) # Get fd or timeout value @@ -2959,7 +2957,7 @@ else cmp A (L -I) # Different from argument-fd? if ne # Yes - call rdSetRdyASL_F # Ready? + call rdSetRdyAL_F # Ready? if nz # Yes ld (At) (E) # Set to fd ld Z (E CDR) # Run body @@ -2967,7 +2965,7 @@ end end end -20 ld Y (Y CDR) +30 ld Y (Y CDR) loop pop X # Restore context null (Signal) # Signal? @@ -2988,7 +2986,7 @@ ld A (L -I) # File descriptor null A # Positive? while ns # Yes - call rdSetRdyASL_F # Ready? + call rdSetRdyAL_F # Ready? while z # No lea S (L -V) # Drop 'poll' structures loop @@ -3040,9 +3038,10 @@ # (sync) -> flg (code 'doSync 2) - ld A (Mic) # 'mic' channel - or A (Hear) # or 'hear' channel? - jz retNil # No + null (Mic) # No 'mic' channel? + jz retNil # Yes + null (Hear) # No 'hear' channel? + jz retNil # Yes push X ld X E ld E Slot # Buffer pointer