[e-cvs] cvs commit: e/src/jsrc/org/erights/e/meta/java/net URLSugar.java

markm@eros.cs.jhu.edu markm@eros.cs.jhu.edu
Sun, 12 Aug 2001 21:47:03 -0400


markm       01/08/12 21:47:03

  Modified:    src/esrc/scripts eBrowser.e updoc.e
               src/jsrc/net/captp/jcomm LookupHandler.java
                        RemoteVowHandler.java
               src/jsrc/net/captp/tables ExportsTable.java
               src/jsrc/org/erights/e/elang/interp InteractiveInterp.java
                        Interp.java Interpreter.java
               src/jsrc/org/erights/e/elib/prim ScriptMaker.java
               src/jsrc/org/erights/e/elib/ref WhenResolvedReactor.java
               src/jsrc/org/erights/e/elib/tables Equalizer.java
               src/jsrc/org/erights/e/meta/java/io FileSugar.java
               src/jsrc/org/erights/e/meta/java/math
                        BigIntegerMakerSugar.java
               src/jsrc/org/erights/e/meta/java/net URLSugar.java
  Added:       src/csrc/setup updoc-hash-cache.txt
               src/jsrc/org/erights/e/meta/java/io InputStreamSugar.java
  Log:
  Fixed message ordering bug in WhenResolvedReactor
  sameHash horizon expanded (thanks Dean)
  Updoc now caches hashes of pages without test cases

Revision  Changes    Path
1.1                  e/src/csrc/setup/updoc-hash-cache.txt

