--Rope.mesa,"Thick"stringdefinitions--RussAtkinson,August27,198211:51am--TableofContents:--***Part1:Basicoperationsanddefinitions--***Part2:Extendedoperationsanddefinitions--***Part3:Miscellaneousdefinitions--ARopeis(nominally)animmutableobjectcontaingasequenceofcharactersindexedstartingat0forSizecharacters.Therepresentationallowscertainoperationstobeperformedwithoutcopyingallofthecharactersattheexpenseofaddingadditionalnodestotheobject.--NOTE:thebitpatternofthetextvariantisGUARANTEEDtobeconsistentwiththebuilt-inCedartypeTEXT,althoughthetypeswillnotagreeeitheratcompile-timeorruntime.ThismeansthatonecanuseobjectsoftypeTextorTEXTinterchangeablyprovidedthattheruntimetypeisnotexamined,andprovidedthatthecompilercanbefooled(viaLOOPHOLE).SinceREFTEXTisroughlycompatiblewithMesaLONGSTRING,thisisameansforpassingRoperefstoPilotroutinesthatexpectLONGSTRING.ForshortSTRINGyouareonyourown(seeConvertUnsafe).DIRECTORYEnvironmentUSING[Comparison];Rope:CEDARDEFINITIONS--***Part1:Basicoperationsanddefinitions***--=BEGINROPE:TYPE=REFRopeRep;NoRope:ERROR;--signalledifropeisinvalidvariant--usuallyindicatessevereillnessintheworld--Note:BoundsFault=Runtime.BoundsFault--ItisraisedbymanyoftheRopeoperationsCat:PROC[r1,r2,r3,r4,r5,r6:ROPE_NIL]RETURNS[ROPE];--returnstheconcatenationofuptosixropes(limitbasedonevalstackdepth)--BoundsFaultoccursiftheresultgetstoolargeConcat:PROC[base,rest:ROPE_NIL]RETURNS[ROPE];--thetwo-rope(faster)versionofCat--BoundsFaultoccursiftheresultgetstoolargeCompare:PROC[s1,s2:ROPE,case:BOOL_TRUE]RETURNS[Environment.Comparison];--basedonCHARcollatingsequence--case=>caseofcharactersissignificantEqual:PROC[s1,s2:ROPE,case:BOOL_TRUE]RETURNS[BOOL];--contentsequalityofs1ands2--case=>caseofcharactersissignificant1pî ìïb&î c îwîÅî” î yï`€î øî?îfîîCî ‰î$Hî yï]5î ðîºî^î yï[�î ðî…î–îDîî îiî î yïYéî ðî…î–îDîG îÂî"f î yïXCî ðî…î–îD îû î yïTøî ðî rîïî[ î”îˆî"'î&î+•î,Êî2jî4 î:}î?€îDpîFîGIî yïSRî r î¾î‚ î 5î$Lî(Í î/Hî0ìî2¼î9î=îîBåîDàîFƒî yïQ¬ îèî�îÙîèîŒîó î&Aî*î+©î-õî yïNaî ðîïî;îCîæî‰îÕî œî%2î&ž î1!î2Æî4• î:Éî=Äî@îDÓî yïL»î ^îúî™îåîNîãî"Gî%æî)´î+Y î3Nî5î:ëî=ûîB#îDõîGƒî yïKî ÙîKîïîÔîîËîî(¿î."î0ôî3@î8Hî;-î<™î>üîEmî yïIpîÜî­îùîuîîÒî"Õî%� î/€î38î6‰î:Íî<9îA$ îGìî yïGÊî!î½îî î î@î"hî$�î)Pî,Íî/dî1 î4[î9‚î=theropesizeFind:PROC[s1,s2:ROPE,pos1:INT_0,case:BOOL_TRUE]RETURNS[INT];--likeIndex,returnspositionins1wheres2occurs(startslookingatpos1)--returns-1ifnotfound--case=>caseofcharactersissignificantIndex:PROC[s1:ROPE,pos1:INT_0,s2:ROPE,case:BOOL_TRUE]RETURNS[INT];--ReturnsthesmallestcharacterpositionNsuchthat--s2occursins1atNandN>=pos1.Ifs2doesnot--occurins1atorafterpos1,s1.lengthisreturned.--case=>caseofcharactersissignificantIsEmpty:PROC[r:ROPE]RETURNS[BOOL];--returnsLength[r]=0Length:PROC[base:ROPE]RETURNS[INT];--returnsthelengthoftherope(Length[NIL]=0)Replace:PROC[base:ROPE,start:INT_0,len:INT_MaxLen,with:ROPE_NIL]RETURNS[ROPE];--returnsropewithgivenrangereplacedbynew--BoundsFaultoccursifrangeinvalidorresulttoolongSize:PROC[base:ROPE]RETURNS[INT];--Size[base]=Length[base]Substr:PROC[base:ROPE,start:INT_0,len:INT_MaxLen]RETURNS[ROPE];--returnsasubropeofthebase--BoundsFaultoccursiftherangegivenisnotvalid--characterconversions(RRAsez:whyaretheyhere?)Control:PROC[ch:CHAR]RETURNS[CHAR]=INLINE{RETURN[IFchIN['A..'Z]THENch-controlOffsetELSEch]};Upper:PROC[ch:CHAR]RETURNS[CHAR]=INLINE{RETURN[IFchIN['a..'z]THENch-caseOffsetELSEch]};Lower:PROC[ch:CHAR]RETURNS[CHAR]=INLINE{RETURN[IFchIN['A..'Z]THENch+caseOffsetELSEch]};Letter:PROC[ch:CHAR]RETURNS[BOOL]=INLINE{RETURN[chIN['A..'Z]ORchIN['a..'z]]};Digit:PROC[ch:CHAR]RETURNS[BOOL]=INLINE{2rsî �ïb!î ^ïb!rîÝïb!qîÛïb!îƒïb!rîhïb!îËïb!qî_ïb!î3ïb!rîpïb!îLïb!qî�ïb!îúïb!rî"ïb!î#“ïb!qî%*ïb!î%þïb!rî+ïb!î+ïb!qî-ïb!î-âïb!rî0pïb!î0Óïb!pî Šï`{î ï`{îîvîyîdî ¢î$.rpî Šï^Õî ï^Õî îõî%î{î3î Ÿî#5î%�î(…rsî �ï[Šî ^ï[Šrî,ï[Šqî*ï[ŠîÑï[Šrî·ï[Šîï[Šî+qî]ï[Šî1ï[Šrînï[ŠîKï[Šqîÿï[Šîiï[Šrî!uï[Šî#ï[Šî$�qî'öï[Šî(¯ï[Šrî+‹ï[Šqî-ï[Šî-Ñï[Šrî0Dï[Šqî1+ï[Šî1ÿï[Šrî7ï[Šqî7ï[Šrî9‹ï[Šî9îï[Špî ŠïYäî ïYäîî­îõî�î›î Aî!úî%Ýî'–î+Åî/áî4Âî6grpî ŠïX>î ïX>îî˜îFîœîrpî ŠïV˜î ïV˜îîïî…îtî î‡îò rsî �ïSMî ïSMrîÑïSMqîÏïSMîwïSMrî ’ïQ§qî(ïQ§îüïQ§rî9ïQ§îïQ§qîÊïQ§î4ïQ§rî?ïQ§îÌïQ§îYqî‹ïQ§î _ïQ§rî"�ïQ§î#yïQ§qî&áïQ§î'šïQ§rî*vïQ§qî,ïQ§î,¼ïQ§rî/.ïQ§qî0ïQ§î0êïQ§rî6ïQ§qî6jïQ§rî8vïQ§î8ÙïQ§pî ŠïPî ïPîîî^î‚î mî%|î'î*1rpî ŠïN\î ïN\îîºîéî�îHîíî…î)îÀî!Vî%Lî&Úî(“î+—rpî ŠïL¶î ïL¶îî¬îRî î°îiîœîî$¹î&$rpî ŠïKî ïKîîïî…îtî î‡îò rsî �ïGÅî ïGÅrî_ïGÅqî\ïGÅîïGÅrîéïGÅîLïGÅqîÎïGÅî¢ïGÅrîßïGÅqîÇïGÅî›ïGÅrî ¸ïGÅqî!ïGÅrî$FïGÅî$©ïGÅpî ŠïFî ïFîî˜î§îŒrsî �ïBÓî iïBÓrî®ïBÓqî¬ïBÓîSïBÓrî8ïBÓîœïBÓqî/ïBÓîïBÓrîAïBÓqî(ïBÓîüïBÓrî"ïBÓqî"|ïBÓrî$ˆïBÓî$ëïBÓpî ŠïA.î ïA.îî˜îäîî¦îòîö î(›î*€rsî �ï=âî ï=ârî3ï=âqî1ï=âîØï=ârî ’ï<<qî‰ï<<î]ï<<rîšï<<îwï<<qîï<<îjï<<rîuï<<îï<<î�qî!\ï<<î!Æï<<rî#Ñï<<î%^ï<<î+:qî.Îï<<î/¢ï<<rî2Iï<<qî3Öï<<î4¿ï<<rî5âï<<qî ’ï:—îfï:—rî„ï:—qîçï:—rîøï:—î[ï:—pî Šï8ñî ï8ñîî˜îœî˜î$îçî%4î'rpî Šï7Kî ï7Kî îõî%î{î>î#¦î%_î)î+lrsî �ï4î ^ï4rîï4qîþï4î¦ï4rî‹ï4îîï4qî‚ï4îVï4rî“ï4qî{ï4îOï4rî lï4qî Ïï4rî"Úï4î#>ï4pî Šï2Zî ï2Zî… îÛîÀ rsî �ï/î ^ï/rîVï/qîTï/îüï/rîáï/îDï/qîØï/î¬ï/rîéï/îÅï/qîNï/î¸ï/rî!Äï/î#Qï/î$Þqî'ªï/î(ï/rî* ï/î+­ï/qî1“ï/î2gï/rî7„ï/qî7èï/rî:ùï/î;\ï/pî Šï-iî ï-iîî˜îÍîÃîfî²rpî Šï+Ãî ï+Ãî îõî%î{îÇî!Šî%î&‚î(årpî �ï(wî ûï(wî øîã îîýî ´î#‚î%Öî(Èrsî �ï%,î tï%,rîï%,qîï%,î¬ï%,rî‘ï%,îôï%,qîTï%,îï%,rî¬ï%,qî”ï%,îhï%,rî!…ï%,qî!èï%,rî%@ï%,î&(ï%,qî( ï%,î(wï%,rî,Žï%,qî Šï#†î ^ï#†rîÜï#†qî?ï#†rîÌï#†îgï#†qî²ï#†îï#†rînï#†îÑï#†qîï#†îÁï#†rî³ï#†î Mï#†î!™î"– qî*èï#†î+¡ï#†rî.ï#†î.·ï#†î Šï!àsî �ï•î •ï•rîï•qîï•îÄï•rîªï•î ï•qîlï•î7ï•rîÅï•qî¬ï•î€ï•rî �ï•qî!ï•rî$Yï•î%@ï•qî'&ï•î'�ï•rî+¦ï•qî Šïïî ^ïïrîÜïïqî?ïïrîÌïïîgïïqî²ïïîïïrînïïîÑïïqîXïïîïïrîïïî�ïïî éî!æ qî(sïïî)-ïïrî+¨ïïî,Cïïî ŠïIsî �ïþî iïþrî5ïþqî3ïþîÚïþrî¿ïþî#ïþqî‚ïþîMïþrîÛïþqîÂïþî–ïþrî ³ïþqî!ïþrî$oïþî%Vïþqî';ïþî'¥ïþrî+¼ïþqî ŠïXî ^ïXrîÜïXqî?ïXrîÌïXîgïXqî²ïXîïXrînïXîÑïXqîïXîÁïXrî³ïXî MïXî!™î#~ qî* ïXî*ÄïXrî-?ïXî-ÚïXî Šï²sî �ïgî iïgrî*ïgqî(ïgîÐïgrîµïgîïgqîxïgîBïgrîÐïgqî·ïgî‹ïgrî ©ïgqî! ïgrî$7ïgî%ïgqî'ïgî'mïgrî+„ïgqî ŠïÁî ^ïÁrîÜïÁî?ïÁqî%ïÁî�ïÁrîáïÁîDïÁqî{ïÁîWïÁrî•ïÁî0ïÁqî{ïÁîåïÁrî 7ïÁî šïÁî Šïsî �ï Ðî •ï Ðrî…ï Ðqî‚ï Ðî*ï Ðrîï Ðîrï ÐqîÒï Ðî�ï Ðrî*ï Ðqîï Ðîæï Ðrî ï Ðqî fï Ðrî#‘ï Ðî$yï Ðqî&^ï Ðî&Çï Ðrî*Þï Ðtî)Èïöÿ·TVm$öRETURN[chIN['0..'9]]}; --***Part2:Extendedoperationsanddefinitions***--Run:PROC[s1:ROPE,pos1:INT_0,s2:ROPE,pos2:INT_0,case:BOOL_TRUE]RETURNS[INT];--ReturnslargestnumberofcharsNsuchthats1startingatpos1--isequaltos2startingatpos2forNchars.Moreformally:--FORiIN[0..N):s1[pos1+i]=s2[pos2+i]--Ifcaseistrue,thencasematters.Match:PROC[pattern,object:ROPE,case:BOOL_TRUE]RETURNS[BOOL];--ReturnsTRUEiffobjectmatchesthepattern,wherethepatternmaycontain--*toindicatethat0ormorecharacterswillmatch.--Ifcaseistrue,thencasematters.SkipTo:PROC[s:ROPE,pos:INT_0,skip:ROPE]RETURNS[INT];--ReturnthelowestpositionNinssuchthats[N]isintheskiprope--andN>=pos.Ifnosuchcharacteroccursins,thenreturns.length.SkipOver:PROC[s:ROPE,pos:INT_0,skip:ROPE]RETURNS[INT];--ReturnthelowestpositionNinssuchthats[N]isNOTintheskiprope--andN>=pos.Ifnosuchcharacteroccursins,thenreturns.length.Map:PROC[base:ROPE,start:INT_0,len:INT_MaxLen,action:ActionType]RETURNS[BOOL];--Appliestheactiontothegivenrangeofcharactersintherope--ReturnsTRUEwhensomeactionreturnsTRUE--BoundsFaultoccursonattemptingtofetchacharacternotintheropeTranslate:PROC[base:ROPE,start:INT_0,len:INT_MaxLen,translator:TranslatorType_NIL]RETURNS[new:ROPE];--appliesthetranslationtogetanewrope--iftheresultingsize>0,thennewdoesnotsharewiththeoriginalrope!--iftranslator=NIL,theidentitytranslationisperformedFlatten:PROC[base:ROPE,start:INT_0,len:INT_MaxLen]RETURNS[Text];--Returnsaflatropefromthegivenrangeofcharacters--BoundsFaultoccursiftheresultinglengthwouldbe>LAST[NAT]FromProc:PROC[len:INT,p:PROCRETURNS[CHAR],maxPiece:INT_MaxLen]RETURNS[ROPE];--returnsanewropegivenaproctoapplyforeachCHARFromRefText:PROC[s:REFREADONLYTEXT]RETURNS[Text];--makesaropefromaREFREADONLYTEXT--causescopyingToRefText:PROC[base:ROPE]RETURNS[REFTEXT];--makesaREFTEXTfromarope3rqî Šïb!î ^ïb!rîÜïb!î?ïb!qî%ïb!î�ïb!rîáïb!îDïb!î Šï`{î �ï]/pî Šï]/î ï]/îî–î§îÙîÝ î"Xî$û î+…î.rsî �ïYäî ïYärî õïYäqîóïYäîšïYärîïX>qî¬ïX>î€ïX>rî½ïX>îšïX>qîNïX>î¸ïX>rîÄïX>îQïX>îÝqî ïX>î äïX>rî#!ïX>î#ýïX>qî'²ïX>î(ïX>rî*'ïX>î+´ïX>î-Aqî0©ïX>î1bïX>rî4>ïX>qî5ËïX>î6„ïX>rî8öïX>qîïV˜îëïV˜rîïV˜qîkïV˜rîvïV˜îÚïV˜pî ŠïTóî ïTóîîîmîRîöî!‹î##î&@î)î*Êî/ºî1_rpî ŠïSMî ïSMîîlî î±îjîZîÿî î"@î#Øî(Iî+òrpî ŠïQ§î ïQ§î î{îcî•îï î Ýî" rpî ŠïPî ïPîî�î}îéîîî rsî �ïL¶î âïL¶rîlïL¶qîjïL¶îïL¶rî÷ïL¶îZïL¶îqqîïL¶î×ïL¶rî!ïL¶î!ñïL¶qî%XïL¶î&ïL¶rî(íïL¶qî*zïL¶î+3ïL¶rî-¦ïL¶qî.�ïL¶î/aïL¶rî4~ïL¶qî4âïL¶rî8 ïL¶î8pïL¶pî ŠïKî ïKîîî‚îFî5î"fî$²î)®î-�î/Üî4î7orpî ŠïIjî ïIjîî5îÚîêî¼îñî©î î%ƒî(rpî ŠïGÅî ïGÅîî�î}îéîîî rsî �ïDyî ^ïDyrîÜïDyqîÙïDyî�ïDyrîfïDyîÉïDyqîKïDyîïDyrî\ïDyî9ïDyqî=ïDyî§ïDyrî²ïDyî!?ïDyî"Ìqî&3ïDyî'ïDyrî)EïDyqî*,ïDyî+ïDyrî0ïDyqî0€ïDyrî2ŒïDyî2ïïDypî ŠïBÓî ïBÓîî�îÙîèî÷îŽî!4î"=î%Zî(,î+$î,�î.6î0‚î3erpî ŠïA.î ïA.îî¤î<îÒîî¥î™îµî$¡î(Ðî*vî+×î.âî2õrsî �ï=âî ^ï=ârîï=âqîï=âî¶ï=ârî›ï=âîþï=âqî€ï=âîTï=ârî‘ï=âînï=âqîrï=âîÜï=ârî çï=âî"tï=âî$qî'hï=âî(<ï=ârî*zï=âqî+aï=âî,5ï=ârî1Rï=âqî1µï=ârî3Áï=âî4$ï=âpî Šï<<î ï<<îî�îÙîèî÷îŽî!4î"=î%Zî(,î+$î,�î0"î1Èî4î6÷rpî Šï:—î ï:—îî¤î<îÒîî¥î™îµî$¡î(Ðî*vî+×î.âî2õrsî �ï7Kî âï7KrîCï7Kqî@ï7Kîèï7Krîï5¥qîï5¥îâï5¥rîï5¥îûï5¥qî„ï5¥îîï5¥rîúï5¥î‡ï5¥îqî!àï5¥î"Jï5¥rî$Vï5¥î%ãï5¥î+¾î0P qîï4îëï4rîï4qîkï4rî–ï4îùï4pî Šï2Zî ï2ZîîÉîî'îÌîî ¤î$fî& î,yî.î0krpî Šï0´î ï0´îîî‚îîmî"î'rpî Šï/î ï/î îõî%î î"Ñî$vî'Ëî)î.ëî1Oî2ôî5Arsî �ï+Ãî uï+Ãrî&ï+Ãqî$ï+ÃîËï+Ãrîï*qîï*îâï*rîï*îûï*qî„ï*îîï*rîúï*î‡ï*îqî!àï*î"Jï*rî$Vï*î%ãï*î+¾ î2V î;òqî=ï*î>gï*rî?Šï*qîï(wîëï(wrîï(wîkï(wqîÒï(wî¦ï(wrîãï(wîGï(wpî Šï&Òî ï&Òîî|îÈ î‰î.înî £î#hrpî Šï%,î ï%,îîWî£î-îÎîî�îšî"`î%dî'Çî+\î.Xî0¤î5¥rpî Šï#†î ï#†îîW î{î`îÞî*î" î(Æî*2rsî �ï ;î ^ï ;rîÄï ;qîÂï ;îjï ;rîOï ;î²ï ;qîFï ;îï ;rîWï ;î3ï ;qî½ï ;î &ï ;rî"2ï ;î#¿ï ;î%Lqî(ï ;î(‚ï ;rî*Žï ;î,ï ;qî2ï ;î2Õï ;rî7òï ;î8Vï ;pî Šï•î ï•îîîFî½îÁîÿîKî"×î&šî(= rpî Šïïî ïïî îõî%î{îÇî#Qî'oî+\î-+î.`rsî �ï¤î ^ï¤rî}ï¤qî{ï¤î#ï¤rî ’ïþqîÂïþî,ïþrîÎïþîªïþqîoïþîïþîürîíïþqîPïþrî"©ïþî# ïþî#èqî*€ïþî*êïþrî,õïþî.‚ïþqî4iïþî5=ïþrî:Zïþqî:½ïþrî=Îïþî>1ïþpî ŠïXî ïXîî˜îÍî’î–î"îWî![î#î&žî(Æî+írsî �ï î ^ï rî�ï qî�ï î5ï rîï î}ï qîÿï îÓï î¯î#±rî&°ï qî'—ï î(kï rî-‰ï î-ìï pî Šïgî ïgîî2îfîjî¨îÝî.î&Ìrpî ŠïÁî ïÁîî0rsî �ï vî uï vrîï vqî ï vî´ï vrî™ï vîýï vqî�ï vîdï vrî¡ï vqî‰ï vî]ï vrî$zï vqî$Ýï vî'�rî*�ï vî*ðï vpî Šï Ðî ï Ðîî2îfî¸îüî9întî)ÈïÿùTVm$Š--causescopyingFromChar:PROC[c:CHAR]RETURNS[Text];--makesaropefromacharacterMakeRope:PROC[base:REF,size:INT,fetch:FetchType,map:MapType_NIL,pieceMap:PieceMapType_NIL]RETURNS[ROPE];--Returnsaropeusinguser-suppliedproceduresanddata--theuserproceduresMUSTsurviveaslongastheropedoes!PieceMap:PROC[base:ROPE,start:INT_0,len:INT_MaxLen,action:PieceActionType,mapUser:BOOL_TRUE]RETURNS[BOOL];--Appliestheactiontothegivensubropeinpieces(maxof1piece/Substr,--2pieces/Concat,3pieces/Replace,either1piece/MakeRopeoruseuser's--routine).ReturnsTRUEwhensomeactionreturnsTRUE.--BoundsFaultoccursonattemptingtofetchacharacternotintheropeContainingPiece:PROC[ref:ROPE,index:INT_0]RETURNS[base:ROPE,start:INT,len:INT];--Findthelargestpiececontaingthegivenindexsuchthattheresultis--eitheratextoranobjectvariant.--(NIL,0,0)isreturnediftheindexisNOTinthegivenropeBalance:PROC[base:ROPE,start:INT_0,len:INT_MaxLen,flat:INT_FlatMax]RETURNS[ROPE];--Returnsabalancedrope,possiblywithmuchcopyingofcomponents--flat_MIN[MAX[flat,FlatMax],LAST[NAT]]--len_MIN[MAX[len,0],Size[base]-start]--start<0ORstart>Size[base]=>boundsfault--theresultingmaxDepthwillbelimitedby2+log2[len/flat]VerifyStructure:PROC[s:ROPE]RETURNS[leaves,nodes,maxDepth:INT];--traversethestructureofthegivenrope;returnthenumberofleaves,--nodesandthemaxdepthoftheropeextracheckingisperformedtoverify--invariantsaleafisatextorobjectvariantanodeisanon-NIL,--non-leafvariantsharedleavesandnodesaremultiplycountedVerifyFailed:ERROR;--occurswhenVerifyStructurefindsabadegg--shouldnothappen,ofcourse --***Part3:Miscellaneousdefinitions***--controlOffset:NAT=100B;caseOffset:NAT='a-'A;FetchType:TYPE=PROC[data:REF,index:INT]RETURNS[CHAR];--typeoffetchroutineusedtomakeauserropeMapType:TYPE=PROC[base:REF,start,len:INT,action:ActionType]RETURNS[quit:BOOL_FALSE];4rpî Šïb4î ïb4îî0rsî �ï^èî ^ï^èrî”ï^èqî’ï^èî9ï^èrîï^èî�ï^èqîï^èîåï^èrîrï^èqîZï^èî.ï^èrî"Kï^èî"®ï^èpî Šï]Cî ï]Cîî2îfîjî¨îÝrsî �ïY÷î âïY÷rîïY÷qîïY÷î§ïY÷rîïXQqîïXQîâïXQrîTïXQî0ïXQqîUïXQî¿ïXQrî`ïXQî=ïXQî* î&hî)üî0Gqî1ÔïXQî2¼ïXQrî3ßïXQî›ïV¬îk îÐqî ]ïV¬î!EïV¬rî"hïV¬qî#PïV¬î$$ïV¬rî)AïV¬qî)¤ïV¬rî,µïV¬î-ïV¬pî ŠïUî ïUîîîFîJîâ î"ó î)£î,Frpî ŠïS`î ïS`îîMî1 îáî‘î#î$Çî'Îî)‡î+Óî.×rsî �ïPî iïPrî~ïPqî{ïPî#ïPrîïNoqîïNoîâïNorîïNoîûïNoqî„ïNoîîïNorîúïNoî‡ïNoîqî!àïNoî"JïNorî$VïNoî%ãïNoî+¾î0Pî›ïLÉqîüïLÉîµïLÉrî‘ïLÉqîïLÉî×ïLÉrîIïLÉqî0ïLÉîïLÉrî$"ïLÉqî$…ïLÉrî'°ïLÉî(ïLÉpî ŠïK#î ïK#îîÉîî'îÌîî ¤î%™î'?î+,î.·î0Zî1� rpî ŠïI~î ïI~îî5 îSî‡î#î&Ýî( î2‹î4Dî6¤rpî ŠïGØî ïGØîîùî îzî üî$eî(wî-rpî ŠïF2î ïF2î îõî%î î"Ñî$vî'Ëî)î.ëî1Oî2ôî5Arsî �ïBçî tïBç rî<ïBçqî9ïBçîáïBçrîïAAqîïAAîîïAArî,ïAAîïAAqîLïAAî¶ïAArîÂïAAîOïAAqîæïAAîºïAArî$ØïAAî%;ïAAqî(ÎïAAî)¢ïAArî+àïAAî,¼ïAAqî0EïAAî0¯ïAArî2QïAAî3-ïAAqî5úïAAî6dïAArî8ïAAî8iïAApî Šï?›î ï?›îî4î€îÛîDî Åî#î&�î*Uî-rî0Dî2�î6Grpî Šï=õî ï=õîîÏîîÊîƒîvîerpî Šïï9qî<ï9îãï9rîï7^qîï7^îâï7^rîï7^îûï7^qî„ï7^îîï7^rîúï7^î‡ï7^îqî!àï7^î"Jï7^rî$Vï7^î%ãï7^î+¾qî.­ï7^î/ï7^rî1"ï7^î2¯ï7^qîï5¹îëï5¹rîï5¹qîkï5¹rî|ï5¹îßï5¹pî Šï4î ï4îîîFîãî@î"Jî%Eî(ôî-ëî/� rpî Šï2mî ï2mîîxîåî!Õ rpî Šï0Çî ï0ÇîîBî¯îírpî Šï/"î ï/"îîîSîˆîî;îp î Åî#[î'ðrpî Šï-|î ï-|îîMî×îtî î Ùî%Xî'2rsî �ï*0î tï*0 rî®ï*0qî¬ï*0îSï*0rî8ï*0î›ï*0qîï*0îñï*0rî/ï*0qîï*0îêï*0rî%ï*0î%jï*0î)Ïî.qî5]ï*0î5Æï*0rî7hï*0î7Ëï*0pî Šï(‹î ï(‹îîîOîðî“îßî"lî%éî)üî,Hî1-î2Ñrpî Šï&åî ï&åîîÃîgî³îÅîrîî!aî$eî'ðî-›î/î5_î7rpî Šï%?î ï%?î î=îqîîî³îzî3î#!î'·î(ìî,*î-–î.Êrpî Šï#™î ï#™îîIîßî$î î"µî&wî(Ëî.rî �ï N qîóï Nî¬ï Nrîï Npî ï¨î ‡ï¨î…îµî7îÄî# î$Bî&×rpî ïî ‡ïî…îËî.î2îÖrî �ï·pî Šï·î ï·îî–î§îÙ î� î%î'¯rî �ïk qîLïkî4ïkrî+ïkîïkî �ïÆ qîˆïÆîpïÆrîgïÆîLïÆîÎîËsî �ïzî ^ïzrîÌïzqîÊïzîƒïzrî!ïzqîïzî®ïzrî“ïzîöïzqîtïzî Hïzrî!»ïzî"—ïzqî&Ûïzî'Eïzrî(çïzqî)Îïzî*¢ïzrî/¿ïzqî0"ïzrî3{ïzî3Þïzpî ŠïÔî ïÔîîæî‰îßî‚î’î7î"ãî$î&ýrsî �ï ‰î âï ‰rî2ï ‰qî/ï ‰îéï ‰rî‡ï ‰qî ï ãî ¶ï ãrî›ï ãîþï ãqî’ï ãîfï ãrîØï ãî´ï ãîqîéï ãîSï ãrîõï ãî Ñï ãî%c qî-Fï ãî.ï ãrî37ï ãî3šï ãqî6øï ãî7±ï ãrî:�ï ãqî<ï ãî<Óï ãrî?·ï ãî@ï ãtî)ÈïöTVm$Ó--typeofuserroutineusedtomapoverasubrope--returnsTRUEifsomeactionreturnsTRUEActionType:TYPE=PROC[c:CHAR]RETURNS[quit:BOOL_FALSE];--typeofroutineappliedwhenmapping--returnsTRUEtoquitfromMapTranslatorType:TYPE=PROC[old:CHAR]RETURNS[new:CHAR];--typeofroutinesuppliedtoTranslatePieceMapType:TYPE=PROC[base:REF,start,len:INT,action:PieceActionType]RETURNS[quit:BOOL_FALSE];--typeofroutineusedtopiecewisemapoverasubrope--returnsTRUEifsomeactionreturnsTRUEPieceActionType:TYPE=PROC[base:ROPE,start:INT,len:INT]RETURNS[quit:BOOL_FALSE];--typeofroutineappliedwhenmappingpieces--returnsTRUEtoquitfromPieceMapRopeRep:PRIVATETYPE=RECORD[SELECTtag:*FROMtext=>[length:NAT,text:PACKEDSEQUENCEmax:CARDINALOFCHAR],node=>[SELECTcase:*FROMsubstr=>[size:INT,base:ROPE,start:INT,depth:INTEGER],concat=>[size:INT,base,rest:ROPE,pos:INT,depth:INTEGER],replace=>[size:INT,base,replace:ROPE,start,oldPos,newPos:INT,depth:INTEGER],object=>[size:INT,base:REF,fetch:FetchType,map:MapType,pieceMap:PieceMapType]ENDCASE]ENDCASE];MaxLen:INT=LAST[INT];FlatMax:CARDINAL=24;Text:TYPE=REFTextRep;--thesmall,flatvarianthandleTextRep:TYPE=RopeRep[text];--usefulforcreatingnewtextvariantsEND.Forthosewhocare,thisistheofficialexplanationoftheRopeRepvariants:Note:NILisallowedasavalidROPE.Note:ALLintegercomponentsoftherepresentationmustbenon-negative.SELECTx:xFROMtext=>{--[0..x.length)istherangeofcharindexes--[0..x.max)isthenumberofcharsofstoragereserved--allRopeoperationscreatingnewtextobjectsinitx.length=x.max5rpî Šïb&î ïb&îîæî‰înîî!îÆî!Áî$¯î%ärpî Šï`€î ï`€îî˜îî^îÈîÚî$qrsî �ï]5î tï]5rî\ï]5qîYï]5îï]5rî°ï]5qî•ï]5î=ï]5rî"ï]5î…ï]5qîï]5îéï]5rî!vï]5qî"^ï]5î#2ï]5rî(Oï]5î(²ï]5qî,ï]5î,Éï]5rî/¤ï]5qî11ï]5î1êï]5rî4Ïï]5î52ï]5pî Šï[�î ï[�îîæî‰î,îÓîUrpî ŠïYéî ïYéîî˜îî­îrî¯rsî �ïVžî uïVž rî¯ïVžqî­ïVžîfïVžrîïVžqîéïVžî‘ïVžrîvïVžîÙïVžqî!¼ïVžî"‡ïVžrî%ïVžqî%üïVžî&ÐïVžrî+íïVžî,PïVžqî/¸ïVžî0ƒïVžrî3ïVžî3sïVžpî ŠïTøî ïTøîîæî‰î,îcîrsî �ïQ¬î iïQ¬ rîmïQ¬qîjïQ¬î#ïQ¬rîÁïQ¬qî ’ïPî:ïPrîïPî‚ïPqîïPîêïPrî\ïPî9ïPî¡qînïPî×ïPrî yïPî!VïPî%çqî›ïNaîoïNarîŒïNaîïïNaqîMïNaîïNarîâïNaqîoïNaî(ïNarî! ïNaî!pïNapî ŠïL»î ïL»îîæî‰î,î<îáî!³î$®î'�î(Òrpî ŠïKî ïKîî˜îî^îÈîÚî$qrsî �ïGÊî iïGÊ rî–ïGÊqî”ïGÊîMïGÊrîëïGÊqî ’ïF$î:ïF$rîïF$î‚ïF$qîïF$îêïF$rî'ïF$îïF$qî�ïF$î÷ïF$rî˜ïF$îuïF$qî"BïF$î"¬ïF$rî$MïF$qî%5ïF$î& ïF$rî+&ïF$î+‰ïF$qî.æïF$î/ ïF$rî2{ïF$qî4ïF$î4ÁïF$rî7¦ïF$î8 ïF$pî ŠïD~î ïD~îîæî‰î,îÓîUî$Òrpî ŠïBÙî ïBÙîî˜îî­îrî¯rî �ï?�qî%ï?�îÌï?�î…rîÜï?�qî Šï=çî ^ï=çrî ’ï{SELECTx:xFROMsubstr=>{--[0..x.size)istherangeofcharindexes--x.basecontainscharsindexedby[0..x.size)--[0..x.size)inx==>[x.start..x.start+x.size)inx.base--Size[x.base]>=x.start+x.base};concat=>{--[0..x.size)istherangeofcharindexes--x.basecontainscharsindexedby[0..x.pos)--[0..x.pos)inx==>[0..x.pos)inx.base--x.restcontainsthecharsindexedby[x.pos..x.size)--[x.pos..x.size)inx==>[0..x.size-x.pos)inx.base--x.pos=Size[x.base]ANDx.size=x.pos+Size[x.rest]};replace=>{--[0..x.size)istherangeofcharindexes--x.basecontainscharsindexedby[0..x.start),[x.newPos..x.size)--[0..x.start)inx==>[0..x.start)inx.base--[x.newPos..x.size)inx==>[x.oldPos..Size[x.base])inx.base--x.restcontainsthecharsindexedby[x.start..x.newPos)--[x.start..x.newPos)inx=>[0..x.newPos-x.start)inx.base--x.size>=x.newPos>=x.startANDx.oldPos>=x.start--x.size-x.newPos=Size[x.base]-x.oldPos};object=>{--[0..x.size)istherangeofcharindexes--x.baseifthedataneededbytheuser-suppliedoperations--x.fetch[x.base,i]shouldfetchtheithcharANDx.fetch#NIL--x.map[x.base,st,len,action]--implementsMap[x,st,len,action]--x.pieceMap[x.base,st,len,action]shouldbehave--implementsPieceMap[x,st,len,action,TRUE]--itisOKtohavex.map=NILORx.pieceMap=NIL};ENDCASE=>ERRORNoRope}ENDCASE=>ERRORNoRope};6rpîïb&î™ïb&î–îÓîiîšîrpîï`€î™ï`€î–îâîêî�î1î}î Cî"?î*éî,Žî0Òî3u rîï^Úî Šï]5îüî ï[�qî ¾ï[�î^ï[�rîwï[�î'ï[�qîÕï[�îŽï[�rî›ïYéî©î ïXCpî ¾ïXCî8ïXCî5 î>îªîöî¹î\î!mrpî ’ïVžî ïVžî î-î�îî!î"ô rpî ’ïTøî ïTøî îîÁî îî+,î,Òrpî ’ïSRî ïSRî î~îîPî6rî ’ïQ¬î ŠïPîÚî ïNapî ¾ïNaî8ïNaî5 î>îªîöî¹î\î!mrpî ’ïL»î ïL»î î-î�îî!î"ô rpî ’ïKî ïKî îãî‰îÔîÊ î"›î$Arpî ’ïIpî ïIpî îÀîîaîöî"ùî$Órpî ’ïGÊî ïGÊîîoîî`îVî(Üî*‚rpî ’ïF$î ïF$î î’îw îìî•î#Uî%:î(Ãî*¨ rî ’ïD~î ŠïBÙîHî ïA3pî ¾ïA3î8ïA3î5 î>îªîöî¹î\î!mrpî ’ï?�î ï?�î î-î�îî!î"ô î)Ñrpî ’ï=çî ï=çî î—î=îˆî~ î$î%©rpî ’ïîªîöî¹î\î!mrpî ’ï/î ï/î î-îƒîÏîÕîIî #î"o î*€ rpî ’ï-nî ï-nî îäî9îî Õî#!î%5î(Fî+ïî0dî2Irpî ’ï+Èî ï+Èî î‰îZîórpî ’ï*"î ï*"î î"îèî¹î Rrpî ’ï(}î ï(}î î«î|îî#•î'Ûrpî ’ï&×î ï&×î î" îî Ôî#mî'×rpî ’ï%1î ï%1î îaîÍîmîî9îSî8î"^î$ô î,0î.rî ’ï#‹qî Šï!ærîrï!æîÒï!æqîï!æîÀï!ærî‚ï!æî¥ï!æqî Šï @î Cï @rîrï @îÒï @qîï @îÀï @rî‚ï @î¥ï @tî)Èïýÿ0TVm$ÿ HELVETICAþŸÿ TIMESROMANþŸÿ TIMESROMANþŸÿ TIMESROMANþæÿ TIMESROMANþŸ? - ø «' “0R6j/97š)lÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Rope.mesa16-Dec-82 16:25:16