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]1���pî ìï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ÂîýïTqîèïT�îÍïTrîïT�îzïTîýïRb�sî ìïMSrî‡ïMS�qî…ïMS�îPïMSî� rî$oïMS�qî ìïIórsî ìïEÆtîýïBlrî!ïBl�qîïBl�î×ïBlrîuïBl�î[ïBlqîãïBl�î·ïBlrîôïBl�uîýï@¼ 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 î¦î#c�qî$ðï-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 î¦î#c�qî$ðïK�î%ØïKrî&ûïK�îï›î¢ îïìîìîž�qî+ïì�îïìrî7ïì�pî—ïì�îïì�îî!Ýî$ùî&²î*Õî/î0ëî6{î8 î;%�î= î@/îC:îáïDî†îqîÇî"ë�î$Ðî(Nî+2 rîï ”îäî��qîï ”�îuï ”rî˜ï ”�îïåîâ î¹�qîFïå�î.ïårîï 5�vî)Èïö�ÿ���������������TVm$g����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������RETURNS[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];2���qîï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î…ïKh�qî‚ïKh�î*ïKhrîïKh�îrïKhqî UïKh�î!)ïKhrî#fïKh�î$CïKh qî+kïKh�î,?ïKhrî.æïKh�qî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îýï)8rî7ï)8�qî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ùî<nîB´îDmîÐïçîî•î:îÄî uîýï 5rîï 5�qîï 5�îªï 5rîï 5�îóï 5îÑqî$æï 5�î%ºï 5rî*×ï 5�î+:ï 5î4~ qî;ï 5�î<Hï 5rî>ºï 5�î?ï 5�vî)Èïö�ÿ������� Ó��������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.--UserExecUtilities3��uîýï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îïY�qîïY�î¬ïYrî‘ïY�îôïYqî çïY�î!ºïYrî$aïY�î%=ïYqî)äïY�î*¸ïYrî-_ïY�qî.ìï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î)Èï�ÿ�������N��������TVm$‰����������������������������������������������������������������������������������������������������������������������������������������������������������������ÿ HELVETICA������������þŸ����ÿ TIMESROMAN����������þŸ����ÿ TIMESROMAN����������þæ����ÿ TIMESROMAN����������þY����ÿLAUREL���������������þŸ����ÿ TIMESROMAN�����������þæ�����ÿ TIMESROMAN����������þŸ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������•�����„�����O�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������j/������š)3��ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUserExecUtilities.mesa�������������������������������������������������������������16-Dec-82 16:28:35���������������������������������������������������������������������������������������������������������������������������������������������������������