Index: updoc-hash-cache.txt
===================================================================
093aH1hlYTB=AvbwdM9OKK4vRnWy
HMwAALgNZQmadORixb=K=yy4g10
BrImd7BTKKA5_OL_8CJDQ2cLvLi
5vMjtdiN5OoRAn_lnYiGnDmOaUW
A5n3RMmQBMc3lMX0q3QN=druczW
14eFAsxrFtqgz5zQqJ0Mzv8Wtv4
TrDhdxQ0inrIXdHWBcrg1XCVqVO
0Fhrz_FOmwoZJm9IvOcykt3Ejt=U
09FI6pnC2LD1B6aU=q5Hh36G79Xq
0AabxqsRbdXKutoYc6=XmimrE9=_
0D1CpdZI6Ysj6=8eISlI4SdgX=xu
0AwLZuIrCOwUByo2yiO9AHh7rRFG
0DjmA1NSHzLwJVkkV8QsGWWhup5k
0AjQ3337Rn8985S1v6MzeusZDCBi
0FJiosJyoSNcVkLyVelvrg2C4ja=
0EMYDINmM71fhMlO4jme7KYgPusA
HFZpe3L2sKIGmCS_zccfBMSL7ly
0956nN8WKAmk=d9KOvYmM6ylWbwU
DHS8MZlxzWFXgbnZYrBdGEo6tQ8
6KthaLMHbVPuvBtw1wLbRhIEndC
0Du6Pzbh_tyJVLk6gcCyNX96uc3_
GHlVh90RWNwI5tSMnq3_pPYyRNG
Atl85AlokUsaNHmMDNrKrtqJrW4
0FZ11ug5uLK8imfT8UM6lGM1yK1_
08XwuVqGUzzOIXJwfvnHVYr=T8K5
HUcLUxeaadvWA4LtYdVfRdhy5m8
09JcuER5pwQE8Y92dpkih9RQOCSA
6vMhB3ig4AQIPQ_BxIup9JwN4Ei
4F973JY75J3ffkKRr6EC23PxxVK
0BDrf2Zhq5iMhE5hMH6qtmddoTvY
Sbg0VNi2RfXajsIRY8ToLzOpvZm
09PyfRzy58xqNC01=TtpBrgcXeta
McN4TnMlaC0yvNLPBQ2S7Wd16n0
0B2uZ7f_pDFUtmU3taTKlVZ_ZE1w
0BxOFqY=HJc6BEsZ8Ec_35GPrhhX
1=9vupIDLVdFOWshAo4U5kJUVEe
08JcY=sutLAJM4hWGeGZYPxyZxP3
VyNb_8_5227QkiDuiyYkpE9dNqy
Cnv89MLsoCc774m3GhzDLf6Pkju
Pe2rrvdFRy8Oe4TWi1q3ScX0QT0
0BDkrKmjqZ1eRR4oM2O597UKIsw8
0FmL_szeFNidzQMVadRV=E=GbcGR
0AuPIuC7K8RAHTxuasTPv2lb_pHf
9IZPowxrfsOSC8o86dM7jeYVuoG
0EFJtEU6ynelB9kWl0RVN2aKLdDf
6uBHr1Ke8uc1OA6lZgc5nye4Yu0
0CRTh2NjyOkE2=66Q19ivpPD1Pjv
0FE7Mg3gg8G8RKy8_N=iNjBIIPNY
OM4ZrdwMUHjwvOeTiWmig3ANv0
0DBYsHrDO5=wqSAf864AiFr7QDEW
QmSDmLneAVimrA=08q8BaOK6nCe
5n29WtLXXy=xpWrQE7PW6cxdIm8
A=IssUndBcvhYp3HCmTy8iN8dWW
2Ufs=0DwPbKuY=lsMRrlUf5s8d8
085o9JHixkU2JCwLGxE9TreIFX4s
0AEPz2OOpOKqCNzwC4qbLcK_=vJ0
0A=cJFIwQhEd3jYBTs=4m_GUXF7K
84npE1FiPoCyEbAV_wvKg=B8Iui
0AcucEgkl9Zp=luMLQmvjSgJ1fUc
0DeEuzV47MMbCASQrZ2WFiTIm6pw
0CFQWbpSyYNspPXVUT24uzFeZlHQ
3zSdM0nvxz9xwrbYbDUNdkknvL8
0DUQzHZXU6rwS6ArlHh7L_pcLzhR
089QffOIvD0iBtgXbPkM=aZUZM6T
QFq4pfeqiujiX7qOPCjI6kNdTlG
0DqBIisalWcm=yvcDwWnJ1LvgrbM
0EfewjcfkbiqLNRniJUaGtXDWqLQ
0Bapqsm2A=85sBTPnfYrF4G1m9wv
22fHkFT6KpfhtwJIb4dWuFqCHeq
0AIXAhP4nwxMSZassiGUmIjYaM5c
09zviJwI1TfLlt_uQ4jqyX19u0Mm
M2Ytv13NOY2SFhlQRXB=cRc=0k4
0B8JWpRPElq4sotdDpaGE7e0vDOy
8PeYor=tyM7kKGBw3EBY193s=uy
1yuAKBGf_h7r4uz2ymdv6v6frgu
0DCs0oHodZfU4XVtPrB2npTSyosk
0FVkEEnfdIWrLCpkOOyNi_1CYSQz
08d0CgzYShJ=2PMY2s6Jza2k27YR
PHPog9v_ISvlWQsrqnMRaYUsuzy
BfvqVQCjI2nduPlRKIvPidDdysy
RQ7jwbpTctVnbxM9bIGoTph1oEG
O56I9=vqSAGxKRLpvwJs_5ZXFgG
QG6wjccyxjrIiDqmZJiXI=PlyeC
0C2_OMNI6WiIJyAchdANcLFLsEWX
Uss0jPZGiKkQinPzwX7JZFqEnue
3XUmfQsY1IJ9NM13dS2gR3YRDhi
0FObjqb5dQrUg=TzIWlsm31KdMnA
AkjODwDgXZgo1OngvNVo=55r5ee
09oVixomNyRkmCxaD9mNagO9pP1p
LrRn3A_UeFBMkWRLpqxo_7uSm94
3k7xENWCgfSReGiEHjc25nQQEcO
86OH4XRQWV7NY89S_WN=klbBne8
Gc0X74zqU7US=sSx4K1iOkAK=Iy
0AGBa9wcIyaF9I4nkVR83vrZW4Te
0BXG=BCbII_BYFzm3dIPBZ6kUQp5
IGnzmb2mZ3ntdV3Ol1m2w3SoXjS
0CdLDGcA6bBAKAZ7xmTP4kxkDZ7R
09cLUNYk7oXJJC8o2tTnU2t4qdu6
QnVBHYpLhs6a050y31Wnty1UaQy
9EVa4_DcjQ4xA93iQ0oxkHODQDu
0Aa2hgOVn2_Q9JL=Mo5a3tP2SKr0
09reygyWCS=Uu5dNGmSGlgjT41FL
A0MsbrJJ0vpWL3C5q4zt7lSvto8
0F7HJUTZXJ4rrFBYnbN2y5V=80zx
0D4aq4Zo8=eMQDgY9y9XBt5ta1MT
0AFsoFXItxEBIuyTNSo6eS0cWKCl
0DSOMP8=hy3toC989jUtwYKunhxY
0EP5JAKEnSLXd0nsmUD2ueZoc3io
08edPgikhOAKoav_xIgLZV9R53lm
08G8iwsPAmilXnKh4cVioZWq=ip4
HmC2Vkh26QBGcPTiIK1qx=TzmUG
LXlnSDZlv9DL2B9mQU6jJrXGz30
C6HjiS7fBOHi7Fc4UUU1wORMPa0
096WlYupRF3EP4LoCubtJQdQOzSM
Tp0Vz7gWbG6sWkov8wo2oRMIuz8
09McI=M3lb8EDnirUSaipo=6KqeS
0DQT3zudh7eQuap6s6CNNzKHDUlk
09FHVUK8HUF0meMfqZMkBQrH0zr5
08Soc6EmJuyXy0iHlEeuev7wXlqP
RtF71azKW79B=3V71YesNhr0FPO
0DAGVBI9bvyxdcx1wnMXIvH=XA43
FlaysyG4lrxbBmfCizouDApI7Aa
0AbXOUbElPuq84fU2Eo50BYupleZ
2ryXy==fTB4G8HQ6VO0eVq5AQRK
0FBmxMm30txeuoC7_irPhI_UUNpy
0FnK=n1kSjBeo4Movz1XSXA4T6dy
7rL1AO_H7HpjdZ5rGBX4ehsyxIa
09O5pFQbx7Zdk6=oifwq3l2yiqvI
08KhMqDdPOOSrnra0OOLrCHwxrhP
0FOecII1lNdWMGDo=S=pEAnLtCff
08fJ=eouCfpp1WhX3thjvZ81EhRb
5hxMHxrulLAVmbT3BFNTCCcnnFm
0ESR8wjN44UFnNua5QrioitRt=WQ
RjiTH6W=lFhTgAMrBVEhoufxyIi
0Alu7Sviqqqn5x9q=w1tFG_8ATX6
8WDod1SqhhOKW27yNyvkEe0VNH4
0EYSAEnk6xm64cadVQJT6iqSQ9RG
0FH38ehTNKaTbZI3VzgUUVT543cW
0FuZ5NATyp11kG8vOYLpxNPN02RA
0AHtCgkuY1Za8u3zh2l=V_Cy7JMN
0Bu2I83KjOHG4N80imRyXF1upxjP
4QPN4AcT281EMh2RID6AMExDWlC
1VXR8er3L7evx8U6r87cQKjlwiu
DowsCpZBene8G2PKWIb9PPnHQ_G
0D8t=rmSSa5RY7S84p8q57dmmaK3
9LOV3TeUOBS=M=NcrrOf6Jppj48
CVM85IhUJoWuGqYeGEHMw2dATtu
3zFARWNJorxm39AaSbRN=hRMiVO
CGTGJmR1qhVVv81OSTEUOgn9bDO
TIywUAs5Ek_p1r84OB5twt0paF4
4c1P2A2kD3XUnb7wjD1jIHWsuRG
RAHsfr310s4WkwtEf0KoGnynYG8
09Ty1RWWqeZYJ=eo4Gd8qFcOzNU3
0E1dgjR3TXhzdfiwtBGNbKM1U8tm
0Deve=vUQqiDCbM_xvLW692ls0S9
0EdPBdVsQPqHWVhUSW=NvTb8okZa
0Ff1xCf_u9poHbu9RrkX=Bpdboi9
0FSNPmwKWemy1yIuq06Cr64T3Jcw
0BiJ7N5kYrSozCl1JZnDJMh6aCZt
Ek5d7d45o6Up==uEyJQ6H7m5CgK
LOHvMnVldJooaZ2seS06NUukwWm
0EizP1ifVw_wLiFLLirEXFEvXYaf
08=pxRw3Ja5yutsMF4lzQdNWVZSo
0Ei2mSyRr9t3I2JWVuTLEFORZE11
08d89NlPg3N5vys3H948b7KGClEm
09YGuPbaZH3JNCrjIs_hmhsE2ijI
D=q7a6IgmI2LA9QarroudJCZHEi
UuTAWm23T08AH5AUW6Opm=X1U5e
Uvi7Tc6bg5SPK2bORUvkrI=8TBO
1naJ3SEqNh_Vslh0ZT2goqAQnXW
NLCvvjnhIK13_H3h30POy2N2RvO
0EqdYJGIc96faYaG6G8bIy0bhzVX
ReO2fyaqABCMIUTThW4_t9CT6MK
H_4JDWvG_SiA6bsUmweKGYtIaWa
0836x5RClmOWu8keSCJ=JJqt31YR
09=r0RoaijXyTIQ0q7GtBsBXosGS
08ESNxuwrx7yPadt1zBxYG=AzfLG
QB0gLQGQ4OYsBAY_2pqBiffmbhu
0DvtyVVTqjw2l3Jrf26FURtB3iJK
KIRAR0G9BXuTVWlR7HKIF_e_EiS
EBkpQVDO8FOlcN68ZK2hJ0XrC3e
0Ft1D6Yn=hHoEzI0DJ=w1oh8Z=w7
HhLIfu36m1d_9HswTwWDlgsKzAO
0B5g2_vgvuGtYQIpH1z7lOcRy9BG
3eHp6EP_ytO1DI4Fj7mnxHmPNpm
09VbeU7EAgvNut1yJpCo0K1s=iDT
0EKhGk69d8mYcn9fkMT47V3s25yf
0BAWqWbZzwOpBulz0HUzI7RmFgMN
0DfQS96P50gzrtiomsaA8MH6piez
VGBYLyHlZlaVwJCgzZhxasxBAAG
Ja2vdpmsA5t7AzQD_efvKxavCrW
0BEQciskGw1cfrw2G98=v7LTIurU
0Bs86FzyMypBO6Q=9Buqvf3LqUPL
0A2_Ugtu0mEs6rSpyQUERHLv9SYw
KaNlDJ0T_ZAVHocpfu0CW=WsCJK
LCNydPviokJ4HMnjjofUN89IsYu
08cmWER3sIctFDXR5BesOM=y3bBY
73jJVNVsvCw_2o1_D53ijHBzcyO
CsT2qgk0R=gR=08lh_9vl5tCqpu
LjxO=cf0K4PfuncN8aUU2ppchty
0E9fAIvh1=OU=rx6fUa0MxoB0_dR
0ASWL1IU9PHdERQxB5x=_kVdAUBu
0BqDR6yn0GnSUVw7ScxNSXqzBNjD
08Nylb0k2ArEfTOsdhRr6l9eonmR
Dzds9VBG5ojchtoP=L3i63SfCB0
FOr=m7dsx9=0Wy4qS3PUQ7wlWXu
0DAQzDGdeb1dZm2PSCuQy8Dc0CSo
09as=icFMWdTVUpYUremKTfKihae
0AS7dixR5W67LfJoebDbrP8TigIo
1E5o_=NsagCOEPCtgkK6l5Rk1C0
3wD4UhIbcDJjcGuYPBP5_8=okJq
SRD4h7TAbhqNNvMqZ58eqPo2Nsq
6R_9un2S_znlCYQAu2c3Rc__K0K
RLgz7wKLriyrHKb_GEDVK7hqQpe
HkXUavSyCC2yghONYg2dU0dg05q
0USZ06LPzxxLpQht03=9F3FH2vC
2Zy_x_6BT1SmtqxuDFbSIVDjdF0
LQsv_MbaQjeOBkRQ7DjCew654sO
PTKvu9KP7ptZ2hwD5IquRsmCS4K
1ZX_Sinj6Wb=Ynq6KLuA7TNVs2G
09HREBG6jAzug_SYP0Xg55Yrl8nt
QFu6CJkaAAYaE34kJM5ISjvckau
0B3c5k7O405QJKXESqVLY1EcfkJD
JGoaiuitseY77eABpT91purkaeC
L5GhvHJJhHRG_UvxNaEOiHeO1G8
DOs5Vcr3KdTP03vyxVj0Szgwnju
LcybU2EBWS=KgcVixpBVDshNFqm
0FYfvEnK3FYa3A31l0DpX91B4vCP
5=I5MsFfikcAgvynZeBUoNIb0=0
E_ErSE=N=K_r6a18rooTGqam6pq
0A=vw9E2_VySoxXWL2puFrgx7HSV
0EE70YyP6jir4ynQFq3GCErAeGtu
0CIPmKpzt_nW5FbP1N75XzN1k_e1
0955fY_IIXN9l=BGlW4HPuQJKbb7
MH66hlMcncYSktIJTXlvoFUnd7W
HEBKXSCTpURAuE=WvoXBmEiZC5C
7291UbnNWdv9vDqRuMOk032JY00
0C5kJEwMxq0zMsqFTl_tqRJRPxVl
09olIuApUiHtjnmR4NHQDneVn3P5
093KcAER6zM2Q8BgIqWJYiAlxO54
9BQLJW901tBM023igXC=QklL6Uy
0FmJ_pJyoAFgbXhF2u=2a7o50nnW
0AuFI0XZ7lHyzBwrlB7S9rdR_t0x
4rxzHN4ar4C95MYlmeK4dswhLFu
QeeKXJLtvrWJJ_AguMG=_Wjemuq
DesMSi7KdpolYVvEVBMayuJpit0
09mRf4x9eddILZw_cUjA9G03MpND
UQjSwDjvhl7MSlpzCKdYfMXCgYq
08vQYyIR1Fwnn0XTSPbZockOk2jg
TZNQq4rDbcex83T_L4CPFzhgJZW
6IWi8EbVsGr36fyJu0bhjdVf1Xu
08eIFlaoFu8Bg2bZuyW7TkOrs2L1
MXaljtzsejRnVMBT3AzwjXWblmy
VAPS9c7=ew5b578U3qlc5VtdRFy
0BV0ywAci6xRR3ODa02cffZ3J=DZ
T2kzFK=2wE2u0GebL1xYSsHJRHG
0DhjfXch0ucfBPo4VXWl=dhgNenj
09xxZq2XyZKf0SVbtlHYfxV2fAee
OLBbxDVfgBgSvLiZ1rQKlaEiAhi
0FLnsp95g2WjZD3wiFeES5qGrua4
0EnaA4h3inYoP_gUTWajNOCCkzoD
8m=G9Rbcq7wjfvWWL8sABQV8ZYC
0C7Qm8xPWIz9IdCoaOsf1=CcXaz=
Fj05Hw0z8hxj0O4hXnth11=Uyym
9hCtC89gsJxgiSSectb10Yj3O5S
0DUdITIDHyhgYqxZqe4vPK2Y_wGO
SGeWdnAb_j_UVPOiBgyDZqnFmy4
DCXJQMQAziLRDefylncRLNpQZVC
CKB6LPMeDYbmrszo_SxQ13gbDZa
08K5NTQNCrn8lvqk9e7j4dTCyIAV
A5f5QAGsCJnCCmztjVEE2gw5VbK
09ChfKe4Ss0q3u5odu0YpUehN5QA
P=poBdQTb=YHm5kWBsFJfMSBC2W
09LwZH96mvzTZ1fF1ZKiBjPBqyQM
08hq0ksCZx7MBSb3YxMDqAHMKNu2
0DN6iQpilZeKoTxsi4hadd3c=KOi
AvT4xohIoTgdQwSEBOi7hNM5450
EyxCe4RHj3NmpNnfjHQdvvOEgPG
0EZCNoytjKM7yc7_WxJ7EqAkwZhU
0CIEPlA9BEva54NvJ7maCqjGETBS
0997N6sM92prvfGPHv4fwOKTnHhW
4NqA9YfLJ3ShpYqV3Y1egpSkDGS
E=C_I5DKgUsnPDT5UDv01OFTF5C
0DJQsT6wrpYnh=aTIrJc5TlxhIrP
I6T1DIYhKjRQjertzC08qXFcuWu
V01qIeL3eYbFAQc68Ig3meUqniC
FsI0oLbNYfi3iBPfmkQ3q6MuHGW
0AtoeLVU6guNlAUOHuNBYOht13Gu
0L5ZwM5qAZKDvOpInhWNOxRkeoy
0CrhywBpitei_IKtgilm_s0zzhNA
0CgF_3=ZHNu90_SwiH37usnzd6QD
08CWBUH=EULzF470yXwRFpp3V8xf
1gDdtQjTuQbRB1J0ghIRpBsugJK
8_Q4dIaIBR2O2gfWv_G3ZdXDgry
QBURmct3JyGA1hMWTf6Uzdial6G
Cz0k76hKKnDbvfSmwW943UpNtum
0C5oDzleExDP0ccE=DwKJ8u8BARh
0ASvdx0mTOyNUUPbmDtNpiOnuOv7
FdlbttmvjnP=lazj=fDvaQJ9vWu
47zrG4oPlP0vRqWNA2PVEJoysxm
09KigvRMilVsuR9Z7wfkrJU5HvlB
0A6=HbbfzpQ=C6Mc6NfrXSO7WyjF
0CpQQCQ78vc76z=HL3vBNPajHeLn
On6D3zaIHoFoV=tdzmaoF8vn7HG
G4YWnSq7JE7MV_Ihz0EIfJzCcTK
5KPA4Af5PjwJKWoAQkJ81ESkhV8
08zySz8HJPcGH3=B8iCoD1Pxao6A
0COtBWfsr2Q9QeF0JLt4VPBi150Y
R1FB=9eYrtvgQPkqkmCyYKkh_dq
0Eve=pDyYhbYM6_Nyk5vvwrudgSU
08dGt77MDQpuKazpq6twejso_8sK
08PST4N6TcHzHShmiWxu4TBldOqO
GkEEfehGd0WXc9zBPvZczfs4hCG
0FGkYnAXKe6Vw7s6fyiM2bSF7MRN
Qest7hXoPYoc8Oq4kr4N_FMl8j4
08mUwHHegmADR6SYuF5G6cBHmqxB
E=HHZnVIKvDl1_f4kbR2SzFHXhC
T7GMHGbf9pnijFSfj09T4005fue
Rer7EEwvVuk7Cwfs363NJuUaMWC
0DaoqD=jkzgXKC6S2yGuyI8lQWEN
5w=TaacS_LDBOXtpn=aeIy9MzYG
0Eru=5dGOsX3LCo5bzeJPomDKjgB
0AVFsSYsmnd22zk7fVO1hOvlkbcA
0EuCzEi2d2JmVWk9SiymtYKD9g_f
Mhw=9=myQLuXyg6DSs1vssS=hSy
09JjaxtHakNndN_ebTbS9ATFdmYu
0AgJeNtHP65T5mLpXuIs9w=YibJv
0AgkLDDgofuuN19ICdTc2qIgOo0j
0CsD8qWXyg05RyHLeMi0Ergpr0n9
2LdUL0n6IbpOSpjjhPom9fO4GGa
HesSHH6YJBnRJlvyHK5euu5DT=8
VTQVrZh63hOgZ0H05JHWYwi4vme
99rF6p1eBWo34DLAoDRsJV6A3ke
0BDxUcR2M=jHI6n8_i8I1bfqEkdP
GDAXGwdAyVOQAvkbZuQ0r0UoT=e
TPzMD=CpuYASoK_F=KsV7IdjXcC
0Fuwl=dvJSiKaC6r3xYPeiSd8d1W
0B9PnuVbkcXLrbvUhNmqrYdmKL2D
0DRQUIUJ071ue_rPvx1V=5AeUpCh
BDRaxbF2SMIJ8DPxmo=WW6Wa63C
0Eu=I80A8hM5fuG9W8gfoQGs_Rln
BSbdL1dMsUo_QP1L6zdxUqCnO9a
0CdiN49UHtIQW1dAzBPybcq1114n
Dknjf8Ecw__4nPumcRKDq=_PSXO
F=jZTU8pGpM7rMTm0qYdPXyItYi
3x0UUlMjUr4RqAve==zN7MOfCQW
6u5kQ1IOWae=0mOjSzqkJvyYY10
08kmkQTcjx=3jK8SLRYcf04RtEyx
4ISg_ISUXlW6ndIDqgqJlKiFzC4
5rWiDGhJmV_ryfQhreCMXLgEWGO
HBRsj5X3e9L17xkE_3FHQb1x_Q4
0FpI89ATq2FNGOF4LOilh2hyS_SU
0F2A229ADh3UqVU4KX512D5Ynjfc
CPRe64wCLRjwfJOE8KEo_IsLb5a
08ntn1qWx178_q5wFMBLcBYTdH0P
8PdmuXN2GCWr6ewEY5RT2Bqpan4
Drk3fjn32nnBdL7MV7e1XM3ao1W
091lE4skiBxX6Jp8F4TvzVWYX5X7
SSobB7p8Fekb9SEa0kl9aod_fRK
0EVSQjRh7EC5Lh5TGtNIvDCp0vDC
HY2INCfIqcyB2gpS9jqR6R_h2U4
6EiJ1cWKMwCTqjOX5unf9r9Bsga
5BMSHnUmawY0MyRCqNEI8ilT954
0Ek3odvAYH2=gwQAbv3CxvjH6t=V
5qQUcaY05rFE49jzUSIGfno8AkC
NjscdRtojyqzzNO5YWOp_ghmHKK
GVp4RKPBmeFyDdi=fBE2ikBpyz4
CHDih7ZIUXiD0FnlviRk9ivhohG
0EcpIKNaH0xMS8KT6kj3RM3ivfza
628XDukJB3NcBWs=l_3BCVWfSiK
0BeIUjl8lfJz2CfJhmDgTXsY064Q
09ZtRkQjURur86_zp6hdyalPiyqZ
0Ay2aaCoVTqefPBysVHFvL9iA4cZ
DIh0elAoMpQayLc_TD8_AF9dqIa
0A59V_F2TlxWUVz=c=swseAMK3Z6
QKvPJ3fL2hZTYphZHUek==GF0Ym
FMGQ90taiQjIC_El8L0IA_HpKs4
09ijDRjOstDF5cBnkBtYwE4QOUp8
0EO_2hmnvSgf7Rm5JCmCJfYR4AW5
RIaOfI5PYq2hwOdOUlBem=1i3mC
F0NqQourk2RwRw5tM83IqnD2yx0
BcRs57T8chcYxi0epym5yroUI1O
0AQQmbMGXlzZAOxbpca9ScgsI2D2
LEPkKN3tMW0U_15NhcWSzjcuLAi
08Nx3iXainE3ej4qJ5vot8eAnUzL
7EIR1bZzrOmd6zS90bWjbsvkK4W
0BhiQKztaXsJzbPf9vM29=9SmdFJ
8uGhEbAYded=vXfy86fK_0gBsUm
E8joKZ60ni2Gtf1hdJPs8=gtxUS
A5CthWupDZx35Spa5MLS73x=c=8
0AUlUdHYwQnbIodXICB6E2HTAhM5
0AHp0ltcWlTQUWJsc5Mm1Og6qHtT
09z2q8mvltu==aSiyIjzTDsBcF5e
0BX1hjP1SaNiDJ5jPJHXc87vob80
2mEHGiwUxtVtsKqrcKJNB7X8T=4
09e2WxgOsfWDYPKVUqhvImh1T35P
H1am7afiFWdWVFLkcO1jvbv0i9e
0F4N06iep4jkrUNRGtqGg8FthGyr
099XScS3lmQXANqaswCcT7FtVG_I
9sFfaYzQQfN9IMsgL1sT=g6XNDS
AhsAwMFsxHHzFhRUJiTeRPalJk8
VM1k8c6XXmcswpdlBeNtR72lv30
6HBhv2101oZuAkBJSjhJy8EinLy
0AbxJuGLUB6LCPuoSqt3LTLNPksH
EOQOnJjDZ7wPGuACwdaXlCaWQdG
08ZvByLUmsPX3_CC7qyJQjTurbpu
Pk_16XSInEAwRt_P8W0fGcZY8CC
JyjinDei2Zpr_7Xdf6PeTAsjZFO
0TuC_KHcRK3mSa==DvVMZCZvh7S
1BOaWT6eQi7ZtueT9kiGEFmwC7y
1VLqf5YlBvL=5VpXM5abSOFvjFW
088TAfon2KGVA_cUFFIoCLOLMiMr
6I1z2prBU7Uq4ZAnsiCGBTrSLmi
5=E8IFF7tw4LAn19X7YlLI8Uj9a
0C9pD8cTUAVu6ZZdg1U0q5cpt8XX
0Bq3i_64a402jtZies8GrXGLUTYP
58eLe_3eWyMj9Bcy4_O5y3SwaGi
Hk89gNotdJ2WU2xsGullTOgNAKK
BhIkdyWyE38FpKXYZrJIC47Leq8
0EicqHjBJGJghE5KNCZvmuZy2Mmu
08jI4Ul4t9lGWGH_WhbncD1xblYF
0FcIeqNca8Mf5_dJnJHINIFVlnJ6
Cilyl0PNX_djdiCX8xsst36_18C
0CG_gVCISdUFTZpcb1H6L_zM27e6
JSwsNgJjnzsKdkTvSCfffE3dBPO
BYB63CJah43SdX59sgP67M5jpb0
MihihBGkvYZs6XB3dThN4U6hl3G
6VSycLeKnzdsBoSOtHTCN0xBcIS
Nm4aIgV7r9EQIOQTYf2SQAvfiNK
JixHJl=LCYnRlj0nknm4Zdi2voW
RgzV08P6yFQg02wH3hJmWx4b0EK
ToMQRThhOa_bnbOUOUueZQUIBO0
08WNKCo6QGpgWflFdztGA1U8fJAv
Sq_kMmk9JChc_087gIb1iMivesC
08AkhiSwi816MvlBm6sCMgAzTWHA
OmsGP396vt3I2uYunpNEJDL9dQK
0Fvkbtf7fhHcGTRD8nOs_uwr84bu
0DhkwyDUo96gFxT435zqv9Jf62YI
HjgloNZz4mpLsk2WbZ4wFgaAbSi
0AwcuQNzdD7yPwc4OXKhd5viSCJf
9DGupvQgetdaWSy2XlE_bZ__Gxu
U=8=THkb8YmYF9XSKLKcl38daNa
Owb2EjFmUTkmzqnWnKBFSVTfIia
0Fjf4IYo_ffsM3RzuVwjRXBljn9_
0Cq7gc=Zr1DUA66QQ7L1HVxp57cy
44aGFizFKGQmlU4KkEuqhYxvIaW
UC9G7Tq5ESg2WTqBmQmRkYLhmqi
0EQJ86HJ0aC9hN5CLoP5nqYxzH18
0FPKIMGCgC7lXofXfKHKKed0gVs1
GIZXT8ZDoidTQDbbjsSMqGrlriS
PtXmVDdLlO1okxLYZQK4k8WtD1u
08xF7cHdYHLbonRgQ=IJkGNjyHmC
0CAORRje97PuNeHmgm3XAu3EiPeT
08J=xzBKxRshpplXM0f5hpENEGr1
0D99RS6KoA0HsHhOBMw1yVuZaduh
18QsRtRyU1D5CBMGSuy0nRKkSCC
0B1h3FJWOyfCj6vpkvUtTwf0OGCo
0DkzOKTtmPH62lgIqopZtI3YwE9W
P1iQ2wTkuOkivk=SRjKEU_Yruz0
08unPYQWvouSICnIYILhuzBZDgVp
0EG7fgAtZOPP6h7YxolYkucZlh2t
09ztX=86lKr_I31LlShe1rOiaXqb
0813iInMNTw_j3Cz9R0W972GghaA
QwWICI8Z3Lpvf5NXyQHbVzSNuYe
4_XYHGCmGMhqhNnwPNuTTNMSAY4
5Dhugw1pa50eHAL7HsukNbX3Baq
09xIQ60xBBikWD0=WuqyUnnuYBZU
KgoxO782nJPh0dv1GmeNhkgcI9G
SaFUIXBw=8Xs09JU7VbS66bq3Fa
HySCjT0Sui6UOm__VtAX1puW9_m
0Eu_ebCo2tOTzWavlejAsFlh2DR=
09uj4YYFDyVDzT16sBDy17HbE0tw
0AclVh2APHkaMXu7XkrpdiyMtP4H
Rm0Q1CgIW54fZwV=GzfhaYRC=ta
2QrzejJ7wFhdz7uXygThj=fJFfu
0Ad_hEmJ5siHPfYtFZHUv_gN=uAK
0A4fQF9aHK=OUkJICWgwW7nUnvcf
0FXt=rN=DE5MRICjPRkApOUMQadM
0BYZGWvPd9Q4gP0uIMHnLeJ4e=VG
CqP6MYjMo0PZ0uzJhg4mH=Ix4G0
DscH6cPyYzSw=wGmynuQIhG3jDm
8cVPAUNEsC2Fpxb7cYAMc0lboIW
0CDsFhhk3a5eodi5=4VnNPGGVuma
F7fZxf1v3KgN0R9EYbQHIBz6oeW
0FttzkQAYAOqYAUDiA4y0gHVyCv=
53_cUCo4vC3R04FZxOYQuNefwnK
KIOla39rPQt_R3K=BCqdzIRTsxe
6g487I4qO2WdAnGTgfh2VJf86Je
0DWXM_JSLp_LfBzPQJiBDkJOElt2
0FN3TgtkQnycTRIVVcPMt0N0ViOA
08pfS4anV8w4lbgCTbwf_tL4XpoV
0CAJYGpNsT6dseyTLMzwRuzcl2Gu
0By54SBvs2PyCKQX94bBxZvBtyag
K7ocrvf2kfofctoKUNCNEkBqEFS
099vaxQ0qQVHcYftSp15Fdx1iHzl
MyyI5NMlUZhc1QnqMqGTMOh_Rye
0CD2I9V1_YKL5yyJDCafvH4KCwRZ
IuikShM_TEQULpE0nEKzw_asK_K
9KlSFETMv9hwcK5QLvjwUrqz4r4
0BfSUo9ToyNRCs2LdWrnKAcCtPIz
0DtKwiicc02F45E5g9xogUs6Mgt_
0EVN593fPEjkbm4n9TlkDULdm5C
3m1pIkcnkSzWGlb46oXNe=IPROa
0cKNT6GqTj9s0=nwzpIaVTBjDPu
VF_6uNvnyUQK8DeFaHF2N1YcqaK
0AnH9GnFbnCTgViW4VlyIUhvrCKj
0EqXbkds0gaAuqCTKrku5WNtR9Xb
0A89WSUMxSfEWZ=XuHNAFeGp7l0n
PpGmjND_N1yETz8mOnfYIccnYVq
09dVncNo_w5qyJ25tgSI21YspDLO
0AKW0Bn0pSFU9dB9jSuaTMm9XRK5
0DweMl8Wr2cepPIx7r3NcVlyc3hi
0FdcgcCcoFxs045bV=5EjgVkaGF1
0FU3BKI5NBYm_PVBrPxDPn0bLxl2
CesvRZ7iLq_2Zv_geNaj3cXf5k0
08GceQGbPo=VVOgz0Pp7f88r9RZL
0A8NPR2CIu3Okq=cIulIUhMFiRre
0ALQ=jVY9KrrqnphqykbvfBItv=Y
N3dlaziX=927mzCiRehlBQyFy_0
V4WNJvHxuped0LQyeppAXR7t1_8
IBHJqI3fD=7Kx9J23xl7VVAUhh0
0AwepM0fN5EOCGmlCdYr_lcaE3p=
0BWoXq9clZeO3xz5Vi5=V3ZRMSit
0FZp=ytF_WX4WcBaUshR863_TnQ5



