Inter-OfficeMemorandumToCedarInterestDateJune25,19838:43pmFromWarrenTeitelmanLocationPaloAltoSubjectRememberPackageOrganizationPARC/ISLXEROXReleaseas[Indigo]Documentation>Remember.tioga,.pressDraft[Indigo]Manual>Remember.tiogaByWarrenTeitelmanLasteditedByWarrenTeitelmanonJune25,19838:54pmOverviewRememberisasystemforallowingtheusertoenteraneventthatwilloccuratsomespecifiedtimeinthefuture,andtoberemindedoftheeventwhenthecorrespondingtimearrives.Theformofthereminderisanappropriatelyshaped,blinking,iconicviewercalledaremindernotice,orsimply,areminder.Theviewercontainstheinformationassociatedwiththeevent,e.g.eitheratextstringsuppliedbytheuser,orthecontentsofaWalnutorPeanutmessage.Theusercandestroytheremindernotice("Ihaveseenit"),resetitforsomefuturetimeviaamenubutton("Remindmeagainlater"),orsimplyturnofftheblinkerbutleavethereminderaround("I'llgetittoitsoon").EventscanbeenteredintothesystemeitherbytypingacommandtotheExecutive(eithertheUserExecorCommandTool),e.g."CallBobTaylorat4pm","RemembertoseeFrankSquiresMonday",orviatheRemindmenubuttononaWalnutmessageviewerorPeanutcontrolwindow,orbyeditingthefileRememberEvents.txt.Thelattertechniquecanalsobeusedtodeleteaneventthatwaspreviouslyentered,ortochangesomeofitsparameters.EditingthefileRememberEvents.txtisalsocurrentlytheonlywaytobrowsethroughtheeventsthatarecurrentlyentered.Inthefuture,weintendtointegratetheremindersystemwiththeHickorycalendarsystemsoastoprovidealternativemethodsforexaminingevents.BackgroundInJuly,1982,PaulRovnersentamessagetotheCedarcommunityannouncing:"NiftyCedarapplicationavailablefortesting:Cedarusersneednevermissorbelateformeetingsorappointmentsagain!!"Hisremindersystemwasa"modest(2pages)butusefulprogram...thatreadsatextfilenamedReminders.txtandFORKsaprocesstopostnoticesasflashing,iconicviewersatorafterthespecifiedtime."Imitationisthesincerestformofflattery,andRemembersystemowesagreathistoricaldebttoPaul'soriginalefforts,althoughitiscurrentlyalmostthreetimesthesize(notcountingthefancydateandtimeparserwhichisitselflargerthantheremindersystem),andverylittleofPaul'soriginalcodehassurvived.Rememberretainsthebasicideaofaprocesswhichpostsnoticesatspecifiedtimes,althoughtherepqB^  p ZBZZ(Z3CZ68<?' WBWA(W3CW6] S+BS+^3CS+ =S+r{Ks A pA,/s @p@(s >jp>js < Vp<I!O$&*%-3t 9tu 6p!66F"%()-&v/ 6/6p26265I7;=/@Fi 5Q #BG!^#'+e- 6:>AEbG/ 3% "(,e15Nv637C3<p@(3AL3CVHev 2p22 e &: ,/268CbE -  #@I$)Y,.0I13M *P54 %\)o+/1N79<1BG/ (VZ u j(!h(#&+-p0~(1.(2Ku2(3(:<?D- 'Cp'C'Cl"| j$&(3-*278={B:G % +#&)0257;<@BF # ?U $F&' s/>#/#3%5 6A`BD "M f'!#(y,.C05359:?AE  hNM" (,.M3pt W p :i!#(*s-1V8 @Ew 5 3'"S%)V-50c2<4A69H?"@ -%-&+-}17 8;N>?BE  sqp+n \"$%8)+1U5q:t<&>AYC ? W !'u)*p126.9:> DG  &*.2V47:@NBF u !Avu!upu|u!$N&,2"48 ;N=A,FH  au Sp& S SX!L"$#(,0r5 6AF L* $x&,G.0_5i ;t Hw EF5quoCpCCAu%C&Cp-C-C/24t8u;"C<C pE;CECG/u AipAiAiZ*uAiAi$W&),/1p4xAi5Ai8V=3?#BF ?HK8!(V)+Q,148!<?D F >3^S 4#c%%'+M,2}58V;>A3F >ABE 3ZN %v&3Z'L3Zp-c3Z-3Z/17:d @Br 1u11&+x3Q8g9>C 0 pm0 k0 > 4"$(,3N49<B3Do- $} +-}/=U@AG +|<5"&*1q468w (F5q"&po&x G$I&+-2K5z: ;?nAtE?H# $vlP !#(-(u/z$v0w$vp4$v6$v8=jAuD ""%).-1E6_;@{CVHeu !(p!(C!( 9"'J)-/3L46;>;CEa h( '-+14f79<@YAG  4%)@+.1469A<*=@BCaF 2HEu22"f("* 2D5I;@=BpD2Et2Fi  m^S!$&(z+-{25~o;J }#& (/ 1;39H:BC g !+" )!/35x:]=?BG o]"p$&+-0<57u89=IC/E p&uGupJ"$])x+1d69q<u=>uBHD qspqqd!cu"q"q(}+S.0p3;q4Wq9K@ZAD7  e! ()*u/0p567;I=A,BD #J Ao u  p  %=&(-/E169;=@DH# TVm$n3ignored),thematerialthatfollowsthe'/'isinterpretedasparametersfortheevent.Forexample,ifthesubjectofthemessageis"RobPike/BlitTape1:30today",andtheuserselects:"/LeadTime30"andclicksRemind,thentheeventwillbeenteredfor1:00pm.WhenbothPeanutandRememberareloaded(ineitherorder),theRemindmenubuttonispostedinthePeanutcontrolwindow.ToenteraPeanutmessageasareminder,firstplacetheselectionanywhereinsideofthecorrespondingmessage,andthenclicktheRemindmenubuttonlocatedinthePeanutcontrolwindow.AswithWalnut,thecontentsoftheselectionareeffectivelyprependedtotheSubjectfieldforthepurposeofspecifyingthetimeoftheeventandotherparameters."Testing,testing,one,two..."Ifyouwanttoseewhetheraneventyouenteredwillreallybepostedattherighttimewithalltherightoptions,youcantellRemembertopretenditssometimeinthefutureforthepurposesofpostingremindersbyusingthePretendItscommand.Forexample,"RememberDealerWednesday1:15pm/RepeatWeeklyDuration60",followedby"PretendItsWednesday1:15pm"willpostthecorrespondingremindernotice.IfyoudestroyareminderthatwaspostedasaresultofaPretendItscommand,itisnotremovedfromthesystem,sinceitisassumedthatyouwereonlyjusttestingthingsout.However,youcanremovesuchaneventbyusingtheForgetbuttondescribedbelow.OnceaReminderNoticeisPostedAsmentionedearlier,aremindernoticeconsistsofablinkingicon.Theiconwillcontinuetoblinkindefinitelyunlessadurationhasbeenspecifiedforthecorrespondingevent,inwhichcasetheiconwillautomaticallyself-destructwhentheindicatedintervalhaselapsed.Theusercanalsoexplicitlydestroytheiconorviewer,whichalsohastheeffectofremovingthecorrespondingeventfromtheRemembersystem(unlesstheeventisarepeatedevent).Inotherwords,ifareminderispostedwhichtheuserdestroys,andthentheuserrebootsorrollsback,thesamereminderwillnotbepostedagain.Forrepeatedevents,e.g."DealerWednesday1:15pmREPEATWeekly",destroyingtheiconorvieweronlyaffectsthisinstanceoftheevent;anewreminderwillbepostedwhenthenexttimerollsaround.(However,repeatedeventscanberemovedfromthesystemviatheForgetmenubuttondescribedbelow,orbyeditingthefileRememberEvents.txt.)Althoughmostremindericonshavedistinctiveshapes,theunderlyingdocumentinallcasesissimplyaTiogadocument.Thus,ifyouopenaremindericon,youwillseeanordinaryTiogaviewer,butonewhosesecondmenulinecontainsvariousreminder-relatedoperations:Blinker,Relabel,15min/hour/day,NewTime,andForget.TheBlinkerbuttonisatoggleswitchforturningon/offtheblinkingoftheicon.The15min/hour/dayandNewTimebuttonsareusedtoresettheeventforanewtimeasdescribedbelow.Theremindercanthenbedeletedandanewreminderwillbepostedattheindicatedtime.TheForgetmenubuttonexplicitlydeletesthecorrespondingeventfromtheremindersystem.BlinkerToggleswitchforturningblinkerforiconon/off.15min/hour/dayleftclick=15min,middleclick=hour,rightclick=1day.Resettheeventtimefort+correspondinginterval,wheret=MAX[now,eventTime].Iftheshiftkeyisdepressedwhilebuttonisclicked,eventtimeisdecrementedbythecorrespondingamount,i.e.resettheeventtimefort-correspondinginterval.Thenewtimeisdisplayedinthemessagewindow.Forexample,ifthereminderwaspostedatWedesnday,1pmbutyouwereoutofyouroffice,anditisnow1:30,andyouleftclickthisbutton,thereminderwillberepostedfor1:45.IfyouclicktheuHDg/p _'6!$%'_ .m0 79T;?BaH. ]cu]]!$&(,:/Yp4t]5]79U<3u?]@]B [p[*[<u[[p[[!G$').0u5E[poY]~%(",.27u:Y];Y]p?Y]@Y]CH# WBvV%'\+,k16689@gCmG/ Vh! */2591u;VBE Q w M}upoKM 7""%(-u035:-;>AhDG IS5&*',.2E5d7 9f=?BG G\u@G (Gp&*G&G,/Cu4G5G= A FW-Aa#hp%FW&FW,;u.7FW.FW 6 >pBFWCFWF DG w#M%'-.j47:?#A BnFrHeu C pC MC ` u%(v*/24E5;*=@CF Aa*X;!T#(,<.C24 7:V>Cd ?t DLE 8H .Jme!'p), 48:>ACF 6 o 8 m&q+.3X6A9K;> D 4 S`+X!%'S-y/ 8<@ Br 3RC"k"%&(,x02}39;c?DF 1Tz!u$(#*-369;?i //m^u// //!)/'5Bp9//://;~ B@DG -cv-`-p--"7&w'*03t5w9=@'CIF +JA% #|%+/^269Pu;+<+p@+B+E *9|@;7! 'D"r (-/ 6=>@qCE & $7!}"(, .145;?DTF $o(z#)5G u=|$o>n$opA$ouC$oD$opH$ou " p"u~"{"p_""u""p#K"$/"u'"("p,","02357U;=BG/ !!Tbu!!R!! p$!!%^!!u'j!!(h!!p-!!.!!258P9=:?CDE|F y # "%"(Z*]/C2 3H6H_BG/ ] )%'+-'370: <?iCG/ [  u"[#[p)U[*[u Xp XX!3"&()-$037<]B|D FtV\Md!#z%(u RpR>RzJ!$G+0m36 =@,DFPy+"x#%)&'-Q1Zu4/P5Pp8P9P=M?CO1a uBO1O1p"O1#O1%(k-?/t K Sw HxHsH{HJwpoFU $%*,L 3`5 <&?OAFHe DnDV"' /M16 8z<=?EhG/ B2  x$*0M25v8:?oB A  3)#'+-13A8;u@ZFv ?x p?xF?xa a$*+-02.4t8gAbD8FS :1 &,2.A15n8z>E!G/ 8s"( u(8)8.5 7n ?pD'8EK8 74*  $#*I/ 6:<? BMDEFt 5W "%+.1\35{8s:4<-?DG/ 3$(*6,146t8>@OBDb 2> V$%&( /5n9j:?&B 0 q"# o.5$(}.0U<=l>DrG/ ,s_es2$(+~/03b58y)#'{'{n (*- 7%%n (*- 7$+$+n (*- 49= "  n (*- 444n (*- 49=  &* 4<<n 'z, 6 U ( 2 U% /D[D  U$)50rs45ryw )p )ws ) )p ) )w TVm$25Specifiesthedefaultdurationforevents,inminutes.Ifnodurationisspecifiedintheevent,orviaakeywordcontainedintheevent,thenthisdurationisused.-1meansinfiniteduration.Remember.LeadTime:INT_0Specifiesthedefaultleadtimeforevents,inminutes.Ifnoleadtimeisspecifiedintheevent,orviaakeywordcontainedintheevent,thenthisleadtimeisused.Remember.CreateLog:BOOL_FALSEIfTRUE,eachreminderthatispostedisalsowrittentothelogfile,Remember.log.RegisteredIcons:TOKEN_NILDefinesthemappingbetweenanIconFlavorandthecorrespondingicon.(ThisprofileoptionisactuallyimplementedbytheIconRegistrypackage,ofwhichRememberisaclient.)Forexample,ifthekeywordForumspecifiestheIconFlavorMeeting,thenMeetingmightbedefinedbyincludingMeeting:Remember.Icons3intheRegisteredIconsentryinyourprofile.HereistheRegisteredIconsentrycontainedinRemember.Profile.RegisteredIcons:"Remember.defaultIcon:Remember.icons11--acalendarPhone:Remember.Icons0--pushbuttonhandset--canalsoberemotefile,e.g.[Indigo]Remember>Remember.iconsConversation:Remember.Icons1--twopeopletalkingoveradeskMeeting:Remember.Icons3--onepersontalkingtoagroupofseveralEnvelope:Remember.Icons4--anenvelopeSoftBall:Remember.icons8Lunch:Remember.icons9"ReminderParametersRememberrecognizesanumberofparametersassociatedwiththepostingofnotices.Theseparameterscanbespecifiedwhentheeventisentered,using'/'asdescribedearlierinthesectiononEnteringEvents,orbyassociatingthemwithkeywordsdefinedintheuser'sprofile,asdescribedinthesectiononUserProfileOptions.Aparameterisspecifiedbyaname/valuepair,i.e.name:value,wherethe:isoptional,andthecaseofthe`name'isignored.Valuesaresingletokens,intheIO.GetTokensense.Tospecifyavaluethatcontainsspacesorotherseparatingcharacters,wrap"'saroundthevalue,e.g.IconLabel:"FrankSquires".Theparametersthatarecurrentlyimplementedare:REPEATvalue={HOURLY,DAILY,WEEKDAYS,WEEKLY,MONTHLY,YEARLY,oraropethatcanbeparsedbyTempus.Parse,e.g."15minutes","3days"}DURATIONvalueislifetimeoftheremindernoticeinnumberofminutes,i.e.automaticallykillthenoticeafterthisdurationUNTILvalueisatime.automaticallykillthenoticeafterthistimeuHDg/po_/%!!#(n*/138: ?AjCG ] $';)/l04k6:]?%w WpMWwsKWWpWMWwpoUB$|!#(q*/138:?AmCG S $';)/v0w MpMwsMEMp!MsM gMwpoKVuKVKVpKVKV!~"'P(+0;14I6u9]KV:[KV pBKVw EpEwsEEpEs.EEwpoC7"$ +.1e :s> C>kCADHQ Ai LL !&o'+B1 2J3Sp7Ai7Ai9?ATCu ?pv?? u ?!?p%?&?u* ?+J?p/?1?36;4=RuC?D? >  pV>>d'Y*,/o;N $6*,0y7|-5 )v,d5,5-/y4- 'v!4-"Y4-#W *E2Gq #*y0  $>v%s0%0&)v-2E546iy/7 !Pv# /7#/7$'+U/1268Jy-\ !v#-$(-%%'y+ !*@ (t %I] p "- 2"N$j + 26!8>@6E !'  R!%',|0<283:?>@^BG l43 "%+0248=?OE}G/ [ ]RpCW 'F*,135L9|;= >D`G/  x- M"&q+,/ 7w;_=yBC$F 3Py  %(*/~158 >C   'x pBNEspsp"s#$*p/s01p6s78p<=u?K@CFV&" "D$'b-/x hpIhh0 #j)m-/U46\;>I F /H%x p : 4F #&"(,/2w TVm$6LEADTIMEvalueisnumberofminutes.Postreminderthisnumberofminutespriortotheindicatedtime.Primarilyforuseinconjunctionwithremindbutton,wherethetimeoftheeventisspecifiedbythemessageitself.ICONFLAVORthenameoftheflavoroficontobeused.ThemappingfromnametofileisdefinedviatheRegisteredIconsentryintheuserprofile.ThecorrespondingiconflavorisobtainedviatheIconRegistry.Ifforsomereasonthecorrespondingiconflavorcannotbefoundorcreated,theiconnamedRemember.defaultIconwillbeused,ifany,otherwisedocument.ICONLABELthelabelfortheicon.Ifnotpresent,thetextofthenoticewillbeused.ICONLABELTYPEvalue={prev,next,this}.providesawayofspecifyinganiconlabelintermsofthepositionofakeywordinthetext(andisthereforenotespeciallyusefulexceptinconjunctionwithkeywords).Forexample,`next'meansusethewordfollowingthekeywordastheiconlabel,e.g."CallTaylorin10minutes"wouldpostareminderwhoseiconlabelwasTaylor.RememberEvents.txtRememberEvents.txtcontainstheeventsthathavebeenenteredintothesystem.Itisavanillatextfile,i.e.cannotcontainTiogaformatting,sincetheRemembersystemrewritesthisfilewheneveraneventisentered.Theformatoffileisasequenceofeventsseparatedbyablankline.Eacheventbeginswithatimeandendswiththetextstringforareminder.Inbetweenareentriesoftheformparameter:value.The:isoptionalandcaseisignored.EditingRememberEvents.txtwillcauseittoberescanned.GettingstartedBringover/a/p[Indigo]Top>Remember.df.FollowtheinstructionsinRemember.Profileforeditingyouruserprofile.ThensimplyrunRemember.bcd.IfyoudonotusetheUserExec,followthesameprocedurebutrunLeanMeanRemember.bcdinsteadofRemember.bcd.Ignorethe(thereareunboundimports)message-itisaresultofthefactthatWalnutorPeanuthasnotbeenloaded.Ignorethemessage"CouldnotfindRememberEvents.txt:noeventslogged".Itsimplywarnsyouthattherearenoeventsentered,whichtherearen't,sincethisisthefirsttimeyouareusingthesystem.Ifyouwanttoseeifeverythingisworking,trytypingtotheexecutive"RemembertocallWarrenin10minutesandtellhimitallworked".Thentype"PretendItstenminutesfromnow".Youshouldseeablinkingphoneicon.Note:ifyouhavestartedWalnutandreadsomemail,itisagoodideatodeleteanyexistingmessageviewers,sincetheRemindbuttonwillonlyappearonthosemessageviewerscreatedsubsequentlytothetimethatyourunRemember.IfyoupreviouslyusedReminder,thefileReminders.txtcanbereadbyRemember,soyouneedonlycopyorrenameittobeRememberEvents.txt(providedyourReminders.txtdoesnotcontainTiogaformatting)toautomaticallyentertheeventsinthisfile.However,theywillnotusethevariousiconflavorsunlessyougoinandeditRememberEvents.txtbyhand.PrograminterfaceIfyouwanttowriteprogramswhichentereventsfromaprogram,e.g.implementyourownmenubuttons,Rememberexportsaninterface,RememberDefs,whichshouldallowyoutodoall(most?)ofwhatyouwant.Forexamplesofhowthisinterfaceisused,lookatRememberOpsImpl.mesa,whichimplementstheRemembercommandandtheRemindbuttonusingthisinterface.uHDg/x _/p_/y_/]m$'-0=5T6<?vACY]l!Q (,+15:4<?ADOH#[ >x Y phYYx)#p%"()+/:2 7;>@~BDDXK#<$'m*w/Q2: ;C>YBaCV) &"%*@, 58<ACGTQU.026E7:@x SpSSF"?#&6+b-0y2248;U=Fx Q! pwQ!'Q!!&$(--.13d 9;>BCGOyO!#W%s(Oy)Oy+S,1b3r 8;?n@ FMpMMdN#&'*,0)6T8>@EBEL+uYL+L+K\p%L+&L+),.38";'>uA/L+B L+pE0L+upt Hp Fa!w%(+/54/7 9p>H?A4BcF D ) "&'(s/{38;=CE C \2$&x*0247:>hB!Ft Ak %e"#,)k+/027@8;B> E ? -H6!%259<:<@>1 t % 8S 91:$?& s08S1S8S2+4c68:< AJDF 6 #$ p,6-C61v3c636779{>pD76Ea6 5  ` +!#(C*-M05:<AuB5C5F 3] &_""p&3]'73]($)..2747;z=?DA 1 @U"%(z*.057@9=\?AfB 0 j+e|u" 0"0*_,5/4P683=@CMF7G .gpd.g0.gu.g.g  &|)p-P.g..g1578>ABkE , I >O e#'b(*+A.13N7X9>DN + yu++py+@+$&*y/49 B'CFi )q q &H ("$' 02479ACbF2 %N QJ(/2W ;5>b@E # A 0!%'*t-437Z:<?5AF "gA1Y+Q-Mt p 63M#'4+q.058?hBE u>;pe u#$ p-i.I2[6:=C>ABG  vZ;<""S%!*,0M35XE @ Vu@@p3@@!$Ku&@'@p,@,@0436  TVm$] LAUREL TIMESROMAN TIMESROMAN TIMESROMAN HELVETICA TIMESROMANY TIMESROMANLOGO TIMESROMAN TIMESROMAN  # - 6 Aj/DB% remember.tioga25-Jun-83 20:59:05