EditedbyTeitelmanonNovember3,198210:45amthisinterfaceisintendedtobefairlystable,andcontainsvariousroutinesusedinandimplementedbytheuserexecpackagewhichmayalsobeofgeneraluse.DIRECTORYRopeUSING[ROPE],SpellUSING[SpellingList,SpellingGenerator,Modes,Filter],UserExecUSING[ExecHandle],ViewerClassesUSING[Viewer];UserExecUtilities:CEDARDEFINITIONS=BEGINTypesROPE:TYPE=Rope.ROPE;ExecHandle:TYPE=UserExec.ExecHandle;Viewer:TYPE=ViewerClasses.Viewer;InvokingspellingcorrectorproceduresthatinvokethespellingcorrectorusingexecHandletosupplyconvenientdefaultsforinforming,confirming,andaborting.IfclienthasanexecHandleinhand,thisistherightwaytocallthespellingcorrector.GetTheOne:PROCEDURE[unknown:ROPE,spellingList:Spell.SpellingList_NIL,generator:Spell.SpellingGenerator_NIL,exec:ExecHandle,viewer:Viewer_NIL,--eitherexecorviewershouldbesupplied.Ifexec#NILthenusesExecConfirm,otherwiseifviewer#NIL,usesViewerConfirm.filter:Spell.Filter_NIL,modes:Spell.Modes_NIL]RETURNS[correct:ROPE];callsSpell.GetTheOne,providingargumentsforabortProc,confirmProc,andinformProcthatusethecorrespondingExecHandle.Abortingcanbeperformedbyeithertypingcontrol-DELwhentheexecviewerhastheinputfocus,orusingtheSTOPbutton.ConfirmationisperformedviaExecConfirm,describedbelow..GetMatchingList:PROCEDURE[unknown:ROPE,spellingList:Spell.SpellingList_NIL,generator:Spell.SpellingGenerator_NIL,exec:ExecHandle,viewer:Viewer_NIL,--eitherexecorviewershouldbesupplied.Ifexec#NILthenusesExecConfirm,otherwiseifviewer#NIL,usesViewerConfirm.filter:Spell.Filter_NIL,modes:Spell.Modes_NIL]1pî ìïaˆî2î îiî\îÀî Mî#“î'Rî ìï_Øî …îî{îæî‹îZîîî$î&Áî,î0¾î5äî8õî:›î=? îEîFïî ¿ï^1îùîÜîÍî™î iî" î&Íqî ìïZÑrî ýïY"qî²ïY"î˜ïY"rîáïY"qîDïY"rîUïY"î¹ïY"î ýïWrqî{ïWrîaïWrrîªïWrî ïWr îûî'¿î,�î ýïUÂqî&ïUÂî ïUÂrîUïUÂî¹ïU î ýïT qîèïTîÍïTrîïTîzïTî ýïRbsî ìïMSrî‡ïMSqî…ïMSîPïMSî rî$oïMSqî ìïIórsî ìïEÆtî ýïBlrî!ïBlqîïBlî×ïBlrîuïBlî[ïBlqîãïBlî·ïBlrîôïBluî ýï@¼ rî9ï@¼qî6ï@¼îïï@¼rî�ï@¼îrï@¼uî ýï? rî ï? qîï? îÁï? rî_ï? îDï? sî ìï:Þî°î®pî ýï7„ î­îîÒîî! î&½î*T î1·î3\î7Š î>9îC<î Ðï5Ý îZ î~î"î"Öî$dî(î*ˆî,| î3Þî5„î9=î;Öî=Aî?�îBÖîE˜î Ðï46îfî²îž uî ýï2†rîï2†qî†ï2†î.ï2†rî$ï2†îï0Öqî›ï0Öîoï0Örî¬ï0Öîï/& îÛî Âqî"Nï/&î#7ï/&rî$Zï/&îï-v î¦î#cqî$ðï-vî%Øï-vrî&ûï-vîï+Çî¢ îï*îìîžqî+ï*îï*rî7ï*pî—ï*îï*îî!Ýî$ùî&²î*Õî/î0ëî6{î8 î;%î= î@/îC:îáï(o î†îqîÇî"ëî$Ðî(Nî+2 rîï&Àîä îqî�ï&Àîuï&Àrî˜ï&Àîï%îâ î¹qîFï%î.ï%rîï#`qîï!°rîï!°îcï!°qînï!°îBï!°rîï!°îâï!°pîï î(îî!êî(sî*› î14 î9>î;á îBøîEÉîáïYî- îÆ î!Úî'ƒî*î+àî29î4î7áî;þ îDîáï²î-îIîmîãî/î ²î$‰î&Bî)Úî,&î0iî5 î=Qî>½îEîáï î†îXî!{uî ýï[rî<ï[qî¾ï[îfï[rî]ï[îï«qî›ï«îoï«rî¬ï«îïû îÛî Âqî"Nïûî#7ïûrî$ZïûîïK î¦î#cqî$ðïKî%ØïKrî&ûïKîï›î¢ îïìîìîžqî+ïìîïìrî7ïìpî—ïìîïìîî!Ýî$ùî&²î*Õî/î0ëî6{î8 î;%î= î@/îC:îáïD î†îqîÇî"ëî$Ðî(Nî+2 rîï ”îä îqî�ï ”îuï ”rî˜ï ”îï åîâ î¹qîFï åî.ï årîï 5vî)ÈïöÿTVm$gRETURNS[matches:LISTOFROPE];filesCheckForFile:PROC[file:ROPE]RETURNS[found:BOOLEAN];returnsTRUEiffileisonthelocaldiskGetTheFile:PROC[file:ROPE,defaultExt:ROPE_NIL,exec:ExecHandle,modes:Spell.Modes_NIL]RETURNS[correct:ROPE];Firstcheckstoseeiffile(orfile.defaultExt)exists,andifnot,callsSpell.GetTheFileprovidingsuitableargumentsforabortProc,confirmProcandinformProcthatusethecorrespondingExecHandle.GetMatchingFileList:PROC[file:ROPE,defaultExt:ROPE_NIL,exec:ExecHandle,modes:Spell.Modes_NIL]RETURNS[matches:LISTOFROPE];likeGetFileNameexceptalwaysreturnsalistoffiles.Iffiledoesnotcontainapattern,thenGetMatchingFileListcallsGetFileNameandreturnsLISTofthatfileiffound,otherwiseNIL.Iffiledoescontainapattern,callsSpell.GetFileNames,withappropriateargumentsforinform,confirm,andabort.confirmationViewerConfirm:PROC[msg:ROPE,viewer:Viewer,timeout:INT_-1,defaultConfirm:BOOL_FALSE]RETURNS[BOOLEAN];providesastandardwayofaskingusertoconfirmanoperationinaviewer.Theconfirmationmessage,msg,isprintedinthemessagewindow.Then,theyes/nobuttonisposted,whichallowstheusertoconfirmorrejectthecorrection.Theusercanconfirmahead,orrejectahead,assoonasSetupViewerConfirmhasbeencalled.(IftheimplementorwishestoaborttheoperationsoonerthanthecalltoViewerConfirm,hecandetermineifindeedtheuserhasconfirmed/deniedaheadusingGetConfirmationdefinedbelow.Inthiscase,theimplementormustcallFinishedViewerConfirmhimself).iftimeout#-1,andtheuserhasnotconfirmedbeforetimeoutmillisecondshaveelapsed,thendefaultConfirmisreturnedasthevalueoftheconfirmation.SetupConfirm:PROC[viewer:Viewer];Calltosetupmenu,etc.,toenableconfirmationahead.FinishedConfirm:PROC[viewer:Viewer];Calltotakedownmenu,etc.NotapartofViewerConfirmbecauseViewerConfirmmaynotbecalledincasethatconfirmationisnotrequired.ExecConfirm:PROC[msg:ROPE,timeout:INT_-1,defaultConfirm:BOOL_FALSE,exec:ExecHandle]RETURNS[BOOLEAN];likeViewerConfirm,except(a)theconfirmationmessageisprintedintheexecutive,ratherthanthemessagewindow.Theusercanconfirmusingthekeyboard,i.e.typey,n,ordel,providedhehasnottypedahead.Typinganythingelse,e.g.?,willcausetheusertobepromptedwithhisoptionsandallowhimtoconfirm/rejectonceagain.Iftheuserhastypedahead,hecanonlyconfirmusingthemenubutton,inorderthatthetypeaheadnotbeinterferedwith.notethatSetupConfirmandFinishedConfirmmustbeusedthesameasforViewerConfirm.lowerlevelfacilities.Providedmainlyincaseimplementorwantstobeabletocheckwhetheruserhasconfirmedordeniedahead,e.g.toaborttheoperation.GetConfirmation:PROC[viewer:Viewer]RETURNS[hasConfirmed,confirmed:BOOL];2qîïb&rîïb&îcïb&qî*ïb&îãïb&îîrî"ïb&î"ƒïb&sî ìï]õuî ýïZ— rîïZ—qîïZ—î»ïZ—rî ïZ—îïZ—qîæïZ—îºïZ—rî÷ïZ—qîßïZ—î ³ïZ—rî%ÐïZ—î&3ïZ—qî*ºïZ—î+sïZ—rî0ZïZ—î0½ïZ—pîïXåî¦îîlîÀî,îî kî#±uî ýïU€ rîÌïU€qîÊïU€îrïU€rîWïU€îºïU€qîœïU€îpïU€rî®ïU€îŠïU€ qî%²ïU€î&†ïU€rî)-ïU€qî*ºïU€î+£ïU€rî,ÆïU€î-¢ïU€î16 î ýïSÎîÑ î¨qî5ïSÎîïSÎrî@ïSÎqî(ïSÎîüïSÎrî#ïSÎî#|ïSÎqî(ˆïSÎî)[ïSÎrî+™ïSÎî+üïSÎpîïRîKî¨îMî‹îáî5îhî(²î,Ìî/pî0Æî3‚î6œî@ìîáïPtîÙîcîŠ î## î*Õî-x î4�î7`î9Àî< îáïNÍ uî ýïKhrî…ïKhqî‚ïKhî*ïKhrîïKhîrïKhqî UïKhî!)ïKhrî#fïKhî$CïKh qî+kïKhî,?ïKhrî.æïKhqî0sïKhî1[ïKhrî2~ïKhî3[ïKhî6î î>ÿî ÐïIÁ î§qî4ïIÁîïIÁrî@ïIÁqî'ïIÁîûïIÁrî¯ïIÁîïIÁqî$ÙïIÁî%’ïIÁî'¾î)½rî,ÎïIÁî-2ïIÁpîïHî» îúî7î!�î&'î'\î)›î+?î.oî/ýî2Qî5Vî7¹î<‰î=¾îB¹îáïFgî•î¯ î&ïî)’î.*î2î3£î6uî8Éî:î>GîD1îG¯îáïD¿î5î:î î?î:î"Tî.¶î1² î8Ïî?YîA�îáïCî4î×sî ìï>ç uî ýï;Š rîÜï;ŠqîÚï;Šî‚ï;Šrîgï;ŠîÊï;Šqî&ï;Šîúï;Šrî 7ï;Šî!ï;Šî%òî*üqî0Œï;Šî0õï;Šrî3ï;Šî4Žï;Šî6”qî@Àï;ŠîAyï;ŠrîDUï;Šqî Ðï9ârînï9âqîUï9âî)ï9ârîÝï9âqî@ï9ârîàï9âîCï9âpîï80îEîzî÷î¹î\î"®î%’î'7î,2î.%î4î5Âî6öî;rî>5 îáï6ˆîsîšîîœîBî!Ž î+qî/Kî1—î5ÿî:?î;«î@(îD îáï4áî-îî·î±îjî î"b î) î+Îî.²î1Aî6;î:€î<9î?æîD+îEäîáï3:îšîNîÄî"íî'&î)-î+y î39î7hî9 î<—î>ãîDÚîáï1’îîMîãîˆ î"@î$î&©î,Ûî.1î2mî4ºî7žî:îDÂîáï/ëîyîÑî!|î%Ÿî'|î*î-\î/¨ î7hî:´îáï.Dî.îï,‘îeîJî/î6îÙî%î î"î$ãî+(î/6î4 î; î>ÇîCÒîáï*ê î9î¤îî ¼î#î&’î(6î*‚ uî ýï)8 rî7ï)8qî4ï)8îÜï)8rîÁï)8î$ï)8îpîï'…îî¬î¿î±î¹î”î9î#u î+buî ýï%ÓrîÎï%ÓqîËï%Óîsï%ÓrîXï%Óî»ï%Óî™pîï$ îî¬î²î=îFîÈî"�î#¶î&�î(3 î1’î6ˆ î?èîBØîE;îáï"yîÂîhîWî) î"î#�î%åuî ýï Ç rî½ï Çqîºï Çîbï ÇrîGï Çîªï Çqîï ÇîÚï Çrîï Çîôï Çqî%„ï Çî%îï Çrî'ùï Çî)†ï Çî+Œqî5¸ï Çî6qï Çrî9Mï Çqî:Úï Çî;“ï Çrî>xï Çî?Tï Çî Ðï qîëïî¿ïrîrïqîÖïrî vïî Ùïpîïmî» îrî¯î Öî#" î+î0Hî1´î6Jî7ðî:< î@vîD{îáïÅî-îgîîÜî!Áî$Oî)Iî,àî/,î5Vî7‰î:nî;ðî=‹î?DîAÎîG1îáïîWîºîPî•î )î%Àî(ºî+:î,¦î/;î2æî52î8î9¼î;‹îAvîDrîáïwî�î0îÃî}î" î&õî*î.-î/»î2î4ìî7aî:÷î?<îAîC¦îáïÏîÛîsî¿îoî"î#®î'7î*î,Tî/:î3'î5Šî7Z î=hîïî îÞ î�î4î)~î,Êî.™î1ªî3öî7`î9î;@ sî ìïìî]î1 pî ýï Žî—î î²î¡ î"aî&0î'Õî)¤î,‡î.,î2î7î9ùîºï 5î?ï 5vî)Èïöÿ ÓTVm$‘SetConfirmation:PROC[viewer:Viewer,confirmed:BOOL];ResetConfirmation:PROC[viewer:Viewer];sharingglobalresourcesAcquireResource:PROC[resource:ATOM,owner:ROPE_NIL,exec:ExecHandle];apackageusedforsharingaglobalresourcebetweenseveralprocesses.Ifoneprocesshasalreadyacquiredtheresource,anattempttoacquireitbyanotherprocesswillprintasuitablemessage,andtheprocesstowaitfortheresourcetobefreed,i.e.AcquireResourcewillnotreturnuntiltheresourceisavailable.However,whilewaitingfortheresourcetobeavailable,theusercanabortviatheusualmechanisms,andAcquireResourcewillraiseUserExec.UserAborted.Forexample,thispackageisusedtomakesurethatthecompilerisnotrunsimultaneouslybymorethanoneexec,byhavingthecompilercallAcquireResource[$Compiler]beforeattemptingtorun.Ownerisusedinthemessagethatisprinted,whenwaiting.Ifowner=NIL,itdefaultsto(thepnameof)resource.owneristypicallyspecifiedwherethesameresourceisbeingsharedbyseveraldifferentclients.Forexample,itisnotpossiblefortwocommandsregisteredviatheExecinterface(asopposedtoUserExec)torunsimultaneously.Inthiscase,AcquireResourceiscalledwithresource=$ExecDotW,andowner=nameofthecommand,sothatAcquireResourcecanprintoutwhoitisthatownstheresource.ReleaseResource:PROC[resource:ATOM];releasesthenamedresource.Nopifnotcurrentlyacquired.miscellaneousRopeSubst:PROC[old,new,base:ROPE,case:BOOLEAN_FALSE,allOccurrences:BOOLEAN_TRUE]RETURNS[value:ROPE];ifoldisnotfoundinbase,thenvalue=base.ifalloccurrencesTHENsubstituteforeachoccurrenceofold,otherwiseonlyforfirst.RopeFromFile:PROC[file:ROPE]RETURNS[value:ROPE];Returnscontentsoffileasrope,orraisesIO.ErrorFileNotFound.END.--UserExecUtilities3uî ýïb&rîÎïb&qîÌïb&îsïb&rîXïb&î¼ïb&îšî$¤ qî+µïb&î,nïb&rî.àïb&î/Cïb&uî ýï`rî$ï`qî!ï`îÉï`rî®ï`îï`î ïsî ìï\\îµî�uî ýïYrîïYqîïYî¬ïYrî‘ïYîôïYqî çïYî!ºïYrî$aïYî%=ïYqî)äïYî*¸ïYrî-_ïYqî.ìïYî/ÕïYrî0øïYî1ÔïYî5h î=ƒpîïWfîCî†î–î¾îŠî¿î#Ëî)î.5î2¦ î8Åî:Sî<áîA‰îCþîáïU¿îQî�îDî7î#î$Âî)�î*Ùî,³î1£î6Jî8ßî<*î=_îBVîáïTî…îÑîyîî î5î!�î&Ðî(tî*Dî-úî0,î:}î=î?uîCˆîF¾îáïRpî0îœ î™î!Œî%î)×î+ÿî.Kî3šî5?î7 î= î?WîB<îDÊîáïPÉîî`îö îËî!oî+¿î.Tî1�î ïO"îµîhîî Cî!¯î$Àî&dî*î,õî/Çî2î8î9î;âî>f îG{îòïMzî\î|î î~îYî#·î&î+~î.î?KîòïKÓ î«îPî ïJ,î|îèîùîŸîëî"$î$öî&bî+Pî.Òî3ëî5yî9sî;Xî>Öî@.îE1îòïH„î¸î î)îÐî#Êî%6î*šî0 î3ìî68î9¡î>ðî@\îCþîòïFÝîÍî>îœî!'î#½î)pî*Çî,3î.–î3•î5½î8Iî>é îDþîG1îòïE6îfîñî#î!8î"Ýî)‚î+&î-ªî7î8öî;Žî>ÕîòïCŽî^î?î;îŠî o î(€î+$î/î1î4§î6Jî8–î? î@ÂîòïAçîCîÑî!î#}î&Vî'­î)î+ëî/Jî1–uî ýï>˜rîï>˜qîï>˜î«ï>˜rî�ï>˜îôï>˜qî æï>˜î!ºï>˜rî$aï>˜î$Äï>˜pîï<ñîîPî¤îKî"Dî#šî%ýî+´sî ìï8Ï uî ýï5€rî]ï5€qîZï5€îï5€rîçï5€îJï5€î îRqî æï5€î!ºï5€rî#÷ï5€î$Ôï5€qî(<ï5€î(õï5€rî.Fï5€qî/Òï5€î0Œï5€rî3pï5€î4Mï5€qî>ï5€î>¹ï5€rîD ï5€qî Ðï3Ùrîüï3Ùqîãï3Ùî·ï3Ùrîjï3ÙîÎï3Ùqîñï3ÙîÅï3Ùrîï3Ùîeï3Ùpîï21îeî­îî|îKîñîMî!Xî$âî&Çîï0Šîe îîº î"Àî$çî( î.Íî0qî3î8üî;÷î>uî ýï.ã rî„ï.ãqî�ï.ãî)ï.ãrîï.ãîqï.ãqîTï.ãî(ï.ãrîeï.ãqî Mï.ãî!!ï.ãrî&>ï.ãî&¡ï.ãqî*Äï.ãî+˜ï.ãrî-Õï.ãî.½ï.ãpîï-;îîkîîcîî!xî#1î&ñî,¬ qî ìï)írî sï)ípî Oï)íî Éï)íîÆvî)ÈïÿNTVm$‰ÿ HELVETICAþŸÿ TIMESROMANþŸÿ TIMESROMANþæÿ TIMESROMANþYÿLAURELþŸÿ TIMESROMANþæÿ TIMESROMANþŸ• „Oj/š)3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUserExecUtilities.mesa16-Dec-82 16:28:35