1.29      +3 -1      e/src/esrc/scripts/eBrowser.e

Index: eBrowser.e
===================================================================
RCS file: /cvs/e/src/esrc/scripts/eBrowser.e,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- eBrowser.e	2001/08/08 05:39:17	1.28
+++ eBrowser.e	2001/08/13 01:47:02	1.29
@@ -369,7 +369,9 @@
                     traceln("floating syntax exception")
                 }
             } else {
-                resultPane append("\n# problem: " + problem)
+                resultPane append("\n# problem: " + problem + "\n\n" + 
+                                  problem eStack() + "\n\n" + 
+                                  problem javaStack())
             }
             traceln("problem shown")
         }



1.9       +85 -46    e/src/esrc/scripts/updoc.e

Index: updoc.e
===================================================================
RCS file: /cvs/e/src/esrc/scripts/updoc.e,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- updoc.e	2001/07/24 11:52:15	1.8
+++ updoc.e	2001/08/13 01:47:02	1.9
@@ -9,6 +9,7 @@
 def SyntaxException :=
     <unsafe:org.erights.e.elang.syntax.SyntaxException> asType()
 def html2txt := <import:org.erights.e.tools.html.html2txt>
+def integerMaker := <import:java.math.BigInteger>
 
 # Prints an output record
 
