2IMGWOOF@@@ 8L xC)pJJJJ IH(ȱH:=IH[H`@H^H 2 9 @   I/H`JLNGȄBȄF aK ' faaFF  RJm# KKJ qJ )J ۈJJm  JFȱJGJKaȄM ' 5aaNNJFLGJ`a  XL LG &PRODOS`DaElH$?EGvѶK+`L XX LU ŠϠĠӥS)*+,+`F)) (*=GJFjJJA QE'+ '== `@ STSP8QSS8 m P o R(8RSIDECLICK.2.0 a#' @]E16.SIDECLICKX&BOOTER aa-FINDERCONTEXT5'MENUBAR( Ba; a; PLUGINSRC1a  )SCAPI.PDFs?--)SCAPI.RTF +=n,)SCAPI.TXT8--YSIDECLICKGa 0[SIDECLICK.H]X1л$TIMEda a )WORDCOUNTra0 a0 FINDER.DATAɂ p  Tppdos * * E16.SideClick * Copyright (c) 2004-2011 Eric Shepherd * * Provides equates for the SideClick contextual * menu manager, version 1.2. * * Send requests to "Syndicomm~SideClick~". * * Constants * CM_CURRENT_VERSION equ #$0001 * IPC calls sent to SideClick askContextMenuAreYouThere equ #$8000 tellContextMenuAddItem equ #$8001 * IPC calls sent by SideClick contextMenuSaysClicked equ #$3681 contextMenuSaysItemSelected equ #$3682 contextMenuSaysNeverMind equ #$3683 * Structure offsets for tellContextMe> E16.SideClickppdosppdos}Me>t   0UU nuAddItem's dataIn oTCMAIPrevious equ #$0000 oTCMAINext equ #$0004 oTCMAIVersion equ #$0008 oTCMAIUserID equ #$000A oTCMAIItemID equ #$000C oTCMAIItemTemplate equ #$000E * Structure offsets for contextMenuSaysClicked oCMSCVersion equ #$0000 oCMSCEvent equ #$0002 oCMSCWindow equ #$0006 oCMSCControl equ #$000A oCMSCStringList equ #$000E K,C ~ExpressLoadK 7 @,:7 @,77 "p""";8  [* {iH"r )-H" h}sqH}H" d+;i k; [  \h^8h:RRpn..PN}jJ33``" II@@" +;ikRestart ComputerShut Down ComputerSyndicomm~SideClick~Syndicomm~SideClick~;8 [< !>wu(>{y: H`tH" hH Y" hd  <<"r +;i k;8 [hpd"{-"_ 86 KH`%2R  +;ikSideClick~Booter~33/Are you sure you want to restart? You will lose any unsaved work./#2/^#333/Are you sure you want to shut down? You will lose any unsaved work./#2/^#3; [" +;ikKzZڜkH";i;"1"kH oh\cKzh h h Zګk%";kKHH ;[$hHHhk֯}H}H"+hh`" H"kHH;H" ;[+hhkK AC=?7935k;8 [KH H"'H H"dɑ ɑ ɹ}1}}    )b "i荅  I{"9 y{w" u" HH"6 w" u )@ H H"6 H H"6 ii d  +;i k  ;8 [KHH"n)bikȷm8koȷmq o" g HH HH"#  )d+;ik}} "y "[ hhk; [ +hzzH`; [8"d"6 +hhkHH8H; [/ ȷ1 ȷ HH"+hhhhkK; [  8+hhzhhZګkK/ 1 &3 ki2 4 0 HH4 H2 HH4 @@0 H "hh0 ) 0 kHH; [/ ȗ1 ȗȥȥȩ/ 1  / 1 i+zzzzkHHH8H; [  " % Q8  0 " "  " e i @< " "    " Z " "d+;i k; [ ȊwHwhȷ+;ikHiH;8  [  "& 3 5 O$>"[ W Y ȩȗ na i  U GE5 3  " F e i  " " 8  0 E 3 5  " ) i+;ikH; ["& 3 ȿ5 3 5 +hhkHHHHH; ["& 3 5   ȷݠ3 ȷ5 ȷ+;i k:JJJJkp_ R.3`I@< psw{!%On}yuu'gy}}dLPSV[bl my|KMOQquysw V[`i  4!'q /)F x~ di2A/=? -NUchouz` 6@Y_k !"#$%&'K,C ~ExpressLoadK @,f@,7" "j "" ;8  [* {iH" )-H"_h H H"_d+;i k;8 [ H"0::H"a  H"aH")  +;ik%s %d items......;8 [ "r i   h h  )-    h h    "_ +;ikSyndicomm~SideClick~;8  [%HHhh H\'"_h)I%UU  "{UU" Hd'"_h)I%55"{55" Hf'"_h)I%uu%%"{uu"He'"_h)I%.."{"H)'"_h)I%77"{"H*'"_h)I%>>"{"cDD" +;ikIcon Info forDuplicateValidatePut AwayVerifyEject-; ["_+zk Apple~Finder~  H"R  H"R  H"R  H"R  H"R  H"Rk;8 [d*dDf=\6e/*()!: WH`' .<5d"G"+;ik;8 [hd""1" $"86 H`  +;ikSideClick~FinderContext~; [  +hhk; [8:<"_+;ik; [8"" +hhkHH8H; [ ȷ ȷ HH"+hhhhkKzhnhpZګD D ;ilH" 8hlilhz;olZګ khzHګpڮn ;[)+hhKnpk; [HH HH"hhN"C "  <ڥHJ      h +;ik \HHH8H; [  "h % Q8  0 "} "} "he i @< "} "}   "hZ "}"+;i kK ;[ )%H"  +k        i  ).  )l Lh )@ Y | )- ,0 "+  + # 8`` )*  `)0:)H m c %Z nsbpcXx ou_d2i2f e E gGHiH;8  [  "  O$>"  ȩȗ na i  U GE   "}F e i  "h "h8  0 E   "}) i+;ik %"{ KzZڜkH"@;i""kH h\s  s  I-  8s  u s s HHw w "s s w w  "s 0  e ! 0 0  70 eE 0! )  P" ! T!"u 6 10  0 : . 蘼 0  )8 I  0  H" 0 0 0" ) Z)H"zi 0! . # ! e 0 q8. q0` ! `    u s s HHw w " I  { )my :    8     Q ! T!    0RN n n n jJJJJ 0:i      ˭ X  0 0 HH ȷ  HH )     8    Z)H"z hih  H" !8  I- HH S '" &"   q 0/ q ' S S 8       R  8 I  0  H" H" H" 0 0  H"  0" ȹ ) SZ )H"zȀ G HH   hih ` Q ! T!    0R    !N n n n jJJJJJ 0 R 0 0 QKzhhh [ZګkHH; [  e    +;i k"kKHH ;[$::hHHhk֯HH"H+hh`H; [" ȿ   +hhk;8  ["D' OJ  e e f f ff`   d Fejf)   +;i@k8 +;ikd8d d 8kHHHHH; ["    ȷݠ ȷ ȷ+;i k:JJJJkiHHHH[H@@H "hh) kHH; [ ȗ ȗȥȥȩ     i+zzzzk"[H"k `  0 " `HH;H" ;[+hhkK k;8 [KH H"c'H H"dɾ ɾ ɪ1    )b "i荲  I"9 " " HH"R "  )@ H H"R H H"R ii d  +;i k  ;8 [KHH"cn)bȷ8ȷ "  HH IHH" )d+;ik "C "hhk; [ Y+hzzH`K; [  Y8+hhzhhZګkK & k; [ ȊwHwhȷ+;ik_ ^Ud sU55u%u6<.K~7>D\b D s  w s w  ! " s w 0! 1 q !  &:):|"BTg LPSV[bl;>Lagv} $9?NUX[^lMPS_eu WY[]_acLPch !$1Tbgw !%)-159=A[^{~(*14;>AFKPU\_kp{ FMUZfo %/6;ҁ&),/258;>AD :"*1:=DGJaj /%ly DQRhĺ%+1?jq  &.8@)3Mt~ȁ^hl} #)5d#((2:QbEJR  JNTY^ov~ "0FRt|_n-\j l39Z)*+,-./0K,C ~ExpressLoadK  @, @,7 "q"Y"";8  [* {iH"& )-H"፽hHHvv"፽d+;i k;8  [HH"፽hh) )h((h$"77"፽  +;ik Show Menu Bar Hide Menu BarSyndicomm~SideClick~; [ F"፽ E"፽+zk;8 [hd"{-"M 86 H`  +;ikSideClick~MenuBar~; [?AC"+;ikKzZڜ=?kH";i""kH #h\Kzhhh Zګk"zkK?H=H ;[$LLhHHhk֯313H1H"+hh`"H"kHH;H" ;[+hhkK k;8 [KH H"'H H"}dE E m1111    )b "35i9;  I/"9 -/+" )" 7HH" +" ) )@ H H" H H" ii d  +;i kEm  ;8 [KHH"n)bȷ!8#ȷ!% #"  HH HH"  )d+;ik1m1 "- "hhk; [ +hzzH`; [8""+hhkHH8H; [ȷȷ HH"+hhhhkKEE; [  8+hhzhhZګkK&kiHHHHH@@H "hh) kHH; [ȗȗȥȥȩ i+zzzzkHHH8H; [  "D % Q8  0 "o "o  "D e i @< "o "o    "D Z "o "+;i k; [ ȊwHwhȷ+;ikHiH;8  [  " O$>"  ȩȗ na i  U GE "o F e i  "D "D 8  0 E  "o ) i+;ikH; [" ȿ+hhkHHHHH; ["   ȷݠȷ ȷ+;i k:JJJJk_v(78L;LE"1-)7)AEEm-1imm1ERLPSV[blQ]ijm '+ fisvm / ,28Fy \`fkp{^ 5=#).38F\hOYs HRVgmt KRZbh}PLUGINSRCv ' '*A.DS.STORE2W7 1BOOTER9a  1FINDERCONTEXTPa  1MENUBARka  1TIMEa  1WORDCOUNTa  1FINDER.DATAɤ p 1345678Bud1  erdsclbool booterdsclbool findercontextdsclbool findercontextfwi0blobNlsv findercontextfwswlong| findercontexticgoblob findercontexticspblob[menubardsclbooltimedsclbool wordcountdsclbool  @ @ @ @ E DSDB ` @ @ @BOOTERv ' 1'*A.DS.STORE:T"T"9[BOOTER.MAKE@T7!19VMAIN.CC a!19FINDER.DATAOO p 9;<=>?Bud1%  @ @ @ @ E%DSDB` @ @ @ATEXTMPS B# File: Booter.make # Target: Booter # Created: Wednesday, October 20, 2004 11:51:30 AM App = Booter SrcDir = : ObjDir = : Sources = "{SrcDir}main.c" Objects = "{ObjDir}main.c.o" "{App}" "{ObjDir}{App}" "{ObjDir}{App}" "{CIIGSLibraries}ORCACLib" {Objects} LinkIIGS {Objects} -t $b6 -lib "{CIIGSLibraries}ORCACLib" -o "{ObjDir}{App}" "{ObjDir}" "{SrcDir}" .c.o .c cciigs -o "{DepDir}{Default}.c" pp> Booter.makeTEXTMPS TEXTMPS *J Monaco$OBB̽*BBpp>Z>MPSR NʘF TEXTMPS E// // SideClick Booter Toggle Plugin // Written by Eric Shepherd // // This sample module may be used as the basis for your own code; // this module (but not SideClick itself) is public domain code. // #include #include #include #include #include #include #include #pragma rtl #pragma lint -1 #pragma optimize -1 unsigned int userID; // Our Memory Manager user ID pascal word RequestProcedure(word reqCode, long dataIn, Pointerpp>main.cTEXTMPS !TEXTMPS BVJ Monaco+`_1 _1 BVO_1 _1 Opp>b>MPSR NDGHIJKLMN dataOut); void InstallMenuItem(CMClickInfoRec *itemRecPtr); void HandleMenuItem(unsigned int itemID); char *myRequestString = "\pSideClick~Booter~"; #define restartID 1 #define shutdownID 2 OSShutDownRecGS shutdownRec; // The template for our menu items MenuItemTemplate restartItemTemplate = { 0, // version (always 0) restartID, // item ID (SideClick will change this) 0, 0, // key equivalents (none) 0, // checkmark character (none) 0, // item flags 0 // reference to item's name string, we'll set this later }; MenuItemTemplate shutdownItemTemplate = { 0, // version (always 0) shutdownID, // item ID (SideClick will change this) 0, 0, // key equivalents (none) 0, // checkmark character (none) 0, // item flags 0 // reference to item's name string, we'll set this later }; CMMenuItemRec restartItemRec = { 0, 0, // reserved pointer fields CM_CURRENT_VERSION, // the SideClick version information 0, // our user ID (filled in later) restartID, // our item's ID NULL // the menu item template (filled in later) }; CMMenuItemRec shutdownItemRec = { 0, 0, // reserved pointer fields CM_CURRENT_VERSION, // the SideClick version information 0, // our user ID (filled in later) shutdownID, // our item's ID NULL // the menu item template (filled in later) }; // // main // // Install the request procedure. // int main(void) { VersionRecGS verRec; // Make sure this is System 6.0.1 or later verRec.pCount = 1; GetVersionGS(&verRec); if ((verRec.version & 0x7FFF) < 0x0402) { return 1; } userID = MMStartUp(); AcceptRequests(myRequestString, userID, RequestProcedure); return 0; } // // InstallMenuItem // // Called when we receive notification that the menu is about to draw. // void InstallMenuItem(CMClickInfoRec *itemRecPtr) { restartItemTemplate.itemTitleRef = (Ref) "\pRestart Computer"; shutdownItemTemplate.itemTitleRef = (Ref) "\pShut Down Computer"; restartItemRec.itemTemplate = &restartItemTemplate; shutdownItemRec.itemTemplate = &shutdownItemTemplate; restartItemRec.userID = userID; shutdownItemRec.userID = userID; SendRequest(tellContextMenuAddItem, sendToName, (long) cmRequestString, (long) &restartItemRec, NULL); SendRequest(tellContextMenuAddItem, sendToName, (long) cmRequestString, (long) &shutdownItemRec, NULL); } char *shutDownMessage = "33/Are you sure you want to shut down? " "You will lose any unsaved work./#2/^#3"; char *restartMessage = "33/Are you sure you want to restart? " "You will lose any unsaved work./#2/^#3"; // // HandleMenuItem // // Handle a selected menu item; called when one of our items are selected. // itemID is the item number selected. // // In this case, we have two items, so we handle them differently. // void HandleMenuItem(unsigned int itemID) { int b = 1; char *message; shutdownRec.pCount = 1; switch (itemID) { case restartID: shutdownRec.shutdownFlag = 1; message = restartMessage; break; case shutdownID: shutdownRec.shutdownFlag = 0; message = shutDownMessage; break; } if (WindStatus()) { b = AlertWindow(awButtonLayout, NULL, (Ref) message); } else { b=0; } if (!b) { OSShutDownGS(&shutdownRec); } } // // RequestProcedure // // Receives requests from SideClick and responds as appropriate. // #pragma databank 1 #pragma toolparms 1 pascal word RequestProcedure(word reqCode, long dataIn, Pointer dataOut) { word result = 0; switch(reqCode) { case contextMenuSaysClicked: InstallMenuItem((CMClickInfoRec *) dataIn); result = 0x8000; break; case contextMenuSaysItemSelected: HandleMenuItem(dataIn); result = 0x8000; break; case contextMenuSaysNeverMind: // We ignore this notification break; } return result; } #pragma toolparms 0 #pragma databank 0 O6$%*B BOOTER.MAKE>MAIN.C FINDERCONTEXTv ' 1'*A.DS.STOREQT! PWFC.MAKEWT6PVMAIN.CZa; 5PRSTUVBud1akeIlocblFC.makeIlocblob!main.cIlocblobZ!  @ @ @ @ EDSDB ` @ @ @XTEXTMPS Y# File: FinderContext.make # Target: FinderContext # Created: Wednesday, October 20, 2004 11:51:30 AM App = FinderContext SrcDir = : ObjDir = : Sources = "{SrcDir}main.c" Objects = "{ObjDir}main.c.o" "{App}" "{ObjDir}{App}" "{ObjDir}{App}" "{CIIGSLibraries}ORCACLib" {Objects} LinkIIGS {Objects} -t $b6 -lib "{CIIGSLibraries}ORCACLib" -o "{ObjDir}{App}" "{ObjDir}" "{SrcDir}" .c.o .c cciigs -o "{DepDir}{Default}.c" pp> MenuBar.make"TEXTMPS TEXTMPS L J MonacoP P ?11P P pp>1>MPSR N]uTEXTMPS \// // SideClick Finder Commands Plugin // Written by Eric Shepherd // // This sample module may be used as the basis for your own code; // this module (but not SideClick itself) is public domain code. // #include #include #include #include #include #include #include #include #include #include #pragma rtl #pragma lint -1 #pragma optimize -1 #define RELEASE(p) if (p) { free((p)); } unsigned int upp>main.cTEXTMPS $TEXTMPS eJ Monaco22B  $22 $pp>Qj>MPSR N ([^_`abcdefghijserID; // Our Memory Manager user ID int showFlag; // Set to 1 to show menu bar, 0 to hide it pascal word RequestProcedure(word reqCode, long dataIn, Pointer dataOut); void InstallMenuItem(CMClickInfoRec *itemRecPtr); void HandleMenuItem(unsigned int itemID); void SelectFinderItem(unsigned int item); void BuildMenuItem(int count, char *verb, char *buf); void *AddMenuItem(char *itemText, int itemID); void CleanUp(void); char *myRequestString = "\pSideClick~FinderContext~"; // // main // // Install the request procedure. // int main(void) { VersionRecGS verRec; // Make sure this is System 6.0.1 or later verRec.pCount = 1; GetVersionGS(&verRec); if ((verRec.version & 0x7FFF) < 0x0402) { return 1; } userID = MMStartUp(); AcceptRequests(myRequestString, userID, RequestProcedure); return 0; } // // BuildMenuItem // // Given a verb and a count, constructs a menu item string // for passing to SideClick. // void BuildMenuItem(int count, char *verb, char *buf) { sprintf(buf+1, "%s %d item", verb, count); if (count > 1) { strcat(buf+1, "s..."); } else { strcat(buf+1, "..."); } buf[0] = strlen(buf+1); } // // AddMenuItem // // Adds a menu item given a string and an item ID. Returns a pointer // to the memory allocated for the menu item template and the // context menu item record; this buffer needs to be freed when // the context menu closes. // void *AddMenuItem(char *itemText, int itemID) { CMMenuItemRec *menuItemRec; MenuItemTemplate *menuBarItemTemplate; menuItemRec = (CMMenuItemRec *) calloc(sizeof(CMMenuItemRec) + sizeof(MenuItemTemplate), 1); menuBarItemTemplate = (MenuItemTemplate *) (((char *) menuItemRec)+sizeof(CMMenuItemRec)); menuItemRec->version = CM_CURRENT_VERSION; menuBarItemTemplate->itemTitleRef = (Ref) itemText; menuBarItemTemplate->itemID = itemID; // Make items whose string starts with a '-' disabled if (itemText[1] == '-') { menuBarItemTemplate->itemFlag = itemDisabled; } else { menuBarItemTemplate->itemFlag = 0; } menuItemRec->itemTemplate = menuBarItemTemplate; menuItemRec->userID = userID; menuItemRec->itemID = itemID; SendRequest(tellContextMenuAddItem, sendToName, (long) cmRequestString, (long) menuItemRec, NULL); return menuItemRec; } #define infoID 1 #define duplicateID 2 #define validateID 3 #define putAwayID 4 #define verifyID 5 #define ejectID 6 char infoItemString[32]; char duplicateItemString[32]; char validateItemString[32]; char putAwayItemString[32]; char verifyItemString[32]; char ejectItemString[32]; void *infoPtr; void *duplicatePtr; void *validatePtr; void *putAwayPtr; void *ejectPtr; void *verifyPtr; void *dividerPtr; // // InstallMenuItem // // Called when we receive notification that the menu is about to draw. // void InstallMenuItem(CMClickInfoRec *itemRecPtr) { unsigned int count; unsigned int *ip; unsigned int flag; // If no Finder string list, we don't need to add ourselves if (!itemRecPtr->version || !itemRecPtr->stringListHandle) { return; } ip = (unsigned int *) *(itemRecPtr->stringListHandle); count = ip[0]; // Get the number of icons infoPtr = NULL; if (!(GetMItemFlag(finderItemIconInfo) & itemDisabled)) { BuildMenuItem(count, "Icon Info for", infoItemString); infoPtr = AddMenuItem(infoItemString, infoID); } duplicatePtr = NULL; if (!(GetMItemFlag(finderItemDuplicate) & itemDisabled)) { BuildMenuItem(count, "Duplicate", duplicateItemString); duplicatePtr = AddMenuItem(duplicateItemString, duplicateID); } validatePtr = NULL; if (!(GetMItemFlag(finderItemValidate) & itemDisabled)) { BuildMenuItem(count, "Validate", validateItemString); validatePtr = AddMenuItem(validateItemString, validateID); } putAwayPtr = NULL; if (!(GetMItemFlag(finderItemPutAway) & itemDisabled)) { BuildMenuItem(count, "Put Away", putAwayItemString); putAwayPtr = AddMenuItem(putAwayItemString, putAwayID); } verifyPtr = NULL; if (!(GetMItemFlag(finderItemVerify) & itemDisabled)) { BuildMenuItem(count, "Verify", verifyItemString); verifyPtr = AddMenuItem(verifyItemString, verifyID); } ejectPtr = NULL; if (!(GetMItemFlag(finderItemEject) & itemDisabled)) { BuildMenuItem(count, "Eject", ejectItemString); ejectPtr = AddMenuItem(ejectItemString, ejectID); } dividerPtr = AddMenuItem("\p-", 99); } tellFinderMItemSelectedIn itemSelRec; // // SelectFinderItem // // Sends a tellFinderMItemSelected for the specified menu item. // void SelectFinderItem(unsigned int item) { itemSelRec.menuItemID = item; itemSelRec.modifiers = 0; itemSelRec.flags = 0; SendRequest(tellFinderMItemSelected, sendToName+stopAfterOne, (long) NAME_OF_FINDER, (long) &itemSelRec, NULL); } // // CleanUp // // Cleans up our memory allocations. We need to call this after either // handling a menu command OR after receiving the nevermind request. // void CleanUp(void) { RELEASE(duplicatePtr); RELEASE(validatePtr); RELEASE(infoPtr); RELEASE(putAwayPtr); RELEASE(ejectPtr); RELEASE(verifyPtr); } // // HandleMenuItem // // Handle a selected menu item; called when one of our items are selected. // itemID is the item number selected. // void HandleMenuItem(unsigned int itemID) { unsigned int finderItem = 0; switch (itemID) { case duplicateID: finderItem = finderItemDuplicate; break; case validateID: finderItem = finderItemValidate; break; case infoID: finderItem = finderItemIconInfo; break; case putAwayID: finderItem = finderItemPutAway; break; case ejectID: finderItem = finderItemEject; break; case verifyID: finderItem = finderItemVerify; break; } SelectFinderItem(finderItem); CleanUp(); } // // RequestProcedure // // Receives requests from SideClick and responds as appropriate. // #pragma databank 1 #pragma toolparms 1 pascal word RequestProcedure(word reqCode, long dataIn, Pointer dataOut) { word result = 0; switch(reqCode) { case contextMenuSaysClicked: InstallMenuItem((CMClickInfoRec *) dataIn); result = 0x8000; break; case contextMenuSaysItemSelected: HandleMenuItem(dataIn); result = 0x8000; break; case contextMenuSaysNeverMind: CleanUp(); break; } return result; } #pragma toolparms 0 #pragma databank 0 MENUBARv ' 1'*A.DS.STORElT!T!kVMAIN.Cr a; a; k\MENUBAR.MAKE|Tx!1kmnopqBud1%  @ @ @ @ E%DSDB` @ @ @ue TEXTMPS t// // SideClick MenuBar Toggle Plugin // Written by Eric Shepherd // // This sample module may be used as the basis for your own code; // this module (but not SideClick itself) is public domain code. // #include #include #include #include #include #include #pragma rtl #pragma lint -1 #pragma optimize -1 unsigned int userID; // Our Memory Manager user ID int showFlag; // Set to 1 to show menu bar, 0 to hide it pascal word RequestPrpp>main.cTEXTMPS $TEXTMPS eJ Monaco*`_1 _1 ; ;_1 _1 pp>">MPSR Nsvwxyz{ocedure(word reqCode, long dataIn, Pointer dataOut); void InstallMenuItem(CMClickInfoRec *itemRecPtr); void HandleMenuItem(unsigned int itemID); char *myRequestString = "\pSideClick~MenuBar~"; // The template for our menu item MenuItemTemplate menuBarItemTemplate = { 0, // version (always 0) 1, // item ID (SideClick will change this) 0, 0, // key equivalents (none) 0, // checkmark character (none) 0, // item flags 0 // reference to item's name string, we'll set this later }; CMMenuItemRec menuItemRec = { 0, 0, // reserved pointer fields CM_CURRENT_VERSION, // the SideClick version information 0, // our user ID (filled in later) 1, // our item's ID NULL // the menu item template (filled in later) }; // // main // // Install the request procedure. // int main(void) { VersionRecGS verRec; // Make sure this is System 6.0.1 or later verRec.pCount = 1; GetVersionGS(&verRec); if ((verRec.version & 0x7FFF) < 0x0402) { return 1; } userID = MMStartUp(); AcceptRequests(myRequestString, userID, RequestProcedure); return 0; } // // InstallMenuItem // // Called when we receive notification that the menu is about to draw. // void InstallMenuItem(CMClickInfoRec *itemRecPtr) { MenuBarRecHndl menuBarHand; unsigned int flags; menuBarHand = GetSysBar(); flags = (**menuBarHand).ctlFlag; if (flags & 0x80) { showFlag = 1; menuBarItemTemplate.itemTitleRef = (Ref) "\pShow Menu Bar"; } else { showFlag = 0; menuBarItemTemplate.itemTitleRef = (Ref) "\pHide Menu Bar"; } menuItemRec.itemTemplate = &menuBarItemTemplate; menuItemRec.userID = userID; SendRequest(tellContextMenuAddItem, sendToName, (long) cmRequestString, (long) &menuItemRec, NULL); } // // HandleMenuItem // // Handle a selected menu item; called when one of our items are selected. // itemID is the item number selected. // // Since we only have one item, we can ignore itemID safely. // void HandleMenuItem(unsigned int itemID) { if (showFlag) { ShowMenuBar(); } else { HideMenuBar(); } } // // RequestProcedure // // Receives requests from SideClick and responds as appropriate. // #pragma databank 1 #pragma toolparms 1 pascal word RequestProcedure(word reqCode, long dataIn, Pointer dataOut) { word result = 0; switch(reqCode) { case contextMenuSaysClicked: InstallMenuItem((CMClickInfoRec *) dataIn); result = 0x8000; break; case contextMenuSaysItemSelected: HandleMenuItem(dataIn); result = 0x8000; break; case contextMenuSaysNeverMind: // We ignore this notification break; } return result; } #pragma toolparms 0 #pragma databank 0 }TEXTMPS ~# File: MenuBar.make # Target: MenuBar # Created: Wednesday, October 20, 2004 11:51:30 AM App = MenuBar SrcDir = : ObjDir = : Sources = "{SrcDir}main.c" Objects = "{ObjDir}main.c.o" "{App}" "{ObjDir}{App}" "{ObjDir}{App}" "{CIIGSLibraries}ORCACLib" {Objects} LinkIIGS {Objects} -t $b6 -lib "{CIIGSLibraries}ORCACLib" -o "{ObjDir}{App}" "{ObjDir}" "{SrcDir}" .c.o .c cciigs -o "{DepDir}{Default}.c" pp> MenuBar.make"TEXTMPS TEXTMPS L J MonacoGBB̽L BBpp>,!>MPSR N-|TIMEv ' 1'VMAIN.C a !1YTIME.MAKEU!1G TEXTMPS // // SideClick Time Plugin // Written by Eric Shepherd // // This sample module may be used as the basis for your own code; // this module (but not SideClick itself) is public domain code. // // This sample simply displays a disabled item containing the date // and time in the menu. // #include #include #include #include #include #include #include #include #include #include #pragma rtl #pragma linpp>main.cTEXTMPS 'TEXTMPS GJ Monaco*0[[Ƚ   I[[ Ipp>>MPSR Nt -1 #pragma optimize -1 unsigned int userID; // Our Memory Manager user ID time_t theTime; char timeBuffer[64]; pascal word RequestProcedure(word reqCode, long dataIn, Pointer dataOut); void InstallMenuItem(CMClickInfoRec *itemRecPtr); char *myRequestString = "\pSideClick~Time~"; // The template for our menu item MenuItemTemplate menuBarItemTemplate = { 0, // version (always 0) 1, // item ID (SideClick will change this) 0, 0, // key equivalents (none) 0, // checkmark character (none) 0x80, // item flags (disabled) 0 // reference to item's name string, we'll set this later }; CMMenuItemRec menuItemRec = { 0, 0, // reserved pointer fields CM_CURRENT_VERSION, // the SideClick version information 0, // our user ID (filled in later) 1, // our item's ID NULL // the menu item template (filled in later) }; // // main // // Install the request procedure. // int main(void) { VersionRecGS verRec; // Make sure this is System 6.0.1 or later verRec.pCount = 1; GetVersionGS(&verRec); if ((verRec.version & 0x7FFF) < 0x0402) { return 1; } userID = MMStartUp(); AcceptRequests(myRequestString, userID, RequestProcedure); return 0; } // // InstallMenuItem // // Called when we receive notification that the menu is about to draw. // void InstallMenuItem(CMClickInfoRec *itemRecPtr) { char *ts; int len; time(&theTime); ts = ctime(&theTime); len = strlen(ts) - 1; memcpy((void *) &(timeBuffer[1]), (void *) ts, len); timeBuffer[0] = len; menuBarItemTemplate.itemTitleRef = (Ref) timeBuffer; menuItemRec.itemTemplate = &menuBarItemTemplate; menuItemRec.userID = userID; SendRequest(tellContextMenuAddItem, sendToName, (long) cmRequestString, (long) &menuItemRec, NULL); } // // RequestProcedure // // Receives requests from SideClick and responds as appropriate. // #pragma databank 1 #pragma toolparms 1 pascal word RequestProcedure(word reqCode, long dataIn, Pointer dataOut) { word result = 0; switch(reqCode) { case contextMenuSaysClicked: InstallMenuItem((CMClickInfoRec *) dataIn); result = 0x8000; break; case contextMenuSaysItemSelected: result = 0x8000; // We don't do anything for this break; case contextMenuSaysNeverMind: // We ignore this notification break; } return result; } #pragma toolparms 0 #pragma databank 0 TEXTMPS # File: Time.make # Target: Time # Created: Wednesday, October 20, 2004 11:51:30 AM App = Time SrcDir = : ObjDir = : Sources = "{SrcDir}main.c" Objects = "{ObjDir}main.c.o" "{App}" "{ObjDir}{App}" "{ObjDir}{App}" "{CIIGSLibraries}ORCACLib" {Objects} LinkIIGS {Objects} -t $b6 -lib "{CIIGSLibraries}ORCACLib" -o "{ObjDir}{App}" "{ObjDir}" "{SrcDir}" .c.o .c cciigs -o "{DepDir}{Default}.c" pp> Time.makeTEXTMPS TEXTMPS J Monaco.`BB̽BBpp>ab>MPSR N WORDCOUNTv ' 1'*A.DS.STOREa a VMAIN.C a0 !1^WORDCOUNT.MAKEa޻!1FINDER.DATAɣR p Bud1%  @ @ @ @ E%DSDB` @ @ @ TEXTMPS // // SideClick WordCount Toggle Plugin // Written by Eric Shepherd // // This sample module may be used as the basis for your own code; // this module (but not SideClick itself) is public domain code. // #include #include #include #include #include #include #include #include #include #include #pragma rtl #pragma lint -1 #pragma optimize -1 unsigned int userID; // Our Memory Manager user IDpp>main.cTEXTMPS +TEXTMPS 'J Monaco- g g 㽫' g g pp>>MPSR Np CtlRecHndl teH; // The TextEdit control pascal word RequestProcedure(word reqCode, long dataIn, Pointer dataOut); void InstallMenuItem(CMClickInfoRec *itemRecPtr); void HandleMenuItem(unsigned int itemID); char *myRequestString = "\pSideClick~WordCount~"; // The template for our menu item MenuItemTemplate menuItemTemplate = { 0, // version (always 0) 1, // item ID (SideClick will change this) 0, 0, // key equivalents (none) 0, // checkmark character (none) 0, // item flags 0 // reference to item's name string, we'll set this later }; CMMenuItemRec menuItemRec = { 0, 0, // reserved pointer fields CM_CURRENT_VERSION, // the SideClick version information 0, // our user ID (filled in later) 1, // our item's ID NULL // the menu item template (filled in later) }; // // main // // Install the request procedure. // int main(void) { VersionRecGS verRec; // Make sure this is System 6.0.1 or later verRec.pCount = 1; GetVersionGS(&verRec); if ((verRec.version & 0x7FFF) < 0x0402) { return 1; } userID = MMStartUp(); AcceptRequests(myRequestString, userID, RequestProcedure); return 0; } // // InstallMenuItem // // Called when we receive notification that the menu is about to draw. // void InstallMenuItem(CMClickInfoRec *itemRecPtr) { teH = itemRecPtr->control; if (teH) { if ((*teH)->ctlProc == (LongProcPtr) editTextControl) { menuItemTemplate.itemTitleRef = (Ref) "\pWord Count"; menuItemRec.itemTemplate = &menuItemTemplate; menuItemRec.userID = userID; SendRequest(tellContextMenuAddItem, sendToName, (long) cmRequestString, (long) &menuItemRec, NULL); } } } char message[256]; char *wordPlural = "s"; char *linePlural = "s"; char *charPlural = "s"; // // HandleMenuItem // // Handle a selected menu item; called when one of our items are selected. // itemID is the item number selected. // void HandleMenuItem(unsigned int itemID) { TEInfoRec infoRec; Handle textHandle; char *textPtr; unsigned long textLength; unsigned long wordCount; unsigned long i; int lastCharWordBreak = 0; TEGetTextInfo((Ptr) &infoRec, 6, (Handle) teH); // Get info about the TextEdit record textLength = TEGetText(0x19, (Ref) &textHandle, 0, 0, NULL, (Handle) teH); wordCount = 0; HLock(textHandle); textPtr = *textHandle; for (i=0; i': case '<': case '[': case ']': case '{': case '}': if (!lastCharWordBreak) { wordCount++; } lastCharWordBreak = 1; break; default: lastCharWordBreak = 0; if (i == textLength-1) { wordCount++; } break; } } HUnlock(textHandle); DisposeHandle(textHandle); if (wordCount == 1) { wordPlural[0] = 0; } else { wordPlural[0] = 's'; } if (infoRec.charCount == 1) { charPlural[0] = 0; } else { charPlural[0] = 's'; } if (infoRec.lineCount == 1) { linePlural[0] = 0; } else { linePlural[0] = 's'; } sprintf(message, "43/This document contains %ld character%s, %ld word%s, and %ld line%s, " "and uses %ld bytes of memory./^#0", infoRec.charCount, charPlural, wordCount, wordPlural, infoRec.lineCount, linePlural, infoRec.totalMemory); AlertWindow(awButtonLayout, NULL, (Ref) message); } // // RequestProcedure // // Receives requests from SideClick and responds as appropriate. // #pragma databank 1 #pragma toolparms 1 pascal word RequestProcedure(word reqCode, long dataIn, Pointer dataOut) { word result = 0; switch(reqCode) { case contextMenuSaysClicked: InstallMenuItem((CMClickInfoRec *) dataIn); result = 0x8000; break; case contextMenuSaysItemSelected: HandleMenuItem(dataIn); result = 0x8000; break; case contextMenuSaysNeverMind: // We ignore this notification break; } return result; } #pragma toolparms 0 #pragma databank 0 TEXTMPS # File: WordCount.make # Target: WordCount # Created: Wednesday, October 20, 2004 11:51:30 AM App = WordCount SrcDir = : ObjDir = : Sources = "{SrcDir}main.c" Objects = "{ObjDir}main.c.o" "{App}" "{ObjDir}{App}" "{ObjDir}{App}" "{CIIGSLibraries}ORCACLib" {Objects} LinkIIGS {Objects} -t $b6 -lib "{CIIGSLibraries}ORCACLib" -o "{ObjDir}{App}" "{ObjDir}" "{SrcDir}" .c.o .c cciigs -o "{DepDir}{Default}.c" pp>WordCount.makeWTEXTMPS TEXTMPS BJ Monaco*KBB̽BBBpp>>MPSR NhY@$(*BMAIN.C.WORDCOUNT.MAKE:E,$Y*5 WORDCOUNTBBOOTER FINDERCONTEXTMENUBAR 5BTIME %PDF-1.3 % 2 0 obj << /Length 4 0 R /Filter /FlateDecode >> stream xڥXMsH+8U2_ 1nyXJrqU b- +oπlm"xu{{;D " B2B@+OCs35@MFܫgs ?gdBQ0Kxo8O?P>@Y4 0[?fs8>_=|k7w0.fbXLy&u^ьr"k^KC)< /2x6 i>OS*$Oxz'm)o+8l\F ؇Ut ]e"#x) f6 SMґi] |^jȋZW$E6$Yf^KW~ԛd +]l&En]ЫEBFQ 2($MKD}G (]@,ۅ.^h]9dU_aH~l$">:JڹN҅kԠp)%8`\\9Prfⱝ6U#ovp<9$m^[7Ѽ~O(l|@iAK pvdz/WUdodQ*<`< px-嶉犋r9MQ7Uhw208"rJ|֨zk"6EyޒcS9s2M7a)ŕAN6F)I8QмT/xHصd&Y;Pq, 듂^{4Km/eY7[ vw9r%,N'8<6q7Ϥ{v I+6vUc,[ՌF}FW)P ޔkr`H ͼZYp\=-7tt_:7e=u`qN#.Ml<}YSiQ.X/r ݯ'hԕ<G|%֪#]CMGHqvH~¸ vK͹er2rZ8BBģd`]jE\^rN6y !_۽) i?'cNc']PPC ҵknXL٢E{¹ZWɛ8:bR%pm0_mEb܏vݺJBbtR,da4P}Ѭͥi^nԬn:mOڋ`!THzć&W:oT!ǝ0ܦ_Y#67%eL§HndӺ zIX8[Pn^m&nMjoʷ3%)'ox ҄777urͳ}E>vۗ$?c endstream endobj 4 0 obj 1730 endobj 1 0 obj << /Type /Page /Parent 10 0 R /Resources 3 0 R /Contents 2 0 R /MediaBox [0 0 612 792] >> endobj 3 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 5 0 R >> /ExtGState << /Gs1 11 0 R /Gs2 12 0 R >> /Font << /F3.0 8 0 R /F2.0 7 0 R /F4.0 9 0 R /F1.0 6 0 R >> >> endobj 11 0 obj << /Type /ExtGState /AAPL:AA false >> endobj 12 0 obj << /Type /ExtGState /AAPL:AA true >> endobj 13 0 obj << /Length 14 0 R /N 1 /Alternate /DeviceGray /Filter /FlateDecode >> stream xڕSMkQ3V܄*tE0~,icAǙd$U7nDn@.pQFQ(_~(t)*ޙνuuMY/ Lj;dTs3Bmtޒ۩ ֹ|]HROk,px\sEf?!:t|04VjU0̸ֿзaK#kIzE~uܞ0-9R쌢eLc VtBr=MQqN`<9't_aX 1/ofy!%)_N/V}*8')3 oծf-G~;$Nmb4G* "ء *,A/fET္06uLIe]z*n_/<`UQf ǝOcˤ&p BJQpxG {mj {Xu>9}+uC=C2nGjZ٘W{~};o6z8lÕ33rlۉjQ endstream endobj 14 0 obj 631 endobj 5 0 obj [ /ICCBased 13 0 R ] endobj 16 0 obj << /Length 18 0 R /Filter /FlateDecode >> stream xڥX[o6~ׯ8zAԅRyٖkm0P$&"H%5Yrp,|W _3H)D $̠'4MVû (ž䌸ogo'g89!'ei)~N-ߥaAQÏSlA Iôw?nY)#L)FlG":0 BPtm^AZԍ{|%K1dqty䍬ILD!m6H207092b˫O@atX,82Z>0҅Kvy&yUi6r,: ;eec[[wü"Ƴq硏^Ԑ?ʯ+qp)f5ѶyQ?ga:xT l cx0oIЖ h\5Z# Crpm'u=S0ʈDa(SB(ׁH֍ jX. v18\vնGfћumsU-SeGM7(pa\ÞFa;88dXۘ0ei0>%Uمu F!pfOu{̹ވ̱,ό% !XF/K7[xEQFS]U珐v,Eї*k(Cxt)(S_Efҭ9BJu>w2rf(\TQ~szhF6.k'.&3K=̏3QVs4}b"o׬ZKH2lV~AH=L !ٜp{"_\| r%ˈmXbai9x 6@rrniR(|1O*s ǭ.\Pl/WO(N"9j=ѕ$aF1+Ei]" 8v6?,)gt;Rz-jΝ]vmn6.GK>wdI|'G)*aĬUW]"GP>^ضZtA*eN(؄tŒ%$ sn>[..o,hD"[(n z}Fen#mFU (0ۼ mW̔l3@+L ԪkU3  'Cm_Z U?lG ?E5~XΒQNg?=0a7f}WkHJna'`3* pU'z4ħKkϮlfnd3 endstream endobj 18 0 obj 1529 endobj 15 0 obj << /Type /Page /Parent 10 0 R /Resources 17 0 R /Contents 16 0 R /MediaBox [0 0 612 792] >> endobj 17 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 5 0 R >> /ExtGState << /Gs1 11 0 R /Gs2 12 0 R >> /Font << /F3.0 8 0 R /F2.0 7 0 R /F4.0 9 0 R /F1.0 6 0 R >> >> endobj 20 0 obj << /Length 22 0 R /Filter /FlateDecode >> stream xڥX[s8~W}h:$6Ozfm3 ${$0pR>%v@]QG.^ORë)5Pбy>zQ?qq<~A&<` wԼA7sn >Poބ8 8S| jIDP1=Qz[NTH-{"/`%6M4K㯓6bgl!>i BjNvL-Q2<:`Z+ Q/sv2daj#ֲ^:UosK#^h=>?ׁ7`У4WZVc62;>d[XtsqP"NH0LYRX!Ջqir~(cR҄ tSFY֨AC+ $V:~/cR!m6LzeqDt gx>\l1Iow/> endobj 21 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 5 0 R >> /ExtGState << /Gs1 11 0 R /Gs2 12 0 R >> /Font << /F3.0 8 0 R /F2.0 7 0 R /F4.0 9 0 R /F1.0 6 0 R >> >> endobj 24 0 obj << /Length 26 0 R /Filter /FlateDecode >> stream xڥXr6}WLb q!}?3 d.|hB/7tXC54tB!ŗ߮?^-ϫC<}6Cx'*RmI~U--9 DI1BXNKc662FNjEE@ *y8;.CU-$|]YTEwŮǍFߞ$9ܧ]bDZ$*mnO򀱐}H 0+vFcd`&:>C(~6!NcGZ($9(=|5@ ? .@lTY;;/ܣ~8ccYS/#zZ8+WH I]E@Ԗ9=@o%T\yUik I}v%wdtڱIԫXvvNgP/J7Kse77׊6QS3,;̦-l&Yb3S(ٟS5rN+)E iKp͈A/=fDC|gE7(M҆ӵ OexNwU{_ =8 ^!:%Ks+!U\%JNetWU|L,7[Ƅc7?^6q]3'jFjsNq(50cjwknqS]i~[AG(ܠ1zMrVis6`^6sf'݇{2X٤3T#=%,ɵ]_iH^T6]#Jgfd:5,!UJi9S"rwgRd^: d|(_ʛ\bp5rsB Ɖɒwjc_\ߣ9*_7K/A)Vw9|0˩Z0}X %1~?!l3 ؕVk86=-eܖֽ~+^]4L.$PT M'Rb^;ޙȌ;`+by6c{bɴ1ѽҴx4/"1H\fW:n=CLȉ^j>&Hq?}[mT6쎿ߚXs4DI:j 0&K-m a1? endstream endobj 26 0 obj 1650 endobj 23 0 obj << /Type /Page /Parent 10 0 R /Resources 25 0 R /Contents 24 0 R /MediaBox [0 0 612 792] >> endobj 25 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 5 0 R >> /ExtGState << /Gs1 11 0 R /Gs2 12 0 R >> /Font << /F3.0 8 0 R /F2.0 7 0 R /F4.0 9 0 R /F1.0 6 0 R >> >> endobj 28 0 obj << /Length 30 0 R /Filter /FlateDecode >> stream xڕ[o0G*/7&f4l`lͷP )"9wp$ % wh?Y{{[XP"&lF/wq/ɌPȘ3, Nsû%Ew 30!%-D _BaSZ._Gu׵.ALa 2FxoU>(DD$)e!N^=M,'_Dڻ S I'N?j[Unإ?xq$ sTOrF9NUI(c18數=.ɍ> endobj 29 0 obj << /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 5 0 R >> /ExtGState << /Gs1 11 0 R /Gs2 12 0 R >> /Font << /F3.0 8 0 R /F5.0 31 0 R /F6.0 32 0 R /F2.0 7 0 R >> >> endobj 10 0 obj << /Type /Pages /MediaBox [0 0 612 792] /Count 5 /Kids [ 1 0 R 15 0 R 19 0 R 23 0 R 27 0 R ] >> endobj 33 0 obj << /Type /Catalog /Pages 10 0 R >> endobj 34 0 obj << /Length 35 0 R /Length1 20612 /Filter /FlateDecode >> stream x|y|U9.}sld@Dd5ED嵈HT\B"mq RZѦ.mkZ 7̽29<3sB(!DMn#"ip"'~7N̹q5vB'DEW-e[4) W]{eQ=ʯ2sguzBF UGy X(^{Y?!Qiᬛ)ۄG F{ݬs{Km@9ʋ_T֦p߲膹nh9=>:J< "9{\kw?DAKT hy@<53+!_F줜8Prv>? 0(1' $)RA$C$G*I&5CH=$1vR!&+ȭg>@ޥ&J;:6i[M_B/E:r9F $#c;ar8-7gtP,̼}-I;?x8 0uMi>귈N?}yY&O [о~K:"{p2̖G*2[ W{«Xy.&"$OEwMd{c`'[/@|RɴdLXAnO?Rgt`6ЅuOzFGl-;rf+*/,+#[Ss<pؚJ$"J %ox3c2 !7O"KDG(yA emZ&*}Qn1VD)Z;?A`E=9[].*ji/5n<6,#Y;6cʹY( aXm/+8=Ri:ҤK4ZEM4 P0MҮK'^2~jsD<ze6+%ZM);¢sG8IDXWg!v}wDcco9dX3adW(oVj}ŌiY-fB86D U6͐wIݲUVUV*adZ`X4mUmUleT;NYKqGeg4>KQsa:迧W.,fceX]%~gy^-%Kom?Z̻i+ 2QP*Jci~1NRYljuՖ:ս/vY]ÖwCRd$,P.:N iԺ|y~g@/WFU+2gHGwA3qxEUdctfX9kfG?|#WPϬa7O?z]orߖgQDqFZ`Erp勲(MmZ,=WBK~+v-]w3.eܢEZVLXc]vay~rյ5ٳ9lspkz}s`shG`Gw9wzx]pLmTrEDp"Drf O}8ct~+*>:蒵]kYzUW_uYݟ̜;?ɵt5knfoVvμ͙M?\9{loS+X XeXPѠ$=.O8.CŠ BvKPqC'zcJ|Z0F2mL9^|EI IҤU-31MruӦ^{gTzřZJFTss_އmnʵ 3!*v.J{>Z3J#Tp{>u<7QSE(H&Lbזe˓1lNZ1 tiy S\PCЇxlb&uFCM4\rl"1+/MՒI\gS툘]TO5d~iE ~ZS}M8)LH ]/J:wE}D V:U^ Ys)}?,^c`7wWo< YU^1G Eptw?~z&< F}c*Ig>_iUe'jtZrR79_Fh$Y52=L PN,Ъ,t,3G:g*N}̲?+Ps0 %55BX0 ?K` o3[@k=P 魊&m?W]O9ό Gnl45ʠW4t%zFTDݨL5HUC!)Е%[4I):5TU!>QܛH Ea00gC2G%\hf|GhG|y{B=E?j˦< k$.}ybQo~浾m)RrW~Rl=Z-*mIˉ|:N"a.v^L(2K$ƝQ:Np8%\Oe3\`0_Qku[Lh+UrbC.g1uBi5i$-0 wurh"ď`0_cou [:@I}Z0MIT (Ŕ^ e:!4 5WCZ][\υ]/+ ݮf ըJ=UaNnLePYӥU6:pM)74h ë=-zs={z?ci)5w4y5 j@_ =P'_jN[s2VύJXxRrC@ luk~ 7_+yϼPP{+ x /uiݐ7wu5xeNeo;{VYmYGh"-HRT9 %͍ƞnf9^Hc6^抿403?ԾwZtuWf gY0B15=LI uQ!;&2&L0S;YLoi}%h *UU! |,^Ц[4vMA[4hLUtה: ih\>߹֓AMM(wͥqZ9_}]/*LDg±5ӎgԔ~ =ps >k7_4veez%ݺ?!.P,W(VJݪl&]R{j" tl`p+h+}Y^&o(f^wଙVXzG=͚M0m` mj"?eKӡ@ϸ;:ӟL i/<4py#a^ōT#6V /IrIJk5ʨfIvsEcB) K+T_.iHL )!lO73 ţ cc\>D[rMFlC d Si9Y8;,x"6YN J8~ֽZ _}}{2;zjĸ ?( iJøk%Gڹs96qF~W %OzuQgMO8-h`ZUAoxGG5wæ۲fK?u]#77ģTKņ2{I}Q;g_VssκKVVכ4q6/ȮȮϊ:/7h"w*bam g+.~Ai;(S T($n +Qt`qWr gdd,D r*ի~4yqӟKhڥ\g|{@sc&:9am{˕Ԛ][.Z}4jn5vl{ꞧkp9h|1h6i\>2i/5/`/)7$su]~EOze< S+ѫaVϐH*%*%idE3F"7 !TBk>}T,ԩH gADU!F6 X^㵨6.wMzA,4]! d::MFJ :Zbǚ@q~ &C #oʽ짣ʧ ~?%ҮG 5i`/'KJ K͘tCCn<=rR]3%qR\8^2͆rX9._3K/O3%6we/y}#:([YWV{$mQG"^m%R^qf/vaϙv/~p!`VoUdUSB'D}$G§U+Ɖ**ut\>!NE& i5Vɯ{߲a4zQ)h]~8.o9jܛghcC,wxG&3yXQ7 wk<ݜq1Ql 1oѠ0^M2ˬ?ͭ9pVϬɒ{LX,I#쐍QhۗK*W, ]GMD$&9&1|`jUK}oFf1t|ji--+~,ۡqte鋞M^ɖuORkɷz7SĿ& ƃF1iDR᱓Hl<00Ey~q3חRNtP1f>fε>+\7)j|ߋ $YtZFCt[w$_ ,UbՕUΥΕTϩv8Kݶo*))uT:8ɺ++z0|0ԚI֧dF&=ݽ[jݽ|w׋ :Z8$U|;mS;"̺i^qӈkL'7cgJ>O`(^rPHmx.~Zzb[?,s ɐ'ґK!2R !}+h@y览R̩@^CF|Fm%2 $T< =YnAA\FBx_)L d\qߎ{5qZ(FbB69oy&__]zJe,rHeao Z/_FѕX0h|/ջtL}<>oDɃ| @} x!{]6"FuG(E0֊I; مم'|(Dߘ*.` LEMuIpJ Q :efH^Q3tK}[QWt{uOxZug uV=@[NWƖR90$zwlC+ 2lэ͕X |ȝB. 0k(RuwKm- &-1WD&K^p|<fùcT .+v4șX{G,>O-eϦcd8sc0AaNO=Ѳ+y[/֊oj_g_^l\B BzyW 5P~>۝fHE&iصC@kAz2r(g7 #0BUVb<5 %&!h8D@Y`.a x#ٕ`>=.tpP}RsvKzշ?8C~+E5tpܦvh47(*Z+W8{Yr̸dƓͣZ+gG[́@Nf@n֑7G"邠(gTEȷhO~w0iG:9:L~5!ÙqL#fAۥ(@߉5mQY;}f{r?\g>S+DI:F_}5sh"txՔohm>3se+NHd3ArKsq688-ۀ}jLX=h8 e7u~~_NAlt/?>M;I(4 "]9 Fq}=Fi];$=ur,ܯPIB@jb2o>j$_5aUd$BI$'"}V=m#hglMy$ LA M|U=Q'RC2g1v 5̺\ FF-h5cL0H>l$%L i~$jyK ,xAՃ'._&6?9 */h~=H4=.E^vIƩ.eRf+&'BH%H}22a=ƨLߴ~7 :2ɶ>GDM;5b7EdZ^n NMJFs* QUd,sGT N잕EWVLǀ,҆)?L3kf&2ˠkhbH~-f=Ys"$W=VJO_Cw 46kAh$s!pLNF])*І O1 m-9$kKf0 w%ZkQO X]OOПӛӳ#}_IS[n2/DŽ"0x[{xrؘ)ơ1`eڐjw d`(j6UF,B슆uV-7GBjÜg`9}JuՙL.BQ ld|O*2AL9<tPbг"z Z ij&>*^Q3تi}FF*JQWJ^Gkcژ %>dZ 4U\/stfWT<4SuP1E|8;:TLq7[@=q/?{TEN,_)kUetbjlmmzimF/F՝%Q2fgw<`P39kW >rt O?44l}a8}؀A@ Bv M I)@SMNL!/hg%3K}K鋧| ?sfFÑap8Ώ*GL#+c-nGWAm5= `0 ޓ̖Ymm/ɷ ϭ=p>8m*Ae ǀ `y_/"y9$k:BtF{|zL oS8wՐE?z!"0¨X#@V%q](1.E9b$ɿSA!r`5 iH`+ߗ i!?wbip ;&mDbzg^gSx~eWȻlGF.{,b6쎇.[$bS~D]-l|D,7W ͌tA٢ʹ$nА"Z ?0a()Px93m]+Q=9.uLr.ecᜍzafQonpےYYP 7Ӆ,Yu]$Td'nOZZs؃]wͧᠯDo9 cj{ƴ3é 68&?j@&slM^ 7DN46"W `J~۷I~I;$4z1#0^r }LQ!#m-Yeu܈q\MVGc=N"H{fO,a=g">O/o/Dphj֘ٶ\Ϳt~HC (HB%8PRf 週ZԾ~ ~B@o'soX+j^.șSv؃< G'LET06 J9f#Uwʸ^1- v(~݁f*FQKHjV!f* >Y VQ}Dq-χpN8HY@Ig/ݑl~0W8cbU&#ik eHC܁>%VR2&SC%O$WL( 3oV2!B?XZᎱ?;@$wCh}R@/ir9dx 0a_U &TѳPK3 K>lr-nLrks~=r/ vtNx6j=|I nveʤ^ ~!8U"t(9=/!\92*\u,2@`gr'7d #^+5@>/s}Kж<,;]q PđNeu,2fUNC!瘽=;^`Ymc*fJ@Bf zMԊZVENι]TCz̳amZQTOt,<P)*-lw?R%RuȒ5C* W|I'~ɴE viqbF"z֟h<]I92YRT%?'s/IєOwݽݣ<^y]Fesz̵ak.bXi Gvu\* xQ .HI-wl"za87KD]OoĻagCYKd޹#hYˈ{ e}#_hݨ+ c\3"oጐ\~5le~9^Lz.3w'hK +, 7?Zl@ct*R9oGz 8JȏGRL#!|cؘ.GE"ށ0؟ZNӋes|ⳣb׋tba>Qd5k~r BOl&FjN*d{W& ).5*S_RsVO{TnsÆ*+5ӳ̿z-]eeQ~yimt7q1z8Er ,% ASX9Ƿ'F\솫@b7ɿY h!_a)5!/4PG"2d<X I2XSTX r9:|Vpmf'YՈ<';:a"ϋ%w'OyEǿoI7#xͻ./;5CVE6oyǹok>1?+^% !euuGy݌C5:?x}kE__&/QwXb^"2""fyQZDl-YH>Y!Ndx<>ڏ/kXH|x>>y>|{'{sxaO=|.,/J"ne1yO<)i;y<"AƉqH~Y^$g!8el? 2"yfzlmLr! ) {=:r'zː7ɟ7최&@9-x"xd%a'+Ex{7—wXi~1_Z2(kH/GY&CVe>w+:c >{k't Wa|Q5Js9fAYZo]y3T>8 t.oS9ffp oYen> endobj 37 0 obj [ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] endobj 8 0 obj << /Type /Font /Subtype /TrueType /BaseFont /PKNDKK+Courier /FontDescriptor 36 0 R /Widths 37 0 R /FirstChar 32 /LastChar 126 /Encoding /MacRomanEncoding >> endobj 38 0 obj [ 278 722 722 722 722 722 722 722 722 722 722 722 278 722 278 722 722 722 722 722 722 722 722 722 722 722 333 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 667 722 722 722 722 722 722 722 556 722 556 611 556 333 611 611 278 722 556 278 889 611 611 611 722 389 556 333 611 722 778 722 556 ] endobj 31 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Helvetica-BoldOblique /Widths 38 0 R /FirstChar 32 /LastChar 121 /Encoding /MacRomanEncoding >> endobj 39 0 obj << /Length 40 0 R /Length1 15056 /Filter /FlateDecode >> stream xڽ{y`Tչ9sgd/$!$h}* ‹ D",.,R( "V,K5϶?-0;I@?;gwmfFP3bPdݓ;]~f2 GY0gE}Ӄ7!m¦9O=7 G(ʼg]"4*IKC> yp)Lq#z*x:B]Mo(`ih3zo8O/Û!.v-gǀaTw5= 8_?heނh4`I1n{#t8*4ނKDRG+f,s6pyeޣzНh)Z ؝@*f`.'b\݌wx>L}҆k#*b"dL7|f ;;v8G]ܗ|@8>#>{R@D>ؙ24ݍ /kpîu|q{,oʰ\!DAtBdAfr43&La~9\ck`Ml;m`;e;"n875s L w_o;o? ^ai_|8C?A3q9nQ+p,(60*&zuZ3w]2mpBaː0.J(N qj1NV)%(2*Ӽil_]I1i^3ic?'HX-A% ~oO_ގ^#ןj|:ہy+:*VL+G̠#t4byV(vyE_.1:ƍ(w|]uFf| 'zL5?h͘Fk`wit.]z_aYFV>HXu9o ^k0.(O;_A-v(ey qQm]=bO/@:m8l]]gޖy-}Չ$?8=kJgwBCP!\М 3L <y -(TieVPX!Bϟ3hCJ7zW`(.gϣX[+n6% ؑ7z\[Q1:`>{FQ0]0AYm~9 HA-+[ WR^z[GjVz3٭@ u@'tw Tgy<4'fsqJX('Fq8ys4}V= `~…7Sx0@[(Sx (\|k Ŕ(<{.)·eKPpŭ)\ 0WP WQ{Sx Ў)<5 S0N)<µ7Q6kq0H@#>Ä$ql61G}3\R+RRҒX M9:.i1z߸cWGDٚkN-L['19A(̰aVSt7nr5yc.2&pٞeZy`@cga>b`؊_Қtַ̗}St2 Na0Yو&1Z7ZkT[lO07xb6p( h粫mnTbV6{tK>w8q@vC c@CÎI2P-h>j&8 :m(仱ōMZg^ȪP-Z|$>n}秱}W]^-dftiPfČi(i a4 ckJb== ., MF^hp&a3iR.Sݞ?#6;oDB s-[wIʦf|Dm';Nc$x}}o9sbbn`s&aGq~DŲrHRhbE@˿ :;3WZ "0ay:/b& 8Ŭ3 $o[6؞_/M&=[vL{Pu8vpD72 [AThl$EpqcD[R*R' ȦDoK?BT+\K쪬rLחp;}}3~ZW-ie ~+B+%eO?yKt.og]ej͢k}%*D!DDV]T*Ű&/kҒlYOާ2u\?}:ƞ%}uiq: &Y_[K?"hQ("90nmxހ~/ǣA``c6 d\ǜ3g$VbdaǓmTiL&DRK3(UzeJUΈZ0J>$ ) ZKEE^',EzKڦjUulI['!L W2ƮnenjX/mXb)0I7h6۰ /c16p2>{;v-^:kaBfᧃ?'h 7B^P\=s+8|`r`g72z41>)7R([IN <34a@H̹ګ Z,גҘ^"_7@NE+ 2ƽx=l1[L qP3U^^:lN~ݻE3&MFϺ,X0he\"7]Sck6#\iJ&}d# 4{9xdj8) 5J=Uc zcp:cލŠ8BkMʞ0.0倗 q;qw_9M{BF,,UxRd+& e ^rUx4)gLZ/HoS)mN9W\O1gVfCf^ڔI(H&Y OH<.JTQUGc."2e(.7+^7Z6 l";"a$ !&%DIBRR$驊BigYJٲJ+;KWiOb08FPa jI˭Yn\Y%1հA T1lc>cb|kg &i:=qml'|Hڣ,6=CXq"0DPH DdXm# `Q@أ gXLC7Ve)J8 d:580"`匊&!k;wjhͱ2YDD<$bT> I3_XDJ8KrpbRkNt-(n-.re)@Y"8B8mo}#b6xx+xK{@PBmVOV eZ8ؔ- |vk/ &>dwY|p Cb#!.Rdq1 kpЄ^?<pOE ȕY:yyfN]MGV>^r{XʭK6cG7%cLN^vf k]ƤMxkgu6g2ìUeH=D^cgl;t`/d8/8d1M8,.NInRi v=KH&wXCt$Ձ SϪ77^$Xؠp&%&z0SDj~c{+Ǖ++M<VNf|'~9(׬_>{̶d]^9>;ّdֽb%vȻpX!=fBDgwI!boDIMOQѭH} -| _9I$")Т|Ү]rݴ[G?g؎ 3ٻ]_~$ PhHEU H`MffD#Irr ,J.ː v2d=-e7ý[ alUnNȐow+=Eo?)Ԛ-hA+vڵ{p넜aT{Ư~ !G[f̫ C{/v!NXi&>ca8 I&>d"F1lǣo0[)LJG_[+ON]"KIav`2+6!8lpr6I%4$WR ns6&{Ͳɖ0'{͒ Y%9F-˫Ɏ "W] DJ&]dJ yKВBq`5윢|0TL)k=;rskn}; (SG^٪{&_8꥗O6V?5Ωc+>؊?I N8tdA5tK.'j^/@ iԺE/4 \7ڬ뾹(P-f#TyKoQ ~/ҥX6esl]B7^Iz%deqN&˜9*MH=<rڲsn: {(.}SJ{mO{?VRڠ T;d:Ƈ4*u!GJCt%>CT)tgQp@jKO'!uh#ELUǯa._ެ l~3lpy6^judӤOk '5Ί:ykdJeMd-E !hP !L*IVl #bboF"+BT1'u5]qBawn7@2Wru;N>\ /8/Yg!mX`h$ݱY5bӮ玽+ ]Df*޹5T lDo=ddڅ#}_F4ͻb# }*Dk#ł(h$hXBbDhmrRHv&,.5` R* wàqtLV-ꛙr4X 7zdpe(KW7qXgdP)%/pl{jsT|[~Q5T]VA+mf"$C2(Vpsu@&AAKGX@SCM2k!`1>05 d;a~mΘ#nyۧX~Nڽu;_b.a,:NFxDlPנd,Oc!ש.k\Ne ,]_89O+ y]Qjw rb2lc졄8ONK4:?ykOъȝ?lGSmNqWo?hY;9qdjIK[.p}Jy$>x p!jku/u(]^3.Ҭ3MF{&oiڇãR# [Ѩ/F 9KNlV`+>,to[3q̙_:v})L|gE Xi#S ˫L\O?G//Yz% n Hڟťk.0Fi adҘCf6[ڰ #G$+Ij-7|`5cДv=#B<7%~nsbAF\rrl4~|r2zjdh( fS0*8Vj3K v;S`?W0G{^--)N.u T !G~^j#As79!~+4mڙ燥Lz򡝞O%(olvW$ EA{XI;[ǮNosR7Rd`tmSwq8L^69074|gXH7\sw}l J( ,(K5BH=) a=ð(yΡ1 t)Yß`7N?_x<~?}};3F j*썬bRlaZŵ;yK8-%V* |e$6JMʵBRϒ*f9Z1Sͩpb\>`ë^«;E했[NMMi>\(@)6R\6>7ZhTRY>8o},V Ж_rxQQ3Z -Pvɒ%`:HR 3|qWы=s0Su 3/}|9T4E"|߆_/&6;ނصxS'$>)>R!N'G{ urfm㶛Yfm5m6[ivT[Tj/1I.QC *~QEphF_|lI%!(x@A:>F KIgFA)I.y&mh#rkr"}/h&!73ҫPog@}sdB]? }(4xR#P1C UN(AZO50 zc T,s*8xcv3ԕL@@餉]h5z x(+"fsĎa?fY]B*!(~*5J' G_T+UWԵw4%͕ڠYgu.Wj.ZD*-+R9chʤqSFIq3˼(_[qi|8H*Q N x!(eT `4rT*DE@$4աz4 :HLRH YaOv'!Ac zH@bj ƏubnBv<*d=wm|ns󞏬_6Fc[)n4 y(WxB4ڇCj9:y7q  "7!7enNωPnhE<]{5&pϵг;:=hTYꙕ+%;=E0>)y \<١I'%?I CnWEh( Dixgg`T݃#CFSsQ2RX5\ xPw yB:*C0zQ+jD("𧝥(ޏJ,udHD$|i]ZZ\"Xy@K#LH:Q57ZKuEU6{y}Yc um> endobj 42 0 obj [ 278 722 355 722 722 722 722 191 333 333 722 722 278 333 278 722 722 556 722 722 722 722 722 722 722 722 278 278 722 722 722 722 722 667 722 722 722 667 611 722 722 278 722 722 722 833 722 722 722 722 722 667 611 722 722 944 722 667 722 722 722 722 722 722 722 556 556 500 556 556 278 556 556 222 722 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 1000 722 722 722 722 722 722 722 722 722 722 722 722 500 500 ] endobj 7 0 obj << /Type /Font /Subtype /TrueType /BaseFont /ZVPZCL+Helvetica /FontDescriptor 41 0 R /Widths 42 0 R /FirstChar 32 /LastChar 223 /Encoding /MacRomanEncoding >> endobj 43 0 obj [ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] endobj 32 0 obj << /Type /Font /Subtype /Type1 /BaseFont /Courier-BoldOblique /Widths 43 0 R /FirstChar 77 /LastChar 121 /Encoding /MacRomanEncoding >> endobj 44 0 obj << /Length 45 0 R /Length1 13032 /Filter /FlateDecode >> stream xz|Tյ眙dd&3$L&d2?dD@$(Z_RK^ڔ(xԧy}ԋ^X[x)Z!6ܵLޟdZ{}^k]kO@l2ݴEw^sG6KV|cM}߸uނ'j/]|S$R$"ukڥ+,[/;pN^v]+ |rl?nZ3?0aǽbUӰ}KWZuf<ƀH | m IGʗ*ZhtåO RL2e` X6;TA5`N~ Hp=$`Bb)b}Ķ5p0A%Hj 318" ֱ9`=% ~g{ą6\ßp$HK~`}0^.q+7q:X'.M13 /HȺΰYf O/߃Dz/=LϋK-ì=pm| V.^-Nv `[FӃ#zCI-l(m8<͸X FioRm e& R>bw| OD//YK]UhgK}o6̊Y_ ](y( VUh[k/D] !N-vlD;l13rRz {X!\8[1jW)AXwTxpd9D=LGPpz4}x8H\2DCãCýAy*|Wha}˟sΈV2+2>2"ޫ | % ?@уhXŒmb'CcPS^eⱷ^|C/֟'((MLF#q<C+,A2Ū/Mq0&|mV TK-b3Z\pKԐg[nj)&V8)T%J h`H6X1u&pƣk0q♁dIt?T*#,(7._|9V+.Ju$:q>{!>ׇvv^8{ߺ Q-)J:%f%]S+vMʟz&jls 8t oa xDۮqZ (j,a8Uбل".q+0m$>|FD/-* $ՄJk 8s &o5aG$Nw\؊!vUboR&@MxJP{!0a$^<Ռ(ǪCfN򢱑C:O!HZX}K_||=1Ȥ@k[SsyK>Vd7IXWu)N3a⌶yهnV[ZOESzz:u}h%ellvf".{MS$A\V(5v[VVYhsYXCOmhoq ,4Shԃz2a-Ss=6%=#DkO&:vRGNڽRa0 dR!o-ĄrQ-us=5!ߴ/װ* Fוk*/E_#J5e>1FDɵfxzmhz2w# _T<9uH/5{+ʑX _Gʄt"kCt~{ 8Q۸z43K2b`Bp1lL*uwlnh|ƮXJA⮼q"a6;XY5?~WgCihʃmڎ֤%؝ݔ~ב/=츮XiuX-nH(qN9 45;eD5vQ+,LfV@057涗;"0P% _.V;2G.}.I&1{u9ŜVŻpE6C1~3"h+. oYyVxL|j,w8:gP3Tbn@ll:}+rLL([>eH.AF~Y?9)kج3V_9yw21}eV-o[. ]&jֻ䦅$Geԏó op[ M"0EP=Ty.xR>)zQ-zUJ8_N|ta.:ePDzh2ĮprR 7n\hƇwYF?~lB McL '~xۭa)DLgKp| NPwp_fJ"l7E Tͧ"*9.L:ZWR5 aGyV׭vvm\6MK<VMyctƆ=[.0A+D@NeQ8q3^ۑu_0oeu^f٘%p= df@wɪ+S %TddW2(ЖwvGMNp۪,lu੦JYM㳲uap x8!yd(w+AGfNG_u>lWGxUGi[Uc}0VzM}}0QS$~I?J`w/$g}^QE!QtϙlԚ;]h1!TPė4n 73%j.+S'NUin?-]*Aݍ:Q!lUZd \iQDA&/oz96u8DcꌛxΡyHa|޼y?z/1])_lqWn}/^G{ׅ~:Id<{ƥɪnT)к]tw=ZXG֬y;>e۟Qf~G?QN4yyL9$8~"12BɚsMrqX_Qcpi.f;G)!ؑv).rMa֫6at'akZlVpx0ϑ\68D '/lK3 f] )6r~6hoO}\isۚWl*gdg<ޙÄ6-\VE: 4تTmwѩ2OcMmUl,0[$z4t4j몮 " _C6?5H^+㹺/]6D x+*ӓ*[6m٩3) ģ]%N,_M}w~hՙ&`5.N9MUXASzP+ MosO[2}.+&82@TW"+GX_$(Ӷ-a@Ş˦{ꙅ*qpmp[rd \z*Up>`8hk&6 9IB9ra0& 8Eͪ"Os7OkGҍS: Er3ǾM͕?gy4Wb/q@[V;Bw!ҞC_@YnU5VɟStǙPZxg:(AԎ H ;};Xs31Yk- Q{z.XY@ׇXi|`7m /G_o|׉@1̯.s z9o,MX˯{x9b>Vq63**S/jD:8vVL]a#,CcZ7c0M1#X.4S`'Mӝ1%0KEQe{AxRWHZ]&yqQP]Pq*T"+\Ky"cVF=D(`..?F7+|?=%o׈%ogDhʨ&/g4?ǧ\"pOӳmD ’?hM K?FUe?MH="樫HPQ9*Rr+fu>9 ?As'h"E:"4s c#O E(F_]NUm|+Z=瞥R@@ qηh5bѵ}-MGY7恁Vv&jܯSgwϼxd3 1kA/źoK_zַayhp֦Y5Xo߾SuQ?u//CXwzb} 簾sQGgec68#_t0PXQE3o1#)l:fw8!.>]nO|)~47Ðn"az_Υ D‘~HәAb?{N$$jB?ɃwIIw@ xs{P$`5<N(aEdEh'(8BxK"  ۈv%(Ux/HrS,a=섽C$Hc G 8* \c")$l%Upo7f5Ͱ WFMgY _s- U)'K/oc2Qd&$ϓȟTN鷘N m2' op" 4" [||ZIGG]26ҋ!C{´2:fx ="dE6D"_x `a91YA_dt} X<^GI#]d3RA*6y %RSYԍT; zSGK{T:'FN?OeBflfcّ Tac/\m^U|H&R(݉u&kS5~x'8Oh)' Y<x556RJ$/ΕR.1=-՟&yܮĄ8nẔ&!FjXdVzܽ)mL&K{۱^76U]?ݦ s_?Rđa)^I (tWzݽ'*: WxݽJ^)oP:,{<>KܕU]{**p}2ay^ݾr3yDe[QV(}treކ MqOsVf/=;1CϹqhc9Gμ7$6K7Rmƌ^׶SR}tRU=Uͽ5j\kk8-uOsS/9JB{tJmW-ۆCCSStVz*{!:JV>#<ʾ29?_m?yH;浍Wp!J1Hf{[׋˷bQLpsѽ&i]5qCͭS;ʛq|[a8. ^wwu}KP l+"] 0rvl}]CuccEV3kCnhE!' иn YTrXĆtp*J wgw{6ӜMlBX`RWlRhnd0<=8ܡ*3aYJihԻ"WhFQB54B>57+br}aHsn:L9p枞h=#h=Dġ( !AZ){$Y4#\x-PA_p/A8@y£9¥"," e" £?p%\!#\C:k9cEx,R;FA_p/A!<4n!<1VFb@9J\' @2 4M9@R+gd(3|_Ro@iIDNrVХዣBL! ,Vmԋ46K;gzeʎϠX.4Y|{8Kz t_ *FMeR-SN`N]WY롴 ԶQȋ9^O]S&pϓ߰$]* Eѐ"ƒTZi't_Y>| ձgɑYYfR@6]l?v ]+)-*b*b[6[%Eg\tq ;CDKFFY`5SU ͽߘy>u~u~C?nɁE ["0 )$R7e4we؋SsX'fh&AYD6R'px&PLb ƲOx w[osJ?#l<{IW@1 mA( :,u!,L{s˞^N|AUitHF`86D}jlvܾȞ50`g :msVR_ZRb sPŰ+ lCq̑lP f#ĿnCI G+QB吮гigI/Q1 .R4M;`طY|yD/v[x!?Rt* E.ghI" j#! ~SP>aS0'"CxRR4H%%CՄ$*o^B`6R"eKkax&sX:0f-ę ; ܴ1;%5+s1zKmv{ŴGGTTs\S,f Y>cc a^ѼGo~&G"T2MʜjȦ*r%NOLQy~Jt֍S9KCt&<1nI'Q5!(pqS@dsxĜIO8|?~79EJ{txjs{ I]: A;Qo<|pAw"c?pڌpa?+6ڌadp;$dJD@G!ZT{3ʓ(b8tZ]ˆ!jR4仟J򶰇d9MSǢN5ƨ),F*8-$`r-!rnˮXQ,jI$2Y9Yf^ )([ },}|Iz޺[~Pzq~EلxU/#H 樨(x§H 4TJS˫jF{ӸZi Kgsk^yDQ"7jKz-{cj:{xpa/bl_ h(x(V!p879Y,Fkx(>6Ι*u$$*~o|c⚿ ~NzE+CҸIw_^P89Gܲ!bx8bl[,mnNҧY4C%ՙn)v<{SEOY1z0jd*9Ia٧2r4Sα?cW= o@#wX$z9p 61 AM9! 7=8fuc,f PH }Zwm5m$nbQIܲ䁪_KOO^+>>P+y7ڳWI'z Fz/=mSޑg|L1x=oG^P,j SJ"M}T2گ&Q͡=mWk _/Ke_ iT-*h a?ې?m+qV-2jE:*8lg* )D!.tČl#A_}$8ftt1UwQu~7߬9ODHKDěI6GH 8eP4R) !bYt{͎zKܫױ 7INN8MR5sO4yP=0}TY/t(y85pԞ5O|87'PVmcA\NC'19z%DE^%œM8қҍv.0(W/07FNHO~uB{):>^:-L~2-joS6 Bht~^r-_cSubV3yu0 9+"0C`7jFo҂g5j,k)gRKp'iaܐ8{1zld1*E"95ueh7ow7 J_@Y-x]Twp7gR.-{hq݆k[y)@'@baKii{ԢSp%:y^j}fM!@-VlS3:PRld$2O"SS.oæp)mPyr;6?sxI~>~v):0rXuw.nޔՋ⟈ ەLw / b9-zӖ@g9!'h,3Źh?t9:Gk- _Q2ʕ–VdS~c$_fjVbbSQx5St>5Ӌ{yZ^\nLjd8rT܄8PTГJ&.YK RδR.+ٟ̋_d:]+ze5|?EUTeM 7WI>M$&S~ug͂GjFz7$˞ )-g򺓃~x㗛]0mlȑqo'˷UUyˈZ:jG^,姚fxA`X;^4TSHQ+-(C"Q$TaY ?Y?ɩMU5#~8t_=aZmTGvǕyTuZCvi4p~£L5t"GSN %1G/-|Ij|ܻD=E}J11*A=]>z@2{L.FuZQqv.aR,.ns:f#C_Wg-7®c֨GU24ZͰ,0*"ϱ&.b8J-04'&W#jC4|"R‰吤D1rlX/o>&l c *9FFZxhyg5]ZCvH]9ViZx&9BzF^P"d1= =aJeD#C$ȱL,8\VEeB/dLs a`-?iϑ[zW>ӮܓQ^\8kZJA9(6|I >az0c)-i1wȞ6| Py9?b\MI [(B:]hc*:69g/m(9eVWM웳<݆i)̙ve(wĦyĢ ԞQu ƄP3Ǐjw2c}bQ~C[V_>Z1%LHf#&3 b(è\\ PvKCg{ޖNһ -=iu"Dm=iEYGI\NGu)ۘ坩TMTuuڦѬn5>nWQө gtҼEhTO + 仅P+WRWx}Eh~վwھo,Wd(\)MdlP*ƊiX|n XCu3sŹ~XS,~'Rh͕u]^|Uu4.Y@RSrψ1`ÿ*N*G OToa ӂ}@Tj8r)-rJ ;sae18 ~ZeU':"hvMl\e V1-HitM<>̴CdxKqh5hj1jO&mZ 5:33M<̌k}o득ZHɂ GV5NJjTҨON(֛PxQJpȿ>8U1#3ԉN*E!'#gaɓ~I|GIK;p̮X'ڊS'4݉wwдKKj);=6Ӹ,VZ8ّ51'{w{d*9.P?kKQ0T޻[hb9ܛѲ8wJA>66J!-6zL9f2:1[:bhq8^';ui8Ic^W93ڳo7sg2J@بh z>yS l WhRQHE8׏_~o zQD(̎B c\G}wTzhϏm}]eqm/ZwJ/D=pG(fknݭd vgR\A"j\y_5,D\~e: Wm2](ЧP]6w]!I-ƺܾ:WΟ},=DvIM Ȁmf A4r5LdewML6`uwMjQr>'\51MIb&O >O=|"ǛU&AWiUJT@eE>3d5s9(e%ߩűkW4[=~m$>Z;wgBso\$4gk~xm\q)ʷLmvͶv:lCє3fy{G2oGEyo{W㔟"w7z+vIM}bdʚq׭Z5?3Y> endobj 51 0 obj [ 278 722 722 722 722 722 722 238 722 722 722 722 278 722 278 722 556 556 556 722 722 722 722 722 722 722 333 722 722 722 722 722 722 722 722 722 722 667 722 722 722 278 556 722 722 722 722 778 667 722 722 667 611 722 667 722 722 722 722 722 722 722 722 722 722 556 611 556 611 556 722 611 611 278 722 556 278 889 611 611 611 722 389 556 333 611 722 722 556 556 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 722 611 ] endobj 6 0 obj << /Type /Font /Subtype /TrueType /BaseFont /BNDWBM+Helvetica-Bold /FontDescriptor 50 0 R /Widths 51 0 R /FirstChar 32 /LastChar 222 /Encoding /MacRomanEncoding >> endobj 52 0 obj << /Author (Eric Shepherd) /Creator (TextEdit) /CreationDate (D:20110720144519-04'00') /ModDate (D:20110720144519-04'00') /Producer (Mac OS X 10.4.11 Quartz PDFContext) /Title (SideClickAPISpecs.rtf) >> endobj xref 0 53 0000000000 00000 n 0000001846 00000 n 0000000022 00000 n 0000001951 00000 n 0000001826 00000 n 0000002988 00000 n 0000056302 00000 n 0000036595 00000 n 0000024434 00000 n 0000046124 00000 n 0000009717 00000 n 0000002126 00000 n 0000002180 00000 n 0000002233 00000 n 0000002968 00000 n 0000004650 00000 n 0000003024 00000 n 0000004758 00000 n 0000004629 00000 n 0000006483 00000 n 0000004934 00000 n 0000006591 00000 n 0000006462 00000 n 0000008514 00000 n 0000006767 00000 n 0000008622 00000 n 0000008493 00000 n 0000009431 00000 n 0000008798 00000 n 0000009539 00000 n 0000009411 00000 n 0000024986 00000 n 0000036969 00000 n 0000009829 00000 n 0000009880 00000 n 0000023790 00000 n 0000023812 00000 n 0000024034 00000 n 0000024606 00000 n 0000025140 00000 n 0000035557 00000 n 0000035579 00000 n 0000035806 00000 n 0000036769 00000 n 0000037121 00000 n 0000045628 00000 n 0000045649 00000 n 0000045876 00000 n 0000046301 00000 n 0000055265 00000 n 0000055286 00000 n 0000055518 00000 n 0000056481 00000 n trailer << /Size 53 /Root 33 0 R /Info 52 0 R /ID [ <518e81ec07cfd5342fb7a0d561d1be61> <518e81ec07cfd5342fb7a0d561d1be61> ] >> startxref 56700 %%EOF  !"#$%&'()*+,-./01234567{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf480 {\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;\f2\fmodern\fcharset77 Courier; \f3\fmodern\fcharset77 Courier-Bold;\f4\fswiss\fcharset77 Helvetica-BoldOblique;\f5\fmodern\fcharset77 Courier-BoldOblique; } {\colortbl;\red255\green255\blue255;} \margl1440\margr1440\vieww9040\viewh14480\viewkind0 \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc \f0\b\fs32 \cf0 SideClick API Specification \fs24 \ \fs32 Version 2.0\ \fs28 July 20, 2011\ by Eric Shepherd \f1\b0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \fs24 \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f0\b\fs28 \cf0 Using SideClick's API \f1\b0\fs24 \ \ SideClick provides a simple interface for adding items to its contextual menu. This is accomplished by querying clients when the user control-clicks. Items are only added to the contextual menu at that time.\ \ When the user control-clicks, SideClick sends out a \f2 contextMenuSaysClicked \f1 message to all interested parties. If an application (or desk accessory, or whatever) decides based on the context of the click that it wishes to add one or more items to the contextual menu, it responds by sending one \f2 tellContextMenuAddItem \f1 request for each item it wishes to add.\ \ The contextual menu only exists for the duration of the user's interaction with it\'d1it's created when the user control-clicks, and is deleted when the user releases the mouse button. This allows the menu to be different with every click, depending on what software is running, or on the context in which the click occurs.\ \ For example, a spelling checker might receive \f2 contextMenuSaysClicked \f1 , and look at the \f2 CMClickInfoRec.control \f1 field to see if the click occurred within a TextEdit control. If so, the spell checker could highlight the word at the cursor position as indicated by \f2 CMClickInfoRec.event.where \f1 , then respond with \f2 tellContextMenuAddItem \f1 to add a "Check Spelling..." option to the contextual menu.\ \ If the spelling checker then receives a \f2 contextMenuSaysItemSelected \f1 message indicating that the "Check Spelling..." option was chosen, it should perform the spell check. If it receives a \f2 contextMenuSaysNeverMind \f1 message, the spell checker knows that it shouldn't check the spelling, and might, for example, restore the previous selection.\ \ \ \f0\b\fs28 Constants \f1\b0\fs24 \ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f3\b\fs28 \cf0 cmRequestString \f1\b0\fs24 \ The string used to send requests to SideClick.\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 #define cmRequestString "\\pSyndicomm~SideClick~" \f1 \ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f3\b\fs28 \cf0 CM_CURRENT_VERSION \f1\b0\fs24 \ Identifies the current version of the SideClick Contextual Menu Manager at compile time.\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 #define CM_CURRENT_VERSION 0x0001\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f1 \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f0\b\fs28 \cf0 IPC Calls Sent to SideClick\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f1\b0\fs24 \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f3\b\fs28 \cf0 askContextMenuAreYouThere\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f1\b0\fs24 \cf0 Asks if SideClick is available. Reports an error if it's not. Typically you won't need to call this, since the only messages you send to SideClick are sent in response to messages it sends to you first. However, it's available if you need it for some reason.\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 #define askContextMenuAreYouThere 0x8100\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f1 \cf0 \ There are no inputs or outputs.\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f3\b\fs28 \cf0 tellContextMenuAddItem \f1\b0\fs24 \ Adds an item to the SideClick menu. Clients should call this in response to the \f2 contextMenuSaysClicked \f1 call if they wish to add items to the contextual menu.\ \ A client may add multiple items if it wishes to do so, by simply sending this request repeatedly. The client may use any flags or other item options it wishes, but may \f0\b not \f1\b0 use keyboard equivalents.\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f0\b \cf0 NOTE: \f1\b0 The \f2 CMMenuItemRec \f1 and \f2 MenuItemTemplate \f1 records \f0\b must \f1\b0 remain in memory for the duration of the context menu's existence. You may delete them from memory once you have received either the \f2 contextMenuSaysItemSelected \f1 or \f2 contextMenuSaysNeverMind \f1 request.\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 #define tellContextMenuAddItem 0x8101\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f1 \cf0 \ The \f2 dataIn \f1 parameter should be a pointer to a structure like this:\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 typedef struct CMMenuItemRec \{\ struct CMMenuItemRec *previous;\ struct CMMenuItemRec *next;\ unsigned int version;\ unsigned int userID;\ unsigned int itemID;\ MenuItemTemplate *itemTemplate;\ \} CMMenuItemRec;\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f1 \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 previous \f1 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li700\fi20\ql\qnatural \cf0 Reserved for use by SideClick.\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 next \f1 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li700\fi20\ql\qnatural \cf0 Reserved for use by SideClick.\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 version \f1 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li700\fi20\ql\qnatural \cf0 The value of \f2 CM_CURRENT_VERSION \f1 corresponding to the version of the record being passed.\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 userID \f1 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li700\fi20\ql\qnatural \cf0 The Memory Manager user ID of the program to receive notification when the item is selected by the user.\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 itemID \f1 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li700\fi20\ql\qnatural \cf0 An ID for the menu item, which must be unique for the specified \f2 userID \f1 ; because SideClick has to assign new menu item IDs to the items as they're added to the contextual menu, it's this ID that will be used to identify the item when it's selected.\ \ A client can add as many items as it wishes to the menu by specifying a unique ID for each item. The combination of user ID and item ID will uniquely identify a given menu item.\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 itemTemplate \f1 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li700\fi20\ql\qnatural \cf0 A pointer to a Menu Manager menu item template for the item to add to the menu. This will be changed by SideClick, and is relied on for the duration\ of the menu's existence, so don't delete it.\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f0\b\fs28 \cf0 IPC Calls Sent By SideClick\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f1\b0\fs24 \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f3\b\fs28 \cf0 contextMenuSaysClicked \f1\b0\fs24 \ Sent by SideClick to every request procedure when the user control-clicks. Clients can respond by adding an item to the contextual menu (using \f2 tellContextMenuAddItem \f1 ) if they wish to do so.\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 #define contextMenuSaysClicked 0x3681\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f1 \cf0 \ The \f2 dataIn \f1 parameter when this is received will be a pointer to a structure like this:\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 typedef struct CMClickInfoRec \{\ unsigned int version;\ EventRecordPtr event;\ WindowPtr window;\ CtlRecHndl control;\ extStringListRec stringListHandle;\ \} CMClickInfoRec;\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f1 \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 version \f1 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li700\fi20\ql\qnatural \cf0 The value of \f2 CM_CURRENT_VERSION \f1 corresponding to the version of the record being passed.\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 event \f1 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li700\fi20\ql\qnatural \cf0 An event that provides information about where (in global coordinates) the mouse was clicked, what keys are held down at the time of the click, and so forth.\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 window \f1 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li700\fi20\ql\qnatural \cf0 A pointer to the window record of the window the mouse was clicked in. \f2 NULL \f1 if the click isn't in a window.\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 control \f1 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li700\fi20\ql\qnatural \cf0 Handle of the control the click occurred in, or \f2 NULL \f1 if it wasn't in a control.\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 stringListHandle \f1 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li700\fi20\ql\qnatural \cf0 Handle of a Finder \f0\b extended \f1\b0 \f2 stringList \f1 , or \f2 NULL \f1 if the click isn't on a\ selection of Finder icons. This field only exists for version 1 and later\ of the record.\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \cf0 \ The recipient can use the passed event, window, control, and icon list information to determine whether or not to add items to the menu, and to make decisions on exactly what items to add.\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f3\b\fs28 \cf0 contextMenuSaysItemSelected \f1\b0\fs24 \ Sent by SideClick when a menu item is selected from the contextual menu. The recipient should act upon the selection as appropriate.\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 #define contextMenuSaysItemSelected 0x3682\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f1 \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 dataIn \f1 contains the item number of the selected menu item (specified by the \f2 itemID \f1 field of the \f2 CMMenuItemRec \f1 when the item was added to the menu).\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f3\b\fs28 \cf0 contextMenuSaysNeverMind \f1\b0\fs24 \ Sent by SideClick when the contextual menu is dismissed without selecting an option, or if an option is selected corresponding to another client.\ \ For example, if your application adds an option to the contextual menu when \f2 contextMenuSaysClicked \f1 is received, but another application's item is selected by the user, your application will receive this message. This allows your application to cancel any special actions you may have taken in preparation for handling the a possible command.\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 #define contextMenuSaysNeverMind 0x3683\ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f1 \cf0 \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f2 \cf0 dataIn \f1 and \f2 dataOut \f1 are not used and should be \f2 NULL \f1 .\ \ \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural \f4\i\b \cf0 Note: Handling \f5 contextMenuSaysNeverMind \f4 is optional. You only need to support it if you need to cancel a pending operation of some kind of the menu is dismissed without selecting one of your menu items, or if you need to free memory or other resources allocated when constructing your menu items.}9:;<=>?@ABCDEFSideClick API Specification Version 2.0 July 20, 2011 by Eric Shepherd Using SideClick's API SideClick provides a simple interface for adding items to its contextual menu. This is accomplished by querying clients when the user control-clicks. Items are only added to the contextual menu at that time. When the user control-clicks, SideClick sends out a contextMenuSaysClicked message to all interested parties. If an application (or desk accessory, or whatever) decides based on the context of the click that it wishes to add one or more items to the contextual menu, it responds by sending one tellContextMenuAddItem request for each item it wishes to add. The contextual menu only exists for the duration of the user's interaction with itit's created when the user control-clicks, and is deleted when the user releases the mouse button. This allows the menu to be different with every click, depending on what software is running, or on the context in which the click occurs. For example, a spelling checker might receive contextMenuSaysClicked, and look at the CMClickInfoRec.control field to see if the click occurred within a TextEdit control. If so, the spell checker could highlight the word at the cursor position as indicated by CMClickInfoRec.event.where, then respond with tellContextMenuAddItem to add a "Check Spelling..." option to the contextual menu. If the spelling checker then receives a contextMenuSaysItemSelected message indicating that the "Check Spelling..." option was chosen, it should perform the spell check. If it receives a contextMenuSaysNeverMind message, the spell checker knows that it shouldn't check the spelling, and might, for example, restore the previous selection. Constants cmRequestString The string used to send requests to SideClick. #define cmRequestString "\pSyndicomm~SideClick~" CM_CURRENT_VERSION Identifies the current version of the SideClick Contextual Menu Manager at compile time. #define CM_CURRENT_VERSION 0x0001 IPC Calls Sent to SideClick askContextMenuAreYouThere Asks if SideClick is available. Reports an error if it's not. Typically you won't need to call this, since the only messages you send to SideClick are sent in response to messages it sends to you first. However, it's available if you need it for some reason. #define askContextMenuAreYouThere 0x8100 There are no inputs or outputs. tellContextMenuAddItem Adds an item to the SideClick menu. Clients should call this in response to the contextMenuSaysClicked call if they wish to add items to the contextual menu. A client may add multiple items if it wishes to do so, by simply sending this request repeatedly. The client may use any flags or other item options it wishes, but may not use keyboard equivalents. NOTE: The CMMenuItemRec and MenuItemTemplate records must remain in memory for the duration of the context menu's existence. You may delete them from memory once you have received either the contextMenuSaysItemSelected or contextMenuSaysNeverMind request. #define tellContextMenuAddItem 0x8101 The dataIn parameter should be a pointer to a structure like this: typedef struct CMMenuItemRec { struct CMMenuItemRec *previous; struct CMMenuItemRec *next; unsigned int version; unsigned int userID; unsigned int itemID; MenuItemTemplate *itemTemplate; } CMMenuItemRec; previous Reserved for use by SideClick. next Reserved for use by SideClick. version The value of CM_CURRENT_VERSION corresponding to the version of the record being passed. userID The Memory Manager user ID of the program to receive notification when the item is selected by the user. itemID An ID for the menu item, which must be unique for the specified userID; because SideClick has to assign new menu item IDs to the items as they're added to the contextual menu, it's this ID that will be used to identify the item when it's selected. A client can add as many items as it wishes to the menu by specifying a unique ID for each item. The combination of user ID and item ID will uniquely identify a given menu item. itemTemplate A pointer to a Menu Manager menu item template for the item to add to the menu. This will be changed by SideClick, and is relied on for the duration of the menu's existence, so don't delete it. IPC Calls Sent By SideClick contextMenuSaysClicked Sent by SideClick to every request procedure when the user control-clicks. Clients can respond by adding an item to the contextual menu (using tellContextMenuAddItem) if they wish to do so. #define contextMenuSaysClicked 0x3681 The dataIn parameter when this is received will be a pointer to a structure like this: typedef struct CMClickInfoRec { unsigned int version; EventRecordPtr event; WindowPtr window; CtlRecHndl control; extStringListRec stringListHandle; } CMClickInfoRec; version The value of CM_CURRENT_VERSION corresponding to the version of the record being passed. event An event that provides information about where (in global coordinates) the mouse was clicked, what keys are held down at the time of the click, and so forth. window A pointer to the window record of the window the mouse was clicked in. NULL if the click isn't in a window. control Handle of the control the click occurred in, or NULL if it wasn't in a control. stringListHandle Handle of a Finder extended stringList, or NULL if the click isn't on a selection of Finder icons. This field only exists for version 1 and later of the record. The recipient can use the passed event, window, control, and icon list information to determine whether or not to add items to the menu, and to make decisions on exactly what items to add. contextMenuSaysItemSelected Sent by SideClick when a menu item is selected from the contextual menu. The recipient should act upon the selection as appropriate. #define contextMenuSaysItemSelected 0x3682 dataIn contains the item number of the selected menu item (specified by the itemID field of the CMMenuItemRec when the item was added to the menu). contextMenuSaysNeverMind Sent by SideClick when the contextual menu is dismissed without selecting an option, or if an option is selected corresponding to another client. For example, if your application adds an option to the contextual menu when contextMenuSaysClicked is received, but another application's item is selected by the user, your application will receive this message. This allows your application to cancel any special actions you may have taken in preparation for handling the a possible command. #define contextMenuSaysNeverMind 0x3683 dataIn and dataOut are not used and should be NULL. Note: Handling contextMenuSaysNeverMind is optional. You only need to support it if you need to cancel a pending operation of some kind of the menu is dismissed without selecting one of your menu items, or if you need to free memory or other resources allocated when constructing your menu items.JB6 pdosZK,C ~ExpressLoadK @,@,7"]i"E"";8  [* {iH" )~z|vxjH"ChHH "ChnhpHHpnHH"H@ "ChtrpnHHtrڅhhhrHHZ"triH"t GhpH).3*a+ZHKLMNOPQRSTUVWXY^pni(Y0[0998:tri(څhhhpni<荂6080''8:tri<څhhhtrH "C66Hkk"C+;i kSyndicomm~SideClick~;8 [  H Hhhv xTxv xvxviڅhhhxvڅh h< xvxviڅhxvڅh  i H HH?"C  +;i k;8 [hid+"L8 H`  +;ik;8 [ %6"C HY"Chxvx *6 H H"C66 H"C +;i k33/SideClick 2.0b2 Copyright 2004-2011 by Eric Shepherd/^#0;8 [hijH"ChIj )@芢ʆ!H)H)hhyH)H)hlhJHH>"Chzh|C I  jl|zH "CH?"C  H?"CH"ChfH iH H"ChH"Ch4 ,H iH HH"Ch##"C"I"6"CH"CHH"Chh HH"C"CH iH H|zH<"Ch "CH"C|zH."Cj " H"Clj+;ik SideClick Apple~Finder~;8 [  dm id 8 pI0JH8*iHiH"ei d+;ik;8 [  E H"C"   H "C"ZR  H "C Hi Hi H  H" )u "C"EHHH@ "Ch#h%%#  BHHH@ "Ch#h%%#%#%#HiH"2IHH%#H"ChhHiHhchch h %#H"C%#HiHheHe" %# H "C%#  H"C+;ik Apple~Finder~ Apple~Finder~ Apple~Finder~ Apple~Finder~;8B [JLNPHH"Ch hPN"C{iH"CHHPN>"Ch+h--+)H)h-+"h)H)h "CeeFF#!!#!i _d%%R (R0::q H 85 e59 7 I8e73R#7;i ? 8= e=A3;7?9i= e=A95&7 I8e73 e59=7?3; e=AH{iH{i3HO"Ch\H{iH{i;HO"Ch: ') e'')i) e'')i)') %% DRCQ+;iPkAbout SideClick...-jl\ h} h  "HH" H }Hk; [       +;ik; ["C+;ik; [HH J     z +;i k; [HH J    z  +;i k; [ f fdd  !& +hhk; [ & dd  !F f+hhkKzZڜ&(kH";i"t"kH h\CkKzhhh ?Zګk"ckK(H&H ;[$55hHHhk֯HH"+hh`"?H"kHH;H" ;[+hhkK k;8 [KH H"u'H H"fd. . V1    )b "i"$  I"9 " " HH" "  )@ H H" H H" ii d  +;i k.V  ;8 [KHH"un)bȷ 8 ȷ  "  HH HH" )d+;ikV ""hhk; [ =+hzzH`; [8""+hhkHH8H; [ȷȷ HH"+hhhhkK..; [  =8+hhzhhZګkK&kiHHHH?H@@H "hh) kHH; [ȗȗȥȥȩ i+zzzzkHHH8H; [  "- % Q8  0 "X "X "-e i @< "X "X   "-Z "X"+;i k; [ ȊwHwhȷ+;ikHiH;8  [  " O$>"ȩȗ na i  U GE "XF e i  "- "-8  0 E  "X) i+;ikH; ["ȿ+hhkHHHHH; ["  ȷݠȷ ȷ+;i k:JJJJkia9'6kyii!; s#) 3 K   y !5$5. v *..VRVVy.1EHKNQTWZ]`cfitx"47MPTW\dvy) 7NY '*t 2$*5>DORUX[^alv, #include #include #include /* Constannts */ #define cmRequestString "\pSyndicomm~SideClick~" #define CM_CURRENT_VERSION 0x0001 /* IPC Calls Sent to SideClick */ #define askContextMenuAreYouThere 0x8100 #define tellContextMenuAddItem 0x8101 /* IPC Calls Sent by SideClick */ #define contextMenuSaysClicked pp> SideClick.hTEXTMPS 4@TEXTMPS 4@J Monaco088?88pp>1>MPSR N^abc 0x3681 #define contextMenuSaysItemSelected 0x3682 #define contextMenuSaysNeverMind 0x3683 /* Finder extended stringList record; the stringList is a word-size count followed by that many of these variable-sized records */ typedef struct extStringListRec { unsigned int offset; // offset to wString field int iconBottom; // Y of the icon's bottom int iconMiddle; // X of the icon's middle int iconText; // half the length of the icon's text int iconHeight; // height of the icon in pixels int iconWidth; // width of the icon in pixels iconObjHandle iconHandle; // handle of the icon's iconObj GSString255 wString; // actually variable-sized } extStringListRec; /* Structures used by tellContextMenuAddItem */ typedef struct CMMenuItemRec { struct CMMenuItemRec *previous; struct CMMenuItemRec *next; unsigned int version; unsigned int userID; unsigned int itemID; MenuItemTemplate *itemTemplate; } CMMenuItemRec; /* Structures used by contextMenuSaysClicked */ typedef struct CMClickInfoRec { unsigned int version; EventRecord *event; WindowPtr window; CtlRecHndl control; Handle stringListHandle; } CMClickInfoRec; #endif /* __SIDECLICK_H__ */ efghijklmnopqK,C ~ExpressLoadK c@,@,7"""";8  [* {iH"? )-H"፱hHH22"፱d+;i k;8 [""u"8ʅH"r  "፱  +;i kSyndicomm~SideClick~;8 [hd"{' 86 zH`KZa  +;ikSideClick~Time~; [  +hhk; [XZ\"+;ik; [HH J     z +;i k; [KHHHH ")Y)U)Q)])ah)ehhh  ikki+;ik; [KHH"  gh 8k9l o r u x 19{d 20{8d }gg+;ikSun Mon Tue Wed Thu Fri SatJan Feb Mar Apr May Jun Jul Aug Sep Oct Nov DecSun Jan 00 00:00:00 1900 8 i H 00`SHQHm" hihkimYikm[kWHUH" hmhoimmikmok8iikSsQqUqXWHUH" hmhomimooHmH "hmhohh8imikokqJJmiikqi,qssHqHd"hqhshhqssHqH" hqhssHqH"hqhshh8iqiksk8icikkHiHQ" hihk_H]H" hmhoimmikmokcHaH<" hmhoimmikmokimeikmgk`KzZڜ kH";ij " ` " kH h\ ; [KEQUY]aeQ kiQU kiU QU:8ikomHH<"hhhhHH<" hqhs8mqmosomomHH<"hhhhHH<" hqhs8mqmosomomHH"hhhhHH" hqhs8mqmosom" +;ikKzh: h< h Zګk;8  [ +;i @k" " && & 8   *8e 8+;i kF L T " j kK H H ;[$ hHHhk֯HH"# +hh`;8  [" '  OJ  e e f f ff`    d Fejf)   +;i@k8 +;ikd8d d 8k""H"k;8 [K QF U Y ] a e kiUY 8iikkkHiHQ"hihkhhi HHQ"hhhhiHH"chhhh   +;i kHH;H" ;[+N hhkK L @ > p r l n f h b d k;8 [KH H"'H H" də  ə Ʌ1    )b " i荍  I "9   " } " HH">  " }  )@ H H"> H H"> ii d  +;i k   ;8 [KHH"n)bqsȷu8swȷuy w" o HH $HH" )d+;ik ""hhk; [ +hzzH`; [8"l"+hhkHH8H; [7ȷ9ȷ HH"+hhhhkK ; [  8+hhzhhZګkK79&;kK0? hh"HHp  8  k@ki菎HHHHH@@H "hh) kHH; [7ȗ9ȗȥȥȩ79 79i+zzzzkHHH8H; [  " % Q8  0 " " "e i @< " "   "Z ""l+;i k; [ ȊwHwhȷ+;ikHiH;8  [  " ;=O$>"_aȩȗ na i  U GE=; "F e i  " "8  0 E ;= ") i+;ikH; [";ȿ=;=+hhkHHHHH; [";=  ȷݠ;ȷ= ȷ+;i k:JJJJk_2@gWfB F H L P T   W v   }   }   /o ?LPSV[bl z|~(-272  /37=BEIX\behknqtz}' #'*.=AEHKNQTW[jnrux{~*  #&-69y?o[e][{Q}G=3)8""E"Ehh&$  &$ s hh"   "  s $"hh   s ,*H$"&$H" H 55VV"H VVY"Eh7968+;i7k43/This document contains %ld character%s, %ld word%s, and %ld line%s, and uses %ld bytes of memory./^#0;8 [hd"{-"I 86 H`  +;ik((>>@@BBSideClick~WordCount~sss; [}"E+;ikKzhhZګ;iH"8hihz;oZګ4khzHګڮ ;[)+hhKk4\K ;[4)%H"  +k,(*" &$. f ).* ()l" Lh )@ Y|)-$,0&"+ .+. #8``)*`)0:)H mc%@ ns b p c X x ouE d i f e E gk Gp  %"KzZڜkH"&;iw"2m"MkH h\i i ( i  I-.* 8( HH "66 "ᭉ064e667060,  i 066eE607) 6P87T78610660 :66.66 蘼660.6)8I&0 .H"&00 0"6)6Z)H"zi 07.6#6 7e60 W 8. W 0`6 766`  * (*( HH "I,)m: ((( 8( " . 6Q67T762"20 0RN3n2n1n0jJJJJ 0:i 63 2 1 0˭ X !0 0 HH ȷ  HH ) *((080 0Z)H"z0hih  H""!8  I-. "HH66S" '" &"*(( 0/ ' 6S6 S( 8(. R 6 8I&0 .H"  H"!H"&00 &H"( 0"(ȹ6) SZ6)H"zȀ" HH 4"hih `. 6Q67T762"200R3 2 1 0!N3n2n1n0jJJJJJ 06R060 QKzhGhIh AZګkSYa"wkKHH ;[$hHHhk֯HH"v+hh`"uAH"k$`$0 "`HH;H" ;[+[hhkK YMK}y{suoqk;8 [KH H"3'H H"$d  1    )b "Li  I"9 " " HH" "  )@ H H" H H" ii d  +;i k  ;8 [KHH"3n)bȷ8ȷ "  HH wHH"~ )d+;ik ""hhk; [ ?+hzzH`; [8""+hhkHH8H; [ȷȷ HH"+hhhhkK; [  ?8+hhzhhZګkK&ki菍HHHHAH@@H "hh) kHH; [ȗȗȥȥȩ i+zzzzkHHH8H; [  " % Q8  0 " " "e i @< " "   "Z ""+;i k; [ ȊwHwhȷ+;ikHiH;8  [  " O$>"ȩȗ na i  U GE "F e i  " "8  0 E  ") i+;ikH; ["ȿ+hhkHHHHH; ["  ȷݠȷ ȷ+;i k:JJJJk_'V3D5VV(>"@&B     6m 7n 8   7 6W 676OSUY]a4FPp7wLPSV[bl`co'*;>jm~" $  !.Q_dt~# "&*.26:>ADad'!$',16;BEQVagjpu|""*16@GQX]`fltw! &+.9hPX_hkrux:y| / jpvŁJpy}  7Hm +08)G[;agc 19TZqw AK^ks Z`j $(.bjcJ$ *B E16.SIDECLICKBOOTER FINDERCONTEXT5BMENUBARX5 PLUGINSRC5 SCAPI.PDFUB SCAPI.RTFU SCAPI.TXTU SIDECLICKuB SIDECLICK.H@ uTIMEu WORDCOUNTI