home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume6 / xlisp1.6 / part1 next >
SHell self-extracting ARchive  |  1986-11-30  |  55.3 KB

open in: MacOS 8.1     |     Win98     |     DOS

browse contents    |     view JSON data     |     view as text


This file was processed as: SHell self-extracting ARchive (archive/shar).

ConfidenceProgramDetectionMatch TypeSupport
100% dexvert Newsgroup Content (archive/news) magic Supported
100% dexvert SHell self-extracting ARchive (archive/shar) magic Supported
100% dexvert Internet Message Format (text/imf) magic Supported
1% dexvert Text File (text/txt) fallback Supported
100% file news or mail text default
99% file C source text default
98% file C source, ASCII text default
100% checkBytes Printable ASCII default
100% perlTextCheck Likely Text (Perl) default
100% siegfried fmt/329 Shell Archive Format default
100% detectItEasy Format: plain text[LF] default (weak)
100% xdgMime message/rfc822 default



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 53 75 62 6a 65 63 74 3a | 20 20 76 30 36 69 31 30 |Subject:| v06i10|
|00000010| 37 3a 20 20 58 6c 69 73 | 70 20 76 65 72 73 69 6f |7: Xlis|p versio|
|00000020| 6e 20 31 2e 36 20 28 78 | 6c 69 73 70 31 2e 36 29 |n 1.6 (x|lisp1.6)|
|00000030| 2c 20 50 61 72 74 30 31 | 2f 30 36 0a 4e 65 77 73 |, Part01|/06.News|
|00000040| 67 72 6f 75 70 73 3a 20 | 6d 6f 64 2e 73 6f 75 72 |groups: |mod.sour|
|00000050| 63 65 73 0a 41 70 70 72 | 6f 76 65 64 3a 20 72 73 |ces.Appr|oved: rs|
|00000060| 40 6d 69 72 72 6f 72 2e | 55 55 43 50 0a 0a 53 75 |@mirror.|UUCP..Su|
|00000070| 62 6d 69 74 74 65 64 20 | 62 79 3a 20 73 65 69 73 |bmitted |by: seis|
|00000080| 6d 6f 21 75 74 61 68 2d | 63 73 21 62 2d 64 61 76 |mo!utah-|cs!b-dav|
|00000090| 69 73 20 28 42 72 61 64 | 20 44 61 76 69 73 29 0a |is (Brad| Davis).|
|000000a0| 4d 6f 64 2e 73 6f 75 72 | 63 65 73 3a 20 56 6f 6c |Mod.sour|ces: Vol|
|000000b0| 75 6d 65 20 36 2c 20 49 | 73 73 75 65 20 31 30 37 |ume 6, I|ssue 107|
|000000c0| 0a 41 72 63 68 69 76 65 | 2d 6e 61 6d 65 3a 20 78 |.Archive|-name: x|
|000000d0| 6c 69 73 70 31 2e 36 2f | 50 61 72 74 30 31 0a 0a |lisp1.6/|Part01..|
|000000e0| 5b 20 20 54 68 69 73 20 | 75 6e 70 61 63 6b 73 2c |[ This |unpacks,|
|000000f0| 20 63 6f 6d 70 69 6c 65 | 73 2c 20 61 6e 64 20 72 | compile|s, and r|
|00000100| 75 6e 73 20 61 20 63 6f | 75 70 6c 65 20 6f 66 20 |uns a co|uple of |
|00000110| 74 68 65 20 64 65 6d 6f | 20 70 72 6f 67 72 61 6d |the demo| program|
|00000120| 73 20 6f 6e 0a 20 20 20 | 6d 79 20 34 2e 32 42 53 |s on. |my 4.2BS|
|00000130| 44 20 56 61 78 37 35 30 | 2e 20 20 49 20 68 61 76 |D Vax750|. I hav|
|00000140| 65 20 6e 6f 74 20 74 72 | 69 65 64 20 69 74 20 6f |e not tr|ied it o|
|00000150| 6e 20 61 20 50 43 2e 20 | 20 2d 2d 72 24 20 20 5d |n a PC. | --r$ ]|
|00000160| 0a 0a 0a 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |...-----|--------|
|00000170| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|00000180| 2d 2d 2d 20 43 75 74 20 | 48 65 72 65 20 2d 2d 2d |--- Cut |Here ---|
|00000190| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000001a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 0a 23 21 |--------|-----.#!|
|000001b0| 20 2f 62 69 6e 2f 73 68 | 0a 23 20 54 68 69 73 20 | /bin/sh|.# This |
|000001c0| 69 73 20 61 20 73 68 65 | 6c 6c 20 61 72 63 68 69 |is a she|ll archi|
|000001d0| 76 65 2c 20 6d 65 61 6e | 69 6e 67 3a 0a 23 20 31 |ve, mean|ing:.# 1|
|000001e0| 2e 20 52 65 6d 6f 76 65 | 20 65 76 65 72 79 74 68 |. Remove| everyth|
|000001f0| 69 6e 67 20 61 62 6f 76 | 65 20 74 68 65 20 23 21 |ing abov|e the #!|
|00000200| 20 2f 62 69 6e 2f 73 68 | 20 6c 69 6e 65 2e 0a 23 | /bin/sh| line..#|
|00000210| 20 32 2e 20 53 61 76 65 | 20 74 68 65 20 72 65 73 | 2. Save| the res|
|00000220| 75 6c 74 69 6e 67 20 74 | 65 78 74 20 69 6e 20 61 |ulting t|ext in a|
|00000230| 20 66 69 6c 65 2e 0a 23 | 20 33 2e 20 45 78 65 63 | file..#| 3. Exec|
|00000240| 75 74 65 20 74 68 65 20 | 66 69 6c 65 20 77 69 74 |ute the |file wit|
|00000250| 68 20 2f 62 69 6e 2f 73 | 68 20 28 6e 6f 74 20 63 |h /bin/s|h (not c|
|00000260| 73 68 29 20 74 6f 20 63 | 72 65 61 74 65 20 74 68 |sh) to c|reate th|
|00000270| 65 20 66 69 6c 65 73 3a | 0a 23 09 78 6c 62 66 75 |e files:|.#.xlbfu|
|00000280| 6e 2e 63 0a 23 09 78 6c | 63 6f 6e 74 2e 63 0a 23 |n.c.#.xl|cont.c.#|
|00000290| 09 78 6c 64 62 75 67 2e | 63 0a 23 09 78 6c 64 6d |.xldbug.|c.#.xldm|
|000002a0| 65 6d 2e 63 0a 23 09 78 | 6c 65 76 61 6c 2e 63 0a |em.c.#.x|leval.c.|
|000002b0| 23 20 54 68 69 73 20 61 | 72 63 68 69 76 65 20 63 |# This a|rchive c|
|000002c0| 72 65 61 74 65 64 3a 20 | 4d 6f 6e 20 4a 75 6c 20 |reated: |Mon Jul |
|000002d0| 31 34 20 31 30 3a 32 31 | 3a 33 31 20 31 39 38 36 |14 10:21|:31 1986|
|000002e0| 0a 65 78 70 6f 72 74 20 | 50 41 54 48 3b 20 50 41 |.export |PATH; PA|
|000002f0| 54 48 3d 2f 62 69 6e 3a | 24 50 41 54 48 0a 69 66 |TH=/bin:|$PATH.if|
|00000300| 20 74 65 73 74 20 2d 66 | 20 27 78 6c 62 66 75 6e | test -f| 'xlbfun|
|00000310| 2e 63 27 0a 74 68 65 6e | 0a 09 65 63 68 6f 20 73 |.c'.then|..echo s|
|00000320| 68 61 72 3a 20 77 69 6c | 6c 20 6e 6f 74 20 6f 76 |har: wil|l not ov|
|00000330| 65 72 2d 77 72 69 74 65 | 20 65 78 69 73 74 69 6e |er-write| existin|
|00000340| 67 20 66 69 6c 65 20 22 | 27 78 6c 62 66 75 6e 2e |g file "|'xlbfun.|
|00000350| 63 27 22 0a 65 6c 73 65 | 0a 63 61 74 20 3c 3c 20 |c'".else|.cat << |
|00000360| 5c 53 48 41 52 5f 45 4f | 46 20 3e 20 27 78 6c 62 |\SHAR_EO|F > 'xlb|
|00000370| 66 75 6e 2e 63 27 0a 2f | 2a 20 78 6c 62 66 75 6e |fun.c'./|* xlbfun|
|00000380| 2e 63 20 2d 20 78 6c 69 | 73 70 20 62 61 73 69 63 |.c - xli|sp basic|
|00000390| 20 62 75 69 6c 74 2d 69 | 6e 20 66 75 6e 63 74 69 | built-i|n functi|
|000003a0| 6f 6e 73 20 2a 2f 0a 2f | 2a 09 43 6f 70 79 72 69 |ons */./|*.Copyri|
|000003b0| 67 68 74 20 28 63 29 20 | 31 39 38 35 2c 20 62 79 |ght (c) |1985, by|
|000003c0| 20 44 61 76 69 64 20 4d | 69 63 68 61 65 6c 20 42 | David M|ichael B|
|000003d0| 65 74 7a 0a 09 41 6c 6c | 20 52 69 67 68 74 73 20 |etz..All| Rights |
|000003e0| 52 65 73 65 72 76 65 64 | 0a 09 50 65 72 6d 69 73 |Reserved|..Permis|
|000003f0| 73 69 6f 6e 20 69 73 20 | 67 72 61 6e 74 65 64 20 |sion is |granted |
|00000400| 66 6f 72 20 75 6e 72 65 | 73 74 72 69 63 74 65 64 |for unre|stricted|
|00000410| 20 6e 6f 6e 2d 63 6f 6d | 6d 65 72 63 69 61 6c 20 | non-com|mercial |
|00000420| 75 73 65 09 2a 2f 0a 0a | 23 69 6e 63 6c 75 64 65 |use.*/..|#include|
|00000430| 20 22 78 6c 69 73 70 2e | 68 22 0a 0a 2f 2a 20 65 | "xlisp.|h"../* e|
|00000440| 78 74 65 72 6e 61 6c 20 | 76 61 72 69 61 62 6c 65 |xternal |variable|
|00000450| 73 20 2a 2f 0a 65 78 74 | 65 72 6e 20 4e 4f 44 45 |s */.ext|ern NODE|
|00000460| 20 2a 2a 2a 78 6c 73 74 | 61 63 6b 2c 2a 78 6c 65 | ***xlst|ack,*xle|
|00000470| 6e 76 3b 0a 65 78 74 65 | 72 6e 20 4e 4f 44 45 20 |nv;.exte|rn NODE |
|00000480| 2a 73 5f 63 61 72 2c 2a | 73 5f 63 64 72 2c 2a 73 |*s_car,*|s_cdr,*s|
|00000490| 5f 6e 74 68 2c 2a 73 5f | 67 65 74 2c 2a 73 5f 73 |_nth,*s_|get,*s_s|
|000004a0| 76 61 6c 75 65 2c 2a 73 | 5f 73 70 6c 69 73 74 2c |value,*s|_splist,|
|000004b0| 2a 73 5f 61 72 65 66 3b | 0a 65 78 74 65 72 6e 20 |*s_aref;|.extern |
|000004c0| 4e 4f 44 45 20 2a 73 5f | 6c 61 6d 62 64 61 2c 2a |NODE *s_|lambda,*|
|000004d0| 73 5f 6d 61 63 72 6f 3b | 0a 65 78 74 65 72 6e 20 |s_macro;|.extern |
|000004e0| 4e 4f 44 45 20 2a 73 5f | 63 6f 6d 6d 61 2c 2a 73 |NODE *s_|comma,*s|
|000004f0| 5f 63 6f 6d 61 74 3b 0a | 65 78 74 65 72 6e 20 4e |_comat;.|extern N|
|00000500| 4f 44 45 20 2a 73 5f 75 | 6e 62 6f 75 6e 64 3b 0a |ODE *s_u|nbound;.|
|00000510| 65 78 74 65 72 6e 20 63 | 68 61 72 20 67 73 70 72 |extern c|har gspr|
|00000520| 65 66 69 78 5b 5d 3b 0a | 65 78 74 65 72 6e 20 69 |efix[];.|extern i|
|00000530| 6e 74 20 67 73 6e 75 6d | 62 65 72 3b 0a 0a 2f 2a |nt gsnum|ber;../*|
|00000540| 20 66 6f 72 77 61 72 64 | 20 64 65 63 6c 61 72 61 | forward| declara|
|00000550| 74 69 6f 6e 73 20 2a 2f | 0a 46 4f 52 57 41 52 44 |tions */|.FORWARD|
|00000560| 20 4e 4f 44 45 20 2a 62 | 71 75 6f 74 65 31 28 29 | NODE *b|quote1()|
|00000570| 3b 0a 46 4f 52 57 41 52 | 44 20 4e 4f 44 45 20 2a |;.FORWAR|D NODE *|
|00000580| 64 65 66 75 6e 28 29 3b | 0a 46 4f 52 57 41 52 44 |defun();|.FORWARD|
|00000590| 20 4e 4f 44 45 20 2a 6d | 61 6b 65 73 79 6d 62 6f | NODE *m|akesymbo|
|000005a0| 6c 28 29 3b 0a 0a 2f 2a | 20 78 65 76 61 6c 20 2d |l();../*| xeval -|
|000005b0| 20 74 68 65 20 62 75 69 | 6c 74 2d 69 6e 20 66 75 | the bui|lt-in fu|
|000005c0| 6e 63 74 69 6f 6e 20 27 | 65 76 61 6c 27 20 2a 2f |nction '|eval' */|
|000005d0| 0a 4e 4f 44 45 20 2a 78 | 65 76 61 6c 28 61 72 67 |.NODE *x|eval(arg|
|000005e0| 73 29 0a 20 20 4e 4f 44 | 45 20 2a 61 72 67 73 3b |s). NOD|E *args;|
|000005f0| 0a 7b 0a 20 20 20 20 4e | 4f 44 45 20 2a 2a 2a 6f |.{. N|ODE ***o|
|00000600| 6c 64 73 74 6b 2c 2a 65 | 78 70 72 2c 2a 76 61 6c |ldstk,*e|xpr,*val|
|00000610| 3b 0a 0a 20 20 20 20 2f | 2a 20 63 72 65 61 74 65 |;.. /|* create|
|00000620| 20 61 20 6e 65 77 20 73 | 74 61 63 6b 20 66 72 61 | a new s|tack fra|
|00000630| 6d 65 20 2a 2f 0a 20 20 | 20 20 6f 6c 64 73 74 6b |me */. | oldstk|
|00000640| 20 3d 20 78 6c 73 61 76 | 65 28 26 65 78 70 72 2c | = xlsav|e(&expr,|
|00000650| 28 4e 4f 44 45 20 2a 2a | 29 4e 55 4c 4c 29 3b 0a |(NODE **|)NULL);.|
|00000660| 0a 20 20 20 20 2f 2a 20 | 67 65 74 20 74 68 65 20 |. /* |get the |
|00000670| 65 78 70 72 65 73 73 69 | 6f 6e 20 74 6f 20 65 76 |expressi|on to ev|
|00000680| 61 6c 75 61 74 65 20 2a | 2f 0a 20 20 20 20 65 78 |aluate *|/. ex|
|00000690| 70 72 20 3d 20 78 6c 61 | 72 67 28 26 61 72 67 73 |pr = xla|rg(&args|
|000006a0| 29 3b 0a 20 20 20 20 78 | 6c 6c 61 73 74 61 72 67 |);. x|llastarg|
|000006b0| 28 61 72 67 73 29 3b 0a | 0a 20 20 20 20 2f 2a 20 |(args);.|. /* |
|000006c0| 65 76 61 6c 75 61 74 65 | 20 74 68 65 20 65 78 70 |evaluate| the exp|
|000006d0| 72 65 73 73 69 6f 6e 20 | 2a 2f 0a 20 20 20 20 76 |ression |*/. v|
|000006e0| 61 6c 20 3d 20 78 6c 65 | 76 61 6c 28 65 78 70 72 |al = xle|val(expr|
|000006f0| 29 3b 0a 0a 20 20 20 20 | 2f 2a 20 72 65 73 74 6f |);.. |/* resto|
|00000700| 72 65 20 74 68 65 20 70 | 72 65 76 69 6f 75 73 20 |re the p|revious |
|00000710| 73 74 61 63 6b 20 66 72 | 61 6d 65 20 2a 2f 0a 20 |stack fr|ame */. |
|00000720| 20 20 20 78 6c 73 74 61 | 63 6b 20 3d 20 6f 6c 64 | xlsta|ck = old|
|00000730| 73 74 6b 3b 0a 0a 20 20 | 20 20 2f 2a 20 72 65 74 |stk;.. | /* ret|
|00000740| 75 72 6e 20 74 68 65 20 | 65 78 70 72 65 73 73 69 |urn the |expressi|
|00000750| 6f 6e 20 65 76 61 6c 75 | 61 74 65 64 20 2a 2f 0a |on evalu|ated */.|
|00000760| 20 20 20 20 72 65 74 75 | 72 6e 20 28 76 61 6c 29 | retu|rn (val)|
|00000770| 3b 0a 7d 0a 0a 2f 2a 20 | 78 61 70 70 6c 79 20 2d |;.}../* |xapply -|
|00000780| 20 74 68 65 20 62 75 69 | 6c 74 2d 69 6e 20 66 75 | the bui|lt-in fu|
|00000790| 6e 63 74 69 6f 6e 20 27 | 61 70 70 6c 79 27 20 2a |nction '|apply' *|
|000007a0| 2f 0a 4e 4f 44 45 20 2a | 78 61 70 70 6c 79 28 61 |/.NODE *|xapply(a|
|000007b0| 72 67 73 29 0a 20 20 4e | 4f 44 45 20 2a 61 72 67 |rgs). N|ODE *arg|
|000007c0| 73 3b 0a 7b 0a 20 20 20 | 20 4e 4f 44 45 20 2a 2a |s;.{. | NODE **|
|000007d0| 2a 6f 6c 64 73 74 6b 2c | 2a 66 75 6e 2c 2a 61 72 |*oldstk,|*fun,*ar|
|000007e0| 67 6c 69 73 74 2c 2a 76 | 61 6c 3b 0a 0a 20 20 20 |glist,*v|al;.. |
|000007f0| 20 2f 2a 20 63 72 65 61 | 74 65 20 61 20 6e 65 77 | /* crea|te a new|
|00000800| 20 73 74 61 63 6b 20 66 | 72 61 6d 65 20 2a 2f 0a | stack f|rame */.|
|00000810| 20 20 20 20 6f 6c 64 73 | 74 6b 20 3d 20 78 6c 73 | olds|tk = xls|
|00000820| 61 76 65 28 26 66 75 6e | 2c 26 61 72 67 6c 69 73 |ave(&fun|,&arglis|
|00000830| 74 2c 28 4e 4f 44 45 20 | 2a 2a 29 4e 55 4c 4c 29 |t,(NODE |**)NULL)|
|00000840| 3b 0a 0a 20 20 20 20 2f | 2a 20 67 65 74 20 74 68 |;.. /|* get th|
|00000850| 65 20 66 75 6e 63 74 69 | 6f 6e 20 61 6e 64 20 61 |e functi|on and a|
|00000860| 72 67 75 6d 65 6e 74 20 | 6c 69 73 74 20 2a 2f 0a |rgument |list */.|
|00000870| 20 20 20 20 66 75 6e 20 | 3d 20 78 6c 61 72 67 28 | fun |= xlarg(|
|00000880| 26 61 72 67 73 29 3b 0a | 20 20 20 20 61 72 67 6c |&args);.| argl|
|00000890| 69 73 74 20 3d 20 78 6c | 6d 61 74 63 68 28 4c 49 |ist = xl|match(LI|
|000008a0| 53 54 2c 26 61 72 67 73 | 29 3b 0a 20 20 20 20 78 |ST,&args|);. x|
|000008b0| 6c 6c 61 73 74 61 72 67 | 28 61 72 67 73 29 3b 0a |llastarg|(args);.|
|000008c0| 0a 20 20 20 20 2f 2a 20 | 69 66 20 74 68 65 20 66 |. /* |if the f|
|000008d0| 75 6e 63 74 69 6f 6e 20 | 69 73 20 61 20 73 79 6d |unction |is a sym|
|000008e0| 62 6f 6c 2c 20 67 65 74 | 20 69 74 73 20 76 61 6c |bol, get| its val|
|000008f0| 75 65 20 2a 2f 0a 20 20 | 20 20 69 66 20 28 73 79 |ue */. | if (sy|
|00000900| 6d 62 6f 6c 70 28 66 75 | 6e 29 29 0a 09 66 75 6e |mbolp(fu|n))..fun|
|00000910| 20 3d 20 78 6c 65 76 61 | 6c 28 66 75 6e 29 3b 0a | = xleva|l(fun);.|
|00000920| 0a 20 20 20 20 2f 2a 20 | 61 70 70 6c 79 20 74 68 |. /* |apply th|
|00000930| 65 20 66 75 6e 63 74 69 | 6f 6e 20 74 6f 20 74 68 |e functi|on to th|
|00000940| 65 20 61 72 67 75 6d 65 | 6e 74 73 20 2a 2f 0a 20 |e argume|nts */. |
|00000950| 20 20 20 76 61 6c 20 3d | 20 78 6c 61 70 70 6c 79 | val =| xlapply|
|00000960| 28 66 75 6e 2c 61 72 67 | 6c 69 73 74 29 3b 0a 0a |(fun,arg|list);..|
|00000970| 20 20 20 20 2f 2a 20 72 | 65 73 74 6f 72 65 20 74 | /* r|estore t|
|00000980| 68 65 20 70 72 65 76 69 | 6f 75 73 20 73 74 61 63 |he previ|ous stac|
|00000990| 6b 20 66 72 61 6d 65 20 | 2a 2f 0a 20 20 20 20 78 |k frame |*/. x|
|000009a0| 6c 73 74 61 63 6b 20 3d | 20 6f 6c 64 73 74 6b 3b |lstack =| oldstk;|
|000009b0| 0a 0a 20 20 20 20 2f 2a | 20 72 65 74 75 72 6e 20 |.. /*| return |
|000009c0| 74 68 65 20 65 78 70 72 | 65 73 73 69 6f 6e 20 65 |the expr|ession e|
|000009d0| 76 61 6c 75 61 74 65 64 | 20 2a 2f 0a 20 20 20 20 |valuated| */. |
|000009e0| 72 65 74 75 72 6e 20 28 | 76 61 6c 29 3b 0a 7d 0a |return (|val);.}.|
|000009f0| 0a 2f 2a 20 78 66 75 6e | 63 61 6c 6c 20 2d 20 74 |./* xfun|call - t|
|00000a00| 68 65 20 62 75 69 6c 74 | 2d 69 6e 20 66 75 6e 63 |he built|-in func|
|00000a10| 74 69 6f 6e 20 27 66 75 | 6e 63 61 6c 6c 27 20 2a |tion 'fu|ncall' *|
|00000a20| 2f 0a 4e 4f 44 45 20 2a | 78 66 75 6e 63 61 6c 6c |/.NODE *|xfuncall|
|00000a30| 28 61 72 67 73 29 0a 20 | 20 4e 4f 44 45 20 2a 61 |(args). | NODE *a|
|00000a40| 72 67 73 3b 0a 7b 0a 20 | 20 20 20 4e 4f 44 45 20 |rgs;.{. | NODE |
|00000a50| 2a 2a 2a 6f 6c 64 73 74 | 6b 2c 2a 66 75 6e 2c 2a |***oldst|k,*fun,*|
|00000a60| 61 72 67 6c 69 73 74 2c | 2a 76 61 6c 3b 0a 0a 20 |arglist,|*val;.. |
|00000a70| 20 20 20 2f 2a 20 63 72 | 65 61 74 65 20 61 20 6e | /* cr|eate a n|
|00000a80| 65 77 20 73 74 61 63 6b | 20 66 72 61 6d 65 20 2a |ew stack| frame *|
|00000a90| 2f 0a 20 20 20 20 6f 6c | 64 73 74 6b 20 3d 20 78 |/. ol|dstk = x|
|00000aa0| 6c 73 61 76 65 28 26 66 | 75 6e 2c 26 61 72 67 6c |lsave(&f|un,&argl|
|00000ab0| 69 73 74 2c 28 4e 4f 44 | 45 20 2a 2a 29 4e 55 4c |ist,(NOD|E **)NUL|
|00000ac0| 4c 29 3b 0a 0a 20 20 20 | 20 2f 2a 20 67 65 74 20 |L);.. | /* get |
|00000ad0| 74 68 65 20 66 75 6e 63 | 74 69 6f 6e 20 61 6e 64 |the func|tion and|
|00000ae0| 20 61 72 67 75 6d 65 6e | 74 20 6c 69 73 74 20 2a | argumen|t list *|
|00000af0| 2f 0a 20 20 20 20 66 75 | 6e 20 3d 20 78 6c 61 72 |/. fu|n = xlar|
|00000b00| 67 28 26 61 72 67 73 29 | 3b 0a 20 20 20 20 61 72 |g(&args)|;. ar|
|00000b10| 67 6c 69 73 74 20 3d 20 | 61 72 67 73 3b 0a 0a 20 |glist = |args;.. |
|00000b20| 20 20 20 2f 2a 20 69 66 | 20 74 68 65 20 66 75 6e | /* if| the fun|
|00000b30| 63 74 69 6f 6e 20 69 73 | 20 61 20 73 79 6d 62 6f |ction is| a symbo|
|00000b40| 6c 2c 20 67 65 74 20 69 | 74 73 20 76 61 6c 75 65 |l, get i|ts value|
|00000b50| 20 2a 2f 0a 20 20 20 20 | 69 66 20 28 73 79 6d 62 | */. |if (symb|
|00000b60| 6f 6c 70 28 66 75 6e 29 | 29 0a 09 66 75 6e 20 3d |olp(fun)|)..fun =|
|00000b70| 20 78 6c 65 76 61 6c 28 | 66 75 6e 29 3b 0a 0a 20 | xleval(|fun);.. |
|00000b80| 20 20 20 2f 2a 20 61 70 | 70 6c 79 20 74 68 65 20 | /* ap|ply the |
|00000b90| 66 75 6e 63 74 69 6f 6e | 20 74 6f 20 74 68 65 20 |function| to the |
|00000ba0| 61 72 67 75 6d 65 6e 74 | 73 20 2a 2f 0a 20 20 20 |argument|s */. |
|00000bb0| 20 76 61 6c 20 3d 20 78 | 6c 61 70 70 6c 79 28 66 | val = x|lapply(f|
|00000bc0| 75 6e 2c 61 72 67 6c 69 | 73 74 29 3b 0a 0a 20 20 |un,argli|st);.. |
|00000bd0| 20 20 2f 2a 20 72 65 73 | 74 6f 72 65 20 74 68 65 | /* res|tore the|
|00000be0| 20 70 72 65 76 69 6f 75 | 73 20 73 74 61 63 6b 20 | previou|s stack |
|00000bf0| 66 72 61 6d 65 20 2a 2f | 0a 20 20 20 20 78 6c 73 |frame */|. xls|
|00000c00| 74 61 63 6b 20 3d 20 6f | 6c 64 73 74 6b 3b 0a 0a |tack = o|ldstk;..|
|00000c10| 20 20 20 20 2f 2a 20 72 | 65 74 75 72 6e 20 74 68 | /* r|eturn th|
|00000c20| 65 20 65 78 70 72 65 73 | 73 69 6f 6e 20 65 76 61 |e expres|sion eva|
|00000c30| 6c 75 61 74 65 64 20 2a | 2f 0a 20 20 20 20 72 65 |luated *|/. re|
|00000c40| 74 75 72 6e 20 28 76 61 | 6c 29 3b 0a 7d 0a 0a 2f |turn (va|l);.}../|
|00000c50| 2a 20 78 71 75 6f 74 65 | 20 2d 20 62 75 69 6c 74 |* xquote| - built|
|00000c60| 2d 69 6e 20 66 75 6e 63 | 74 69 6f 6e 20 74 6f 20 |-in func|tion to |
|00000c70| 71 75 6f 74 65 20 61 6e | 20 65 78 70 72 65 73 73 |quote an| express|
|00000c80| 69 6f 6e 20 2a 2f 0a 4e | 4f 44 45 20 2a 78 71 75 |ion */.N|ODE *xqu|
|00000c90| 6f 74 65 28 61 72 67 73 | 29 0a 20 20 4e 4f 44 45 |ote(args|). NODE|
|00000ca0| 20 2a 61 72 67 73 3b 0a | 7b 0a 20 20 20 20 4e 4f | *args;.|{. NO|
|00000cb0| 44 45 20 2a 76 61 6c 3b | 0a 0a 20 20 20 20 2f 2a |DE *val;|.. /*|
|00000cc0| 20 67 65 74 20 74 68 65 | 20 61 72 67 75 6d 65 6e | get the| argumen|
|00000cd0| 74 20 2a 2f 0a 20 20 20 | 20 76 61 6c 20 3d 20 78 |t */. | val = x|
|00000ce0| 6c 61 72 67 28 26 61 72 | 67 73 29 3b 0a 20 20 20 |larg(&ar|gs);. |
|00000cf0| 20 78 6c 6c 61 73 74 61 | 72 67 28 61 72 67 73 29 | xllasta|rg(args)|
|00000d00| 3b 0a 0a 20 20 20 20 2f | 2a 20 72 65 74 75 72 6e |;.. /|* return|
|00000d10| 20 74 68 65 20 71 75 6f | 74 65 64 20 65 78 70 72 | the quo|ted expr|
|00000d20| 65 73 73 69 6f 6e 20 2a | 2f 0a 20 20 20 20 72 65 |ession *|/. re|
|00000d30| 74 75 72 6e 20 28 76 61 | 6c 29 3b 0a 7d 0a 0a 2f |turn (va|l);.}../|
|00000d40| 2a 20 78 66 75 6e 63 74 | 69 6f 6e 20 2d 20 62 75 |* xfunct|ion - bu|
|00000d50| 69 6c 74 2d 69 6e 20 66 | 75 6e 63 74 69 6f 6e 20 |ilt-in f|unction |
|00000d60| 74 6f 20 71 75 6f 74 65 | 20 61 20 66 75 6e 63 74 |to quote| a funct|
|00000d70| 69 6f 6e 20 2a 2f 0a 4e | 4f 44 45 20 2a 78 66 75 |ion */.N|ODE *xfu|
|00000d80| 6e 63 74 69 6f 6e 28 61 | 72 67 73 29 0a 20 20 4e |nction(a|rgs). N|
|00000d90| 4f 44 45 20 2a 61 72 67 | 73 3b 0a 7b 0a 20 20 20 |ODE *arg|s;.{. |
|00000da0| 20 4e 4f 44 45 20 2a 76 | 61 6c 3b 0a 0a 20 20 20 | NODE *v|al;.. |
|00000db0| 20 2f 2a 20 67 65 74 20 | 74 68 65 20 61 72 67 75 | /* get |the argu|
|00000dc0| 6d 65 6e 74 20 2a 2f 0a | 20 20 20 20 76 61 6c 20 |ment */.| val |
|00000dd0| 3d 20 78 6c 61 72 67 28 | 26 61 72 67 73 29 3b 0a |= xlarg(|&args);.|
|00000de0| 20 20 20 20 78 6c 6c 61 | 73 74 61 72 67 28 61 72 | xlla|starg(ar|
|00000df0| 67 73 29 3b 0a 0a 20 20 | 20 20 2f 2a 20 63 72 65 |gs);.. | /* cre|
|00000e00| 61 74 65 20 61 20 63 6c | 6f 73 75 72 65 20 66 6f |ate a cl|osure fo|
|00000e10| 72 20 6c 61 6d 62 64 61 | 20 65 78 70 72 65 73 73 |r lambda| express|
|00000e20| 69 6f 6e 73 20 2a 2f 0a | 20 20 20 20 69 66 20 28 |ions */.| if (|
|00000e30| 63 6f 6e 73 70 28 76 61 | 6c 29 20 26 26 20 63 61 |consp(va|l) && ca|
|00000e40| 72 28 76 61 6c 29 20 3d | 3d 20 73 5f 6c 61 6d 62 |r(val) =|= s_lamb|
|00000e50| 64 61 29 0a 09 76 61 6c | 20 3d 20 63 6f 6e 73 28 |da)..val| = cons(|
|00000e60| 76 61 6c 2c 78 6c 65 6e | 76 29 3b 0a 0a 20 20 20 |val,xlen|v);.. |
|00000e70| 20 2f 2a 20 6f 74 68 65 | 72 77 69 73 65 2c 20 67 | /* othe|rwise, g|
|00000e80| 65 74 20 74 68 65 20 76 | 61 6c 75 65 20 6f 66 20 |et the v|alue of |
|00000e90| 61 20 73 79 6d 62 6f 6c | 20 2a 2f 0a 20 20 20 20 |a symbol| */. |
|00000ea0| 65 6c 73 65 20 69 66 20 | 28 73 79 6d 62 6f 6c 70 |else if |(symbolp|
|00000eb0| 28 76 61 6c 29 29 0a 09 | 76 61 6c 20 3d 20 78 6c |(val))..|val = xl|
|00000ec0| 67 65 74 76 61 6c 75 65 | 28 76 61 6c 29 3b 0a 0a |getvalue|(val);..|
|00000ed0| 20 20 20 20 2f 2a 20 6f | 74 68 65 72 77 69 73 65 | /* o|therwise|
|00000ee0| 2c 20 69 74 73 20 61 6e | 20 65 72 72 6f 72 20 2a |, its an| error *|
|00000ef0| 2f 0a 20 20 20 20 65 6c | 73 65 0a 09 78 6c 65 72 |/. el|se..xler|
|00000f00| 72 6f 72 28 22 6e 6f 74 | 20 61 20 66 75 6e 63 74 |ror("not| a funct|
|00000f10| 69 6f 6e 22 2c 76 61 6c | 29 3b 0a 0a 20 20 20 20 |ion",val|);.. |
|00000f20| 2f 2a 20 72 65 74 75 72 | 6e 20 74 68 65 20 66 75 |/* retur|n the fu|
|00000f30| 6e 63 74 69 6f 6e 20 2a | 2f 0a 20 20 20 20 72 65 |nction *|/. re|
|00000f40| 74 75 72 6e 20 28 76 61 | 6c 29 3b 0a 7d 0a 0a 2f |turn (va|l);.}../|
|00000f50| 2a 20 78 6c 61 6d 62 64 | 61 20 2d 20 6c 61 6d 62 |* xlambd|a - lamb|
|00000f60| 64 61 20 66 75 6e 63 74 | 69 6f 6e 20 2a 2f 0a 4e |da funct|ion */.N|
|00000f70| 4f 44 45 20 2a 78 6c 61 | 6d 62 64 61 28 61 72 67 |ODE *xla|mbda(arg|
|00000f80| 73 29 0a 20 20 4e 4f 44 | 45 20 2a 61 72 67 73 3b |s). NOD|E *args;|
|00000f90| 0a 7b 0a 20 20 20 20 4e | 4f 44 45 20 2a 2a 2a 6f |.{. N|ODE ***o|
|00000fa0| 6c 64 73 74 6b 2c 2a 66 | 61 72 67 73 2c 2a 63 6c |ldstk,*f|args,*cl|
|00000fb0| 6f 73 75 72 65 3b 0a 0a | 20 20 20 20 2f 2a 20 63 |osure;..| /* c|
|00000fc0| 72 65 61 74 65 20 61 20 | 6e 65 77 20 73 74 61 63 |reate a |new stac|
|00000fd0| 6b 20 66 72 61 6d 65 20 | 2a 2f 0a 20 20 20 20 6f |k frame |*/. o|
|00000fe0| 6c 64 73 74 6b 20 3d 20 | 78 6c 73 61 76 65 28 26 |ldstk = |xlsave(&|
|00000ff0| 66 61 72 67 73 2c 26 63 | 6c 6f 73 75 72 65 2c 28 |fargs,&c|losure,(|
|00001000| 4e 4f 44 45 20 2a 2a 29 | 4e 55 4c 4c 29 3b 0a 0a |NODE **)|NULL);..|
|00001010| 20 20 20 20 2f 2a 20 67 | 65 74 20 74 68 65 20 66 | /* g|et the f|
|00001020| 6f 72 6d 61 6c 20 61 72 | 67 75 6d 65 6e 74 20 6c |ormal ar|gument l|
|00001030| 69 73 74 20 2a 2f 0a 20 | 20 20 20 66 61 72 67 73 |ist */. | fargs|
|00001040| 20 3d 20 78 6c 6d 61 74 | 63 68 28 4c 49 53 54 2c | = xlmat|ch(LIST,|
|00001050| 26 61 72 67 73 29 3b 0a | 0a 20 20 20 20 2f 2a 20 |&args);.|. /* |
|00001060| 63 72 65 61 74 65 20 61 | 20 6e 65 77 20 66 75 6e |create a| new fun|
|00001070| 63 74 69 6f 6e 20 64 65 | 66 69 6e 69 74 69 6f 6e |ction de|finition|
|00001080| 20 2a 2f 0a 20 20 20 20 | 63 6c 6f 73 75 72 65 20 | */. |closure |
|00001090| 3d 20 63 6f 6e 73 28 66 | 61 72 67 73 2c 61 72 67 |= cons(f|args,arg|
|000010a0| 73 29 3b 0a 20 20 20 20 | 63 6c 6f 73 75 72 65 20 |s);. |closure |
|000010b0| 3d 20 63 6f 6e 73 28 73 | 5f 6c 61 6d 62 64 61 2c |= cons(s|_lambda,|
|000010c0| 63 6c 6f 73 75 72 65 29 | 3b 0a 20 20 20 20 63 6c |closure)|;. cl|
|000010d0| 6f 73 75 72 65 20 3d 20 | 63 6f 6e 73 28 63 6c 6f |osure = |cons(clo|
|000010e0| 73 75 72 65 2c 78 6c 65 | 6e 76 29 3b 0a 0a 20 20 |sure,xle|nv);.. |
|000010f0| 20 20 2f 2a 20 72 65 73 | 74 6f 72 65 20 74 68 65 | /* res|tore the|
|00001100| 20 70 72 65 76 69 6f 75 | 73 20 73 74 61 63 6b 20 | previou|s stack |
|00001110| 66 72 61 6d 65 20 2a 2f | 0a 20 20 20 20 78 6c 73 |frame */|. xls|
|00001120| 74 61 63 6b 20 3d 20 6f | 6c 64 73 74 6b 3b 0a 0a |tack = o|ldstk;..|
|00001130| 20 20 20 20 2f 2a 20 72 | 65 74 75 72 6e 20 74 68 | /* r|eturn th|
|00001140| 65 20 63 6c 6f 73 75 72 | 65 20 2a 2f 0a 20 20 20 |e closur|e */. |
|00001150| 20 72 65 74 75 72 6e 20 | 28 63 6c 6f 73 75 72 65 | return |(closure|
|00001160| 29 3b 0a 7d 0a 0a 2f 2a | 20 78 62 71 75 6f 74 65 |);.}../*| xbquote|
|00001170| 20 2d 20 62 61 63 6b 20 | 71 75 6f 74 65 20 66 75 | - back |quote fu|
|00001180| 6e 63 74 69 6f 6e 20 2a | 2f 0a 4e 4f 44 45 20 2a |nction *|/.NODE *|
|00001190| 78 62 71 75 6f 74 65 28 | 61 72 67 73 29 0a 20 20 |xbquote(|args). |
|000011a0| 4e 4f 44 45 20 2a 61 72 | 67 73 3b 0a 7b 0a 20 20 |NODE *ar|gs;.{. |
|000011b0| 20 20 4e 4f 44 45 20 2a | 2a 2a 6f 6c 64 73 74 6b | NODE *|**oldstk|
|000011c0| 2c 2a 65 78 70 72 2c 2a | 76 61 6c 3b 0a 0a 20 20 |,*expr,*|val;.. |
|000011d0| 20 20 2f 2a 20 63 72 65 | 61 74 65 20 61 20 6e 65 | /* cre|ate a ne|
|000011e0| 77 20 73 74 61 63 6b 20 | 66 72 61 6d 65 20 2a 2f |w stack |frame */|
|000011f0| 0a 20 20 20 20 6f 6c 64 | 73 74 6b 20 3d 20 78 6c |. old|stk = xl|
|00001200| 73 61 76 65 28 26 65 78 | 70 72 2c 28 4e 4f 44 45 |save(&ex|pr,(NODE|
|00001210| 20 2a 2a 29 4e 55 4c 4c | 29 3b 0a 0a 20 20 20 20 | **)NULL|);.. |
|00001220| 2f 2a 20 67 65 74 20 74 | 68 65 20 65 78 70 72 65 |/* get t|he expre|
|00001230| 73 73 69 6f 6e 20 2a 2f | 0a 20 20 20 20 65 78 70 |ssion */|. exp|
|00001240| 72 20 3d 20 78 6c 61 72 | 67 28 26 61 72 67 73 29 |r = xlar|g(&args)|
|00001250| 3b 0a 20 20 20 20 78 6c | 6c 61 73 74 61 72 67 28 |;. xl|lastarg(|
|00001260| 61 72 67 73 29 3b 0a 0a | 20 20 20 20 2f 2a 20 66 |args);..| /* f|
|00001270| 69 6c 6c 20 69 6e 20 74 | 68 65 20 74 65 6d 70 6c |ill in t|he templ|
|00001280| 61 74 65 20 2a 2f 0a 20 | 20 20 20 76 61 6c 20 3d |ate */. | val =|
|00001290| 20 62 71 75 6f 74 65 31 | 28 65 78 70 72 29 3b 0a | bquote1|(expr);.|
|000012a0| 0a 20 20 20 20 2f 2a 20 | 72 65 73 74 6f 72 65 20 |. /* |restore |
|000012b0| 74 68 65 20 70 72 65 76 | 69 6f 75 73 20 73 74 61 |the prev|ious sta|
|000012c0| 63 6b 20 66 72 61 6d 65 | 20 2a 2f 0a 20 20 20 20 |ck frame| */. |
|000012d0| 78 6c 73 74 61 63 6b 20 | 3d 20 6f 6c 64 73 74 6b |xlstack |= oldstk|
|000012e0| 3b 0a 0a 20 20 20 20 2f | 2a 20 72 65 74 75 72 6e |;.. /|* return|
|000012f0| 20 74 68 65 20 72 65 73 | 75 6c 74 20 2a 2f 0a 20 | the res|ult */. |
|00001300| 20 20 20 72 65 74 75 72 | 6e 20 28 76 61 6c 29 3b | retur|n (val);|
|00001310| 0a 7d 0a 0a 2f 2a 20 62 | 71 75 6f 74 65 31 20 2d |.}../* b|quote1 -|
|00001320| 20 62 61 63 6b 20 71 75 | 6f 74 65 20 68 65 6c 70 | back qu|ote help|
|00001330| 65 72 20 66 75 6e 63 74 | 69 6f 6e 20 2a 2f 0a 4c |er funct|ion */.L|
|00001340| 4f 43 41 4c 20 4e 4f 44 | 45 20 2a 62 71 75 6f 74 |OCAL NOD|E *bquot|
|00001350| 65 31 28 65 78 70 72 29 | 0a 20 20 4e 4f 44 45 20 |e1(expr)|. NODE |
|00001360| 2a 65 78 70 72 3b 0a 7b | 0a 20 20 20 20 4e 4f 44 |*expr;.{|. NOD|
|00001370| 45 20 2a 2a 2a 6f 6c 64 | 73 74 6b 2c 2a 76 61 6c |E ***old|stk,*val|
|00001380| 2c 2a 6c 69 73 74 2c 2a | 6c 61 73 74 2c 2a 6e 65 |,*list,*|last,*ne|
|00001390| 77 3b 0a 0a 20 20 20 20 | 2f 2a 20 68 61 6e 64 6c |w;.. |/* handl|
|000013a0| 65 20 61 74 6f 6d 73 20 | 2a 2f 0a 20 20 20 20 69 |e atoms |*/. i|
|000013b0| 66 20 28 61 74 6f 6d 28 | 65 78 70 72 29 29 0a 09 |f (atom(|expr))..|
|000013c0| 76 61 6c 20 3d 20 65 78 | 70 72 3b 0a 0a 20 20 20 |val = ex|pr;.. |
|000013d0| 20 2f 2a 20 68 61 6e 64 | 6c 65 20 28 63 6f 6d 6d | /* hand|le (comm|
|000013e0| 61 20 3c 65 78 70 72 3e | 29 20 2a 2f 0a 20 20 20 |a <expr>|) */. |
|000013f0| 20 65 6c 73 65 20 69 66 | 20 28 63 61 72 28 65 78 | else if| (car(ex|
|00001400| 70 72 29 20 3d 3d 20 73 | 5f 63 6f 6d 6d 61 29 20 |pr) == s|_comma) |
|00001410| 7b 0a 09 69 66 20 28 61 | 74 6f 6d 28 63 64 72 28 |{..if (a|tom(cdr(|
|00001420| 65 78 70 72 29 29 29 0a | 09 20 20 20 20 78 6c 66 |expr))).|. xlf|
|00001430| 61 69 6c 28 22 62 61 64 | 20 63 6f 6d 6d 61 20 65 |ail("bad| comma e|
|00001440| 78 70 72 65 73 73 69 6f | 6e 22 29 3b 0a 09 76 61 |xpressio|n");..va|
|00001450| 6c 20 3d 20 78 6c 65 76 | 61 6c 28 63 61 72 28 63 |l = xlev|al(car(c|
|00001460| 64 72 28 65 78 70 72 29 | 29 29 3b 0a 20 20 20 20 |dr(expr)|));. |
|00001470| 7d 0a 0a 20 20 20 20 2f | 2a 20 68 61 6e 64 6c 65 |}.. /|* handle|
|00001480| 20 28 28 63 6f 6d 6d 61 | 2d 61 74 20 3c 65 78 70 | ((comma|-at <exp|
|00001490| 72 3e 29 20 2e 2e 2e 20 | 29 20 2a 2f 0a 20 20 20 |r>) ... |) */. |
|000014a0| 20 65 6c 73 65 20 69 66 | 20 28 63 6f 6e 73 70 28 | else if| (consp(|
|000014b0| 63 61 72 28 65 78 70 72 | 29 29 20 26 26 20 63 61 |car(expr|)) && ca|
|000014c0| 72 28 63 61 72 28 65 78 | 70 72 29 29 20 3d 3d 20 |r(car(ex|pr)) == |
|000014d0| 73 5f 63 6f 6d 61 74 29 | 20 7b 0a 09 6f 6c 64 73 |s_comat)| {..olds|
|000014e0| 74 6b 20 3d 20 78 6c 73 | 61 76 65 28 26 6c 69 73 |tk = xls|ave(&lis|
|000014f0| 74 2c 26 76 61 6c 2c 28 | 4e 4f 44 45 20 2a 2a 29 |t,&val,(|NODE **)|
|00001500| 4e 55 4c 4c 29 3b 0a 09 | 69 66 20 28 61 74 6f 6d |NULL);..|if (atom|
|00001510| 28 63 64 72 28 63 61 72 | 28 65 78 70 72 29 29 29 |(cdr(car|(expr)))|
|00001520| 29 0a 09 20 20 20 20 78 | 6c 66 61 69 6c 28 22 62 |).. x|lfail("b|
|00001530| 61 64 20 63 6f 6d 6d 61 | 2d 61 74 20 65 78 70 72 |ad comma|-at expr|
|00001540| 65 73 73 69 6f 6e 22 29 | 3b 0a 09 6c 69 73 74 20 |ession")|;..list |
|00001550| 3d 20 78 6c 65 76 61 6c | 28 63 61 72 28 63 64 72 |= xleval|(car(cdr|
|00001560| 28 63 61 72 28 65 78 70 | 72 29 29 29 29 3b 0a 09 |(car(exp|r))));..|
|00001570| 66 6f 72 20 28 6c 61 73 | 74 20 3d 20 4e 49 4c 3b |for (las|t = NIL;|
|00001580| 20 63 6f 6e 73 70 28 6c | 69 73 74 29 3b 20 6c 69 | consp(l|ist); li|
|00001590| 73 74 20 3d 20 63 64 72 | 28 6c 69 73 74 29 29 20 |st = cdr|(list)) |
|000015a0| 7b 0a 09 20 20 20 20 6e | 65 77 20 3d 20 63 6f 6e |{.. n|ew = con|
|000015b0| 73 61 28 63 61 72 28 6c | 69 73 74 29 29 3b 0a 09 |sa(car(l|ist));..|
|000015c0| 20 20 20 20 69 66 20 28 | 6c 61 73 74 29 0a 09 09 | if (|last)...|
|000015d0| 72 70 6c 61 63 64 28 6c | 61 73 74 2c 6e 65 77 29 |rplacd(l|ast,new)|
|000015e0| 3b 0a 09 20 20 20 20 65 | 6c 73 65 0a 09 09 76 61 |;.. e|lse...va|
|000015f0| 6c 20 3d 20 6e 65 77 3b | 0a 09 20 20 20 20 6c 61 |l = new;|.. la|
|00001600| 73 74 20 3d 20 6e 65 77 | 3b 0a 09 7d 0a 09 69 66 |st = new|;..}..if|
|00001610| 20 28 6c 61 73 74 29 0a | 09 20 20 20 20 72 70 6c | (last).|. rpl|
|00001620| 61 63 64 28 6c 61 73 74 | 2c 62 71 75 6f 74 65 31 |acd(last|,bquote1|
|00001630| 28 63 64 72 28 65 78 70 | 72 29 29 29 3b 0a 09 65 |(cdr(exp|r)));..e|
|00001640| 6c 73 65 0a 09 20 20 20 | 20 76 61 6c 20 3d 20 62 |lse.. | val = b|
|00001650| 71 75 6f 74 65 31 28 63 | 64 72 28 65 78 70 72 29 |quote1(c|dr(expr)|
|00001660| 29 3b 0a 09 78 6c 73 74 | 61 63 6b 20 3d 20 6f 6c |);..xlst|ack = ol|
|00001670| 64 73 74 6b 3b 0a 20 20 | 20 20 7d 0a 0a 20 20 20 |dstk;. | }.. |
|00001680| 20 2f 2a 20 68 61 6e 64 | 6c 65 20 61 6e 79 20 6f | /* hand|le any o|
|00001690| 74 68 65 72 20 6c 69 73 | 74 20 2a 2f 0a 20 20 20 |ther lis|t */. |
|000016a0| 20 65 6c 73 65 20 7b 0a | 09 6f 6c 64 73 74 6b 20 | else {.|.oldstk |
|000016b0| 3d 20 78 6c 73 61 76 65 | 28 26 76 61 6c 2c 28 4e |= xlsave|(&val,(N|
|000016c0| 4f 44 45 20 2a 2a 29 4e | 55 4c 4c 29 3b 0a 09 76 |ODE **)N|ULL);..v|
|000016d0| 61 6c 20 3d 20 63 6f 6e | 73 61 28 4e 49 4c 29 3b |al = con|sa(NIL);|
|000016e0| 0a 09 72 70 6c 61 63 61 | 28 76 61 6c 2c 62 71 75 |..rplaca|(val,bqu|
|000016f0| 6f 74 65 31 28 63 61 72 | 28 65 78 70 72 29 29 29 |ote1(car|(expr)))|
|00001700| 3b 0a 09 72 70 6c 61 63 | 64 28 76 61 6c 2c 62 71 |;..rplac|d(val,bq|
|00001710| 75 6f 74 65 31 28 63 64 | 72 28 65 78 70 72 29 29 |uote1(cd|r(expr))|
|00001720| 29 3b 0a 09 78 6c 73 74 | 61 63 6b 20 3d 20 6f 6c |);..xlst|ack = ol|
|00001730| 64 73 74 6b 3b 0a 20 20 | 20 20 7d 0a 0a 20 20 20 |dstk;. | }.. |
|00001740| 20 2f 2a 20 72 65 74 75 | 72 6e 20 74 68 65 20 72 | /* retu|rn the r|
|00001750| 65 73 75 6c 74 20 2a 2f | 0a 20 20 20 20 72 65 74 |esult */|. ret|
|00001760| 75 72 6e 20 28 76 61 6c | 29 3b 0a 7d 0a 0a 2f 2a |urn (val|);.}../*|
|00001770| 20 78 73 65 74 20 2d 20 | 62 75 69 6c 74 2d 69 6e | xset - |built-in|
|00001780| 20 66 75 6e 63 74 69 6f | 6e 20 73 65 74 20 2a 2f | functio|n set */|
|00001790| 0a 4e 4f 44 45 20 2a 78 | 73 65 74 28 61 72 67 73 |.NODE *x|set(args|
|000017a0| 29 0a 20 20 4e 4f 44 45 | 20 2a 61 72 67 73 3b 0a |). NODE| *args;.|
|000017b0| 7b 0a 20 20 20 20 4e 4f | 44 45 20 2a 73 79 6d 2c |{. NO|DE *sym,|
|000017c0| 2a 76 61 6c 3b 0a 0a 20 | 20 20 20 2f 2a 20 67 65 |*val;.. | /* ge|
|000017d0| 74 20 74 68 65 20 73 79 | 6d 62 6f 6c 20 61 6e 64 |t the sy|mbol and|
|000017e0| 20 6e 65 77 20 76 61 6c | 75 65 20 2a 2f 0a 20 20 | new val|ue */. |
|000017f0| 20 20 73 79 6d 20 3d 20 | 78 6c 6d 61 74 63 68 28 | sym = |xlmatch(|
|00001800| 53 59 4d 2c 26 61 72 67 | 73 29 3b 0a 20 20 20 20 |SYM,&arg|s);. |
|00001810| 76 61 6c 20 3d 20 78 6c | 61 72 67 28 26 61 72 67 |val = xl|arg(&arg|
|00001820| 73 29 3b 0a 20 20 20 20 | 78 6c 6c 61 73 74 61 72 |s);. |xllastar|
|00001830| 67 28 61 72 67 73 29 3b | 0a 0a 20 20 20 20 2f 2a |g(args);|.. /*|
|00001840| 20 61 73 73 69 67 6e 20 | 74 68 65 20 73 79 6d 62 | assign |the symb|
|00001850| 6f 6c 20 74 68 65 20 76 | 61 6c 75 65 20 6f 66 20 |ol the v|alue of |
|00001860| 61 72 67 75 6d 65 6e 74 | 20 32 20 61 6e 64 20 74 |argument| 2 and t|
|00001870| 68 65 20 72 65 74 75 72 | 6e 20 76 61 6c 75 65 20 |he retur|n value |
|00001880| 2a 2f 0a 20 20 20 20 73 | 65 74 76 61 6c 75 65 28 |*/. s|etvalue(|
|00001890| 73 79 6d 2c 76 61 6c 29 | 3b 0a 0a 20 20 20 20 2f |sym,val)|;.. /|
|000018a0| 2a 20 72 65 74 75 72 6e | 20 74 68 65 20 72 65 73 |* return| the res|
|000018b0| 75 6c 74 20 76 61 6c 75 | 65 20 2a 2f 0a 20 20 20 |ult valu|e */. |
|000018c0| 20 72 65 74 75 72 6e 20 | 28 76 61 6c 29 3b 0a 7d | return |(val);.}|
|000018d0| 0a 0a 2f 2a 20 78 73 65 | 74 71 20 2d 20 62 75 69 |../* xse|tq - bui|
|000018e0| 6c 74 2d 69 6e 20 66 75 | 6e 63 74 69 6f 6e 20 73 |lt-in fu|nction s|
|000018f0| 65 74 71 20 2a 2f 0a 4e | 4f 44 45 20 2a 78 73 65 |etq */.N|ODE *xse|
|00001900| 74 71 28 61 72 67 73 29 | 0a 20 20 4e 4f 44 45 20 |tq(args)|. NODE |
|00001910| 2a 61 72 67 73 3b 0a 7b | 0a 20 20 20 20 4e 4f 44 |*args;.{|. NOD|
|00001920| 45 20 2a 2a 2a 6f 6c 64 | 73 74 6b 2c 2a 61 72 67 |E ***old|stk,*arg|
|00001930| 2c 2a 73 79 6d 2c 2a 76 | 61 6c 3b 0a 0a 20 20 20 |,*sym,*v|al;.. |
|00001940| 20 2f 2a 20 63 72 65 61 | 74 65 20 61 20 6e 65 77 | /* crea|te a new|
|00001950| 20 73 74 61 63 6b 20 66 | 72 61 6d 65 20 2a 2f 0a | stack f|rame */.|
|00001960| 20 20 20 20 6f 6c 64 73 | 74 6b 20 3d 20 78 6c 73 | olds|tk = xls|
|00001970| 61 76 65 28 26 61 72 67 | 2c 26 73 79 6d 2c 26 76 |ave(&arg|,&sym,&v|
|00001980| 61 6c 2c 28 4e 4f 44 45 | 20 2a 2a 29 4e 55 4c 4c |al,(NODE| **)NULL|
|00001990| 29 3b 0a 0a 20 20 20 20 | 2f 2a 20 69 6e 69 74 69 |);.. |/* initi|
|000019a0| 61 6c 69 7a 65 20 2a 2f | 0a 20 20 20 20 61 72 67 |alize */|. arg|
|000019b0| 20 3d 20 61 72 67 73 3b | 0a 0a 20 20 20 20 2f 2a | = args;|.. /*|
|000019c0| 20 68 61 6e 64 6c 65 20 | 65 61 63 68 20 70 61 69 | handle |each pai|
|000019d0| 72 20 6f 66 20 61 72 67 | 75 6d 65 6e 74 73 20 2a |r of arg|uments *|
|000019e0| 2f 0a 20 20 20 20 77 68 | 69 6c 65 20 28 61 72 67 |/. wh|ile (arg|
|000019f0| 29 20 7b 0a 09 73 79 6d | 20 3d 20 78 6c 6d 61 74 |) {..sym| = xlmat|
|00001a00| 63 68 28 53 59 4d 2c 26 | 61 72 67 29 3b 0a 09 76 |ch(SYM,&|arg);..v|
|00001a10| 61 6c 20 3d 20 78 6c 65 | 76 61 72 67 28 26 61 72 |al = xle|varg(&ar|
|00001a20| 67 29 3b 0a 09 78 6c 73 | 65 74 76 61 6c 75 65 28 |g);..xls|etvalue(|
|00001a30| 73 79 6d 2c 76 61 6c 29 | 3b 0a 20 20 20 20 7d 0a |sym,val)|;. }.|
|00001a40| 0a 20 20 20 20 2f 2a 20 | 72 65 73 74 6f 72 65 20 |. /* |restore |
|00001a50| 74 68 65 20 70 72 65 76 | 69 6f 75 73 20 73 74 61 |the prev|ious sta|
|00001a60| 63 6b 20 66 72 61 6d 65 | 20 2a 2f 0a 20 20 20 20 |ck frame| */. |
|00001a70| 78 6c 73 74 61 63 6b 20 | 3d 20 6f 6c 64 73 74 6b |xlstack |= oldstk|
|00001a80| 3b 0a 0a 20 20 20 20 2f | 2a 20 72 65 74 75 72 6e |;.. /|* return|
|00001a90| 20 74 68 65 20 72 65 73 | 75 6c 74 20 76 61 6c 75 | the res|ult valu|
|00001aa0| 65 20 2a 2f 0a 20 20 20 | 20 72 65 74 75 72 6e 20 |e */. | return |
|00001ab0| 28 76 61 6c 29 3b 0a 7d | 0a 0a 2f 2a 20 78 73 65 |(val);.}|../* xse|
|00001ac0| 74 66 20 2d 20 62 75 69 | 6c 74 2d 69 6e 20 66 75 |tf - bui|lt-in fu|
|00001ad0| 6e 63 74 69 6f 6e 20 27 | 73 65 74 66 27 20 2a 2f |nction '|setf' */|
|00001ae0| 0a 4e 4f 44 45 20 2a 78 | 73 65 74 66 28 61 72 67 |.NODE *x|setf(arg|
|00001af0| 73 29 0a 20 20 4e 4f 44 | 45 20 2a 61 72 67 73 3b |s). NOD|E *args;|
|00001b00| 0a 7b 0a 20 20 20 20 4e | 4f 44 45 20 2a 2a 2a 6f |.{. N|ODE ***o|
|00001b10| 6c 64 73 74 6b 2c 2a 61 | 72 67 2c 2a 70 6c 61 63 |ldstk,*a|rg,*plac|
|00001b20| 65 2c 2a 76 61 6c 75 65 | 3b 0a 0a 20 20 20 20 2f |e,*value|;.. /|
|00001b30| 2a 20 63 72 65 61 74 65 | 20 61 20 6e 65 77 20 73 |* create| a new s|
|00001b40| 74 61 63 6b 20 66 72 61 | 6d 65 20 2a 2f 0a 20 20 |tack fra|me */. |
|00001b50| 20 20 6f 6c 64 73 74 6b | 20 3d 20 78 6c 73 61 76 | oldstk| = xlsav|
|00001b60| 65 28 26 61 72 67 2c 26 | 70 6c 61 63 65 2c 26 76 |e(&arg,&|place,&v|
|00001b70| 61 6c 75 65 2c 28 4e 4f | 44 45 20 2a 2a 29 4e 55 |alue,(NO|DE **)NU|
|00001b80| 4c 4c 29 3b 0a 0a 20 20 | 20 20 2f 2a 20 69 6e 69 |LL);.. | /* ini|
|00001b90| 74 69 61 6c 69 7a 65 20 | 2a 2f 0a 20 20 20 20 61 |tialize |*/. a|
|00001ba0| 72 67 20 3d 20 61 72 67 | 73 3b 0a 0a 20 20 20 20 |rg = arg|s;.. |
|00001bb0| 2f 2a 20 68 61 6e 64 6c | 65 20 65 61 63 68 20 70 |/* handl|e each p|
|00001bc0| 61 69 72 20 6f 66 20 61 | 72 67 75 6d 65 6e 74 73 |air of a|rguments|
|00001bd0| 20 2a 2f 0a 20 20 20 20 | 77 68 69 6c 65 20 28 61 | */. |while (a|
|00001be0| 72 67 29 20 7b 0a 0a 09 | 2f 2a 20 67 65 74 20 70 |rg) {...|/* get p|
|00001bf0| 6c 61 63 65 20 61 6e 64 | 20 76 61 6c 75 65 20 2a |lace and| value *|
|00001c00| 2f 0a 09 70 6c 61 63 65 | 20 3d 20 78 6c 61 72 67 |/..place| = xlarg|
|00001c10| 28 26 61 72 67 29 3b 0a | 09 76 61 6c 75 65 20 3d |(&arg);.|.value =|
|00001c20| 20 78 6c 65 76 61 72 67 | 28 26 61 72 67 29 3b 0a | xlevarg|(&arg);.|
|00001c30| 0a 09 2f 2a 20 63 68 65 | 63 6b 20 74 68 65 20 70 |../* che|ck the p|
|00001c40| 6c 61 63 65 20 66 6f 72 | 6d 20 2a 2f 0a 09 69 66 |lace for|m */..if|
|00001c50| 20 28 73 79 6d 62 6f 6c | 70 28 70 6c 61 63 65 29 | (symbol|p(place)|
|00001c60| 29 0a 09 20 20 20 20 78 | 6c 73 65 74 76 61 6c 75 |).. x|lsetvalu|
|00001c70| 65 28 70 6c 61 63 65 2c | 76 61 6c 75 65 29 3b 0a |e(place,|value);.|
|00001c80| 09 65 6c 73 65 20 69 66 | 20 28 63 6f 6e 73 70 28 |.else if| (consp(|
|00001c90| 70 6c 61 63 65 29 29 0a | 09 20 20 20 20 70 6c 61 |place)).|. pla|
|00001ca0| 63 65 66 6f 72 6d 28 70 | 6c 61 63 65 2c 76 61 6c |ceform(p|lace,val|
|00001cb0| 75 65 29 3b 0a 09 65 6c | 73 65 0a 09 20 20 20 20 |ue);..el|se.. |
|00001cc0| 78 6c 66 61 69 6c 28 22 | 62 61 64 20 70 6c 61 63 |xlfail("|bad plac|
|00001cd0| 65 20 66 6f 72 6d 22 29 | 3b 0a 20 20 20 20 7d 0a |e form")|;. }.|
|00001ce0| 0a 20 20 20 20 2f 2a 20 | 72 65 73 74 6f 72 65 20 |. /* |restore |
|00001cf0| 74 68 65 20 70 72 65 76 | 69 6f 75 73 20 73 74 61 |the prev|ious sta|
|00001d00| 63 6b 20 66 72 61 6d 65 | 20 2a 2f 0a 20 20 20 20 |ck frame| */. |
|00001d10| 78 6c 73 74 61 63 6b 20 | 3d 20 6f 6c 64 73 74 6b |xlstack |= oldstk|
|00001d20| 3b 0a 0a 20 20 20 20 2f | 2a 20 72 65 74 75 72 6e |;.. /|* return|
|00001d30| 20 74 68 65 20 76 61 6c | 75 65 20 2a 2f 0a 20 20 | the val|ue */. |
|00001d40| 20 20 72 65 74 75 72 6e | 20 28 76 61 6c 75 65 29 | return| (value)|
|00001d50| 3b 0a 7d 0a 0a 2f 2a 20 | 70 6c 61 63 65 66 6f 72 |;.}../* |placefor|
|00001d60| 6d 20 2d 20 68 61 6e 64 | 6c 65 20 61 20 70 6c 61 |m - hand|le a pla|
|00001d70| 63 65 20 66 6f 72 6d 20 | 6f 74 68 65 72 20 74 68 |ce form |other th|
|00001d80| 61 6e 20 61 20 73 79 6d | 62 6f 6c 20 2a 2f 0a 4c |an a sym|bol */.L|
|00001d90| 4f 43 41 4c 20 70 6c 61 | 63 65 66 6f 72 6d 28 70 |OCAL pla|ceform(p|
|00001da0| 6c 61 63 65 2c 76 61 6c | 75 65 29 0a 20 20 4e 4f |lace,val|ue). NO|
|00001db0| 44 45 20 2a 70 6c 61 63 | 65 2c 2a 76 61 6c 75 65 |DE *plac|e,*value|
|00001dc0| 3b 0a 7b 0a 20 20 20 20 | 4e 4f 44 45 20 2a 2a 2a |;.{. |NODE ***|
|00001dd0| 6f 6c 64 73 74 6b 2c 2a | 66 75 6e 2c 2a 61 72 67 |oldstk,*|fun,*arg|
|00001de0| 31 2c 2a 61 72 67 32 3b | 0a 20 20 20 20 69 6e 74 |1,*arg2;|. int|
|00001df0| 20 69 3b 0a 0a 20 20 20 | 20 2f 2a 20 63 68 65 63 | i;.. | /* chec|
|00001e00| 6b 20 74 68 65 20 66 75 | 6e 63 74 69 6f 6e 20 6e |k the fu|nction n|
|00001e10| 61 6d 65 20 2a 2f 0a 20 | 20 20 20 69 66 20 28 28 |ame */. | if ((|
|00001e20| 66 75 6e 20 3d 20 78 6c | 6d 61 74 63 68 28 53 59 |fun = xl|match(SY|
|00001e30| 4d 2c 26 70 6c 61 63 65 | 29 29 20 3d 3d 20 73 5f |M,&place|)) == s_|
|00001e40| 67 65 74 29 20 7b 0a 09 | 6f 6c 64 73 74 6b 20 3d |get) {..|oldstk =|
|00001e50| 20 78 6c 73 61 76 65 28 | 26 61 72 67 31 2c 26 61 | xlsave(|&arg1,&a|
|00001e60| 72 67 32 2c 28 4e 4f 44 | 45 20 2a 2a 29 4e 55 4c |rg2,(NOD|E **)NUL|
|00001e70| 4c 29 3b 0a 09 61 72 67 | 31 20 3d 20 78 6c 65 76 |L);..arg|1 = xlev|
|00001e80| 6d 61 74 63 68 28 53 59 | 4d 2c 26 70 6c 61 63 65 |match(SY|M,&place|
|00001e90| 29 3b 0a 09 61 72 67 32 | 20 3d 20 78 6c 65 76 6d |);..arg2| = xlevm|
|00001ea0| 61 74 63 68 28 53 59 4d | 2c 26 70 6c 61 63 65 29 |atch(SYM|,&place)|
|00001eb0| 3b 0a 09 78 6c 6c 61 73 | 74 61 72 67 28 70 6c 61 |;..xllas|targ(pla|
|00001ec0| 63 65 29 3b 0a 09 78 6c | 70 75 74 70 72 6f 70 28 |ce);..xl|putprop(|
|00001ed0| 61 72 67 31 2c 76 61 6c | 75 65 2c 61 72 67 32 29 |arg1,val|ue,arg2)|
|00001ee0| 3b 0a 09 78 6c 73 74 61 | 63 6b 20 3d 20 6f 6c 64 |;..xlsta|ck = old|
|00001ef0| 73 74 6b 3b 0a 20 20 20 | 20 7d 0a 20 20 20 20 65 |stk;. | }. e|
|00001f00| 6c 73 65 20 69 66 20 28 | 66 75 6e 20 3d 3d 20 73 |lse if (|fun == s|
|00001f10| 5f 73 76 61 6c 75 65 20 | 7c 7c 20 66 75 6e 20 3d |_svalue ||| fun =|
|00001f20| 3d 20 73 5f 73 70 6c 69 | 73 74 29 20 7b 0a 09 6f |= s_spli|st) {..o|
|00001f30| 6c 64 73 74 6b 20 3d 20 | 78 6c 73 61 76 65 28 26 |ldstk = |xlsave(&|
|00001f40| 61 72 67 31 2c 28 4e 4f | 44 45 20 2a 2a 29 4e 55 |arg1,(NO|DE **)NU|
|00001f50| 4c 4c 29 3b 0a 09 61 72 | 67 31 20 3d 20 78 6c 65 |LL);..ar|g1 = xle|
|00001f60| 76 6d 61 74 63 68 28 53 | 59 4d 2c 26 70 6c 61 63 |vmatch(S|YM,&plac|
|00001f70| 65 29 3b 0a 09 78 6c 6c | 61 73 74 61 72 67 28 70 |e);..xll|astarg(p|
|00001f80| 6c 61 63 65 29 3b 0a 09 | 69 66 20 28 66 75 6e 20 |lace);..|if (fun |
|00001f90| 3d 3d 20 73 5f 73 76 61 | 6c 75 65 29 0a 09 20 20 |== s_sva|lue).. |
|00001fa0| 20 20 73 65 74 76 61 6c | 75 65 28 61 72 67 31 2c | setval|ue(arg1,|
|00001fb0| 76 61 6c 75 65 29 3b 0a | 09 65 6c 73 65 0a 09 20 |value);.|.else.. |
|00001fc0| 20 20 20 73 65 74 70 6c | 69 73 74 28 61 72 67 31 | setpl|ist(arg1|
|00001fd0| 2c 76 61 6c 75 65 29 3b | 0a 09 78 6c 73 74 61 63 |,value);|..xlstac|
|00001fe0| 6b 20 3d 20 6f 6c 64 73 | 74 6b 3b 0a 20 20 20 20 |k = olds|tk;. |
|00001ff0| 7d 0a 20 20 20 20 65 6c | 73 65 20 69 66 20 28 66 |}. el|se if (f|
|00002000| 75 6e 20 3d 3d 20 73 5f | 63 61 72 20 7c 7c 20 66 |un == s_|car || f|
|00002010| 75 6e 20 3d 3d 20 73 5f | 63 64 72 29 20 7b 0a 09 |un == s_|cdr) {..|
|00002020| 6f 6c 64 73 74 6b 20 3d | 20 78 6c 73 61 76 65 28 |oldstk =| xlsave(|
|00002030| 26 61 72 67 31 2c 28 4e | 4f 44 45 20 2a 2a 29 4e |&arg1,(N|ODE **)N|
|00002040| 55 4c 4c 29 3b 0a 09 61 | 72 67 31 20 3d 20 78 6c |ULL);..a|rg1 = xl|
|00002050| 65 76 6d 61 74 63 68 28 | 4c 49 53 54 2c 26 70 6c |evmatch(|LIST,&pl|
|00002060| 61 63 65 29 3b 0a 09 78 | 6c 6c 61 73 74 61 72 67 |ace);..x|llastarg|
|00002070| 28 70 6c 61 63 65 29 3b | 0a 09 69 66 20 28 63 6f |(place);|..if (co|
|00002080| 6e 73 70 28 61 72 67 31 | 29 29 0a 09 20 20 20 20 |nsp(arg1|)).. |
|00002090| 69 66 20 28 66 75 6e 20 | 3d 3d 20 73 5f 63 61 72 |if (fun |== s_car|
|000020a0| 29 0a 09 09 72 70 6c 61 | 63 61 28 61 72 67 31 2c |)...rpla|ca(arg1,|
|000020b0| 76 61 6c 75 65 29 3b 0a | 09 20 20 20 20 65 6c 73 |value);.|. els|
|000020c0| 65 0a 09 09 72 70 6c 61 | 63 64 28 61 72 67 31 2c |e...rpla|cd(arg1,|
|000020d0| 76 61 6c 75 65 29 3b 0a | 09 78 6c 73 74 61 63 6b |value);.|.xlstack|
|000020e0| 20 3d 20 6f 6c 64 73 74 | 6b 3b 0a 20 20 20 20 7d | = oldst|k;. }|
|000020f0| 0a 20 20 20 20 65 6c 73 | 65 20 69 66 20 28 66 75 |. els|e if (fu|
|00002100| 6e 20 3d 3d 20 73 5f 6e | 74 68 29 20 7b 0a 09 6f |n == s_n|th) {..o|
|00002110| 6c 64 73 74 6b 20 3d 20 | 78 6c 73 61 76 65 28 26 |ldstk = |xlsave(&|
|00002120| 61 72 67 31 2c 26 61 72 | 67 32 2c 28 4e 4f 44 45 |arg1,&ar|g2,(NODE|
|00002130| 20 2a 2a 29 4e 55 4c 4c | 29 3b 0a 09 61 72 67 31 | **)NULL|);..arg1|
|00002140| 20 3d 20 78 6c 65 76 6d | 61 74 63 68 28 49 4e 54 | = xlevm|atch(INT|
|00002150| 2c 26 70 6c 61 63 65 29 | 3b 0a 09 61 72 67 32 20 |,&place)|;..arg2 |
|00002160| 3d 20 78 6c 65 76 6d 61 | 74 63 68 28 4c 49 53 54 |= xlevma|tch(LIST|
|00002170| 2c 26 70 6c 61 63 65 29 | 3b 0a 09 78 6c 6c 61 73 |,&place)|;..xllas|
|00002180| 74 61 72 67 28 70 6c 61 | 63 65 29 3b 0a 09 66 6f |targ(pla|ce);..fo|
|00002190| 72 20 28 69 20 3d 20 28 | 69 6e 74 29 67 65 74 66 |r (i = (|int)getf|
|000021a0| 69 78 6e 75 6d 28 61 72 | 67 31 29 3b 20 69 20 3e |ixnum(ar|g1); i >|
|000021b0| 20 30 20 26 26 20 63 6f | 6e 73 70 28 61 72 67 32 | 0 && co|nsp(arg2|
|000021c0| 29 3b 20 2d 2d 69 29 0a | 09 20 20 20 20 61 72 67 |); --i).|. arg|
|000021d0| 32 20 3d 20 63 64 72 28 | 61 72 67 32 29 3b 0a 09 |2 = cdr(|arg2);..|
|000021e0| 69 66 20 28 63 6f 6e 73 | 70 28 61 72 67 32 29 29 |if (cons|p(arg2))|
|000021f0| 0a 09 20 20 20 20 72 70 | 6c 61 63 61 28 61 72 67 |.. rp|laca(arg|
|00002200| 32 2c 76 61 6c 75 65 29 | 3b 0a 09 78 6c 73 74 61 |2,value)|;..xlsta|
|00002210| 63 6b 20 3d 20 6f 6c 64 | 73 74 6b 3b 0a 20 20 20 |ck = old|stk;. |
|00002220| 20 7d 0a 0a 20 20 20 20 | 65 6c 73 65 20 69 66 20 | }.. |else if |
|00002230| 28 66 75 6e 20 3d 3d 20 | 73 5f 61 72 65 66 29 20 |(fun == |s_aref) |
|00002240| 7b 0a 09 6f 6c 64 73 74 | 6b 20 3d 20 78 6c 73 61 |{..oldst|k = xlsa|
|00002250| 76 65 28 26 61 72 67 31 | 2c 26 61 72 67 32 2c 28 |ve(&arg1|,&arg2,(|
|00002260| 4e 4f 44 45 20 2a 2a 29 | 4e 55 4c 4c 29 3b 0a 09 |NODE **)|NULL);..|
|00002270| 61 72 67 31 20 3d 20 78 | 6c 65 76 6d 61 74 63 68 |arg1 = x|levmatch|
|00002280| 28 56 45 43 54 2c 26 70 | 6c 61 63 65 29 3b 0a 09 |(VECT,&p|lace);..|
|00002290| 61 72 67 32 20 3d 20 78 | 6c 65 76 6d 61 74 63 68 |arg2 = x|levmatch|
|000022a0| 28 49 4e 54 2c 26 70 6c | 61 63 65 29 3b 20 69 20 |(INT,&pl|ace); i |
|000022b0| 3d 20 28 69 6e 74 29 67 | 65 74 66 69 78 6e 75 6d |= (int)g|etfixnum|
|000022c0| 28 61 72 67 32 29 3b 0a | 09 78 6c 6c 61 73 74 61 |(arg2);.|.xllasta|
|000022d0| 72 67 28 70 6c 61 63 65 | 29 3b 0a 09 69 66 20 28 |rg(place|);..if (|
|000022e0| 69 20 3c 20 30 20 7c 7c | 20 69 20 3e 3d 20 67 65 |i < 0 ||| i >= ge|
|000022f0| 74 73 69 7a 65 28 61 72 | 67 31 29 29 0a 09 20 20 |tsize(ar|g1)).. |
|00002300| 20 20 78 6c 65 72 72 6f | 72 28 22 69 6e 64 65 78 | xlerro|r("index|
|00002310| 20 6f 75 74 20 6f 66 20 | 72 61 6e 67 65 22 2c 61 | out of |range",a|
|00002320| 72 67 32 29 3b 0a 09 73 | 65 74 65 6c 65 6d 65 6e |rg2);..s|etelemen|
|00002330| 74 28 61 72 67 31 2c 69 | 2c 76 61 6c 75 65 29 3b |t(arg1,i|,value);|
|00002340| 0a 09 78 6c 73 74 61 63 | 6b 20 3d 20 6f 6c 64 73 |..xlstac|k = olds|
|00002350| 74 6b 3b 0a 20 20 20 20 | 7d 0a 20 20 20 20 65 6c |tk;. |}. el|
|00002360| 73 65 0a 09 78 6c 66 61 | 69 6c 28 22 62 61 64 20 |se..xlfa|il("bad |
|00002370| 70 6c 61 63 65 20 66 6f | 72 6d 22 29 3b 0a 7d 0a |place fo|rm");.}.|
|00002380| 09 09 20 20 20 20 20 20 | 20 0a 2f 2a 20 78 64 65 |.. | ./* xde|
|00002390| 66 75 6e 20 2d 20 62 75 | 69 6c 74 2d 69 6e 20 66 |fun - bu|ilt-in f|
|000023a0| 75 6e 63 74 69 6f 6e 20 | 27 64 65 66 75 6e 27 20 |unction |'defun' |
|000023b0| 2a 2f 0a 4e 4f 44 45 20 | 2a 78 64 65 66 75 6e 28 |*/.NODE |*xdefun(|
|000023c0| 61 72 67 73 29 0a 20 20 | 4e 4f 44 45 20 2a 61 72 |args). |NODE *ar|
|000023d0| 67 73 3b 0a 7b 0a 20 20 | 20 20 72 65 74 75 72 6e |gs;.{. | return|
|000023e0| 20 28 64 65 66 75 6e 28 | 61 72 67 73 2c 73 5f 6c | (defun(|args,s_l|
|000023f0| 61 6d 62 64 61 29 29 3b | 0a 7d 0a 0a 2f 2a 20 78 |ambda));|.}../* x|
|00002400| 64 65 66 6d 61 63 72 6f | 20 2d 20 62 75 69 6c 74 |defmacro| - built|
|00002410| 2d 69 6e 20 66 75 6e 63 | 74 69 6f 6e 20 27 64 65 |-in func|tion 'de|
|00002420| 66 6d 61 63 72 6f 27 20 | 2a 2f 0a 4e 4f 44 45 20 |fmacro' |*/.NODE |
|00002430| 2a 78 64 65 66 6d 61 63 | 72 6f 28 61 72 67 73 29 |*xdefmac|ro(args)|
|00002440| 0a 20 20 4e 4f 44 45 20 | 2a 61 72 67 73 3b 0a 7b |. NODE |*args;.{|
|00002450| 0a 20 20 20 20 72 65 74 | 75 72 6e 20 28 64 65 66 |. ret|urn (def|
|00002460| 75 6e 28 61 72 67 73 2c | 73 5f 6d 61 63 72 6f 29 |un(args,|s_macro)|
|00002470| 29 3b 0a 7d 0a 0a 2f 2a | 20 64 65 66 75 6e 20 2d |);.}../*| defun -|
|00002480| 20 69 6e 74 65 72 6e 61 | 6c 20 66 75 6e 63 74 69 | interna|l functi|
|00002490| 6f 6e 20 64 65 66 69 6e | 69 74 69 6f 6e 20 72 6f |on defin|ition ro|
|000024a0| 75 74 69 6e 65 20 2a 2f | 0a 4c 4f 43 41 4c 20 4e |utine */|.LOCAL N|
|000024b0| 4f 44 45 20 2a 64 65 66 | 75 6e 28 61 72 67 73 2c |ODE *def|un(args,|
|000024c0| 74 79 70 65 29 0a 20 20 | 4e 4f 44 45 20 2a 61 72 |type). |NODE *ar|
|000024d0| 67 73 2c 2a 74 79 70 65 | 3b 0a 7b 0a 20 20 20 20 |gs,*type|;.{. |
|000024e0| 4e 4f 44 45 20 2a 2a 2a | 6f 6c 64 73 74 6b 2c 2a |NODE ***|oldstk,*|
|000024f0| 73 79 6d 2c 2a 66 61 72 | 67 73 2c 2a 63 6c 6f 73 |sym,*far|gs,*clos|
|00002500| 75 72 65 3b 0a 0a 20 20 | 20 20 2f 2a 20 63 72 65 |ure;.. | /* cre|
|00002510| 61 74 65 20 61 20 6e 65 | 77 20 73 74 61 63 6b 20 |ate a ne|w stack |
|00002520| 66 72 61 6d 65 20 2a 2f | 0a 20 20 20 20 6f 6c 64 |frame */|. old|
|00002530| 73 74 6b 20 3d 20 78 6c | 73 61 76 65 28 26 73 79 |stk = xl|save(&sy|
|00002540| 6d 2c 26 66 61 72 67 73 | 2c 26 63 6c 6f 73 75 72 |m,&fargs|,&closur|
|00002550| 65 2c 28 4e 4f 44 45 20 | 2a 2a 29 4e 55 4c 4c 29 |e,(NODE |**)NULL)|
|00002560| 3b 0a 0a 20 20 20 20 2f | 2a 20 67 65 74 20 74 68 |;.. /|* get th|
|00002570| 65 20 66 75 6e 63 74 69 | 6f 6e 20 73 79 6d 62 6f |e functi|on symbo|
|00002580| 6c 20 61 6e 64 20 66 6f | 72 6d 61 6c 20 61 72 67 |l and fo|rmal arg|
|00002590| 75 6d 65 6e 74 20 6c 69 | 73 74 20 2a 2f 0a 20 20 |ument li|st */. |
|000025a0| 20 20 73 79 6d 20 3d 20 | 78 6c 6d 61 74 63 68 28 | sym = |xlmatch(|
|000025b0| 53 59 4d 2c 26 61 72 67 | 73 29 3b 0a 20 20 20 20 |SYM,&arg|s);. |
|000025c0| 66 61 72 67 73 20 3d 20 | 78 6c 6d 61 74 63 68 28 |fargs = |xlmatch(|
|000025d0| 4c 49 53 54 2c 26 61 72 | 67 73 29 3b 0a 0a 20 20 |LIST,&ar|gs);.. |
|000025e0| 20 20 2f 2a 20 63 72 65 | 61 74 65 20 61 20 6e 65 | /* cre|ate a ne|
|000025f0| 77 20 66 75 6e 63 74 69 | 6f 6e 20 64 65 66 69 6e |w functi|on defin|
|00002600| 69 74 69 6f 6e 20 2a 2f | 0a 20 20 20 20 63 6c 6f |ition */|. clo|
|00002610| 73 75 72 65 20 3d 20 63 | 6f 6e 73 28 66 61 72 67 |sure = c|ons(farg|
|00002620| 73 2c 61 72 67 73 29 3b | 0a 20 20 20 20 63 6c 6f |s,args);|. clo|
|00002630| 73 75 72 65 20 3d 20 63 | 6f 6e 73 28 74 79 70 65 |sure = c|ons(type|
|00002640| 2c 63 6c 6f 73 75 72 65 | 29 3b 0a 20 20 20 20 63 |,closure|);. c|
|00002650| 6c 6f 73 75 72 65 20 3d | 20 63 6f 6e 73 28 63 6c |losure =| cons(cl|
|00002660| 6f 73 75 72 65 2c 78 6c | 65 6e 76 29 3b 0a 0a 20 |osure,xl|env);.. |
|00002670| 20 20 20 2f 2a 20 6d 61 | 6b 65 20 74 68 65 20 73 | /* ma|ke the s|
|00002680| 79 6d 62 6f 6c 20 70 6f | 69 6e 74 20 74 6f 20 61 |ymbol po|int to a|
|00002690| 20 6e 65 77 20 66 75 6e | 63 74 69 6f 6e 20 64 65 | new fun|ction de|
|000026a0| 66 69 6e 69 74 69 6f 6e | 20 2a 2f 0a 20 20 20 20 |finition| */. |
|000026b0| 78 6c 73 65 74 76 61 6c | 75 65 28 73 79 6d 2c 63 |xlsetval|ue(sym,c|
|000026c0| 6c 6f 73 75 72 65 29 3b | 0a 0a 20 20 20 20 2f 2a |losure);|.. /*|
|000026d0| 20 72 65 73 74 6f 72 65 | 20 74 68 65 20 70 72 65 | restore| the pre|
|000026e0| 76 69 6f 75 73 20 73 74 | 61 63 6b 20 66 72 61 6d |vious st|ack fram|
|000026f0| 65 20 2a 2f 0a 20 20 20 | 20 78 6c 73 74 61 63 6b |e */. | xlstack|
|00002700| 20 3d 20 6f 6c 64 73 74 | 6b 3b 0a 0a 20 20 20 20 | = oldst|k;.. |
|00002710| 2f 2a 20 72 65 74 75 72 | 6e 20 74 68 65 20 66 75 |/* retur|n the fu|
|00002720| 6e 63 74 69 6f 6e 20 73 | 79 6d 62 6f 6c 20 2a 2f |nction s|ymbol */|
|00002730| 0a 20 20 20 20 72 65 74 | 75 72 6e 20 28 73 79 6d |. ret|urn (sym|
|00002740| 29 3b 0a 7d 0a 0a 2f 2a | 20 78 67 65 6e 73 79 6d |);.}../*| xgensym|
|00002750| 20 2d 20 67 65 6e 65 72 | 61 74 65 20 61 20 73 79 | - gener|ate a sy|
|00002760| 6d 62 6f 6c 20 2a 2f 0a | 4e 4f 44 45 20 2a 78 67 |mbol */.|NODE *xg|
|00002770| 65 6e 73 79 6d 28 61 72 | 67 73 29 0a 20 20 4e 4f |ensym(ar|gs). NO|
|00002780| 44 45 20 2a 61 72 67 73 | 3b 0a 7b 0a 20 20 20 20 |DE *args|;.{. |
|00002790| 63 68 61 72 20 73 79 6d | 5b 53 54 52 4d 41 58 2b |char sym|[STRMAX+|
|000027a0| 31 5d 3b 0a 20 20 20 20 | 4e 4f 44 45 20 2a 78 3b |1];. |NODE *x;|
|000027b0| 0a 0a 20 20 20 20 2f 2a | 20 67 65 74 20 74 68 65 |.. /*| get the|
|000027c0| 20 70 72 65 66 69 78 20 | 6f 72 20 6e 75 6d 62 65 | prefix |or numbe|
|000027d0| 72 20 2a 2f 0a 20 20 20 | 20 69 66 20 28 61 72 67 |r */. | if (arg|
|000027e0| 73 29 20 7b 0a 09 78 20 | 3d 20 78 6c 61 72 67 28 |s) {..x |= xlarg(|
|000027f0| 26 61 72 67 73 29 3b 0a | 09 73 77 69 74 63 68 20 |&args);.|.switch |
|00002800| 28 6e 74 79 70 65 28 78 | 29 29 20 7b 0a 09 63 61 |(ntype(x|)) {..ca|
|00002810| 73 65 20 53 54 52 3a 0a | 09 09 73 74 72 63 70 79 |se STR:.|..strcpy|
|00002820| 28 67 73 70 72 65 66 69 | 78 2c 67 65 74 73 74 72 |(gsprefi|x,getstr|
|00002830| 69 6e 67 28 78 29 29 3b | 0a 09 09 62 72 65 61 6b |ing(x));|...break|
|00002840| 3b 0a 09 63 61 73 65 20 | 49 4e 54 3a 0a 09 09 67 |;..case |INT:...g|
|00002850| 73 6e 75 6d 62 65 72 20 | 3d 20 67 65 74 66 69 78 |snumber |= getfix|
|00002860| 6e 75 6d 28 78 29 3b 0a | 09 09 62 72 65 61 6b 3b |num(x);.|..break;|
|00002870| 0a 09 64 65 66 61 75 6c | 74 3a 0a 09 09 78 6c 65 |..defaul|t:...xle|
|00002880| 72 72 6f 72 28 22 62 61 | 64 20 61 72 67 75 6d 65 |rror("ba|d argume|
|00002890| 6e 74 20 74 79 70 65 22 | 2c 78 29 3b 0a 09 7d 0a |nt type"|,x);..}.|
|000028a0| 20 20 20 20 7d 0a 20 20 | 20 20 78 6c 6c 61 73 74 | }. | xllast|
|000028b0| 61 72 67 28 61 72 67 73 | 29 3b 0a 0a 20 20 20 20 |arg(args|);.. |
|000028c0| 2f 2a 20 63 72 65 61 74 | 65 20 74 68 65 20 70 6e |/* creat|e the pn|
|000028d0| 61 6d 65 20 6f 66 20 74 | 68 65 20 6e 65 77 20 73 |ame of t|he new s|
|000028e0| 79 6d 62 6f 6c 20 2a 2f | 0a 20 20 20 20 73 70 72 |ymbol */|. spr|
|000028f0| 69 6e 74 66 28 73 79 6d | 2c 22 25 73 25 64 22 2c |intf(sym|,"%s%d",|
|00002900| 67 73 70 72 65 66 69 78 | 2c 67 73 6e 75 6d 62 65 |gsprefix|,gsnumbe|
|00002910| 72 2b 2b 29 3b 0a 0a 20 | 20 20 20 2f 2a 20 6d 61 |r++);.. | /* ma|
|00002920| 6b 65 20 61 20 73 79 6d | 62 6f 6c 20 77 69 74 68 |ke a sym|bol with|
|00002930| 20 74 68 69 73 20 70 72 | 69 6e 74 20 6e 61 6d 65 | this pr|int name|
|00002940| 20 2a 2f 0a 20 20 20 20 | 72 65 74 75 72 6e 20 28 | */. |return (|
|00002950| 78 6c 6d 61 6b 65 73 79 | 6d 28 73 79 6d 2c 44 59 |xlmakesy|m(sym,DY|
|00002960| 4e 41 4d 49 43 29 29 3b | 0a 7d 0a 0a 2f 2a 20 78 |NAMIC));|.}../* x|
|00002970| 6d 61 6b 65 73 79 6d 62 | 6f 6c 20 2d 20 6d 61 6b |makesymb|ol - mak|
|00002980| 65 20 61 20 6e 65 77 20 | 75 6e 69 6e 74 65 72 6e |e a new |unintern|
|00002990| 65 64 20 73 79 6d 62 6f | 6c 20 2a 2f 0a 4e 4f 44 |ed symbo|l */.NOD|
|000029a0| 45 20 2a 78 6d 61 6b 65 | 73 79 6d 62 6f 6c 28 61 |E *xmake|symbol(a|
|000029b0| 72 67 73 29 0a 20 20 4e | 4f 44 45 20 2a 61 72 67 |rgs). N|ODE *arg|
|000029c0| 73 3b 0a 7b 0a 20 20 20 | 20 72 65 74 75 72 6e 20 |s;.{. | return |
|000029d0| 28 6d 61 6b 65 73 79 6d | 62 6f 6c 28 61 72 67 73 |(makesym|bol(args|
|000029e0| 2c 46 41 4c 53 45 29 29 | 3b 0a 7d 0a 0a 2f 2a 20 |,FALSE))|;.}../* |
|000029f0| 78 69 6e 74 65 72 6e 20 | 2d 20 6d 61 6b 65 20 61 |xintern |- make a|
|00002a00| 20 6e 65 77 20 69 6e 74 | 65 72 6e 65 64 20 73 79 | new int|erned sy|
|00002a10| 6d 62 6f 6c 20 2a 2f 0a | 4e 4f 44 45 20 2a 78 69 |mbol */.|NODE *xi|
|00002a20| 6e 74 65 72 6e 28 61 72 | 67 73 29 0a 20 20 4e 4f |ntern(ar|gs). NO|
|00002a30| 44 45 20 2a 61 72 67 73 | 3b 0a 7b 0a 20 20 20 20 |DE *args|;.{. |
|00002a40| 72 65 74 75 72 6e 20 28 | 6d 61 6b 65 73 79 6d 62 |return (|makesymb|
|00002a50| 6f 6c 28 61 72 67 73 2c | 54 52 55 45 29 29 3b 0a |ol(args,|TRUE));.|
|00002a60| 7d 0a 0a 2f 2a 20 6d 61 | 6b 65 73 79 6d 62 6f 6c |}../* ma|kesymbol|
|00002a70| 20 2d 20 6d 61 6b 65 20 | 61 20 6e 65 77 20 73 79 | - make |a new sy|
|00002a80| 6d 62 6f 6c 20 2a 2f 0a | 4c 4f 43 41 4c 20 4e 4f |mbol */.|LOCAL NO|
|00002a90| 44 45 20 2a 6d 61 6b 65 | 73 79 6d 62 6f 6c 28 61 |DE *make|symbol(a|
|00002aa0| 72 67 73 2c 69 66 6c 61 | 67 29 0a 20 20 4e 4f 44 |rgs,ifla|g). NOD|
|00002ab0| 45 20 2a 61 72 67 73 3b | 20 69 6e 74 20 69 66 6c |E *args;| int ifl|
|00002ac0| 61 67 3b 0a 7b 0a 20 20 | 20 20 4e 4f 44 45 20 2a |ag;.{. | NODE *|
|00002ad0| 2a 2a 6f 6c 64 73 74 6b | 2c 2a 70 6e 61 6d 65 2c |**oldstk|,*pname,|
|00002ae0| 2a 76 61 6c 3b 0a 20 20 | 20 20 63 68 61 72 20 2a |*val;. | char *|
|00002af0| 73 74 72 3b 0a 0a 20 20 | 20 20 2f 2a 20 63 72 65 |str;.. | /* cre|
|00002b00| 61 74 65 20 61 20 6e 65 | 77 20 73 74 61 63 6b 20 |ate a ne|w stack |
|00002b10| 66 72 61 6d 65 20 2a 2f | 0a 20 20 20 20 6f 6c 64 |frame */|. old|
|00002b20| 73 74 6b 20 3d 20 78 6c | 73 61 76 65 28 26 70 6e |stk = xl|save(&pn|
|00002b30| 61 6d 65 2c 28 4e 4f 44 | 45 20 2a 2a 29 4e 55 4c |ame,(NOD|E **)NUL|
|00002b40| 4c 29 3b 0a 0a 20 20 20 | 20 2f 2a 20 67 65 74 20 |L);.. | /* get |
|00002b50| 74 68 65 20 70 72 69 6e | 74 20 6e 61 6d 65 20 6f |the prin|t name o|
|00002b60| 66 20 74 68 65 20 73 79 | 6d 62 6f 6c 20 74 6f 20 |f the sy|mbol to |
|00002b70| 69 6e 74 65 72 6e 20 2a | 2f 0a 20 20 20 20 70 6e |intern *|/. pn|
|00002b80| 61 6d 65 20 3d 20 78 6c | 6d 61 74 63 68 28 53 54 |ame = xl|match(ST|
|00002b90| 52 2c 26 61 72 67 73 29 | 3b 0a 20 20 20 20 78 6c |R,&args)|;. xl|
|00002ba0| 6c 61 73 74 61 72 67 28 | 61 72 67 73 29 3b 0a 0a |lastarg(|args);..|
|00002bb0| 20 20 20 20 2f 2a 20 6d | 61 6b 65 20 74 68 65 20 | /* m|ake the |
|00002bc0| 73 79 6d 62 6f 6c 20 2a | 2f 0a 20 20 20 20 73 74 |symbol *|/. st|
|00002bd0| 72 20 3d 20 67 65 74 73 | 74 72 69 6e 67 28 70 6e |r = gets|tring(pn|
|00002be0| 61 6d 65 29 3b 0a 20 20 | 20 20 76 61 6c 20 3d 20 |ame);. | val = |
|00002bf0| 28 69 66 6c 61 67 20 3f | 20 78 6c 65 6e 74 65 72 |(iflag ?| xlenter|
|00002c00| 28 73 74 72 2c 44 59 4e | 41 4d 49 43 29 20 3a 20 |(str,DYN|AMIC) : |
|00002c10| 78 6c 6d 61 6b 65 73 79 | 6d 28 73 74 72 2c 44 59 |xlmakesy|m(str,DY|
|00002c20| 4e 41 4d 49 43 29 29 3b | 0a 0a 20 20 20 20 2f 2a |NAMIC));|.. /*|
|00002c30| 20 72 65 73 74 6f 72 65 | 20 74 68 65 20 70 72 65 | restore| the pre|
|00002c40| 76 69 6f 75 73 20 73 74 | 61 63 6b 20 66 72 61 6d |vious st|ack fram|
|00002c50| 65 20 2a 2f 0a 20 20 20 | 20 78 6c 73 74 61 63 6b |e */. | xlstack|
|00002c60| 20 3d 20 6f 6c 64 73 74 | 6b 3b 0a 0a 20 20 20 20 | = oldst|k;.. |
|00002c70| 2f 2a 20 72 65 74 75 72 | 6e 20 74 68 65 20 73 79 |/* retur|n the sy|
|00002c80| 6d 62 6f 6c 20 2a 2f 0a | 20 20 20 20 72 65 74 75 |mbol */.| retu|
|00002c90| 72 6e 20 28 76 61 6c 29 | 3b 0a 7d 0a 0a 2f 2a 20 |rn (val)|;.}../* |
|00002ca0| 78 73 79 6d 6e 61 6d 65 | 20 2d 20 67 65 74 20 74 |xsymname| - get t|
|00002cb0| 68 65 20 70 72 69 6e 74 | 20 6e 61 6d 65 20 6f 66 |he print| name of|
|00002cc0| 20 61 20 73 79 6d 62 6f | 6c 20 2a 2f 0a 4e 4f 44 | a symbo|l */.NOD|
|00002cd0| 45 20 2a 78 73 79 6d 6e | 61 6d 65 28 61 72 67 73 |E *xsymn|ame(args|
|00002ce0| 29 0a 20 20 4e 4f 44 45 | 20 2a 61 72 67 73 3b 0a |). NODE| *args;.|
|00002cf0| 7b 0a 20 20 20 20 4e 4f | 44 45 20 2a 73 79 6d 3b |{. NO|DE *sym;|
|00002d00| 0a 0a 20 20 20 20 2f 2a | 20 67 65 74 20 74 68 65 |.. /*| get the|
|00002d10| 20 73 79 6d 62 6f 6c 20 | 2a 2f 0a 20 20 20 20 73 | symbol |*/. s|
|00002d20| 79 6d 20 3d 20 78 6c 6d | 61 74 63 68 28 53 59 4d |ym = xlm|atch(SYM|
|00002d30| 2c 26 61 72 67 73 29 3b | 0a 20 20 20 20 78 6c 6c |,&args);|. xll|
|00002d40| 61 73 74 61 72 67 28 61 | 72 67 73 29 3b 0a 0a 20 |astarg(a|rgs);.. |
|00002d50| 20 20 20 2f 2a 20 72 65 | 74 75 72 6e 20 74 68 65 | /* re|turn the|
|00002d60| 20 70 72 69 6e 74 20 6e | 61 6d 65 20 2a 2f 0a 20 | print n|ame */. |
|00002d70| 20 20 20 72 65 74 75 72 | 6e 20 28 67 65 74 70 6e | retur|n (getpn|
|00002d80| 61 6d 65 28 73 79 6d 29 | 29 3b 0a 7d 0a 0a 2f 2a |ame(sym)|);.}../*|
|00002d90| 20 78 73 79 6d 76 61 6c | 75 65 20 2d 20 67 65 74 | xsymval|ue - get|
|00002da0| 20 74 68 65 20 76 61 6c | 75 65 20 6f 66 20 61 20 | the val|ue of a |
|00002db0| 73 79 6d 62 6f 6c 20 2a | 2f 0a 4e 4f 44 45 20 2a |symbol *|/.NODE *|
|00002dc0| 78 73 79 6d 76 61 6c 75 | 65 28 61 72 67 73 29 0a |xsymvalu|e(args).|
|00002dd0| 20 20 4e 4f 44 45 20 2a | 61 72 67 73 3b 0a 7b 0a | NODE *|args;.{.|
|00002de0| 20 20 20 20 4e 4f 44 45 | 20 2a 73 79 6d 2c 2a 76 | NODE| *sym,*v|
|00002df0| 61 6c 3b 0a 0a 20 20 20 | 20 2f 2a 20 67 65 74 20 |al;.. | /* get |
|00002e00| 74 68 65 20 73 79 6d 62 | 6f 6c 20 2a 2f 0a 20 20 |the symb|ol */. |
|00002e10| 20 20 73 79 6d 20 3d 20 | 78 6c 6d 61 74 63 68 28 | sym = |xlmatch(|
|00002e20| 53 59 4d 2c 26 61 72 67 | 73 29 3b 0a 20 20 20 20 |SYM,&arg|s);. |
|00002e30| 78 6c 6c 61 73 74 61 72 | 67 28 61 72 67 73 29 3b |xllastar|g(args);|
|00002e40| 0a 0a 20 20 20 20 2f 2a | 20 67 65 74 20 74 68 65 |.. /*| get the|
|00002e50| 20 67 6c 6f 62 61 6c 20 | 76 61 6c 75 65 20 2a 2f | global |value */|
|00002e60| 0a 20 20 20 20 77 68 69 | 6c 65 20 28 28 76 61 6c |. whi|le ((val|
|00002e70| 20 3d 20 67 65 74 76 61 | 6c 75 65 28 73 79 6d 29 | = getva|lue(sym)|
|00002e80| 29 20 3d 3d 20 73 5f 75 | 6e 62 6f 75 6e 64 29 0a |) == s_u|nbound).|
|00002e90| 09 78 6c 63 65 72 72 6f | 72 28 22 74 72 79 20 65 |.xlcerro|r("try e|
|00002ea0| 76 61 6c 75 61 74 69 6e | 67 20 73 79 6d 62 6f 6c |valuatin|g symbol|
|00002eb0| 20 61 67 61 69 6e 22 2c | 22 75 6e 62 6f 75 6e 64 | again",|"unbound|
|00002ec0| 20 76 61 72 69 61 62 6c | 65 22 2c 73 79 6d 29 3b | variabl|e",sym);|
|00002ed0| 0a 0a 20 20 20 20 2f 2a | 20 72 65 74 75 72 6e 20 |.. /*| return |
|00002ee0| 69 74 73 20 76 61 6c 75 | 65 20 2a 2f 0a 20 20 20 |its valu|e */. |
|00002ef0| 20 72 65 74 75 72 6e 20 | 28 76 61 6c 29 3b 0a 7d | return |(val);.}|
|00002f00| 0a 0a 2f 2a 20 78 73 79 | 6d 70 6c 69 73 74 20 2d |../* xsy|mplist -|
|00002f10| 20 67 65 74 20 74 68 65 | 20 70 72 6f 70 65 72 74 | get the| propert|
|00002f20| 79 20 6c 69 73 74 20 6f | 66 20 61 20 73 79 6d 62 |y list o|f a symb|
|00002f30| 6f 6c 20 2a 2f 0a 4e 4f | 44 45 20 2a 78 73 79 6d |ol */.NO|DE *xsym|
|00002f40| 70 6c 69 73 74 28 61 72 | 67 73 29 0a 20 20 4e 4f |plist(ar|gs). NO|
|00002f50| 44 45 20 2a 61 72 67 73 | 3b 0a 7b 0a 20 20 20 20 |DE *args|;.{. |
|00002f60| 4e 4f 44 45 20 2a 73 79 | 6d 3b 0a 0a 20 20 20 20 |NODE *sy|m;.. |
|00002f70| 2f 2a 20 67 65 74 20 74 | 68 65 20 73 79 6d 62 6f |/* get t|he symbo|
|00002f80| 6c 20 2a 2f 0a 20 20 20 | 20 73 79 6d 20 3d 20 78 |l */. | sym = x|
|00002f90| 6c 6d 61 74 63 68 28 53 | 59 4d 2c 26 61 72 67 73 |lmatch(S|YM,&args|
|00002fa0| 29 3b 0a 20 20 20 20 78 | 6c 6c 61 73 74 61 72 67 |);. x|llastarg|
|00002fb0| 28 61 72 67 73 29 3b 0a | 0a 20 20 20 20 2f 2a 20 |(args);.|. /* |
|00002fc0| 72 65 74 75 72 6e 20 74 | 68 65 20 70 72 6f 70 65 |return t|he prope|
|00002fd0| 72 74 79 20 6c 69 73 74 | 20 2a 2f 0a 20 20 20 20 |rty list| */. |
|00002fe0| 72 65 74 75 72 6e 20 28 | 67 65 74 70 6c 69 73 74 |return (|getplist|
|00002ff0| 28 73 79 6d 29 29 3b 0a | 7d 0a 0a 2f 2a 20 78 67 |(sym));.|}../* xg|
|00003000| 65 74 20 2d 20 67 65 74 | 20 74 68 65 20 76 61 6c |et - get| the val|
|00003010| 75 65 20 6f 66 20 61 20 | 70 72 6f 70 65 72 74 79 |ue of a |property|
|00003020| 20 2a 2f 0a 4e 4f 44 45 | 20 2a 78 67 65 74 28 61 | */.NODE| *xget(a|
|00003030| 72 67 73 29 0a 20 20 4e | 4f 44 45 20 2a 61 72 67 |rgs). N|ODE *arg|
|00003040| 73 3b 0a 7b 0a 20 20 20 | 20 4e 4f 44 45 20 2a 73 |s;.{. | NODE *s|
|00003050| 79 6d 2c 2a 70 72 70 3b | 0a 0a 20 20 20 20 2f 2a |ym,*prp;|.. /*|
|00003060| 20 67 65 74 20 74 68 65 | 20 73 79 6d 62 6f 6c 20 | get the| symbol |
|00003070| 61 6e 64 20 70 72 6f 70 | 65 72 74 79 20 2a 2f 0a |and prop|erty */.|
|00003080| 20 20 20 20 73 79 6d 20 | 3d 20 78 6c 6d 61 74 63 | sym |= xlmatc|
|00003090| 68 28 53 59 4d 2c 26 61 | 72 67 73 29 3b 0a 20 20 |h(SYM,&a|rgs);. |
|000030a0| 20 20 70 72 70 20 3d 20 | 78 6c 6d 61 74 63 68 28 | prp = |xlmatch(|
|000030b0| 53 59 4d 2c 26 61 72 67 | 73 29 3b 0a 20 20 20 20 |SYM,&arg|s);. |
|000030c0| 78 6c 6c 61 73 74 61 72 | 67 28 61 72 67 73 29 3b |xllastar|g(args);|
|000030d0| 0a 0a 20 20 20 20 2f 2a | 20 72 65 74 72 69 65 76 |.. /*| retriev|
|000030e0| 65 20 74 68 65 20 70 72 | 6f 70 65 72 74 79 20 76 |e the pr|operty v|
|000030f0| 61 6c 75 65 20 2a 2f 0a | 20 20 20 20 72 65 74 75 |alue */.| retu|
|00003100| 72 6e 20 28 78 6c 67 65 | 74 70 72 6f 70 28 73 79 |rn (xlge|tprop(sy|
|00003110| 6d 2c 70 72 70 29 29 3b | 0a 7d 0a 0a 2f 2a 20 78 |m,prp));|.}../* x|
|00003120| 70 75 74 70 72 6f 70 20 | 2d 20 73 65 74 20 74 68 |putprop |- set th|
|00003130| 65 20 76 61 6c 75 65 20 | 6f 66 20 61 20 70 72 6f |e value |of a pro|
|00003140| 70 65 72 74 79 20 2a 2f | 0a 4e 4f 44 45 20 2a 78 |perty */|.NODE *x|
|00003150| 70 75 74 70 72 6f 70 28 | 61 72 67 73 29 0a 20 20 |putprop(|args). |
|00003160| 4e 4f 44 45 20 2a 61 72 | 67 73 3b 0a 7b 0a 20 20 |NODE *ar|gs;.{. |
|00003170| 20 20 4e 4f 44 45 20 2a | 73 79 6d 2c 2a 76 61 6c | NODE *|sym,*val|
|00003180| 2c 2a 70 72 70 3b 0a 0a | 20 20 20 20 2f 2a 20 67 |,*prp;..| /* g|
|00003190| 65 74 20 74 68 65 20 73 | 79 6d 62 6f 6c 20 61 6e |et the s|ymbol an|
|000031a0| 64 20 70 72 6f 70 65 72 | 74 79 20 2a 2f 0a 20 20 |d proper|ty */. |
|000031b0| 20 20 73 79 6d 20 3d 20 | 78 6c 6d 61 74 63 68 28 | sym = |xlmatch(|
|000031c0| 53 59 4d 2c 26 61 72 67 | 73 29 3b 0a 20 20 20 20 |SYM,&arg|s);. |
|000031d0| 76 61 6c 20 3d 20 78 6c | 61 72 67 28 26 61 72 67 |val = xl|arg(&arg|
|000031e0| 73 29 3b 0a 20 20 20 20 | 70 72 70 20 3d 20 78 6c |s);. |prp = xl|
|000031f0| 6d 61 74 63 68 28 53 59 | 4d 2c 26 61 72 67 73 29 |match(SY|M,&args)|
|00003200| 3b 0a 20 20 20 20 78 6c | 6c 61 73 74 61 72 67 28 |;. xl|lastarg(|
|00003210| 61 72 67 73 29 3b 0a 0a | 20 20 20 20 2f 2a 20 73 |args);..| /* s|
|00003220| 65 74 20 74 68 65 20 70 | 72 6f 70 65 72 74 79 20 |et the p|roperty |
|00003230| 76 61 6c 75 65 20 2a 2f | 0a 20 20 20 20 78 6c 70 |value */|. xlp|
|00003240| 75 74 70 72 6f 70 28 73 | 79 6d 2c 76 61 6c 2c 70 |utprop(s|ym,val,p|
|00003250| 72 70 29 3b 0a 0a 20 20 | 20 20 2f 2a 20 72 65 74 |rp);.. | /* ret|
|00003260| 75 72 6e 20 74 68 65 20 | 76 61 6c 75 65 20 2a 2f |urn the |value */|
|00003270| 0a 20 20 20 20 72 65 74 | 75 72 6e 20 28 76 61 6c |. ret|urn (val|
|00003280| 29 3b 0a 7d 0a 0a 2f 2a | 20 78 72 65 6d 70 72 6f |);.}../*| xrempro|
|00003290| 70 20 2d 20 72 65 6d 6f | 76 65 20 61 20 70 72 6f |p - remo|ve a pro|
|000032a0| 70 65 72 74 79 20 76 61 | 6c 75 65 20 66 72 6f 6d |perty va|lue from|
|000032b0| 20 61 20 70 72 6f 70 65 | 72 74 79 20 6c 69 73 74 | a prope|rty list|
|000032c0| 20 2a 2f 0a 4e 4f 44 45 | 20 2a 78 72 65 6d 70 72 | */.NODE| *xrempr|
|000032d0| 6f 70 28 61 72 67 73 29 | 0a 20 20 4e 4f 44 45 20 |op(args)|. NODE |
|000032e0| 2a 61 72 67 73 3b 0a 7b | 0a 20 20 20 20 4e 4f 44 |*args;.{|. NOD|
|000032f0| 45 20 2a 73 79 6d 2c 2a | 70 72 70 3b 0a 0a 20 20 |E *sym,*|prp;.. |
|00003300| 20 20 2f 2a 20 67 65 74 | 20 74 68 65 20 73 79 6d | /* get| the sym|
|00003310| 62 6f 6c 20 61 6e 64 20 | 70 72 6f 70 65 72 74 79 |bol and |property|
|00003320| 20 2a 2f 0a 20 20 20 20 | 73 79 6d 20 3d 20 78 6c | */. |sym = xl|
|00003330| 6d 61 74 63 68 28 53 59 | 4d 2c 26 61 72 67 73 29 |match(SY|M,&args)|
|00003340| 3b 0a 20 20 20 20 70 72 | 70 20 3d 20 78 6c 6d 61 |;. pr|p = xlma|
|00003350| 74 63 68 28 53 59 4d 2c | 26 61 72 67 73 29 3b 0a |tch(SYM,|&args);.|
|00003360| 20 20 20 20 78 6c 6c 61 | 73 74 61 72 67 28 61 72 | xlla|starg(ar|
|00003370| 67 73 29 3b 0a 0a 20 20 | 20 20 2f 2a 20 72 65 6d |gs);.. | /* rem|
|00003380| 6f 76 65 20 74 68 65 20 | 70 72 6f 70 65 72 74 79 |ove the |property|
|00003390| 20 2a 2f 0a 20 20 20 20 | 78 6c 72 65 6d 70 72 6f | */. |xlrempro|
|000033a0| 70 28 73 79 6d 2c 70 72 | 70 29 3b 0a 0a 20 20 20 |p(sym,pr|p);.. |
|000033b0| 20 2f 2a 20 72 65 74 75 | 72 6e 20 6e 69 6c 20 2a | /* retu|rn nil *|
|000033c0| 2f 0a 20 20 20 20 72 65 | 74 75 72 6e 20 28 4e 49 |/. re|turn (NI|
|000033d0| 4c 29 3b 0a 7d 0a 0a 2f | 2a 20 78 68 61 73 68 20 |L);.}../|* xhash |
|000033e0| 2d 20 63 6f 6d 70 75 74 | 65 20 74 68 65 20 68 61 |- comput|e the ha|
|000033f0| 73 68 20 76 61 6c 75 65 | 20 6f 66 20 61 20 73 74 |sh value| of a st|
|00003400| 72 69 6e 67 20 6f 72 20 | 73 79 6d 62 6f 6c 20 2a |ring or |symbol *|
|00003410| 2f 0a 4e 4f 44 45 20 2a | 78 68 61 73 68 28 61 72 |/.NODE *|xhash(ar|
|00003420| 67 73 29 0a 20 20 4e 4f | 44 45 20 2a 61 72 67 73 |gs). NO|DE *args|
|00003430| 3b 0a 7b 0a 20 20 20 20 | 63 68 61 72 20 2a 73 74 |;.{. |char *st|
|00003440| 72 3b 0a 20 20 20 20 4e | 4f 44 45 20 2a 76 61 6c |r;. N|ODE *val|
|00003450| 3b 0a 20 20 20 20 69 6e | 74 20 6c 65 6e 3b 0a 0a |;. in|t len;..|
|00003460| 20 20 20 20 2f 2a 20 67 | 65 74 20 74 68 65 20 73 | /* g|et the s|
|00003470| 74 72 69 6e 67 20 61 6e | 64 20 74 68 65 20 74 61 |tring an|d the ta|
|00003480| 62 6c 65 20 6c 65 6e 67 | 74 68 20 2a 2f 0a 20 20 |ble leng|th */. |
|00003490| 20 20 76 61 6c 20 3d 20 | 78 6c 61 72 67 28 26 61 | val = |xlarg(&a|
|000034a0| 72 67 73 29 3b 0a 20 20 | 20 20 6c 65 6e 20 3d 20 |rgs);. | len = |
|000034b0| 28 69 6e 74 29 67 65 74 | 66 69 78 6e 75 6d 28 78 |(int)get|fixnum(x|
|000034c0| 6c 6d 61 74 63 68 28 49 | 4e 54 2c 26 61 72 67 73 |lmatch(I|NT,&args|
|000034d0| 29 29 3b 0a 20 20 20 20 | 78 6c 6c 61 73 74 61 72 |));. |xllastar|
|000034e0| 67 28 61 72 67 73 29 3b | 0a 0a 20 20 20 20 2f 2a |g(args);|.. /*|
|000034f0| 20 67 65 74 20 74 68 65 | 20 73 74 72 69 6e 67 20 | get the| string |
|00003500| 2a 2f 0a 20 20 20 20 69 | 66 20 28 73 79 6d 62 6f |*/. i|f (symbo|
|00003510| 6c 70 28 76 61 6c 29 29 | 0a 09 73 74 72 20 3d 20 |lp(val))|..str = |
|00003520| 67 65 74 73 74 72 69 6e | 67 28 67 65 74 70 6e 61 |getstrin|g(getpna|
|00003530| 6d 65 28 76 61 6c 29 29 | 3b 0a 20 20 20 20 65 6c |me(val))|;. el|
|00003540| 73 65 20 69 66 20 28 73 | 74 72 69 6e 67 70 28 76 |se if (s|tringp(v|
|00003550| 61 6c 29 29 0a 09 73 74 | 72 20 3d 20 67 65 74 73 |al))..st|r = gets|
|00003560| 74 72 69 6e 67 28 76 61 | 6c 29 3b 0a 20 20 20 20 |tring(va|l);. |
|00003570| 65 6c 73 65 0a 09 78 6c | 65 72 72 6f 72 28 22 62 |else..xl|error("b|
|00003580| 61 64 20 61 72 67 75 6d | 65 6e 74 20 74 79 70 65 |ad argum|ent type|
|00003590| 22 2c 76 61 6c 29 3b 0a | 0a 20 20 20 20 2f 2a 20 |",val);.|. /* |
|000035a0| 72 65 74 75 72 6e 20 74 | 68 65 20 68 61 73 68 20 |return t|he hash |
|000035b0| 69 6e 64 65 78 20 2a 2f | 0a 20 20 20 20 72 65 74 |index */|. ret|
|000035c0| 75 72 6e 20 28 63 76 66 | 69 78 6e 75 6d 28 28 46 |urn (cvf|ixnum((F|
|000035d0| 49 58 4e 55 4d 29 68 61 | 73 68 28 73 74 72 2c 6c |IXNUM)ha|sh(str,l|
|000035e0| 65 6e 29 29 29 3b 0a 7d | 0a 0a 2f 2a 20 78 61 72 |en)));.}|../* xar|
|000035f0| 65 66 20 2d 20 61 72 72 | 61 79 20 72 65 66 65 72 |ef - arr|ay refer|
|00003600| 65 6e 63 65 20 66 75 6e | 63 74 69 6f 6e 20 2a 2f |ence fun|ction */|
|00003610| 0a 4e 4f 44 45 20 2a 78 | 61 72 65 66 28 61 72 67 |.NODE *x|aref(arg|
|00003620| 73 29 0a 20 20 4e 4f 44 | 45 20 2a 61 72 67 73 3b |s). NOD|E *args;|
|00003630| 0a 7b 0a 20 20 20 20 4e | 4f 44 45 20 2a 61 72 72 |.{. N|ODE *arr|
|00003640| 61 79 2c 2a 69 6e 64 65 | 78 3b 0a 20 20 20 20 69 |ay,*inde|x;. i|
|00003650| 6e 74 20 69 3b 0a 0a 20 | 20 20 20 2f 2a 20 67 65 |nt i;.. | /* ge|
|00003660| 74 20 74 68 65 20 61 72 | 72 61 79 20 61 6e 64 20 |t the ar|ray and |
|00003670| 74 68 65 20 69 6e 64 65 | 78 20 2a 2f 0a 20 20 20 |the inde|x */. |
|00003680| 20 61 72 72 61 79 20 3d | 20 78 6c 6d 61 74 63 68 | array =| xlmatch|
|00003690| 28 56 45 43 54 2c 26 61 | 72 67 73 29 3b 0a 20 20 |(VECT,&a|rgs);. |
|000036a0| 20 20 69 6e 64 65 78 20 | 3d 20 78 6c 6d 61 74 63 | index |= xlmatc|
|000036b0| 68 28 49 4e 54 2c 26 61 | 72 67 73 29 3b 20 69 20 |h(INT,&a|rgs); i |
|000036c0| 3d 20 28 69 6e 74 29 67 | 65 74 66 69 78 6e 75 6d |= (int)g|etfixnum|
|000036d0| 28 69 6e 64 65 78 29 3b | 0a 20 20 20 20 78 6c 6c |(index);|. xll|
|000036e0| 61 73 74 61 72 67 28 61 | 72 67 73 29 3b 0a 0a 20 |astarg(a|rgs);.. |
|000036f0| 20 20 20 2f 2a 20 72 61 | 6e 67 65 20 63 68 65 63 | /* ra|nge chec|
|00003700| 6b 20 74 68 65 20 69 6e | 64 65 78 20 2a 2f 0a 20 |k the in|dex */. |
|00003710| 20 20 20 69 66 20 28 69 | 20 3c 20 30 20 7c 7c 20 | if (i| < 0 || |
|00003720| 69 20 3e 3d 20 67 65 74 | 73 69 7a 65 28 61 72 72 |i >= get|size(arr|
|00003730| 61 79 29 29 0a 09 78 6c | 65 72 72 6f 72 28 22 61 |ay))..xl|error("a|
|00003740| 72 72 61 79 20 69 6e 64 | 65 78 20 6f 75 74 20 6f |rray ind|ex out o|
|00003750| 66 20 62 6f 75 6e 64 73 | 22 2c 69 6e 64 65 78 29 |f bounds|",index)|
|00003760| 3b 0a 0a 20 20 20 20 2f | 2a 20 72 65 74 75 72 6e |;.. /|* return|
|00003770| 20 74 68 65 20 61 72 72 | 61 79 20 65 6c 65 6d 65 | the arr|ay eleme|
|00003780| 6e 74 20 2a 2f 0a 20 20 | 20 20 72 65 74 75 72 6e |nt */. | return|
|00003790| 20 28 67 65 74 65 6c 65 | 6d 65 6e 74 28 61 72 72 | (getele|ment(arr|
|000037a0| 61 79 2c 69 29 29 3b 0a | 7d 0a 0a 2f 2a 20 78 6d |ay,i));.|}../* xm|
|000037b0| 6b 61 72 72 61 79 20 2d | 20 6d 61 6b 65 20 61 20 |karray -| make a |
|000037c0| 6e 65 77 20 61 72 72 61 | 79 20 2a 2f 0a 4e 4f 44 |new arra|y */.NOD|
|000037d0| 45 20 2a 78 6d 6b 61 72 | 72 61 79 28 61 72 67 73 |E *xmkar|ray(args|
|000037e0| 29 0a 20 20 4e 4f 44 45 | 20 2a 61 72 67 73 3b 0a |). NODE| *args;.|
|000037f0| 7b 0a 20 20 20 20 69 6e | 74 20 73 69 7a 65 3b 0a |{. in|t size;.|
|00003800| 0a 20 20 20 20 2f 2a 20 | 67 65 74 20 74 68 65 20 |. /* |get the |
|00003810| 73 69 7a 65 20 6f 66 20 | 74 68 65 20 61 72 72 61 |size of |the arra|
|00003820| 79 20 2a 2f 0a 20 20 20 | 20 73 69 7a 65 20 3d 20 |y */. | size = |
|00003830| 28 69 6e 74 29 67 65 74 | 66 69 78 6e 75 6d 28 78 |(int)get|fixnum(x|
|00003840| 6c 6d 61 74 63 68 28 49 | 4e 54 2c 26 61 72 67 73 |lmatch(I|NT,&args|
|00003850| 29 29 3b 0a 20 20 20 20 | 78 6c 6c 61 73 74 61 72 |));. |xllastar|
|00003860| 67 28 61 72 67 73 29 3b | 0a 0a 20 20 20 20 2f 2a |g(args);|.. /*|
|00003870| 20 63 72 65 61 74 65 20 | 74 68 65 20 61 72 72 61 | create |the arra|
|00003880| 79 20 2a 2f 0a 20 20 20 | 20 72 65 74 75 72 6e 20 |y */. | return |
|00003890| 28 6e 65 77 76 65 63 74 | 6f 72 28 73 69 7a 65 29 |(newvect|or(size)|
|000038a0| 29 3b 0a 7d 0a 0a 53 48 | 41 52 5f 45 4f 46 0a 66 |);.}..SH|AR_EOF.f|
|000038b0| 69 20 23 20 65 6e 64 20 | 6f 66 20 6f 76 65 72 77 |i # end |of overw|
|000038c0| 72 69 74 69 6e 67 20 63 | 68 65 63 6b 0a 69 66 20 |riting c|heck.if |
|000038d0| 74 65 73 74 20 2d 66 20 | 27 78 6c 63 6f 6e 74 2e |test -f |'xlcont.|
|000038e0| 63 27 0a 74 68 65 6e 0a | 09 65 63 68 6f 20 73 68 |c'.then.|.echo sh|
|000038f0| 61 72 3a 20 77 69 6c 6c | 20 6e 6f 74 20 6f 76 65 |ar: will| not ove|
|00003900| 72 2d 77 72 69 74 65 20 | 65 78 69 73 74 69 6e 67 |r-write |existing|
|00003910| 20 66 69 6c 65 20 22 27 | 78 6c 63 6f 6e 74 2e 63 | file "'|xlcont.c|
|00003920| 27 22 0a 65 6c 73 65 0a | 63 61 74 20 3c 3c 20 5c |'".else.|cat << \|
|00003930| 53 48 41 52 5f 45 4f 46 | 20 3e 20 27 78 6c 63 6f |SHAR_EOF| > 'xlco|
|00003940| 6e 74 2e 63 27 0a 2f 2a | 20 78 6c 63 6f 6e 74 20 |nt.c'./*| xlcont |
|00003950| 2d 20 78 6c 69 73 70 20 | 63 6f 6e 74 72 6f 6c 20 |- xlisp |control |
|00003960| 62 75 69 6c 74 2d 69 6e | 20 66 75 6e 63 74 69 6f |built-in| functio|
|00003970| 6e 73 20 2a 2f 0a 2f 2a | 09 43 6f 70 79 72 69 67 |ns */./*|.Copyrig|
|00003980| 68 74 20 28 63 29 20 31 | 39 38 35 2c 20 62 79 20 |ht (c) 1|985, by |
|00003990| 44 61 76 69 64 20 4d 69 | 63 68 61 65 6c 20 42 65 |David Mi|chael Be|
|000039a0| 74 7a 0a 09 41 6c 6c 20 | 52 69 67 68 74 73 20 52 |tz..All |Rights R|
|000039b0| 65 73 65 72 76 65 64 0a | 09 50 65 72 6d 69 73 73 |eserved.|.Permiss|
|000039c0| 69 6f 6e 20 69 73 20 67 | 72 61 6e 74 65 64 20 66 |ion is g|ranted f|
|000039d0| 6f 72 20 75 6e 72 65 73 | 74 72 69 63 74 65 64 20 |or unres|tricted |
|000039e0| 6e 6f 6e 2d 63 6f 6d 6d | 65 72 63 69 61 6c 20 75 |non-comm|ercial u|
|000039f0| 73 65 09 2a 2f 0a 0a 23 | 69 6e 63 6c 75 64 65 20 |se.*/..#|include |
|00003a00| 22 78 6c 69 73 70 2e 68 | 22 0a 0a 2f 2a 20 65 78 |"xlisp.h|"../* ex|
|00003a10| 74 65 72 6e 61 6c 20 76 | 61 72 69 61 62 6c 65 73 |ternal v|ariables|
|00003a20| 20 2a 2f 0a 65 78 74 65 | 72 6e 20 4e 4f 44 45 20 | */.exte|rn NODE |
|00003a30| 2a 2a 2a 78 6c 73 74 61 | 63 6b 2c 2a 78 6c 65 6e |***xlsta|ck,*xlen|
|00003a40| 76 2c 2a 78 6c 76 61 6c | 75 65 3b 0a 65 78 74 65 |v,*xlval|ue;.exte|
|00003a50| 72 6e 20 4e 4f 44 45 20 | 2a 73 5f 75 6e 62 6f 75 |rn NODE |*s_unbou|
|00003a60| 6e 64 3b 0a 65 78 74 65 | 72 6e 20 4e 4f 44 45 20 |nd;.exte|rn NODE |
|00003a70| 2a 73 5f 65 76 61 6c 68 | 6f 6f 6b 2c 2a 73 5f 61 |*s_evalh|ook,*s_a|
|00003a80| 70 70 6c 79 68 6f 6f 6b | 3b 0a 65 78 74 65 72 6e |pplyhook|;.extern|
|00003a90| 20 4e 4f 44 45 20 2a 74 | 72 75 65 3b 0a 0a 2f 2a | NODE *t|rue;../*|
|00003aa0| 20 65 78 74 65 72 6e 61 | 6c 20 72 6f 75 74 69 6e | externa|l routin|
|00003ab0| 65 73 20 2a 2f 0a 65 78 | 74 65 72 6e 20 4e 4f 44 |es */.ex|tern NOD|
|00003ac0| 45 20 2a 78 6c 78 65 76 | 61 6c 28 29 3b 0a 0a 2f |E *xlxev|al();../|
|00003ad0| 2a 20 66 6f 72 77 61 72 | 64 20 64 65 63 6c 61 72 |* forwar|d declar|
|00003ae0| 61 74 69 6f 6e 73 20 2a | 2f 0a 46 4f 52 57 41 52 |ations *|/.FORWAR|
|00003af0| 44 20 4e 4f 44 45 20 2a | 6c 65 74 28 29 3b 0a 46 |D NODE *|let();.F|
|00003b00| 4f 52 57 41 52 44 20 4e | 4f 44 45 20 2a 70 72 6f |ORWARD N|ODE *pro|
|00003b10| 67 28 29 3b 0a 46 4f 52 | 57 41 52 44 20 4e 4f 44 |g();.FOR|WARD NOD|
|00003b20| 45 20 2a 70 72 6f 67 78 | 28 29 3b 0a 46 4f 52 57 |E *progx|();.FORW|
|00003b30| 41 52 44 20 4e 4f 44 45 | 20 2a 64 6f 6c 6f 6f 70 |ARD NODE| *doloop|
|00003b40| 28 29 3b 0a 0a 2f 2a 20 | 78 63 6f 6e 64 20 2d 20 |();../* |xcond - |
|00003b50| 62 75 69 6c 74 2d 69 6e | 20 66 75 6e 63 74 69 6f |built-in| functio|
|00003b60| 6e 20 27 63 6f 6e 64 27 | 20 2a 2f 0a 4e 4f 44 45 |n 'cond'| */.NODE|
|00003b70| 20 2a 78 63 6f 6e 64 28 | 61 72 67 73 29 0a 20 20 | *xcond(|args). |
|00003b80| 4e 4f 44 45 20 2a 61 72 | 67 73 3b 0a 7b 0a 20 20 |NODE *ar|gs;.{. |
|00003b90| 20 20 4e 4f 44 45 20 2a | 2a 2a 6f 6c 64 73 74 6b | NODE *|**oldstk|
|00003ba0| 2c 2a 61 72 67 2c 2a 6c | 69 73 74 2c 2a 76 61 6c |,*arg,*l|ist,*val|
|00003bb0| 3b 0a 0a 20 20 20 20 2f | 2a 20 63 72 65 61 74 65 |;.. /|* create|
|00003bc0| 20 61 20 6e 65 77 20 73 | 74 61 63 6b 20 66 72 61 | a new s|tack fra|
|00003bd0| 6d 65 20 2a 2f 0a 20 20 | 20 20 6f 6c 64 73 74 6b |me */. | oldstk|
|00003be0| 20 3d 20 78 6c 73 61 76 | 65 28 26 61 72 67 2c 26 | = xlsav|e(&arg,&|
|00003bf0| 6c 69 73 74 2c 28 4e 4f | 44 45 20 2a 2a 29 4e 55 |list,(NO|DE **)NU|
|00003c00| 4c 4c 29 3b 0a 0a 20 20 | 20 20 2f 2a 20 69 6e 69 |LL);.. | /* ini|
|00003c10| 74 69 61 6c 69 7a 65 20 | 2a 2f 0a 20 20 20 20 61 |tialize |*/. a|
|00003c20| 72 67 20 3d 20 61 72 67 | 73 3b 0a 0a 20 20 20 20 |rg = arg|s;.. |
|00003c30| 2f 2a 20 69 6e 69 74 69 | 61 6c 69 7a 65 20 74 68 |/* initi|alize th|
|00003c40| 65 20 72 65 74 75 72 6e | 20 76 61 6c 75 65 20 2a |e return| value *|
|00003c50| 2f 0a 20 20 20 20 76 61 | 6c 20 3d 20 4e 49 4c 3b |/. va|l = NIL;|
|00003c60| 0a 0a 20 20 20 20 2f 2a | 20 66 69 6e 64 20 61 20 |.. /*| find a |
|00003c70| 70 72 65 64 69 63 61 74 | 65 20 74 68 61 74 20 69 |predicat|e that i|
|00003c80| 73 20 74 72 75 65 20 2a | 2f 0a 20 20 20 20 77 68 |s true *|/. wh|
|00003c90| 69 6c 65 20 28 61 72 67 | 29 20 7b 0a 0a 09 2f 2a |ile (arg|) {.../*|
|00003ca0| 20 67 65 74 20 74 68 65 | 20 6e 65 78 74 20 63 6f | get the| next co|
|00003cb0| 6e 64 69 74 69 6f 6e 61 | 6c 20 2a 2f 0a 09 6c 69 |nditiona|l */..li|
|00003cc0| 73 74 20 3d 20 78 6c 6d | 61 74 63 68 28 4c 49 53 |st = xlm|atch(LIS|
|00003cd0| 54 2c 26 61 72 67 29 3b | 0a 0a 09 2f 2a 20 65 76 |T,&arg);|.../* ev|
|00003ce0| 61 6c 75 61 74 65 20 74 | 68 65 20 70 72 65 64 69 |aluate t|he predi|
|00003cf0| 63 61 74 65 20 70 61 72 | 74 20 2a 2f 0a 09 69 66 |cate par|t */..if|
|00003d00| 20 28 76 61 6c 20 3d 20 | 78 6c 65 76 61 72 67 28 | (val = |xlevarg(|
|00003d10| 26 6c 69 73 74 29 29 20 | 7b 0a 0a 09 20 20 20 20 |&list)) |{... |
|00003d20| 2f 2a 20 65 76 61 6c 75 | 61 74 65 20 65 61 63 68 |/* evalu|ate each|
|00003d30| 20 65 78 70 72 65 73 73 | 69 6f 6e 20 2a 2f 0a 09 | express|ion */..|
|00003d40| 20 20 20 20 77 68 69 6c | 65 20 28 6c 69 73 74 29 | whil|e (list)|
|00003d50| 0a 09 09 76 61 6c 20 3d | 20 78 6c 65 76 61 72 67 |...val =| xlevarg|
|00003d60| 28 26 6c 69 73 74 29 3b | 0a 0a 09 20 20 20 20 2f |(&list);|... /|
|00003d70| 2a 20 65 78 69 74 20 74 | 68 65 20 6c 6f 6f 70 20 |* exit t|he loop |
|00003d80| 2a 2f 0a 09 20 20 20 20 | 62 72 65 61 6b 3b 0a 09 |*/.. |break;..|
|00003d90| 7d 0a 20 20 20 20 7d 0a | 0a 20 20 20 20 2f 2a 20 |}. }.|. /* |
|00003da0| 72 65 73 74 6f 72 65 20 | 74 68 65 20 70 72 65 76 |restore |the prev|
|00003db0| 69 6f 75 73 20 73 74 61 | 63 6b 20 66 72 61 6d 65 |ious sta|ck frame|
|00003dc0| 20 2a 2f 0a 20 20 20 20 | 78 6c 73 74 61 63 6b 20 | */. |xlstack |
|00003dd0| 3d 20 6f 6c 64 73 74 6b | 3b 0a 0a 20 20 20 20 2f |= oldstk|;.. /|
|00003de0| 2a 20 72 65 74 75 72 6e | 20 74 68 65 20 76 61 6c |* return| the val|
|00003df0| 75 65 20 2a 2f 0a 20 20 | 20 20 72 65 74 75 72 6e |ue */. | return|
|00003e00| 20 28 76 61 6c 29 3b 0a | 7d 0a 0a 2f 2a 20 78 63 | (val);.|}../* xc|
|00003e10| 61 73 65 20 2d 20 62 75 | 69 6c 74 2d 69 6e 20 66 |ase - bu|ilt-in f|
|00003e20| 75 6e 63 74 69 6f 6e 20 | 27 63 61 73 65 27 20 2a |unction |'case' *|
|00003e30| 2f 0a 4e 4f 44 45 20 2a | 78 63 61 73 65 28 61 72 |/.NODE *|xcase(ar|
|00003e40| 67 73 29 0a 20 20 4e 4f | 44 45 20 2a 61 72 67 73 |gs). NO|DE *args|
|00003e50| 3b 0a 7b 0a 20 20 20 20 | 4e 4f 44 45 20 2a 2a 2a |;.{. |NODE ***|
|00003e60| 6f 6c 64 73 74 6b 2c 2a | 6b 65 79 2c 2a 61 72 67 |oldstk,*|key,*arg|
|00003e70| 2c 2a 63 6c 61 75 73 65 | 2c 2a 6c 69 73 74 2c 2a |,*clause|,*list,*|
|00003e80| 76 61 6c 3b 0a 0a 20 20 | 20 20 2f 2a 20 63 72 65 |val;.. | /* cre|
|00003e90| 61 74 65 20 61 20 6e 65 | 77 20 73 74 61 63 6b 20 |ate a ne|w stack |
|00003ea0| 66 72 61 6d 65 20 2a 2f | 0a 20 20 20 20 6f 6c 64 |frame */|. old|
|00003eb0| 73 74 6b 20 3d 20 78 6c | 73 61 76 65 28 26 6b 65 |stk = xl|save(&ke|
|00003ec0| 79 2c 26 61 72 67 2c 26 | 63 6c 61 75 73 65 2c 28 |y,&arg,&|clause,(|
|00003ed0| 4e 4f 44 45 20 2a 2a 29 | 4e 55 4c 4c 29 3b 0a 0a |NODE **)|NULL);..|
|00003ee0| 20 20 20 20 2f 2a 20 69 | 6e 69 74 69 61 6c 69 7a | /* i|nitializ|
|00003ef0| 65 20 2a 2f 0a 20 20 20 | 20 61 72 67 20 3d 20 61 |e */. | arg = a|
|00003f00| 72 67 73 3b 0a 0a 20 20 | 20 20 2f 2a 20 67 65 74 |rgs;.. | /* get|
|00003f10| 20 74 68 65 20 6b 65 79 | 20 65 78 70 72 65 73 73 | the key| express|
|00003f20| 69 6f 6e 20 2a 2f 0a 20 | 20 20 20 6b 65 79 20 3d |ion */. | key =|
|00003f30| 20 78 6c 65 76 61 72 67 | 28 26 61 72 67 29 3b 0a | xlevarg|(&arg);.|
|00003f40| 0a 20 20 20 20 2f 2a 20 | 69 6e 69 74 69 61 6c 69 |. /* |initiali|
|00003f50| 7a 65 20 74 68 65 20 72 | 65 74 75 72 6e 20 76 61 |ze the r|eturn va|
|00003f60| 6c 75 65 20 2a 2f 0a 20 | 20 20 20 76 61 6c 20 3d |lue */. | val =|
|00003f70| 20 4e 49 4c 3b 0a 0a 20 | 20 20 20 2f 2a 20 66 69 | NIL;.. | /* fi|
|00003f80| 6e 64 20 61 20 63 61 73 | 65 20 74 68 61 74 20 6d |nd a cas|e that m|
|00003f90| 61 74 63 68 65 73 20 2a | 2f 0a 20 20 20 20 77 68 |atches *|/. wh|
|00003fa0| 69 6c 65 20 28 61 72 67 | 29 20 7b 0a 0a 09 2f 2a |ile (arg|) {.../*|
|00003fb0| 20 67 65 74 20 74 68 65 | 20 6e 65 78 74 20 63 61 | get the| next ca|
|00003fc0| 73 65 20 63 6c 61 75 73 | 65 20 2a 2f 0a 09 63 6c |se claus|e */..cl|
|00003fd0| 61 75 73 65 20 3d 20 78 | 6c 6d 61 74 63 68 28 4c |ause = x|lmatch(L|
|00003fe0| 49 53 54 2c 26 61 72 67 | 29 3b 0a 0a 09 2f 2a 20 |IST,&arg|);.../* |
|00003ff0| 63 6f 6d 70 61 72 65 20 | 74 68 65 20 6b 65 79 20 |compare |the key |
|00004000| 6c 69 73 74 20 61 67 61 | 69 6e 73 74 20 74 68 65 |list aga|inst the|
|00004010| 20 6b 65 79 20 2a 2f 0a | 09 69 66 20 28 28 6c 69 | key */.|.if ((li|
|00004020| 73 74 20 3d 20 78 6c 61 | 72 67 28 26 63 6c 61 75 |st = xla|rg(&clau|
|00004030| 73 65 29 29 20 3d 3d 20 | 74 72 75 65 20 7c 7c 0a |se)) == |true ||.|
|00004040| 20 20 20 20 20 20 20 20 | 20 20 20 20 28 6c 69 73 | | (lis|
|00004050| 74 70 28 6c 69 73 74 29 | 20 26 26 20 6b 65 79 70 |tp(list)| && keyp|
|00004060| 72 65 73 65 6e 74 28 6b | 65 79 2c 6c 69 73 74 29 |resent(k|ey,list)|
|00004070| 29 20 7c 7c 0a 20 20 20 | 20 20 20 20 20 20 20 20 |) ||. | |
|00004080| 20 65 71 6c 28 6b 65 79 | 2c 6c 69 73 74 29 29 20 | eql(key|,list)) |
|00004090| 7b 0a 0a 09 20 20 20 20 | 2f 2a 20 65 76 61 6c 75 |{... |/* evalu|
|000040a0| 61 74 65 20 65 61 63 68 | 20 65 78 70 72 65 73 73 |ate each| express|
|000040b0| 69 6f 6e 20 2a 2f 0a 09 | 20 20 20 20 77 68 69 6c |ion */..| whil|
|000040c0| 65 20 28 63 6c 61 75 73 | 65 29 0a 09 09 76 61 6c |e (claus|e)...val|
|000040d0| 20 3d 20 78 6c 65 76 61 | 72 67 28 26 63 6c 61 75 | = xleva|rg(&clau|
|000040e0| 73 65 29 3b 0a 0a 09 20 | 20 20 20 2f 2a 20 65 78 |se);... | /* ex|
|000040f0| 69 74 20 74 68 65 20 6c | 6f 6f 70 20 2a 2f 0a 09 |it the l|oop */..|
|00004100| 20 20 20 20 62 72 65 61 | 6b 3b 0a 09 7d 0a 20 20 | brea|k;..}. |
|00004110| 20 20 7d 0a 0a 20 20 20 | 20 2f 2a 20 72 65 73 74 | }.. | /* rest|
|00004120| 6f 72 65 20 74 68 65 20 | 70 72 65 76 69 6f 75 73 |ore the |previous|
|00004130| 20 73 74 61 63 6b 20 66 | 72 61 6d 65 20 2a 2f 0a | stack f|rame */.|
|00004140| 20 20 20 20 78 6c 73 74 | 61 63 6b 20 3d 20 6f 6c | xlst|ack = ol|
|00004150| 64 73 74 6b 3b 0a 0a 20 | 20 20 20 2f 2a 20 72 65 |dstk;.. | /* re|
|00004160| 74 75 72 6e 20 74 68 65 | 20 76 61 6c 75 65 20 2a |turn the| value *|
|00004170| 2f 0a 20 20 20 20 72 65 | 74 75 72 6e 20 28 76 61 |/. re|turn (va|
|00004180| 6c 29 3b 0a 7d 0a 0a 2f | 2a 20 6b 65 79 70 72 65 |l);.}../|* keypre|
|00004190| 73 65 6e 74 20 2d 20 63 | 68 65 63 6b 20 66 6f 72 |sent - c|heck for|
|000041a0| 20 74 68 65 20 70 72 65 | 73 65 6e 63 65 20 6f 66 | the pre|sence of|
|000041b0| 20 61 20 6b 65 79 20 69 | 6e 20 61 20 6c 69 73 74 | a key i|n a list|
|000041c0| 20 2a 2f 0a 4c 4f 43 41 | 4c 20 69 6e 74 20 6b 65 | */.LOCA|L int ke|
|000041d0| 79 70 72 65 73 65 6e 74 | 28 6b 65 79 2c 6c 69 73 |ypresent|(key,lis|
|000041e0| 74 29 0a 20 20 4e 4f 44 | 45 20 2a 6b 65 79 2c 2a |t). NOD|E *key,*|
|000041f0| 6c 69 73 74 3b 0a 7b 0a | 20 20 20 20 66 6f 72 20 |list;.{.| for |
|00004200| 28 3b 20 63 6f 6e 73 70 | 28 6c 69 73 74 29 3b 20 |(; consp|(list); |
|00004210| 6c 69 73 74 20 3d 20 63 | 64 72 28 6c 69 73 74 29 |list = c|dr(list)|
|00004220| 29 0a 09 69 66 20 28 65 | 71 6c 28 63 61 72 28 6c |)..if (e|ql(car(l|
|00004230| 69 73 74 29 2c 6b 65 79 | 29 29 0a 09 20 20 20 20 |ist),key|)).. |
|00004240| 72 65 74 75 72 6e 20 28 | 54 52 55 45 29 3b 0a 20 |return (|TRUE);. |
|00004250| 20 20 20 72 65 74 75 72 | 6e 20 28 46 41 4c 53 45 | retur|n (FALSE|
|00004260| 29 3b 0a 7d 0a 0a 2f 2a | 20 78 61 6e 64 20 2d 20 |);.}../*| xand - |
|00004270| 62 75 69 6c 74 2d 69 6e | 20 66 75 6e 63 74 69 6f |built-in| functio|
|00004280| 6e 20 27 61 6e 64 27 20 | 2a 2f 0a 4e 4f 44 45 20 |n 'and' |*/.NODE |
|00004290| 2a 78 61 6e 64 28 61 72 | 67 73 29 0a 20 20 4e 4f |*xand(ar|gs). NO|
|000042a0| 44 45 20 2a 61 72 67 73 | 3b 0a 7b 0a 20 20 20 20 |DE *args|;.{. |
|000042b0| 4e 4f 44 45 20 2a 2a 2a | 6f 6c 64 73 74 6b 2c 2a |NODE ***|oldstk,*|
|000042c0| 61 72 67 2c 2a 76 61 6c | 3b 0a 0a 20 20 20 20 2f |arg,*val|;.. /|
|000042d0| 2a 20 63 72 65 61 74 65 | 20 61 20 6e 65 77 20 73 |* create| a new s|
|000042e0| 74 61 63 6b 20 66 72 61 | 6d 65 20 2a 2f 0a 20 20 |tack fra|me */. |
|000042f0| 20 20 6f 6c 64 73 74 6b | 20 3d 20 78 6c 73 61 76 | oldstk| = xlsav|
|00004300| 65 28 26 61 72 67 2c 28 | 4e 4f 44 45 20 2a 2a 29 |e(&arg,(|NODE **)|
|00004310| 4e 55 4c 4c 29 3b 0a 0a | 20 20 20 20 2f 2a 20 69 |NULL);..| /* i|
|00004320| 6e 69 74 69 61 6c 69 7a | 65 20 2a 2f 0a 20 20 20 |nitializ|e */. |
|00004330| 20 61 72 67 20 3d 20 61 | 72 67 73 3b 0a 20 20 20 | arg = a|rgs;. |
|00004340| 20 76 61 6c 20 3d 20 74 | 72 75 65 3b 0a 0a 20 20 | val = t|rue;.. |
|00004350| 20 20 2f 2a 20 65 76 61 | 6c 75 61 74 65 20 65 61 | /* eva|luate ea|
|00004360| 63 68 20 61 72 67 75 6d | 65 6e 74 20 2a 2f 0a 20 |ch argum|ent */. |
|00004370| 20 20 20 77 68 69 6c 65 | 20 28 61 72 67 29 0a 0a | while| (arg)..|
|00004380| 09 2f 2a 20 67 65 74 20 | 74 68 65 20 6e 65 78 74 |./* get |the next|
|00004390| 20 61 72 67 75 6d 65 6e | 74 20 2a 2f 0a 09 69 66 | argumen|t */..if|
|000043a0| 20 28 28 76 61 6c 20 3d | 20 78 6c 65 76 61 72 67 | ((val =| xlevarg|
|000043b0| 28 26 61 72 67 29 29 20 | 3d 3d 20 4e 49 4c 29 0a |(&arg)) |== NIL).|
|000043c0| 09 20 20 20 20 62 72 65 | 61 6b 3b 0a 0a 20 20 20 |. bre|ak;.. |
|000043d0| 20 2f 2a 20 72 65 73 74 | 6f 72 65 20 74 68 65 20 | /* rest|ore the |
|000043e0| 70 72 65 76 69 6f 75 73 | 20 73 74 61 63 6b 20 66 |previous| stack f|
|000043f0| 72 61 6d 65 20 2a 2f 0a | 20 20 20 20 78 6c 73 74 |rame */.| xlst|
|00004400| 61 63 6b 20 3d 20 6f 6c | 64 73 74 6b 3b 0a 0a 20 |ack = ol|dstk;.. |
|00004410| 20 20 20 2f 2a 20 72 65 | 74 75 72 6e 20 74 68 65 | /* re|turn the|
|00004420| 20 72 65 73 75 6c 74 20 | 76 61 6c 75 65 20 2a 2f | result |value */|
|00004430| 0a 20 20 20 20 72 65 74 | 75 72 6e 20 28 76 61 6c |. ret|urn (val|
|00004440| 29 3b 0a 7d 0a 0a 2f 2a | 20 78 6f 72 20 2d 20 62 |);.}../*| xor - b|
|00004450| 75 69 6c 74 2d 69 6e 20 | 66 75 6e 63 74 69 6f 6e |uilt-in |function|
|00004460| 20 27 6f 72 27 20 2a 2f | 0a 4e 4f 44 45 20 2a 78 | 'or' */|.NODE *x|
|00004470| 6f 72 28 61 72 67 73 29 | 0a 20 20 4e 4f 44 45 20 |or(args)|. NODE |
|00004480| 2a 61 72 67 73 3b 0a 7b | 0a 20 20 20 20 4e 4f 44 |*args;.{|. NOD|
|00004490| 45 20 2a 2a 2a 6f 6c 64 | 73 74 6b 2c 2a 61 72 67 |E ***old|stk,*arg|
|000044a0| 2c 2a 76 61 6c 3b 0a 0a | 20 20 20 20 2f 2a 20 63 |,*val;..| /* c|
|000044b0| 72 65 61 74 65 20 61 20 | 6e 65 77 20 73 74 61 63 |reate a |new stac|
|000044c0| 6b 20 66 72 61 6d 65 20 | 2a 2f 0a 20 20 20 20 6f |k frame |*/. o|
|000044d0| 6c 64 73 74 6b 20 3d 20 | 78 6c 73 61 76 65 28 26 |ldstk = |xlsave(&|
|000044e0| 61 72 67 2c 28 4e 4f 44 | 45 20 2a 2a 29 4e 55 4c |arg,(NOD|E **)NUL|
|000044f0| 4c 29 3b 0a 0a 20 20 20 | 20 2f 2a 20 69 6e 69 74 |L);.. | /* init|
|00004500| 69 61 6c 69 7a 65 20 2a | 2f 0a 20 20 20 20 61 72 |ialize *|/. ar|
|00004510| 67 20 3d 20 61 72 67 73 | 3b 0a 20 20 20 20 76 61 |g = args|;. va|
|00004520| 6c 20 3d 20 4e 49 4c 3b | 0a 0a 20 20 20 20 2f 2a |l = NIL;|.. /*|
|00004530| 20 65 76 61 6c 75 61 74 | 65 20 65 61 63 68 20 61 | evaluat|e each a|
|00004540| 72 67 75 6d 65 6e 74 20 | 2a 2f 0a 20 20 20 20 77 |rgument |*/. w|
|00004550| 68 69 6c 65 20 28 61 72 | 67 29 0a 09 69 66 20 28 |hile (ar|g)..if (|
|00004560| 28 76 61 6c 20 3d 20 78 | 6c 65 76 61 72 67 28 26 |(val = x|levarg(&|
|00004570| 61 72 67 29 29 29 0a 09 | 20 20 20 20 62 72 65 61 |arg)))..| brea|
|00004580| 6b 3b 0a 0a 20 20 20 20 | 2f 2a 20 72 65 73 74 6f |k;.. |/* resto|
|00004590| 72 65 20 74 68 65 20 70 | 72 65 76 69 6f 75 73 20 |re the p|revious |
|000045a0| 73 74 61 63 6b 20 66 72 | 61 6d 65 20 2a 2f 0a 20 |stack fr|ame */. |
|000045b0| 20 20 20 78 6c 73 74 61 | 63 6b 20 3d 20 6f 6c 64 | xlsta|ck = old|
|000045c0| 73 74 6b 3b 0a 0a 20 20 | 20 20 2f 2a 20 72 65 74 |stk;.. | /* ret|
|000045d0| 75 72 6e 20 74 68 65 20 | 72 65 73 75 6c 74 20 76 |urn the |result v|
|000045e0| 61 6c 75 65 20 2a 2f 0a | 20 20 20 20 72 65 74 75 |alue */.| retu|
|000045f0| 72 6e 20 28 76 61 6c 29 | 3b 0a 7d 0a 0a 2f 2a 20 |rn (val)|;.}../* |
|00004600| 78 69 66 20 2d 20 62 75 | 69 6c 74 2d 69 6e 20 66 |xif - bu|ilt-in f|
|00004610| 75 6e 63 74 69 6f 6e 20 | 27 69 66 27 20 2a 2f 0a |unction |'if' */.|
|00004620| 4e 4f 44 45 20 2a 78 69 | 66 28 61 72 67 73 29 0a |NODE *xi|f(args).|
|00004630| 20 20 4e 4f 44 45 20 2a | 61 72 67 73 3b 0a 7b 0a | NODE *|args;.{.|
|00004640| 20 20 20 20 4e 4f 44 45 | 20 2a 2a 2a 6f 6c 64 73 | NODE| ***olds|
|00004650| 74 6b 2c 2a 74 65 73 74 | 65 78 70 72 2c 2a 74 68 |tk,*test|expr,*th|
|00004660| 65 6e 65 78 70 72 2c 2a | 65 6c 73 65 65 78 70 72 |enexpr,*|elseexpr|
|00004670| 2c 2a 76 61 6c 3b 0a 0a | 20 20 20 20 2f 2a 20 63 |,*val;..| /* c|
|00004680| 72 65 61 74 65 20 61 20 | 6e 65 77 20 73 74 61 63 |reate a |new stac|
|00004690| 6b 20 66 72 61 6d 65 20 | 2a 2f 0a 20 20 20 20 6f |k frame |*/. o|
|000046a0| 6c 64 73 74 6b 20 3d 20 | 78 6c 73 61 76 65 28 26 |ldstk = |xlsave(&|
|000046b0| 74 65 73 74 65 78 70 72 | 2c 26 74 68 65 6e 65 78 |testexpr|,&thenex|
|000046c0| 70 72 2c 26 65 6c 73 65 | 65 78 70 72 2c 28 4e 4f |pr,&else|expr,(NO|
|000046d0| 44 45 20 2a 2a 29 4e 55 | 4c 4c 29 3b 0a 0a 20 20 |DE **)NU|LL);.. |
|000046e0| 20 20 2f 2a 20 67 65 74 | 20 74 68 65 20 74 65 73 | /* get| the tes|
|000046f0| 74 20 65 78 70 72 65 73 | 73 69 6f 6e 2c 20 74 68 |t expres|sion, th|
|00004700| 65 6e 20 63 6c 61 75 73 | 65 20 61 6e 64 20 65 6c |en claus|e and el|
|00004710| 73 65 20 63 6c 61 75 73 | 65 20 2a 2f 0a 20 20 20 |se claus|e */. |
|00004720| 20 74 65 73 74 65 78 70 | 72 20 3d 20 78 6c 61 72 | testexp|r = xlar|
|00004730| 67 28 26 61 72 67 73 29 | 3b 0a 20 20 20 20 74 68 |g(&args)|;. th|
|00004740| 65 6e 65 78 70 72 20 3d | 20 78 6c 61 72 67 28 26 |enexpr =| xlarg(&|
|00004750| 61 72 67 73 29 3b 0a 20 | 20 20 20 65 6c 73 65 65 |args);. | elsee|
|00004760| 78 70 72 20 3d 20 28 61 | 72 67 73 20 3f 20 78 6c |xpr = (a|rgs ? xl|
|00004770| 61 72 67 28 26 61 72 67 | 73 29 20 3a 20 4e 49 4c |arg(&arg|s) : NIL|
|00004780| 29 3b 0a 20 20 20 20 78 | 6c 6c 61 73 74 61 72 67 |);. x|llastarg|
|00004790| 28 61 72 67 73 29 3b 0a | 0a 20 20 20 20 2f 2a 20 |(args);.|. /* |
|000047a0| 65 76 61 6c 75 61 74 65 | 20 74 68 65 20 61 70 70 |evaluate| the app|
|000047b0| 72 6f 70 72 69 61 74 65 | 20 63 6c 61 75 73 65 20 |ropriate| clause |
|000047c0| 2a 2f 0a 20 20 20 20 76 | 61 6c 20 3d 20 78 6c 65 |*/. v|al = xle|
|000047d0| 76 61 6c 28 78 6c 65 76 | 61 6c 28 74 65 73 74 65 |val(xlev|al(teste|
|000047e0| 78 70 72 29 20 3f 20 74 | 68 65 6e 65 78 70 72 20 |xpr) ? t|henexpr |
|000047f0| 3a 20 65 6c 73 65 65 78 | 70 72 29 3b 0a 0a 20 20 |: elseex|pr);.. |
|00004800| 20 20 2f 2a 20 72 65 73 | 74 6f 72 65 20 74 68 65 | /* res|tore the|
|00004810| 20 70 72 65 76 69 6f 75 | 73 20 73 74 61 63 6b 20 | previou|s stack |
|00004820| 66 72 61 6d 65 20 2a 2f | 0a 20 20 20 20 78 6c 73 |frame */|. xls|
|00004830| 74 61 63 6b 20 3d 20 6f | 6c 64 73 74 6b 3b 0a 0a |tack = o|ldstk;..|
|00004840| 20 20 20 20 2f 2a 20 72 | 65 74 75 72 6e 20 74 68 | /* r|eturn th|
|00004850| 65 20 6c 61 73 74 20 76 | 61 6c 75 65 20 2a 2f 0a |e last v|alue */.|
|00004860| 20 20 20 20 72 65 74 75 | 72 6e 20 28 76 61 6c 29 | retu|rn (val)|
|00004870| 3b 0a 7d 0a 0a 2f 2a 20 | 78 6c 65 74 20 2d 20 62 |;.}../* |xlet - b|
|00004880| 75 69 6c 74 2d 69 6e 20 | 66 75 6e 63 74 69 6f 6e |uilt-in |function|
|00004890| 20 27 6c 65 74 27 20 2a | 2f 0a 4e 4f 44 45 20 2a | 'let' *|/.NODE *|
|000048a0| 78 6c 65 74 28 61 72 67 | 73 29 0a 20 20 4e 4f 44 |xlet(arg|s). NOD|
|000048b0| 45 20 2a 61 72 67 73 3b | 0a 7b 0a 20 20 20 20 72 |E *args;|.{. r|
|000048c0| 65 74 75 72 6e 20 28 6c | 65 74 28 61 72 67 73 2c |eturn (l|et(args,|
|000048d0| 54 52 55 45 29 29 3b 0a | 7d 0a 0a 2f 2a 20 78 6c |TRUE));.|}../* xl|
|000048e0| 65 74 73 74 61 72 20 2d | 20 62 75 69 6c 74 2d 69 |etstar -| built-i|
|000048f0| 6e 20 66 75 6e 63 74 69 | 6f 6e 20 27 6c 65 74 2a |n functi|on 'let*|
|00004900| 27 20 2a 2f 0a 4e 4f 44 | 45 20 2a 78 6c 65 74 73 |' */.NOD|E *xlets|
|00004910| 74 61 72 28 61 72 67 73 | 29 0a 20 20 4e 4f 44 45 |tar(args|). NODE|
|00004920| 20 2a 61 72 67 73 3b 0a | 7b 0a 20 20 20 20 72 65 | *args;.|{. re|
|00004930| 74 75 72 6e 20 28 6c 65 | 74 28 61 72 67 73 2c 46 |turn (le|t(args,F|
|00004940| 41 4c 53 45 29 29 3b 0a | 7d 0a 0a 2f 2a 20 6c 65 |ALSE));.|}../* le|
|00004950| 74 20 2d 20 63 6f 6d 6d | 6f 6e 20 6c 65 74 20 72 |t - comm|on let r|
|00004960| 6f 75 74 69 6e 65 20 2a | 2f 0a 4c 4f 43 41 4c 20 |outine *|/.LOCAL |
|00004970| 4e 4f 44 45 20 2a 6c 65 | 74 28 61 72 67 73 2c 70 |NODE *le|t(args,p|
|00004980| 66 6c 61 67 29 0a 20 20 | 4e 4f 44 45 20 2a 61 72 |flag). |NODE *ar|
|00004990| 67 73 3b 20 69 6e 74 20 | 70 66 6c 61 67 3b 0a 7b |gs; int |pflag;.{|
|000049a0| 0a 20 20 20 20 4e 4f 44 | 45 20 2a 2a 2a 6f 6c 64 |. NOD|E ***old|
|000049b0| 73 74 6b 2c 2a 6e 65 77 | 65 6e 76 2c 2a 61 72 67 |stk,*new|env,*arg|
|000049c0| 2c 2a 76 61 6c 3b 0a 0a | 20 20 20 20 2f 2a 20 63 |,*val;..| /* c|
|000049d0| 72 65 61 74 65 20 61 20 | 6e 65 77 20 73 74 61 63 |reate a |new stac|
|000049e0| 6b 20 66 72 61 6d 65 20 | 2a 2f 0a 20 20 20 20 6f |k frame |*/. o|
|000049f0| 6c 64 73 74 6b 20 3d 20 | 78 6c 73 61 76 65 28 26 |ldstk = |xlsave(&|
|00004a00| 6e 65 77 65 6e 76 2c 26 | 61 72 67 2c 28 4e 4f 44 |newenv,&|arg,(NOD|
|00004a10| 45 20 2a 2a 29 4e 55 4c | 4c 29 3b 0a 0a 20 20 20 |E **)NUL|L);.. |
|00004a20| 20 2f 2a 20 69 6e 69 74 | 69 61 6c 69 7a 65 20 2a | /* init|ialize *|
|00004a30| 2f 0a 20 20 20 20 61 72 | 67 20 3d 20 61 72 67 73 |/. ar|g = args|
|00004a40| 3b 0a 0a 20 20 20 20 2f | 2a 20 63 72 65 61 74 65 |;.. /|* create|
|00004a50| 20 61 20 6e 65 77 20 65 | 6e 76 69 72 6f 6e 6d 65 | a new e|nvironme|
|00004a60| 6e 74 20 66 72 61 6d 65 | 20 2a 2f 0a 20 20 20 20 |nt frame| */. |
|00004a70| 6e 65 77 65 6e 76 20 3d | 20 78 6c 66 72 61 6d 65 |newenv =| xlframe|
|00004a80| 28 78 6c 65 6e 76 29 3b | 0a 0a 20 20 20 20 2f 2a |(xlenv);|.. /*|
|00004a90| 20 67 65 74 20 74 68 65 | 20 6c 69 73 74 20 6f 66 | get the| list of|
|00004aa0| 20 62 69 6e 64 69 6e 67 | 73 20 61 6e 64 20 62 69 | binding|s and bi|
|00004ab0| 6e 64 20 74 68 65 20 73 | 79 6d 62 6f 6c 73 20 2a |nd the s|ymbols *|
|00004ac0| 2f 0a 20 20 20 20 69 66 | 20 28 21 70 66 6c 61 67 |/. if| (!pflag|
|00004ad0| 29 20 78 6c 65 6e 76 20 | 3d 20 6e 65 77 65 6e 76 |) xlenv |= newenv|
|00004ae0| 3b 0a 20 20 20 20 64 6f | 62 69 6e 64 69 6e 67 73 |;. do|bindings|
|00004af0| 28 78 6c 6d 61 74 63 68 | 28 4c 49 53 54 2c 26 61 |(xlmatch|(LIST,&a|
|00004b00| 72 67 29 2c 6e 65 77 65 | 6e 76 29 3b 0a 20 20 20 |rg),newe|nv);. |
|00004b10| 20 69 66 20 28 70 66 6c | 61 67 29 20 78 6c 65 6e | if (pfl|ag) xlen|
|00004b20| 76 20 3d 20 6e 65 77 65 | 6e 76 3b 0a 0a 20 20 20 |v = newe|nv;.. |
|00004b30| 20 2f 2a 20 65 78 65 63 | 75 74 65 20 74 68 65 20 | /* exec|ute the |
|00004b40| 63 6f 64 65 20 2a 2f 0a | 20 20 20 20 66 6f 72 20 |code */.| for |
|00004b50| 28 76 61 6c 20 3d 20 4e | 49 4c 3b 20 61 72 67 3b |(val = N|IL; arg;|
|00004b60| 20 29 0a 09 76 61 6c 20 | 3d 20 78 6c 65 76 61 72 | )..val |= xlevar|
|00004b70| 67 28 26 61 72 67 29 3b | 0a 0a 20 20 20 20 2f 2a |g(&arg);|.. /*|
|00004b80| 20 75 6e 62 69 6e 64 20 | 74 68 65 20 61 72 67 75 | unbind |the argu|
|00004b90| 6d 65 6e 74 73 20 2a 2f | 0a 20 20 20 20 78 6c 65 |ments */|. xle|
|00004ba0| 6e 76 20 3d 20 63 64 72 | 28 78 6c 65 6e 76 29 3b |nv = cdr|(xlenv);|
|00004bb0| 0a 0a 20 20 20 20 2f 2a | 20 72 65 73 74 6f 72 65 |.. /*| restore|
|00004bc0| 20 74 68 65 20 70 72 65 | 76 69 6f 75 73 20 73 74 | the pre|vious st|
|00004bd0| 61 63 6b 20 66 72 61 6d | 65 20 2a 2f 0a 20 20 20 |ack fram|e */. |
|00004be0| 20 78 6c 73 74 61 63 6b | 20 3d 20 6f 6c 64 73 74 | xlstack| = oldst|
|00004bf0| 6b 3b 0a 0a 20 20 20 20 | 2f 2a 20 72 65 74 75 72 |k;.. |/* retur|
|00004c00| 6e 20 74 68 65 20 72 65 | 73 75 6c 74 20 2a 2f 0a |n the re|sult */.|
|00004c10| 20 20 20 20 72 65 74 75 | 72 6e 20 28 76 61 6c 29 | retu|rn (val)|
|00004c20| 3b 0a 7d 0a 0a 2f 2a 20 | 78 70 72 6f 67 20 2d 20 |;.}../* |xprog - |
|00004c30| 62 75 69 6c 74 2d 69 6e | 20 66 75 6e 63 74 69 6f |built-in| functio|
|00004c40| 6e 20 27 70 72 6f 67 27 | 20 2a 2f 0a 4e 4f 44 45 |n 'prog'| */.NODE|
|00004c50| 20 2a 78 70 72 6f 67 28 | 61 72 67 73 29 0a 20 20 | *xprog(|args). |
|00004c60| 4e 4f 44 45 20 2a 61 72 | 67 73 3b 0a 7b 0a 20 20 |NODE *ar|gs;.{. |
|00004c70| 20 20 72 65 74 75 72 6e | 20 28 70 72 6f 67 28 61 | return| (prog(a|
|00004c80| 72 67 73 2c 54 52 55 45 | 29 29 3b 0a 7d 0a 0a 2f |rgs,TRUE|));.}../|
|00004c90| 2a 20 78 70 72 6f 67 73 | 74 61 72 20 2d 20 62 75 |* xprogs|tar - bu|
|00004ca0| 69 6c 74 2d 69 6e 20 66 | 75 6e 63 74 69 6f 6e 20 |ilt-in f|unction |
|00004cb0| 27 70 72 6f 67 2a 27 20 | 2a 2f 0a 4e 4f 44 45 20 |'prog*' |*/.NODE |
|00004cc0| 2a 78 70 72 6f 67 73 74 | 61 72 28 61 72 67 73 29 |*xprogst|ar(args)|
|00004cd0| 0a 20 20 4e 4f 44 45 20 | 2a 61 72 67 73 3b 0a 7b |. NODE |*args;.{|
|00004ce0| 0a 20 20 20 20 72 65 74 | 75 72 6e 20 28 70 72 6f |. ret|urn (pro|
|00004cf0| 67 28 61 72 67 73 2c 46 | 41 4c 53 45 29 29 3b 0a |g(args,F|ALSE));.|
|00004d00| 7d 0a 0a 2f 2a 20 70 72 | 6f 67 20 2d 20 63 6f 6d |}../* pr|og - com|
|00004d10| 6d 6f 6e 20 70 72 6f 67 | 20 72 6f 75 74 69 6e 65 |mon prog| routine|
|00004d20| 20 2a 2f 0a 4c 4f 43 41 | 4c 20 4e 4f 44 45 20 2a | */.LOCA|L NODE *|
|00004d30| 70 72 6f 67 28 61 72 67 | 73 2c 70 66 6c 61 67 29 |prog(arg|s,pflag)|
|00004d40| 0a 20 20 4e 4f 44 45 20 | 2a 61 72 67 73 3b 20 69 |. NODE |*args; i|
|00004d50| 6e 74 20 70 66 6c 61 67 | 3b 0a 7b 0a 20 20 20 20 |nt pflag|;.{. |
|00004d60| 4e 4f 44 45 20 2a 2a 2a | 6f 6c 64 73 74 6b 2c 2a |NODE ***|oldstk,*|
|00004d70| 6e 65 77 65 6e 76 2c 2a | 61 72 67 2c 2a 76 61 6c |newenv,*|arg,*val|
|00004d80| 3b 0a 0a 20 20 20 20 2f | 2a 20 63 72 65 61 74 65 |;.. /|* create|
|00004d90| 20 61 20 6e 65 77 20 73 | 74 61 63 6b 20 66 72 61 | a new s|tack fra|
|00004da0| 6d 65 20 2a 2f 0a 20 20 | 20 20 6f 6c 64 73 74 6b |me */. | oldstk|
|00004db0| 20 3d 20 78 6c 73 61 76 | 65 28 26 6e 65 77 65 6e | = xlsav|e(&newen|
|00004dc0| 76 2c 26 61 72 67 2c 28 | 4e 4f 44 45 20 2a 2a 29 |v,&arg,(|NODE **)|
|00004dd0| 4e 55 4c 4c 29 3b 0a 0a | 20 20 20 20 2f 2a 20 69 |NULL);..| /* i|
|00004de0| 6e 69 74 69 61 6c 69 7a | 65 20 2a 2f 0a 20 20 20 |nitializ|e */. |
|00004df0| 20 61 72 67 20 3d 20 61 | 72 67 73 3b 0a 0a 20 20 | arg = a|rgs;.. |
|00004e00| 20 20 2f 2a 20 63 72 65 | 61 74 65 20 61 20 6e 65 | /* cre|ate a ne|
|00004e10| 77 20 65 6e 76 69 72 6f | 6e 6d 65 6e 74 20 66 72 |w enviro|nment fr|
|00004e20| 61 6d 65 20 2a 2f 0a 20 | 20 20 20 6e 65 77 65 6e |ame */. | newen|
|00004e30| 76 20 3d 20 78 6c 66 72 | 61 6d 65 28 78 6c 65 6e |v = xlfr|ame(xlen|
|00004e40| 76 29 3b 0a 0a 20 20 20 | 20 2f 2a 20 67 65 74 20 |v);.. | /* get |
|00004e50| 74 68 65 20 6c 69 73 74 | 20 6f 66 20 62 69 6e 64 |the list| of bind|
|00004e60| 69 6e 67 73 20 61 6e 64 | 20 62 69 6e 64 20 74 68 |ings and| bind th|
|00004e70| 65 20 73 79 6d 62 6f 6c | 73 20 2a 2f 0a 20 20 20 |e symbol|s */. |
|00004e80| 20 69 66 20 28 21 70 66 | 6c 61 67 29 20 78 6c 65 | if (!pf|lag) xle|
|00004e90| 6e 76 20 3d 20 6e 65 77 | 65 6e 76 3b 0a 20 20 20 |nv = new|env;. |
|00004ea0| 20 64 6f 62 69 6e 64 69 | 6e 67 73 28 78 6c 6d 61 | dobindi|ngs(xlma|
|00004eb0| 74 63 68 28 4c 49 53 54 | 2c 26 61 72 67 29 2c 6e |tch(LIST|,&arg),n|
|00004ec0| 65 77 65 6e 76 29 3b 0a | 20 20 20 20 69 66 20 28 |ewenv);.| if (|
|00004ed0| 70 66 6c 61 67 29 20 78 | 6c 65 6e 76 20 3d 20 6e |pflag) x|lenv = n|
|00004ee0| 65 77 65 6e 76 3b 0a 0a | 20 20 20 20 2f 2a 20 65 |ewenv;..| /* e|
|00004ef0| 78 65 63 75 74 65 20 74 | 68 65 20 63 6f 64 65 20 |xecute t|he code |
|00004f00| 2a 2f 0a 20 20 20 20 74 | 61 67 62 6c 6f 63 6b 28 |*/. t|agblock(|
|00004f10| 61 72 67 2c 26 76 61 6c | 29 3b 0a 0a 20 20 20 20 |arg,&val|);.. |
|00004f20| 2f 2a 20 75 6e 62 69 6e | 64 20 74 68 65 20 61 72 |/* unbin|d the ar|
|00004f30| 67 75 6d 65 6e 74 73 20 | 2a 2f 0a 20 20 20 20 78 |guments |*/. x|
|00004f40| 6c 65 6e 76 20 3d 20 63 | 64 72 28 78 6c 65 6e 76 |lenv = c|dr(xlenv|
|00004f50| 29 3b 0a 0a 20 20 20 20 | 2f 2a 20 72 65 73 74 6f |);.. |/* resto|
|00004f60| 72 65 20 74 68 65 20 70 | 72 65 76 69 6f 75 73 20 |re the p|revious |
|00004f70| 73 74 61 63 6b 20 66 72 | 61 6d 65 20 2a 2f 0a 20 |stack fr|ame */. |
|00004f80| 20 20 20 78 6c 73 74 61 | 63 6b 20 3d 20 6f 6c 64 | xlsta|ck = old|
|00004f90| 73 74 6b 3b 0a 0a 20 20 | 20 20 2f 2a 20 72 65 74 |stk;.. | /* ret|
|00004fa0| 75 72 6e 20 74 68 65 20 | 72 65 73 75 6c 74 20 2a |urn the |result *|
|00004fb0| 2f 0a 20 20 20 20 72 65 | 74 75 72 6e 20 28 76 61 |/. re|turn (va|
|00004fc0| 6c 29 3b 0a 7d 0a 0a 2f | 2a 20 78 67 6f 20 2d 20 |l);.}../|* xgo - |
|00004fd0| 62 75 69 6c 74 2d 69 6e | 20 66 75 6e 63 74 69 6f |built-in| functio|
|00004fe0| 6e 20 27 67 6f 27 20 2a | 2f 0a 4e 4f 44 45 20 2a |n 'go' *|/.NODE *|
|00004ff0| 78 67 6f 28 61 72 67 73 | 29 0a 20 20 4e 4f 44 45 |xgo(args|). NODE|
|00005000| 20 2a 61 72 67 73 3b 0a | 7b 0a 20 20 20 20 4e 4f | *args;.|{. NO|
|00005010| 44 45 20 2a 6c 61 62 65 | 6c 3b 0a 0a 20 20 20 20 |DE *labe|l;.. |
|00005020| 2f 2a 20 67 65 74 20 74 | 68 65 20 74 61 72 67 65 |/* get t|he targe|
|00005030| 74 20 6c 61 62 65 6c 20 | 2a 2f 0a 20 20 20 20 6c |t label |*/. l|
|00005040| 61 62 65 6c 20 3d 20 78 | 6c 61 72 67 28 26 61 72 |abel = x|larg(&ar|
|00005050| 67 73 29 3b 0a 20 20 20 | 20 78 6c 6c 61 73 74 61 |gs);. | xllasta|
|00005060| 72 67 28 61 72 67 73 29 | 3b 0a 0a 20 20 20 20 2f |rg(args)|;.. /|
|00005070| 2a 20 74 72 61 6e 73 66 | 65 72 20 74 6f 20 74 68 |* transf|er to th|
|00005080| 65 20 6c 61 62 65 6c 20 | 2a 2f 0a 20 20 20 20 78 |e label |*/. x|
|00005090| 6c 67 6f 28 6c 61 62 65 | 6c 29 3b 0a 7d 0a 0a 2f |lgo(labe|l);.}../|
|000050a0| 2a 20 78 72 65 74 75 72 | 6e 20 2d 20 62 75 69 6c |* xretur|n - buil|
|000050b0| 74 2d 69 6e 20 66 75 6e | 63 74 69 6f 6e 20 27 72 |t-in fun|ction 'r|
|000050c0| 65 74 75 72 6e 27 20 2a | 2f 0a 4e 4f 44 45 20 2a |eturn' *|/.NODE *|
|000050d0| 78 72 65 74 75 72 6e 28 | 61 72 67 73 29 0a 20 20 |xreturn(|args). |
|000050e0| 4e 4f 44 45 20 2a 61 72 | 67 73 3b 0a 7b 0a 20 20 |NODE *ar|gs;.{. |
|000050f0| 20 20 4e 4f 44 45 20 2a | 76 61 6c 3b 0a 0a 20 20 | NODE *|val;.. |
|00005100| 20 20 2f 2a 20 67 65 74 | 20 74 68 65 20 72 65 74 | /* get| the ret|
|00005110| 75 72 6e 20 76 61 6c 75 | 65 20 2a 2f 0a 20 20 20 |urn valu|e */. |
|00005120| 20 76 61 6c 20 3d 20 28 | 61 72 67 73 20 3f 20 78 | val = (|args ? x|
|00005130| 6c 61 72 67 28 26 61 72 | 67 73 29 20 3a 20 4e 49 |larg(&ar|gs) : NI|
|00005140| 4c 29 3b 0a 20 20 20 20 | 78 6c 6c 61 73 74 61 72 |L);. |xllastar|
|00005150| 67 28 61 72 67 73 29 3b | 0a 0a 20 20 20 20 2f 2a |g(args);|.. /*|
|00005160| 20 72 65 74 75 72 6e 20 | 66 72 6f 6d 20 74 68 65 | return |from the|
|00005170| 20 69 6e 6e 65 72 20 6d | 6f 73 74 20 62 6c 6f 63 | inner m|ost bloc|
|00005180| 6b 20 2a 2f 0a 20 20 20 | 20 78 6c 72 65 74 75 72 |k */. | xlretur|
|00005190| 6e 28 76 61 6c 29 3b 0a | 7d 0a 0a 2f 2a 20 78 70 |n(val);.|}../* xp|
|000051a0| 72 6f 67 31 20 2d 20 62 | 75 69 6c 74 2d 69 6e 20 |rog1 - b|uilt-in |
|000051b0| 66 75 6e 63 74 69 6f 6e | 20 27 70 72 6f 67 31 27 |function| 'prog1'|
|000051c0| 20 2a 2f 0a 4e 4f 44 45 | 20 2a 78 70 72 6f 67 31 | */.NODE| *xprog1|
|000051d0| 28 61 72 67 73 29 0a 20 | 20 4e 4f 44 45 20 2a 61 |(args). | NODE *a|
|000051e0| 72 67 73 3b 0a 7b 0a 20 | 20 20 20 72 65 74 75 72 |rgs;.{. | retur|
|000051f0| 6e 20 28 70 72 6f 67 78 | 28 61 72 67 73 2c 31 29 |n (progx|(args,1)|
|00005200| 29 3b 0a 7d 0a 0a 2f 2a | 20 78 70 72 6f 67 32 20 |);.}../*| xprog2 |
|00005210| 2d 20 62 75 69 6c 74 2d | 69 6e 20 66 75 6e 63 74 |- built-|in funct|
|00005220| 69 6f 6e 20 27 70 72 6f | 67 32 27 20 2a 2f 0a 4e |ion 'pro|g2' */.N|
|00005230| 4f 44 45 20 2a 78 70 72 | 6f 67 32 28 61 72 67 73 |ODE *xpr|og2(args|
|00005240| 29 0a 20 20 4e 4f 44 45 | 20 2a 61 72 67 73 3b 0a |). NODE| *args;.|
|00005250| 7b 0a 20 20 20 20 72 65 | 74 75 72 6e 20 28 70 72 |{. re|turn (pr|
|00005260| 6f 67 78 28 61 72 67 73 | 2c 32 29 29 3b 0a 7d 0a |ogx(args|,2));.}.|
|00005270| 0a 2f 2a 20 70 72 6f 67 | 78 20 2d 20 63 6f 6d 6d |./* prog|x - comm|
|00005280| 6f 6e 20 70 72 6f 67 78 | 20 63 6f 64 65 20 2a 2f |on progx| code */|
|00005290| 0a 4c 4f 43 41 4c 20 4e | 4f 44 45 20 2a 70 72 6f |.LOCAL N|ODE *pro|
|000052a0| 67 78 28 61 72 67 73 2c | 6e 29 0a 20 20 4e 4f 44 |gx(args,|n). NOD|
|000052b0| 45 20 2a 61 72 67 73 3b | 20 69 6e 74 20 6e 3b 0a |E *args;| int n;.|
|000052c0| 7b 0a 20 20 20 20 4e 4f | 44 45 20 2a 2a 2a 6f 6c |{. NO|DE ***ol|
|000052d0| 64 73 74 6b 2c 2a 61 72 | 67 2c 2a 76 61 6c 3b 0a |dstk,*ar|g,*val;.|
|000052e0| 0a 20 20 20 20 2f 2a 20 | 63 72 65 61 74 65 20 61 |. /* |create a|
|000052f0| 20 6e 65 77 20 73 74 61 | 63 6b 20 66 72 61 6d 65 | new sta|ck frame|
|00005300| 20 2a 2f 0a 20 20 20 20 | 6f 6c 64 73 74 6b 20 3d | */. |oldstk =|
|00005310| 20 78 6c 73 61 76 65 28 | 26 61 72 67 2c 26 76 61 | xlsave(|&arg,&va|
|00005320| 6c 2c 28 4e 4f 44 45 20 | 2a 2a 29 4e 55 4c 4c 29 |l,(NODE |**)NULL)|
|00005330| 3b 0a 0a 20 20 20 20 2f | 2a 20 69 6e 69 74 69 61 |;.. /|* initia|
|00005340| 6c 69 7a 65 20 2a 2f 0a | 20 20 20 20 61 72 67 20 |lize */.| arg |
|00005350| 3d 20 61 72 67 73 3b 0a | 0a 20 20 20 20 2f 2a 20 |= args;.|. /* |
|00005360| 65 76 61 6c 75 61 74 65 | 20 74 68 65 20 66 69 72 |evaluate| the fir|
|00005370| 73 74 20 6e 20 65 78 70 | 72 65 73 73 69 6f 6e 73 |st n exp|ressions|
|00005380| 20 2a 2f 0a 20 20 20 20 | 77 68 69 6c 65 20 28 6e | */. |while (n|
|00005390| 2d 2d 29 0a 09 76 61 6c | 20 3d 20 78 6c 65 76 61 |--)..val| = xleva|
|000053a0| 72 67 28 26 61 72 67 29 | 3b 0a 0a 20 20 20 20 2f |rg(&arg)|;.. /|
|000053b0| 2a 20 65 76 61 6c 75 61 | 74 65 20 65 61 63 68 20 |* evalua|te each |
|000053c0| 72 65 6d 61 69 6e 69 6e | 67 20 61 72 67 75 6d 65 |remainin|g argume|
|000053d0| 6e 74 20 2a 2f 0a 20 20 | 20 20 77 68 69 6c 65 20 |nt */. | while |
|000053e0| 28 61 72 67 29 0a 09 78 | 6c 65 76 61 72 67 28 26 |(arg)..x|levarg(&|
|000053f0| 61 72 67 29 3b 0a 0a 20 | 20 20 20 2f 2a 20 72 65 |arg);.. | /* re|
|00005400| 73 74 6f 72 65 20 74 68 | 65 20 70 72 65 76 69 6f |store th|e previo|
|00005410| 75 73 20 73 74 61 63 6b | 20 66 72 61 6d 65 20 2a |us stack| frame *|
|00005420| 2f 0a 20 20 20 20 78 6c | 73 74 61 63 6b 20 3d 20 |/. xl|stack = |
|00005430| 6f 6c 64 73 74 6b 3b 0a | 0a 20 20 20 20 2f 2a 20 |oldstk;.|. /* |
|00005440| 72 65 74 75 72 6e 20 74 | 68 65 20 6c 61 73 74 20 |return t|he last |
|00005450| 74 65 73 74 20 65 78 70 | 72 65 73 73 69 6f 6e 20 |test exp|ression |
|00005460| 76 61 6c 75 65 20 2a 2f | 0a 20 20 20 20 72 65 74 |value */|. ret|
|00005470| 75 72 6e 20 28 76 61 6c | 29 3b 0a 7d 0a 0a 2f 2a |urn (val|);.}../*|
|00005480| 20 78 70 72 6f 67 6e 20 | 2d 20 62 75 69 6c 74 2d | xprogn |- built-|
|00005490| 69 6e 20 66 75 6e 63 74 | 69 6f 6e 20 27 70 72 6f |in funct|ion 'pro|
|000054a0| 67 6e 27 20 2a 2f 0a 4e | 4f 44 45 20 2a 78 70 72 |gn' */.N|ODE *xpr|
|000054b0| 6f 67 6e 28 61 72 67 73 | 29 0a 20 20 4e 4f 44 45 |ogn(args|). NODE|
|000054c0| 20 2a 61 72 67 73 3b 0a | 7b 0a 20 20 20 20 4e 4f | *args;.|{. NO|
|000054d0| 44 45 20 2a 2a 2a 6f 6c | 64 73 74 6b 2c 2a 61 72 |DE ***ol|dstk,*ar|
|000054e0| 67 2c 2a 76 61 6c 3b 0a | 0a 20 20 20 20 2f 2a 20 |g,*val;.|. /* |
|000054f0| 63 72 65 61 74 65 20 61 | 20 6e 65 77 20 73 74 61 |create a| new sta|
|00005500| 63 6b 20 66 72 61 6d 65 | 20 2a 2f 0a 20 20 20 20 |ck frame| */. |
|00005510| 6f 6c 64 73 74 6b 20 3d | 20 78 6c 73 61 76 65 28 |oldstk =| xlsave(|
|00005520| 26 61 72 67 2c 28 4e 4f | 44 45 20 2a 2a 29 4e 55 |&arg,(NO|DE **)NU|
|00005530| 4c 4c 29 3b 0a 0a 20 20 | 20 20 2f 2a 20 69 6e 69 |LL);.. | /* ini|
|00005540| 74 69 61 6c 69 7a 65 20 | 2a 2f 0a 20 20 20 20 61 |tialize |*/. a|
|00005550| 72 67 20 3d 20 61 72 67 | 73 3b 0a 0a 20 20 20 20 |rg = arg|s;.. |
|00005560| 2f 2a 20 65 76 61 6c 75 | 61 74 65 20 65 61 63 68 |/* evalu|ate each|
|00005570| 20 72 65 6d 61 69 6e 69 | 6e 67 20 61 72 67 75 6d | remaini|ng argum|
|00005580| 65 6e 74 20 2a 2f 0a 20 | 20 20 20 66 6f 72 20 28 |ent */. | for (|
|00005590| 76 61 6c 20 3d 20 4e 49 | 4c 3b 20 61 72 67 3b 20 |val = NI|L; arg; |
|000055a0| 29 0a 09 76 61 6c 20 3d | 20 78 6c 65 76 61 72 67 |)..val =| xlevarg|
|000055b0| 28 26 61 72 67 29 3b 0a | 0a 20 20 20 20 2f 2a 20 |(&arg);.|. /* |
|000055c0| 72 65 73 74 6f 72 65 20 | 74 68 65 20 70 72 65 76 |restore |the prev|
|000055d0| 69 6f 75 73 20 73 74 61 | 63 6b 20 66 72 61 6d 65 |ious sta|ck frame|
|000055e0| 20 2a 2f 0a 20 20 20 20 | 78 6c 73 74 61 63 6b 20 | */. |xlstack |
|000055f0| 3d 20 6f 6c 64 73 74 6b | 3b 0a 0a 20 20 20 20 2f |= oldstk|;.. /|
|00005600| 2a 20 72 65 74 75 72 6e | 20 74 68 65 20 6c 61 73 |* return| the las|
|00005610| 74 20 74 65 73 74 20 65 | 78 70 72 65 73 73 69 6f |t test e|xpressio|
|00005620| 6e 20 76 61 6c 75 65 20 | 2a 2f 0a 20 20 20 20 72 |n value |*/. r|
|00005630| 65 74 75 72 6e 20 28 76 | 61 6c 29 3b 0a 7d 0a 0a |eturn (v|al);.}..|
|00005640| 2f 2a 20 78 64 6f 20 2d | 20 62 75 69 6c 74 2d 69 |/* xdo -| built-i|
|00005650| 6e 20 66 75 6e 63 74 69 | 6f 6e 20 27 64 6f 27 20 |n functi|on 'do' |
|00005660| 2a 2f 0a 4e 4f 44 45 20 | 2a 78 64 6f 28 61 72 67 |*/.NODE |*xdo(arg|
|00005670| 73 29 0a 20 20 4e 4f 44 | 45 20 2a 61 72 67 73 3b |s). NOD|E *args;|
|00005680| 0a 7b 0a 20 20 20 20 72 | 65 74 75 72 6e 20 28 64 |.{. r|eturn (d|
|00005690| 6f 6c 6f 6f 70 28 61 72 | 67 73 2c 54 52 55 45 29 |oloop(ar|gs,TRUE)|
|000056a0| 29 3b 0a 7d 0a 0a 2f 2a | 20 78 64 6f 73 74 61 72 |);.}../*| xdostar|
|000056b0| 20 2d 20 62 75 69 6c 74 | 2d 69 6e 20 66 75 6e 63 | - built|-in func|
|000056c0| 74 69 6f 6e 20 27 64 6f | 2a 27 20 2a 2f 0a 4e 4f |tion 'do|*' */.NO|
|000056d0| 44 45 20 2a 78 64 6f 73 | 74 61 72 28 61 72 67 73 |DE *xdos|tar(args|
|000056e0| 29 0a 20 20 4e 4f 44 45 | 20 2a 61 72 67 73 3b 0a |). NODE| *args;.|
|000056f0| 7b 0a 20 20 20 20 72 65 | 74 75 72 6e 20 28 64 6f |{. re|turn (do|
|00005700| 6c 6f 6f 70 28 61 72 67 | 73 2c 46 41 4c 53 45 29 |loop(arg|s,FALSE)|
|00005710| 29 3b 0a 7d 0a 0a 2f 2a | 20 64 6f 6c 6f 6f 70 20 |);.}../*| doloop |
|00005720| 2d 20 63 6f 6d 6d 6f 6e | 20 64 6f 20 72 6f 75 74 |- common| do rout|
|00005730| 69 6e 65 20 2a 2f 0a 4c | 4f 43 41 4c 20 4e 4f 44 |ine */.L|OCAL NOD|
|00005740| 45 20 2a 64 6f 6c 6f 6f | 70 28 61 72 67 73 2c 70 |E *doloo|p(args,p|
|00005750| 66 6c 61 67 29 0a 20 20 | 4e 4f 44 45 20 2a 61 72 |flag). |NODE *ar|
|00005760| 67 73 3b 20 69 6e 74 20 | 70 66 6c 61 67 3b 0a 7b |gs; int |pflag;.{|
|00005770| 0a 20 20 20 20 4e 4f 44 | 45 20 2a 2a 2a 6f 6c 64 |. NOD|E ***old|
|00005780| 73 74 6b 2c 2a 6e 65 77 | 65 6e 76 2c 2a 61 72 67 |stk,*new|env,*arg|
|00005790| 2c 2a 62 6c 69 73 74 2c | 2a 63 6c 69 73 74 2c 2a |,*blist,|*clist,*|
|000057a0| 74 65 73 74 2c 2a 72 76 | 61 6c 3b 0a 20 20 20 20 |test,*rv|al;. |
|000057b0| 69 6e 74 20 72 62 72 65 | 61 6b 3b 0a 0a 20 20 20 |int rbre|ak;.. |
|000057c0| 20 2f 2a 20 63 72 65 61 | 74 65 20 61 20 6e 65 77 | /* crea|te a new|
|000057d0| 20 73 74 61 63 6b 20 66 | 72 61 6d 65 20 2a 2f 0a | stack f|rame */.|
|000057e0| 20 20 20 20 6f 6c 64 73 | 74 6b 20 3d 20 78 6c 73 | olds|tk = xls|
|000057f0| 61 76 65 28 26 6e 65 77 | 65 6e 76 2c 26 61 72 67 |ave(&new|env,&arg|
|00005800| 2c 26 62 6c 69 73 74 2c | 26 63 6c 69 73 74 2c 26 |,&blist,|&clist,&|
|00005810| 74 65 73 74 2c 28 4e 4f | 44 45 20 2a 2a 29 4e 55 |test,(NO|DE **)NU|
|00005820| 4c 4c 29 3b 0a 0a 20 20 | 20 20 2f 2a 20 69 6e 69 |LL);.. | /* ini|
|00005830| 74 69 61 6c 69 7a 65 20 | 2a 2f 0a 20 20 20 20 61 |tialize |*/. a|
|00005840| 72 67 20 3d 20 61 72 67 | 73 3b 0a 0a 20 20 20 20 |rg = arg|s;.. |
|00005850| 2f 2a 20 67 65 74 20 74 | 68 65 20 6c 69 73 74 20 |/* get t|he list |
|00005860| 6f 66 20 62 69 6e 64 69 | 6e 67 73 20 2a 2f 0a 20 |of bindi|ngs */. |
|00005870| 20 20 20 62 6c 69 73 74 | 20 3d 20 78 6c 6d 61 74 | blist| = xlmat|
|00005880| 63 68 28 4c 49 53 54 2c | 26 61 72 67 29 3b 0a 0a |ch(LIST,|&arg);..|
|00005890| 20 20 20 20 2f 2a 20 63 | 72 65 61 74 65 20 61 20 | /* c|reate a |
|000058a0| 6e 65 77 20 65 6e 76 69 | 72 6f 6e 6d 65 6e 74 20 |new envi|ronment |
|000058b0| 66 72 61 6d 65 20 2a 2f | 0a 20 20 20 20 6e 65 77 |frame */|. new|
|000058c0| 65 6e 76 20 3d 20 78 6c | 66 72 61 6d 65 28 78 6c |env = xl|frame(xl|
|000058d0| 65 6e 76 29 3b 0a 0a 20 | 20 20 20 2f 2a 20 62 69 |env);.. | /* bi|
|000058e0| 6e 64 20 74 68 65 20 73 | 79 6d 62 6f 6c 73 20 2a |nd the s|ymbols *|
|000058f0| 2f 0a 20 20 20 20 69 66 | 20 28 21 70 66 6c 61 67 |/. if| (!pflag|
|00005900| 29 20 78 6c 65 6e 76 20 | 3d 20 6e 65 77 65 6e 76 |) xlenv |= newenv|
|00005910| 3b 0a 20 20 20 20 64 6f | 62 69 6e 64 69 6e 67 73 |;. do|bindings|
|00005920| 28 62 6c 69 73 74 2c 6e | 65 77 65 6e 76 29 3b 0a |(blist,n|ewenv);.|
|00005930| 20 20 20 20 69 66 20 28 | 70 66 6c 61 67 29 20 78 | if (|pflag) x|
|00005940| 6c 65 6e 76 20 3d 20 6e | 65 77 65 6e 76 3b 0a 0a |lenv = n|ewenv;..|
|00005950| 20 20 20 20 2f 2a 20 67 | 65 74 20 74 68 65 20 65 | /* g|et the e|
|00005960| 78 69 74 20 74 65 73 74 | 20 61 6e 64 20 72 65 73 |xit test| and res|
|00005970| 75 6c 74 20 66 6f 72 6d | 73 20 2a 2f 0a 20 20 20 |ult form|s */. |
|00005980| 20 63 6c 69 73 74 20 3d | 20 78 6c 6d 61 74 63 68 | clist =| xlmatch|
|00005990| 28 4c 49 53 54 2c 26 61 | 72 67 29 3b 0a 20 20 20 |(LIST,&a|rg);. |
|000059a0| 20 74 65 73 74 20 3d 20 | 78 6c 61 72 67 28 26 63 | test = |xlarg(&c|
|000059b0| 6c 69 73 74 29 3b 0a 0a | 20 20 20 20 2f 2a 20 65 |list);..| /* e|
|000059c0| 78 65 63 75 74 65 20 74 | 68 65 20 6c 6f 6f 70 20 |xecute t|he loop |
|000059d0| 61 73 20 6c 6f 6e 67 20 | 61 73 20 74 68 65 20 74 |as long |as the t|
|000059e0| 65 73 74 20 69 73 20 66 | 61 6c 73 65 20 2a 2f 0a |est is f|alse */.|
|000059f0| 20 20 20 20 72 62 72 65 | 61 6b 20 3d 20 46 41 4c | rbre|ak = FAL|
|00005a00| 53 45 3b 0a 20 20 20 20 | 77 68 69 6c 65 20 28 78 |SE;. |while (x|
|00005a10| 6c 65 76 61 6c 28 74 65 | 73 74 29 20 3d 3d 20 4e |leval(te|st) == N|
|00005a20| 49 4c 29 20 7b 0a 0a 09 | 2f 2a 20 65 78 65 63 75 |IL) {...|/* execu|
|00005a30| 74 65 20 74 68 65 20 62 | 6f 64 79 20 6f 66 20 74 |te the b|ody of t|
|00005a40| 68 65 20 6c 6f 6f 70 20 | 2a 2f 0a 09 69 66 20 28 |he loop |*/..if (|
|00005a50| 74 61 67 62 6c 6f 63 6b | 28 61 72 67 2c 26 72 76 |tagblock|(arg,&rv|
|00005a60| 61 6c 29 29 20 7b 0a 09 | 20 20 20 20 72 62 72 65 |al)) {..| rbre|
|00005a70| 61 6b 20 3d 20 54 52 55 | 45 3b 0a 09 20 20 20 20 |ak = TRU|E;.. |
|00005a80| 62 72 65 61 6b 3b 0a 09 | 7d 0a 0a 09 2f 2a 20 75 |break;..|}.../* u|
|00005a90| 70 64 61 74 65 20 74 68 | 65 20 6c 6f 6f 70 69 6e |pdate th|e loopin|
|00005aa0| 67 20 76 61 72 69 61 62 | 6c 65 73 20 2a 2f 0a 09 |g variab|les */..|
|00005ab0| 64 6f 75 70 64 61 74 65 | 73 28 62 6c 69 73 74 2c |doupdate|s(blist,|
|00005ac0| 70 66 6c 61 67 29 3b 0a | 20 20 20 20 7d 0a 0a 20 |pflag);.| }.. |
|00005ad0| 20 20 20 2f 2a 20 65 76 | 61 6c 75 61 74 65 20 74 | /* ev|aluate t|
|00005ae0| 68 65 20 72 65 73 75 6c | 74 20 65 78 70 72 65 73 |he resul|t expres|
|00005af0| 73 69 6f 6e 20 2a 2f 0a | 20 20 20 20 69 66 20 28 |sion */.| if (|
|00005b00| 21 72 62 72 65 61 6b 29 | 0a 09 66 6f 72 20 28 72 |!rbreak)|..for (r|
|00005b10| 76 61 6c 20 3d 20 4e 49 | 4c 3b 20 63 6f 6e 73 70 |val = NI|L; consp|
|00005b20| 28 63 6c 69 73 74 29 3b | 20 29 0a 09 20 20 20 20 |(clist);| ).. |
|00005b30| 72 76 61 6c 20 3d 20 78 | 6c 65 76 61 72 67 28 26 |rval = x|levarg(&|
|00005b40| 63 6c 69 73 74 29 3b 0a | 0a 20 20 20 20 2f 2a 20 |clist);.|. /* |
|00005b50| 75 6e 62 69 6e 64 20 74 | 68 65 20 61 72 67 75 6d |unbind t|he argum|
|00005b60| 65 6e 74 73 20 2a 2f 0a | 20 20 20 20 78 6c 65 6e |ents */.| xlen|
|00005b70| 76 20 3d 20 63 64 72 28 | 78 6c 65 6e 76 29 3b 0a |v = cdr(|xlenv);.|
|00005b80| 0a 20 20 20 20 2f 2a 20 | 72 65 73 74 6f 72 65 20 |. /* |restore |
|00005b90| 74 68 65 20 70 72 65 76 | 69 6f 75 73 20 73 74 61 |the prev|ious sta|
|00005ba0| 63 6b 20 66 72 61 6d 65 | 20 2a 2f 0a 20 20 20 20 |ck frame| */. |
|00005bb0| 78 6c 73 74 61 63 6b 20 | 3d 20 6f 6c 64 73 74 6b |xlstack |= oldstk|
|00005bc0| 3b 0a 0a 20 20 20 20 2f | 2a 20 72 65 74 75 72 6e |;.. /|* return|
|00005bd0| 20 74 68 65 20 72 65 73 | 75 6c 74 20 2a 2f 0a 20 | the res|ult */. |
|00005be0| 20 20 20 72 65 74 75 72 | 6e 20 28 72 76 61 6c 29 | retur|n (rval)|
|00005bf0| 3b 0a 7d 0a 0a 2f 2a 20 | 78 64 6f 6c 69 73 74 20 |;.}../* |xdolist |
|00005c00| 2d 20 62 75 69 6c 74 2d | 69 6e 20 66 75 6e 63 74 |- built-|in funct|
|00005c10| 69 6f 6e 20 27 64 6f 6c | 69 73 74 27 20 2a 2f 0a |ion 'dol|ist' */.|
|00005c20| 4e 4f 44 45 20 2a 78 64 | 6f 6c 69 73 74 28 61 72 |NODE *xd|olist(ar|
|00005c30| 67 73 29 0a 20 20 4e 4f | 44 45 20 2a 61 72 67 73 |gs). NO|DE *args|
|00005c40| 3b 0a 7b 0a 20 20 20 20 | 4e 4f 44 45 20 2a 2a 2a |;.{. |NODE ***|
|00005c50| 6f 6c 64 73 74 6b 2c 2a | 61 72 67 2c 2a 63 6c 69 |oldstk,*|arg,*cli|
|00005c60| 73 74 2c 2a 73 79 6d 2c | 2a 6c 69 73 74 2c 2a 76 |st,*sym,|*list,*v|
|00005c70| 61 6c 2c 2a 72 76 61 6c | 3b 0a 20 20 20 20 69 6e |al,*rval|;. in|
|00005c80| 74 20 72 62 72 65 61 6b | 3b 0a 0a 20 20 20 20 2f |t rbreak|;.. /|
|00005c90| 2a 20 63 72 65 61 74 65 | 20 61 20 6e 65 77 20 73 |* create| a new s|
|00005ca0| 74 61 63 6b 20 66 72 61 | 6d 65 20 2a 2f 0a 20 20 |tack fra|me */. |
|00005cb0| 20 20 6f 6c 64 73 74 6b | 20 3d 20 78 6c 73 61 76 | oldstk| = xlsav|
|00005cc0| 65 28 26 61 72 67 2c 26 | 63 6c 69 73 74 2c 26 73 |e(&arg,&|clist,&s|
|00005cd0| 79 6d 2c 26 6c 69 73 74 | 2c 26 76 61 6c 2c 28 4e |ym,&list|,&val,(N|
|00005ce0| 4f 44 45 20 2a 2a 29 4e | 55 4c 4c 29 3b 0a 0a 20 |ODE **)N|ULL);.. |
|00005cf0| 20 20 20 2f 2a 20 69 6e | 69 74 69 61 6c 69 7a 65 | /* in|itialize|
|00005d00| 20 2a 2f 0a 20 20 20 20 | 61 72 67 20 3d 20 61 72 | */. |arg = ar|
|00005d10| 67 73 3b 0a 0a 20 20 20 | 20 2f 2a 20 67 65 74 20 |gs;.. | /* get |
|00005d20| 74 68 65 20 63 6f 6e 74 | 72 6f 6c 20 6c 69 73 74 |the cont|rol list|
|00005d30| 20 28 73 79 6d 20 6c 69 | 73 74 20 72 65 73 75 6c | (sym li|st resul|
|00005d40| 74 2d 65 78 70 72 29 20 | 2a 2f 0a 20 20 20 20 63 |t-expr) |*/. c|
|00005d50| 6c 69 73 74 20 3d 20 78 | 6c 6d 61 74 63 68 28 4c |list = x|lmatch(L|
|00005d60| 49 53 54 2c 26 61 72 67 | 29 3b 0a 20 20 20 20 73 |IST,&arg|);. s|
|00005d70| 79 6d 20 3d 20 78 6c 6d | 61 74 63 68 28 53 59 4d |ym = xlm|atch(SYM|
|00005d80| 2c 26 63 6c 69 73 74 29 | 3b 0a 20 20 20 20 6c 69 |,&clist)|;. li|
|00005d90| 73 74 20 3d 20 78 6c 65 | 76 6d 61 74 63 68 28 4c |st = xle|vmatch(L|
|00005da0| 49 53 54 2c 26 63 6c 69 | 73 74 29 3b 0a 20 20 20 |IST,&cli|st);. |
|00005db0| 20 76 61 6c 20 3d 20 28 | 63 6c 69 73 74 20 3f 20 | val = (|clist ? |
|00005dc0| 78 6c 61 72 67 28 26 63 | 6c 69 73 74 29 20 3a 20 |xlarg(&c|list) : |
|00005dd0| 4e 49 4c 29 3b 0a 0a 20 | 20 20 20 2f 2a 20 69 6e |NIL);.. | /* in|
|00005de0| 69 74 69 61 6c 69 7a 65 | 20 74 68 65 20 6c 6f 63 |itialize| the loc|
|00005df0| 61 6c 20 65 6e 76 69 72 | 6f 6e 6d 65 6e 74 20 2a |al envir|onment *|
|00005e00| 2f 0a 20 20 20 20 78 6c | 65 6e 76 20 3d 20 78 6c |/. xl|env = xl|
|00005e10| 66 72 61 6d 65 28 78 6c | 65 6e 76 29 3b 0a 20 20 |frame(xl|env);. |
|00005e20| 20 20 78 6c 62 69 6e 64 | 28 73 79 6d 2c 4e 49 4c | xlbind|(sym,NIL|
|00005e30| 2c 78 6c 65 6e 76 29 3b | 0a 0a 20 20 20 20 2f 2a |,xlenv);|.. /*|
|00005e40| 20 6c 6f 6f 70 20 74 68 | 72 6f 75 67 68 20 74 68 | loop th|rough th|
|00005e50| 65 20 6c 69 73 74 20 2a | 2f 0a 20 20 20 20 72 62 |e list *|/. rb|
|00005e60| 72 65 61 6b 20 3d 20 46 | 41 4c 53 45 3b 0a 20 20 |reak = F|ALSE;. |
|00005e70| 20 20 66 6f 72 20 28 3b | 20 63 6f 6e 73 70 28 6c | for (;| consp(l|
|00005e80| 69 73 74 29 3b 20 6c 69 | 73 74 20 3d 20 63 64 72 |ist); li|st = cdr|
|00005e90| 28 6c 69 73 74 29 29 20 | 7b 0a 0a 09 2f 2a 20 62 |(list)) |{.../* b|
|00005ea0| 69 6e 64 20 74 68 65 20 | 73 79 6d 62 6f 6c 20 74 |ind the |symbol t|
|00005eb0| 6f 20 74 68 65 20 6e 65 | 78 74 20 6c 69 73 74 20 |o the ne|xt list |
|00005ec0| 65 6c 65 6d 65 6e 74 20 | 2a 2f 0a 09 78 6c 73 65 |element |*/..xlse|
|00005ed0| 74 76 61 6c 75 65 28 73 | 79 6d 2c 63 61 72 28 6c |tvalue(s|ym,car(l|
|00005ee0| 69 73 74 29 29 3b 0a 0a | 09 2f 2a 20 65 78 65 63 |ist));..|./* exec|
|00005ef0| 75 74 65 20 74 68 65 20 | 6c 6f 6f 70 20 62 6f 64 |ute the |loop bod|
|00005f00| 79 20 2a 2f 0a 09 69 66 | 20 28 74 61 67 62 6c 6f |y */..if| (tagblo|
|00005f10| 63 6b 28 61 72 67 2c 26 | 72 76 61 6c 29 29 20 7b |ck(arg,&|rval)) {|
|00005f20| 0a 09 20 20 20 20 72 62 | 72 65 61 6b 20 3d 20 54 |.. rb|reak = T|
|00005f30| 52 55 45 3b 0a 09 20 20 | 20 20 62 72 65 61 6b 3b |RUE;.. | break;|
|00005f40| 0a 09 7d 0a 20 20 20 20 | 7d 0a 0a 20 20 20 20 2f |..}. |}.. /|
|00005f50| 2a 20 65 76 61 6c 75 61 | 74 65 20 74 68 65 20 72 |* evalua|te the r|
|00005f60| 65 73 75 6c 74 20 65 78 | 70 72 65 73 73 69 6f 6e |esult ex|pression|
|00005f70| 20 2a 2f 0a 20 20 20 20 | 69 66 20 28 21 72 62 72 | */. |if (!rbr|
|00005f80| 65 61 6b 29 20 7b 0a 09 | 78 6c 73 65 74 76 61 6c |eak) {..|xlsetval|
|00005f90| 75 65 28 73 79 6d 2c 4e | 49 4c 29 3b 0a 09 72 76 |ue(sym,N|IL);..rv|
|00005fa0| 61 6c 20 3d 20 78 6c 65 | 76 61 6c 28 76 61 6c 29 |al = xle|val(val)|
|00005fb0| 3b 0a 20 20 20 20 7d 0a | 0a 20 20 20 20 2f 2a 20 |;. }.|. /* |
|00005fc0| 75 6e 62 69 6e 64 20 74 | 68 65 20 61 72 67 75 6d |unbind t|he argum|
|00005fd0| 65 6e 74 73 20 2a 2f 0a | 20 20 20 20 78 6c 65 6e |ents */.| xlen|
|00005fe0| 76 20 3d 20 63 64 72 28 | 78 6c 65 6e 76 29 3b 0a |v = cdr(|xlenv);.|
|00005ff0| 0a 20 20 20 20 2f 2a 20 | 72 65 73 74 6f 72 65 20 |. /* |restore |
|00006000| 74 68 65 20 70 72 65 76 | 69 6f 75 73 20 73 74 61 |the prev|ious sta|
|00006010| 63 6b 20 66 72 61 6d 65 | 20 2a 2f 0a 20 20 20 20 |ck frame| */. |
|00006020| 78 6c 73 74 61 63 6b 20 | 3d 20 6f 6c 64 73 74 6b |xlstack |= oldstk|
|00006030| 3b 0a 0a 20 20 20 20 2f | 2a 20 72 65 74 75 72 6e |;.. /|* return|
|00006040| 20 74 68 65 20 72 65 73 | 75 6c 74 20 2a 2f 0a 20 | the res|ult */. |
|00006050| 20 20 20 72 65 74 75 72 | 6e 20 28 72 76 61 6c 29 | retur|n (rval)|
|00006060| 3b 0a 7d 0a 0a 2f 2a 20 | 78 64 6f 74 69 6d 65 73 |;.}../* |xdotimes|
|00006070| 20 2d 20 62 75 69 6c 74 | 2d 69 6e 20 66 75 6e 63 | - built|-in func|
|00006080| 74 69 6f 6e 20 27 64 6f | 74 69 6d 65 73 27 20 2a |tion 'do|times' *|
|00006090| 2f 0a 4e 4f 44 45 20 2a | 78 64 6f 74 69 6d 65 73 |/.NODE *|xdotimes|
|000060a0| 28 61 72 67 73 29 0a 20 | 20 4e 4f 44 45 20 2a 61 |(args). | NODE *a|
|000060b0| 72 67 73 3b 0a 7b 0a 20 | 20 20 20 4e 4f 44 45 20 |rgs;.{. | NODE |
|000060c0| 2a 2a 2a 6f 6c 64 73 74 | 6b 2c 2a 61 72 67 2c 2a |***oldst|k,*arg,*|
|000060d0| 63 6c 69 73 74 2c 2a 73 | 79 6d 2c 2a 76 61 6c 2c |clist,*s|ym,*val,|
|000060e0| 2a 72 76 61 6c 3b 0a 20 | 20 20 20 69 6e 74 20 72 |*rval;. | int r|
|000060f0| 62 72 65 61 6b 2c 63 6e | 74 2c 69 3b 0a 0a 20 20 |break,cn|t,i;.. |
|00006100| 20 20 2f 2a 20 63 72 65 | 61 74 65 20 61 20 6e 65 | /* cre|ate a ne|
|00006110| 77 20 73 74 61 63 6b 20 | 66 72 61 6d 65 20 2a 2f |w stack |frame */|
|00006120| 0a 20 20 20 20 6f 6c 64 | 73 74 6b 20 3d 20 78 6c |. old|stk = xl|
|00006130| 73 61 76 65 28 26 61 72 | 67 2c 26 63 6c 69 73 74 |save(&ar|g,&clist|
|00006140| 2c 26 73 79 6d 2c 26 76 | 61 6c 2c 28 4e 4f 44 45 |,&sym,&v|al,(NODE|
|00006150| 20 2a 2a 29 4e 55 4c 4c | 29 3b 0a 0a 20 20 20 20 | **)NULL|);.. |
|00006160| 2f 2a 20 69 6e 69 74 69 | 61 6c 69 7a 65 20 2a 2f |/* initi|alize */|
|00006170| 0a 20 20 20 20 61 72 67 | 20 3d 20 61 72 67 73 3b |. arg| = args;|
|00006180| 0a 0a 20 20 20 20 2f 2a | 20 67 65 74 20 74 68 65 |.. /*| get the|
|00006190| 20 63 6f 6e 74 72 6f 6c | 20 6c 69 73 74 20 28 73 | control| list (s|
|000061a0| 79 6d 20 6c 69 73 74 20 | 72 65 73 75 6c 74 2d 65 |ym list |result-e|
|000061b0| 78 70 72 29 20 2a 2f 0a | 20 20 20 20 63 6c 69 73 |xpr) */.| clis|
|000061c0| 74 20 3d 20 78 6c 6d 61 | 74 63 68 28 4c 49 53 54 |t = xlma|tch(LIST|
|000061d0| 2c 26 61 72 67 29 3b 0a | 20 20 20 20 73 79 6d 20 |,&arg);.| sym |
|000061e0| 3d 20 78 6c 6d 61 74 63 | 68 28 53 59 4d 2c 26 63 |= xlmatc|h(SYM,&c|
|000061f0| 6c 69 73 74 29 3b 0a 20 | 20 20 20 63 6e 74 20 3d |list);. | cnt =|
|00006200| 20 67 65 74 66 69 78 6e | 75 6d 28 78 6c 65 76 6d | getfixn|um(xlevm|
|00006210| 61 74 63 68 28 49 4e 54 | 2c 26 63 6c 69 73 74 29 |atch(INT|,&clist)|
|00006220| 29 3b 0a 20 20 20 20 76 | 61 6c 20 3d 20 28 63 6c |);. v|al = (cl|
|00006230| 69 73 74 20 3f 20 78 6c | 61 72 67 28 26 63 6c 69 |ist ? xl|arg(&cli|
|00006240| 73 74 29 20 3a 20 4e 49 | 4c 29 3b 0a 0a 20 20 20 |st) : NI|L);.. |
|00006250| 20 2f 2a 20 69 6e 69 74 | 69 61 6c 69 7a 65 20 74 | /* init|ialize t|
|00006260| 68 65 20 6c 6f 63 61 6c | 20 65 6e 76 69 72 6f 6e |he local| environ|
|00006270| 6d 65 6e 74 20 2a 2f 0a | 20 20 20 20 78 6c 65 6e |ment */.| xlen|
|00006280| 76 20 3d 20 78 6c 66 72 | 61 6d 65 28 78 6c 65 6e |v = xlfr|ame(xlen|
|00006290| 76 29 3b 0a 20 20 20 20 | 78 6c 62 69 6e 64 28 73 |v);. |xlbind(s|
|000062a0| 79 6d 2c 4e 49 4c 2c 78 | 6c 65 6e 76 29 3b 0a 0a |ym,NIL,x|lenv);..|
|000062b0| 20 20 20 20 2f 2a 20 6c | 6f 6f 70 20 74 68 72 6f | /* l|oop thro|
|000062c0| 75 67 68 20 66 6f 72 20 | 65 61 63 68 20 76 61 6c |ugh for |each val|
|000062d0| 75 65 20 66 72 6f 6d 20 | 7a 65 72 6f 20 74 6f 20 |ue from |zero to |
|000062e0| 63 6e 74 2d 31 20 2a 2f | 0a 20 20 20 20 72 62 72 |cnt-1 */|. rbr|
|000062f0| 65 61 6b 20 3d 20 46 41 | 4c 53 45 3b 0a 20 20 20 |eak = FA|LSE;. |
|00006300| 20 66 6f 72 20 28 69 20 | 3d 20 30 3b 20 69 20 3c | for (i |= 0; i <|
|00006310| 20 63 6e 74 3b 20 69 2b | 2b 29 20 7b 0a 0a 09 2f | cnt; i+|+) {.../|
|00006320| 2a 20 62 69 6e 64 20 74 | 68 65 20 73 79 6d 62 6f |* bind t|he symbo|
|00006330| 6c 20 74 6f 20 74 68 65 | 20 6e 65 78 74 20 6c 69 |l to the| next li|
|00006340| 73 74 20 65 6c 65 6d 65 | 6e 74 20 2a 2f 0a 09 78 |st eleme|nt */..x|
|00006350| 6c 73 65 74 76 61 6c 75 | 65 28 73 79 6d 2c 63 76 |lsetvalu|e(sym,cv|
|00006360| 66 69 78 6e 75 6d 28 28 | 46 49 58 4e 55 4d 29 69 |fixnum((|FIXNUM)i|
|00006370| 29 29 3b 0a 0a 09 2f 2a | 20 65 78 65 63 75 74 65 |));.../*| execute|
|00006380| 20 74 68 65 20 6c 6f 6f | 70 20 62 6f 64 79 20 2a | the loo|p body *|
|00006390| 2f 0a 09 69 66 20 28 74 | 61 67 62 6c 6f 63 6b 28 |/..if (t|agblock(|
|000063a0| 61 72 67 2c 26 72 76 61 | 6c 29 29 20 7b 0a 09 20 |arg,&rva|l)) {.. |
|000063b0| 20 20 20 72 62 72 65 61 | 6b 20 3d 20 54 52 55 45 | rbrea|k = TRUE|
|000063c0| 3b 0a 09 20 20 20 20 62 | 72 65 61 6b 3b 0a 09 7d |;.. b|reak;..}|
|000063d0| 0a 20 20 20 20 7d 0a 0a | 20 20 20 20 2f 2a 20 65 |. }..| /* e|
|000063e0| 76 61 6c 75 61 74 65 20 | 74 68 65 20 72 65 73 75 |valuate |the resu|
|000063f0| 6c 74 20 65 78 70 72 65 | 73 73 69 6f 6e 20 2a 2f |lt expre|ssion */|
+--------+-------------------------+-------------------------+--------+--------+
Only 25.0 KB of data is shown above.