@@ -181,6 +182,8 @@
                 testCase runTest(pov)
             }
         }
+
+        to size() :integer { cases size() }
     }
 }
 
@@ -347,20 +350,22 @@
 }
 
 # Given the source text string (or twine) of an updoc file, parse, run,
-# and report the test outcomes
+# and report the test outcomes.
 
-def updocTestSrc(testSrc, out) {
+def updocTestSrc(testSrc, out) :boolean {
     try {
         def parser := updocParserMaker new(testSrc)
         def script := parser parse()
         script runTest()
         script printOn(out)
+        script size() >= 1
     } catch problem {
         if (problem leaf() =~ sex :SyntaxException) {
             sex report(out)
         } else {
             printBlock("***script stopped by", "" + problem + "\n", out)
         }
+        true
     }
 }
 
@@ -375,48 +380,77 @@
     }
 }
 
+class hashCacheMaker(cacheFile) :any {
+    def myCache := [] asKeys() diverge()
+    
+    if (cacheFile exists()) {
+        for line in cacheFile {
+            myCache[integerMaker fromString64(line)] := null
+        }
+    }
+    def hashCache {
+        to has(hash) :boolean { myCache maps(hash) }
+        to put(hash)          { myCache[hash] := null }
+        to checkpoint() {
+            def buf := "" diverge(char)
+            for hash => _ in myCache {
+                buf append(hash toString64())
+                buf push('\n')
+            }
+            cacheFile setText(buf snapshot())
+        }
+    }
+}
+
+def eHome := <file: interp getProps()["e.home"]>
+def hashCache := hashCacheMaker new(eHome["updoc-hash-cache.txt"])
+
+
+# Run updoc either on a ".updoc" file, on the text extracted from a
+# ".html" file.
+
+def updocOne(file, path, out) {
+    def hash := file getCryptoHash()
+    if (hashCache has(hash)) {
+        out lnPrint(`skipping $path`)
+    } else if (endsWithAny(path, [".updoc", ".e", ".emaker", ".txt"])) {
+        out lnPrint(`$path:`)
+        # XXX Once E is faster, and the simple__quasiParser is fixed
+        # to pass source info through (preserving twine-ness), then
+        # switch from getText() to getTwine()
+        def testSrc := file getText()
+        if (! (updocTestSrc(testSrc, out))) {
+            hashCache put(hash)
+        }
+    } else if (endsWithAny(path, [".html", ".htm"])) {
+        out lnPrint(`$path:`)
+        def htmlSrc := file getText()
+        def testSrc := try {
+            html2txt(htmlSrc)
+        } catch problem {
+            out lnPrint(`can't parse $path: `)
+            out  indent("#                  ") print(problem)
+            null
+        }
+        if (testSrc != null && ! (updocTestSrc(testSrc, out))) {
+            hashCache put(hash)
+        }
+    } else {
+        out lnPrint(`ignoring $path`)
+    }
+}
+
 # Run updoc either on a ".updoc" file, on the text extracted from a
 # ".html" file, or on all such files in a directory tree, or on a URL.
 
 def updoc(filedir, out) {
     if (filedir =~ url :URL) {
-        def path := url toExternalForm()
-        if (endsWithAny(path, [".updoc", ".emaker", ".txt"])) {
-            out lnPrint(`$path:`)
-            # XXX Once E is faster, and the simple__quasiParser is fixed
-            # to pass source info through (preserving twine-ness), then
-            # switch from getText() to getTwine()
-            def testSrc := url getText()
-            updocTestSrc(testSrc, out)
-        } else if (endsWithAny(path, [".html", ".htm"])) {
-            out lnPrint(`$path:`)
-            def htmlSrc := url getText()
-            def testSrc := html2txt(htmlSrc)
-            updocTestSrc(testSrc, out)
-        } else {
-            out lnPrint(`ignoring $path`)
-        }
+        updocOne(url, url toExternalForm(), out)
     } else if (filedir isDirectory()) {
-        for each in filedir {
-            updoc(each, out)
-        }
+        for each in filedir { updoc(each, out) }
+        hashCache checkpoint()
     } else {
-        def path := filedir getPath()
-        if (endsWithAny(path, [".updoc", ".e", ".emaker", ".txt"])) {
-            out lnPrint(`$path:`)
-            # XXX Once E is faster, and the simple__quasiParser is fixed
-            # to pass source info through (preserving twine-ness), then
-            # switch from getText() to getTwine()
-            def testSrc := filedir getText()
-            updocTestSrc(testSrc, out)
-        } else if (endsWithAny(path, [".html", ".htm"])) {
-            out lnPrint(`$path:`)
-            def htmlSrc := filedir getText()
-            def testSrc := html2txt(htmlSrc)
-            updocTestSrc(testSrc, out)
-        } else {
-            out lnPrint(`ignoring $path`)
-        }
+        updocOne(filedir, filedir getPath(), out)
     }
 }
 
