home *** CD-ROM | disk | FTP | other *** search
open in:
MacOS 8.1
|
Win98
|
DOS
view JSON data
|
view as text
This file was processed as: SHell self-extracting ARchive
(archive/shar).
You can browse this item here: 2115
Confidence | Program | Detection | Match Type | Support
|
---|
100%
| dexvert
| SHell self-extracting ARchive (archive/shar)
| magic
| Supported |
1%
| dexvert
| Text File (text/txt)
| fallback
| Supported |
100%
| file
| 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)
|
|
hex view+--------+-------------------------+-------------------------+--------+--------+
|00000000| 4e 65 77 73 67 72 6f 75 | 70 73 3a 20 63 6f 6d 70 |Newsgrou|ps: comp|
|00000010| 2e 6c 61 6e 67 2e 70 65 | 72 6c 2c 61 6c 74 2e 73 |.lang.pe|rl,alt.s|
|00000020| 6f 75 72 63 65 73 0a 46 | 72 6f 6d 3a 20 66 6c 65 |ources.F|rom: fle|
|00000030| 65 40 67 75 61 72 64 69 | 61 6e 2e 63 73 2e 70 73 |e@guardi|an.cs.ps|
|00000040| 75 2e 65 64 75 20 28 46 | 65 6c 69 78 20 4c 65 65 |u.edu (F|elix Lee|
|00000050| 29 0a 53 75 62 6a 65 63 | 74 3a 20 53 63 68 65 6d |).Subjec|t: Schem|
|00000060| 65 20 69 6e 20 50 65 72 | 6c 3f 20 28 73 70 3f 29 |e in Per|l? (sp?)|
|00000070| 3a 20 20 54 68 65 20 43 | 6f 64 65 2e 20 20 50 61 |: The C|ode. Pa|
|00000080| 72 74 20 31 20 6f 66 20 | 32 2e 0a 4d 65 73 73 61 |rt 1 of |2..Messa|
|00000090| 67 65 2d 49 44 3a 20 3c | 46 6e 24 2e 71 62 39 33 |ge-ID: <|Fn$.qb93|
|000000a0| 40 63 73 2e 70 73 75 2e | 65 64 75 3e 0a 44 61 74 |@cs.psu.|edu>.Dat|
|000000b0| 65 3a 20 4d 6f 6e 2c 20 | 31 39 20 4e 6f 76 20 39 |e: Mon, |19 Nov 9|
|000000c0| 30 20 30 37 3a 35 35 3a | 30 39 20 47 4d 54 0a 0a |0 07:55:|09 GMT..|
|000000d0| 4a 75 73 74 20 77 68 61 | 74 20 79 6f 75 27 76 65 |Just wha|t you've|
|000000e0| 20 61 6c 6c 20 62 65 65 | 6e 20 77 61 69 74 69 6e | all bee|n waitin|
|000000f0| 67 20 66 6f 72 2c 20 61 | 20 53 63 68 65 6d 65 20 |g for, a| Scheme |
|00000100| 69 6e 74 65 72 70 72 65 | 74 65 72 20 77 72 69 74 |interpre|ter writ|
|00000110| 74 65 6e 20 69 6e 0a 50 | 65 72 6c 2e 20 20 53 65 |ten in.P|erl. Se|
|00000120| 65 20 74 68 65 20 42 6c | 75 72 62 2c 20 69 6e 20 |e the Bl|urb, in |
|00000130| 61 20 73 65 70 61 72 61 | 74 65 20 61 72 74 69 63 |a separa|te artic|
|00000140| 6c 65 20 28 69 6e 20 63 | 6f 6d 70 2e 6c 61 6e 67 |le (in c|omp.lang|
|00000150| 2e 70 65 72 6c 29 2e 0a | 0a 41 66 74 65 72 20 75 |.perl)..|.After u|
|00000160| 6e 70 61 63 6b 69 6e 67 | 20 70 61 72 74 73 20 31 |npacking| parts 1|
|00000170| 20 61 6e 64 20 32 2c 20 | 79 6f 75 20 73 68 6f 75 | and 2, |you shou|
|00000180| 6c 64 0a 09 63 61 74 20 | 73 70 2e 70 6c 2e 70 61 |ld..cat |sp.pl.pa|
|00000190| 72 74 31 20 73 70 2e 70 | 6c 2e 70 61 72 74 32 20 |rt1 sp.p|l.part2 |
|000001a0| 3e 20 73 70 2e 70 6c 0a | 2d 2d 0a 46 65 6c 69 78 |> sp.pl.|--.Felix|
|000001b0| 20 4c 65 65 09 66 6c 65 | 65 40 63 73 2e 70 73 75 | Lee.fle|e@cs.psu|
|000001c0| 2e 65 64 75 0a 0a 23 21 | 20 2f 62 69 6e 2f 73 68 |.edu..#!| /bin/sh|
|000001d0| 0a 23 20 54 68 69 73 20 | 69 73 20 61 20 73 68 65 |.# This |is a she|
|000001e0| 6c 6c 20 61 72 63 68 69 | 76 65 2e 20 20 52 65 6d |ll archi|ve. Rem|
|000001f0| 6f 76 65 20 61 6e 79 74 | 68 69 6e 67 20 62 65 66 |ove anyt|hing bef|
|00000200| 6f 72 65 20 74 68 69 73 | 20 6c 69 6e 65 2c 20 74 |ore this| line, t|
|00000210| 68 65 6e 20 75 6e 70 61 | 63 6b 0a 23 20 69 74 20 |hen unpa|ck.# it |
|00000220| 62 79 20 73 61 76 69 6e | 67 20 69 74 20 69 6e 74 |by savin|g it int|
|00000230| 6f 20 61 20 66 69 6c 65 | 20 61 6e 64 20 74 79 70 |o a file| and typ|
|00000240| 69 6e 67 20 22 73 68 20 | 66 69 6c 65 22 2e 20 20 |ing "sh |file". |
|00000250| 54 6f 20 6f 76 65 72 77 | 72 69 74 65 20 65 78 69 |To overw|rite exi|
|00000260| 73 74 69 6e 67 0a 23 20 | 66 69 6c 65 73 2c 20 74 |sting.# |files, t|
|00000270| 79 70 65 20 22 73 68 20 | 66 69 6c 65 20 2d 63 22 |ype "sh |file -c"|
|00000280| 2e 20 20 59 6f 75 20 63 | 61 6e 20 61 6c 73 6f 20 |. You c|an also |
|00000290| 66 65 65 64 20 74 68 69 | 73 20 61 73 20 73 74 61 |feed thi|s as sta|
|000002a0| 6e 64 61 72 64 20 69 6e | 70 75 74 20 76 69 61 0a |ndard in|put via.|
|000002b0| 23 20 75 6e 73 68 61 72 | 2c 20 6f 72 20 62 79 20 |# unshar|, or by |
|000002c0| 74 79 70 69 6e 67 20 22 | 73 68 20 3c 66 69 6c 65 |typing "|sh <file|
|000002d0| 22 2c 20 65 2e 67 2e 2e | 20 20 49 66 20 74 68 69 |", e.g..| If thi|
|000002e0| 73 20 61 72 63 68 69 76 | 65 20 69 73 20 63 6f 6d |s archiv|e is com|
|000002f0| 70 6c 65 74 65 2c 20 79 | 6f 75 0a 23 20 77 69 6c |plete, y|ou.# wil|
|00000300| 6c 20 73 65 65 20 74 68 | 65 20 66 6f 6c 6c 6f 77 |l see th|e follow|
|00000310| 69 6e 67 20 6d 65 73 73 | 61 67 65 20 61 74 20 74 |ing mess|age at t|
|00000320| 68 65 20 65 6e 64 3a 0a | 23 09 09 22 45 6e 64 20 |he end:.|#.."End |
|00000330| 6f 66 20 73 68 65 6c 6c | 20 61 72 63 68 69 76 65 |of shell| archive|
|00000340| 2e 22 0a 23 20 43 6f 6e | 74 65 6e 74 73 3a 20 20 |.".# Con|tents: |
|00000350| 73 70 2e 70 6c 2e 70 61 | 72 74 31 0a 50 41 54 48 |sp.pl.pa|rt1.PATH|
|00000360| 3d 2f 62 69 6e 3a 2f 75 | 73 72 2f 62 69 6e 3a 2f |=/bin:/u|sr/bin:/|
|00000370| 75 73 72 2f 75 63 62 20 | 3b 20 65 78 70 6f 72 74 |usr/ucb |; export|
|00000380| 20 50 41 54 48 0a 69 66 | 20 74 65 73 74 20 2d 66 | PATH.if| test -f|
|00000390| 20 27 73 70 2e 70 6c 2e | 70 61 72 74 31 27 20 2d | 'sp.pl.|part1' -|
|000003a0| 61 20 22 24 7b 31 7d 22 | 20 21 3d 20 22 2d 63 22 |a "${1}"| != "-c"|
|000003b0| 20 3b 20 74 68 65 6e 20 | 0a 20 20 65 63 68 6f 20 | ; then |. echo |
|000003c0| 73 68 61 72 3a 20 57 69 | 6c 6c 20 6e 6f 74 20 63 |shar: Wi|ll not c|
|000003d0| 6c 6f 62 62 65 72 20 65 | 78 69 73 74 69 6e 67 20 |lobber e|xisting |
|000003e0| 66 69 6c 65 20 5c 22 27 | 73 70 2e 70 6c 2e 70 61 |file \"'|sp.pl.pa|
|000003f0| 72 74 31 27 5c 22 0a 65 | 6c 73 65 0a 65 63 68 6f |rt1'\".e|lse.echo|
|00000400| 20 73 68 61 72 3a 20 45 | 78 74 72 61 63 74 69 6e | shar: E|xtractin|
|00000410| 67 20 5c 22 27 73 70 2e | 70 6c 2e 70 61 72 74 31 |g \"'sp.|pl.part1|
|00000420| 27 5c 22 20 5c 28 32 33 | 38 33 39 20 63 68 61 72 |'\" \(23|839 char|
|00000430| 61 63 74 65 72 73 5c 29 | 0a 73 65 64 20 22 73 2f |acters\)|.sed "s/|
|00000440| 5e 58 2f 2f 22 20 3e 27 | 73 70 2e 70 6c 2e 70 61 |^X//" >'|sp.pl.pa|
|00000450| 72 74 31 27 20 3c 3c 27 | 45 4e 44 5f 4f 46 5f 46 |rt1' <<'|END_OF_F|
|00000460| 49 4c 45 27 0a 58 23 21 | 2f 75 73 72 2f 62 69 6e |ILE'.X#!|/usr/bin|
|00000470| 2f 70 65 72 6c 0a 58 23 | 20 53 63 68 65 6d 65 20 |/perl.X#| Scheme |
|00000480| 69 6e 20 50 65 72 6c 3f | 20 28 73 70 3f 29 0a 58 |in Perl?| (sp?).X|
|00000490| 23 20 50 75 62 6c 69 63 | 20 64 6f 6d 61 69 6e 2e |# Public| domain.|
|000004a0| 20 4e 6f 20 73 74 72 69 | 6e 67 73 20 61 74 74 61 | No stri|ngs atta|
|000004b0| 63 68 65 64 2e 0a 58 0a | 58 28 24 76 65 72 73 69 |ched..X.|X($versi|
|000004c0| 6f 6e 29 20 3d 20 27 24 | 52 65 76 69 73 69 6f 6e |on) = '$|Revision|
|000004d0| 3a 20 32 2e 36 20 24 27 | 20 3d 7e 20 2f 3a 20 28 |: 2.6 $'| =~ /: (|
|000004e0| 5c 64 2b 5c 2e 5c 64 2b | 29 2f 3b 0a 58 0a 58 23 |\d+\.\d+|)/;.X.X#|
|000004f0| 2d 2d 2d 2d 2d 2d 0a 58 | 23 2d 2d 20 42 61 73 69 |------.X|#-- Basi|
|00000500| 63 20 64 61 74 61 20 74 | 79 70 65 73 2e 0a 58 23 |c data t|ypes..X#|
|00000510| 2d 2d 2d 2d 2d 2d 0a 58 | 0a 58 23 20 54 68 65 72 |------.X|.X# Ther|
|00000520| 65 20 61 72 65 20 74 68 | 72 65 65 20 70 6c 61 63 |e are th|ree plac|
|00000530| 65 73 20 74 68 61 74 20 | 6b 6e 6f 77 20 61 62 6f |es that |know abo|
|00000540| 75 74 20 64 61 74 61 20 | 74 79 70 65 20 72 65 70 |ut data |type rep|
|00000550| 72 65 73 65 6e 74 61 74 | 69 6f 6e 3a 0a 58 23 20 |resentat|ion:.X# |
|00000560| 31 2e 20 54 68 65 20 26 | 54 59 50 45 20 66 75 6e |1. The &|TYPE fun|
|00000570| 63 74 69 6f 6e 2e 0a 58 | 23 20 32 2e 20 54 68 65 |ction..X|# 2. The|
|00000580| 20 62 61 73 69 63 20 66 | 75 6e 63 74 69 6f 6e 73 | basic f|unctions|
|00000590| 20 66 6f 72 20 74 68 61 | 74 20 74 79 70 65 20 69 | for tha|t type i|
|000005a0| 6e 20 74 68 69 73 20 73 | 65 63 74 69 6f 6e 2e 0a |n this s|ection..|
|000005b0| 58 23 20 33 2e 20 54 68 | 65 20 65 71 75 69 76 61 |X# 3. Th|e equiva|
|000005c0| 6c 65 6e 63 65 20 72 6f | 75 74 69 6e 65 73 20 28 |lence ro|utines (|
|000005d0| 65 71 3f 2c 20 65 71 76 | 3f 2c 20 61 6e 64 20 65 |eq?, eqv|?, and e|
|000005e0| 71 75 61 6c 3f 29 2e 0a | 58 23 20 41 6e 79 20 63 |qual?)..|X# Any c|
|000005f0| 68 61 6e 67 65 20 69 6e | 20 72 65 70 72 65 73 65 |hange in| represe|
|00000600| 6e 74 61 74 69 6f 6e 20 | 6e 65 65 64 73 20 74 6f |ntation |needs to|
|00000610| 20 6c 6f 6f 6b 20 61 74 | 20 61 6c 6c 20 74 68 65 | look at| all the|
|00000620| 73 65 2e 0a 58 0a 58 25 | 54 59 50 45 6e 61 6d 65 |se..X.X%|TYPEname|
|00000630| 20 3d 20 28 29 3b 0a 58 | 0a 58 73 75 62 20 54 59 | = ();.X|.Xsub TY|
|00000640| 50 45 53 20 7b 0a 58 09 | 6c 6f 63 61 6c 28 24 6b |PES {.X.|local($k|
|00000650| 29 3b 0a 58 09 66 6f 72 | 20 28 24 6b 20 3d 20 30 |);.X.for| ($k = 0|
|00000660| 3b 20 24 6b 20 3c 20 40 | 5f 3b 20 24 6b 20 2b 3d |; $k < @|_; $k +=|
|00000670| 20 32 29 20 7b 0a 58 09 | 09 40 5f 5b 24 6b 5d 20 | 2) {.X.|.@_[$k] |
|00000680| 3d 20 24 6b 3b 0a 58 09 | 09 24 54 59 50 45 6e 61 |= $k;.X.|.$TYPEna|
|00000690| 6d 65 7b 40 5f 5b 24 6b | 5d 7d 20 3d 20 40 5f 5b |me{@_[$k|]} = @_[|
|000006a0| 24 6b 20 2b 20 31 5d 3b | 0a 58 09 7d 0a 58 7d 0a |$k + 1];|.X.}.X}.|
|000006b0| 58 26 54 59 50 45 53 28 | 20 24 54 5f 4e 4f 4e 45 |X&TYPES(| $T_NONE|
|000006c0| 2c 09 27 6e 6f 74 68 69 | 6e 67 27 2c 0a 58 09 24 |,.'nothi|ng',.X.$|
|000006d0| 54 5f 4e 49 4c 2c 09 09 | 27 61 20 6e 75 6c 6c 20 |T_NIL,..|'a null |
|000006e0| 6c 69 73 74 27 2c 0a 58 | 09 24 54 5f 42 4f 4f 4c |list',.X|.$T_BOOL|
|000006f0| 45 41 4e 2c 09 27 61 20 | 62 6f 6f 6c 65 61 6e 27 |EAN,.'a |boolean'|
|00000700| 2c 0a 58 09 24 54 5f 4e | 55 4d 42 45 52 2c 09 27 |,.X.$T_N|UMBER,.'|
|00000710| 61 20 6e 75 6d 62 65 72 | 27 2c 0a 58 09 24 54 5f |a number|',.X.$T_|
|00000720| 43 48 41 52 2c 09 27 61 | 20 63 68 61 72 61 63 74 |CHAR,.'a| charact|
|00000730| 65 72 27 2c 0a 58 09 24 | 54 5f 53 54 52 49 4e 47 |er',.X.$|T_STRING|
|00000740| 2c 09 27 61 20 73 74 72 | 69 6e 67 27 2c 0a 58 09 |,.'a str|ing',.X.|
|00000750| 24 54 5f 50 41 49 52 2c | 09 27 61 20 70 61 69 72 |$T_PAIR,|.'a pair|
|00000760| 27 2c 0a 58 09 24 54 5f | 56 45 43 54 4f 52 2c 09 |',.X.$T_|VECTOR,.|
|00000770| 27 61 20 76 65 63 74 6f | 72 27 2c 0a 58 09 24 54 |'a vecto|r',.X.$T|
|00000780| 5f 54 41 42 4c 45 2c 09 | 27 61 20 74 61 62 6c 65 |_TABLE,.|'a table|
|00000790| 27 2c 0a 58 09 24 54 5f | 53 59 4d 42 4f 4c 2c 09 |',.X.$T_|SYMBOL,.|
|000007a0| 27 61 20 73 79 6d 62 6f | 6c 27 2c 0a 58 09 24 54 |'a symbo|l',.X.$T|
|000007b0| 5f 49 4e 50 55 54 2c 09 | 27 61 6e 20 69 6e 70 75 |_INPUT,.|'an inpu|
|000007c0| 74 20 70 6f 72 74 27 2c | 0a 58 09 24 54 5f 4f 55 |t port',|.X.$T_OU|
|000007d0| 54 50 55 54 2c 09 27 61 | 6e 20 6f 75 74 70 75 74 |TPUT,.'a|n output|
|000007e0| 20 70 6f 72 74 27 2c 0a | 58 09 24 54 5f 46 4f 52 | port',.|X.$T_FOR|
|000007f0| 4d 2c 09 27 61 20 73 70 | 65 63 69 61 6c 20 66 6f |M,.'a sp|ecial fo|
|00000800| 72 6d 27 2c 0a 58 09 24 | 54 5f 53 55 42 52 2c 09 |rm',.X.$|T_SUBR,.|
|00000810| 27 61 20 62 75 69 6c 74 | 2d 69 6e 20 70 72 6f 63 |'a built|-in proc|
|00000820| 65 64 75 72 65 27 2c 0a | 58 09 23 20 53 6f 6d 65 |edure',.|X.# Some|
|00000830| 20 64 65 72 69 76 65 64 | 20 74 79 70 65 73 2e 20 | derived| types. |
|00000840| 20 53 65 65 20 26 43 48 | 4b 74 79 70 65 2e 0a 58 | See &CH|Ktype..X|
|00000850| 09 24 54 5f 4c 49 53 54 | 2c 09 27 61 20 6c 69 73 |.$T_LIST|,.'a lis|
|00000860| 74 27 2c 0a 58 09 24 54 | 5f 50 52 4f 43 45 44 55 |t',.X.$T|_PROCEDU|
|00000870| 52 45 2c 09 27 61 20 70 | 72 6f 63 65 64 75 72 65 |RE,.'a p|rocedure|
|00000880| 27 2c 0a 58 09 24 54 5f | 41 4e 59 2c 09 09 27 61 |',.X.$T_|ANY,..'a|
|00000890| 6e 79 74 68 69 6e 67 27 | 29 3b 0a 58 0a 58 23 20 |nything'|);.X.X# |
|000008a0| 53 63 68 65 6d 65 20 6f | 62 6a 65 63 74 20 2d 3e |Scheme o|bject ->|
|000008b0| 20 74 79 70 65 2e 0a 58 | 73 75 62 20 54 59 50 45 | type..X|sub TYPE|
|000008c0| 20 7b 0a 58 09 6c 6f 63 | 61 6c 28 24 5f 29 20 3d | {.X.loc|al($_) =|
|000008d0| 20 40 5f 3b 0a 58 09 69 | 66 20 20 20 20 28 2f 5e | @_;.X.i|f (/^|
|000008e0| 24 2f 29 09 7b 20 24 54 | 5f 4e 49 4c 3b 20 7d 0a |$/).{ $T|_NIL; }.|
|000008f0| 58 09 65 6c 73 69 66 20 | 28 2f 5e 5b 30 31 5d 2f |X.elsif |(/^[01]/|
|00000900| 29 09 7b 20 24 54 5f 42 | 4f 4f 4c 45 41 4e 3b 20 |).{ $T_B|OOLEAN; |
|00000910| 7d 0a 58 09 65 6c 73 69 | 66 20 28 2f 5e 4e 2f 29 |}.X.elsi|f (/^N/)|
|00000920| 09 7b 20 24 54 5f 4e 55 | 4d 42 45 52 3b 20 7d 0a |.{ $T_NU|MBER; }.|
|00000930| 58 09 65 6c 73 69 66 20 | 28 2f 5e 43 2f 29 09 7b |X.elsif |(/^C/).{|
|00000940| 20 24 54 5f 43 48 41 52 | 3b 20 7d 0a 58 09 65 6c | $T_CHAR|; }.X.el|
|00000950| 73 69 66 20 28 2f 5e 5a | 27 53 2f 29 09 7b 20 24 |sif (/^Z|'S/).{ $|
|00000960| 54 5f 53 54 52 49 4e 47 | 3b 20 7d 0a 58 09 65 6c |T_STRING|; }.X.el|
|00000970| 73 69 66 20 28 2f 5e 5a | 27 50 2f 29 09 7b 20 24 |sif (/^Z|'P/).{ $|
|00000980| 54 5f 50 41 49 52 3b 20 | 7d 0a 58 09 65 6c 73 69 |T_PAIR; |}.X.elsi|
|00000990| 66 20 28 2f 5e 5a 27 56 | 2f 29 09 7b 20 24 54 5f |f (/^Z'V|/).{ $T_|
|000009a0| 56 45 43 54 4f 52 3b 20 | 7d 0a 58 09 65 6c 73 69 |VECTOR; |}.X.elsi|
|000009b0| 66 20 28 2f 5e 5a 27 54 | 2f 29 09 7b 20 24 54 5f |f (/^Z'T|/).{ $T_|
|000009c0| 54 41 42 4c 45 3b 20 7d | 0a 58 09 65 6c 73 69 66 |TABLE; }|.X.elsif|
|000009d0| 20 28 2f 5e 59 2f 29 09 | 7b 20 24 54 5f 53 59 4d | (/^Y/).|{ $T_SYM|
|000009e0| 42 4f 4c 3b 20 7d 0a 58 | 09 65 6c 73 69 66 20 28 |BOL; }.X|.elsif (|
|000009f0| 2f 5e 46 4f 52 4d 2f 29 | 09 7b 20 24 54 5f 46 4f |/^FORM/)|.{ $T_FO|
|00000a00| 52 4d 3b 20 7d 0a 58 09 | 65 6c 73 69 66 20 28 2f |RM; }.X.|elsif (/|
|00000a10| 5e 53 55 42 52 2f 29 09 | 7b 20 24 54 5f 53 55 42 |^SUBR/).|{ $T_SUB|
|00000a20| 52 3b 20 7d 0a 58 09 65 | 6c 73 69 66 20 28 2f 5e |R; }.X.e|lsif (/^|
|00000a30| 5a 27 49 50 2f 29 09 7b | 20 24 54 5f 49 4e 50 55 |Z'IP/).{| $T_INPU|
|00000a40| 54 3b 20 7d 0a 58 09 65 | 6c 73 69 66 20 28 2f 5e |T; }.X.e|lsif (/^|
|00000a50| 5a 27 4f 50 2f 29 09 7b | 20 24 54 5f 4f 55 54 50 |Z'OP/).{| $T_OUTP|
|00000a60| 55 54 3b 20 7d 0a 58 09 | 65 6c 73 65 09 09 7b 20 |UT; }.X.|else..{ |
|00000a70| 24 54 5f 4e 4f 4e 45 3b | 20 7d 0a 58 7d 0a 58 0a |$T_NONE;| }.X}.X.|
|00000a80| 58 23 2d 2d 20 4d 6f 72 | 65 20 64 65 72 69 76 65 |X#-- Mor|e derive|
|00000a90| 64 20 74 79 70 65 73 2e | 0a 58 0a 58 23 20 41 20 |d types.|.X.X# A |
|00000aa0| 63 6c 6f 73 75 72 65 20 | 69 73 20 61 20 76 65 63 |closure |is a vec|
|00000ab0| 74 6f 72 20 74 68 61 74 | 20 6c 6f 6f 6b 73 20 6c |tor that| looks l|
|00000ac0| 69 6b 65 0a 58 23 09 23 | 28 43 4c 4f 53 55 52 45 |ike.X#.#|(CLOSURE|
|00000ad0| 20 65 6e 76 20 6c 69 73 | 74 61 72 67 20 6e 61 72 | env lis|targ nar|
|00000ae0| 67 73 20 61 72 67 2e 2e | 2e 20 63 6f 64 65 2e 2e |gs arg..|. code..|
|00000af0| 2e 29 0a 58 23 20 53 65 | 65 20 26 6c 61 6d 62 64 |.).X# Se|e &lambd|
|00000b00| 61 20 61 6e 64 20 26 61 | 70 70 6c 79 4e 2e 0a 58 |a and &a|pplyN..X|
|00000b10| 24 43 4c 4f 53 55 52 45 | 20 3d 20 26 59 28 27 43 |$CLOSURE| = &Y('C|
|00000b20| 4c 4f 53 55 52 45 27 29 | 3b 0a 58 0a 58 23 20 41 |LOSURE')|;.X.X# A|
|00000b30| 20 70 72 6f 6d 69 73 65 | 20 69 73 20 61 20 76 65 | promise| is a ve|
|00000b40| 63 74 6f 72 20 74 68 61 | 74 20 6c 6f 6f 6b 73 20 |ctor tha|t looks |
|00000b50| 6c 69 6b 65 0a 58 23 09 | 23 28 50 52 4f 4d 49 53 |like.X#.|#(PROMIS|
|00000b60| 45 20 65 6e 76 20 66 6f | 72 63 65 64 3f 20 76 61 |E env fo|rced? va|
|00000b70| 6c 75 65 20 63 6f 64 65 | 2e 2e 2e 29 0a 58 23 20 |lue code|...).X# |
|00000b80| 53 65 65 20 26 64 65 6c | 61 79 20 61 6e 64 20 26 |See &del|ay and &|
|00000b90| 66 6f 72 63 65 2e 0a 58 | 24 50 52 4f 4d 49 53 45 |force..X|$PROMISE|
|00000ba0| 20 3d 20 26 59 28 27 50 | 52 4f 4d 49 53 45 27 29 | = &Y('P|ROMISE')|
|00000bb0| 3b 0a 58 0a 58 23 2d 2d | 20 42 6f 6f 6c 65 61 6e |;.X.X#--| Boolean|
|00000bc0| 73 2e 0a 58 0a 58 23 20 | 53 63 68 65 6d 65 20 62 |s..X.X# |Scheme b|
|00000bd0| 6f 6f 6c 65 61 6e 73 20 | 61 6e 64 20 50 65 72 6c |ooleans |and Perl|
|00000be0| 20 62 6f 6f 6c 65 61 6e | 73 20 61 72 65 20 64 65 | boolean|s are de|
|00000bf0| 73 69 67 6e 65 64 20 74 | 6f 20 62 65 20 65 71 75 |signed t|o be equ|
|00000c00| 69 76 61 6c 65 6e 74 2e | 0a 58 0a 58 24 4e 49 4c |ivalent.|.X.X$NIL|
|00000c10| 20 3d 20 27 27 3b 0a 58 | 24 54 52 55 45 20 3d 20 | = '';.X|$TRUE = |
|00000c20| 31 3b 0a 58 24 46 41 4c | 53 45 20 3d 20 30 3b 0a |1;.X$FAL|SE = 0;.|
|00000c30| 58 0a 58 23 2d 2d 20 4e | 75 6d 62 65 72 73 2e 0a |X.X#-- N|umbers..|
|00000c40| 58 0a 58 23 20 50 65 72 | 6c 20 6e 75 6d 62 65 72 |X.X# Per|l number|
|00000c50| 20 2d 3e 20 53 63 68 65 | 6d 65 20 6e 75 6d 62 65 | -> Sche|me numbe|
|00000c60| 72 2e 0a 58 73 75 62 20 | 4e 20 7b 0a 58 09 27 4e |r..Xsub |N {.X.'N|
|00000c70| 27 20 2e 20 40 5f 5b 30 | 5d 3b 0a 58 7d 0a 58 0a |' . @_[0|];.X}.X.|
|00000c80| 58 23 20 53 63 68 65 6d | 65 20 6e 75 6d 62 65 72 |X# Schem|e number|
|00000c90| 20 2d 3e 20 50 65 72 6c | 20 6e 75 6d 62 65 72 2e | -> Perl| number.|
|00000ca0| 0a 58 73 75 62 20 4e 76 | 61 6c 20 7b 0a 58 09 26 |.Xsub Nv|al {.X.&|
|00000cb0| 45 52 52 62 61 64 5f 74 | 79 70 65 28 40 5f 5b 30 |ERRbad_t|ype(@_[0|
|00000cc0| 5d 2c 20 24 54 5f 4e 55 | 4d 42 45 52 29 20 69 66 |], $T_NU|MBER) if|
|00000cd0| 20 40 5f 5b 30 5d 20 21 | 7e 20 2f 5e 4e 2f 3b 0a | @_[0] !|~ /^N/;.|
|00000ce0| 58 09 24 27 3b 0a 58 7d | 0a 58 0a 58 23 2d 2d 20 |X.$';.X}|.X.X#-- |
|00000cf0| 43 68 61 72 61 63 74 65 | 72 73 2e 0a 58 0a 58 23 |Characte|rs..X.X#|
|00000d00| 20 50 65 72 6c 20 63 68 | 61 72 61 63 74 65 72 20 | Perl ch|aracter |
|00000d10| 2d 3e 20 53 63 68 65 6d | 65 20 63 68 61 72 61 63 |-> Schem|e charac|
|00000d20| 74 65 72 2e 0a 58 73 75 | 62 20 43 20 7b 0a 58 09 |ter..Xsu|b C {.X.|
|00000d30| 27 43 27 20 2e 20 40 5f | 5b 30 5d 3b 0a 58 7d 0a |'C' . @_|[0];.X}.|
|00000d40| 58 0a 58 23 20 53 63 68 | 65 6d 65 20 63 68 61 72 |X.X# Sch|eme char|
|00000d50| 61 63 74 65 72 20 2d 3e | 20 50 65 72 6c 20 63 68 |acter ->| Perl ch|
|00000d60| 61 72 61 63 74 65 72 2e | 0a 58 73 75 62 20 43 76 |aracter.|.Xsub Cv|
|00000d70| 61 6c 20 7b 0a 58 09 26 | 45 52 52 62 61 64 5f 74 |al {.X.&|ERRbad_t|
|00000d80| 79 70 65 28 40 5f 5b 30 | 5d 2c 20 24 54 5f 43 48 |ype(@_[0|], $T_CH|
|00000d90| 41 52 29 20 69 66 20 40 | 5f 5b 30 5d 20 21 7e 20 |AR) if @|_[0] !~ |
|00000da0| 2f 5e 43 2f 3b 0a 58 09 | 24 27 3b 0a 58 7d 0a 58 |/^C/;.X.|$';.X}.X|
|00000db0| 0a 58 23 2d 2d 20 53 74 | 72 69 6e 67 73 2e 0a 58 |.X#-- St|rings..X|
|00000dc0| 23 20 53 74 72 69 6e 67 | 73 20 61 72 65 20 65 6e |# String|s are en|
|00000dd0| 63 61 70 73 75 6c 61 74 | 65 64 20 73 6f 20 74 68 |capsulat|ed so th|
|00000de0| 61 74 20 65 71 76 3f 20 | 77 6f 72 6b 73 20 70 72 |at eqv? |works pr|
|00000df0| 6f 70 65 72 6c 79 2e 0a | 58 0a 58 23 20 50 65 72 |operly..|X.X# Per|
|00000e00| 6c 20 73 74 72 69 6e 67 | 20 2d 3e 20 53 63 68 65 |l string| -> Sche|
|00000e10| 6d 65 20 73 74 72 69 6e | 67 2e 0a 58 73 75 62 20 |me strin|g..Xsub |
|00000e20| 53 20 7b 0a 58 09 6c 6f | 63 61 6c 28 24 73 69 70 |S {.X.lo|cal($sip|
|00000e30| 29 20 3d 20 40 5f 3b 0a | 58 09 6c 6f 63 61 6c 28 |) = @_;.|X.local(|
|00000e40| 2a 73 29 20 3d 20 6c 6f | 63 61 6c 28 24 7a 29 20 |*s) = lo|cal($z) |
|00000e50| 3d 20 22 5a 27 53 22 20 | 2e 20 2b 2b 24 5a 27 53 |= "Z'S" |. ++$Z'S|
|00000e60| 3b 0a 58 09 24 73 20 3d | 20 24 73 69 70 3b 0a 58 |;.X.$s =| $sip;.X|
|00000e70| 09 24 7a 3b 0a 58 7d 0a | 58 0a 58 23 20 53 63 68 |.$z;.X}.|X.X# Sch|
|00000e80| 65 6d 65 20 73 74 72 69 | 6e 67 20 2d 3e 20 50 65 |eme stri|ng -> Pe|
|00000e90| 72 6c 20 73 74 72 69 6e | 67 2e 0a 58 73 75 62 20 |rl strin|g..Xsub |
|00000ea0| 53 76 61 6c 20 7b 0a 58 | 09 26 45 52 52 62 61 64 |Sval {.X|.&ERRbad|
|00000eb0| 5f 74 79 70 65 28 40 5f | 5b 30 5d 2c 20 24 54 5f |_type(@_|[0], $T_|
|00000ec0| 53 54 52 49 4e 47 29 20 | 69 66 20 40 5f 5b 30 5d |STRING) |if @_[0]|
|00000ed0| 20 21 7e 20 2f 5e 5a 27 | 53 2f 3b 0a 58 09 6c 6f | !~ /^Z'|S/;.X.lo|
|00000ee0| 63 61 6c 28 2a 73 29 20 | 3d 20 40 5f 3b 0a 58 09 |cal(*s) |= @_;.X.|
|00000ef0| 24 73 3b 0a 58 7d 0a 58 | 0a 58 23 20 53 63 68 65 |$s;.X}.X|.X# Sche|
|00000f00| 6d 65 20 73 74 72 69 6e | 67 20 3c 3d 20 73 74 61 |me strin|g <= sta|
|00000f10| 72 74 2c 20 6c 65 6e 67 | 74 68 2c 20 6e 65 77 20 |rt, leng|th, new |
|00000f20| 50 65 72 6c 20 73 74 72 | 69 6e 67 2e 0a 58 73 75 |Perl str|ing..Xsu|
|00000f30| 62 20 53 73 65 74 20 7b | 0a 58 09 26 45 52 52 62 |b Sset {|.X.&ERRb|
|00000f40| 61 64 5f 74 79 70 65 28 | 40 5f 5b 30 5d 2c 20 24 |ad_type(|@_[0], $|
|00000f50| 54 5f 53 54 52 49 4e 47 | 29 20 69 66 20 40 5f 5b |T_STRING|) if @_[|
|00000f60| 30 5d 20 21 7e 20 2f 5e | 5a 27 53 2f 3b 0a 58 09 |0] !~ /^|Z'S/;.X.|
|00000f70| 6c 6f 63 61 6c 28 40 73 | 69 70 29 20 3d 20 40 5f |local(@s|ip) = @_|
|00000f80| 3b 0a 58 09 6c 6f 63 61 | 6c 28 2a 73 2c 20 24 70 |;.X.loca|l(*s, $p|
|00000f90| 2c 20 24 6c 2c 20 24 6e | 29 20 3d 20 40 73 69 70 |, $l, $n|) = @sip|
|00000fa0| 3b 0a 58 09 73 75 62 73 | 74 72 28 24 73 2c 20 24 |;.X.subs|tr($s, $|
|00000fb0| 70 2c 20 24 6c 29 20 3d | 20 24 6e 3b 0a 58 7d 0a |p, $l) =| $n;.X}.|
|00000fc0| 58 0a 58 23 2d 2d 20 50 | 61 69 72 73 20 61 6e 64 |X.X#-- P|airs and|
|00000fd0| 20 6c 69 73 74 73 2e 0a | 58 0a 58 23 20 50 65 72 | lists..|X.X# Per|
|00000fe0| 6c 20 76 65 63 74 6f 72 | 20 28 41 2c 20 44 29 20 |l vector| (A, D) |
|00000ff0| 2d 3e 20 53 63 68 65 6d | 65 20 70 61 69 72 20 28 |-> Schem|e pair (|
|00001000| 41 20 2e 20 44 29 2e 0a | 58 73 75 62 20 50 20 7b |A . D)..|Xsub P {|
|00001010| 0a 58 09 6c 6f 63 61 6c | 28 40 73 69 70 29 20 3d |.X.local|(@sip) =|
|00001020| 20 40 5f 3b 0a 58 09 6c | 6f 63 61 6c 28 2a 70 29 | @_;.X.l|ocal(*p)|
|00001030| 20 3d 20 6c 6f 63 61 6c | 28 24 7a 29 20 3d 20 22 | = local|($z) = "|
|00001040| 5a 27 50 22 20 2e 20 2b | 2b 24 5a 27 50 3b 0a 58 |Z'P" . +|+$Z'P;.X|
|00001050| 09 40 70 20 3d 20 40 73 | 69 70 3b 0a 58 09 24 7a |.@p = @s|ip;.X.$z|
|00001060| 3b 0a 58 7d 0a 58 0a 58 | 23 20 53 63 68 65 6d 65 |;.X}.X.X|# Scheme|
|00001070| 20 70 61 69 72 20 28 41 | 20 2e 20 44 29 20 2d 3e | pair (A| . D) ->|
|00001080| 20 50 65 72 6c 20 6c 69 | 73 74 20 28 41 2c 20 44 | Perl li|st (A, D|
|00001090| 29 2e 0a 58 73 75 62 20 | 50 76 61 6c 20 7b 0a 58 |)..Xsub |Pval {.X|
|000010a0| 09 26 45 52 52 62 61 64 | 5f 74 79 70 65 28 40 5f |.&ERRbad|_type(@_|
|000010b0| 5b 30 5d 2c 20 24 54 5f | 50 41 49 52 29 20 69 66 |[0], $T_|PAIR) if|
|000010c0| 20 40 5f 5b 30 5d 20 21 | 7e 20 2f 5e 5a 27 50 2f | @_[0] !|~ /^Z'P/|
|000010d0| 3b 0a 58 09 6c 6f 63 61 | 6c 28 2a 70 29 20 3d 20 |;.X.loca|l(*p) = |
|000010e0| 40 5f 3b 0a 58 09 40 70 | 3b 0a 58 7d 0a 58 0a 58 |@_;.X.@p|;.X}.X.X|
|000010f0| 23 20 53 63 68 65 6d 65 | 20 70 61 69 72 20 28 73 |# Scheme| pair (s|
|00001100| 65 78 70 30 20 2e 20 73 | 65 78 70 31 29 20 3c 3d |exp0 . s|exp1) <=|
|00001110| 20 69 6e 64 65 78 2c 20 | 6e 65 77 20 53 63 68 65 | index, |new Sche|
|00001120| 6d 65 20 76 61 6c 75 65 | 2e 0a 58 73 75 62 20 50 |me value|..Xsub P|
|00001130| 73 65 74 20 7b 0a 58 09 | 26 45 52 52 62 61 64 5f |set {.X.|&ERRbad_|
|00001140| 74 79 70 65 28 40 5f 5b | 30 5d 2c 20 24 54 5f 50 |type(@_[|0], $T_P|
|00001150| 41 49 52 29 20 69 66 20 | 40 5f 5b 30 5d 20 21 7e |AIR) if |@_[0] !~|
|00001160| 20 2f 5e 5a 27 50 2f 3b | 0a 58 09 6c 6f 63 61 6c | /^Z'P/;|.X.local|
|00001170| 28 40 73 69 70 29 20 3d | 20 40 5f 3b 0a 58 09 6c |(@sip) =| @_;.X.l|
|00001180| 6f 63 61 6c 28 2a 70 2c | 20 24 6b 2c 20 24 6e 29 |ocal(*p,| $k, $n)|
|00001190| 20 3d 20 40 73 69 70 3b | 0a 58 09 40 70 5b 24 6b | = @sip;|.X.@p[$k|
|000011a0| 5d 20 3d 20 24 6e 3b 0a | 58 7d 0a 58 0a 58 23 20 |] = $n;.|X}.X.X# |
|000011b0| 50 65 72 6c 20 76 65 63 | 74 6f 72 20 2d 3e 20 53 |Perl vec|tor -> S|
|000011c0| 63 68 65 6d 65 20 6c 69 | 73 74 2e 0a 58 73 75 62 |cheme li|st..Xsub|
|000011d0| 20 4c 20 7b 0a 58 09 6c | 6f 63 61 6c 28 40 76 29 | L {.X.l|ocal(@v)|
|000011e0| 20 3d 20 40 5f 3b 0a 58 | 09 6c 6f 63 61 6c 28 24 | = @_;.X|.local($|
|000011f0| 6c 69 73 74 29 20 3d 20 | 24 4e 49 4c 3b 0a 58 09 |list) = |$NIL;.X.|
|00001200| 24 6c 69 73 74 20 3d 20 | 70 6f 70 20 40 76 2c 20 |$list = |pop @v, |
|00001210| 70 6f 70 20 40 76 20 69 | 66 20 40 76 20 3e 20 32 |pop @v i|f @v > 2|
|00001220| 20 26 26 20 20 40 76 5b | 24 23 76 20 2d 20 31 5d | && @v[|$#v - 1]|
|00001230| 20 65 71 20 27 2e 27 3b | 0a 58 09 24 6c 69 73 74 | eq '.';|.X.$list|
|00001240| 20 3d 20 26 50 28 70 6f | 70 20 40 76 2c 20 24 6c | = &P(po|p @v, $l|
|00001250| 69 73 74 29 20 77 68 69 | 6c 65 20 40 76 3b 0a 58 |ist) whi|le @v;.X|
|00001260| 09 24 6c 69 73 74 3b 0a | 58 7d 0a 58 0a 58 23 20 |.$list;.|X}.X.X# |
|00001270| 53 63 68 65 6d 65 20 6c | 69 73 74 20 2d 3e 20 50 |Scheme l|ist -> P|
|00001280| 65 72 6c 20 76 65 63 74 | 6f 72 2e 20 20 58 58 58 |erl vect|or. XXX|
|00001290| 20 44 6f 65 73 6e 27 74 | 20 64 6f 20 69 6d 70 72 | Doesn't| do impr|
|000012a0| 6f 70 65 72 20 6f 72 20 | 72 65 63 75 72 73 69 76 |oper or |recursiv|
|000012b0| 65 20 6c 69 73 74 73 2e | 0a 58 73 75 62 20 4c 76 |e lists.|.Xsub Lv|
|000012c0| 61 6c 20 7b 0a 58 09 6c | 6f 63 61 6c 28 24 6c 69 |al {.X.l|ocal($li|
|000012d0| 73 74 29 20 3d 20 40 5f | 3b 0a 58 09 6c 6f 63 61 |st) = @_|;.X.loca|
|000012e0| 6c 28 24 78 2c 20 40 76 | 29 3b 0a 58 09 77 68 69 |l($x, @v|);.X.whi|
|000012f0| 6c 65 20 28 24 6c 69 73 | 74 20 6e 65 20 24 4e 49 |le ($lis|t ne $NI|
|00001300| 4c 29 20 7b 0a 58 09 09 | 28 24 78 2c 20 24 6c 69 |L) {.X..|($x, $li|
|00001310| 73 74 29 20 3d 20 26 50 | 76 61 6c 28 24 6c 69 73 |st) = &P|val($lis|
|00001320| 74 29 3b 0a 58 09 09 70 | 75 73 68 28 40 76 2c 20 |t);.X..p|ush(@v, |
|00001330| 24 78 29 3b 0a 58 09 7d | 0a 58 09 40 76 3b 0a 58 |$x);.X.}|.X.@v;.X|
|00001340| 7d 0a 58 0a 58 23 2d 2d | 20 56 65 63 74 6f 72 73 |}.X.X#--| Vectors|
|00001350| 2e 0a 58 0a 58 23 20 50 | 65 72 6c 20 76 65 63 74 |..X.X# P|erl vect|
|00001360| 6f 72 20 2d 3e 20 53 63 | 68 65 6d 65 20 76 65 63 |or -> Sc|heme vec|
|00001370| 74 6f 72 2e 0a 58 73 75 | 62 20 56 20 7b 0a 58 09 |tor..Xsu|b V {.X.|
|00001380| 6c 6f 63 61 6c 28 40 73 | 69 70 29 20 3d 20 40 5f |local(@s|ip) = @_|
|00001390| 3b 0a 58 09 6c 6f 63 61 | 6c 28 2a 76 29 20 3d 20 |;.X.loca|l(*v) = |
|000013a0| 6c 6f 63 61 6c 28 24 7a | 29 20 3d 20 22 5a 27 56 |local($z|) = "Z'V|
|000013b0| 22 20 2e 20 2b 2b 24 5a | 27 56 3b 0a 58 09 40 76 |" . ++$Z|'V;.X.@v|
|000013c0| 20 3d 20 40 73 69 70 3b | 0a 58 09 24 7a 3b 0a 58 | = @sip;|.X.$z;.X|
|000013d0| 7d 0a 58 0a 58 23 20 53 | 63 68 65 6d 65 20 76 65 |}.X.X# S|cheme ve|
|000013e0| 63 74 6f 72 20 2d 3e 20 | 50 65 72 6c 20 76 65 63 |ctor -> |Perl vec|
|000013f0| 74 6f 72 2e 0a 58 73 75 | 62 20 56 76 61 6c 20 7b |tor..Xsu|b Vval {|
|00001400| 0a 58 09 26 45 52 52 62 | 61 64 5f 74 79 70 65 28 |.X.&ERRb|ad_type(|
|00001410| 40 5f 5b 30 5d 2c 20 24 | 54 5f 56 45 43 54 4f 52 |@_[0], $|T_VECTOR|
|00001420| 29 20 69 66 20 40 5f 5b | 30 5d 20 21 7e 20 2f 5e |) if @_[|0] !~ /^|
|00001430| 5a 27 56 2f 3b 0a 58 09 | 6c 6f 63 61 6c 28 2a 76 |Z'V/;.X.|local(*v|
|00001440| 29 20 3d 20 40 5f 3b 0a | 58 09 40 76 3b 0a 58 7d |) = @_;.|X.@v;.X}|
|00001450| 0a 58 0a 58 23 20 53 63 | 68 65 6d 65 20 76 65 63 |.X.X# Sc|heme vec|
|00001460| 74 6f 72 20 3c 3d 20 73 | 74 61 72 74 2c 20 6c 65 |tor <= s|tart, le|
|00001470| 6e 67 74 68 2c 20 6e 65 | 77 20 50 65 72 6c 20 76 |ngth, ne|w Perl v|
|00001480| 65 63 74 6f 72 2e 0a 58 | 73 75 62 20 56 73 65 74 |ector..X|sub Vset|
|00001490| 20 7b 0a 58 09 26 45 52 | 52 62 61 64 5f 74 79 70 | {.X.&ER|Rbad_typ|
|000014a0| 65 28 40 5f 5b 30 5d 2c | 20 24 54 5f 56 45 43 54 |e(@_[0],| $T_VECT|
|000014b0| 4f 52 29 20 69 66 20 40 | 5f 5b 30 5d 20 21 7e 20 |OR) if @|_[0] !~ |
|000014c0| 2f 5e 5a 27 56 2f 3b 0a | 58 09 6c 6f 63 61 6c 28 |/^Z'V/;.|X.local(|
|000014d0| 40 73 69 70 29 20 3d 20 | 40 5f 3b 0a 58 09 6c 6f |@sip) = |@_;.X.lo|
|000014e0| 63 61 6c 28 2a 76 2c 20 | 24 73 2c 20 24 6c 2c 20 |cal(*v, |$s, $l, |
|000014f0| 40 6e 29 20 3d 20 40 73 | 69 70 3b 0a 58 09 73 70 |@n) = @s|ip;.X.sp|
|00001500| 6c 69 63 65 28 40 76 2c | 20 24 73 2c 20 24 6c 2c |lice(@v,| $s, $l,|
|00001510| 20 40 6e 29 3b 0a 58 7d | 0a 58 0a 58 23 2d 2d 20 | @n);.X}|.X.X#-- |
|00001520| 54 61 62 6c 65 73 2e 0a | 58 0a 58 23 20 58 58 58 |Tables..|X.X# XXX|
|00001530| 20 54 61 62 6c 65 73 20 | 63 6f 75 6c 64 20 75 73 | Tables |could us|
|00001540| 65 20 61 20 22 64 65 66 | 61 75 6c 74 20 76 61 6c |e a "def|ault val|
|00001550| 75 65 22 2e 0a 58 0a 58 | 23 20 2d 3e 20 53 63 68 |ue"..X.X|# -> Sch|
|00001560| 65 6d 65 20 74 61 62 6c | 65 2e 0a 58 73 75 62 20 |eme tabl|e..Xsub |
|00001570| 54 20 7b 0a 58 09 22 5a | 27 54 22 20 2e 20 2b 2b |T {.X."Z|'T" . ++|
|00001580| 24 5a 27 54 3b 0a 58 7d | 0a 58 0a 58 23 20 53 63 |$Z'T;.X}|.X.X# Sc|
|00001590| 68 65 6d 65 20 74 61 62 | 6c 65 2c 20 53 63 68 65 |heme tab|le, Sche|
|000015a0| 6d 65 20 73 79 6d 62 6f | 6c 20 2d 3e 20 53 63 68 |me symbo|l -> Sch|
|000015b0| 65 6d 65 20 76 61 6c 75 | 65 2e 0a 58 73 75 62 20 |eme valu|e..Xsub |
|000015c0| 54 76 61 6c 20 7b 0a 58 | 09 26 45 52 52 62 61 64 |Tval {.X|.&ERRbad|
|000015d0| 5f 74 79 70 65 28 40 5f | 5b 30 5d 2c 20 24 54 5f |_type(@_|[0], $T_|
|000015e0| 54 41 42 4c 45 29 20 69 | 66 20 40 5f 5b 30 5d 20 |TABLE) i|f @_[0] |
|000015f0| 21 7e 20 2f 5e 5a 27 54 | 2f 3b 0a 58 09 26 45 52 |!~ /^Z'T|/;.X.&ER|
|00001600| 52 62 61 64 5f 74 79 70 | 65 28 40 5f 5b 31 5d 2c |Rbad_typ|e(@_[1],|
|00001610| 20 24 54 5f 53 59 4d 42 | 4f 4c 29 20 69 66 20 40 | $T_SYMB|OL) if @|
|00001620| 5f 5b 31 5d 20 21 7e 20 | 2f 5e 59 2f 3b 0a 58 09 |_[1] !~ |/^Y/;.X.|
|00001630| 6c 6f 63 61 6c 28 2a 74 | 29 20 3d 20 40 5f 3b 0a |local(*t|) = @_;.|
|00001640| 58 09 24 74 7b 24 27 7d | 3b 0a 58 7d 0a 58 0a 58 |X.$t{$'}|;.X}.X.X|
|00001650| 23 20 53 63 68 65 6d 65 | 20 74 61 62 6c 65 20 3c |# Scheme| table <|
|00001660| 3d 20 50 65 72 6c 20 73 | 74 72 69 6e 67 2c 20 6e |= Perl s|tring, n|
|00001670| 65 77 20 53 63 68 65 6d | 65 20 76 61 6c 75 65 2e |ew Schem|e value.|
|00001680| 0a 58 73 75 62 20 54 73 | 65 74 20 7b 0a 58 09 26 |.Xsub Ts|et {.X.&|
|00001690| 45 52 52 62 61 64 5f 74 | 79 70 65 28 40 5f 5b 30 |ERRbad_t|ype(@_[0|
|000016a0| 5d 2c 20 24 54 5f 54 41 | 42 4c 45 29 20 69 66 20 |], $T_TA|BLE) if |
|000016b0| 40 5f 5b 30 5d 20 21 7e | 20 2f 5e 5a 27 54 2f 3b |@_[0] !~| /^Z'T/;|
|000016c0| 0a 58 09 26 45 52 52 62 | 61 64 5f 74 79 70 65 28 |.X.&ERRb|ad_type(|
|000016d0| 40 5f 5b 31 5d 2c 20 24 | 54 5f 53 59 4d 42 4f 4c |@_[1], $|T_SYMBOL|
|000016e0| 29 20 69 66 20 40 5f 5b | 31 5d 20 21 7e 20 2f 5e |) if @_[|1] !~ /^|
|000016f0| 59 2f 3b 0a 58 09 6c 6f | 63 61 6c 28 40 73 69 70 |Y/;.X.lo|cal(@sip|
|00001700| 29 20 3d 20 40 5f 3b 0a | 58 09 6c 6f 63 61 6c 28 |) = @_;.|X.local(|
|00001710| 2a 74 29 20 3d 20 40 73 | 69 70 3b 0a 58 09 24 74 |*t) = @s|ip;.X.$t|
|00001720| 7b 24 27 7d 20 3d 20 40 | 73 69 70 5b 32 5d 3b 0a |{$'} = @|sip[2];.|
|00001730| 58 7d 0a 58 0a 58 23 20 | 53 63 68 65 6d 65 20 74 |X}.X.X# |Scheme t|
|00001740| 61 62 6c 65 20 2d 3e 20 | 50 65 72 6c 20 76 65 63 |able -> |Perl vec|
|00001750| 74 6f 72 20 6f 66 20 6b | 65 79 73 2e 0a 58 73 75 |tor of k|eys..Xsu|
|00001760| 62 20 54 6b 65 79 73 20 | 7b 0a 58 09 26 45 52 52 |b Tkeys |{.X.&ERR|
|00001770| 62 61 64 5f 74 79 70 65 | 28 40 5f 5b 30 5d 2c 20 |bad_type|(@_[0], |
|00001780| 24 54 5f 54 41 42 4c 45 | 29 20 69 66 20 40 5f 5b |$T_TABLE|) if @_[|
|00001790| 30 5d 20 21 7e 20 2f 5e | 5a 27 54 2f 3b 0a 58 09 |0] !~ /^|Z'T/;.X.|
|000017a0| 6c 6f 63 61 6c 28 2a 74 | 29 20 3d 20 40 5f 3b 0a |local(*t|) = @_;.|
|000017b0| 58 09 6b 65 79 73 20 25 | 74 3b 0a 58 7d 0a 58 0a |X.keys %|t;.X}.X.|
|000017c0| 58 23 2d 2d 20 53 79 6d | 62 6f 6c 73 2e 0a 58 0a |X#-- Sym|bols..X.|
|000017d0| 58 25 4f 42 4c 49 53 54 | 20 3d 20 28 29 3b 0a 58 |X%OBLIST| = ();.X|
|000017e0| 24 4f 42 4c 49 53 54 20 | 3d 20 26 52 45 46 28 22 |$OBLIST |= &REF("|
|000017f0| 5a 27 54 6f 62 6c 69 73 | 74 22 2c 20 27 4f 42 4c |Z'Toblis|t", 'OBL|
|00001800| 49 53 54 27 29 3b 0a 58 | 0a 58 23 20 50 65 72 6c |IST');.X|.X# Perl|
|00001810| 20 73 74 72 69 6e 67 20 | 2d 3e 20 53 63 68 65 6d | string |-> Schem|
|00001820| 65 20 73 79 6d 62 6f 6c | 2e 0a 58 73 75 62 20 59 |e symbol|..Xsub Y|
|00001830| 20 7b 0a 58 09 27 59 27 | 20 2e 20 40 5f 5b 30 5d | {.X.'Y'| . @_[0]|
|00001840| 3b 0a 58 7d 0a 58 0a 58 | 23 20 53 63 68 65 6d 65 |;.X}.X.X|# Scheme|
|00001850| 20 73 79 6d 62 6f 6c 20 | 2d 3e 20 50 65 72 6c 20 | symbol |-> Perl |
|00001860| 73 74 72 69 6e 67 2e 0a | 58 73 75 62 20 59 6e 61 |string..|Xsub Yna|
|00001870| 6d 65 20 7b 0a 58 09 26 | 45 52 52 62 61 64 5f 74 |me {.X.&|ERRbad_t|
|00001880| 79 70 65 28 40 5f 5b 30 | 5d 2c 20 24 54 5f 53 59 |ype(@_[0|], $T_SY|
|00001890| 4d 42 4f 4c 29 20 69 66 | 20 40 5f 5b 30 5d 20 21 |MBOL) if| @_[0] !|
|000018a0| 7e 20 2f 5e 59 2f 3b 0a | 58 09 24 27 3b 0a 58 7d |~ /^Y/;.|X.$';.X}|
|000018b0| 0a 58 0a 58 23 20 53 63 | 68 65 6d 65 20 73 79 6d |.X.X# Sc|heme sym|
|000018c0| 62 6f 6c 20 2d 3e 20 67 | 6c 6f 62 61 6c 20 53 63 |bol -> g|lobal Sc|
|000018d0| 68 65 6d 65 20 76 61 6c | 75 65 2e 0a 58 73 75 62 |heme val|ue..Xsub|
|000018e0| 20 59 76 61 6c 20 7b 0a | 58 09 26 45 52 52 62 61 | Yval {.|X.&ERRba|
|000018f0| 64 5f 74 79 70 65 28 40 | 5f 5b 30 5d 2c 20 24 54 |d_type(@|_[0], $T|
|00001900| 5f 53 59 4d 42 4f 4c 29 | 20 69 66 20 40 5f 5b 30 |_SYMBOL)| if @_[0|
|00001910| 5d 20 21 7e 20 2f 5e 59 | 2f 3b 0a 58 09 24 4f 42 |] !~ /^Y|/;.X.$OB|
|00001920| 4c 49 53 54 7b 24 27 7d | 3b 0a 58 7d 0a 58 0a 58 |LIST{$'}|;.X}.X.X|
|00001930| 23 20 53 63 68 65 6d 65 | 20 73 79 6d 62 6f 6c 20 |# Scheme| symbol |
|00001940| 3c 3d 20 6e 65 77 20 67 | 6c 6f 62 61 6c 20 53 63 |<= new g|lobal Sc|
|00001950| 68 65 6d 65 20 76 61 6c | 75 65 2e 0a 58 73 75 62 |heme val|ue..Xsub|
|00001960| 20 59 73 65 74 20 7b 0a | 58 09 26 45 52 52 62 61 | Yset {.|X.&ERRba|
|00001970| 64 5f 74 79 70 65 28 40 | 5f 5b 30 5d 2c 20 24 54 |d_type(@|_[0], $T|
|00001980| 5f 53 59 4d 42 4f 4c 29 | 20 69 66 20 40 5f 5b 30 |_SYMBOL)| if @_[0|
|00001990| 5d 20 21 7e 20 2f 5e 59 | 2f 3b 0a 58 09 24 4f 42 |] !~ /^Y|/;.X.$OB|
|000019a0| 4c 49 53 54 7b 24 27 7d | 20 3d 20 40 5f 5b 31 5d |LIST{$'}| = @_[1]|
|000019b0| 3b 0a 58 7d 0a 58 0a 58 | 23 20 50 65 72 6c 20 73 |;.X}.X.X|# Perl s|
|000019c0| 74 72 69 6e 67 20 73 79 | 6d 62 6f 6c 20 6e 61 6d |tring sy|mbol nam|
|000019d0| 65 20 3c 3d 20 6e 65 77 | 20 67 6c 6f 62 61 6c 20 |e <= new| global |
|000019e0| 53 63 68 65 6d 65 20 76 | 61 6c 75 65 2e 0a 58 73 |Scheme v|alue..Xs|
|000019f0| 75 62 20 44 45 46 20 7b | 0a 58 09 24 4f 42 4c 49 |ub DEF {|.X.$OBLI|
|00001a00| 53 54 7b 40 5f 5b 30 5d | 7d 20 3d 20 40 5f 5b 31 |ST{@_[0]|} = @_[1|
|00001a10| 5d 3b 0a 58 7d 0a 58 0a | 58 23 20 43 72 65 61 74 |];.X}.X.|X# Creat|
|00001a20| 65 20 61 6e 20 61 6c 69 | 61 73 65 64 20 6f 62 6a |e an ali|ased obj|
|00001a30| 65 63 74 2e 0a 58 73 75 | 62 20 52 45 46 20 7b 0a |ect..Xsu|b REF {.|
|00001a40| 58 09 6c 6f 63 61 6c 28 | 40 73 69 70 29 20 3d 20 |X.local(|@sip) = |
|00001a50| 40 5f 3b 0a 58 09 6c 6f | 63 61 6c 28 24 61 2c 20 |@_;.X.lo|cal($a, |
|00001a60| 24 62 29 20 3d 20 40 73 | 69 70 3b 0a 58 09 65 76 |$b) = @s|ip;.X.ev|
|00001a70| 61 6c 20 22 2a 24 61 20 | 3d 20 2a 24 62 22 20 7c |al "*$a |= *$b" ||
|00001a80| 7c 20 64 69 65 20 22 41 | 4c 49 41 53 3a 20 24 40 || die "A|LIAS: $@|
|00001a90| 2e 5c 6e 22 3b 0a 58 09 | 24 61 3b 0a 58 7d 0a 58 |.\n";.X.|$a;.X}.X|
|00001aa0| 0a 58 26 53 55 42 52 30 | 28 27 67 6c 6f 62 61 6c |.X&SUBR0|('global|
|00001ab0| 2d 65 6e 76 69 72 6f 6e | 6d 65 6e 74 27 29 3b 0a |-environ|ment');.|
|00001ac0| 58 73 75 62 20 67 6c 6f | 62 61 6c 5f 65 6e 76 69 |Xsub glo|bal_envi|
|00001ad0| 72 6f 6e 6d 65 6e 74 20 | 7b 0a 58 09 24 4f 42 4c |ronment |{.X.$OBL|
|00001ae0| 49 53 54 3b 0a 58 7d 0a | 58 0a 58 23 2d 2d 20 49 |IST;.X}.|X.X#-- I|
|00001af0| 6e 70 75 74 20 61 6e 64 | 20 6f 75 74 70 75 74 20 |nput and| output |
|00001b00| 70 6f 72 74 73 2e 0a 58 | 0a 58 25 49 50 62 75 66 |ports..X|.X%IPbuf|
|00001b10| 66 65 72 20 3d 20 28 29 | 3b 0a 58 0a 58 23 20 50 |fer = ()|;.X.X# P|
|00001b20| 65 72 6c 20 73 74 72 69 | 6e 67 20 66 69 6c 65 6e |erl stri|ng filen|
|00001b30| 61 6d 65 20 2d 3e 20 53 | 63 68 65 6d 65 20 69 6e |ame -> S|cheme in|
|00001b40| 70 75 74 20 70 6f 72 74 | 2e 0a 58 73 75 62 20 49 |put port|..Xsub I|
|00001b50| 50 20 7b 0a 58 09 6c 6f | 63 61 6c 28 24 66 29 20 |P {.X.lo|cal($f) |
|00001b60| 3d 20 40 5f 3b 0a 58 09 | 6c 6f 63 61 6c 28 24 7a |= @_;.X.|local($z|
|00001b70| 29 20 3d 20 22 5a 27 49 | 50 22 20 2e 20 2b 2b 24 |) = "Z'I|P" . ++$|
|00001b80| 5a 27 49 50 3b 0a 58 09 | 6f 70 65 6e 28 24 7a 2c |Z'IP;.X.|open($z,|
|00001b90| 20 22 3c 20 24 66 5c 30 | 22 29 20 7c 7c 20 72 65 | "< $f\0|") || re|
|00001ba0| 74 75 72 6e 20 24 4e 49 | 4c 3b 0a 58 09 24 49 50 |turn $NI|L;.X.$IP|
|00001bb0| 62 75 66 66 65 72 7b 24 | 7a 7d 20 3d 20 27 27 3b |buffer{$|z} = '';|
|00001bc0| 0a 58 09 24 7a 3b 0a 58 | 7d 0a 58 0a 58 23 20 53 |.X.$z;.X|}.X.X# S|
|00001bd0| 63 68 65 6d 65 20 69 6e | 70 75 74 20 70 6f 72 74 |cheme in|put port|
|00001be0| 20 2d 3e 20 50 65 72 6c | 20 66 69 6c 65 68 61 6e | -> Perl| filehan|
|00001bf0| 64 6c 65 2e 0a 58 73 75 | 62 20 49 50 76 61 6c 20 |dle..Xsu|b IPval |
|00001c00| 7b 0a 58 09 26 45 52 52 | 62 61 64 5f 74 79 70 65 |{.X.&ERR|bad_type|
|00001c10| 28 40 5f 5b 30 5d 2c 20 | 24 54 5f 49 4e 50 55 54 |(@_[0], |$T_INPUT|
|00001c20| 29 20 69 66 20 40 5f 5b | 30 5d 20 21 7e 20 2f 5e |) if @_[|0] !~ /^|
|00001c30| 5a 27 49 50 2f 3b 0a 58 | 09 40 5f 5b 30 5d 3b 0a |Z'IP/;.X|.@_[0];.|
|00001c40| 58 7d 0a 58 0a 58 23 20 | 53 63 68 65 6d 65 20 69 |X}.X.X# |Scheme i|
|00001c50| 6e 70 75 74 20 70 6f 72 | 74 20 3d 3e 20 50 65 72 |nput por|t => Per|
|00001c60| 6c 20 73 74 72 69 6e 67 | 2e 0a 58 73 75 62 20 49 |l string|..Xsub I|
|00001c70| 50 67 65 74 20 7b 0a 58 | 09 26 45 52 52 62 61 64 |Pget {.X|.&ERRbad|
|00001c80| 5f 74 79 70 65 28 40 5f | 5b 30 5d 2c 20 24 54 5f |_type(@_|[0], $T_|
|00001c90| 49 4e 50 55 54 29 20 69 | 66 20 40 5f 5b 30 5d 20 |INPUT) i|f @_[0] |
|00001ca0| 21 7e 20 2f 5e 5a 27 49 | 50 2f 3b 0a 58 09 6c 6f |!~ /^Z'I|P/;.X.lo|
|00001cb0| 63 61 6c 28 24 69 70 29 | 20 3d 20 40 5f 3b 0a 58 |cal($ip)| = @_;.X|
|00001cc0| 09 6c 6f 63 61 6c 28 24 | 5f 29 20 3d 20 24 49 50 |.local($|_) = $IP|
|00001cd0| 62 75 66 66 65 72 7b 24 | 69 70 7d 3b 0a 58 09 24 |buffer{$|ip};.X.$|
|00001ce0| 5f 20 6e 65 20 27 27 20 | 3f 20 28 24 49 50 62 75 |_ ne '' |? ($IPbu|
|00001cf0| 66 66 65 72 7b 24 69 70 | 7d 20 3d 20 27 27 29 20 |ffer{$ip|} = '') |
|00001d00| 3a 20 28 24 5f 20 3d 20 | 3c 24 69 70 3e 29 3b 0a |: ($_ = |<$ip>);.|
|00001d10| 58 09 24 5f 3b 0a 58 7d | 0a 58 0a 58 23 20 4c 69 |X.$_;.X}|.X.X# Li|
|00001d20| 6b 65 20 26 49 50 67 65 | 74 2c 20 62 75 74 20 73 |ke &IPge|t, but s|
|00001d30| 6b 69 70 20 6c 65 61 64 | 69 6e 67 20 77 68 69 74 |kip lead|ing whit|
|00001d40| 65 73 70 61 63 65 20 61 | 6e 64 20 63 6f 6d 6d 65 |espace a|nd comme|
|00001d50| 6e 74 73 2e 0a 58 73 75 | 62 20 49 50 67 65 74 6e |nts..Xsu|b IPgetn|
|00001d60| 73 20 7b 0a 58 09 26 45 | 52 52 62 61 64 5f 74 79 |s {.X.&E|RRbad_ty|
|00001d70| 70 65 28 40 5f 5b 30 5d | 2c 20 24 54 5f 49 4e 50 |pe(@_[0]|, $T_INP|
|00001d80| 55 54 29 20 69 66 20 40 | 5f 5b 30 5d 20 21 7e 20 |UT) if @|_[0] !~ |
|00001d90| 2f 5e 5a 27 49 50 2f 3b | 0a 58 09 6c 6f 63 61 6c |/^Z'IP/;|.X.local|
|00001da0| 28 24 69 70 29 20 3d 20 | 40 5f 3b 0a 58 09 6c 6f |($ip) = |@_;.X.lo|
|00001db0| 63 61 6c 28 24 5f 29 20 | 3d 20 24 49 50 62 75 66 |cal($_) |= $IPbuf|
|00001dc0| 66 65 72 7b 24 69 70 7d | 3b 0a 58 09 24 5f 20 6e |fer{$ip}|;.X.$_ n|
|00001dd0| 65 20 27 27 20 3f 20 28 | 24 49 50 62 75 66 66 65 |e '' ? (|$IPbuffe|
|00001de0| 72 7b 24 69 70 7d 20 3d | 20 27 27 29 20 3a 20 28 |r{$ip} =| '') : (|
|00001df0| 24 5f 20 3d 20 3c 24 69 | 70 3e 29 3b 0a 58 09 24 |$_ = <$i|p>);.X.$|
|00001e00| 5f 20 3d 20 3c 24 69 70 | 3e 20 77 68 69 6c 65 20 |_ = <$ip|> while |
|00001e10| 24 5f 20 6e 65 20 27 27 | 20 26 26 20 2f 5e 5c 73 |$_ ne ''| && /^\s|
|00001e20| 2a 3b 7c 5e 5c 73 2a 24 | 2f 3b 0a 58 09 73 2f 5e |*;|^\s*$|/;.X.s/^|
|00001e30| 5c 73 2b 2f 2f 3b 0a 58 | 09 24 5f 3b 0a 58 7d 0a |\s+//;.X|.$_;.X}.|
|00001e40| 58 0a 58 23 20 53 63 68 | 65 6d 65 20 69 6e 70 75 |X.X# Sch|eme inpu|
|00001e50| 74 20 70 6f 72 74 20 3c | 3d 20 50 65 72 6c 20 73 |t port <|= Perl s|
|00001e60| 74 72 69 6e 67 2e 0a 58 | 73 75 62 20 49 50 70 75 |tring..X|sub IPpu|
|00001e70| 74 20 7b 0a 58 09 26 45 | 52 52 62 61 64 5f 74 79 |t {.X.&E|RRbad_ty|
|00001e80| 70 65 28 40 5f 5b 30 5d | 2c 20 24 54 5f 49 4e 50 |pe(@_[0]|, $T_INP|
|00001e90| 55 54 29 20 69 66 20 40 | 5f 5b 30 5d 20 21 7e 20 |UT) if @|_[0] !~ |
|00001ea0| 2f 5e 5a 27 49 50 2f 3b | 0a 58 09 24 49 50 62 75 |/^Z'IP/;|.X.$IPbu|
|00001eb0| 66 66 65 72 7b 40 5f 5b | 30 5d 7d 20 2e 3d 20 40 |ffer{@_[|0]} .= @|
|00001ec0| 5f 5b 31 5d 3b 0a 58 7d | 0a 58 0a 58 23 20 50 65 |_[1];.X}|.X.X# Pe|
|00001ed0| 72 6c 20 73 74 72 69 6e | 67 20 66 69 6c 65 6e 61 |rl strin|g filena|
|00001ee0| 6d 65 20 2d 3e 20 53 63 | 68 65 6d 65 20 6f 75 74 |me -> Sc|heme out|
|00001ef0| 70 75 74 20 70 6f 72 74 | 2e 0a 58 73 75 62 20 4f |put port|..Xsub O|
|00001f00| 50 20 7b 0a 58 09 6c 6f | 63 61 6c 28 24 66 29 20 |P {.X.lo|cal($f) |
|00001f10| 3d 20 40 5f 3b 0a 58 09 | 6c 6f 63 61 6c 28 24 7a |= @_;.X.|local($z|
|00001f20| 29 20 3d 20 22 5a 27 4f | 50 22 20 2e 20 2b 2b 24 |) = "Z'O|P" . ++$|
|00001f30| 5a 27 4f 50 3b 0a 58 09 | 6f 70 65 6e 28 24 7a 2c |Z'OP;.X.|open($z,|
|00001f40| 20 22 3e 20 24 66 5c 30 | 22 29 20 7c 7c 20 72 65 | "> $f\0|") || re|
|00001f50| 74 75 72 6e 20 24 4e 49 | 4c 3b 0a 58 09 24 7a 3b |turn $NI|L;.X.$z;|
|00001f60| 0a 58 7d 0a 58 0a 58 23 | 20 53 63 68 65 6d 65 20 |.X}.X.X#| Scheme |
|00001f70| 6f 75 74 70 75 74 20 70 | 6f 72 74 20 2d 3e 20 50 |output p|ort -> P|
|00001f80| 65 72 6c 20 66 69 6c 65 | 68 61 6e 64 6c 65 2e 0a |erl file|handle..|
|00001f90| 58 73 75 62 20 4f 50 76 | 61 6c 20 7b 0a 58 09 26 |Xsub OPv|al {.X.&|
|00001fa0| 45 52 52 62 61 64 5f 74 | 79 70 65 28 40 5f 5b 30 |ERRbad_t|ype(@_[0|
|00001fb0| 5d 2c 20 24 54 5f 4f 55 | 54 50 55 54 29 20 69 66 |], $T_OU|TPUT) if|
|00001fc0| 20 40 5f 5b 30 5d 20 21 | 7e 20 2f 5e 5a 27 4f 50 | @_[0] !|~ /^Z'OP|
|00001fd0| 2f 3b 0a 58 09 40 5f 5b | 30 5d 3b 0a 58 7d 0a 58 |/;.X.@_[|0];.X}.X|
|00001fe0| 0a 58 23 20 53 63 68 65 | 6d 65 20 6f 75 74 70 75 |.X# Sche|me outpu|
|00001ff0| 74 20 70 6f 72 74 20 3c | 3d 20 50 65 72 6c 20 73 |t port <|= Perl s|
|00002000| 74 72 69 6e 67 2e 0a 58 | 73 75 62 20 4f 50 70 75 |tring..X|sub OPpu|
|00002010| 74 20 7b 0a 58 09 26 45 | 52 52 62 61 64 5f 74 79 |t {.X.&E|RRbad_ty|
|00002020| 70 65 28 40 5f 5b 30 5d | 2c 20 24 54 5f 4f 55 54 |pe(@_[0]|, $T_OUT|
|00002030| 50 55 54 29 20 69 66 20 | 40 5f 5b 30 5d 20 21 7e |PUT) if |@_[0] !~|
|00002040| 20 2f 5e 5a 27 4f 50 2f | 3b 0a 58 09 6c 6f 63 61 | /^Z'OP/|;.X.loca|
|00002050| 6c 28 40 73 69 70 29 20 | 3d 20 40 5f 3b 0a 58 09 |l(@sip) |= @_;.X.|
|00002060| 6c 6f 63 61 6c 28 24 66 | 68 29 20 3d 20 73 68 69 |local($f|h) = shi|
|00002070| 66 74 20 40 73 69 70 3b | 0a 58 09 70 72 69 6e 74 |ft @sip;|.X.print|
|00002080| 20 24 66 68 20 40 73 69 | 70 3b 0a 58 7d 0a 58 0a | $fh @si|p;.X}.X.|
|00002090| 58 73 75 62 20 49 4f 69 | 6e 69 74 20 7b 0a 58 09 |Xsub IOi|nit {.X.|
|000020a0| 6f 70 65 6e 28 24 73 74 | 64 69 6e 20 20 3d 20 22 |open($st|din = "|
|000020b0| 5a 27 49 50 73 74 64 69 | 6e 22 2c 20 20 22 3c 26 |Z'IPstdi|n", "<&|
|000020c0| 20 53 54 44 49 4e 22 29 | 3b 0a 58 09 6f 70 65 6e | STDIN")|;.X.open|
|000020d0| 28 24 73 74 64 6f 75 74 | 20 3d 20 22 5a 27 4f 50 |($stdout| = "Z'OP|
|000020e0| 73 74 64 6f 75 74 22 2c | 20 22 3e 26 20 53 54 44 |stdout",| ">& STD|
|000020f0| 4f 55 54 22 29 3b 0a 58 | 09 6f 70 65 6e 28 24 73 |OUT");.X|.open($s|
|00002100| 74 64 65 72 72 20 3d 20 | 22 5a 27 4f 50 73 74 64 |tderr = |"Z'OPstd|
|00002110| 65 72 72 22 2c 20 22 3e | 26 20 53 54 44 45 52 52 |err", ">|& STDERR|
|00002120| 22 29 3b 0a 58 09 73 65 | 6c 65 63 74 28 24 73 74 |");.X.se|lect($st|
|00002130| 64 65 72 72 29 3b 20 24 | 7c 20 3d 20 31 3b 0a 58 |derr); $|| = 1;.X|
|00002140| 09 24 74 74 79 69 6e 20 | 20 3d 20 26 49 50 28 27 |.$ttyin | = &IP('|
|00002150| 2f 64 65 76 2f 74 74 79 | 27 29 3b 0a 58 09 24 74 |/dev/tty|');.X.$t|
|00002160| 74 79 6f 75 74 20 3d 20 | 26 4f 50 28 27 2f 64 65 |tyout = |&OP('/de|
|00002170| 76 2f 74 74 79 27 29 3b | 0a 58 7d 0a 58 0a 58 73 |v/tty');|.X}.X.Xs|
|00002180| 75 62 20 49 4f 73 68 75 | 74 64 6f 77 6e 20 7b 0a |ub IOshu|tdown {.|
|00002190| 58 09 63 6c 6f 73 65 28 | 24 73 74 64 69 6e 29 3b |X.close(|$stdin);|
|000021a0| 0a 58 09 63 6c 6f 73 65 | 28 24 73 74 64 6f 75 74 |.X.close|($stdout|
|000021b0| 29 3b 0a 58 09 63 6c 6f | 73 65 28 24 73 74 64 65 |);.X.clo|se($stde|
|000021c0| 72 72 29 3b 0a 58 09 63 | 6c 6f 73 65 28 24 74 74 |rr);.X.c|lose($tt|
|000021d0| 79 69 6e 29 3b 0a 58 09 | 63 6c 6f 73 65 28 24 74 |yin);.X.|close($t|
|000021e0| 74 79 6f 75 74 29 3b 0a | 58 7d 0a 58 0a 58 26 53 |tyout);.|X}.X.X&S|
|000021f0| 55 42 52 30 28 27 73 74 | 61 6e 64 61 72 64 2d 69 |UBR0('st|andard-i|
|00002200| 6e 70 75 74 27 29 3b 20 | 20 73 75 62 20 73 74 61 |nput'); | sub sta|
|00002210| 6e 64 61 72 64 5f 69 6e | 70 75 74 20 20 7b 20 24 |ndard_in|put { $|
|00002220| 73 74 64 69 6e 3b 20 20 | 7d 0a 58 26 53 55 42 52 |stdin; |}.X&SUBR|
|00002230| 30 28 27 73 74 61 6e 64 | 61 72 64 2d 6f 75 74 70 |0('stand|ard-outp|
|00002240| 75 74 27 29 3b 20 73 75 | 62 20 73 74 61 6e 64 61 |ut'); su|b standa|
|00002250| 72 64 5f 6f 75 74 70 75 | 74 20 7b 20 24 73 74 64 |rd_outpu|t { $std|
|00002260| 6f 75 74 3b 20 7d 0a 58 | 26 53 55 42 52 30 28 27 |out; }.X|&SUBR0('|
|00002270| 73 74 61 6e 64 61 72 64 | 2d 65 72 72 6f 72 27 29 |standard|-error')|
|00002280| 3b 20 20 73 75 62 20 73 | 74 61 6e 64 61 72 64 5f |; sub s|tandard_|
|00002290| 65 72 72 6f 72 20 20 7b | 20 24 73 74 64 65 72 72 |error {| $stderr|
|000022a0| 3b 20 7d 0a 58 26 53 55 | 42 52 30 28 27 74 65 72 |; }.X&SU|BR0('ter|
|000022b0| 6d 69 6e 61 6c 2d 69 6e | 70 75 74 27 29 3b 20 20 |minal-in|put'); |
|000022c0| 73 75 62 20 74 65 72 6d | 69 6e 61 6c 5f 69 6e 70 |sub term|inal_inp|
|000022d0| 75 74 20 20 7b 20 24 74 | 74 79 69 6e 3b 20 20 7d |ut { $t|tyin; }|
|000022e0| 0a 58 26 53 55 42 52 30 | 28 27 74 65 72 6d 69 6e |.X&SUBR0|('termin|
|000022f0| 61 6c 2d 6f 75 74 70 75 | 74 27 29 3b 20 73 75 62 |al-outpu|t'); sub|
|00002300| 20 74 65 72 6d 69 6e 61 | 6c 5f 6f 75 74 70 75 74 | termina|l_output|
|00002310| 20 7b 20 24 74 74 79 6f | 75 74 3b 20 7d 0a 58 0a | { $ttyo|ut; }.X.|
|00002320| 58 23 2d 2d 20 53 70 65 | 63 69 61 6c 20 66 6f 72 |X#-- Spe|cial for|
|00002330| 6d 73 2e 0a 58 0a 58 23 | 20 44 65 66 69 6e 65 20 |ms..X.X#| Define |
|00002340| 53 63 68 65 6d 65 20 73 | 70 65 63 69 61 6c 20 66 |Scheme s|pecial f|
|00002350| 6f 72 6d 20 3c 3d 20 6e | 61 6d 65 2e 0a 58 73 75 |orm <= n|ame..Xsu|
|00002360| 62 20 46 4f 52 4d 20 7b | 0a 58 09 6c 6f 63 61 6c |b FORM {|.X.local|
|00002370| 28 24 73 75 62 29 20 3d | 20 6c 6f 63 61 6c 28 24 |($sub) =| local($|
|00002380| 6e 61 6d 65 29 20 3d 20 | 40 5f 5b 30 5d 3b 0a 58 |name) = |@_[0];.X|
|00002390| 09 24 73 75 62 20 3d 7e | 20 74 72 2f 2d 3e 3f 21 |.$sub =~| tr/->?!|
|000023a0| 2a 2f 5f 32 50 49 58 2f | 3b 0a 58 09 26 44 45 46 |*/_2PIX/|;.X.&DEF|
|000023b0| 28 24 6e 61 6d 65 2c 20 | 27 46 4f 52 4d 27 20 2e |($name, |'FORM' .|
|000023c0| 20 24 73 75 62 29 3b 0a | 58 7d 0a 58 0a 58 23 20 | $sub);.|X}.X.X# |
|000023d0| 53 63 68 65 6d 65 20 73 | 70 65 63 69 61 6c 20 66 |Scheme s|pecial f|
|000023e0| 6f 72 6d 20 2d 3e 20 50 | 65 72 6c 20 73 75 62 72 |orm -> P|erl subr|
|000023f0| 6f 75 74 69 6e 65 20 6e | 61 6d 65 2e 0a 58 73 75 |outine n|ame..Xsu|
|00002400| 62 20 46 4f 52 4d 76 61 | 6c 20 7b 0a 58 09 26 45 |b FORMva|l {.X.&E|
|00002410| 52 52 62 61 64 5f 74 79 | 70 65 28 40 5f 5b 30 5d |RRbad_ty|pe(@_[0]|
|00002420| 2c 20 24 54 5f 46 4f 52 | 4d 29 20 69 66 20 40 5f |, $T_FOR|M) if @_|
|00002430| 5b 30 5d 20 21 7e 20 2f | 5e 46 4f 52 4d 2f 3b 0a |[0] !~ /|^FORM/;.|
|00002440| 58 09 24 27 3b 0a 58 7d | 0a 58 0a 58 23 2d 2d 20 |X.$';.X}|.X.X#-- |
|00002450| 42 75 69 6c 74 69 6e 20 | 66 75 6e 63 74 69 6f 6e |Builtin |function|
|00002460| 73 20 28 73 75 62 72 73 | 29 2e 0a 58 0a 58 25 53 |s (subrs|)..X.X%S|
|00002470| 55 42 52 6d 69 6e 20 3d | 20 28 29 3b 0a 58 25 53 |UBRmin =| ();.X%S|
|00002480| 55 42 52 6d 61 78 20 3d | 20 28 29 3b 0a 58 25 53 |UBRmax =| ();.X%S|
|00002490| 55 42 52 74 79 70 65 73 | 20 3d 20 28 29 3b 0a 58 |UBRtypes| = ();.X|
|000024a0| 0a 58 23 20 44 65 66 69 | 6e 65 20 53 63 68 65 6d |.X# Defi|ne Schem|
|000024b0| 65 20 62 75 69 6c 74 69 | 6e 20 3c 3d 20 6e 61 6d |e builti|n <= nam|
|000024c0| 65 2c 20 6d 69 6e 61 72 | 67 73 2c 20 6d 61 78 61 |e, minar|gs, maxa|
|000024d0| 72 67 73 2c 20 74 79 70 | 65 20 6c 69 73 74 2e 0a |rgs, typ|e list..|
|000024e0| 58 73 75 62 20 53 55 42 | 52 20 7b 0a 58 09 6c 6f |Xsub SUB|R {.X.lo|
|000024f0| 63 61 6c 28 40 73 69 70 | 29 20 3d 20 40 5f 3b 0a |cal(@sip|) = @_;.|
|00002500| 58 09 6c 6f 63 61 6c 28 | 24 6e 61 6d 65 2c 20 24 |X.local(|$name, $|
|00002510| 6d 69 6e 2c 20 24 6d 61 | 78 2c 20 40 74 79 70 65 |min, $ma|x, @type|
|00002520| 73 29 20 3d 20 40 73 69 | 70 3b 0a 58 09 6c 6f 63 |s) = @si|p;.X.loc|
|00002530| 61 6c 28 24 73 75 62 29 | 20 3d 20 24 6e 61 6d 65 |al($sub)| = $name|
|00002540| 3b 0a 58 09 24 73 75 62 | 20 3d 7e 20 74 72 2f 2d |;.X.$sub| =~ tr/-|
|00002550| 3e 3f 21 2a 2f 5f 32 50 | 49 58 2f 3b 0a 58 09 24 |>?!*/_2P|IX/;.X.$|
|00002560| 53 55 42 52 6d 69 6e 7b | 24 73 75 62 7d 20 3d 20 |SUBRmin{|$sub} = |
|00002570| 24 6d 69 6e 3b 0a 58 09 | 24 53 55 42 52 6d 61 78 |$min;.X.|$SUBRmax|
|00002580| 7b 24 73 75 62 7d 20 3d | 20 24 6d 61 78 3b 0a 58 |{$sub} =| $max;.X|
|00002590| 09 24 53 55 42 52 74 79 | 70 65 73 7b 24 73 75 62 |.$SUBRty|pes{$sub|
|000025a0| 7d 20 3d 20 70 61 63 6b | 28 27 4c 2a 27 2c 20 40 |} = pack|('L*', @|
|000025b0| 74 79 70 65 73 29 3b 0a | 58 09 26 44 45 46 28 24 |types);.|X.&DEF($|
|000025c0| 6e 61 6d 65 2c 20 27 53 | 55 42 52 27 20 2e 20 24 |name, 'S|UBR' . $|
|000025d0| 73 75 62 29 3b 0a 58 7d | 0a 58 0a 58 23 20 53 63 |sub);.X}|.X.X# Sc|
|000025e0| 68 65 6d 65 20 62 75 69 | 6c 74 69 6e 20 66 75 6e |heme bui|ltin fun|
|000025f0| 63 74 69 6f 6e 20 2d 3e | 20 50 65 72 6c 20 73 75 |ction ->| Perl su|
|00002600| 62 20 6e 61 6d 65 2c 20 | 6d 69 6e 61 72 67 73 2c |b name, |minargs,|
|00002610| 20 6d 61 78 61 72 67 73 | 2c 20 74 79 70 65 20 6c | maxargs|, type l|
|00002620| 69 73 74 2e 0a 58 73 75 | 62 20 53 55 42 52 76 61 |ist..Xsu|b SUBRva|
|00002630| 6c 20 7b 0a 58 09 26 45 | 52 52 62 61 64 5f 74 79 |l {.X.&E|RRbad_ty|
|00002640| 70 65 28 40 5f 5b 30 5d | 2c 20 24 54 5f 53 55 42 |pe(@_[0]|, $T_SUB|
|00002650| 52 29 20 69 66 20 40 5f | 5b 30 5d 20 21 7e 20 2f |R) if @_|[0] !~ /|
|00002660| 5e 53 55 42 52 2f 3b 0a | 58 09 28 24 27 2c 20 24 |^SUBR/;.|X.($', $|
|00002670| 53 55 42 52 6d 69 6e 7b | 24 27 7d 2c 20 24 53 55 |SUBRmin{|$'}, $SU|
|00002680| 42 52 6d 61 78 7b 24 27 | 7d 2c 20 75 6e 70 61 63 |BRmax{$'|}, unpac|
|00002690| 6b 28 27 4c 2a 27 2c 20 | 24 53 55 42 52 74 79 70 |k('L*', |$SUBRtyp|
|000026a0| 65 73 7b 24 27 7d 29 29 | 3b 0a 58 7d 0a 58 0a 58 |es{$'}))|;.X}.X.X|
|000026b0| 23 20 53 6f 6d 65 20 63 | 6f 6e 76 65 6e 69 65 6e |# Some c|onvenien|
|000026c0| 74 20 61 6c 69 61 73 65 | 73 2e 2e 2e 0a 58 73 75 |t aliase|s....Xsu|
|000026d0| 62 20 53 55 42 52 30 20 | 7b 20 26 53 55 42 52 28 |b SUBR0 |{ &SUBR(|
|000026e0| 73 68 69 66 74 2c 20 30 | 2c 20 30 29 3b 20 7d 0a |shift, 0|, 0); }.|
|000026f0| 58 73 75 62 20 53 55 42 | 52 31 20 7b 20 26 53 55 |Xsub SUB|R1 { &SU|
|00002700| 42 52 28 73 68 69 66 74 | 2c 20 31 2c 20 31 2c 20 |BR(shift|, 1, 1, |
|00002710| 40 5f 29 3b 20 7d 0a 58 | 73 75 62 20 53 55 42 52 |@_); }.X|sub SUBR|
|00002720| 32 20 7b 20 26 53 55 42 | 52 28 73 68 69 66 74 2c |2 { &SUB|R(shift,|
|00002730| 20 32 2c 20 32 2c 20 40 | 5f 29 3b 20 7d 0a 58 73 | 2, 2, @|_); }.Xs|
|00002740| 75 62 20 53 55 42 52 33 | 20 7b 20 26 53 55 42 52 |ub SUBR3| { &SUBR|
|00002750| 28 73 68 69 66 74 2c 20 | 33 2c 20 33 2c 20 40 5f |(shift, |3, 3, @_|
|00002760| 29 3b 20 7d 0a 58 73 75 | 62 20 53 55 42 52 4e 20 |); }.Xsu|b SUBRN |
|00002770| 7b 20 26 53 55 42 52 28 | 73 68 69 66 74 2c 20 30 |{ &SUBR(|shift, 0|
|00002780| 2c 20 2d 31 2c 20 40 5f | 29 3b 20 7d 0a 58 0a 58 |, -1, @_|); }.X.X|
|00002790| 23 20 41 20 63 6f 6e 76 | 65 6e 69 65 6e 74 20 6d |# A conv|enient m|
|000027a0| 61 63 72 6f 2e 2e 2e 0a | 58 73 75 62 20 43 4d 50 |acro....|Xsub CMP|
|000027b0| 5f 53 55 42 52 20 7b 0a | 58 09 6c 6f 63 61 6c 28 |_SUBR {.|X.local(|
|000027c0| 40 73 69 70 29 20 3d 20 | 40 5f 3b 0a 58 09 6c 6f |@sip) = |@_;.X.lo|
|000027d0| 63 61 6c 28 24 6e 61 6d | 65 2c 20 24 6c 6f 6e 67 |cal($nam|e, $long|
|000027e0| 6e 61 6d 65 2c 20 24 74 | 79 70 65 2c 20 24 61 63 |name, $t|ype, $ac|
|000027f0| 63 2c 20 24 63 6d 70 29 | 20 3d 20 40 73 69 70 3b |c, $cmp)| = @sip;|
|00002800| 0a 58 09 6c 6f 63 61 6c | 28 24 73 29 20 3d 20 26 |.X.local|($s) = &|
|00002810| 53 55 42 52 28 24 6c 6f | 6e 67 6e 61 6d 65 2c 20 |SUBR($lo|ngname, |
|00002820| 30 2c 20 2d 31 2c 20 24 | 74 79 70 65 29 3b 0a 58 |0, -1, $|type);.X|
|00002830| 09 26 44 45 46 28 24 6e | 61 6d 65 2c 20 24 73 29 |.&DEF($n|ame, $s)|
|00002840| 3b 0a 58 09 65 76 61 6c | 20 27 73 75 62 20 27 20 |;.X.eval| 'sub ' |
|00002850| 2e 20 28 26 53 55 42 52 | 76 61 6c 28 24 73 29 29 |. (&SUBR|val($s))|
|00002860| 5b 30 5d 20 2e 20 27 20 | 7b 0a 58 09 09 6c 6f 63 |[0] . ' |{.X..loc|
|00002870| 61 6c 28 40 73 69 70 29 | 20 3d 20 40 5f 3b 0a 58 |al(@sip)| = @_;.X|
|00002880| 09 09 6c 6f 63 61 6c 28 | 24 72 29 20 3d 20 31 3b |..local(|$r) = 1;|
|00002890| 0a 58 09 09 66 6f 72 20 | 28 3b 20 24 72 20 26 26 |.X..for |(; $r &&|
|000028a0| 20 40 73 69 70 20 3e 20 | 31 3b 20 73 68 69 66 74 | @sip > |1; shift|
|000028b0| 20 40 73 69 70 29 20 7b | 0a 58 09 09 09 24 72 20 | @sip) {|.X...$r |
|000028c0| 3d 20 27 2e 24 61 63 63 | 2e 27 28 40 73 69 70 5b |= '.$acc|.'(@sip[|
|000028d0| 30 5d 29 20 27 2e 24 63 | 6d 70 2e 27 20 27 2e 24 |0]) '.$c|mp.' '.$|
|000028e0| 61 63 63 2e 27 28 40 73 | 69 70 5b 31 5d 29 3b 0a |acc.'(@s|ip[1]);.|
|000028f0| 58 09 09 7d 0a 58 09 09 | 24 72 3b 0a 58 09 7d 27 |X..}.X..|$r;.X.}'|
|00002900| 3b 0a 58 7d 0a 58 0a 58 | 23 2d 2d 20 4d 69 73 63 |;.X}.X.X|#-- Misc|
|00002910| 65 6c 6c 61 6e 79 2e 0a | 58 0a 58 26 53 55 42 52 |ellany..|X.X&SUBR|
|00002920| 30 28 27 2a 73 68 6f 77 | 2d 6d 65 6d 6f 72 79 2d |0('*show|-memory-|
|00002930| 75 73 65 27 29 3b 0a 58 | 73 75 62 20 58 73 68 6f |use');.X|sub Xsho|
|00002940| 77 5f 6d 65 6d 6f 72 79 | 5f 75 73 65 20 7b 0a 58 |w_memory|_use {.X|
|00002950| 09 70 72 69 6e 74 20 24 | 73 74 64 65 72 72 20 27 |.print $|stderr '|
|00002960| 6d 65 6d 6f 72 79 20 75 | 73 65 3a 20 73 27 2c 20 |memory u|se: s', |
|00002970| 24 5a 27 53 2b 30 2c 20 | 27 20 70 27 2c 20 24 5a |$Z'S+0, |' p', $Z|
|00002980| 27 50 2b 30 2c 20 27 20 | 76 27 2c 20 24 5a 27 56 |'P+0, ' |v', $Z'V|
|00002990| 2b 30 3b 0a 58 09 70 72 | 69 6e 74 20 24 73 74 64 |+0;.X.pr|int $std|
|000029a0| 65 72 72 20 27 20 74 27 | 2c 20 24 5a 27 54 2b 30 |err ' t'|, $Z'T+0|
|000029b0| 2c 20 27 20 69 70 27 2c | 20 24 5a 27 49 50 2b 30 |, ' ip',| $Z'IP+0|
|000029c0| 2c 20 27 20 6f 70 27 2c | 20 24 5a 27 4f 50 2b 30 |, ' op',| $Z'OP+0|
|000029d0| 3b 0a 58 09 70 72 69 6e | 74 20 24 73 74 64 65 72 |;.X.prin|t $stder|
|000029e0| 72 20 22 5c 6e 22 3b 0a | 58 7d 0a 58 0a 58 23 2d |r "\n";.|X}.X.X#-|
|000029f0| 2d 2d 2d 2d 2d 0a 58 23 | 2d 2d 20 45 6e 76 69 72 |-----.X#|-- Envir|
|00002a00| 6f 6e 6d 65 6e 74 73 20 | 61 6e 64 20 66 72 61 6d |onments |and fram|
|00002a10| 65 73 2e 0a 58 23 2d 2d | 2d 2d 2d 2d 0a 58 0a 58 |es..X#--|----.X.X|
|00002a20| 23 20 40 45 4e 56 63 75 | 72 72 65 6e 74 20 69 73 |# @ENVcu|rrent is|
|00002a30| 20 61 20 50 65 72 6c 20 | 76 65 63 74 6f 72 20 74 | a Perl |vector t|
|00002a40| 68 61 74 20 67 65 74 73 | 20 6d 6f 64 69 66 69 65 |hat gets| modifie|
|00002a50| 64 20 69 6e 20 70 6c 61 | 63 65 2c 20 66 6f 72 20 |d in pla|ce, for |
|00002a60| 65 66 66 69 63 69 65 6e | 63 79 2e 0a 58 23 20 24 |efficien|cy..X# $|
|00002a70| 45 4e 56 63 61 63 68 65 | 20 69 73 20 61 20 53 63 |ENVcache| is a Sc|
|00002a80| 68 65 6d 65 20 76 65 63 | 74 6f 72 20 74 68 61 74 |heme vec|tor that|
|00002a90| 27 73 20 61 20 63 6f 70 | 79 20 6f 66 20 74 68 65 |'s a cop|y of the|
|00002aa0| 20 63 75 72 72 65 6e 74 | 20 65 6e 76 69 72 6f 6e | current| environ|
|00002ab0| 6d 65 6e 74 2e 0a 58 0a | 58 40 45 4e 56 63 75 72 |ment..X.|X@ENVcur|
|00002ac0| 72 65 6e 74 20 3d 20 28 | 29 3b 0a 58 24 45 4e 56 |rent = (|);.X$ENV|
|00002ad0| 63 61 63 68 65 20 3d 20 | 24 46 41 4c 53 45 3b 0a |cache = |$FALSE;.|
|00002ae0| 58 40 45 4e 56 73 74 61 | 63 6b 20 3d 20 28 29 3b |X@ENVsta|ck = ();|
|00002af0| 0a 58 0a 58 23 20 52 65 | 74 75 72 6e 73 20 74 68 |.X.X# Re|turns th|
|00002b00| 65 20 63 75 72 72 65 6e | 74 20 65 6e 76 69 72 6f |e curren|t enviro|
|00002b10| 6e 6d 65 6e 74 2e 0a 58 | 73 75 62 20 45 4e 56 63 |nment..X|sub ENVc|
|00002b20| 75 72 72 65 6e 74 20 7b | 0a 58 09 24 45 4e 56 63 |urrent {|.X.$ENVc|
|00002b30| 61 63 68 65 20 3d 20 26 | 56 28 40 45 4e 56 63 75 |ache = &|V(@ENVcu|
|00002b40| 72 72 65 6e 74 29 20 69 | 66 20 21 20 24 45 4e 56 |rrent) i|f ! $ENV|
|00002b50| 63 61 63 68 65 3b 0a 58 | 09 24 45 4e 56 63 61 63 |cache;.X|.$ENVcac|
|00002b60| 68 65 3b 0a 58 7d 0a 58 | 0a 58 23 20 50 75 73 68 |he;.X}.X|.X# Push|
|00002b70| 20 74 6f 20 61 20 6e 65 | 77 20 65 6e 76 69 72 6f | to a ne|w enviro|
|00002b80| 6e 6d 65 6e 74 2e 0a 58 | 73 75 62 20 45 4e 56 70 |nment..X|sub ENVp|
|00002b90| 75 73 68 20 7b 0a 58 09 | 6c 6f 63 61 6c 28 24 6e |ush {.X.|local($n|
|00002ba0| 65 77 29 20 3d 20 40 5f | 3b 0a 58 09 70 75 73 68 |ew) = @_|;.X.push|
|00002bb0| 28 40 45 4e 56 73 74 61 | 63 6b 2c 20 24 45 4e 56 |(@ENVsta|ck, $ENV|
|00002bc0| 63 61 63 68 65 20 7c 7c | 20 26 56 28 40 45 4e 56 |cache ||| &V(@ENV|
|00002bd0| 63 75 72 72 65 6e 74 29 | 29 3b 0a 58 09 40 45 4e |current)|);.X.@EN|
|00002be0| 56 63 75 72 72 65 6e 74 | 20 3d 20 26 56 76 61 6c |Vcurrent| = &Vval|
|00002bf0| 28 24 6e 65 77 29 3b 0a | 58 09 24 45 4e 56 63 61 |($new);.|X.$ENVca|
|00002c00| 63 68 65 20 3d 20 24 6e | 65 77 3b 0a 58 7d 0a 58 |che = $n|ew;.X}.X|
|00002c10| 0a 58 23 20 50 6f 70 20 | 74 6f 20 74 68 65 20 6f |.X# Pop |to the o|
|00002c20| 6c 64 20 65 6e 76 69 72 | 6f 6e 6d 65 6e 74 2e 0a |ld envir|onment..|
|00002c30| 58 73 75 62 20 45 4e 56 | 70 6f 70 20 7b 0a 58 09 |Xsub ENV|pop {.X.|
|00002c40| 24 45 4e 56 63 61 63 68 | 65 20 3d 20 70 6f 70 20 |$ENVcach|e = pop |
|00002c50| 40 45 4e 56 73 74 61 63 | 6b 3b 0a 58 09 40 45 4e |@ENVstac|k;.X.@EN|
|00002c60| 56 63 75 72 72 65 6e 74 | 20 3d 20 26 56 76 61 6c |Vcurrent| = &Vval|
|00002c70| 28 24 45 4e 56 63 61 63 | 68 65 29 3b 0a 58 7d 0a |($ENVcac|he);.X}.|
|00002c80| 58 0a 58 23 20 50 6f 70 | 20 74 6f 20 74 68 65 20 |X.X# Pop| to the |
|00002c90| 67 6c 6f 62 61 6c 20 65 | 6e 76 69 72 6f 6e 6d 65 |global e|nvironme|
|00002ca0| 6e 74 2e 0a 58 73 75 62 | 20 45 4e 56 72 65 73 65 |nt..Xsub| ENVrese|
|00002cb0| 74 20 7b 0a 58 09 40 45 | 4e 56 73 74 61 63 6b 20 |t {.X.@E|NVstack |
|00002cc0| 3d 20 28 29 3b 0a 58 09 | 24 45 4e 56 63 61 63 68 |= ();.X.|$ENVcach|
|00002cd0| 65 20 3d 20 24 46 41 4c | 53 45 3b 0a 58 09 40 45 |e = $FAL|SE;.X.@E|
|00002ce0| 4e 56 63 75 72 72 65 6e | 74 20 3d 20 28 29 3b 0a |NVcurren|t = ();.|
|00002cf0| 58 7d 0a 58 0a 58 23 20 | 47 65 74 20 61 20 76 61 |X}.X.X# |Get a va|
|00002d00| 6c 75 65 20 66 72 6f 6d | 20 74 68 65 20 63 75 72 |lue from| the cur|
|00002d10| 72 65 6e 74 20 65 6e 76 | 69 72 6f 6e 6d 65 6e 74 |rent env|ironment|
|00002d20| 2e 0a 58 73 75 62 20 45 | 4e 56 76 61 6c 20 7b 0a |..Xsub E|NVval {.|
|00002d30| 58 09 6c 6f 63 61 6c 28 | 24 73 79 6d 29 20 3d 20 |X.local(|$sym) = |
|00002d40| 40 5f 3b 0a 58 09 6c 6f | 63 61 6c 28 24 78 29 3b |@_;.X.lo|cal($x);|
|00002d50| 0a 58 09 66 6f 72 20 24 | 66 20 28 40 45 4e 56 63 |.X.for $|f (@ENVc|
|00002d60| 75 72 72 65 6e 74 29 20 | 7b 0a 58 09 09 72 65 74 |urrent) |{.X..ret|
|00002d70| 75 72 6e 20 24 78 20 69 | 66 20 64 65 66 69 6e 65 |urn $x i|f define|
|00002d80| 64 28 24 78 20 3d 20 26 | 54 76 61 6c 28 24 66 2c |d($x = &|Tval($f,|
|00002d90| 20 24 73 79 6d 29 29 3b | 0a 58 09 7d 0a 58 09 64 | $sym));|.X.}.X.d|
|00002da0| 65 66 69 6e 65 64 28 24 | 78 20 3d 20 26 59 76 61 |efined($|x = &Yva|
|00002db0| 6c 28 24 73 79 6d 29 29 | 20 7c 7c 20 26 45 52 52 |l($sym))| || &ERR|
|00002dc0| 75 6e 62 6f 75 6e 64 28 | 24 73 79 6d 29 3b 0a 58 |unbound(|$sym);.X|
|00002dd0| 09 24 78 3b 0a 58 7d 0a | 58 0a 58 23 20 53 65 74 |.$x;.X}.|X.X# Set|
|00002de0| 20 61 20 76 61 6c 75 65 | 20 69 6e 20 74 68 65 20 | a value| in the |
|00002df0| 63 75 72 72 65 6e 74 20 | 65 6e 76 69 72 6f 6e 6d |current |environm|
|00002e00| 65 6e 74 2e 0a 58 73 75 | 62 20 45 4e 56 73 65 74 |ent..Xsu|b ENVset|
|00002e10| 20 7b 0a 58 09 6c 6f 63 | 61 6c 28 40 73 69 70 29 | {.X.loc|al(@sip)|
|00002e20| 20 3d 20 40 5f 3b 0a 58 | 09 6c 6f 63 61 6c 28 24 | = @_;.X|.local($|
|00002e30| 73 79 6d 2c 20 24 76 61 | 6c 29 20 3d 20 40 73 69 |sym, $va|l) = @si|
|00002e40| 70 3b 0a 58 09 6c 6f 63 | 61 6c 28 24 78 29 3b 0a |p;.X.loc|al($x);.|
|00002e50| 58 09 66 6f 72 20 24 66 | 20 28 40 45 4e 56 63 75 |X.for $f| (@ENVcu|
|00002e60| 72 72 65 6e 74 29 20 7b | 0a 58 09 09 72 65 74 75 |rrent) {|.X..retu|
|00002e70| 72 6e 20 26 54 73 65 74 | 28 24 66 2c 20 24 73 79 |rn &Tset|($f, $sy|
|00002e80| 6d 2c 20 24 76 61 6c 29 | 20 69 66 20 64 65 66 69 |m, $val)| if defi|
|00002e90| 6e 65 64 28 24 78 20 3d | 20 26 54 76 61 6c 28 24 |ned($x =| &Tval($|
|00002ea0| 66 2c 20 24 73 79 6d 29 | 29 3b 0a 58 09 7d 0a 58 |f, $sym)|);.X.}.X|
|00002eb0| 09 72 65 74 75 72 6e 20 | 26 59 73 65 74 28 24 73 |.return |&Yset($s|
|00002ec0| 79 6d 2c 20 24 76 61 6c | 29 3b 0a 58 7d 0a 58 0a |ym, $val|);.X}.X.|
|00002ed0| 58 23 20 50 75 73 68 20 | 61 20 6e 65 77 20 66 72 |X# Push |a new fr|
|00002ee0| 61 6d 65 20 6f 6e 74 6f | 20 74 68 65 20 63 75 72 |ame onto| the cur|
|00002ef0| 72 65 6e 74 20 65 6e 76 | 69 72 6f 6e 6d 65 6e 74 |rent env|ironment|
|00002f00| 2e 0a 58 73 75 62 20 45 | 4e 56 70 75 73 68 5f 66 |..Xsub E|NVpush_f|
|00002f10| 72 61 6d 65 20 7b 0a 58 | 09 24 45 4e 56 63 61 63 |rame {.X|.$ENVcac|
|00002f20| 68 65 20 3d 20 24 46 41 | 4c 53 45 3b 0a 58 09 75 |he = $FA|LSE;.X.u|
|00002f30| 6e 73 68 69 66 74 28 40 | 45 4e 56 63 75 72 72 65 |nshift(@|ENVcurre|
|00002f40| 6e 74 2c 20 26 54 28 29 | 29 3b 0a 58 7d 0a 58 0a |nt, &T()|);.X}.X.|
|00002f50| 58 23 20 52 65 6d 6f 76 | 65 20 74 68 65 20 74 6f |X# Remov|e the to|
|00002f60| 70 20 66 72 61 6d 65 20 | 66 72 6f 6d 20 74 68 65 |p frame |from the|
|00002f70| 20 63 75 72 72 65 6e 74 | 20 65 6e 76 69 72 6f 6e | current| environ|
|00002f80| 6d 65 6e 74 2e 0a 58 73 | 75 62 20 45 4e 56 70 6f |ment..Xs|ub ENVpo|
|00002f90| 70 5f 66 72 61 6d 65 20 | 7b 0a 58 09 24 45 4e 56 |p_frame |{.X.$ENV|
|00002fa0| 63 61 63 68 65 20 3d 20 | 24 46 41 4c 53 45 3b 0a |cache = |$FALSE;.|
|00002fb0| 58 09 73 68 69 66 74 20 | 40 45 4e 56 63 75 72 72 |X.shift |@ENVcurr|
|00002fc0| 65 6e 74 3b 0a 58 7d 0a | 58 0a 58 23 20 42 69 6e |ent;.X}.|X.X# Bin|
|00002fd0| 64 20 6e 65 77 20 76 61 | 6c 75 65 73 20 69 6e 20 |d new va|lues in |
|00002fe0| 74 68 65 20 74 6f 70 20 | 66 72 61 6d 65 20 6f 66 |the top |frame of|
|00002ff0| 20 74 68 65 20 63 75 72 | 72 65 6e 74 20 65 6e 76 | the cur|rent env|
|00003000| 69 72 6f 6e 6d 65 6e 74 | 2e 0a 58 73 75 62 20 45 |ironment|..Xsub E|
|00003010| 4e 56 62 69 6e 64 20 7b | 0a 58 09 6c 6f 63 61 6c |NVbind {|.X.local|
|00003020| 28 40 73 79 6d 73 29 20 | 3d 20 40 5f 3b 0a 58 09 |(@syms) |= @_;.X.|
|00003030| 6c 6f 63 61 6c 28 40 76 | 61 6c 73 29 20 3d 20 73 |local(@v|als) = s|
|00003040| 70 6c 69 63 65 28 40 73 | 79 6d 73 2c 20 40 73 79 |plice(@s|yms, @sy|
|00003050| 6d 73 20 2f 20 32 2c 20 | 40 73 79 6d 73 20 2f 20 |ms / 2, |@syms / |
|00003060| 32 29 3b 0a 58 09 69 66 | 20 28 40 45 4e 56 63 75 |2);.X.if| (@ENVcu|
|00003070| 72 72 65 6e 74 20 3d 3d | 20 30 29 20 7b 0a 58 09 |rrent ==| 0) {.X.|
|00003080| 09 26 59 73 65 74 28 73 | 68 69 66 74 20 40 73 79 |.&Yset(s|hift @sy|
|00003090| 6d 73 2c 20 73 68 69 66 | 74 20 40 76 61 6c 73 29 |ms, shif|t @vals)|
|000030a0| 20 77 68 69 6c 65 20 40 | 73 79 6d 73 3b 0a 58 09 | while @|syms;.X.|
|000030b0| 7d 20 65 6c 73 65 20 7b | 0a 58 09 09 6c 6f 63 61 |} else {|.X..loca|
|000030c0| 6c 28 24 74 29 20 3d 20 | 40 45 4e 56 63 75 72 72 |l($t) = |@ENVcurr|
|000030d0| 65 6e 74 5b 30 5d 3b 0a | 58 09 09 26 54 73 65 74 |ent[0];.|X..&Tset|
|000030e0| 28 24 74 2c 20 73 68 69 | 66 74 20 40 73 79 6d 73 |($t, shi|ft @syms|
|000030f0| 2c 20 73 68 69 66 74 20 | 40 76 61 6c 73 29 20 77 |, shift |@vals) w|
|00003100| 68 69 6c 65 20 40 73 79 | 6d 73 3b 0a 58 09 7d 0a |hile @sy|ms;.X.}.|
|00003110| 58 7d 0a 58 0a 58 26 44 | 45 46 28 27 63 75 72 72 |X}.X.X&D|EF('curr|
|00003120| 65 6e 74 2d 65 6e 76 69 | 72 6f 6e 6d 65 6e 74 27 |ent-envi|ronment'|
|00003130| 2c 20 26 53 55 42 52 30 | 28 27 45 4e 56 63 75 72 |, &SUBR0|('ENVcur|
|00003140| 72 65 6e 74 27 29 29 3b | 0a 58 0a 58 23 2d 2d 2d |rent'));|.X.X#---|
|00003150| 2d 2d 2d 0a 58 23 2d 2d | 20 45 72 72 6f 72 20 68 |---.X#--| Error h|
|00003160| 61 6e 64 6c 69 6e 67 2e | 0a 58 23 2d 2d 2d 2d 2d |andling.|.X#-----|
|00003170| 2d 0a 58 0a 58 73 75 62 | 20 45 52 52 20 7b 0a 58 |-.X.Xsub| ERR {.X|
|00003180| 09 70 72 69 6e 74 20 24 | 73 74 64 65 72 72 20 27 |.print $|stderr '|
|00003190| 2a 2a 20 27 2c 20 40 5f | 2c 20 22 5c 6e 22 3b 0a |** ', @_|, "\n";.|
|000031a0| 58 09 67 6f 74 6f 20 54 | 4f 50 3b 0a 58 7d 0a 58 |X.goto T|OP;.X}.X|
|000031b0| 0a 58 73 75 62 20 45 52 | 52 62 61 64 5f 74 79 70 |.Xsub ER|Rbad_typ|
|000031c0| 65 20 7b 0a 58 09 6c 6f | 63 61 6c 28 40 73 69 70 |e {.X.lo|cal(@sip|
|000031d0| 29 20 3d 20 40 5f 3b 0a | 58 09 6c 6f 63 61 6c 28 |) = @_;.|X.local(|
|000031e0| 24 69 74 2c 20 24 77 68 | 61 74 29 20 3d 20 40 73 |$it, $wh|at) = @s|
|000031f0| 69 70 3b 0a 58 09 24 77 | 68 61 74 20 3d 20 24 54 |ip;.X.$w|hat = $T|
|00003200| 59 50 45 6e 61 6d 65 7b | 24 77 68 61 74 7d 20 7c |YPEname{|$what} ||
|00003210| 7c 20 22 74 79 70 65 20 | 24 77 68 61 74 22 3b 0a || "type |$what";.|
|00003220| 58 09 70 72 69 6e 74 20 | 24 73 74 64 65 72 72 20 |X.print |$stderr |
|00003230| 22 2a 2a 20 49 6e 74 65 | 72 6e 61 6c 20 74 79 70 |"** Inte|rnal typ|
|00003240| 65 20 65 72 72 6f 72 2c | 20 24 69 74 20 69 73 20 |e error,| $it is |
|00003250| 6e 6f 74 20 24 77 68 61 | 74 2e 5c 6e 22 3b 0a 58 |not $wha|t.\n";.X|
|00003260| 09 67 6f 74 6f 20 54 4f | 50 3b 0a 58 7d 0a 58 0a |.goto TO|P;.X}.X.|
|00003270| 58 73 75 62 20 45 52 52 | 74 79 70 65 20 7b 0a 58 |Xsub ERR|type {.X|
|00003280| 09 6c 6f 63 61 6c 28 40 | 73 69 70 29 20 3d 20 40 |.local(@|sip) = @|
|00003290| 5f 3b 0a 58 09 6c 6f 63 | 61 6c 28 24 69 74 2c 20 |_;.X.loc|al($it, |
|000032a0| 24 77 68 61 74 2c 20 24 | 77 68 65 72 65 29 20 3d |$what, $|where) =|
|000032b0| 20 40 5f 3b 0a 58 09 24 | 77 68 61 74 20 3d 20 24 | @_;.X.$|what = $|
|000032c0| 54 59 50 45 6e 61 6d 65 | 7b 24 77 68 61 74 7d 20 |TYPEname|{$what} |
|000032d0| 7c 7c 20 22 74 79 70 65 | 20 24 77 68 61 74 22 3b ||| "type| $what";|
|000032e0| 0a 58 09 70 72 69 6e 74 | 20 24 73 74 64 65 72 72 |.X.print| $stderr|
|000032f0| 20 22 2a 2a 20 54 79 70 | 65 20 65 72 72 6f 72 2c | "** Typ|e error,|
|00003300| 20 22 3b 0a 58 09 70 72 | 69 6e 74 20 24 73 74 64 | ";.X.pr|int $std|
|00003310| 65 72 72 20 22 69 6e 20 | 24 77 68 65 72 65 2c 20 |err "in |$where, |
|00003320| 22 20 69 66 20 24 77 68 | 65 72 65 20 6e 65 20 27 |" if $wh|ere ne '|
|00003330| 27 3b 0a 58 09 26 77 72 | 69 74 65 28 24 69 74 29 |';.X.&wr|ite($it)|
|00003340| 3b 0a 58 09 70 72 69 6e | 74 20 22 20 69 73 20 6e |;.X.prin|t " is n|
|00003350| 6f 74 20 24 77 68 61 74 | 2e 5c 6e 22 3b 0a 58 09 |ot $what|.\n";.X.|
|00003360| 67 6f 74 6f 20 54 4f 50 | 3b 0a 58 7d 0a 58 0a 58 |goto TOP|;.X}.X.X|
|00003370| 73 75 62 20 43 48 4b 74 | 79 70 65 20 7b 0a 58 09 |sub CHKt|ype {.X.|
|00003380| 6c 6f 63 61 6c 28 40 73 | 69 70 29 20 3d 20 40 5f |local(@s|ip) = @_|
|00003390| 3b 0a 58 09 6c 6f 63 61 | 6c 28 24 74 30 29 20 3d |;.X.loca|l($t0) =|
|000033a0| 20 26 54 59 50 45 28 40 | 73 69 70 5b 30 5d 29 3b | &TYPE(@|sip[0]);|
|000033b0| 0a 58 09 6c 6f 63 61 6c | 28 24 74 31 29 20 3d 20 |.X.local|($t1) = |
|000033c0| 40 73 69 70 5b 31 5d 3b | 0a 58 09 26 45 52 52 74 |@sip[1];|.X.&ERRt|
|000033d0| 79 70 65 28 40 5f 29 20 | 75 6e 6c 65 73 73 0a 58 |ype(@_) |unless.X|
|000033e0| 09 09 24 74 31 20 3d 3d | 20 24 54 5f 41 4e 59 20 |..$t1 ==| $T_ANY |
|000033f0| 7c 7c 0a 58 09 09 24 74 | 30 20 3d 3d 20 24 74 31 |||.X..$t|0 == $t1|
|00003400| 20 7c 7c 0a 58 09 09 28 | 24 74 31 20 3d 3d 20 24 | ||.X..(|$t1 == $|
|00003410| 54 5f 4c 49 53 54 20 26 | 26 0a 58 09 09 09 28 24 |T_LIST &|&.X...($|
|00003420| 74 30 20 3d 3d 20 24 54 | 5f 50 41 49 52 20 7c 7c |t0 == $T|_PAIR |||
|00003430| 20 24 74 30 20 3d 3d 20 | 24 54 5f 4e 49 4c 29 29 | $t0 == |$T_NIL))|
|00003440| 20 7c 7c 0a 58 09 09 28 | 24 74 31 20 3d 3d 20 24 | ||.X..(|$t1 == $|
|00003450| 54 5f 50 52 4f 43 45 44 | 55 52 45 20 26 26 0a 58 |T_PROCED|URE &&.X|
|00003460| 09 09 09 28 24 74 30 20 | 3d 3d 20 24 54 5f 53 55 |...($t0 |== $T_SU|
|00003470| 42 52 20 7c 7c 20 24 74 | 30 20 3d 3d 20 24 54 5f |BR || $t|0 == $T_|
|00003480| 56 45 43 54 4f 52 29 29 | 0a 58 09 09 3b 0a 58 7d |VECTOR))|.X..;.X}|
|00003490| 0a 58 0a 58 73 75 62 20 | 45 52 52 64 6f 6d 61 69 |.X.Xsub |ERRdomai|
|000034a0| 6e 20 7b 0a 58 09 6c 6f | 63 61 6c 28 40 73 69 70 |n {.X.lo|cal(@sip|
|000034b0| 29 20 3d 20 40 5f 3b 0a | 58 09 6c 6f 63 61 6c 28 |) = @_;.|X.local(|
|000034c0| 24 77 68 65 72 65 29 20 | 3d 20 73 68 69 66 74 20 |$where) |= shift |
|000034d0| 40 73 69 70 3b 0a 58 09 | 70 72 69 6e 74 20 24 73 |@sip;.X.|print $s|
|000034e0| 74 64 65 72 72 20 22 2a | 2a 20 44 6f 6d 61 69 6e |tderr "*|* Domain|
|000034f0| 20 65 72 72 6f 72 2c 20 | 22 3b 0a 58 09 70 72 69 | error, |";.X.pri|
|00003500| 6e 74 20 24 73 74 64 65 | 72 72 20 22 69 6e 20 24 |nt $stde|rr "in $|
|00003510| 77 68 65 72 65 2c 20 22 | 20 69 66 20 24 77 68 65 |where, "| if $whe|
|00003520| 72 65 20 6e 65 20 27 27 | 3b 0a 58 09 70 72 69 6e |re ne ''|;.X.prin|
|00003530| 74 20 24 73 74 64 65 72 | 72 20 40 73 69 70 2c 20 |t $stder|r @sip, |
|00003540| 22 5c 6e 22 3b 0a 58 09 | 67 6f 74 6f 20 54 4f 50 |"\n";.X.|goto TOP|
|00003550| 3b 0a 58 7d 0a 58 0a 58 | 73 75 62 20 45 52 52 75 |;.X}.X.X|sub ERRu|
|00003560| 6e 62 6f 75 6e 64 20 7b | 0a 58 09 6c 6f 63 61 6c |nbound {|.X.local|
|00003570| 28 24 73 79 6d 29 20 3d | 20 40 5f 3b 0a 58 09 70 |($sym) =| @_;.X.p|
|00003580| 72 69 6e 74 20 24 73 74 | 64 65 72 72 20 27 2a 2a |rint $st|derr '**|
|00003590| 20 53 79 6d 62 6f 6c 20 | 27 2c 20 26 59 6e 61 6d | Symbol |', &Ynam|
|000035a0| 65 28 24 73 79 6d 29 2c | 20 22 20 69 73 20 75 6e |e($sym),| " is un|
|000035b0| 62 6f 75 6e 64 2e 5c 6e | 22 3b 0a 58 09 67 6f 74 |bound.\n|";.X.got|
|000035c0| 6f 20 54 4f 50 3b 0a 58 | 7d 0a 58 0a 58 23 2d 2d |o TOP;.X|}.X.X#--|
|000035d0| 2d 2d 2d 2d 0a 58 23 2d | 2d 20 42 6f 6f 6c 65 61 |----.X#-|- Boolea|
|000035e0| 6e 73 2e 0a 58 23 2d 2d | 2d 2d 2d 2d 0a 58 0a 58 |ns..X#--|----.X.X|
|000035f0| 26 44 45 46 28 27 74 27 | 2c 20 24 54 52 55 45 29 |&DEF('t'|, $TRUE)|
|00003600| 3b 0a 58 26 44 45 46 28 | 27 6e 69 6c 27 2c 20 24 |;.X&DEF(|'nil', $|
|00003610| 46 41 4c 53 45 29 3b 0a | 58 0a 58 26 53 55 42 52 |FALSE);.|X.X&SUBR|
|00003620| 31 28 27 62 6f 6f 6c 65 | 61 6e 3f 27 29 3b 0a 58 |1('boole|an?');.X|
|00003630| 73 75 62 20 62 6f 6f 6c | 65 61 6e 50 20 7b 0a 58 |sub bool|eanP {.X|
|00003640| 09 40 5f 5b 30 5d 20 65 | 71 20 24 54 52 55 45 20 |.@_[0] e|q $TRUE |
|00003650| 7c 7c 20 40 5f 5b 30 5d | 20 65 71 20 24 46 41 4c ||| @_[0]| eq $FAL|
|00003660| 53 45 3b 0a 58 7d 0a 58 | 0a 58 26 53 55 42 52 31 |SE;.X}.X|.X&SUBR1|
|00003670| 28 27 6e 6f 74 27 29 3b | 0a 58 73 75 62 20 6e 6f |('not');|.Xsub no|
|00003680| 74 20 7b 0a 58 09 40 5f | 5b 30 5d 20 3f 20 24 46 |t {.X.@_|[0] ? $F|
|00003690| 41 4c 53 45 20 3a 20 24 | 54 52 55 45 3b 0a 58 7d |ALSE : $|TRUE;.X}|
|000036a0| 0a 58 0a 58 23 2d 2d 2d | 2d 2d 2d 0a 58 23 2d 2d |.X.X#---|---.X#--|
|000036b0| 20 45 71 75 69 76 61 6c | 65 6e 63 65 2e 0a 58 23 | Equival|ence..X#|
|000036c0| 2d 2d 2d 2d 2d 2d 0a 58 | 0a 58 23 20 50 65 72 6c |------.X|.X# Perl|
|000036d0| 20 28 24 78 20 65 71 20 | 24 79 29 20 6d 65 61 6e | ($x eq |$y) mean|
|000036e0| 73 20 74 68 65 20 73 61 | 6d 65 20 74 68 69 6e 67 |s the sa|me thing|
|000036f0| 20 61 73 20 53 63 68 65 | 6d 65 20 28 65 71 3f 20 | as Sche|me (eq? |
|00003700| 78 20 79 29 2e 0a 58 0a | 58 26 53 55 42 52 32 28 |x y)..X.|X&SUBR2(|
|00003710| 27 65 71 3f 27 29 3b 0a | 58 73 75 62 20 65 71 50 |'eq?');.|Xsub eqP|
|00003720| 20 7b 0a 58 09 40 5f 5b | 30 5d 20 65 71 20 40 5f | {.X.@_[|0] eq @_|
|00003730| 5b 31 5d 3b 0a 58 7d 0a | 58 0a 58 26 53 55 42 52 |[1];.X}.|X.X&SUBR|
|00003740| 32 28 27 65 71 76 3f 27 | 29 3b 0a 58 73 75 62 20 |2('eqv?'|);.Xsub |
|00003750| 65 71 76 50 20 7b 0a 58 | 09 72 65 74 75 72 6e 20 |eqvP {.X|.return |
|00003760| 24 54 52 55 45 20 69 66 | 20 40 5f 5b 30 5d 20 65 |$TRUE if| @_[0] e|
|00003770| 71 20 40 5f 5b 31 5d 3b | 0a 58 09 6c 6f 63 61 6c |q @_[1];|.X.local|
|00003780| 28 40 73 69 70 29 20 3d | 20 40 5f 3b 0a 58 09 6c |(@sip) =| @_;.X.l|
|00003790| 6f 63 61 6c 28 24 74 29 | 20 3d 20 26 54 59 50 45 |ocal($t)| = &TYPE|
|000037a0| 28 40 73 69 70 5b 30 5d | 29 3b 0a 58 09 69 66 20 |(@sip[0]|);.X.if |
|000037b0| 28 24 74 20 21 3d 20 26 | 54 59 50 45 28 40 73 69 |($t != &|TYPE(@si|
|000037c0| 70 5b 31 5d 29 29 20 7b | 0a 58 09 09 24 46 41 4c |p[1])) {|.X..$FAL|
|000037d0| 53 45 3b 0a 58 09 7d 20 | 65 6c 73 69 66 20 28 24 |SE;.X.} |elsif ($|
|000037e0| 74 20 3d 3d 20 24 54 5f | 4e 55 4d 42 45 52 29 20 |t == $T_|NUMBER) |
|000037f0| 7b 0a 58 09 09 26 4e 76 | 61 6c 28 40 73 69 70 5b |{.X..&Nv|al(@sip[|
|00003800| 30 5d 29 20 3d 3d 20 26 | 4e 76 61 6c 28 40 73 69 |0]) == &|Nval(@si|
|00003810| 70 5b 31 5d 29 3b 0a 58 | 09 7d 20 65 6c 73 69 66 |p[1]);.X|.} elsif|
|00003820| 20 28 24 74 20 3d 3d 20 | 24 54 5f 53 54 52 49 4e | ($t == |$T_STRIN|
|00003830| 47 29 20 7b 0a 58 09 09 | 26 53 76 61 6c 28 40 73 |G) {.X..|&Sval(@s|
|00003840| 69 70 5b 30 5d 29 20 65 | 71 20 27 27 20 26 26 20 |ip[0]) e|q '' && |
|00003850| 26 53 76 61 6c 28 40 73 | 69 70 5b 31 5d 29 20 65 |&Sval(@s|ip[1]) e|
|00003860| 71 20 27 27 3b 0a 58 09 | 7d 20 65 6c 73 69 66 20 |q '';.X.|} elsif |
|00003870| 28 24 74 20 3d 3d 20 24 | 54 5f 56 45 43 54 4f 52 |($t == $|T_VECTOR|
|00003880| 29 20 7b 0a 58 09 09 26 | 56 76 61 6c 28 40 73 69 |) {.X..&|Vval(@si|
|00003890| 70 5b 30 5d 29 20 3d 3d | 20 30 20 26 26 20 26 56 |p[0]) ==| 0 && &V|
|000038a0| 76 61 6c 28 40 73 69 70 | 5b 31 5d 29 20 3d 3d 20 |val(@sip|[1]) == |
|000038b0| 30 3b 0a 58 09 7d 20 65 | 6c 73 65 20 7b 0a 58 09 |0;.X.} e|lse {.X.|
|000038c0| 09 24 46 41 4c 53 45 3b | 0a 58 09 7d 0a 58 7d 0a |.$FALSE;|.X.}.X}.|
|000038d0| 58 0a 58 23 20 58 58 58 | 20 46 61 69 6c 73 20 74 |X.X# XXX| Fails t|
|000038e0| 6f 20 74 65 72 6d 69 6e | 61 74 65 20 66 6f 72 20 |o termin|ate for |
|000038f0| 72 65 63 75 72 73 69 76 | 65 20 74 79 70 65 73 2e |recursiv|e types.|
|00003900| 0a 58 26 53 55 42 52 32 | 28 27 65 71 75 61 6c 3f |.X&SUBR2|('equal?|
|00003910| 27 29 3b 0a 58 73 75 62 | 20 65 71 75 61 6c 50 20 |');.Xsub| equalP |
|00003920| 7b 0a 58 09 72 65 74 75 | 72 6e 20 24 54 52 55 45 |{.X.retu|rn $TRUE|
|00003930| 20 69 66 20 40 5f 5b 30 | 5d 20 65 71 20 40 5f 5b | if @_[0|] eq @_[|
|00003940| 31 5d 3b 0a 58 09 6c 6f | 63 61 6c 28 40 73 69 70 |1];.X.lo|cal(@sip|
|00003950| 29 20 3d 20 40 5f 3b 0a | 58 09 6c 6f 63 61 6c 28 |) = @_;.|X.local(|
|00003960| 24 74 29 20 3d 20 26 54 | 59 50 45 28 40 73 69 70 |$t) = &T|YPE(@sip|
|00003970| 5b 30 5d 29 3b 0a 58 09 | 69 66 20 28 24 74 20 21 |[0]);.X.|if ($t !|
|00003980| 3d 20 26 54 59 50 45 28 | 40 73 69 70 5b 31 5d 29 |= &TYPE(|@sip[1])|
|00003990| 29 20 7b 0a 58 09 09 24 | 46 41 4c 53 45 3b 0a 58 |) {.X..$|FALSE;.X|
|000039a0| 09 7d 20 65 6c 73 69 66 | 20 28 24 74 20 3d 3d 20 |.} elsif| ($t == |
|000039b0| 24 54 5f 53 54 52 49 4e | 47 29 20 7b 0a 58 09 09 |$T_STRIN|G) {.X..|
|000039c0| 26 53 76 61 6c 28 40 73 | 69 70 5b 30 5d 29 20 65 |&Sval(@s|ip[0]) e|
|000039d0| 71 20 26 53 76 61 6c 28 | 40 73 69 70 5b 31 5d 29 |q &Sval(|@sip[1])|
|000039e0| 3b 0a 58 09 7d 20 65 6c | 73 69 66 20 28 24 74 20 |;.X.} el|sif ($t |
|000039f0| 3d 3d 20 24 54 5f 50 41 | 49 52 29 20 7b 0a 58 09 |== $T_PA|IR) {.X.|
|00003a00| 09 6c 6f 63 61 6c 28 24 | 61 30 2c 20 24 64 30 29 |.local($|a0, $d0)|
|00003a10| 20 3d 20 26 50 76 61 6c | 28 40 73 69 70 5b 30 5d | = &Pval|(@sip[0]|
|00003a20| 29 3b 0a 58 09 09 6c 6f | 63 61 6c 28 24 61 31 2c |);.X..lo|cal($a1,|
|00003a30| 20 24 64 31 29 20 3d 20 | 26 50 76 61 6c 28 40 73 | $d1) = |&Pval(@s|
|00003a40| 69 70 5b 31 5d 29 3b 0a | 58 09 09 26 65 71 75 61 |ip[1]);.|X..&equa|
|00003a50| 6c 50 28 24 61 30 2c 20 | 24 61 31 29 20 26 26 20 |lP($a0, |$a1) && |
|00003a60| 26 65 71 75 61 6c 50 28 | 24 64 30 2c 20 24 64 31 |&equalP(|$d0, $d1|
|00003a70| 29 3b 0a 58 09 7d 20 65 | 6c 73 69 66 20 28 24 74 |);.X.} e|lsif ($t|
|00003a80| 20 3d 3d 20 24 54 5f 56 | 45 43 54 4f 52 29 20 7b | == $T_V|ECTOR) {|
|00003a90| 0a 58 09 09 6c 6f 63 61 | 6c 28 40 76 29 20 3d 20 |.X..loca|l(@v) = |
|00003aa0| 26 56 76 61 6c 28 40 73 | 69 70 5b 30 5d 29 3b 0a |&Vval(@s|ip[0]);.|
|00003ab0| 58 09 09 6c 6f 63 61 6c | 28 40 75 29 20 3d 20 26 |X..local|(@u) = &|
|00003ac0| 56 76 61 6c 28 40 73 69 | 70 5b 31 5d 29 3b 0a 58 |Vval(@si|p[1]);.X|
|00003ad0| 09 09 72 65 74 75 72 6e | 20 24 46 41 4c 53 45 20 |..return| $FALSE |
|00003ae0| 69 66 20 40 76 20 21 3d | 20 40 75 3b 0a 58 09 09 |if @v !=| @u;.X..|
|00003af0| 77 68 69 6c 65 20 28 40 | 76 29 20 7b 0a 58 09 09 |while (@|v) {.X..|
|00003b00| 09 72 65 74 75 72 6e 20 | 24 46 41 4c 53 45 20 69 |.return |$FALSE i|
|00003b10| 66 20 21 20 26 65 71 75 | 61 6c 50 28 73 68 69 66 |f ! &equ|alP(shif|
|00003b20| 74 20 40 76 2c 20 73 68 | 69 66 74 20 40 75 29 3b |t @v, sh|ift @u);|
|00003b30| 0a 58 09 09 7d 0a 58 09 | 09 24 54 52 55 45 3b 0a |.X..}.X.|.$TRUE;.|
|00003b40| 58 09 7d 20 65 6c 73 65 | 20 7b 0a 58 09 09 26 65 |X.} else| {.X..&e|
|00003b50| 71 76 50 28 40 73 69 70 | 5b 30 5d 2c 20 40 73 69 |qvP(@sip|[0], @si|
|00003b60| 70 5b 31 5d 29 3b 0a 58 | 09 7d 0a 58 7d 0a 58 0a |p[1]);.X|.}.X}.X.|
|00003b70| 58 23 2d 2d 2d 2d 2d 2d | 0a 58 23 2d 2d 20 50 61 |X#------|.X#-- Pa|
|00003b80| 69 72 73 20 61 6e 64 20 | 6c 69 73 74 73 2e 0a 58 |irs and |lists..X|
|00003b90| 23 2d 2d 2d 2d 2d 2d 0a | 58 0a 58 26 53 55 42 52 |#------.|X.X&SUBR|
|00003ba0| 31 28 27 70 61 69 72 3f | 27 29 3b 0a 58 73 75 62 |1('pair?|');.Xsub|
|00003bb0| 20 70 61 69 72 50 20 7b | 0a 58 09 26 54 59 50 45 | pairP {|.X.&TYPE|
|00003bc0| 28 40 5f 5b 30 5d 29 20 | 3d 3d 20 24 54 5f 50 41 |(@_[0]) |== $T_PA|
|00003bd0| 49 52 3b 0a 58 7d 0a 58 | 0a 58 26 44 45 46 28 27 |IR;.X}.X|.X&DEF('|
|00003be0| 63 6f 6e 73 27 2c 20 26 | 53 55 42 52 32 28 27 50 |cons', &|SUBR2('P|
|00003bf0| 27 29 29 3b 0a 58 0a 58 | 26 53 55 42 52 31 28 27 |'));.X.X|&SUBR1('|
|00003c00| 63 61 72 27 29 3b 0a 58 | 73 75 62 20 63 61 72 20 |car');.X|sub car |
|00003c10| 7b 0a 58 23 20 58 58 58 | 20 50 61 74 63 68 6c 65 |{.X# XXX| Patchle|
|00003c20| 76 65 6c 20 34 31 20 62 | 72 6f 6b 65 20 73 6f 6d |vel 41 b|roke som|
|00003c30| 65 74 68 69 6e 67 3b 20 | 26 63 61 72 28 26 63 61 |ething; |&car(&ca|
|00003c40| 72 28 24 78 29 29 20 64 | 6f 65 73 6e 27 74 20 77 |r($x)) d|oesn't w|
|00003c50| 6f 72 6b 20 69 66 20 74 | 68 69 73 0a 58 23 20 58 |ork if t|his.X# X|
|00003c60| 58 58 20 6c 69 6e 65 20 | 69 73 20 75 6e 63 6f 6d |XX line |is uncom|
|00003c70| 6d 65 6e 74 65 64 2e 0a | 58 23 09 26 43 48 4b 74 |mented..|X#.&CHKt|
|00003c80| 79 70 65 28 40 5f 5b 30 | 5d 2c 20 24 54 5f 50 41 |ype(@_[0|], $T_PA|
|00003c90| 49 52 2c 20 27 63 61 72 | 27 29 3b 0a 58 09 28 26 |IR, 'car|');.X.(&|
|00003ca0| 50 76 61 6c 28 40 5f 5b | 30 5d 29 29 5b 30 5d 3b |Pval(@_[|0]))[0];|
|00003cb0| 0a 58 7d 0a 58 0a 58 26 | 53 55 42 52 31 28 27 63 |.X}.X.X&|SUBR1('c|
|00003cc0| 64 72 27 2c 20 24 54 5f | 50 41 49 52 29 3b 0a 58 |dr', $T_|PAIR);.X|
|00003cd0| 73 75 62 20 63 64 72 20 | 7b 0a 58 23 20 58 58 58 |sub cdr |{.X# XXX|
|00003ce0| 20 53 65 65 20 63 6f 6d | 6d 65 6e 74 20 66 6f 72 | See com|ment for|
|00003cf0| 20 63 61 72 2e 0a 58 23 | 09 26 43 48 4b 74 79 70 | car..X#|.&CHKtyp|
|00003d00| 65 28 40 5f 5b 30 5d 2c | 20 24 54 5f 50 41 49 52 |e(@_[0],| $T_PAIR|
|00003d10| 2c 20 27 63 64 72 27 29 | 3b 0a 58 09 28 26 50 76 |, 'cdr')|;.X.(&Pv|
|00003d20| 61 6c 28 40 5f 5b 30 5d | 29 29 5b 31 5d 3b 0a 58 |al(@_[0]|))[1];.X|
|00003d30| 7d 0a 58 0a 58 26 53 55 | 42 52 32 28 27 73 65 74 |}.X.X&SU|BR2('set|
|00003d40| 2d 63 61 72 21 27 2c 20 | 24 54 5f 50 41 49 52 29 |-car!', |$T_PAIR)|
|00003d50| 3b 0a 58 73 75 62 20 73 | 65 74 5f 63 61 72 49 20 |;.Xsub s|et_carI |
|00003d60| 7b 0a 58 09 26 50 73 65 | 74 28 40 5f 5b 30 5d 2c |{.X.&Pse|t(@_[0],|
|00003d70| 20 30 2c 20 40 5f 5b 31 | 5d 29 3b 0a 58 7d 0a 58 | 0, @_[1|]);.X}.X|
|00003d80| 0a 58 26 53 55 42 52 32 | 28 27 73 65 74 2d 63 64 |.X&SUBR2|('set-cd|
|00003d90| 72 21 27 2c 20 24 54 5f | 50 41 49 52 29 3b 0a 58 |r!', $T_|PAIR);.X|
|00003da0| 73 75 62 20 73 65 74 5f | 63 64 72 49 20 7b 0a 58 |sub set_|cdrI {.X|
|00003db0| 09 26 50 73 65 74 28 40 | 5f 5b 30 5d 2c 20 31 2c |.&Pset(@|_[0], 1,|
|00003dc0| 20 40 5f 5b 31 5d 29 3b | 0a 58 7d 0a 58 0a 58 26 | @_[1]);|.X}.X.X&|
|00003dd0| 53 55 42 52 31 28 27 63 | 61 61 72 27 29 3b 20 73 |SUBR1('c|aar'); s|
|00003de0| 75 62 20 63 61 61 72 20 | 7b 20 26 63 61 72 28 26 |ub caar |{ &car(&|
|00003df0| 63 61 72 28 40 5f 5b 30 | 5d 29 29 3b 20 7d 0a 58 |car(@_[0|])); }.X|
|00003e00| 26 53 55 42 52 31 28 27 | 63 61 64 72 27 29 3b 20 |&SUBR1('|cadr'); |
|00003e10| 73 75 62 20 63 61 64 72 | 20 7b 20 26 63 61 72 28 |sub cadr| { &car(|
|00003e20| 26 63 64 72 28 40 5f 5b | 30 5d 29 29 3b 20 7d 0a |&cdr(@_[|0])); }.|
|00003e30| 58 26 53 55 42 52 31 28 | 27 63 64 61 72 27 29 3b |X&SUBR1(|'cdar');|
|00003e40| 20 73 75 62 20 63 64 61 | 72 20 7b 20 26 63 64 72 | sub cda|r { &cdr|
|00003e50| 28 26 63 61 72 28 40 5f | 5b 30 5d 29 29 3b 20 7d |(&car(@_|[0])); }|
|00003e60| 0a 58 26 53 55 42 52 31 | 28 27 63 64 64 72 27 29 |.X&SUBR1|('cddr')|
|00003e70| 3b 20 73 75 62 20 63 64 | 64 72 20 7b 20 26 63 64 |; sub cd|dr { &cd|
|00003e80| 72 28 26 63 64 72 28 40 | 5f 5b 30 5d 29 29 3b 20 |r(&cdr(@|_[0])); |
|00003e90| 7d 0a 58 0a 58 23 20 58 | 58 58 20 63 61 61 61 72 |}.X.X# X|XX caaar|
|00003ea0| 20 61 6e 64 20 66 72 69 | 65 6e 64 73 2e 0a 58 0a | and fri|ends..X.|
|00003eb0| 58 26 53 55 42 52 31 28 | 27 6e 75 6c 6c 3f 27 29 |X&SUBR1(|'null?')|
|00003ec0| 3b 0a 58 73 75 62 20 6e | 75 6c 6c 50 20 7b 0a 58 |;.Xsub n|ullP {.X|
|00003ed0| 09 40 5f 5b 30 5d 20 65 | 71 20 24 4e 49 4c 3b 0a |.@_[0] e|q $NIL;.|
|00003ee0| 58 7d 0a 58 0a 58 26 44 | 45 46 28 27 6c 69 73 74 |X}.X.X&D|EF('list|
|00003ef0| 27 2c 20 26 53 55 42 52 | 4e 28 27 4c 27 29 29 3b |', &SUBR|N('L'));|
|00003f00| 0a 58 0a 58 26 53 55 42 | 52 31 28 27 6c 65 6e 67 |.X.X&SUB|R1('leng|
|00003f10| 74 68 27 2c 20 24 54 5f | 4c 49 53 54 29 3b 0a 58 |th', $T_|LIST);.X|
|00003f20| 73 75 62 20 6c 65 6e 67 | 74 68 20 7b 0a 58 09 6c |sub leng|th {.X.l|
|00003f30| 6f 63 61 6c 28 24 70 29 | 20 3d 20 40 5f 3b 0a 58 |ocal($p)| = @_;.X|
|00003f40| 09 6c 6f 63 61 6c 28 24 | 6e 29 20 3d 20 30 3b 0a |.local($|n) = 0;.|
|00003f50| 58 09 24 6e 20 2b 3d 20 | 31 2c 20 24 70 20 3d 20 |X.$n += |1, $p = |
|00003f60| 26 63 64 72 28 24 70 29 | 20 77 68 69 6c 65 20 24 |&cdr($p)| while $|
|00003f70| 70 20 6e 65 20 24 4e 49 | 4c 3b 0a 58 09 26 4e 28 |p ne $NI|L;.X.&N(|
|00003f80| 24 6e 29 3b 0a 58 7d 0a | 58 0a 58 26 53 55 42 52 |$n);.X}.|X.X&SUBR|
|00003f90| 4e 28 27 61 70 70 65 6e | 64 27 29 3b 0a 58 73 75 |N('appen|d');.Xsu|
|00003fa0| 62 20 61 70 70 65 6e 64 | 20 7b 0a 58 09 6c 6f 63 |b append| {.X.loc|
|00003fb0| 61 6c 28 40 76 29 20 3d | 20 40 5f 3b 0a 58 09 6c |al(@v) =| @_;.X.l|
|00003fc0| 6f 63 61 6c 28 24 70 29 | 20 3d 20 70 6f 70 20 40 |ocal($p)| = pop @|
|00003fd0| 76 3b 0a 58 09 66 6f 72 | 20 24 61 20 28 72 65 76 |v;.X.for| $a (rev|
|00003fe0| 65 72 73 65 20 40 76 29 | 20 7b 0a 58 09 09 26 43 |erse @v)| {.X..&C|
|00003ff0| 48 4b 74 79 70 65 28 24 | 61 2c 20 24 54 5f 4c 49 |HKtype($|a, $T_LI|
|00004000| 53 54 2c 20 27 61 70 70 | 65 6e 64 27 29 3b 0a 58 |ST, 'app|end');.X|
|00004010| 09 09 66 6f 72 20 24 62 | 20 28 72 65 76 65 72 73 |..for $b| (revers|
|00004020| 65 20 26 4c 76 61 6c 28 | 24 61 29 29 20 7b 0a 58 |e &Lval(|$a)) {.X|
|00004030| 09 09 09 24 70 20 3d 20 | 26 50 28 24 62 2c 20 24 |...$p = |&P($b, $|
|00004040| 70 29 3b 0a 58 09 09 7d | 0a 58 09 7d 0a 58 09 24 |p);.X..}|.X.}.X.$|
|00004050| 70 3b 0a 58 7d 0a 58 0a | 58 26 53 55 42 52 31 28 |p;.X}.X.|X&SUBR1(|
|00004060| 27 72 65 76 65 72 73 65 | 27 2c 20 24 54 5f 4c 49 |'reverse|', $T_LI|
|00004070| 53 54 29 3b 0a 58 73 75 | 62 20 72 65 76 65 72 73 |ST);.Xsu|b revers|
|00004080| 65 20 7b 0a 58 09 26 4c | 28 72 65 76 65 72 73 65 |e {.X.&L|(reverse|
|00004090| 28 26 4c 76 61 6c 28 40 | 5f 5b 30 5d 29 29 29 3b |(&Lval(@|_[0])));|
|000040a0| 0a 58 7d 0a 58 0a 58 26 | 53 55 42 52 32 28 27 6c |.X}.X.X&|SUBR2('l|
|000040b0| 69 73 74 2d 74 61 69 6c | 27 2c 20 24 54 5f 4c 49 |ist-tail|', $T_LI|
|000040c0| 53 54 2c 20 24 54 5f 4e | 55 4d 42 45 52 29 3b 0a |ST, $T_N|UMBER);.|
|000040d0| 58 73 75 62 20 6c 69 73 | 74 5f 74 61 69 6c 20 7b |Xsub lis|t_tail {|
|000040e0| 0a 58 09 6c 6f 63 61 6c | 28 40 73 69 70 29 20 3d |.X.local|(@sip) =|
|000040f0| 20 40 5f 3b 0a 58 09 6c | 6f 63 61 6c 28 24 70 29 | @_;.X.l|ocal($p)|
|00004100| 20 3d 20 40 73 69 70 5b | 30 5d 3b 0a 58 09 6c 6f | = @sip[|0];.X.lo|
|00004110| 63 61 6c 28 24 6b 29 20 | 3d 20 26 4e 76 61 6c 28 |cal($k) |= &Nval(|
|00004120| 40 73 69 70 5b 31 5d 29 | 3b 0a 58 09 24 70 20 3d |@sip[1])|;.X.$p =|
|00004130| 20 26 63 64 72 28 24 70 | 29 20 77 68 69 6c 65 20 | &cdr($p|) while |
|00004140| 24 6b 2d 2d 3b 0a 58 09 | 24 70 3b 0a 58 7d 0a 58 |$k--;.X.|$p;.X}.X|
|00004150| 0a 58 26 53 55 42 52 32 | 28 27 6c 69 73 74 2d 72 |.X&SUBR2|('list-r|
|00004160| 65 66 27 2c 20 24 54 5f | 4c 49 53 54 2c 20 24 54 |ef', $T_|LIST, $T|
|00004170| 5f 4e 55 4d 42 45 52 29 | 3b 0a 58 73 75 62 20 6c |_NUMBER)|;.Xsub l|
|00004180| 69 73 74 5f 72 65 66 20 | 7b 0a 58 09 6c 6f 63 61 |ist_ref |{.X.loca|
|00004190| 6c 28 40 73 69 70 29 20 | 3d 20 40 5f 3b 0a 58 09 |l(@sip) |= @_;.X.|
|000041a0| 6c 6f 63 61 6c 28 40 76 | 29 20 3d 20 26 4c 76 61 |local(@v|) = &Lva|
|000041b0| 6c 28 40 73 69 70 5b 30 | 5d 29 3b 0a 58 09 6c 6f |l(@sip[0|]);.X.lo|
|000041c0| 63 61 6c 28 24 6e 29 20 | 3d 20 26 4e 76 61 6c 28 |cal($n) |= &Nval(|
|000041d0| 40 73 69 70 5b 31 5d 29 | 3b 0a 58 09 30 20 3c 20 |@sip[1])|;.X.0 < |
|000041e0| 24 6e 20 26 26 20 24 6e | 20 3c 20 40 76 20 3f 20 |$n && $n| < @v ? |
|000041f0| 40 76 5b 24 6e 5d 20 3a | 20 24 4e 49 4c 3b 09 23 |@v[$n] :| $NIL;.#|
|00004200| 20 58 58 58 20 65 72 72 | 6f 72 3f 0a 58 7d 0a 58 | XXX err|or?.X}.X|
|00004210| 0a 58 26 53 55 42 52 31 | 28 27 6c 61 73 74 2d 70 |.X&SUBR1|('last-p|
|00004220| 61 69 72 27 2c 20 24 54 | 5f 4c 49 53 54 29 3b 0a |air', $T|_LIST);.|
|00004230| 58 73 75 62 20 6c 61 73 | 74 5f 70 61 69 72 20 7b |Xsub las|t_pair {|
|00004240| 0a 58 09 6c 6f 63 61 6c | 28 24 70 29 20 3d 20 40 |.X.local|($p) = @|
|00004250| 5f 3b 0a 58 09 6c 6f 63 | 61 6c 28 24 64 29 3b 0a |_;.X.loc|al($d);.|
|00004260| 58 09 24 70 20 3d 20 24 | 64 20 77 68 69 6c 65 20 |X.$p = $|d while |
|00004270| 26 54 59 50 45 28 24 64 | 20 3d 20 26 63 64 72 28 |&TYPE($d| = &cdr(|
|00004280| 24 70 29 29 20 3d 3d 20 | 24 54 5f 50 41 49 52 3b |$p)) == |$T_PAIR;|
|00004290| 0a 58 09 24 70 3b 0a 58 | 7d 0a 58 0a 58 26 53 55 |.X.$p;.X|}.X.X&SU|
|000042a0| 42 52 32 28 27 6d 65 6d | 71 27 2c 20 24 54 5f 41 |BR2('mem|q', $T_A|
|000042b0| 4e 59 2c 20 24 54 5f 4c | 49 53 54 29 3b 0a 58 73 |NY, $T_L|IST);.Xs|
|000042c0| 75 62 20 6d 65 6d 71 20 | 7b 0a 58 09 6c 6f 63 61 |ub memq |{.X.loca|
|000042d0| 6c 28 40 73 69 70 29 20 | 3d 20 40 5f 3b 0a 58 09 |l(@sip) |= @_;.X.|
|000042e0| 6c 6f 63 61 6c 28 24 78 | 2c 20 24 70 29 20 3d 20 |local($x|, $p) = |
|000042f0| 40 73 69 70 3b 0a 58 09 | 6c 6f 63 61 6c 28 24 61 |@sip;.X.|local($a|
|00004300| 2c 20 24 64 29 3b 0a 58 | 09 66 6f 72 20 28 3b 20 |, $d);.X|.for (; |
|00004310| 24 70 20 6e 65 20 24 4e | 49 4c 3b 20 24 70 20 3d |$p ne $N|IL; $p =|
|00004320| 20 24 64 29 20 7b 09 23 | 20 58 58 58 20 69 6d 70 | $d) {.#| XXX imp|
|00004330| 72 6f 70 65 72 20 6c 69 | 73 74 73 0a 58 09 09 28 |roper li|sts.X..(|
|00004340| 24 61 2c 20 24 64 29 20 | 3d 20 26 50 76 61 6c 28 |$a, $d) |= &Pval(|
|00004350| 24 70 29 3b 0a 58 09 09 | 72 65 74 75 72 6e 20 24 |$p);.X..|return $|
|00004360| 70 20 69 66 20 24 78 20 | 65 71 20 24 61 3b 0a 58 |p if $x |eq $a;.X|
|00004370| 09 7d 0a 58 09 72 65 74 | 75 72 6e 20 24 46 41 4c |.}.X.ret|urn $FAL|
|00004380| 53 45 3b 0a 58 7d 0a 58 | 0a 58 26 53 55 42 52 32 |SE;.X}.X|.X&SUBR2|
|00004390| 28 27 6d 65 6d 76 27 2c | 20 24 54 5f 41 4e 59 2c |('memv',| $T_ANY,|
|000043a0| 20 24 54 5f 4c 49 53 54 | 29 3b 0a 58 73 75 62 20 | $T_LIST|);.Xsub |
|000043b0| 6d 65 6d 76 20 7b 0a 58 | 09 6c 6f 63 61 6c 28 40 |memv {.X|.local(@|
|000043c0| 73 69 70 29 20 3d 20 40 | 5f 3b 0a 58 09 6c 6f 63 |sip) = @|_;.X.loc|
|000043d0| 61 6c 28 24 78 2c 20 24 | 70 29 20 3d 20 40 73 69 |al($x, $|p) = @si|
|000043e0| 70 3b 0a 58 09 6c 6f 63 | 61 6c 28 24 61 2c 20 24 |p;.X.loc|al($a, $|
|000043f0| 64 29 3b 0a 58 09 66 6f | 72 20 28 3b 20 24 70 20 |d);.X.fo|r (; $p |
|00004400| 6e 65 20 24 4e 49 4c 3b | 20 24 70 20 3d 20 24 64 |ne $NIL;| $p = $d|
|00004410| 29 20 7b 09 23 20 58 58 | 58 20 69 6d 70 72 6f 70 |) {.# XX|X improp|
|00004420| 65 72 20 6c 69 73 74 73 | 0a 58 09 09 28 24 61 2c |er lists|.X..($a,|
|00004430| 20 24 64 29 20 3d 20 26 | 50 76 61 6c 28 24 70 29 | $d) = &|Pval($p)|
|00004440| 3b 0a 58 09 09 72 65 74 | 75 72 6e 20 24 70 20 69 |;.X..ret|urn $p i|
|00004450| 66 20 26 65 71 76 50 28 | 24 78 2c 20 24 61 29 3b |f &eqvP(|$x, $a);|
|00004460| 0a 58 09 7d 0a 58 09 72 | 65 74 75 72 6e 20 24 46 |.X.}.X.r|eturn $F|
|00004470| 41 4c 53 45 3b 0a 58 7d | 0a 58 0a 58 26 53 55 42 |ALSE;.X}|.X.X&SUB|
|00004480| 52 32 28 27 6d 65 6d 62 | 65 72 27 2c 20 24 54 5f |R2('memb|er', $T_|
|00004490| 41 4e 59 2c 20 24 54 5f | 4c 49 53 54 29 3b 0a 58 |ANY, $T_|LIST);.X|
|000044a0| 73 75 62 20 6d 65 6d 62 | 65 72 20 7b 0a 58 09 6c |sub memb|er {.X.l|
|000044b0| 6f 63 61 6c 28 40 73 69 | 70 29 20 3d 20 40 5f 3b |ocal(@si|p) = @_;|
|000044c0| 0a 58 09 6c 6f 63 61 6c | 28 24 78 2c 20 24 70 29 |.X.local|($x, $p)|
|000044d0| 20 3d 20 40 73 69 70 3b | 0a 58 09 6c 6f 63 61 6c | = @sip;|.X.local|
|000044e0| 28 24 61 2c 20 24 64 29 | 3b 0a 58 09 66 6f 72 20 |($a, $d)|;.X.for |
|000044f0| 28 3b 20 24 70 20 6e 65 | 20 24 4e 49 4c 3b 20 24 |(; $p ne| $NIL; $|
|00004500| 70 20 3d 20 24 64 29 20 | 7b 09 23 20 58 58 58 20 |p = $d) |{.# XXX |
|00004510| 69 6d 70 72 6f 70 65 72 | 20 6c 69 73 74 73 0a 58 |improper| lists.X|
|00004520| 09 09 28 24 61 2c 20 24 | 64 29 20 3d 20 26 50 76 |..($a, $|d) = &Pv|
|00004530| 61 6c 28 24 70 29 3b 0a | 58 09 09 72 65 74 75 72 |al($p);.|X..retur|
|00004540| 6e 20 24 70 20 69 66 20 | 26 65 71 75 61 6c 50 28 |n $p if |&equalP(|
|00004550| 24 78 2c 20 24 61 29 3b | 0a 58 09 7d 0a 58 09 72 |$x, $a);|.X.}.X.r|
|00004560| 65 74 75 72 6e 20 24 46 | 41 4c 53 45 3b 0a 58 7d |eturn $F|ALSE;.X}|
|00004570| 0a 58 0a 58 26 53 55 42 | 52 32 28 27 61 73 73 71 |.X.X&SUB|R2('assq|
|00004580| 27 2c 20 24 54 5f 41 4e | 59 2c 20 24 54 5f 4c 49 |', $T_AN|Y, $T_LI|
|00004590| 53 54 29 3b 0a 58 73 75 | 62 20 61 73 73 71 20 7b |ST);.Xsu|b assq {|
|000045a0| 0a 58 09 6c 6f 63 61 6c | 28 40 73 69 70 29 20 3d |.X.local|(@sip) =|
|000045b0| 20 40 5f 3b 0a 58 09 6c | 6f 63 61 6c 28 24 78 2c | @_;.X.l|ocal($x,|
|000045c0| 20 24 70 29 20 3d 20 40 | 5f 3b 0a 58 09 6c 6f 63 | $p) = @|_;.X.loc|
|000045d0| 61 6c 28 24 61 29 3b 0a | 58 09 77 68 69 6c 65 20 |al($a);.|X.while |
|000045e0| 28 24 70 20 6e 65 20 24 | 4e 49 4c 29 20 7b 09 23 |($p ne $|NIL) {.#|
|000045f0| 20 58 58 58 20 69 6d 70 | 72 6f 70 65 72 20 6c 69 | XXX imp|roper li|
|00004600| 73 74 73 0a 58 09 09 28 | 24 61 2c 20 24 70 29 20 |sts.X..(|$a, $p) |
|00004610| 3d 20 26 50 76 61 6c 28 | 24 70 29 3b 0a 58 09 09 |= &Pval(|$p);.X..|
|00004620| 72 65 74 75 72 6e 20 24 | 61 20 69 66 20 24 78 20 |return $|a if $x |
|00004630| 65 71 20 26 63 61 72 28 | 24 61 29 3b 0a 58 09 7d |eq &car(|$a);.X.}|
|00004640| 0a 58 09 72 65 74 75 72 | 6e 20 24 46 41 4c 53 45 |.X.retur|n $FALSE|
|00004650| 3b 0a 58 7d 0a 58 0a 58 | 26 53 55 42 52 32 28 27 |;.X}.X.X|&SUBR2('|
|00004660| 61 73 73 76 27 2c 20 24 | 54 5f 41 4e 59 2c 20 24 |assv', $|T_ANY, $|
|00004670| 54 5f 4c 49 53 54 29 3b | 0a 58 73 75 62 20 61 73 |T_LIST);|.Xsub as|
|00004680| 73 76 20 7b 0a 58 09 6c | 6f 63 61 6c 28 40 73 69 |sv {.X.l|ocal(@si|
|00004690| 70 29 20 3d 20 40 5f 3b | 0a 58 09 6c 6f 63 61 6c |p) = @_;|.X.local|
|000046a0| 28 24 78 2c 20 24 70 29 | 20 3d 20 40 5f 3b 0a 58 |($x, $p)| = @_;.X|
|000046b0| 09 6c 6f 63 61 6c 28 24 | 61 29 3b 0a 58 09 77 68 |.local($|a);.X.wh|
|000046c0| 69 6c 65 20 28 24 70 20 | 6e 65 20 24 4e 49 4c 29 |ile ($p |ne $NIL)|
|000046d0| 20 7b 09 23 20 58 58 58 | 20 69 6d 70 72 6f 70 65 | {.# XXX| imprope|
|000046e0| 72 20 6c 69 73 74 73 0a | 58 09 09 28 24 61 2c 20 |r lists.|X..($a, |
|000046f0| 24 70 29 20 3d 20 26 50 | 76 61 6c 28 24 70 29 3b |$p) = &P|val($p);|
|00004700| 0a 58 09 09 72 65 74 75 | 72 6e 20 24 61 20 69 66 |.X..retu|rn $a if|
|00004710| 20 26 65 71 76 50 28 24 | 78 2c 20 26 63 61 72 28 | &eqvP($|x, &car(|
|00004720| 24 61 29 29 3b 0a 58 09 | 7d 0a 58 09 72 65 74 75 |$a));.X.|}.X.retu|
|00004730| 72 6e 20 24 46 41 4c 53 | 45 3b 0a 58 7d 0a 58 0a |rn $FALS|E;.X}.X.|
|00004740| 58 26 53 55 42 52 32 28 | 27 61 73 73 6f 63 27 2c |X&SUBR2(|'assoc',|
|00004750| 20 24 54 5f 41 4e 59 2c | 20 24 54 5f 4c 49 53 54 | $T_ANY,| $T_LIST|
|00004760| 29 3b 0a 58 73 75 62 20 | 61 73 73 6f 63 20 7b 0a |);.Xsub |assoc {.|
|00004770| 58 09 6c 6f 63 61 6c 28 | 40 73 69 70 29 20 3d 20 |X.local(|@sip) = |
|00004780| 40 5f 3b 0a 58 09 6c 6f | 63 61 6c 28 24 78 2c 20 |@_;.X.lo|cal($x, |
|00004790| 24 70 29 20 3d 20 40 5f | 3b 0a 58 09 6c 6f 63 61 |$p) = @_|;.X.loca|
|000047a0| 6c 28 24 61 29 3b 0a 58 | 09 77 68 69 6c 65 20 28 |l($a);.X|.while (|
|000047b0| 24 70 20 6e 65 20 24 4e | 49 4c 29 20 7b 09 23 20 |$p ne $N|IL) {.# |
|000047c0| 58 58 58 20 69 6d 70 72 | 6f 70 65 72 20 6c 69 73 |XXX impr|oper lis|
|000047d0| 74 73 0a 58 09 09 28 24 | 61 2c 20 24 70 29 20 3d |ts.X..($|a, $p) =|
|000047e0| 20 26 50 76 61 6c 28 24 | 70 29 3b 0a 58 09 09 72 | &Pval($|p);.X..r|
|000047f0| 65 74 75 72 6e 20 24 61 | 20 69 66 20 26 65 71 75 |eturn $a| if &equ|
|00004800| 61 6c 50 28 24 78 2c 20 | 26 63 61 72 28 24 61 29 |alP($x, |&car($a)|
|00004810| 29 3b 0a 58 09 7d 0a 58 | 09 72 65 74 75 72 6e 20 |);.X.}.X|.return |
|00004820| 24 46 41 4c 53 45 3b 0a | 58 7d 0a 58 0a 58 23 2d |$FALSE;.|X}.X.X#-|
|00004830| 2d 2d 2d 2d 2d 0a 58 23 | 2d 2d 20 53 79 6d 62 6f |-----.X#|-- Symbo|
|00004840| 6c 73 2e 0a 58 23 2d 2d | 2d 2d 2d 2d 0a 58 0a 58 |ls..X#--|----.X.X|
|00004850| 26 53 55 42 52 31 28 27 | 73 79 6d 62 6f 6c 3f 27 |&SUBR1('|symbol?'|
|00004860| 29 3b 0a 58 73 75 62 20 | 73 79 6d 62 6f 6c 50 20 |);.Xsub |symbolP |
|00004870| 7b 0a 58 09 26 54 59 50 | 45 28 40 5f 5b 30 5d 29 |{.X.&TYP|E(@_[0])|
|00004880| 20 3d 3d 20 24 54 5f 53 | 59 4d 42 4f 4c 3b 0a 58 | == $T_S|YMBOL;.X|
|00004890| 7d 0a 58 0a 58 26 53 55 | 42 52 31 28 27 73 79 6d |}.X.X&SU|BR1('sym|
|000048a0| 62 6f 6c 2d 3e 73 74 72 | 69 6e 67 27 2c 20 24 54 |bol->str|ing', $T|
|000048b0| 5f 53 59 4d 42 4f 4c 29 | 3b 0a 58 73 75 62 20 73 |_SYMBOL)|;.Xsub s|
|000048c0| 79 6d 62 6f 6c 5f 32 73 | 74 72 69 6e 67 20 7b 0a |ymbol_2s|tring {.|
|000048d0| 58 09 26 53 28 26 59 6e | 61 6d 65 28 40 5f 5b 30 |X.&S(&Yn|ame(@_[0|
|000048e0| 5d 29 29 3b 0a 58 7d 0a | 58 0a 58 26 53 55 42 52 |]));.X}.|X.X&SUBR|
|000048f0| 31 28 27 73 74 72 69 6e | 67 2d 3e 73 79 6d 62 6f |1('strin|g->symbo|
|00004900| 6c 27 2c 20 24 54 5f 53 | 54 52 49 4e 47 29 3b 0a |l', $T_S|TRING);.|
|00004910| 58 73 75 62 20 73 74 72 | 69 6e 67 5f 32 73 79 6d |Xsub str|ing_2sym|
|00004920| 62 6f 6c 20 7b 0a 58 09 | 26 59 28 26 53 76 61 6c |bol {.X.|&Y(&Sval|
|00004930| 28 40 5f 5b 30 5d 29 29 | 3b 0a 58 7d 0a 58 0a 58 |(@_[0]))|;.X}.X.X|
|00004940| 23 2d 2d 2d 2d 2d 2d 0a | 58 23 2d 2d 20 4e 75 6d |#------.|X#-- Num|
|00004950| 62 65 72 73 2e 0a 58 23 | 2d 2d 2d 2d 2d 2d 0a 58 |bers..X#|------.X|
|00004960| 0a 58 26 53 55 42 52 31 | 28 27 6e 75 6d 62 65 72 |.X&SUBR1|('number|
|00004970| 3f 27 29 3b 0a 58 73 75 | 62 20 6e 75 6d 62 65 72 |?');.Xsu|b number|
|00004980| 50 20 7b 0a 58 09 26 54 | 59 50 45 28 40 5f 5b 30 |P {.X.&T|YPE(@_[0|
|00004990| 5d 29 20 3d 3d 20 24 54 | 5f 4e 55 4d 42 45 52 3b |]) == $T|_NUMBER;|
|000049a0| 0a 58 7d 0a 58 0a 58 26 | 53 55 42 52 31 28 27 63 |.X}.X.X&|SUBR1('c|
|000049b0| 6f 6d 70 6c 65 78 3f 27 | 29 3b 0a 58 73 75 62 20 |omplex?'|);.Xsub |
|000049c0| 63 6f 6d 70 6c 65 78 50 | 20 7b 0a 58 09 26 54 59 |complexP| {.X.&TY|
|000049d0| 50 45 28 40 5f 5b 30 5d | 29 20 3d 3d 20 24 54 5f |PE(@_[0]|) == $T_|
|000049e0| 4e 55 4d 42 45 52 3b 0a | 58 7d 0a 58 0a 58 26 53 |NUMBER;.|X}.X.X&S|
|000049f0| 55 42 52 31 28 27 72 65 | 61 6c 3f 27 29 3b 0a 58 |UBR1('re|al?');.X|
|00004a00| 73 75 62 20 72 65 61 6c | 50 20 7b 0a 58 09 26 54 |sub real|P {.X.&T|
|00004a10| 59 50 45 28 40 5f 5b 30 | 5d 29 20 3d 3d 20 24 54 |YPE(@_[0|]) == $T|
|00004a20| 5f 4e 55 4d 42 45 52 3b | 0a 58 7d 0a 58 0a 58 26 |_NUMBER;|.X}.X.X&|
|00004a30| 53 55 42 52 31 28 27 72 | 61 74 69 6f 6e 61 6c 3f |SUBR1('r|ational?|
|00004a40| 27 29 3b 0a 58 73 75 62 | 20 72 61 74 69 6f 6e 61 |');.Xsub| rationa|
|00004a50| 6c 50 20 7b 0a 58 09 26 | 69 6e 74 65 67 65 72 50 |lP {.X.&|integerP|
|00004a60| 28 40 5f 5b 30 5d 29 3b | 0a 58 7d 0a 58 0a 58 26 |(@_[0]);|.X}.X.X&|
|00004a70| 53 55 42 52 31 28 27 69 | 6e 74 65 67 65 72 3f 27 |SUBR1('i|nteger?'|
|00004a80| 29 3b 0a 58 73 75 62 20 | 69 6e 74 65 67 65 72 50 |);.Xsub |integerP|
|00004a90| 20 7b 0a 58 09 72 65 74 | 75 72 6e 20 24 46 41 4c | {.X.ret|urn $FAL|
|00004aa0| 53 45 20 69 66 20 26 54 | 59 50 45 28 40 5f 5b 30 |SE if &T|YPE(@_[0|
|00004ab0| 5d 29 20 21 3d 20 24 54 | 5f 4e 55 4d 42 45 52 3b |]) != $T|_NUMBER;|
|00004ac0| 0a 58 09 6c 6f 63 61 6c | 28 24 6e 29 20 3d 20 26 |.X.local|($n) = &|
|00004ad0| 4e 76 61 6c 28 40 5f 5b | 30 5d 29 3b 0a 58 09 24 |Nval(@_[|0]);.X.$|
|00004ae0| 6e 20 3d 3d 20 69 6e 74 | 28 24 6e 29 3b 0a 58 7d |n == int|($n);.X}|
|00004af0| 0a 58 0a 58 26 53 55 42 | 52 31 28 27 7a 65 72 6f |.X.X&SUB|R1('zero|
|00004b00| 3f 27 2c 20 24 54 5f 4e | 55 4d 42 45 52 29 3b 0a |?', $T_N|UMBER);.|
|00004b10| 58 73 75 62 20 7a 65 72 | 6f 50 20 7b 0a 58 09 26 |Xsub zer|oP {.X.&|
|00004b20| 4e 76 61 6c 28 40 5f 5b | 30 5d 29 20 3d 3d 20 30 |Nval(@_[|0]) == 0|
|00004b30| 3b 0a 58 7d 0a 58 0a 58 | 26 53 55 42 52 31 28 27 |;.X}.X.X|&SUBR1('|
|00004b40| 70 6f 73 69 74 69 76 65 | 3f 27 2c 20 24 54 5f 4e |positive|?', $T_N|
|00004b50| 55 4d 42 45 52 29 3b 0a | 58 73 75 62 20 70 6f 73 |UMBER);.|Xsub pos|
|00004b60| 69 74 69 76 65 50 20 7b | 0a 58 09 26 4e 76 61 6c |itiveP {|.X.&Nval|
|00004b70| 28 40 5f 5b 30 5d 29 20 | 3e 20 30 3b 0a 58 7d 0a |(@_[0]) |> 0;.X}.|
|00004b80| 58 0a 58 26 53 55 42 52 | 31 28 27 6e 65 67 61 74 |X.X&SUBR|1('negat|
|00004b90| 69 76 65 3f 27 2c 20 24 | 54 5f 4e 55 4d 42 45 52 |ive?', $|T_NUMBER|
|00004ba0| 29 3b 0a 58 73 75 62 20 | 6e 65 67 61 74 69 76 65 |);.Xsub |negative|
|00004bb0| 50 20 7b 0a 58 09 26 4e | 76 61 6c 28 40 5f 5b 30 |P {.X.&N|val(@_[0|
|00004bc0| 5d 29 20 3c 20 30 3b 0a | 58 7d 0a 58 0a 58 26 53 |]) < 0;.|X}.X.X&S|
|00004bd0| 55 42 52 31 28 27 6f 64 | 64 3f 27 2c 20 24 54 5f |UBR1('od|d?', $T_|
|00004be0| 4e 55 4d 42 45 52 29 3b | 0a 58 73 75 62 20 6f 64 |NUMBER);|.Xsub od|
|00004bf0| 64 50 20 7b 0a 58 09 26 | 69 6e 74 65 67 65 72 50 |dP {.X.&|integerP|
|00004c00| 28 40 5f 5b 30 5d 29 20 | 26 26 20 28 26 4e 76 61 |(@_[0]) |&& (&Nva|
|00004c10| 6c 28 40 5f 5b 30 5d 29 | 20 26 20 31 29 20 3d 3d |l(@_[0])| & 1) ==|
|00004c20| 20 31 3b 0a 58 7d 0a 58 | 0a 58 26 53 55 42 52 31 | 1;.X}.X|.X&SUBR1|
|00004c30| 28 27 65 76 65 6e 3f 27 | 2c 20 24 54 5f 4e 55 4d |('even?'|, $T_NUM|
|00004c40| 42 45 52 29 3b 0a 58 73 | 75 62 20 65 76 65 6e 50 |BER);.Xs|ub evenP|
|00004c50| 20 7b 0a 58 09 26 69 6e | 74 65 67 65 72 50 28 40 | {.X.&in|tegerP(@|
|00004c60| 5f 5b 30 5d 29 20 26 26 | 20 28 26 4e 76 61 6c 28 |_[0]) &&| (&Nval(|
|00004c70| 40 5f 5b 30 5d 29 20 26 | 20 31 29 20 3d 3d 20 30 |@_[0]) &| 1) == 0|
|00004c80| 3b 0a 58 7d 0a 58 0a 58 | 26 43 4d 50 5f 53 55 42 |;.X}.X.X|&CMP_SUB|
|00004c90| 52 28 27 3d 27 2c 20 27 | 6e 75 6d 62 65 72 2d 65 |R('=', '|number-e|
|00004ca0| 71 3f 27 2c 20 24 54 5f | 4e 55 4d 42 45 52 2c 20 |q?', $T_|NUMBER, |
|00004cb0| 27 26 4e 76 61 6c 27 2c | 20 27 3d 3d 27 29 3b 0a |'&Nval',| '==');.|
|00004cc0| 58 26 43 4d 50 5f 53 55 | 42 52 28 27 3c 27 2c 20 |X&CMP_SU|BR('<', |
|00004cd0| 27 6e 75 6d 62 65 72 2d | 6c 74 3f 27 2c 20 24 54 |'number-|lt?', $T|
|00004ce0| 5f 4e 55 4d 42 45 52 2c | 20 27 26 4e 76 61 6c 27 |_NUMBER,| '&Nval'|
|00004cf0| 2c 20 27 3c 27 29 3b 0a | 58 26 43 4d 50 5f 53 55 |, '<');.|X&CMP_SU|
|00004d00| 42 52 28 27 3e 27 2c 20 | 27 6e 75 6d 62 65 72 2d |BR('>', |'number-|
|00004d10| 67 74 3f 27 2c 20 24 54 | 5f 4e 55 4d 42 45 52 2c |gt?', $T|_NUMBER,|
|00004d20| 20 27 26 4e 76 61 6c 27 | 2c 20 27 3e 27 29 3b 0a | '&Nval'|, '>');.|
|00004d30| 58 26 43 4d 50 5f 53 55 | 42 52 28 27 3c 3d 27 2c |X&CMP_SU|BR('<=',|
|00004d40| 20 27 6e 75 6d 62 65 72 | 2d 6c 65 3f 27 2c 20 24 | 'number|-le?', $|
|00004d50| 54 5f 4e 55 4d 42 45 52 | 2c 20 27 26 4e 76 61 6c |T_NUMBER|, '&Nval|
|00004d60| 27 2c 20 27 3c 3d 27 29 | 3b 0a 58 26 43 4d 50 5f |', '<=')|;.X&CMP_|
|00004d70| 53 55 42 52 28 27 3e 3d | 27 2c 20 27 6e 75 6d 62 |SUBR('>=|', 'numb|
|00004d80| 65 72 2d 67 65 3f 27 2c | 20 24 54 5f 4e 55 4d 42 |er-ge?',| $T_NUMB|
|00004d90| 45 52 2c 20 27 26 4e 76 | 61 6c 27 2c 20 27 3e 3d |ER, '&Nv|al', '>=|
|00004da0| 27 29 3b 0a 58 0a 58 26 | 53 55 42 52 28 27 6d 61 |');.X.X&|SUBR('ma|
|00004db0| 78 27 2c 20 31 2c 20 2d | 31 2c 20 24 54 5f 4e 55 |x', 1, -|1, $T_NU|
|00004dc0| 4d 42 45 52 29 3b 0a 58 | 73 75 62 20 6d 61 78 20 |MBER);.X|sub max |
|00004dd0| 7b 0a 58 09 6c 6f 63 61 | 6c 28 40 73 69 70 29 20 |{.X.loca|l(@sip) |
|00004de0| 3d 20 40 5f 3b 0a 58 09 | 6c 6f 63 61 6c 28 24 78 |= @_;.X.|local($x|
|00004df0| 29 20 3d 20 26 4e 76 61 | 6c 28 73 68 69 66 74 20 |) = &Nva|l(shift |
|00004e00| 40 73 69 70 29 3b 0a 58 | 09 66 6f 72 20 28 3b 20 |@sip);.X|.for (; |
|00004e10| 40 73 69 70 3b 20 73 68 | 69 66 74 20 40 73 69 70 |@sip; sh|ift @sip|
|00004e20| 29 20 7b 0a 58 09 09 24 | 78 20 3d 20 26 4e 76 61 |) {.X..$|x = &Nva|
|00004e30| 6c 28 40 73 69 70 5b 30 | 5d 29 20 69 66 20 26 4e |l(@sip[0|]) if &N|
|00004e40| 76 61 6c 28 40 73 69 70 | 5b 30 5d 29 20 3e 20 24 |val(@sip|[0]) > $|
|00004e50| 78 3b 0a 58 09 7d 0a 58 | 09 26 4e 28 24 78 29 3b |x;.X.}.X|.&N($x);|
|00004e60| 0a 58 7d 0a 58 0a 58 26 | 53 55 42 52 28 27 6d 69 |.X}.X.X&|SUBR('mi|
|00004e70| 6e 27 2c 20 31 2c 20 2d | 31 2c 20 24 54 5f 4e 55 |n', 1, -|1, $T_NU|
|00004e80| 4d 42 45 52 29 3b 0a 58 | 73 75 62 20 6d 69 6e 20 |MBER);.X|sub min |
|00004e90| 7b 0a 58 09 6c 6f 63 61 | 6c 28 40 73 69 70 29 20 |{.X.loca|l(@sip) |
|00004ea0| 3d 20 40 5f 3b 0a 58 09 | 6c 6f 63 61 6c 28 24 78 |= @_;.X.|local($x|
|00004eb0| 29 20 3d 20 26 4e 76 61 | 6c 28 73 68 69 66 74 20 |) = &Nva|l(shift |
|00004ec0| 40 73 69 70 29 3b 0a 58 | 09 66 6f 72 20 28 3b 20 |@sip);.X|.for (; |
|00004ed0| 40 73 69 70 3b 20 73 68 | 69 66 74 20 40 73 69 70 |@sip; sh|ift @sip|
|00004ee0| 29 20 7b 0a 58 09 09 24 | 78 20 3d 20 26 4e 76 61 |) {.X..$|x = &Nva|
|00004ef0| 6c 28 40 73 69 70 5b 30 | 5d 29 20 69 66 20 26 4e |l(@sip[0|]) if &N|
|00004f00| 76 61 6c 28 40 73 69 70 | 5b 30 5d 29 20 3c 20 24 |val(@sip|[0]) < $|
|00004f10| 78 3b 0a 58 09 7d 0a 58 | 09 26 4e 28 24 78 29 3b |x;.X.}.X|.&N($x);|
|00004f20| 0a 58 7d 0a 58 0a 58 26 | 44 45 46 28 27 2b 27 2c |.X}.X.X&|DEF('+',|
|00004f30| 20 26 53 55 42 52 4e 28 | 27 61 64 64 27 2c 20 24 | &SUBRN(|'add', $|
|00004f40| 54 5f 4e 55 4d 42 45 52 | 29 29 3b 0a 58 73 75 62 |T_NUMBER|));.Xsub|
|00004f50| 20 61 64 64 20 7b 0a 58 | 09 6c 6f 63 61 6c 28 40 | add {.X|.local(@|
|00004f60| 73 69 70 29 20 3d 20 40 | 5f 3b 0a 58 09 6c 6f 63 |sip) = @|_;.X.loc|
|00004f70| 61 6c 28 24 78 29 20 3d | 20 30 3b 0a 58 09 24 78 |al($x) =| 0;.X.$x|
|00004f80| 20 2b 3d 20 26 4e 76 61 | 6c 28 73 68 69 66 74 20 | += &Nva|l(shift |
|00004f90| 40 73 69 70 29 20 77 68 | 69 6c 65 20 40 73 69 70 |@sip) wh|ile @sip|
|00004fa0| 3b 0a 58 09 26 4e 28 24 | 78 29 3b 0a 58 7d 0a 58 |;.X.&N($|x);.X}.X|
|00004fb0| 0a 58 26 44 45 46 28 27 | 2d 27 2c 20 26 53 55 42 |.X&DEF('|-', &SUB|
|00004fc0| 52 28 27 73 75 62 74 72 | 61 63 74 27 2c 20 31 2c |R('subtr|act', 1,|
|00004fd0| 20 2d 31 2c 20 24 54 5f | 4e 55 4d 42 45 52 29 29 | -1, $T_|NUMBER))|
|00004fe0| 3b 0a 58 73 75 62 20 73 | 75 62 74 72 61 63 74 20 |;.Xsub s|ubtract |
|00004ff0| 7b 0a 58 09 6c 6f 63 61 | 6c 28 40 73 69 70 29 20 |{.X.loca|l(@sip) |
|00005000| 3d 20 40 5f 3b 0a 58 09 | 6c 6f 63 61 6c 28 24 78 |= @_;.X.|local($x|
|00005010| 29 20 3d 20 26 4e 76 61 | 6c 28 73 68 69 66 74 20 |) = &Nva|l(shift |
|00005020| 40 73 69 70 29 3b 0a 58 | 09 24 78 20 3d 20 2d 24 |@sip);.X|.$x = -$|
|00005030| 78 20 69 66 20 21 40 73 | 69 70 3b 0a 58 09 24 78 |x if !@s|ip;.X.$x|
|00005040| 20 2d 3d 20 26 4e 76 61 | 6c 28 73 68 69 66 74 20 | -= &Nva|l(shift |
|00005050| 40 73 69 70 29 20 77 68 | 69 6c 65 20 40 73 69 70 |@sip) wh|ile @sip|
|00005060| 3b 0a 58 09 26 4e 28 24 | 78 29 3b 0a 58 7d 0a 58 |;.X.&N($|x);.X}.X|
|00005070| 0a 58 26 44 45 46 28 27 | 2a 27 2c 20 26 53 55 42 |.X&DEF('|*', &SUB|
|00005080| 52 4e 28 27 6d 75 6c 74 | 69 70 6c 79 27 2c 20 24 |RN('mult|iply', $|
|00005090| 54 5f 4e 55 4d 42 45 52 | 29 29 3b 0a 58 73 75 62 |T_NUMBER|));.Xsub|
|000050a0| 20 6d 75 6c 74 69 70 6c | 79 20 7b 0a 58 09 6c 6f | multipl|y {.X.lo|
|000050b0| 63 61 6c 28 40 73 69 70 | 29 20 3d 20 40 5f 3b 0a |cal(@sip|) = @_;.|
|000050c0| 58 09 6c 6f 63 61 6c 28 | 24 78 29 20 3d 20 31 3b |X.local(|$x) = 1;|
|000050d0| 0a 58 09 24 78 20 2a 3d | 20 26 4e 76 61 6c 28 73 |.X.$x *=| &Nval(s|
|000050e0| 68 69 66 74 20 40 73 69 | 70 29 20 77 68 69 6c 65 |hift @si|p) while|
|000050f0| 20 40 73 69 70 3b 0a 58 | 09 26 4e 28 24 78 29 3b | @sip;.X|.&N($x);|
|00005100| 0a 58 7d 0a 58 0a 58 26 | 44 45 46 28 27 2f 27 2c |.X}.X.X&|DEF('/',|
|00005110| 20 26 53 55 42 52 28 27 | 64 69 76 69 64 65 27 2c | &SUBR('|divide',|
|00005120| 20 31 2c 20 2d 31 2c 20 | 24 54 5f 4e 55 4d 42 45 | 1, -1, |$T_NUMBE|
|00005130| 52 29 29 3b 0a 58 73 75 | 62 20 64 69 76 69 64 65 |R));.Xsu|b divide|
|00005140| 20 7b 0a 58 09 6c 6f 63 | 61 6c 28 40 73 69 70 29 | {.X.loc|al(@sip)|
|00005150| 20 3d 20 40 5f 3b 0a 58 | 09 6c 6f 63 61 6c 28 24 | = @_;.X|.local($|
|00005160| 78 29 20 3d 20 26 4e 76 | 61 6c 28 73 68 69 66 74 |x) = &Nv|al(shift|
|00005170| 20 40 73 69 70 29 3b 0a | 58 09 69 66 20 28 40 73 | @sip);.|X.if (@s|
|00005180| 69 70 20 3d 3d 20 30 29 | 20 7b 0a 58 09 09 26 45 |ip == 0)| {.X..&E|
|00005190| 52 52 64 6f 6d 61 69 6e | 28 27 2f 27 2c 20 27 64 |RRdomain|('/', 'd|
|000051a0| 69 76 69 73 69 6f 6e 20 | 62 79 20 7a 65 72 6f 2e |ivision |by zero.|
|000051b0| 27 29 20 69 66 20 24 78 | 20 3d 3d 20 30 3b 0a 58 |') if $x| == 0;.X|
|000051c0| 09 09 24 78 20 3d 20 31 | 20 2f 20 24 78 3b 0a 58 |..$x = 1| / $x;.X|
|000051d0| 09 7d 20 65 6c 73 65 20 | 7b 0a 58 09 09 6c 6f 63 |.} else |{.X..loc|
|000051e0| 61 6c 28 24 79 29 3b 0a | 58 09 09 77 68 69 6c 65 |al($y);.|X..while|
|000051f0| 20 28 40 73 69 70 29 20 | 7b 0a 58 09 09 09 24 79 | (@sip) |{.X...$y|
|00005200| 20 3d 20 26 4e 76 61 6c | 28 73 68 69 66 74 20 40 | = &Nval|(shift @|
|00005210| 73 69 70 29 3b 0a 58 09 | 09 09 26 45 52 52 64 6f |sip);.X.|..&ERRdo|
|00005220| 6d 61 69 6e 28 27 2f 27 | 2c 20 27 64 69 76 69 73 |main('/'|, 'divis|
|00005230| 69 6f 6e 20 62 79 20 7a | 65 72 6f 2e 27 29 20 69 |ion by z|ero.') i|
|00005240| 66 20 24 79 20 3d 3d 20 | 30 3b 0a 58 09 09 09 24 |f $y == |0;.X...$|
|00005250| 78 20 2f 3d 20 24 79 3b | 0a 58 09 09 7d 0a 58 09 |x /= $y;|.X..}.X.|
|00005260| 7d 0a 58 09 26 4e 28 24 | 78 29 3b 0a 58 7d 0a 58 |}.X.&N($|x);.X}.X|
|00005270| 0a 58 26 44 45 46 28 27 | 31 2b 27 2c 20 26 53 55 |.X&DEF('|1+', &SU|
|00005280| 42 52 31 28 27 69 6e 63 | 27 2c 20 24 54 5f 4e 55 |BR1('inc|', $T_NU|
|00005290| 4d 42 45 52 29 29 3b 0a | 58 73 75 62 20 69 6e 63 |MBER));.|Xsub inc|
|000052a0| 20 7b 0a 58 09 26 4e 28 | 26 4e 76 61 6c 28 40 5f | {.X.&N(|&Nval(@_|
|000052b0| 5b 30 5d 29 20 2b 20 31 | 29 3b 0a 58 7d 0a 58 0a |[0]) + 1|);.X}.X.|
|000052c0| 58 26 44 45 46 28 27 2d | 31 2b 27 2c 20 26 53 55 |X&DEF('-|1+', &SU|
|000052d0| 42 52 31 28 27 64 65 63 | 27 2c 20 24 54 5f 4e 55 |BR1('dec|', $T_NU|
|000052e0| 4d 42 45 52 29 29 3b 0a | 58 73 75 62 20 64 65 63 |MBER));.|Xsub dec|
|000052f0| 20 7b 0a 58 09 26 4e 28 | 26 4e 76 61 6c 28 40 5f | {.X.&N(|&Nval(@_|
|00005300| 5b 30 5d 29 20 2d 20 31 | 29 3b 0a 58 7d 0a 58 0a |[0]) - 1|);.X}.X.|
|00005310| 58 26 53 55 42 52 31 28 | 27 61 62 73 27 2c 20 24 |X&SUBR1(|'abs', $|
|00005320| 54 5f 4e 55 4d 42 45 52 | 29 3b 0a 58 73 75 62 20 |T_NUMBER|);.Xsub |
|00005330| 61 62 73 20 7b 0a 58 09 | 6c 6f 63 61 6c 28 24 78 |abs {.X.|local($x|
|00005340| 29 20 3d 20 26 4e 76 61 | 6c 28 40 5f 5b 30 5d 29 |) = &Nva|l(@_[0])|
|00005350| 3b 0a 58 09 26 4e 28 24 | 78 20 3e 20 30 20 3f 20 |;.X.&N($|x > 0 ? |
|00005360| 24 78 20 3a 20 2d 24 78 | 29 3b 0a 58 7d 0a 58 0a |$x : -$x|);.X}.X.|
|00005370| 58 26 53 55 42 52 32 28 | 27 71 75 6f 74 69 65 6e |X&SUBR2(|'quotien|
|00005380| 74 27 2c 20 24 54 5f 4e | 55 4d 42 45 52 2c 20 24 |t', $T_N|UMBER, $|
|00005390| 54 5f 4e 55 4d 42 45 52 | 29 3b 0a 58 73 75 62 20 |T_NUMBER|);.Xsub |
|000053a0| 71 75 6f 74 69 65 6e 74 | 20 7b 0a 58 09 6c 6f 63 |quotient| {.X.loc|
|000053b0| 61 6c 28 40 73 69 70 29 | 20 3d 20 40 5f 3b 0a 58 |al(@sip)| = @_;.X|
|000053c0| 09 6c 6f 63 61 6c 28 24 | 79 29 20 3d 20 26 4e 76 |.local($|y) = &Nv|
|000053d0| 61 6c 28 40 73 69 70 5b | 31 5d 29 3b 0a 58 09 26 |al(@sip[|1]);.X.&|
|000053e0| 45 52 52 64 6f 6d 61 69 | 6e 28 27 71 75 6f 74 69 |ERRdomai|n('quoti|
|000053f0| 65 6e 74 27 2c 20 27 64 | 69 76 69 73 69 6f 6e 20 |ent', 'd|ivision |
|00005400| 62 79 20 7a 65 72 6f 2e | 27 29 20 69 66 20 24 79 |by zero.|') if $y|
|00005410| 20 3d 3d 20 30 3b 0a 58 | 09 26 4e 28 69 6e 74 28 | == 0;.X|.&N(int(|
|00005420| 26 4e 76 61 6c 28 40 73 | 69 70 5b 30 5d 29 20 2f |&Nval(@s|ip[0]) /|
|00005430| 20 24 79 29 29 3b 0a 58 | 7d 0a 58 0a 58 26 53 55 | $y));.X|}.X.X&SU|
|00005440| 42 52 32 28 27 72 65 6d | 61 69 6e 64 65 72 27 2c |BR2('rem|ainder',|
|00005450| 20 24 54 5f 4e 55 4d 42 | 45 52 2c 20 24 54 5f 4e | $T_NUMB|ER, $T_N|
|00005460| 55 4d 42 45 52 29 3b 0a | 58 73 75 62 20 72 65 6d |UMBER);.|Xsub rem|
|00005470| 61 69 6e 64 65 72 20 7b | 0a 58 09 6c 6f 63 61 6c |ainder {|.X.local|
|00005480| 28 40 73 69 70 29 20 3d | 20 40 5f 3b 0a 58 09 6c |(@sip) =| @_;.X.l|
|00005490| 6f 63 61 6c 28 24 78 29 | 20 3d 20 26 4e 76 61 6c |ocal($x)| = &Nval|
|000054a0| 28 40 73 69 70 5b 30 5d | 29 3b 0a 58 09 6c 6f 63 |(@sip[0]|);.X.loc|
|000054b0| 61 6c 28 24 79 29 20 3d | 20 26 4e 76 61 6c 28 40 |al($y) =| &Nval(@|
|000054c0| 73 69 70 5b 31 5d 29 3b | 0a 58 09 26 45 52 52 64 |sip[1]);|.X.&ERRd|
|000054d0| 6f 6d 61 69 6e 28 27 72 | 65 6d 61 69 6e 64 65 72 |omain('r|emainder|
|000054e0| 27 2c 20 27 64 69 76 69 | 73 69 6f 6e 20 62 79 20 |', 'divi|sion by |
|000054f0| 7a 65 72 6f 2e 27 29 20 | 69 66 20 24 79 20 3d 3d |zero.') |if $y ==|
|00005500| 20 30 3b 0a 58 09 26 4e | 28 24 78 20 2d 20 24 79 | 0;.X.&N|($x - $y|
|00005510| 20 2a 20 69 6e 74 28 24 | 78 20 2f 20 24 79 29 29 | * int($|x / $y))|
|00005520| 3b 0a 58 7d 0a 58 0a 58 | 26 53 55 42 52 32 28 27 |;.X}.X.X|&SUBR2('|
|00005530| 6d 6f 64 75 6c 6f 27 2c | 20 24 54 5f 4e 55 4d 42 |modulo',| $T_NUMB|
|00005540| 45 52 2c 20 24 54 5f 4e | 55 4d 42 45 52 29 3b 0a |ER, $T_N|UMBER);.|
|00005550| 58 73 75 62 20 6d 6f 64 | 75 6c 6f 20 7b 0a 58 09 |Xsub mod|ulo {.X.|
|00005560| 6c 6f 63 61 6c 28 40 73 | 69 70 29 20 3d 20 40 5f |local(@s|ip) = @_|
|00005570| 3b 0a 58 09 6c 6f 63 61 | 6c 28 24 78 29 20 3d 20 |;.X.loca|l($x) = |
|00005580| 26 4e 76 61 6c 28 40 73 | 69 70 5b 30 5d 29 3b 0a |&Nval(@s|ip[0]);.|
|00005590| 58 09 6c 6f 63 61 6c 28 | 24 79 29 20 3d 20 26 4e |X.local(|$y) = &N|
|000055a0| 76 61 6c 28 40 73 69 70 | 5b 31 5d 29 3b 0a 58 09 |val(@sip|[1]);.X.|
|000055b0| 26 45 52 52 64 6f 6d 61 | 69 6e 28 27 6d 6f 64 75 |&ERRdoma|in('modu|
|000055c0| 6c 6f 27 2c 20 27 64 69 | 76 69 73 69 6f 6e 20 62 |lo', 'di|vision b|
|000055d0| 79 20 7a 65 72 6f 2e 27 | 29 20 69 66 20 24 79 20 |y zero.'|) if $y |
|000055e0| 3d 3d 20 30 3b 0a 58 09 | 6c 6f 63 61 6c 28 24 72 |== 0;.X.|local($r|
|000055f0| 29 20 3d 20 24 78 20 2d | 20 24 79 20 2a 20 69 6e |) = $x -| $y * in|
|00005600| 74 28 24 78 20 2f 20 24 | 79 29 3b 0a 58 09 24 72 |t($x / $|y);.X.$r|
|00005610| 20 2b 3d 20 24 79 20 69 | 66 20 28 24 79 20 3c 20 | += $y i|f ($y < |
|00005620| 30 20 26 26 20 24 72 20 | 3e 20 30 29 20 7c 7c 20 |0 && $r |> 0) || |
|00005630| 28 24 79 20 3e 20 30 20 | 26 26 20 24 72 20 3c 20 |($y > 0 |&& $r < |
|00005640| 30 29 3b 0a 58 09 26 4e | 28 24 72 29 3b 0a 58 7d |0);.X.&N|($r);.X}|
|00005650| 0a 58 0a 58 23 20 58 58 | 58 20 53 55 42 52 20 6e |.X.X# XX|X SUBR n|
|00005660| 75 6d 65 72 61 74 6f 72 | 2c 20 64 65 6e 6f 6d 69 |umerator|, denomi|
|00005670| 6e 61 74 6f 72 20 28 72 | 61 74 69 6f 6e 61 6c 73 |nator (r|ationals|
|00005680| 29 0a 58 0a 58 23 20 58 | 58 58 20 53 55 42 52 20 |).X.X# X|XX SUBR |
|00005690| 67 63 64 2c 20 6c 63 6d | 0a 58 0a 58 26 53 55 42 |gcd, lcm|.X.X&SUB|
|000056a0| 52 31 28 27 66 6c 6f 6f | 72 27 2c 20 24 54 5f 4e |R1('floo|r', $T_N|
|000056b0| 55 4d 42 45 52 29 3b 0a | 58 73 75 62 20 66 6c 6f |UMBER);.|Xsub flo|
|000056c0| 6f 72 20 7b 0a 58 09 6c | 6f 63 61 6c 28 24 6e 29 |or {.X.l|ocal($n)|
|000056d0| 20 3d 20 26 4e 76 61 6c | 28 40 5f 5b 30 5d 29 3b | = &Nval|(@_[0]);|
|000056e0| 0a 58 09 69 66 20 28 24 | 6e 20 3d 3d 20 69 6e 74 |.X.if ($|n == int|
|000056f0| 28 24 6e 29 29 20 7b 0a | 58 09 09 26 4e 28 24 6e |($n)) {.|X..&N($n|
|00005700| 29 3b 0a 58 09 7d 20 65 | 6c 73 65 20 7b 0a 58 09 |);.X.} e|lse {.X.|
|00005710| 09 24 6e 20 3c 20 30 20 | 3f 20 26 4e 28 24 6e 20 |.$n < 0 |? &N($n |
|00005720| 2d 20 31 29 20 3a 20 26 | 4e 28 24 6e 29 3b 0a 58 |- 1) : &|N($n);.X|
|00005730| 09 7d 0a 58 7d 0a 58 0a | 58 26 53 55 42 52 31 28 |.}.X}.X.|X&SUBR1(|
|00005740| 27 63 65 69 6c 69 6e 67 | 27 2c 20 24 54 5f 4e 55 |'ceiling|', $T_NU|
|00005750| 4d 42 45 52 29 3b 0a 58 | 73 75 62 20 63 65 69 6c |MBER);.X|sub ceil|
|00005760| 69 6e 67 20 7b 0a 58 09 | 6c 6f 63 61 6c 28 24 6e |ing {.X.|local($n|
|00005770| 29 20 3d 20 26 4e 76 61 | 6c 28 40 5f 5b 30 5d 29 |) = &Nva|l(@_[0])|
|00005780| 3b 0a 58 09 69 66 20 28 | 24 6e 20 3d 3d 20 69 6e |;.X.if (|$n == in|
|00005790| 74 28 24 6e 29 29 20 7b | 0a 58 09 09 26 4e 28 24 |t($n)) {|.X..&N($|
|000057a0| 6e 29 3b 0a 58 09 7d 20 | 65 6c 73 65 20 7b 0a 58 |n);.X.} |else {.X|
|000057b0| 09 09 24 6e 20 3c 20 30 | 20 3f 20 26 4e 28 24 6e |..$n < 0| ? &N($n|
|000057c0| 29 20 3a 20 26 4e 28 24 | 6e 20 2b 20 31 29 3b 0a |) : &N($|n + 1);.|
|000057d0| 58 09 7d 0a 58 7d 0a 58 | 0a 58 26 53 55 42 52 31 |X.}.X}.X|.X&SUBR1|
|000057e0| 28 27 74 72 75 6e 63 61 | 74 65 27 2c 20 24 54 5f |('trunca|te', $T_|
|000057f0| 4e 55 4d 42 45 52 29 3b | 0a 58 73 75 62 20 74 72 |NUMBER);|.Xsub tr|
|00005800| 75 6e 63 61 74 65 20 7b | 0a 58 09 26 4e 28 69 6e |uncate {|.X.&N(in|
|00005810| 74 28 26 4e 76 61 6c 28 | 40 5f 5b 30 5d 29 29 29 |t(&Nval(|@_[0])))|
|00005820| 3b 0a 58 7d 0a 58 0a 58 | 26 53 55 42 52 31 28 27 |;.X}.X.X|&SUBR1('|
|00005830| 72 6f 75 6e 64 27 2c 20 | 24 54 5f 4e 55 4d 42 45 |round', |$T_NUMBE|
|00005840| 52 29 3b 0a 58 73 75 62 | 20 72 6f 75 6e 64 20 7b |R);.Xsub| round {|
|00005850| 0a 58 09 6c 6f 63 61 6c | 28 24 6e 29 20 3d 20 26 |.X.local|($n) = &|
|00005860| 4e 76 61 6c 28 40 5f 5b | 30 5d 29 3b 0a 58 09 69 |Nval(@_[|0]);.X.i|
|00005870| 66 20 28 24 6e 20 2b 20 | 2e 35 20 3d 3d 20 69 6e |f ($n + |.5 == in|
|00005880| 74 28 24 6e 20 2b 20 2e | 35 29 29 20 7b 0a 58 09 |t($n + .|5)) {.X.|
|00005890| 09 69 66 20 28 24 6e 20 | 3c 20 30 29 20 7b 0a 58 |.if ($n |< 0) {.X|
|000058a0| 09 09 09 31 20 26 20 28 | 2d 24 6e 20 2d 20 2e 35 |...1 & (|-$n - .5|
|000058b0| 29 20 3f 20 26 4e 28 24 | 6e 20 2d 20 2e 35 29 20 |) ? &N($|n - .5) |
|000058c0| 3a 20 26 4e 28 24 6e 20 | 2b 20 2e 35 29 3b 0a 58 |: &N($n |+ .5);.X|
|000058d0| 09 09 7d 20 65 6c 73 65 | 20 7b 0a 58 09 09 09 31 |..} else| {.X...1|
|000058e0| 20 26 20 28 24 6e 20 2b | 20 2e 35 29 20 3f 20 26 | & ($n +| .5) ? &|
|000058f0| 4e 28 24 6e 20 2d 20 2e | 35 29 20 3a 20 26 4e 28 |N($n - .|5) : &N(|
|00005900| 24 6e 20 2b 20 2e 35 29 | 3b 0a 58 09 09 7d 0a 58 |$n + .5)|;.X..}.X|
|00005910| 09 7d 20 65 6c 73 65 20 | 7b 0a 58 09 09 24 6e 20 |.} else |{.X..$n |
|00005920| 3c 20 30 20 3f 20 26 4e | 28 69 6e 74 28 24 6e 20 |< 0 ? &N|(int($n |
|00005930| 2d 20 2e 35 29 29 20 3a | 20 26 4e 28 69 6e 74 28 |- .5)) :| &N(int(|
|00005940| 24 6e 20 2b 20 2e 35 29 | 29 3b 0a 58 09 7d 0a 58 |$n + .5)|);.X.}.X|
|00005950| 7d 0a 58 0a 58 23 20 58 | 58 58 20 53 55 42 52 20 |}.X.X# X|XX SUBR |
|00005960| 72 61 74 69 6f 6e 61 6c | 69 7a 65 0a 58 0a 58 26 |rational|ize.X.X&|
|00005970| 53 55 42 52 31 28 27 65 | 78 70 27 2c 20 24 54 5f |SUBR1('e|xp', $T_|
|00005980| 4e 55 4d 42 45 52 29 3b | 0a 58 73 75 62 20 65 78 |NUMBER);|.Xsub ex|
|00005990| 70 20 7b 0a 58 09 26 4e | 28 65 78 70 28 26 4e 76 |p {.X.&N|(exp(&Nv|
|000059a0| 61 6c 28 40 5f 5b 30 5d | 29 29 29 3b 0a 58 7d 0a |al(@_[0]|)));.X}.|
|000059b0| 58 0a 58 26 53 55 42 52 | 31 28 27 6c 6f 67 27 2c |X.X&SUBR|1('log',|
|000059c0| 20 24 54 5f 4e 55 4d 42 | 45 52 29 3b 0a 58 73 75 | $T_NUMB|ER);.Xsu|
|000059d0| 62 20 6c 6f 67 20 7b 0a | 58 09 6c 6f 63 61 6c 28 |b log {.|X.local(|
|000059e0| 24 78 29 20 3d 20 26 4e | 76 61 6c 28 40 5f 5b 30 |$x) = &N|val(@_[0|
|000059f0| 5d 29 3b 0a 58 09 26 45 | 52 52 64 6f 6d 61 69 6e |]);.X.&E|RRdomain|
|00005a00| 28 27 6c 6f 67 27 2c 20 | 27 73 69 6e 67 75 6c 61 |('log', |'singula|
|00005a10| 72 69 74 79 20 61 74 20 | 7a 65 72 6f 2e 27 29 20 |rity at |zero.') |
|00005a20| 69 66 20 24 78 20 3d 3d | 20 30 3b 0a 58 09 26 4e |if $x ==| 0;.X.&N|
|00005a30| 28 6c 6f 67 28 24 78 29 | 29 3b 0a 58 7d 0a 58 0a |(log($x)|);.X}.X.|
|00005a40| 58 26 53 55 42 52 31 28 | 27 73 69 6e 27 2c 20 24 |X&SUBR1(|'sin', $|
|00005a50| 54 5f 4e 55 4d 42 45 52 | 29 3b 0a 58 73 75 62 20 |T_NUMBER|);.Xsub |
|00005a60| 73 69 6e 20 7b 0a 58 09 | 26 4e 28 73 69 6e 28 26 |sin {.X.|&N(sin(&|
|00005a70| 4e 76 61 6c 28 40 5f 5b | 30 5d 29 29 29 3b 0a 58 |Nval(@_[|0])));.X|
|00005a80| 7d 0a 58 0a 58 26 53 55 | 42 52 31 28 27 63 6f 73 |}.X.X&SU|BR1('cos|
|00005a90| 27 2c 20 24 54 5f 4e 55 | 4d 42 45 52 29 3b 0a 58 |', $T_NU|MBER);.X|
|00005aa0| 73 75 62 20 63 6f 73 20 | 7b 0a 58 09 26 4e 28 63 |sub cos |{.X.&N(c|
|00005ab0| 6f 73 28 26 4e 76 61 6c | 28 40 5f 5b 30 5d 29 29 |os(&Nval|(@_[0]))|
|00005ac0| 29 3b 0a 58 7d 0a 58 0a | 58 26 53 55 42 52 31 28 |);.X}.X.|X&SUBR1(|
|00005ad0| 27 74 61 6e 27 2c 20 24 | 54 5f 4e 55 4d 42 45 52 |'tan', $|T_NUMBER|
|00005ae0| 29 3b 0a 58 73 75 62 20 | 74 61 6e 20 7b 0a 58 09 |);.Xsub |tan {.X.|
|00005af0| 6c 6f 63 61 6c 28 24 78 | 29 20 3d 20 26 4e 76 61 |local($x|) = &Nva|
|00005b00| 6c 28 40 5f 5b 30 5d 29 | 3b 0a 58 09 26 4e 28 73 |l(@_[0])|;.X.&N(s|
|00005b10| 69 6e 28 24 78 29 2f 63 | 6f 73 28 24 78 29 29 3b |in($x)/c|os($x));|
|00005b20| 09 23 20 58 58 58 20 64 | 6f 6d 61 69 6e 20 65 72 |.# XXX d|omain er|
|00005b30| 72 6f 72 0a 58 7d 0a 58 | 0a 58 26 53 55 42 52 31 |ror.X}.X|.X&SUBR1|
|00005b40| 28 27 61 73 69 6e 27 2c | 20 24 54 5f 4e 55 4d 42 |('asin',| $T_NUMB|
|00005b50| 45 52 29 3b 0a 58 73 75 | 62 20 61 73 69 6e 20 7b |ER);.Xsu|b asin {|
|00005b60| 0a 58 09 6c 6f 63 61 6c | 28 24 78 29 20 3d 20 26 |.X.local|($x) = &|
|00005b70| 4e 76 61 6c 28 40 5f 5b | 30 5d 29 3b 0a 58 09 26 |Nval(@_[|0]);.X.&|
|00005b80| 45 52 52 64 6f 6d 61 69 | 6e 28 27 61 73 69 6e 27 |ERRdomai|n('asin'|
|00005b90| 2c 20 24 78 2c 20 27 20 | 69 73 20 6e 6f 74 20 69 |, $x, ' |is not i|
|00005ba0| 6e 20 5b 2d 31 2c 20 31 | 5d 2e 27 29 20 69 66 20 |n [-1, 1|].') if |
|00005bb0| 24 78 20 3c 20 2d 31 20 | 7c 7c 20 24 78 20 3e 20 |$x < -1 ||| $x > |
|00005bc0| 31 3b 0a 58 09 26 4e 28 | 61 74 61 6e 32 28 24 78 |1;.X.&N(|atan2($x|
|00005bd0| 2c 20 73 71 72 74 28 31 | 20 2d 20 24 78 20 2a 20 |, sqrt(1| - $x * |
|00005be0| 24 78 29 29 29 3b 0a 58 | 7d 0a 58 0a 58 26 53 55 |$x)));.X|}.X.X&SU|
|00005bf0| 42 52 31 28 27 61 63 6f | 73 27 2c 20 24 54 5f 4e |BR1('aco|s', $T_N|
|00005c00| 55 4d 42 45 52 29 3b 0a | 58 73 75 62 20 61 63 6f |UMBER);.|Xsub aco|
|00005c10| 73 20 7b 0a 58 09 6c 6f | 63 61 6c 28 24 78 29 20 |s {.X.lo|cal($x) |
|00005c20| 3d 20 26 4e 76 61 6c 28 | 40 5f 5b 30 5d 29 3b 0a |= &Nval(|@_[0]);.|
|00005c30| 58 09 26 45 52 52 64 6f | 6d 61 69 6e 28 27 61 63 |X.&ERRdo|main('ac|
|00005c40| 6f 73 27 2c 20 24 78 2c | 20 27 20 69 73 20 6e 6f |os', $x,| ' is no|
|00005c50| 74 20 69 6e 20 5b 2d 31 | 2c 20 31 5d 2e 27 29 20 |t in [-1|, 1].') |
|00005c60| 69 66 20 24 78 20 3c 20 | 2d 31 20 7c 7c 20 24 78 |if $x < |-1 || $x|
|00005c70| 20 3e 20 31 3b 0a 58 09 | 26 4e 28 61 74 61 6e 32 | > 1;.X.|&N(atan2|
|00005c80| 28 73 71 72 74 28 31 20 | 2d 20 24 78 20 2a 20 24 |(sqrt(1 |- $x * $|
|00005c90| 78 29 2c 20 24 78 29 29 | 3b 0a 58 7d 0a 58 0a 58 |x), $x))|;.X}.X.X|
|00005ca0| 26 53 55 42 52 28 27 61 | 74 61 6e 27 2c 20 31 2c |&SUBR('a|tan', 1,|
|00005cb0| 20 32 2c 20 24 54 5f 4e | 55 4d 42 45 52 2c 20 24 | 2, $T_N|UMBER, $|
|00005cc0| 54 5f 4e 55 4d 42 45 52 | 29 3b 0a 58 73 75 62 20 |T_NUMBER|);.Xsub |
|00005cd0| 61 74 61 6e 20 7b 0a 58 | 09 6c 6f 63 61 6c 28 40 |atan {.X|.local(@|
|00005ce0| 73 69 70 29 20 3d 20 40 | 5f 3b 0a 58 09 6c 6f 63 |sip) = @|_;.X.loc|
|00005cf0| 61 6c 28 24 78 29 20 3d | 20 26 4e 76 61 6c 28 40 |al($x) =| &Nval(@|
|00005d00| 5f 5b 30 5d 29 3b 0a 58 | 09 6c 6f 63 61 6c 28 24 |_[0]);.X|.local($|
|00005d10| 79 29 20 3d 20 40 5f 20 | 3e 20 31 20 3f 20 26 4e |y) = @_ |> 1 ? &N|
|00005d20| 76 61 6c 28 40 5f 5b 31 | 5d 29 20 3a 20 31 3b 0a |val(@_[1|]) : 1;.|
|00005d30| 58 09 26 4e 28 61 74 61 | 6e 32 28 24 78 2c 20 24 |X.&N(ata|n2($x, $|
|00005d40| 79 29 29 3b 09 23 20 58 | 58 58 20 64 6f 6d 61 69 |y));.# X|XX domai|
|00005d50| 6e 20 65 72 72 6f 72 0a | 58 7d 0a 58 0a 58 26 53 |n error.|X}.X.X&S|
|00005d60| 55 42 52 31 28 27 73 71 | 72 74 27 2c 20 24 54 5f |UBR1('sq|rt', $T_|
|00005d70| 4e 55 4d 42 45 52 29 3b | 0a 58 73 75 62 20 73 71 |NUMBER);|.Xsub sq|
|00005d80| 72 74 20 7b 0a 58 09 26 | 4e 28 73 71 72 74 28 26 |rt {.X.&|N(sqrt(&|
|00005d90| 4e 76 61 6c 28 40 5f 5b | 30 5d 29 29 29 3b 09 23 |Nval(@_[|0])));.#|
|00005da0| 20 58 58 58 20 64 6f 6d | 61 69 6e 20 65 72 72 6f | XXX dom|ain erro|
|00005db0| 72 0a 58 7d 0a 58 0a 58 | 26 53 55 42 52 32 28 27 |r.X}.X.X|&SUBR2('|
|00005dc0| 65 78 70 74 27 2c 20 24 | 54 5f 4e 55 4d 42 45 52 |expt', $|T_NUMBER|
|00005dd0| 2c 20 24 54 5f 4e 55 4d | 42 45 52 29 3b 0a 58 73 |, $T_NUM|BER);.Xs|
|00005de0| 75 62 20 65 78 70 74 20 | 7b 0a 58 09 6c 6f 63 61 |ub expt |{.X.loca|
|00005df0| 6c 28 40 73 69 70 29 20 | 3d 20 40 5f 3b 0a 58 09 |l(@sip) |= @_;.X.|
|00005e00| 6c 6f 63 61 6c 28 24 78 | 29 20 3d 20 26 4e 76 61 |local($x|) = &Nva|
|00005e10| 6c 28 40 5f 5b 30 5d 29 | 3b 0a 58 09 6c 6f 63 61 |l(@_[0])|;.X.loca|
|00005e20| 6c 28 24 79 29 20 3d 20 | 26 4e 76 61 6c 28 40 5f |l($y) = |&Nval(@_|
|00005e30| 5b 31 5d 29 3b 0a 58 09 | 69 66 20 28 24 78 20 3d |[1]);.X.|if ($x =|
|00005e40| 3d 20 30 20 26 26 20 24 | 79 20 3d 3d 20 30 29 20 |= 0 && $|y == 0) |
|00005e50| 7b 0a 58 09 09 26 4e 28 | 31 29 3b 09 23 20 72 65 |{.X..&N(|1);.# re|
|00005e60| 71 75 69 72 65 64 20 69 | 6e 20 52 33 52 53 2e 0a |quired i|n R3RS..|
|00005e70| 58 09 7d 20 65 6c 73 65 | 20 7b 0a 58 09 09 26 4e |X.} else| {.X..&N|
|00005e80| 28 24 78 20 2a 2a 20 24 | 79 29 3b 09 23 20 58 58 |($x ** $|y);.# XX|
|00005e90| 58 20 64 6f 6d 61 69 6e | 20 65 72 72 6f 72 2e 0a |X domain| error..|
|00005ea0| 58 09 7d 0a 58 7d 0a 58 | 0a 58 23 20 58 58 58 20 |X.}.X}.X|.X# XXX |
|00005eb0| 53 55 42 52 20 6d 61 6b | 65 2d 72 65 63 74 61 6e |SUBR mak|e-rectan|
|00005ec0| 67 75 6c 61 72 2c 20 6d | 61 6b 65 2d 70 6f 6c 61 |gular, m|ake-pola|
|00005ed0| 72 2c 20 72 65 61 6c 2d | 70 61 72 74 2c 20 69 6d |r, real-|part, im|
|00005ee0| 61 67 2d 70 61 72 74 2c | 0a 58 23 20 58 58 58 20 |ag-part,|.X# XXX |
|00005ef0| 53 55 42 52 20 6d 61 67 | 6e 69 74 75 64 65 2c 20 |SUBR mag|nitude, |
|00005f00| 61 6e 67 6c 65 0a 58 23 | 20 58 58 58 20 53 55 42 |angle.X#| XXX SUB|
|00005f10| 52 20 65 78 61 63 74 2d | 3e 69 6e 65 78 61 63 74 |R exact-|>inexact|
|00005f20| 2c 20 69 6e 65 78 61 63 | 74 2d 3e 65 78 61 63 74 |, inexac|t->exact|
|00005f30| 0a 58 0a 58 23 20 58 58 | 58 20 53 55 42 52 20 6e |.X.X# XX|X SUBR n|
|00005f40| 75 6d 62 65 72 2d 3e 73 | 74 72 69 6e 67 2c 20 73 |umber->s|tring, s|
|00005f50| 74 72 69 6e 67 2d 3e 6e | 75 6d 62 65 72 0a 58 0a |tring->n|umber.X.|
|00005f60| 58 23 2d 2d 2d 2d 2d 2d | 0a 58 23 2d 2d 20 43 68 |X#------|.X#-- Ch|
|00005f70| 61 72 61 63 74 65 72 73 | 2e 0a 58 23 2d 2d 2d 2d |aracters|..X#----|
|00005f80| 2d 2d 0a 58 0a 58 26 53 | 55 42 52 31 28 27 63 68 |--.X.X&S|UBR1('ch|
|00005f90| 61 72 3f 27 29 3b 0a 58 | 73 75 62 20 63 68 61 72 |ar?');.X|sub char|
|00005fa0| 50 20 7b 0a 58 09 26 54 | 59 50 45 28 40 5f 5b 30 |P {.X.&T|YPE(@_[0|
|00005fb0| 5d 29 20 3d 3d 20 24 54 | 5f 43 48 41 52 3b 0a 58 |]) == $T|_CHAR;.X|
|00005fc0| 7d 0a 58 0a 58 26 43 4d | 50 5f 53 55 42 52 28 27 |}.X.X&CM|P_SUBR('|
|00005fd0| 63 68 61 72 3d 3f 27 2c | 20 27 63 68 61 72 2d 65 |char=?',| 'char-e|
|00005fe0| 71 3f 27 2c 20 24 54 5f | 43 48 41 52 2c 20 27 26 |q?', $T_|CHAR, '&|
|00005ff0| 43 76 61 6c 27 2c 20 27 | 65 71 27 29 3b 0a 58 26 |Cval', '|eq');.X&|
|00006000| 43 4d 50 5f 53 55 42 52 | 28 27 63 68 61 72 3c 3f |CMP_SUBR|('char<?|
|00006010| 27 2c 20 27 63 68 61 72 | 2d 6c 74 3f 27 2c 20 24 |', 'char|-lt?', $|
|00006020| 54 5f 43 48 41 52 2c 20 | 27 26 43 76 61 6c 27 2c |T_CHAR, |'&Cval',|
|00006030| 20 27 6c 74 27 29 3b 0a | 58 26 43 4d 50 5f 53 55 | 'lt');.|X&CMP_SU|
|00006040| 42 52 28 27 63 68 61 72 | 3e 3f 27 2c 20 27 63 68 |BR('char|>?', 'ch|
|00006050| 61 72 2d 67 74 3f 27 2c | 20 24 54 5f 43 48 41 52 |ar-gt?',| $T_CHAR|
|00006060| 2c 20 27 26 43 76 61 6c | 27 2c 20 27 67 74 27 29 |, '&Cval|', 'gt')|
|00006070| 3b 0a 58 26 43 4d 50 5f | 53 55 42 52 28 27 63 68 |;.X&CMP_|SUBR('ch|
|00006080| 61 72 3c 3d 3f 27 2c 20 | 27 63 68 61 72 2d 6c 65 |ar<=?', |'char-le|
|00006090| 3f 27 2c 20 24 54 5f 43 | 48 41 52 2c 20 27 26 43 |?', $T_C|HAR, '&C|
|000060a0| 76 61 6c 27 2c 20 27 6c | 65 27 29 3b 0a 58 26 43 |val', 'l|e');.X&C|
|000060b0| 4d 50 5f 53 55 42 52 28 | 27 63 68 61 72 3e 3d 3f |MP_SUBR(|'char>=?|
|000060c0| 27 2c 20 27 63 68 61 72 | 2d 67 65 3f 27 2c 20 24 |', 'char|-ge?', $|
|000060d0| 54 5f 43 48 41 52 2c 20 | 27 26 43 76 61 6c 27 2c |T_CHAR, |'&Cval',|
|000060e0| 20 27 67 65 27 29 3b 0a | 58 0a 58 73 75 62 20 63 | 'ge');.|X.Xsub c|
|000060f0| 69 43 76 61 6c 20 7b 0a | 58 09 6c 6f 63 61 6c 28 |iCval {.|X.local(|
|00006100| 24 5f 29 20 3d 20 26 43 | 76 61 6c 28 40 5f 5b 30 |$_) = &C|val(@_[0|
|00006110| 5d 29 3b 0a 58 09 74 72 | 2f 41 2d 5a 2f 61 2d 7a |]);.X.tr|/A-Z/a-z|
|00006120| 2f 3b 0a 58 09 24 5f 3b | 0a 58 7d 0a 58 26 43 4d |/;.X.$_;|.X}.X&CM|
|00006130| 50 5f 53 55 42 52 28 27 | 63 68 61 72 2d 63 69 3d |P_SUBR('|char-ci=|
|00006140| 3f 27 2c 20 27 63 68 61 | 72 2d 63 69 2d 65 71 3f |?', 'cha|r-ci-eq?|
|00006150| 27 2c 20 24 54 5f 43 48 | 41 52 2c 20 27 26 63 69 |', $T_CH|AR, '&ci|
|00006160| 43 76 61 6c 27 2c 20 27 | 65 71 27 29 3b 0a 58 26 |Cval', '|eq');.X&|
|00006170| 43 4d 50 5f 53 55 42 52 | 28 27 63 68 61 72 2d 63 |CMP_SUBR|('char-c|
|00006180| 69 3c 3f 27 2c 20 27 63 | 68 61 72 2d 63 69 2d 6c |i<?', 'c|har-ci-l|
|00006190| 74 3f 27 2c 20 24 54 5f | 43 48 41 52 2c 20 27 26 |t?', $T_|CHAR, '&|
|000061a0| 63 69 43 76 61 6c 27 2c | 20 27 6c 74 27 29 3b 0a |ciCval',| 'lt');.|
|000061b0| 58 26 43 4d 50 5f 53 55 | 42 52 28 27 63 68 61 72 |X&CMP_SU|BR('char|
|000061c0| 2d 63 69 3e 3f 27 2c 20 | 27 63 68 61 72 2d 63 69 |-ci>?', |'char-ci|
|000061d0| 2d 67 74 3f 27 2c 20 24 | 54 5f 43 48 41 52 2c 20 |-gt?', $|T_CHAR, |
|000061e0| 27 26 63 69 43 76 61 6c | 27 2c 20 27 67 74 27 29 |'&ciCval|', 'gt')|
|000061f0| 3b 0a 58 26 43 4d 50 5f | 53 55 42 52 28 27 63 68 |;.X&CMP_|SUBR('ch|
|00006200| 61 72 2d 63 69 3c 3d 3f | 27 2c 20 27 63 68 61 72 |ar-ci<=?|', 'char|
|00006210| 2d 63 69 2d 6c 65 3f 27 | 2c 20 24 54 5f 43 48 41 |-ci-le?'|, $T_CHA|
|00006220| 52 2c 20 27 26 63 69 43 | 76 61 6c 27 2c 20 27 6c |R, '&ciC|val', 'l|
|00006230| 65 27 29 3b 0a 58 26 43 | 4d 50 5f 53 55 42 52 28 |e');.X&C|MP_SUBR(|
|00006240| 27 63 68 61 72 2d 63 69 | 3e 3d 3f 27 2c 20 27 63 |'char-ci|>=?', 'c|
|00006250| 68 61 72 2d 63 69 2d 67 | 65 3f 27 2c 20 24 54 5f |har-ci-g|e?', $T_|
|00006260| 43 48 41 52 2c 20 27 26 | 63 69 43 76 61 6c 27 2c |CHAR, '&|ciCval',|
|00006270| 20 27 67 65 27 29 3b 0a | 58 0a 58 26 53 55 42 52 | 'ge');.|X.X&SUBR|
|00006280| 31 28 27 63 68 61 72 2d | 61 6c 70 68 61 62 65 74 |1('char-|alphabet|
|00006290| 69 63 3f 27 2c 20 24 54 | 5f 43 48 41 52 29 3b 0a |ic?', $T|_CHAR);.|
|000062a0| 58 73 75 62 20 63 68 61 | 72 5f 61 6c 70 68 61 62 |Xsub cha|r_alphab|
|000062b0| 65 74 69 63 50 20 7b 0a | 58 09 26 43 76 61 6c 28 |eticP {.|X.&Cval(|
|000062c0| 40 5f 5b 30 5d 29 20 3d | 7e 20 2f 5b 61 2d 7a 41 |@_[0]) =|~ /[a-zA|
|000062d0| 2d 5a 5d 2f 20 3f 20 24 | 54 52 55 45 20 3a 20 24 |-Z]/ ? $|TRUE : $|
|000062e0| 46 41 4c 53 45 3b 0a 58 | 7d 0a 58 0a 58 26 53 55 |FALSE;.X|}.X.X&SU|
|000062f0| 42 52 31 28 27 63 68 61 | 72 2d 6e 75 6d 65 72 69 |BR1('cha|r-numeri|
|00006300| 63 3f 27 2c 20 24 54 5f | 43 48 41 52 29 3b 0a 58 |c?', $T_|CHAR);.X|
|00006310| 73 75 62 20 63 68 61 72 | 5f 6e 75 6d 65 72 69 63 |sub char|_numeric|
|00006320| 50 20 7b 0a 58 09 26 43 | 76 61 6c 28 40 5f 5b 30 |P {.X.&C|val(@_[0|
|00006330| 5d 29 20 3d 7e 20 2f 5b | 30 2d 39 5d 2f 20 3f 20 |]) =~ /[|0-9]/ ? |
|00006340| 24 54 52 55 45 20 3a 20 | 24 46 41 4c 53 45 3b 0a |$TRUE : |$FALSE;.|
|00006350| 58 7d 0a 58 0a 58 26 53 | 55 42 52 31 28 27 63 68 |X}.X.X&S|UBR1('ch|
|00006360| 61 72 2d 77 68 69 74 65 | 73 70 61 63 65 3f 27 2c |ar-white|space?',|
|00006370| 20 24 54 5f 43 48 41 52 | 29 3b 0a 58 73 75 62 20 | $T_CHAR|);.Xsub |
|00006380| 63 68 61 72 5f 77 68 69 | 74 65 73 70 61 63 65 50 |char_whi|tespaceP|
|00006390| 20 7b 0a 58 09 26 43 76 | 61 6c 28 40 5f 5b 30 5d | {.X.&Cv|al(@_[0]|
|000063a0| 29 20 3d 7e 20 2f 5c 73 | 2f 20 3f 20 24 54 52 55 |) =~ /\s|/ ? $TRU|
|000063b0| 45 20 3a 20 24 46 41 4c | 53 45 3b 0a 58 7d 0a 58 |E : $FAL|SE;.X}.X|
|000063c0| 0a 58 26 53 55 42 52 31 | 28 27 63 68 61 72 2d 75 |.X&SUBR1|('char-u|
|000063d0| 70 70 65 72 2d 63 61 73 | 65 3f 27 2c 20 24 54 5f |pper-cas|e?', $T_|
|000063e0| 43 48 41 52 29 3b 0a 58 | 73 75 62 20 63 68 61 72 |CHAR);.X|sub char|
|000063f0| 5f 75 70 70 65 72 5f 63 | 61 73 65 50 20 7b 0a 58 |_upper_c|aseP {.X|
+--------+-------------------------+-------------------------+--------+--------+
Only 25.0 KB of data is shown above.