@@ -428,13 +462,18 @@
     args
 }
 
-for name in names {
-    def filedir := try {
-        URLMaker new(name)
-    } catch problem {
-        # XXX Should check that it's a MalformedURLException
-        <file: name>
-    }
-    updoc(filedir, stdout)
+try {
+    for name in names {
+        def filedir := try {
+            URLMaker new(name)
+        } catch problem {
+            # XXX Should check that it's a MalformedURLException
+            <file: name>
+        }
+        updoc(filedir, stdout)
+    }
+    stdout println()
+} finally {
+    hashCache checkpoint()
 }
-stdout println()
+



1.2       +0 -1      e/src/jsrc/net/captp/jcomm/LookupHandler.java

Index: LookupHandler.java
===================================================================
RCS file: /cvs/e/src/jsrc/net/captp/jcomm/LookupHandler.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- LookupHandler.java	2001/07/22 05:29:55	1.1
+++ LookupHandler.java	2001/08/13 01:47:02	1.2
@@ -19,7 +19,6 @@
 Contributor(s): ______________________________________.
 */
 
-import java.math.BigInteger;
 
 /**
  * A handler for the special remote reference at position zero to the other 



1.5       +0 -1      e/src/jsrc/net/captp/jcomm/RemoteVowHandler.java

Index: RemoteVowHandler.java
===================================================================
RCS file: /cvs/e/src/jsrc/net/captp/jcomm/RemoteVowHandler.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- RemoteVowHandler.java	2001/08/06 17:21:19	1.4
+++ RemoteVowHandler.java	2001/08/13 01:47:02	1.5
@@ -19,7 +19,6 @@
 Contributor(s): ______________________________________.
 */
 
-import net.captp.tables.QuestionsTable;
 import org.erights.e.elib.ref.Ref;
 
 /**



1.5       +0 -1      e/src/jsrc/net/captp/tables/ExportsTable.java

Index: ExportsTable.java
===================================================================
RCS file: /cvs/e/src/jsrc/net/captp/tables/ExportsTable.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ExportsTable.java	2001/08/04 00:45:38	1.4
+++ ExportsTable.java	2001/08/13 01:47:02	1.5
@@ -22,7 +22,6 @@
 */
 
 import org.erights.e.elib.prim.E;
-import org.erights.e.elib.ref.Ref;
 import org.erights.e.elib.serial.PassByProxyGuard;
 import org.erights.e.elib.tables.IntTable;
 



1.2       +0 -6      e/src/jsrc/org/erights/e/elang/interp/InteractiveInterp.java

Index: InteractiveInterp.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/interp/InteractiveInterp.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- InteractiveInterp.java	2001/08/05 07:01:24	1.1
+++ InteractiveInterp.java	2001/08/13 01:47:03	1.2
@@ -22,17 +22,13 @@
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileReader;
 import java.io.IOException;
 import java.util.Enumeration;
 import java.util.Properties;
-import javax.swing.LookAndFeel;
-import javax.swing.UIManager;
 import javax.swing.UnsupportedLookAndFeelException;
 import org.erights.e.develop.exception.ExceptionMgr;
 import org.erights.e.develop.exception.PrintStreamWriter;
 import org.erights.e.develop.exception.ThrowableSugar;
-import org.erights.e.develop.format.StringHelper;
 import org.erights.e.develop.trace.TraceController;
 import org.erights.e.elang.evm.EExpr;
 import org.erights.e.elang.scope.Scope;
@@ -51,8 +47,6 @@
 import org.erights.e.elib.tables.ConstMap;
 import org.erights.e.elib.tables.Twine;
 import org.erights.e.elib.util.AlreadyDefinedException;
-import org.erights.e.elib.util.ClassCache;
-import org.erights.e.elib.util.TwineException;
 import org.erights.e.meta.java.io.FileGetter;
 import org.erights.e.meta.java.io.FileSugar;
 



1.61      +0 -1      e/src/jsrc/org/erights/e/elang/interp/Interp.java

Index: Interp.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/interp/Interp.java,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -r1.60 -r1.61
--- Interp.java	2001/08/08 05:39:17	1.60
+++ Interp.java	2001/08/13 01:47:03	1.61
@@ -40,7 +40,6 @@
 import org.erights.e.elang.syntax.EParser;
 import org.erights.e.elang.syntax.FileFeeder;
 import org.erights.e.elang.syntax.LineFeeder;
-import org.erights.e.elang.syntax.NeedMoreException;
 import org.erights.e.elang.syntax.SyntaxException;
 import org.erights.e.elib.base.TextWriter;
 import org.erights.e.elib.prim.E;



1.3       +0 -1      e/src/jsrc/org/erights/e/elang/interp/Interpreter.java

Index: Interpreter.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/interp/Interpreter.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Interpreter.java	2001/08/05 07:01:24	1.2
+++ Interpreter.java	2001/08/13 01:47:03	1.3
@@ -19,7 +19,6 @@
 Contributor(s): ______________________________________.
 */
 
-import org.erights.e.elang.evm.EExpr;
 import org.erights.e.elang.scope.Scope;
 import org.erights.e.elib.tables.ConstList;
 import org.erights.e.elib.tables.ConstMap;



1.35      +2 -0      e/src/jsrc/org/erights/e/elib/prim/ScriptMaker.java

Index: ScriptMaker.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/prim/ScriptMaker.java,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- ScriptMaker.java	2001/07/14 12:57:23	1.34
+++ ScriptMaker.java	2001/08/13 01:47:03	1.35
@@ -117,6 +117,8 @@
           "org.erights.e.meta.java.io.BufferedReaderSugar" },
         { "java.io.File",
           "org.erights.e.meta.java.io.FileSugar" },
+        { "java.io.InputStream",
+          "org.erights.e.meta.java.io.InputStreamSugar" },
         { "java.io.Reader",              
           "org.erights.e.meta.java.io.ReaderSugar" },
 



1.7       +32 -35    e/src/jsrc/org/erights/e/elib/ref/WhenResolvedReactor.java

Index: WhenResolvedReactor.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/ref/WhenResolvedReactor.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- WhenResolvedReactor.java	2001/08/06 17:21:20	1.6
+++ WhenResolvedReactor.java	2001/08/13 01:47:03	1.7
@@ -29,15 +29,25 @@
 import org.erights.e.elib.util.OneArgFunc;
 
 /**
- * Used to implement "Ref whenResolved/2". <p>
+ * Used to implement "Ref whenResolved/2", which is used to implement the 
+ * <a href="http://www.skyhunter.com/marcs/ewalnut.html#SEC20"
+ * >when-catch</a> construct <p>
  *
- * Like a Once extended to also invoke "wrapped run/1" when a client 
- * is lost (according to reactToLostClient).  Only does the run/1 behavior 
- * when the original reference is resolved, and does it on the original 
- * reference.  Hence the main difference between "whenResolved" and the 
- * Miranda "whenMoreResolved" message.<p>
+ * Wraps a 'done' function (the second argument of whenResolved, which is the 
+ * right side of the "->" of a when-catch construct), so that the done 
+ * function will eventually be invoked with the original reference exactly 
+ * once under the following conditions: <ul>
  *
+ * <li>The original reference is resolved
+ * <li>Either all prior messages sent on the original reference are already 
+ * delivered, or the original reference has become broken.
+ * </ul>
+ * This object is woken up by reactToLostClient and the response to 
+ * whenMoreResolved, but in both cases it ignores the argument and treats the 
+ * message just as a wakeup call.
+ *
  * @author <a href="mailto:markm@erights.org">Mark S. Miller</a>
+ * @author <a href="mailto:tstanley@cocoon.com">Terry Stanley</a>
  */
 /*package*/ class WhenResolvedReactor 
 implements DeadManSwitch, OneArgFunc, PassByProxy, Persistent {
@@ -46,10 +56,12 @@
     private Object myRef;
     
     /**
-     * If I should be told to reactToLostClient before I'm told to run/1, 
-     * then I run/1 on myself with ref as the argument.
+     * When ref is resolved, invoke wrapped. <p>
+     *
+     * Assumes a first whenMoreResolved will be sent with this 
+     * WhenResolvedReactor as argument.
      */
-    public WhenResolvedReactor(OneArgFunc wrapped, Object ref) {
+    /*package*/ WhenResolvedReactor(OneArgFunc wrapped, Object ref) {
         myOptWrapped = wrapped;
         myRef = ref;
     }
@@ -59,18 +71,18 @@
      * 
      * If myRef is resolved, then invoke myOptWrapped once, and remember not to
      * invoke it again (by forgetting it).  Also forget myRef, since we won't 
-     * need it for again. <p>
+     * need it again. Further invocations silently return null rather than 
+     * complaining.<p>
      *
      * If myRef is not resolved, then send a new <pre>
      *
-     *     arg <- whenMoreResolved(this)
-     * </pre> message.  Unlike a Once, redundant invocations silently return 
-     * null rather than complaining.
+     *     myRef <- whenMoreResolved(this)
+     * </pre> message whose response should wake me up again.
      *
      * @return Always returns null, irrespective of what 
-     *         myOptWrapped.run(arg) returns.
+     *         myOptWrapped.run(...) returns.
      */
-    public Object run(Object arg) {
+    public Object run(Object ignored) {
         if (null == myOptWrapped) {
             return null;
         }
@@ -81,31 +93,16 @@
             myOptWrapped = null;
             optWrapped.run(ref);
         } else {
-            E.sendOnly(arg, "whenMoreResolved", this);
+            E.sendOnly(myRef, "whenMoreResolved", this);
         }
         return null;
     }
     
     /**
-     * If I haven't been run/1 yet, then I run(ref) with the ref I was 
-     * constructed with, given that it's already broken, which it should be.
+     * Just like run/1, this is treated merely as a wakeup call to check 
+     * myRef.
      */
-    public void reactToLostClient(Throwable problem) {
-        if (null == myOptWrapped) {
-            return;
-        }
-        if (Ref.isBroken(myRef)) {
-            //Just in case the reference is broken with a different problem 
-            //than the partition problem, report the reference's problem, as 
-            //that's more specific.
-            run(myRef);
-        } else {
-            //for myRef to be unbroken is likely a bug, but better to report 
-            //the problem.  XXX this case should be traced rather than 
-            //reported.  To report it in this inconsistent way is likely a 
-            //bug.
-            myRef = Ref.broken(problem);
-            run(myRef);
-        }
+    public void reactToLostClient(Throwable ignored) {
+        run(ignored);
     }
 }



1.21      +5 -1      e/src/jsrc/org/erights/e/elib/tables/Equalizer.java

Index: Equalizer.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/tables/Equalizer.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- Equalizer.java	2001/07/14 12:57:24	1.20
+++ Equalizer.java	2001/08/13 01:47:03	1.21
@@ -28,6 +28,11 @@
 public final class Equalizer {
         
     /**
+     * A random guess at a good value
+     */
+    static private final int HASH_DEPTH = 5;
+
+    /**
      * All instances of the left hand (key) types simplify (for purposes of 
      * sameness comparison) to instances of the right hand (value) types. <p>
      *
@@ -300,7 +305,6 @@
      * sameHash().  Only settled objects may be hashed.
      */
     static /*package*/ int sameHash(Object obj) throws NotSettledException {
-        int HASH_DEPTH = 3; //a random guess at a good value
         return sameHash(obj, HASH_DEPTH);
     }
     



1.19      +13 -1     e/src/jsrc/org/erights/e/meta/java/io/FileSugar.java

Index: FileSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/java/io/FileSugar.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- FileSugar.java	2001/03/20 03:18:25	1.18
+++ FileSugar.java	2001/08/13 01:47:03	1.19
@@ -22,10 +22,12 @@
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.FileWriter;
-import java.io.BufferedReader;
+import java.math.BigInteger;
+import java.security.NoSuchAlgorithmException;
 import org.erights.e.elib.base.TextWriter;
 import org.erights.e.elib.prim.E;
 import org.erights.e.elib.tables.AssocFunc;
@@ -200,6 +202,16 @@
      */
     static public Twine getTwine(File self) throws IOException {
         return BufferedReaderSugar.getTwine(textReader(self), asUrl(self));
+    }
+    
+    static private final int BUF_SIZE = 8192;
+    
+    /**
+     * A SHA hash of the binary content of the file.
+     */
+    static public BigInteger getCryptoHash(File self)
+    throws NoSuchAlgorithmException, FileNotFoundException, IOException {
+        return InputStreamSugar.getCryptoHash(new FileInputStream(self));
     }
 
     /** 



1.9       +32 -18    e/src/jsrc/org/erights/e/meta/java/io/InputStreamSugar.java




1.6       +1 -0      e/src/jsrc/org/erights/e/meta/java/math/BigIntegerMakerSugar.java

Index: BigIntegerMakerSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/java/math/BigIntegerMakerSugar.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- BigIntegerMakerSugar.java	2001/07/24 11:52:16	1.5
+++ BigIntegerMakerSugar.java	2001/08/13 01:47:03	1.6
@@ -51,6 +51,7 @@
     static public BigInteger fromString64(String s)
     throws NumberFormatException {
         
+        s = s.trim();
         if (s.length() >= 1 && s.charAt(0) == '-') {
             return fromString64(s.substring(1)).negate();
         }



1.13      +11 -0     e/src/jsrc/org/erights/e/meta/java/net/URLSugar.java

Index: URLSugar.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/meta/java/net/URLSugar.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- URLSugar.java	2001/07/14 12:57:25	1.12
+++ URLSugar.java	2001/08/13 01:47:03	1.13
@@ -22,11 +22,14 @@
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
 import java.io.IOException;
+import java.math.BigInteger;
 import java.net.URL;
+import java.security.NoSuchAlgorithmException;
 import org.erights.e.elib.base.TextWriter;
 import org.erights.e.elib.tables.AssocFunc;
 import org.erights.e.elib.tables.Twine;
 import org.erights.e.meta.java.io.BufferedReaderSugar;
+import org.erights.e.meta.java.io.InputStreamSugar;
 
 /**
  * A sweetener defining extra messages that may be e-sent to a
@@ -71,6 +74,14 @@
      */
     static public Twine getTwine(URL self) throws IOException {
         return BufferedReaderSugar.getTwine(textReader(self), self.toString());
+    }
+
+    /**
+     * A SHA hash of the binary content of the URL's contents.
+     */
+    static public BigInteger getCryptoHash(URL self)
+    throws NoSuchAlgorithmException, IOException {
+        return InputStreamSugar.getCryptoHash(self.openStream());
     }
 
     /**