You can subscribe to this list here.
| 2004 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(447) |
Nov
(163) |
Dec
(57) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2005 |
Jan
(172) |
Feb
|
Mar
(123) |
Apr
(64) |
May
(1) |
Jun
(278) |
Jul
(89) |
Aug
(97) |
Sep
(62) |
Oct
(53) |
Nov
(119) |
Dec
(60) |
| 2006 |
Jan
(76) |
Feb
(1094) |
Mar
(363) |
Apr
(163) |
May
(57) |
Jun
(43) |
Jul
(39) |
Aug
(15) |
Sep
(33) |
Oct
(62) |
Nov
(8) |
Dec
|
| 2007 |
Jan
(9) |
Feb
(34) |
Mar
(2) |
Apr
(14) |
May
(8) |
Jun
(40) |
Jul
(21) |
Aug
(1) |
Sep
(20) |
Oct
(15) |
Nov
(26) |
Dec
|
| 2008 |
Jan
(1) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(3) |
Oct
|
Nov
|
Dec
(1) |
| 2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(32) |
Jun
|
Jul
|
Aug
(3) |
Sep
(3) |
Oct
|
Nov
|
Dec
|
| 2010 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2011 |
Jan
|
Feb
|
Mar
(2) |
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(7) |
Dec
|
| 2012 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: creedon <icr...@us...> - 2005-10-02 20:42:34
|
Update of /cvsroot/frontierkernel/Frontier/Common/headers In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21972 Modified Files: versions.h Log Message: cranked version to 10.1a4, file/edit menu changes, open recent menu, other minor tweaks Index: versions.h =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/headers/versions.h,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** versions.h 7 Sep 2005 18:00:14 -0000 1.10 --- versions.h 1 Oct 2005 18:19:21 -0000 1.11 *************** *** 45,52 **** #define radio_stage_code 0x40 /* dev = 0x20, alpha = 0x40, beta = 0x60, final = 0x80 */ ! #define radio_revision_level 3 /* for non-final releases only */ ! #define radio_build_number 3 /* increment by one for every release, final or not */ ! #define radio_version_string "10.1a3" --- 45,52 ---- #define radio_stage_code 0x40 /* dev = 0x20, alpha = 0x40, beta = 0x60, final = 0x80 */ ! #define radio_revision_level 4 /* for non-final releases only */ ! #define radio_build_number 4 /* increment by one for every release, final or not */ ! #define radio_version_string "10.1a4" *************** *** 61,68 **** #define frontier_stage_code 0x40 /* dev = 0x20, alpha = 0x40, beta = 0x60, final = 0x80 */ ! #define frontier_revision_level 3 /* for non-final releases only */ ! #define frontier_build_number 3 /* increment by one for every release, final or not */ ! #define frontier_version_string "10.1a3" --- 61,68 ---- #define frontier_stage_code 0x40 /* dev = 0x20, alpha = 0x40, beta = 0x60, final = 0x80 */ ! #define frontier_revision_level 4 /* for non-final releases only */ ! #define frontier_build_number 4 /* increment by one for every release, final or not */ ! #define frontier_version_string "10.1a4" |
|
From: creedon <icr...@us...> - 2005-10-02 20:33:15
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/Frontier/tools/windowTypes In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14532 Added Files: runOpenRecentMenuScript Log Message: added support for open recent menu --- NEW FILE: runOpenRecentMenuScript --- (This appears to be a binary file; contents omitted.) |
|
From: creedon <icr...@us...> - 2005-10-02 19:40:45
|
Update of /cvsroot/frontierkernel/Frontier/Common/source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16137 Modified Files: shellkb.c Log Message: change MenuKey to MenuEvent, allows OS X Keyboard Shortcuts to get through Index: shellkb.c =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/source/shellkb.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** shellkb.c 11 Jan 2005 22:48:10 -0000 1.4 --- shellkb.c 1 Oct 2005 17:47:02 -0000 1.5 *************** *** 317,321 **** shellupdatemenus (); /*be sure the menus are properly checked and highlighted*/ ! if (!shellhandlemenu (MenuKey (chkb))) { /*cmd-key not consumed by menubar*/ if (fl) --- 317,321 ---- shellupdatemenus (); /*be sure the menus are properly checked and highlighted*/ ! if (!shellhandlemenu (MenuEvent (&shellevent))) { /* cmd-key not consumed by menubar */ /* 2005-10-01 creedon - change MenuKey to MenuEvent, allows OS X Keyboard Shortcuts to get through */ // cmd-key not consumed by menubar if (fl) |
|
From: creedon <icr...@us...> - 2005-10-02 18:57:56
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/Frontier/tools/windowTypes/commands In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11871 Modified Files: revert saveAs close Log Message: added support for some Frontier File/Edit menu items to call scripts Index: close =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/Frontier/tools/windowTypes/commands/close,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** close 26 Mar 2005 19:42:54 -0000 1.1.1.1 --- close 1 Oct 2005 17:26:02 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.Frontier.tools.windowTypes.commands.close ! on close (adr=nil) { ÇClose a window. ÇChanges: Ç09/30/00; 12:51:56 PM by PBS ÇCall callbacks. Ç11/30/00; 12:09:26 AM by JES ÇDereference callback addresses in a try block in case a tool's odb is not opened Ç07/03/01; 12:32:56 AM by JES ÇMigrated form pike.commands.close. if adr == nil { //close the frontmost window adr = window.frontmost ()}; if not defined (adr^) { //close the Find & Replace Dialog or the About window window.close (adr); return (true)}; on runCallbacks (adrCallbackTable, adrWindow) { if defined (adrCallbackTable^) { local (flConsumed = false); local (adrScript); for adrScript in adrCallbackTable { try { //11/30/00 JES while typeOf (adrScript^) == addressType { //follow addresses adrScript = adrScript^}; return (adrScript^ (adrWindow))}}}; //address is parameter return (false)}; if runCallbacks (@user.tools.commandCallbacks.close, adr) { return (true)}; if system.environment.isRadio { //legacy support for user.pike.commandCallbacks if defined (user.pike) { if defined (user.pike.commandCallbacks) { if runCallbacks (@user.pike.commandCallbacks.close, adr) { return (true)}}}}; if nameOf (adr^) != "/atts" { //if the windowType defines a close script, do that, and otherwise ask to save local (type, adrType); local (title = window.getTitle (adr), flSaveWindow=false, flCloseWindow=true); if not window.attributes.getOne ("title", @title, adr) { title = window.getTitle (adr)}; if window.attributes.getOne ("type", @type, adr) { if Frontier.tools.windowTypes.findWindowType (type, @adrType, adr) { local (flDirty = Frontier.tools.windowTypes.isWindowDirty (adr)); if not defined (adrType^.save) { //temp windows can't be saved unless the windowType can do it if table.tableContains (@system.temp, adr) { flDirty = false}}; if flDirty { //ask the user if they want to save the window case dialog.yesNoCancel ("Save " + title + " before closing?") { 1 { //yes flSaveWindow = true}; 2 { //no flSaveWindow = false}; 3 { //cancel flSaveWindow = false; flCloseWindow = false}}}; if flSaveWindow { if defined (adrType^.save) { //the windowType knows how to save flCloseWindow = Frontier.tools.windowTypes.commands.save (adr, true)} else { //save the database containing the window fileMenu.saveMyRoot (adr)}}; if flCloseWindow { //close the window, deleting tables in system.temp.windowTypes.windows if defined (adrType^.close) { //the windowType adds to the close behavior -- it has a chance to clean up flCloseWindow = adrType^.close (adr)}; if flCloseWindow { //clean up if we're still supposed to close the window if defined (adr^) { //don't do anything unless the window still exists if table.tableContains (@system.temp.windowTypes, adr) { delete (parentOf (adr^)); return (true)}}}} else { //the user cancelled the ask to save dialog or the save failed, so we do nothing return (false)}}}}; try { //hide database windows -- try because this will error for About or Find if sizeOf (string.parseAddress (window.frontmost ())) == 1 { window.hide (adr); return (true)}}; if defined (adr^) { //close the window if it still exists, run callbacks if flRunCallbacks is true window.close (adr)}; //no fancy logic happened -- just close the window return (true)}; bundle { //debugging close ()} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.Frontier.tools.windowTypes.commands.close ! on close (adr=nil) { ÇClose a window. ÇChanges Ç9/14/05; 3:40:04 PM by TAC Çuse new window.close flDialog parameter Çonly hide database windows if system.environment.isRadio is true Ç07/03/01; 12:32:56 AM by JES ÇMigrated form pike.commands.close. Ç11/30/00; 12:09:26 AM by JES ÇDereference callback addresses in a try block in case a tool's odb is not opened Ç09/30/00; 12:51:56 PM by PBS ÇCall callbacks. if adr == nil { //close the frontmost window adr = window.frontmost ()}; if not defined (adr^) { //close the Find & Replace Dialog or the About window window.close (adr); return (true)}; on runCallbacks (adrCallbackTable, adrWindow) { if defined (adrCallbackTable^) { local (flConsumed = false); local (adrScript); for adrScript in adrCallbackTable { try { //11/30/00 JES while typeOf (adrScript^) == addressType { //follow addresses adrScript = adrScript^}; return (adrScript^ (adrWindow))}}}; //address is parameter return (false)}; if runCallbacks (@user.tools.commandCallbacks.close, adr) { return (true)}; if system.environment.isRadio { //legacy support for user.pike.commandCallbacks if defined (user.pike) { if defined (user.pike.commandCallbacks) { if runCallbacks (@user.pike.commandCallbacks.close, adr) { return (true)}}}}; if nameOf (adr^) != "/atts" { //if the windowType defines a close script, do that, and otherwise ask to save local (type, adrType); local (title = window.getTitle (adr), flSaveWindow=false, flCloseWindow=true); if not window.attributes.getOne ("title", @title, adr) { title = window.getTitle (adr)}; if window.attributes.getOne ("type", @type, adr) { if Frontier.tools.windowTypes.findWindowType (type, @adrType, adr) { local (flDirty = Frontier.tools.windowTypes.isWindowDirty (adr)); if not defined (adrType^.save) { //temp windows can't be saved unless the windowType can do it if table.tableContains (@system.temp, adr) { flDirty = false}}; if flDirty { //ask the user if they want to save the window case dialog.yesNoCancel ("Save " + title + " before closing?") { 1 { //yes flSaveWindow = true}; 2 { //no flSaveWindow = false}; 3 { //cancel flSaveWindow = false; flCloseWindow = false}}}; if flSaveWindow { if defined (adrType^.save) { //the windowType knows how to save flCloseWindow = Frontier.tools.windowTypes.commands.save (adr, true)} else { //save the database containing the window fileMenu.saveMyRoot (adr)}}; if flCloseWindow { //close the window, deleting tables in system.temp.windowTypes.windows if defined (adrType^.close) { //the windowType adds to the close behavior -- it has a chance to clean up flCloseWindow = adrType^.close (adr)}; if flCloseWindow { //clean up if we're still supposed to close the window if defined (adr^) { //don't do anything unless the window still exists if table.tableContains (@system.temp.windowTypes, adr) { delete (parentOf (adr^)); return (true)}}}} else { //the user cancelled the ask to save dialog or the save failed, so we do nothing return (false)}}}}; if system.environment.isRadio { try { //hide database windows -- try because this will error for About or Find if sizeOf (string.parseAddress (window.frontmost ())) == 1 { window.hide (adr); return (true)}}}; if defined (adr^) { //close the window if it still exists local (flDialog = false); if not (system.environment.isRadio) { flDialog = true}; window.close (adr, flDialog)}; //no fancy logic happened -- just close the window return (true)}; Çbundle // testing Çclose () \ No newline at end of file Index: revert =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/Frontier/tools/windowTypes/commands/revert,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** revert 26 Mar 2005 19:42:55 -0000 1.1.1.1 --- revert 1 Oct 2005 17:26:02 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.Frontier.tools.windowTypes.commands.revert ! on revert (adr = nil) { ÇRevert a window. ÇChanges: Ç03/24/00; 7:24:20 PM by PBS ÇThis command was seriously broken -- now it's fixed. It works again for advanced items and stories. ÇFri, Jul 7, 2000 at 11:00:09 PM by AR ÇCall any scripts in user.pike.commandCallbacks.revert ÇIf one of the scripts returns true, we're done Ç07/24/00; 12:37:39 PM by PBS ÇHandle reverting local XML outline documents. Ç10/03/00; 6:39:09 PM by PBS ÇCallbacks can be addresses. Ç11/30/00; 12:17:04 AM by JES ÇDereference callback addresses in a try block in case a tool's odb is not opened if adr == nil { try { adr = window.frontmost ()} else { return (false)}}; on askForConfirmation (s) { return (dialog.twoWay ("Discard all changes made to " + s + "?", "Discard", "Cancel"))}; on runCallbacks (adrcallbacks) { if defined (adrcallbacks^) { local (adrcallback); for adrcallback in adrcallbacks { try { //11/30/00 JES while typeOf (adrcallback^) == addressType { //follow addresses adrcallback = adrcallback^}; flConsumed = adrcallback^ (adr)}; if flConsumed { return (true)}}}; return (false)}; if runCallbacks (@user.tools.commandCallbacks.revert) { return (true)}; if system.environment.isRadio { if defined (user.pike.commandCallbacks) { if runCallbacks (@user.pike.commandCallbacks.revert) { return (true)}}}; bundle { //run the windowType script if it exists local (type); if window.attributes.getOne ("type", @type, adr) { local (adrtype); if Frontier.tools.windowTypes.findWindowType (type, @adrtype, adr) { if defined (adrtype^.revert) { if Frontier.tools.windowTypes.isWindowDirty (adr) { local (title = window.getTitle (adr)); window.attributes.getOne ("title", @title, adr); //we don't care if this doesn't work if askForConfirmation (title) { local (adrNewWindow); if adrtype^.revert (adr, @adrNewWindow) { ÇlastSaved may already have been set by the windowType, but we do it here too just in case. window.attributes.setOne ("lastSaved", timeModified (adrNewWindow), adrNewWindow); return (true)}}}}}}}; return (false); Çbundle //old code for reverting Manila windows Çif adrItem!= nil Çlocal (flConsumed = false) Çif defined (user.pike.commandCallbacks.revert) Çlocal (adrcallback) Çfor adrcallback in @user.pike.commandCallbacks.revert Çtry //11/30/00 JES Çwhile typeOf (adrcallback^) == addressType //follow addresses Çadrcallback = adrcallback^ ÇflConsumed = adrcallback^ (adrItem) Çif flConsumed Çbreak Çif not flConsumed Çon askForConfirmation (s) Çreturn (dialog.twoWay ("Discard all changes made to " + s + "?", "Discard", "Cancel")) Ç Çbundle //PBS 07/24/00: handle local outlines Çif pike.isLocalOutline (adrItem) Çlocal (adrTable = parentOf (adrItem^)) Çif defined (adrTable^.f) Çif file.exists (adrTable^.f) Çlocal (title = adrTable^.title) Çif askForConfirmation (title) Çwindow.close (adrItem) Çpike.commands.open (adrTable^.f) ÇfileMenu.save () Çreturn (true) Ç Çlocal (windowType = pike.getWindowType (adrItem)) Çif windowType != "" Çlocal (adrTable = parentOf (adrItem^)) Çcase windowType //can't revert "newStories" Ç"advancedItems" Çif not askForConfirmation ("the " + adrTable^.iteminfo.type) Çreturn (false) Çlocal (handlerName = pike.advancedItemToHandlerName (adrTable^.itemInfo.type)) Çlocal (t = manila.[handlerName].get (@adrTable^.siteInfo)) ÇadrTable^.itemInfo.body = string (t.body) Çpike.commands.editAdvancedItem (adrTable^.siteInfo, adrTable^.itemInfo, false) Ç"savedStories" Çlocal (adrStory = @adrTable^.storyinfo) Çif not askForConfirmation ("\"" + adrStory^.subject + "\"") Çreturn (false) ÇadrStory^ = manila.message.get (@adrTable^.siteinfo, adrStory^.msgnum) Çif defined (adrStory^.bodyType) Çif string.lower (adrStory^.bodyType) == "text/x-outline-tabbed" ÇadrStory^.body = string (adrStory^.outline) Çpike.commands.editStory (adrTable^.siteInfo, adrTable^.storyInfo, false) Ç ÇfileMenu.save () Ç Çreturn (true)}; bundle { //debugging revert (window.frontmost ())} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.Frontier.tools.windowTypes.commands.revert ! on revert (adr = nil) { ÇChanges Ç9/21/05; 3:24:55 PM by TAC Çchanged confirmatation dialog to do the safe option by default Çchanged to actually do a revert for Frontier Ç2000 Ç11/30/00; 12:17:04 AM by JES ÇDereference callback addresses in a try block in case a tool's odb is not opened Ç10/03/00; 6:39:09 PM by PBS ÇCallbacks can be addresses. Ç07/24/00; 12:37:39 PM by PBS ÇHandle reverting local XML outline documents. ÇFri, Jul 7, 2000 at 11:00:09 PM by AR ÇCall any scripts in user.pike.commandCallbacks.revert ÇIf one of the scripts returns true, we're done Ç03/24/00; 7:24:20 PM by PBS ÇThis command was seriously broken -- now it's fixed. It works again for advanced items and stories. ÇRevert a window. if adr == nil { try { adr = window.frontmost ()} else { return (false)}}; on askForConfirmation (s) { return (!dialog.twoWay ("Discard all changes made to " + s + "?", "Cancel", "Discard"))}; on runCallbacks (adrcallbacks) { if defined (adrcallbacks^) { local (adrcallback); for adrcallback in adrcallbacks { try { //11/30/00 JES while typeOf (adrcallback^) == addressType { //follow addresses adrcallback = adrcallback^}; flConsumed = adrcallback^ (adr)}; if flConsumed { return (true)}}}; return (false)}; if runCallbacks (@user.tools.commandCallbacks.revert) { return (true)}; if system.environment.isRadio { if defined (user.pike.commandCallbacks) { if runCallbacks (@user.pike.commandCallbacks.revert) { return (true)}}}; bundle { //run the windowType script if it exists local (type); if window.attributes.getOne ("type", @type, adr) { local (adrtype); if Frontier.tools.windowTypes.findWindowType (type, @adrtype, adr) { if defined (adrtype^.revert) { if Frontier.tools.windowTypes.isWindowDirty (adr) { local (title = window.getTitle (adr)); window.attributes.getOne ("title", @title, adr); //we don't care if this doesn't work if askForConfirmation (title) { local (adrNewWindow); if adrtype^.revert (adr, @adrNewWindow) { ÇlastSaved may already have been set by the windowType, but we do it here too just in case. window.attributes.setOne ("lastSaved", timeModified (adrNewWindow), adrNewWindow); return (true)}}}}}}}; if system.environment.isRadio { return (false)} else { local (s = file.fileFromPath (window.getFile (adr))); if askForConfirmation (s) { fileMenu.revert ()}}; return (true); Çbundle //old code for reverting Manila windows Çif adrItem!= nil Çlocal (flConsumed = false) Çif defined (user.pike.commandCallbacks.revert) Çlocal (adrcallback) Çfor adrcallback in @user.pike.commandCallbacks.revert Çtry //11/30/00 JES Çwhile typeOf (adrcallback^) == addressType //follow addresses Çadrcallback = adrcallback^ ÇflConsumed = adrcallback^ (adrItem) Çif flConsumed Çbreak Çif not flConsumed Çon askForConfirmation (s) Çreturn (dialog.twoWay ("Discard all changes made to " + s + "?", "Discard", "Cancel")) Ç Çbundle //PBS 07/24/00: handle local outlines Çif pike.isLocalOutline (adrItem) Çlocal (adrTable = parentOf (adrItem^)) Çif defined (adrTable^.f) Çif file.exists (adrTable^.f) Çlocal (title = adrTable^.title) Çif askForConfirmation (title) Çwindow.close (adrItem) Çpike.commands.open (adrTable^.f) ÇfileMenu.save () Çreturn (true) Ç Çlocal (windowType = pike.getWindowType (adrItem)) Çif windowType != "" Çlocal (adrTable = parentOf (adrItem^)) Çcase windowType //can't revert "newStories" Ç"advancedItems" Çif not askForConfirmation ("the " + adrTable^.iteminfo.type) Çreturn (false) Çlocal (handlerName = pike.advancedItemToHandlerName (adrTable^.itemInfo.type)) Çlocal (t = manila.[handlerName].get (@adrTable^.siteInfo)) ÇadrTable^.itemInfo.body = string (t.body) Çpike.commands.editAdvancedItem (adrTable^.siteInfo, adrTable^.itemInfo, false) Ç"savedStories" Çlocal (adrStory = @adrTable^.storyinfo) Çif not askForConfirmation ("\"" + adrStory^.subject + "\"") Çreturn (false) ÇadrStory^ = manila.message.get (@adrTable^.siteinfo, adrStory^.msgnum) Çif defined (adrStory^.bodyType) Çif string.lower (adrStory^.bodyType) == "text/x-outline-tabbed" ÇadrStory^.body = string (adrStory^.outline) Çpike.commands.editStory (adrTable^.siteInfo, adrTable^.storyInfo, false) Ç ÇfileMenu.save () Ç Çreturn (true)}; Çbundle // testing Çrevert (window.frontmost ()) \ No newline at end of file Index: saveAs =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/Frontier/tools/windowTypes/commands/saveAs,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** saveAs 26 Mar 2005 19:42:56 -0000 1.1.1.1 --- saveAs 1 Oct 2005 17:26:02 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.Frontier.tools.windowTypes.commands.saveAs ! on saveAs (adrItem=nil) { ÇHandle the Save As command. if adrItem == nil { //default to frontmost window adrItem = window.frontmost ()}; on saveDatabase () { msg ("Saving database..."); if typeOf (adrItem) == addressType { fileMenu.saveMyRoot (adritem)} else { fileMenu.save ()}; msg ("")}; //clear the feedback message if not defined (adrItem^) { //save Radio.root adrItem = @root; saveDatabase (); return (true)}; on runCallbacks (adrCallback) { //call callbacks if defined (adrCallback^) { local (flConsumed = false); local (adrScript); for adrScript in adrCallback { try { //11/30/00 JES while typeOf (adrScript^) == addressType { //follow addresses adrScript = adrScript^}; flConsumed = adrScript^ (adrItem, flClosing)}; if flConsumed { return (true)}}}; return (false)}; if runCallbacks (@user.tools.commandCallbacks.saveAs) { return (true)}; if system.environment.isRadio { if defined (user.pike.commandCallbacks) { if runCallbacks (@user.pike.commandCallbacks.saveAs) { return (true)}}}; bundle { //look for a windowType that handles this command local (type, adrType); if window.attributes.getOne ("type", @type, adrItem) { if Frontier.tools.windowTypes.findWindowType (type, @adrType, adrItem) { if defined (adrType^.save) { if adrType^.saveAs (adrItem) { window.attributes.setOne ("lastSaved", timeModified (adrItem), adrItem); saveDatabase (); return (true)} else { return (false)}}}}}; bundle { //if this is an outline window, save as an opml file local (adrType); if Frontier.tools.windowTypes.findWindowType ("outlinerFile", @adrType) { if adrType^.saveAs (adrItem) { return (true)}}}; ÇDo we want to call the odb-export code here? export.commands.export (); saveDatabase (); return (true); }; Çbundle //debugging ÇsaveAs () \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.Frontier.tools.windowTypes.commands.saveAs ! on saveAs (adrItem=nil) { ÇChanges Ç9/21/05; 11:34:38 AM by TAC Çchanged to actually do a save as, as opposed to a save Çonly do export for non Frontier envrionments ÇHandle the Save As command. if adrItem == nil { //default to frontmost window adrItem = window.frontmost ()}; on saveDatabaseAs () { local (f = file.fileFromPath (window.getFile (table.getRootAddress (adrItem)))); if file.putFileDialog ("", @f) { fileMenu.saveCopy (f)}}; if not defined (adrItem^) { // save root adrItem = @root; saveDatabaseAs (); return (true)}; on runCallbacks (adrCallback) { //call callbacks if defined (adrCallback^) { local (flConsumed = false); local (adrScript); for adrScript in adrCallback { try { //11/30/00 JES while typeOf (adrScript^) == addressType { //follow addresses adrScript = adrScript^}; flConsumed = adrScript^ (adrItem, flClosing)}; if flConsumed { return (true)}}}; return (false)}; if runCallbacks (@user.tools.commandCallbacks.saveAs) { return (true)}; if system.environment.isRadio { if defined (user.pike.commandCallbacks) { if runCallbacks (@user.pike.commandCallbacks.saveAs) { return (true)}}}; bundle { //look for a windowType that handles this command local (type, adrType); if window.attributes.getOne ("type", @type, adrItem) { if Frontier.tools.windowTypes.findWindowType (type, @adrType, adrItem) { if defined (adrType^.save) { if adrType^.saveAs (adrItem) { window.attributes.setOne ("lastSaved", timeModified (adrItem), adrItem); saveDatabase (); return (true)} else { return (false)}}}}}; bundle { //if this is an outline window, save as an opml file local (adrType); if Frontier.tools.windowTypes.findWindowType ("outlinerFile", @adrType) { if adrType^.saveAs (adrItem) { return (true)}}}; if system.environment.isRadio { export.commands.export ()}; // Do we want to call the odb-export code here? saveDatabaseAs (); return (true)}; Çbundle // testing ÇsaveAs () \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-10-02 18:19:37
|
Update of /cvsroot/frontierkernel/Frontier/Common/source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19562 Modified Files: shellmenu.c menu.c Log Message: make shellupdateopenrecentmenu less Mac specific, created functions deletemenuitems and disableallmenuitems, also when no files are listed in the menu, disable al menu items Index: shellmenu.c =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/source/shellmenu.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** shellmenu.c 1 Oct 2005 17:34:33 -0000 1.5 --- shellmenu.c 2 Oct 2005 18:19:29 -0000 1.6 *************** *** 2312,2316 **** static boolean openrecentmenuitemsvisit (bigstring bs, hdlhashnode hnode, tyvaluerecord val, ptrvoid refcon) { ! /* 2005-09-24 creedon */ register hdlmenu hmenu; --- 2312,2318 ---- static boolean openrecentmenuitemsvisit (bigstring bs, hdlhashnode hnode, tyvaluerecord val, ptrvoid refcon) { ! /* ! 2005-09-24 creedon: created ! */ register hdlmenu hmenu; *************** *** 2330,2334 **** void shellupdateopenrecentmenu (void) { ! /* 2005-09-22 creedon */ bigstring bs; --- 2332,2341 ---- void shellupdateopenrecentmenu (void) { ! /* ! 2005-10-01 creedon: when no files are listed in the menu, disable al menu items ! made more accessible to windows platform ! ! 2005-09-22 creedon: created ! */ bigstring bs; *************** *** 2339,2343 **** hmenu = shellmenuhandle (openrecentmenu); ! DeleteMenuItems (hmenu, 1, CountMenuItems (hmenu) - 2); getsystemtablescript (idopenrecentmenutable, bs); // "user.prefs.openrecentmenu.items" --- 2346,2350 ---- hmenu = shellmenuhandle (openrecentmenu); ! deletemenuitems (hmenu, 1, countmenuitems (hmenu) - 2); getsystemtablescript (idopenrecentmenutable, bs); // "user.prefs.openrecentmenu.items" *************** *** 2355,2358 **** --- 2362,2368 ---- if (fl) hashsortedinversesearch (htable, &openrecentmenuitemsvisit, nil); + + if (countmenuitems (hmenu) == 2) + disableallmenuitems (hmenu); } Index: menu.c =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/source/menu.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** menu.c 11 Jan 2005 22:48:09 -0000 1.4 --- menu.c 2 Oct 2005 18:19:29 -0000 1.5 *************** *** 1671,1674 **** --- 1671,1724 ---- + boolean deletemenuitems (hdlmenu hmenu, short firstitem, short itemcount) { + + /* + 2005-10-01 creedon: created, delete menu items starting at firstitem for itemcount + */ + + boolean fl = true; + + #ifdef MACVERSION + fl = DeleteMenuItems (hmenu, firstitem, itemcount) == noErr; + #endif + + #ifdef WIN95VERSION + register short ctitems = countmenuitems (hmenu); + register short i; + + if (itemcount > ctitems) + itemcount = ctitems; + + for (i = itemcount; i >= firstitem; i--) + if (!deletemenuitem (hmenu, i)) { + fl = false; + break; + } + #endif + + return (fl); + + } /* deletemenuitems */ + + + void disableallmenuitems (hdlmenu hmenu) { + /* + 2005-10-01 creedon: created + */ + + #ifdef MACVERSION + DisableAllMenuItems (hmenu); + #endif + + #ifdef WIN95VERSION + register short ct = countmenuitems (hmenu); + register short i; + + for (i = ct; i > 0; i--) + disablemenuitem (hmenu, i); + + #endif + + } /* disableallmenuitems */ |
|
From: creedon <icr...@us...> - 2005-10-02 18:19:31
|
Update of /cvsroot/frontierkernel/Frontier/Common/headers In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19533 Modified Files: menu.h Log Message: make shellupdateopenrecentmenu less Mac specific, created functions deletemenuitems and disableallmenuitems, also when no files are listed in the menu, disable al menu items Index: menu.h =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/headers/menu.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** menu.h 11 Jan 2005 22:48:02 -0000 1.2 --- menu.h 2 Oct 2005 18:19:23 -0000 1.3 *************** *** 129,132 **** --- 129,134 ---- extern boolean initmenusystem (void); + extern boolean deletemenuitems (hdlmenu, short, short); /* 2005-10-01 creedon */ + extern void disableallmenuitems (hdlmenu hmenu); /* 2005-10-01 creedon */ |
|
From: creedon <icr...@us...> - 2005-09-30 22:45:55
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/suites/DuckTape In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16331 Modified Files: Tag: commercial_suite_project-branch initializeNewTerminologyTable Log Message: changed adrDictionaryTable to adrTerminologyTable Index: initializeNewTerminologyTable =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/suites/DuckTape/Attic/initializeNewTerminologyTable,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** initializeNewTerminologyTable 16 Sep 2005 02:52:31 -0000 1.1.2.1 --- initializeNewTerminologyTable 30 Sep 2005 21:24:29 -0000 1.1.2.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:suites.DuckTape.initializeNewTerminologyTable ! on initializeNewTerminologyTable (adrPath, adrTerminologyTable, adrTerminologyStorage = @system.verbs.apps, fileTypesList = DuckTape.data.appTypes, adrUserAfterAppInfoInitializedCallbacks = @user.DuckTape.callbacks.afterAppInfoInitialized, getFileDialogPrompt = "Select the application from which to create a new apps table item...", newTerminologyNamePrompt = "New apps table item name:", replaceTerminologyPrompt = "An apps table item with the name of \"[[terminologyname]]\" already exists. Are you sure you want to replace it?") { ÇChanges Ç9/5/05; 4:16:17 PM by TAC Çcreated if kb.shiftKey () { fileTypesList = 0}; if file.getFileDialog (getFileDialogPrompt, adrPath, fileTypesList) { if not (defined (temp.DuckTape)) { new (tableType, @temp.DuckTape)}; bundle { // terminology name local (s = file.fileFromPath (adrPath^)); s = string.replaceAll (s, " ", ""); s = string.popTrailing (s, file.getPathChar ()); // might be an Mac OS X application package if s endsWith ".app" { // might be a Mac OS X application name s = string.popSuffix (s, '.')}; if s endsWith ".osax" { // might be an osax s = string.popSuffix (s, '.')}; temp.DuckTape.terminologyName = s}; if dialog.ask (newTerminologyNamePrompt, @temp.DuckTape.terminologyName) { adrTerminologyTable^ = @adrTerminologyStorage^.[temp.DuckTape.terminologyName]; try { // notify if conflict with other than adrTerminologyStorage table, an improvement on this would be to continue to ask the user for new names until they cancel and not make them have to start over. local (adr = address (temp.DuckTape.terminologyName)); if adr != adrTerminologyTable^ { if defined (adr^) { if dialog.twoWay ("The name \"" + temp.DuckTape.terminologyName + "\" conflicts with " + string.popFileFromAddress (adr) + ". Do you want to continue?", "No", "Yes") { return (false)}}}}; if defined (adrTerminologyTable^^) { local (s = replaceTerminologyPrompt); s = string.replace (s, "[[terminologyname]]", temp.DuckTape.terminologyName); if dialog.twoWay (s, "No", "Yes") { return (false)}}; on replaceAll (searchString, replaceString) { local (numReplaced, savedParams); table.assign (@savedParams, user.prefs.search); // save off user.prefs.search.flatSearch = false; user.prefs.search.frontWindowOnly = false; user.prefs.search.regularexpression = false; user.prefs.search.wholeWords = false; user.prefs.search.searchFor = searchString; user.prefs.search.replaceWith = replaceString; search.reset (); numReplaced = search.replaceAll (); table.assign (@user.prefs.search, savedParams); // restore originals return (numReplaced)}; new (tableType, adrTerminologyTable^); if user.DuckTape.flUseEventInformationTable { new (tableType, @adrTerminologyTable^^.[user.DuckTape.eventInformationTableName])}; table.copyContents (@DuckTape.data.newTable, adrTerminologyTable^); local (adrAppInfo = @adrTerminologyTable^^.appInfo); bundle { // add appInfo table items local (creator = string4 (file.creator (adrPath^))); adrAppInfo^.creator = creator; adrAppInfo^.id = creator; adrAppInfo^.name = temp.DuckTape.terminologyName; adrAppInfo^.path = adrPath^; ÇadrAppInfo^.sharedMenus = dialog.yesNo ("Does " + temp.DuckTape.terminologyName + " support Menu Sharing?") adrAppInfo^.type = string4 (file.type (adrPath^))}; DuckTape.callbackLoop (adrUserAfterAppInfoInitializedCallbacks, adrTerminologyTable^); adrTerminologyTable^^.id = adrAppInfo^.id; bundle { // set up new table target.set (adrTerminologyTable^); replaceAll ("[[sample]]", temp.DuckTape.terminologyName); replaceAll ("[[sample.id]]", DuckTape.appIdStyle (temp.DuckTape.terminologyName, user.DuckTape.appIdStyle)); target.clear ()}; fileMenu.save (); return (true)}}; return (false)}; Çif adrAppInfo^.sharedMenus // 8/7/05; 12:32:34 PM by TAC - old code? Çlocal (adrMenuBar = @system.menus.sharedMenus.[adrAppInfo^.id]) Çif not defined (adrMenuBar^) Çif not dialog.confirm ("Create a new shared menu bar for " + temp.appname + "?") Çreturn Çon linkScript (scriptString) Çlocal (tempscript) Ç Çnew (scriptType, @tempscript) Çtarget.set (@tempscript) ÇeditMenu.setFont (user.prefs.fonts.scriptfont) ÇeditMenu.setFontSize (user.prefs.fonts.scriptfontsize) Çop.setLineText (scriptString) Çop.insert ("Frontier.bringToFront ()", down) Çtarget.clear () Ç Çtarget.set (adrMenuBar) Çmenu.setScript (@tempscript) Ç Çtable.copy (@DuckTapeData.newMenuBar, @system.menus.sharedMenus) Çtable.rename (@system.menus.sharedMenus.newMenuBar, adrAppInfo^.id) Çtarget.set (adrMenuBar) Çop.firstSummit () Çop.expand (infinity) Çop.go (right, 1) Çop.go (down, infinity) Çcursor on "Edit Scripts Table" ÇlinkScript ("edit (@" + temp.appname + ")") Çop.go (up, 1) Çcursor on "Edit Shared Menu" ÇlinkScript ("edit (@" + adrMenuBar + ")") Çop.firstSummit () Çtarget.clear () ÇsomethingCreated = true \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:suites.DuckTape.initializeNewTerminologyTable ! on initializeNewTerminologyTable (adrPath, adrTerminologyTable, adrTerminologyStorage = @system.verbs.apps, fileTypesList = DuckTape.data.appTypes, adrUserAfterAppInfoInitializedCallbacks = @user.DuckTape.callbacks.afterAppInfoInitialized, getFileDialogPrompt = "Select the application from which to create a new apps table item...", newTerminologyNamePrompt = "New apps table item name:", replaceTerminologyPrompt = "An apps table item with the name of \"[[terminologyname]]\" already exists. Are you sure you want to replace it?") { ÇChanges Ç9/17/05; 11:36:06 AM by TAC Çif a path is in adrPath^ then don't ask for a file Ç9/5/05; 4:16:17 PM by TAC Çcreated local (flPathSpecified = true); if kb.shiftKey () { fileTypesList = 0}; if adrPath^ == nil { flPathSpecified = file.getFileDialog (getFileDialogPrompt, adrPath, fileTypesList)}; if flPathSpecified { if not (defined (temp.DuckTape)) { new (tableType, @temp.DuckTape)}; bundle { // terminology name local (s = file.fileFromPath (adrPath^)); s = string.replaceAll (s, " ", ""); s = string.popTrailing (s, file.getPathChar ()); // might be an Mac OS X application package if s endsWith ".app" { // might be a Mac OS X application name s = string.popSuffix (s, '.')}; if s endsWith ".osax" { // might be an osax s = string.popSuffix (s, '.')}; temp.DuckTape.terminologyName = s}; if dialog.ask (newTerminologyNamePrompt, @temp.DuckTape.terminologyName) { adrTerminologyTable^ = @adrTerminologyStorage^.[temp.DuckTape.terminologyName]; try { // notify if conflict with other than adrTerminologyStorage table, an improvement on this would be to continue to ask the user for new names until they cancel and not make them have to start over. local (adr = address (temp.DuckTape.terminologyName)); if adr != adrTerminologyTable^ { if defined (adr^) { if dialog.twoWay ("The name \"" + temp.DuckTape.terminologyName + "\" conflicts with " + string.popFileFromAddress (adr) + ". Do you want to continue?", "No", "Yes") { return (false)}}}}; if defined (adrTerminologyTable^^) { local (s = replaceTerminologyPrompt); s = string.replace (s, "[[terminologyname]]", temp.DuckTape.terminologyName); if dialog.twoWay (s, "No", "Yes") { return (false)}}; on replaceAll (searchString, replaceString) { local (numReplaced, savedParams); table.assign (@savedParams, user.prefs.search); // save off user.prefs.search.flatSearch = false; user.prefs.search.frontWindowOnly = false; user.prefs.search.regularexpression = false; user.prefs.search.wholeWords = false; user.prefs.search.searchFor = searchString; user.prefs.search.replaceWith = replaceString; search.reset (); numReplaced = search.replaceAll (); table.assign (@user.prefs.search, savedParams); // restore originals return (numReplaced)}; new (tableType, adrTerminologyTable^); if user.DuckTape.flUseEventInformationTable { new (tableType, @adrTerminologyTable^^.[user.DuckTape.eventInformationTableName])}; table.copyContents (@DuckTape.data.newTable, adrTerminologyTable^); local (adrAppInfo = @adrTerminologyTable^^.appInfo); bundle { // add appInfo table items local (creator = string4 (file.creator (adrPath^))); adrAppInfo^.creator = creator; adrAppInfo^.id = creator; adrAppInfo^.name = temp.DuckTape.terminologyName; adrAppInfo^.path = adrPath^; ÇadrAppInfo^.sharedMenus = dialog.yesNo ("Does " + temp.DuckTape.terminologyName + " support Menu Sharing?") adrAppInfo^.type = string4 (file.type (adrPath^))}; DuckTape.callbackLoop (adrUserAfterAppInfoInitializedCallbacks, adrTerminologyTable^); adrTerminologyTable^^.id = adrAppInfo^.id; bundle { // set up new table target.set (adrTerminologyTable^); replaceAll ("[[sample]]", temp.DuckTape.terminologyName); replaceAll ("[[sample.id]]", DuckTape.appIdStyle (temp.DuckTape.terminologyName, user.DuckTape.appIdStyle)); target.clear ()}; fileMenu.save (); return (true)}}; return (false)}; Çif adrAppInfo^.sharedMenus // 8/7/05; 12:32:34 PM by TAC - old code? Çlocal (adrMenuBar = @system.menus.sharedMenus.[adrAppInfo^.id]) Çif not defined (adrMenuBar^) Çif not dialog.confirm ("Create a new shared menu bar for " + temp.appname + "?") Çreturn Çon linkScript (scriptString) Çlocal (tempscript) Ç Çnew (scriptType, @tempscript) Çtarget.set (@tempscript) ÇeditMenu.setFont (user.prefs.fonts.scriptfont) ÇeditMenu.setFontSize (user.prefs.fonts.scriptfontsize) Çop.setLineText (scriptString) Çop.insert ("Frontier.bringToFront ()", down) Çtarget.clear () Ç Çtarget.set (adrMenuBar) Çmenu.setScript (@tempscript) Ç Çtable.copy (@DuckTapeData.newMenuBar, @system.menus.sharedMenus) Çtable.rename (@system.menus.sharedMenus.newMenuBar, adrAppInfo^.id) Çtarget.set (adrMenuBar) Çop.firstSummit () Çop.expand (infinity) Çop.go (right, 1) Çop.go (down, infinity) Çcursor on "Edit Scripts Table" ÇlinkScript ("edit (@" + temp.appname + ")") Çop.go (up, 1) Çcursor on "Edit Shared Menu" ÇlinkScript ("edit (@" + adrMenuBar + ")") Çop.firstSummit () Çtarget.clear () ÇsomethingCreated = true \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-30 15:50:17
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/menus In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19377 Modified Files: buildSuitesSubmenu virginSuitesMenu Log Message: suites are added to the top of the Suites menu w/built-in commands at bottom, virgin Suites menu reorganized Index: virginSuitesMenu =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/menus/virginSuitesMenu,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** virginSuitesMenu 26 Mar 2005 19:41:52 -0000 1.1.1.1 --- virginSuitesMenu 30 Sep 2005 15:50:08 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:mbar:system.menus.virginSuitesMenu ! AAEFAQAAATsAAQAAAAAAAAAAAAABuwDbAuADdgAAAAAAAAZHZW5ldmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgBkAGQBpAJEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAsAAAAJwAAAAAADwZHZW5ldmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAsHeVVb32TiIAAAVUAAAAkQC7AVkCPExBTkT///////8AAAAAAABtYWMgAAAAAAAAAAAAAAAAU3VpdGVzDQlNaW5pbWFsIE1lbnVzDQlOZXcgU3VpdGUuLi4NCS0NgAAAAAAAAAAAAAAKLQAAAAAAAXhFvAAAAAAACgAAAAAAAAF4RcAAAAAAAAAAAgAAAAYAAAA2AAACAAAPBkdlbmV2YQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAbAAACkOfY3sJceIgAAABwAAACxALYBLgHJTEFORP///////wAAAAAAAG1hYyAAAAAAAAAAAAAAAABtZW51Lm5vU3VpdGUgKCkgx3Jlc2V0IHRoZSBtZW51IGJhciwgbm8gc3VpdGUgcnVubmluZw2AAAAAAAAAAgAAAAYAAAAhAAACAAAPBkdlbmV2YQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAbAAACt/psdsJmaQgAAABsAAAFZAX8CIQMATEFORP///////wAAAAAAAG1hYyAAAAAAAAAAAAAAAABzeXN0ZW0ubWVudXMuc2NyaXB0cy5uZXdTdWl0ZSAoKQ2AAAAAAAA= \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:mbar:system.menus.virginSuitesMenu ! AAEFAQAAATsAAQAAAAAAAAAAAAABuwDbAuADdgAAAAAAAAZHZW5ldmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgArAAMD/QT9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAsAAAAJwAAAAAADwZHZW5ldmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAsHeVVb9fUZsAAApGAAAAkQC7AVkCPExBTkT///////8AAAAAAABtYWMgAAAAAAAAAAAAAAAAU3VpdGVzDQktDQlNaW5pbWFsIE1lbnVzDQlOZXcgU3VpdGUuLi4NgAAAAAAAAAAAAAAAAAAAAAAKLQAAAAAAAS8IpAAAAAAACgAAAAAAAAEvCKgAAgAAAAYAAAA2AAACAAAPBkdlbmV2YQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAbAAACkOfY3sJceIgAAACUAAACxALYBLgHJTEFORP///////wAAAAAAAG1hYyAAAAAAAAAAAAAAAABtZW51Lm5vU3VpdGUgKCkgx3Jlc2V0IHRoZSBtZW51IGJhciwgbm8gc3VpdGUgcnVubmluZw2AAAAAAAAAAgAAAAYAAAAhAAACAAAPBkdlbmV2YQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAbAAACt/psdsJmaQgAAACQAAAFZAX8CIQMATEFORP///////wAAAAAAAG1hYyAAAAAAAAAAAAAAAABzeXN0ZW0ubWVudXMuc2NyaXB0cy5uZXdTdWl0ZSAoKQ2AAAAAAAA= \ No newline at end of file Index: buildSuitesSubmenu =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/menus/buildSuitesSubmenu,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** buildSuitesSubmenu 14 Jun 2005 02:48:18 -0000 1.2 --- buildSuitesSubmenu 30 Sep 2005 15:50:08 -0000 1.3 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.menus.buildSuitesSubmenu ! on buildSuitesSubMenu () { ÇBuild the Suites submenu in the Main menu. ÇChanges Ç12/4/04; 12:30:36 PM by TAC ÇMain menu is now Operations Ç9/23/99; 2:58:52 PM by PBS ÇYou can put the address of a suite in the suites table, and it will be added to the menu. Ç9/24/99; 10:50:48 AM by PBS ÇIf the suite is in a gdb, and the gdb is open, and the suite contains a suiteName item, use that when building the Suites submenu. Otherwise, if the gdb is not open, use the name of the object in the Suites table. local (localMenu = system.menus.virginSuitesMenu); local (oldTarget = target.get ()); target.set (@localMenu); local (adrSuitesTable = @root.suites); local (i, ct = sizeOf (adrSuitesTable^), adrSuite, adrMenu, name, logic); for i = 1 to ct { adrSuite = @adrSuitesTable^ [i]; local (suiteType = typeOf (adrSuite^)); case suiteType { //handle tables and addresses tableType { adrMenu = @adrsuite^.menu; if not defined (adrMenu^) { continue}; if typeOf (adrMenu^) != menubarType { continue}; try { name = adrSuite^.suiteName} else { name = nameOf (adrSuite^)}}; addressType { name = nameOf (adrSuite^); if defined (adrSuite^^.suiteName) { //PBS 9/24/99: if the gdb is open, and the suite contains a suiteName, use it name = adrSuite^^.suiteName}}} else { //if it's not a table or address, continue continue}; logic = "system.menus.swapInSuite (@" + adrSuite + ")"; menu.addMenuCommand (@localMenu, "Suites", name, logic)}; if system.environment.isMac { menu.addSubMenu (@system.menus.menubar, "Operations", @localMenu)}; // 6/12/05; 11:59:39 PM by TAC if system.environment.isWindows { menu.addSubMenu (@system.menus.menubar, "&Operations", @localMenu)}; // 6/12/05; 11:59:48 PM by TAC try {target.set (oldTarget)}} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.menus.buildSuitesSubmenu ! on buildSuitesSubMenu () { ÇChanges Ç9/27/05; 7:47:41 PM by TAC Çsuites are added to the top of the menu w/built-in commands at bottom Ç12/4/04; 12:30:36 PM by TAC ÇMain menu is now Operations Ç9/23/99; 2:58:52 PM by PBS ÇYou can put the address of a suite in the suites table, and it will be added to the menu. Ç9/24/99; 10:50:48 AM by PBS ÇIf the suite is in a gdb, and the gdb is open, and the suite contains a suiteName item, use that when building the Suites submenu. Otherwise, if the gdb is not open, use the name of the object in the Suites table. ÇBuild the Suites submenu in the Main menu. local (localMenu = system.menus.virginSuitesMenu); local (oldTarget = target.get ()); target.set (@localMenu); local (adrSuitesTable = @root.suites); local (i, ct = sizeOf (adrSuitesTable^), adrSuite, adrMenu, name, logic); for i = ct downTo 1 { adrSuite = @adrSuitesTable^ [i]; local (suiteType = typeOf (adrSuite^)); case suiteType { //handle tables and addresses tableType { adrMenu = @adrsuite^.menu; if not defined (adrMenu^) { continue}; if typeOf (adrMenu^) != menubarType { continue}; try { name = adrSuite^.suiteName} else { name = nameOf (adrSuite^)}}; addressType { name = nameOf (adrSuite^); if defined (adrSuite^^.suiteName) { //PBS 9/24/99: if the gdb is open, and the suite contains a suiteName, use it name = adrSuite^^.suiteName}}} else { //if it's not a table or address, continue continue}; logic = "system.menus.swapInSuite (@" + adrSuite + ")"; menu.addMenuCommand (@localMenu, "Suites", name, logic); op.reorg (up, infinity)}; if system.environment.isMac { menu.addSubMenu (@system.menus.menubar, "Operations", @localMenu)}; // 6/12/05; 11:59:39 PM by TAC if system.environment.isWindows { menu.addSubMenu (@system.menus.menubar, "&Operations", @localMenu)}; // 6/12/05; 11:59:48 PM by TAC try {target.set (oldTarget)}}; Çbundle // testing ÇbuildSuitesSubMenu () \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-30 15:45:31
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/menus In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18147 Modified Files: menubar Log Message: added user.prefs.flReplaceDialogExpertMode, added menu command to toggle its state Index: menubar =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/menus/menubar,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** menubar 5 Sep 2005 16:27:27 -0000 1.3 --- menubar 30 Sep 2005 15:45:22 -0000 1.4 *************** *** 1,3 **** FrontierVcsFile:1:mbar:system.menus.menubar ! AAEFAQAACyMAAQAAAAAAAAAAAAAAKwADA/0E/QAAAAAAAAZHZW5ldmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgArAAMD/QT9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAQMAAAGLwAAAgAADwZHZW5ldmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAApJOSS78xI/cAANxmAAAAsQC2AS4ByUxBTkT///////8AAAAAAABtYWMgAAAAAAAAAAAAAAAARGF0YWJhc2UNCUZpbmQgYW5kIFJlcGxhY2UNCQlGaW5kLi4uDQkJUmVwbGFjZS4uLg0JCUZpbmQgTmV4dA0JCVJlcGxhY2UgJiBGaW5kIE5leHQNCUp1bXAuLi4NCVNlYXJjaC4uLg0JLQ0JPSBzeXN0ZW0ubWVudXMuc2NyaXB0cy51cGRhdGVNZW51SXRlbSAoKQ0JLQ0JQWRkIHRvIHVzZXIuZGF0YWJhc2VzLi4uDQktDQk9ICJCYWNrdXAgIiArIGZpbGUuZmlsZUZyb21QYXRoIChGcm9udGllci5nZXRGaWxlcGF0aCAoKSkgKyAiLi4uIg0JRXhwb3J0Li4uDQlCYXRjaCBFeHBvcnQNCQlPcGVuIExpc3QNCQlPcGVuIFRhYmxlDQkJLQ0JCUV4cG9ydCBmcm9tIExpc3QuLi4NCQlJbXBvcnQgZnJvbSBGb2xkZXIuLi4NCQktDQkJTmlnaHRseSBFeHBvcnQuLi4NCS0NCUFwcGxlU2NyaXB0cw0JCUxvYWQgQXBwbGVTY3JpcHQuLi4NCQlMb2FkIGEgRm9sZGVyLi4uDQkJTG9hZCBhbiBPU0FYLi4uDQktDQlFZGl0IHdpdGggQXBwDU9wZXJhdGlvbnMNCVF1aWNrIFNjcmlwdA0JLQ0JV2ViDQkJV2ViIFNlcnZlcg0JCQk9IHN5c3RlbS5tZW51cy5zY3JpcHRzLnNlcnZlck1lbnVJdGVtICgpDQkJCVNldCBQb3J0Li4uDQkJLQ0JCVByZXZpZXcgUGFnZQ0JCS0NCQlQdWJsaXNoIFBhZ2UNCQlQdWJsaXNoIFRhYmxlLi4uDQkJLQ0JCU5ldyBXZWJzaXRlLi4uDQkJSW1wb3J0IFdlYnNpdGUuLi4NCQktDQkJTmV3IFBhZ2UuLi4NCQktDQkJTG9hZCBJbWFnZSBGaWxlLi4uDQkJQnVpbGQgR2xvc3NhcnkuLi4NCQlCdWlsZCBOZXh0UHJldiBMaXN0Li4uDQkJQ29weSBVUkwNCQlWaWV3IFBhZ2UgaW4gRmluZGVyDQkJLQ0JCUNoYW5nZWQgUGFnZXMNCQkJUHVibGlzaCBBbGwuLi4NCQkJQWRkIFNlbGVjdGVkIENlbGwuLi4NCQkJT3BlbiBMaXN0DQkJCUNsZWFyIExpc3QuLi4NCQkJLQ0JCQk9IHN5c3RlbS5tZW51cy5zY3JpcHRzLmFkZFRvQ2hhbmdlZFBhZ2VzTWVudUl0ZW0gKCkNCS0NCVRleHQNCQlJbnNlcnQgRGF0ZS9UaW1lDQkJQ29tbW9uIFN0eWxlcw0JCQk9IG1lbnVzLnNjcmlwdHMuc3R5bGVNZW51SXRlbSAoInRpbnkiKQ0JCQk9IG1lbnVzLnNjcmlwdHMuc3R5bGVNZW51SXRlbSAoIm1lZGl1bSIpDQkJCT0gbWVudXMuc2NyaXB0cy5zdHlsZU1lbnVJdGVtICgicmVhZGFibGUiKQ0JCQk9IG1lbnVzLnNjcmlwdHMuc3R5bGVNZW51SXRlbSAoImh1Z2UiKQ0JLQ0JVG9vbHMNCVN1aXRlcw0JU2NoZWR1bGVyDQkJQWRkIGFuIEV2ZXJ5IE1pbnV0ZSBUYXNrLi4uDQkJQWRkIGFuIEhvdXJseSBUYXNrLi4uDQkJQWRkIGFuIE92ZXJuaWdodCBUYXNrLi4uDQkJLQ0JCT0gaWYgdXNlci5zY2hlZHVsZXIucHJlZnMucnVuVGhyZWFkcyB7IkRpc2FibGUgVGhyZWFkcyJ9IGVsc2UgeyJFbmFibGUgVGhyZWFkcyJ9DQkJLQ0JCU9wZW4gdXNlci5zY2hlZHVsZXIgVGFibGUNCT0gc3lzdGVtLm1lbnVzLnNjcmlwdHMuYWdlbnRzTWVudUl0ZW0gKCkNCVVubG9jayBTZW1hcGhvcmVzLi4uDQktDQlSdW4gU2VsZWN0aW9uDQktDQk9IGxvY2FsIChzID0gIiBDb21wYWN0IE1vZGFsIE1lbnVzIik7IGlmIHVzZXIucHJlZnMuZmxDb21wYWN0TW9kYWxNZW51cyB7IkRpc2FibGUiICsg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AAAAZQEAASYBPwHuAsBMQU5E////////AAAAAAAAbWFjIAAAAAAAAAAAAAAAAGJhdGNoRXhwb3J0ZXIuaW5pdCAoKQ1sb2NhbCAoZm9sZGVyID0gdXNlci5iYXRjaEV4cG9ydGVyLmZvbGRlcikNaWYgZmlsZS5nZXRGb2xkZXJEaWFsb2cgKCJJbXBvcnQgb2JqZWN0cyBmcm9tOiIsIEBmb2xkZXIpDQliYXRjaEV4cG9ydGVyLmJhdGNoSW1wb3J0IChmb2xkZXIpDYAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAAACAAAAJAAAAOcABAIAAA8GR2VuZXZhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAK8aInC92mHFAAAAXgEAASYBPwHuAsBMQU5E////////AAAAAAAAbWFjIAAAAAAAAAAAAAAAAGlmIGRpYWxvZy5jb25maXJtICgiRG8gYSBCYXRjaCBFeHBvcnQgZXZlcnkgbmlnaHQ/IikNCWxvY2FsIChhZHJzY3JpcHQgPSBAdXNlci5zY2hlZHVsZXIub3Zlcm5pZ2h0LmJhdGNoRXhwb3J0KQ0JbmV3IChzY3JpcHR0eXBlLCBhZHJzY3JpcHQpDQl0YXJnZXQuc2V0IChhZHJzY3JpcHQpDQlvcC5zZXRMaW5lVGV4dCAoImJhdGNoRXhwb3J0ZXIuYmF0Y2hFeHBvcnQgKCkiKQ0JdGFyZ2V0LmNsZWFyICgpDYAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAAACAAAAJAAAAQQAAAIAAA8GR2VuZXZhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAK3ZmzW9zg2mAAAAWwAAASYBPwHuAsBMQU5E////////AAAAAAAAbWFjIAAAAAAAAAAAAAAAAGFwcGxlc2NyaXB0cy5pbml0ICgpDWlmIGZpbGUuZ2V0RmlsZURpYWxvZyAoIkNob29zZSBhIFNjcmlwdCBFZGl0b3ItY29tcGF0aWJsZSBmaWxlLiIsIEB1c2VyLmFwcGxlc2NyaXB0cy5wcmVmcy5sYXN0RmlsZUxvYWRlZCwgMCkNCWxvY2FsIChhZHIpDQlhZHIgPSBhcHBsZXNjcmlwdHMubG9hZEZpbGUgKHVzZXIuYXBwbGVzY3JpcHRzLnByZWZzLmxhc3RGaWxlTG9hZGVkLCBAd29ya3NwYWNlLCBmYWxzZSkNCWlmIGFkciAhPSAiIg0JCWVkaXQgKGFkcikNgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAIAAAAeAAAA6wAAAgAADwZHZW5ldmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAArmCTBb3ODc8AAABWAAABJgE/Ae4CwExBTkT///////8AAAAAAABtYWMgAAAAAAAAAAAAAAAAYXBwbGVzY3JpcHRzLmluaXQgKCkNaWYgZmlsZS5nZXRmb2xkZXJkaWFsb2cgKCJDaG9vc2UgYSBmb2xkZXIgY29udGFpbmluZyBBcHBsZVNjcmlwdHMiLCBAdXNlci5hcHBsZXNjcmlwdHMucHJlZnMubGFzdGZvbGRlcikNCWxvY2FsIChhZHIgPSBhcHBsZXNjcmlwdHMubG9hZEZvbGRlciAodXNlci5hcHBsZXNjcmlwdHMucHJlZnMubGFzdGZvbGRlciwgdHJ1ZSkpDQlpZiBhZHIgIT0gIiINCQllZGl0IChhZHIpDYAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAAACAAAAKgAAAUoAAAIAAA8GR2VuZXZhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAK5mCl+9zg3aAAAAVQAAASYBPwHuAsBMQU5E////////AAAAAAAAbWFjIAAAAAAAAAAAAAAAAGFwcGxlc2NyaXB0cy5pbml0ICgpDWlmIGZpbGUuZ2V0RmlsZURpYWxvZyAoIkNob29zZSBhbiBPU0FYIGZpbGUuIiwgQHVzZXIuYXBwbGVzY3JpcHRzLnByZWZzLmxhc3RPU0FYZmlsZSwgJ29zYXgnKQ0JbG9jYWwgKGFkckV4dGVuc2lvbiA9IGFwcGxlc2NyaXB0cy5sb2FkT1NBWCAodXNlci5hcHBsZXNjcmlwdHMucHJlZnMubGFzdE9TQVhmaWxlKSkNCWlmIGFkckV4dGVuc2lvbiA9PSBuaWwNCQlkaWFsb2cuYWxlcnQgKCJUaGVyZSBhcmUgbm8gVUNNRHMsIFhDTURzIG9yIFhGQ05zIG9yIE9TQVhzIGluIHRoaXMgZmlsZSAuIikNCWVsc2UNCQllZGl0IChhZHJFeHRlbnNpb24pDYAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAAACAAAAVAAAAe8AAAIAAA8GR2VuZXZhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAK32oAq912jRAAAAcQAAASYBPwHuAsBMQU5E////////AAAAAAAAbWFjIAAAAAAAAAAAAAAAAGxvY2FsIChhZHJvYmplY3QpDXRyeQ0JaWYgYSBub24tdGFibGUgd2luZG93IGlzIGZyb250bW9zdCwgaXQncyB0aGUgYWRkcmVzcyBvZiB0aGF0IHdpbmRvdw0JCWlmIGEgdGFibGUgd2luZG93IGlzIGZyb250bW9zdCwgaXQncyB0aGUgYWRkcmVzcyBvZiB0aGUgY2VsbCBjdXJzb3INCWxvY2FsICh3ZnJvbnQgPSB3aW5kb3cuZnJvbnRtb3N0ICgpKQ0JaWYgd2Zyb250ID09ICJGcm9udGllci5yb290Ig0JCXNjcmlwdEVycm9yICgiQ2FuJ3QgcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiBvbiBGcm9udGllcidzIG1haW4gd2luZG93LiIpDQlhZHJvYmplY3QgPSBhZGRyZXNzICh3ZnJvbnQpDQlpZiB0eXBlT2YgKGFkcm9iamVjdF4pID09IHRhYmxldHlwZQ0JCWFkcm9iamVjdCA9IHRhYmxlLmdldGN1cnNvciAoKQ1lbHNlDQlzY3JpcHRFcnJvciAoIkNhbid0IGVkaXQgdGhlIGN1cnJlbnQgb2JqZWN0IGV4dGVybmFsbHkuIikNDW9kYkVkaXRvci5lZGl0IChhZHJvYmplY3QpDYAAAAAAAIAAAAAAAIQAAAAAAAAAAAAAAIAAAAAAAIQAAAAAAAAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAAACAAAABgAAABYAAAIAAA8GR2VuZXZhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAKPJypO9zhBRAAAAgAEAALEAtgEuAclMQU5E////////AAAAAAAAbWFjIAAAAAAAAAAAAAAAAHdpbmRvdy5xdWlja1NjcmlwdCAoKQ2AAAAAAAAAAgAAAE4AAAFyAAACAAAPBkdlbmV2YQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAACxeBEtvbz93AAAAD0AAAEmAT8B7gLATEFORP///////wAAAAAAAG1hYyAAAAAAAAAAAAAAAABsb2NhbCAoYWRyVGFibGUgPSBAdXNlci5pbmV0ZC5jb25maWcuaHR0cCkNaWYgaW5ldGQuaXNEYWVtb25SdW5uaW5nIChhZHJUYWJsZSkNCWluZXRkLnN0b3BPbmUgKGFkclRhYmxlKQ0JYWRyVGFibGVeLnN0YXJ0dXAgPSBmYWxzZQ0JdHJ5DQkJaW5ldGQuc3RvcE9uZSAoQHVzZXIuaW5ldGQuY29uZmlnLmh0dHAyKQ0JCXVzZXIuaW5ldGQuY29uZmlnLmh0dHAyLnN0YXJ0dXAgPSBmYWxzZQ1lbHNlDQlhZHJUYWJsZV4uc3RhcnR1cCA9IHRydWUNCWluZXRkLnN0YXJ0T25lIChhZHJUYWJsZSkNCXRyeQ0JCXVzZXIuaW5ldGQuY29uZmlnLmh0dHAyLnN0YXJ0dXAgPSB0cnVlDQkJaW5ldGQuc3RhcnRPbmUgKEB1c2VyLmluZXRkLmNvbmZpZy5odHRwMikNgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAgAAAAAAAAAIAAAA8AAABaQAAAgAADwZHZW5ldmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAwAAAAAAAAAAsXgQy77c7sEAAAA8AAABJgE/Ae4CwExBTkT///////8AAAAAAABtYWMgAAAAAAAAAAAAAAAAbG9jYWwgKG9sZHBvcnQgPSB1c2VyLmluZXRkLmNvbmZpZy5odHRwLnBvcnQpDWxvY2FsIChwb3J0ID0gb2xkcG9ydCkNbG9jYWwgKGlzUnVubmluZyA9IGluZXRkLmlzRGFlbW9uUnVubmluZyAoQHVzZXIuaW5ldGQuY29uZmlnLmh0dHApKQ1pZiBkaWFsb2cuZ2V0SW50ICgi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 \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:mbar:system.menus.menubar ! AAEFAQAACeAAAQAAAAAAAAAAAAAAKwADA/0E/QAAAAAAAAZHZW5ldmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgArAAMD/QT9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAN0AAAFhAAAAgAADwZHZW5ldmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAApJOSS79fNwUAAPVEAAAAsQC2AS4ByUxBTkT///////8AAAAAAABtYWMgAAAAAAAAAAAAAAAARGF0YWJhc2UNCUp1bXAuLi4NCVNlYXJjaC4uLg0JLQ0JPSBzeXN0ZW0ubWVudXMuc2NyaXB0cy51cGRhdGVNZW51SXRlbSAoKQ0JLQ0JQWRkIHRvIHVzZXIuZGF0YWJhc2VzLi4uDQktDQk9ICJCYWNrdXAgIiArIGZpbGUuZmlsZUZyb21QYXRoIChGcm9udGllci5nZXRGaWxlcGF0aCAoKSkgKyAiLi4uIg0JRXhwb3J0Li4uDQlCYXRjaCBFeHBvcnQNCQlPcGVuIExpc3QNCQlPcGVuIFRhYmxlDQkJLQ0JCUV4cG9ydCBmcm9tIExpc3QuLi4NCQlJbXBvcnQgZnJvbSBGb2xkZXIuLi4NCQktDQkJTmlnaHRseSBFeHBvcnQuLi4NCS0NCUFwcGxlU2NyaXB0cw0JCUxvYWQgQXBwbGVTY3JpcHQuLi4NCQlMb2FkIGEgRm9sZGVyLi4uDQkJTG9hZCBhbiBPU0FYLi4uDQktDQlFZGl0IHdpdGggQXBwDU9wZXJhdGlvbnMNCVF1aWNrIFNjcmlwdA0JLQ0JV2ViDQkJV2ViIFNlcnZlcg0JCQk9IHN5c3RlbS5tZW51cy5zY3JpcHRzLnNlcnZlck1lbnVJdGVtICgpDQkJCVNldCBQb3J0Li4uDQkJLQ0JCVByZXZpZXcgUGFnZQ0JCS0NCQlQdWJsaXNoIFBhZ2UNCQlQdWJsaXNoIFRhYmxlLi4uDQkJLQ0JCU5ldyBXZWJzaXRlLi4uDQkJSW1wb3J0IFdlYnNpdGUuLi4NCQktDQkJTmV3IFBhZ2UuLi4NCQktDQkJTG9hZCBJbWFnZSBGaWxlLi4uDQkJQnVpbGQgR2xvc3NhcnkuLi4NCQlCdWlsZCBOZXh0UHJldiBMaXN0Li4uDQkJQ29weSBVUkwNCQlWaWV3IFBhZ2UgaW4gRmluZGVyDQkJLQ0JCUNoYW5nZWQgUGFnZXMNCQkJUHVibGlzaCBBbGwuLi4NCQkJQWRkIFNlbGVjdGVkIENlbGwuLi4NCQkJT3BlbiBMaXN0DQkJCUNsZWFyIExpc3QuLi4NCQkJLQ0JCQk9IHN5c3RlbS5tZW51cy5zY3JpcHRzLmFkZFRvQ2hhbmdlZFBhZ2VzTWVudUl0ZW0gKCkNCS0NCVRvb2xzDQlTdWl0ZXMNCVNjaGVkdWxlcg0JCUFkZCBhbiBFdmVyeSBNaW51dGUgVGFzay4uLg0JCUFkZCBhbiBIb3VybHkgVGFzay4uLg0JCUFkZCBhbiBPdmVybmlnaHQgVGFzay4uLg0JCS0NCQk9IGlmIHVzZXIuc2NoZWR1bGVyLnByZWZzLnJ1blRocmVhZHMgeyJEaXNhYmxlIFRocmVhZHMifSBlbHNlIHsiRW5hYmxlIFRocmVhZHMifQ0JCS0NCQlPcGVuIHVzZXIuc2NoZWR1bGVyIFRhYmxlDQk9IHN5c3RlbS5tZW51cy5zY3JpcHRzLmFnZW50c01lbnVJdGVtICgpDQlVbmxvY2sgU2VtYXBob3Jlcy4uLg0JLQ0JUnVuIFNlbGVjdGlvbg0JLQ0JPSBsb2NhbCAocyA9ICIgQ29tcGFjdCBNb2RhbCBNZW51cyIpOyBpZiB1c2VyLnByZWZzLmZsQ29tcGFjdE1vZGFsTWVudXMgeyJEaXNhYmxlIiArIHN9IGVsc2UgeyJFbmFibGUiICsgc30NCT0gbG9jYWwgKHMgPSAiIFJlcGxhY2UgRGlhbG9nIEV4cGVydCBNb2RlIik7IGlmIHVzZXIucHJlZnMuZmxSZXBsYWNlRGlhbG9nRXhwZXJ0TW9kZSB7IkRpc2FibGUiICsgc30gZWxzZSB7IkVuYWJsZSIgKyBzfQ2AAAAAAAAAAAAAAApKAAAAAAAFs1MkAAAAAAAKAAAAAAAABbNTKAAAAAAAAAAAAAAACgAAAAAAAAWzUywAAAAAAAAAAAAAAAoAAAAAAAABf9N0AAAAAAAAAAAAAAAKAAAAAAAAAX/TgAAAAAAACjMAAAAAAAF/04QAAAAAAAAAAAAAAAoAAAAAAAABf9OQAAAAAAAK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YWwgKGZvbGRlciA9IHVzZXIuYmF0Y2hFeHBvcnRlci5mb2xkZXIpDWlmIGZpbGUuZ2V0Rm9sZGVyRGlhbG9nICgiSW1wb3J0IG9iamVjdHMgZnJvbToiLCBAZm9sZGVyKQ0JYmF0Y2hFeHBvcnRlci5iYXRjaEltcG9ydCAoZm9sZGVyKQ2AAAAAAACAAAAAAACAAAAAAACAAAAAAAAAAgAAACQAAADnAAQCAAAPBkdlbmV2YQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAACvGiJwvdphxQAAAF4BAAEmAT8B7gLATEFORP///////wAAAAAAAG1hYyAAAAAAAAAAAAAAAABpZiBkaWFsb2cuY29uZmlybSAoIkRvIGEgQmF0Y2ggRXhwb3J0IGV2ZXJ5IG5pZ2h0PyIpDQlsb2NhbCAoYWRyc2NyaXB0ID0gQHVzZXIuc2NoZWR1bGVyLm92ZXJuaWdodC5iYXRjaEV4cG9ydCkNCW5ldyAoc2NyaXB0dHlwZSwgYWRyc2NyaXB0KQ0JdGFyZ2V0LnNldCAoYWRyc2NyaXB0KQ0Jb3Auc2V0TGluZVRleHQgKCJiYXRjaEV4cG9ydGVyLmJhdGNoRXhwb3J0ICgpIikNCXRhcmdldC5jbGVhciAoKQ2AAAAAAACAAAAAAACAAAAAAACAAAAAAACAAAAAAACAAAAAAAAAAgAAACQAAAEEAAACAAAPBkdlbmV2YQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAACt2Zs1vc4NpgAAAFsAAAEmAT8B7gLATEFORP///////wAAAAAAAG1hYyAAAAAAAAAAAAAAAABhcHBsZXNjcmlwdHMuaW5pdCAoKQ1pZiBmaWxlLmdldEZpbGVEaWFsb2cgKCJDaG9vc2UgYSBTY3JpcHQgRWRpdG9yLWNvbXBhdGlibGUgZmlsZS4iLCBAdXNlci5hcHBsZXNjcmlwdHMucHJlZnMubGFzdEZpbGVMb2FkZWQsIDApDQlsb2NhbCAoYWRyKQ0JYWRyID0gYXBwbGVzY3JpcHRzLmxvYWRGaWxlICh1c2VyLmFwcGxlc2NyaXB0cy5wcmVmcy5sYXN0RmlsZUxvYWRlZCwgQHdvcmtzcGFjZSwgZmFsc2UpDQlp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DwZHZW5ldmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAsXgRLb28/dwAAAA9AAABJgE/Ae4CwExBTkT///////8AAAAAAABtYWMgAAAAAAAAAAAAAAAAbG9jYWwgKGFkclRhYmxlID0gQHVzZXIuaW5ldGQuY29uZmlnLmh0dHApDWlmIGluZXRkLmlzRGFlbW9uUnVubmluZyAoYWRyVGFibGUpDQlpbmV0ZC5zdG9wT25lIChhZHJUYWJsZSkNCWFkclRhYmxlXi5zdGFydHVwID0gZmFsc2UNCXRyeQ0JCWluZXRkLnN0b3BPbmUgKEB1c2VyLmluZXRkLmNvbmZpZy5odHRwMikNCQl1c2VyLmluZXRkLmNvbmZpZy5odHRwMi5zdGFydHVwID0gZmFsc2UNZWxzZQ0JYWRyVGFibGVeLnN0YXJ0dXAgPSB0cnVlDQlpbmV0ZC5zdGFydE9uZSAoYWRyVGFibGUpDQl0cnkNCQl1c2VyLmluZXRkLmNvbmZpZy5odHRwMi5zdGFydHVwID0gdHJ1ZQ0JCWluZXRkLnN0YXJ0T25lIChAdXNlci5pbmV0ZC5jb25maWcuaHR0cDIpDYAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAAACAAAAPAAAAWkAAAIAAA8GR2VuZXZhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAMAAAAAAAAAALF4EMu+3O7BAAAAPAAAASYBPwHuAsBMQU5E////////AAAAAAAAbWFjIAAAAAAAAAAAAAAAAGxvY2FsIChvbGRwb3J0ID0gdXNlci5pbmV0ZC5jb25maWcuaHR0cC5wb3J0KQ1sb2NhbCAocG9ydCA9IG9sZHBvcnQpDWxvY2FsIChpc1J1bm5pbmcgPSBpbmV0ZC5pc0RhZW1vblJ1bm5pbmcgKEB1c2VyLmluZXRkLmNvbmZpZy5odHRwKSkNaWYgZGlhbG9nLmdldEludCAoIlBvcnQgZm9yIGh0dHAgc2VydmVyOiIsIEBwb3J0KQ0JaWYgcG9ydCAhPSBvbGRwb3J0DQkJaWYgaXNSdW5uaW5nDQkJCWlu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 \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-30 15:45:25
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/startup In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18106 Modified Files: startupScript Log Message: added user.prefs.flReplaceDialogExpertMode, added menu command to toggle its state Index: startupScript =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/startup/startupScript,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** startupScript 5 Sep 2005 16:28:17 -0000 1.8 --- startupScript 30 Sep 2005 15:45:11 -0000 1.9 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.startup.startupScript ! ÇThis script runs when Frontier opens the Frontier.root file. ÇChanges Ç8/23/05; 7:22:18 PM by TAC Çadded user.prefs.flCompactModalMenus Ç7/14/05; 10:35:39 AM by TAC Çsystem.menus.data.currentMenuType set to nil so agent will update modal menu properly upon relaunch Ç7/6/05; 12:21:38 PM by TAC Çchanged user.callbacks.sendmail to user.callbacks.tcpSendMail Çadded user.prefs.mailHostPort Ç6/15/05; 6:52:11 PM by TAC Çrewrite for Open Source release, bring in code from startup.startupScript, userland.firstRootRun, userland.finishInstall, and userland.cleanRoot ÇOld code Çstartup.startupScript <http://cvs.sourceforge.net/viewcvs.py/frontierkernel/odbs/frontierRoot/system/startup/startupScript?rev=1.1> Çuserland.firstRootRun <http://cvs.sourceforge.net/viewcvs.py/frontierkernel/odbs/frontierRoot/system/verbs/builtins/userland/Attic/firstRootRun?rev=1.1> Çuserland.finishInstall <http://cvs.sourceforge.net/viewcvs.py/frontierkernel/odbs/frontierRoot/system/verbs/builtins/userland/Attic/finishInstall?rev=1.1> Çuserland.cleanRoot <http://cvs.sourceforge.net/viewcvs.py/frontierkernel/odbs/frontierRoot/system/verbs/builtins/userland/Attic/cleanRoot?rev=1.1> Ç06/08/01; 11:24:35 PM by JES ÇWhen opening databases defined at user.databases, skip objects which aren't tables. This avoids the condition where startup wouldn't complete, if there's an item #1 in the user.databases table. Ç06/02/01; 8:34:20 PM by PBS ÇDo the web-based install and open the Control Panel if this is the first root run. Ç04/28/01; 7:48:46 PM by JES ÇCall Frontier.tools.startup in a try block, so that the startup process will finish even if Tools installation fails. Ç04/20/01; 4:49:05 PM by JES ÇCall tools.startup to install Tools at startup. Ç10/7/99; 4:20:26 PM by PBS ÇOnly run the #startup script in a guest database if runStartupScript exists and is true. Previously, it would be run whether runStartupScript was true or false. Çhttp://frontier.userland.com/stories/storyReader$1760 Ç10/6/99; 10:21:35 PM by PBS ÇOnly set the taskTime for the overnight task if it's in the past. This fixes a bug when the taskTime was before midnight, but it was being set for the next day, so the overnight task wouldn't run. Çhttp://frontier.userland.com/stories/storyReader$1761 Ç8/19/99; 6:44:48 AM by DW ÇMake sure that taskTimes in user.scheduler.tasks are in the future. ÇWe do this much more quickly than scheduler.monitor would. Çhttp://discuss.userland.com/msgReader$9658 local (flEnableAgents = true, flOpenDatabases = true, flEnableHttpServer = true); // can be set by the external startup script local (flFirstRootRun = true); bundle { // miscellaneous variable initializations and checks, phase 1 of 2 Frontier.pathString = file.folderFromPath (frontier.getFilePath ())}; bundle { // first root run, phase 1 of 2 if defined (user.prefs.firstRootRun) { flFirstRootRun = user.prefs.firstRootRun}; if flFirstRootRun { // license agreement, finish cleanup on user's machine Frontier.enableAgents (false); // try to keep agents from reporting errors while window.frontmost () != "" { // open windows can mess things up later on window.hide (window.frontmost ())}; Çreturn (false) // enable for testing new (tableType, @system.temp); new (tableType, @root.user); backups.init (); batchExporter.init (); export.init (); rootUpdates.init (); // set up user.rootUpdates, even though root updates uses tcp, its ok to set up here as no tcp calls are made at this time webEdit.init (); bundle { // set up user.prefs new (tableType, @user.prefs); user.prefs.firstRootRun = true; user.prefs.flCompactModalMenus = false; user.prefs.flShortTimeStamp = true; user.prefs.flWinStandardMaximize = true; user.prefs.frontierIsServer = false; user.prefs.initials = ""; user.prefs.mailAddress = ""; user.prefs.mailHost = ""; user.prefs.mailHostPort = 25; // port is the most common port user.prefs.name = ""; user.prefs.openAboutWindow = false; user.prefs.organization = ""; Frontier.setupUserPrefsFonts (); bundle { // set up user.prefs.dialogs new (tableType, @user.prefs.dialogs); user.prefs.dialogs.newSuiteName = ""; user.prefs.dialogs.jumpAddress = "websites"}; // or should this be workspace? bundle { // set up user.prefs.search new (tableType, @user.prefs.search); user.prefs.search.searchFor = "9.0.1"; user.prefs.search.replaceWith = Frontier.version (); user.prefs.search.caseSensitive = false; user.prefs.search.closeWindows = true; user.prefs.search.flatSearch = false; user.prefs.search.frontWindowOnly = false; user.prefs.search.wholeWords = false; user.prefs.search.wrapAround = true; user.prefs.search.winStandardFindCommand = false}; bundle { // set up user.prefs.commonStyles case sys.os () { "MacOS" { if system.environment.isCarbon { user.prefs.commonStyles = Frontier.data.commonStylesMacCarbon} else { user.prefs.commonStyles = Frontier.data.commonStylesMac}}; "Win95"; "WinNT" { user.prefs.commonStyles = Frontier.data.commonStylesWin}}}}; bundle { // set up the quick script window clipboard.putvalue ("dialog.notify (\"Hello World!\")"); window.quickScript (); editmenu.selectall (); editmenu.paste (); window.close ("Quick Script")}; bundle { // set up root window local (w = "root"); window.open (w); window.setPosition (w, 0, 0); editMenu.setFont (user.prefs.fonts.tableFont); editMenu.setFontSize (user.prefs.fonts.tableFontSize); window.zoom (w)}; bundle { // set up user.callbacks new (tableType, @user.callbacks); new (tableType, @user.callbacks.closeWindow); new (tableType, @user.callbacks.cmd2click); new (tableType, @user.callbacks.compileChangedScript); new (tableType, @user.callbacks.control2click); new (tableType, @user.callbacks.fileWriteWholeFile); new (tableType, @user.callbacks.opCollapse); new (tableType, @user.callbacks.opCursorMoved); new (tableType, @user.callbacks.openWindow); new (tableType, @user.callbacks.opExpand); new (tableType, @user.callbacks.opInsert); new (tableType, @user.callbacks.opReturnKey); new (tableType, @user.callbacks.opRightClick); new (tableType, @user.callbacks.opStruct2Click); new (tableType, @user.callbacks.option2click); new (tableType, @user.callbacks.resume); new (tableType, @user.callbacks.saveWindow); new (tableType, @user.callbacks.shutdown); new (tableType, @user.callbacks.startup); new (tableType, @user.callbacks.statusMessage); new (tableType, @user.callbacks.suspend); new (tableType, @user.callbacks.systemTrayIcon2Click); new (tableType, @user.callbacks.systemTrayIconRightClick); new (tableType, @user.callbacks.tcpSendMail)}; bundle { // set up user.menus new (tableType, @user.menus); Çuser.menus.bookmarkMenu = userland.virginBookmarkMenu user.menus.customMenu = Frontier.data.virginCustomMenu}; bundle { // clear applications paths in system.verbs.apps local (adrAppsTable = @system.verbs.apps, i); for i = 1 to sizeof (adrAppsTable^) { local (adrAppInfo = @adrAppsTable^ [i].appInfo); if defined (adrAppInfo^) { adrAppInfo^.path = ""}}}; bundle { // set up Frontier.tools.thread Frontier.tools.thread.ct = 0; Frontier.tools.thread.enabled = true}; bundle { // set up workspace new (tableType, @root.workspace); new (outlineType, @workspace.notepad)}; bundle { // miscellaneous new (tableType, @root.scratchpad); new (tableType, @system.deskscripts); new (tableType, @user.databases); new (tableType, @user.protocols); };Çnew (tableType, @websites.["#data"]) bundle { // open mainResponder.root, hidden and add to user.databases local (appFolder = Frontier.getSubFolder ("apps")); if not defined ( [appFolder + "mainResponder.root"] ) { Frontier.installApp ("mainResponder.root", false)}}; bundle { // open prefs.root, hidden and add to user.databases local (f = Frontier.getSubFolder ("www") + "prefs.root"); if not (defined ([f])) { fileMenu.open (f, true);}; //open hidden ÇAdd an entry to the user.databases table. local (adrTable = @user.databases.["prefs.root"]); new (tableType, adrTable); adrTable^.f = f; adrTable^.openOnStartup = true; adrTable^.runStartupScript = false; adrTable^.supportsSubscribe = false}; Çbundle //initialize responders Çuser.webserver.responders.websiteFramework.data.docTree.samples = @websites.samples Çtry Çdelete (@user.webserver.responders.websiteFramework.data.docTree.allSites) Çtry Çdelete (@user.webserver.responders.websiteFramework.data.docTree.contents) Ç Çif defined (user.webserver.responders.manilaEdit) Çdelete (@user.webserver.responders.manilaEdit)}; };ÇfileMenu.save () bundle { // system.temp.Frontier if defined (system.temp.Frontier) { //only run the startup script once return}; new (tableType, @system.temp.Frontier); system.temp.Frontier.startupTime = clock.now (); system.temp.Frontier.startingUp = true}; bundle { // miscellaneous variable initializations and checks, phase 2 of 2 system.menus.data.currentsuite = ""; system.menus.data.currentMenuType = nil; system.menus.data.currentmenu = 0; bundle { // check for presence of Psapi.dll if sys.os () == "WinNT" { if not (sys.appIsRunning ("Frontier.exe")) { // 11/27/04; 12:14:40 PM by TAC - would it be possible for Frontier to install this on its own? dialog.alert ("You need to run the Frontier Psapi Installer for certain Frontier verbs to work properly.")}}}}; bundle { //open the about window if the pref says we should Çadded 12/16/98; 6:47:28 PM by DW if not defined (user.prefs.openAboutWindow) { user.prefs.openAboutWindow = true}; if user.prefs.openAboutWindow { window.about ()}}; bundle { //initialize the log, next bit of code could add a log item Çadded 12/16/98; 6:52:40 PM by DW if defined (log.startup) { log.startup ()}}; bundle { //run the external startup script local (fname = "frontierStartupCommands.txt"); local (f = file.folderFromPath (Frontier.getProgramPath ()) + fname); if file.exists (f) { try { evaluate (string (file.readWholeFile (f)))} else { log.add ("Error running " + fname + ": \"" + tryError + "\"", "startupError", flwptext:true)}}}; bundle { // tcp based services webserver.init (); // needs to load first betty.init (); // needs to load second soap.init ()}; bundle { // people based services people.init (); // needs to load first custody.init (); webEditServer.init ()}; bundle { //open all the databases that have openOnStartup true Çadded 12/16/98; 6:23:16 PM by DW if defined (user.databases) { if flOpenDatabases { local (i, flmsg = false); for i = 1 to sizeof (user.databases) { if typeOf (user.databases[i]) == tableType { //06/08/01 JES: avert item #1 errors with user.databases [i] { local (flopened = false); try { if openOnStartup { msg (this + ": Opening " + file.fileFromPath (f)); flmsg = true; fileMenu.open (f, hidden:true); flopened = true}} else { log.add ("Startup error opening guest database " + nameof (user.databases [i]) + ": \"" + tryError + "\"", "startupError", flwptext:true)}; if flopened { if defined (runStartupScript) { if runStartupScript { //PBS 10/7/99: check the value of runStartupScript: only run the script if the boolean is true local (adrscript = @[filespec (f)].["#startup"]); if defined (adrscript^) { try { adrscript^ ()} else { log.add ("Error running #startup script in guest database " + nameof (user.databases [i]) + ": \"" + tryError + "\"", "startupError", flwptext:true)}}}}}}}}; if flmsg { msg ("")}}}}; try { //04/28/2001 JES: prevent startup from failing if Tool installation fails. Frontier.tools.startup ()}; scheduler.init (); html.init (); bundle { // webBrowser webBrowser.init (); if system.environment.isMac { try {new (tableType, @user.odbEditors.data.openFiles)}}; //Empty out the list of externally-edited files. if system.environment.isWindows { user.webBrowser.winDefaultBrowserApp = file.findApplication ("htm")}}; bundle { // first root run, phase 2 of 3 if flFirstRootRun { bundle { // set up websites table and related with websites.["#ftpSite"] { folder = file.folderFromPath (Frontier.getProgramPath ()) + "Websites" + file.getPathChar (); Çfile.sureFolder (folder) url = file.fileToURL (folder); isLocal = true}; user.html.sites.default = websites.["#ftpSite"]}; bundle { // personalize this copy of Frontier, configure network settings, and complete the installation local (flWebBasedInstall = true); if flWebBasedInstall { Ç11/29/04; 11:17:45 AM by TAC - the following seems like it should be done as part of mainRepsonder startup, init. IIRC, members.root is a feature of mainResponder bundle { //create the Admin membership group if needed local (adrRoot = @[system.temp.mainResponder.membersRootFile]); local (adrGroup = @adrRoot^.admin); if not defined (adrGroup^) { new (tableType, adrGroup)}; if not defined (adrGroup^.callbacks) { new (tableType, @adrGroup^.callbacks)}; if not defined (adrGroup^.cookieDomain) { adrGroup^.cookieDomain = ""}; if not defined (adrGroup^.cookieExpires) { adrGroup^.cookieExpires = "Mon, 01 Apr 2030 07:00:00 GMT"}; if not defined (adrGroup^.cookieName) { adrGroup^.cookieName = "Admin"}; if not defined (adrGroup^.mailReturnAddress) { adrGroup^.mailReturnAddress = user.prefs.mailAddress}; if not defined (adrGroup^.mailSubject) { adrGroup^.mailSubject = "Admin"}; if not defined (adrGroup^.mailTemplate) { wp.newTextObject ("", @adrGroup^.mailTemplate)}; if not defined (adrGroup^.openToPublic) { adrGroup^.openToPublic = false}; if not defined (adrGroup^.users) { new (tableType, @adrGroup^.users)}}; bundle { // prep for web based install via mainResponder admin website local (portString = ""); if user.inetd.config.http2.port != 80 { portString = ":" + user.inetd.config.http2.port}; if not defined (system.temp.Frontier.setupFrontier) { new (tableType, @system.temp.Frontier.setupFrontier)}; system.temp.Frontier.setupFrontier.flAllowLocalAccessToSetupPage = true; local (setupUrl = "http://127.0.0.1" + portString + "/setupFrontier"); if not defined (system.temp.installer) { new (tableType, @system.temp.installer)}; system.temp.installer.urlToOpen = setupUrl}} else { on infoDialog () { //prompt the user for name, org and initials on kernelCall (adrName, adrInitials, adrOrg, adrEmail) { kernel (dialog.getUserInfo)}; local (name, initials, organization, email); case sys.os () { "Win95"; "WinNT" { if not (kernelCall (@name, @initials, @organization, @email)) { return (false)}; if initials == "" { dialog.alert ("You must specify your initials."); infoDialog ()}; user.prefs.name = name; user.prefs.initials = initials; user.prefs.organization = organization; user.prefs.mailAddress = email}; "MacOS" { bundle { //initialize user.prefs.name etc using info from Internet Config try { name = ic.geticpreference (ic.eventinfo.realName)}; try { organization = ic.geticpreference (ic.eventinfo.organization)}; try { email = ic.geticpreferece (ic.eventinfo.emailAddress)}; user.prefs.name = name; user.prefs.organization = organization; if name != "" { local (i); user.prefs.initials = name [1]; for i = 3 to sizeof (name) { if name [i] == ' ' { user.prefs.initials = user.prefs.initials + name [i+1]}}}}; card.run (@system.cards.userInfoDialog)}}; return (true)}; infoDialog ()}}; //AR 09/27/04 : personalize install ÇrootUpdates.getCurrent ("Frontier") // 11/29/04; 6:57:54 PM by TAC - if we get a root update then we'll need to use rootUpdates.update bundle { // about window local (w); window.about (); w = window.frontMost (); window.zoom (w); menus.scripts.styleCommand ("medium"); window.setPosition (w, 25, 75); };Çwindow.close (s) bundle { // license edit (@system.startup.license); // 12/4/04; 9:26:35 PM by TAC - i rather do this near the beginning of phase 1 firstRootRun but had a problem with this window and setting up the quick script window wp.setSelect (0, 0)}}}; system.callbacks.startup (); //call user's startup scripts bundle { // build menu bar system.menus.buildMenuBar (); system.menus.buildSuitesSubmenu ()}; //5.0 Frontier.enableAgents (flEnableAgents); if flEnableHttpServer { //6.0, daemons don't start up until all the startup code has run new (tableType, @user.inetd.listens); inetd.start ()}; //start up all daemons with startup set true bundle { // first root run, phase 3 of 3 if flFirstRootRun { if defined (system.temp.installer.urlToOpen) { Çwindow.update ("About Frontier") webBrowser.openUrl (system.temp.installer.urlToOpen); webBrowser.bringToFront ()}; user.prefs.firstRootRun = false}}; system.temp.Frontier.startingUp = false; //signal to all who care, let the hits begin! msg (""); fileMenu.save (); Ç Çbundle //license agreement Çlocal (editLicense = false) Çif sys.os () == "MacOS" Çon itemhit (itemnumber) Çcase (itemnumber) Ç1 Çyes ÇeditLicense = true Çreturn (false) Çstop processing the dialog Ç2 Çno Çreturn (false) Çstop processing the dialog Çreturn (true) Çkeep processing the dialog Çdialog.run (517, 1, @itemhit) Çelse Çif dialog.yesNo ("Frontier is licensed software. Do you want to read the license agreement now?") ÇeditLicense = true Çif editLicense Çbundle //get root update ÇproxyInit () Çif user.prefs.serialNumber != "" and not (string.lower (user.prefs.serialNumber) contains "trial") ÇrootUpdates.init () \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.startup.startupScript ! ÇThis script runs when Frontier opens the Frontier.root file. ÇChanges Ç9/26/05; 4:30:14 PM by TAC Çadded user.prefs.flReplaceDialogExpertMode Ç8/23/05; 7:22:18 PM by TAC Çadded user.prefs.flCompactModalMenus Ç7/14/05; 10:35:39 AM by TAC Çsystem.menus.data.currentMenuType set to nil so agent will update modal menu properly upon relaunch Ç7/6/05; 12:21:38 PM by TAC Çchanged user.callbacks.sendmail to user.callbacks.tcpSendMail Çadded user.prefs.mailHostPort Ç6/15/05; 6:52:11 PM by TAC Çrewrite for Open Source release, bring in code from startup.startupScript, userland.firstRootRun, userland.finishInstall, and userland.cleanRoot ÇOld code Çstartup.startupScript <http://cvs.sourceforge.net/viewcvs.py/frontierkernel/odbs/frontierRoot/system/startup/startupScript?rev=1.1> Çuserland.firstRootRun <http://cvs.sourceforge.net/viewcvs.py/frontierkernel/odbs/frontierRoot/system/verbs/builtins/userland/Attic/firstRootRun?rev=1.1> Çuserland.finishInstall <http://cvs.sourceforge.net/viewcvs.py/frontierkernel/odbs/frontierRoot/system/verbs/builtins/userland/Attic/finishInstall?rev=1.1> Çuserland.cleanRoot <http://cvs.sourceforge.net/viewcvs.py/frontierkernel/odbs/frontierRoot/system/verbs/builtins/userland/Attic/cleanRoot?rev=1.1> Ç06/08/01; 11:24:35 PM by JES ÇWhen opening databases defined at user.databases, skip objects which aren't tables. This avoids the condition where startup wouldn't complete, if there's an item #1 in the user.databases table. Ç06/02/01; 8:34:20 PM by PBS ÇDo the web-based install and open the Control Panel if this is the first root run. Ç04/28/01; 7:48:46 PM by JES ÇCall Frontier.tools.startup in a try block, so that the startup process will finish even if Tools installation fails. Ç04/20/01; 4:49:05 PM by JES ÇCall tools.startup to install Tools at startup. Ç10/7/99; 4:20:26 PM by PBS ÇOnly run the #startup script in a guest database if runStartupScript exists and is true. Previously, it would be run whether runStartupScript was true or false. Çhttp://frontier.userland.com/stories/storyReader$1760 Ç10/6/99; 10:21:35 PM by PBS ÇOnly set the taskTime for the overnight task if it's in the past. This fixes a bug when the taskTime was before midnight, but it was being set for the next day, so the overnight task wouldn't run. Çhttp://frontier.userland.com/stories/storyReader$1761 Ç8/19/99; 6:44:48 AM by DW ÇMake sure that taskTimes in user.scheduler.tasks are in the future. ÇWe do this much more quickly than scheduler.monitor would. Çhttp://discuss.userland.com/msgReader$9658 local (flEnableAgents = true, flOpenDatabases = true, flEnableHttpServer = true); // can be set by the external startup script local (flFirstRootRun = true); bundle { // miscellaneous variable initializations and checks, phase 1 of 2 Frontier.pathString = file.folderFromPath (frontier.getFilePath ())}; bundle { // first root run, phase 1 of 2 if defined (user.prefs.firstRootRun) { flFirstRootRun = user.prefs.firstRootRun}; if flFirstRootRun { // license agreement, finish cleanup on user's machine Frontier.enableAgents (false); // try to keep agents from reporting errors while window.frontmost () != "" { // open windows can mess things up later on window.hide (window.frontmost ())}; Çreturn (false) // enable for testing new (tableType, @system.temp); new (tableType, @root.user); backups.init (); batchExporter.init (); export.init (); rootUpdates.init (); // set up user.rootUpdates, even though root updates uses tcp, its ok to set up here as no tcp calls are made at this time webEdit.init (); bundle { // set up user.prefs new (tableType, @user.prefs); user.prefs.firstRootRun = true; user.prefs.flCompactModalMenus = false; user.prefs.flShortTimeStamp = true; user.prefs.flWinStandardMaximize = true; user.prefs.frontierIsServer = false; user.prefs.initials = ""; user.prefs.mailAddress = ""; user.prefs.mailHost = ""; user.prefs.mailHostPort = 25; // port is the most common port user.prefs.name = ""; user.prefs.openAboutWindow = false; user.prefs.organization = ""; user.prefs.flReplaceDialogExpertMode = false; Frontier.setupUserPrefsFonts (); bundle { // set up user.prefs.dialogs new (tableType, @user.prefs.dialogs); user.prefs.dialogs.newSuiteName = ""; user.prefs.dialogs.jumpAddress = "websites"}; // or should this be workspace? bundle { // set up user.prefs.search new (tableType, @user.prefs.search); user.prefs.search.searchFor = "9.0.1"; user.prefs.search.replaceWith = Frontier.version (); user.prefs.search.caseSensitive = false; user.prefs.search.closeWindows = true; user.prefs.search.flatSearch = false; user.prefs.search.frontWindowOnly = false; user.prefs.search.wholeWords = false; user.prefs.search.wrapAround = true; user.prefs.search.winStandardFindCommand = false}; bundle { // set up user.prefs.commonStyles case sys.os () { "MacOS" { if system.environment.isCarbon { user.prefs.commonStyles = Frontier.data.commonStylesMacCarbon} else { user.prefs.commonStyles = Frontier.data.commonStylesMac}}; "Win95"; "WinNT" { user.prefs.commonStyles = Frontier.data.commonStylesWin}}}}; bundle { // set up the quick script window clipboard.putvalue ("dialog.notify (\"Hello World!\")"); window.quickScript (); editmenu.selectall (); editmenu.paste (); window.close ("Quick Script")}; bundle { // set up root window local (w = "root"); window.open (w); window.setPosition (w, 0, 0); editMenu.setFont (user.prefs.fonts.tableFont); editMenu.setFontSize (user.prefs.fonts.tableFontSize); window.zoom (w)}; bundle { // set up user.callbacks new (tableType, @user.callbacks); new (tableType, @user.callbacks.closeWindow); new (tableType, @user.callbacks.cmd2click); new (tableType, @user.callbacks.compileChangedScript); new (tableType, @user.callbacks.control2click); new (tableType, @user.callbacks.fileWriteWholeFile); new (tableType, @user.callbacks.opCollapse); new (tableType, @user.callbacks.opCursorMoved); new (tableType, @user.callbacks.openWindow); new (tableType, @user.callbacks.opExpand); new (tableType, @user.callbacks.opInsert); new (tableType, @user.callbacks.opReturnKey); new (tableType, @user.callbacks.opRightClick); new (tableType, @user.callbacks.opStruct2Click); new (tableType, @user.callbacks.option2click); new (tableType, @user.callbacks.resume); new (tableType, @user.callbacks.saveWindow); new (tableType, @user.callbacks.shutdown); new (tableType, @user.callbacks.startup); new (tableType, @user.callbacks.statusMessage); new (tableType, @user.callbacks.suspend); new (tableType, @user.callbacks.systemTrayIcon2Click); new (tableType, @user.callbacks.systemTrayIconRightClick); new (tableType, @user.callbacks.tcpSendMail)}; bundle { // set up user.menus new (tableType, @user.menus); Çuser.menus.bookmarkMenu = userland.virginBookmarkMenu user.menus.customMenu = Frontier.data.virginCustomMenu}; bundle { // clear applications paths in system.verbs.apps local (adrAppsTable = @system.verbs.apps, i); for i = 1 to sizeof (adrAppsTable^) { local (adrAppInfo = @adrAppsTable^ [i].appInfo); if defined (adrAppInfo^) { adrAppInfo^.path = ""}}}; bundle { // set up Frontier.tools.thread Frontier.tools.thread.ct = 0; Frontier.tools.thread.enabled = true}; bundle { // set up workspace new (tableType, @root.workspace); new (outlineType, @workspace.notepad)}; bundle { // miscellaneous new (tableType, @root.scratchpad); new (tableType, @system.deskscripts); new (tableType, @user.databases); new (tableType, @user.protocols); };Çnew (tableType, @websites.["#data"]) bundle { // open mainResponder.root, hidden and add to user.databases local (appFolder = Frontier.getSubFolder ("apps")); if not defined ( [appFolder + "mainResponder.root"] ) { Frontier.installApp ("mainResponder.root", false)}}; bundle { // open prefs.root, hidden and add to user.databases local (f = Frontier.getSubFolder ("www") + "prefs.root"); if not (defined ([f])) { fileMenu.open (f, true);}; //open hidden ÇAdd an entry to the user.databases table. local (adrTable = @user.databases.["prefs.root"]); new (tableType, adrTable); adrTable^.f = f; adrTable^.openOnStartup = true; adrTable^.runStartupScript = false; adrTable^.supportsSubscribe = false}; Çbundle //initialize responders Çuser.webserver.responders.websiteFramework.data.docTree.samples = @websites.samples Çtry Çdelete (@user.webserver.responders.websiteFramework.data.docTree.allSites) Çtry Çdelete (@user.webserver.responders.websiteFramework.data.docTree.contents) Ç Çif defined (user.webserver.responders.manilaEdit) Çdelete (@user.webserver.responders.manilaEdit)}; };ÇfileMenu.save () bundle { // system.temp.Frontier if defined (system.temp.Frontier) { //only run the startup script once return}; new (tableType, @system.temp.Frontier); system.temp.Frontier.startupTime = clock.now (); system.temp.Frontier.startingUp = true}; bundle { // miscellaneous variable initializations and checks, phase 2 of 2 system.menus.data.currentsuite = ""; system.menus.data.currentMenuType = nil; system.menus.data.currentmenu = 0; bundle { // check for presence of Psapi.dll if sys.os () == "WinNT" { if not (sys.appIsRunning ("Frontier.exe")) { // 11/27/04; 12:14:40 PM by TAC - would it be possible for Frontier to install this on its own? dialog.alert ("You need to run the Frontier Psapi Installer for certain Frontier verbs to work properly.")}}}}; bundle { //open the about window if the pref says we should Çadded 12/16/98; 6:47:28 PM by DW if not defined (user.prefs.openAboutWindow) { user.prefs.openAboutWindow = true}; if user.prefs.openAboutWindow { window.about ()}}; bundle { //initialize the log, next bit of code could add a log item Çadded 12/16/98; 6:52:40 PM by DW if defined (log.startup) { log.startup ()}}; bundle { //run the external startup script local (fname = "frontierStartupCommands.txt"); local (f = file.folderFromPath (Frontier.getProgramPath ()) + fname); if file.exists (f) { try { evaluate (string (file.readWholeFile (f)))} else { log.add ("Error running " + fname + ": \"" + tryError + "\"", "startupError", flwptext:true)}}}; bundle { // tcp based services webserver.init (); // needs to load first betty.init (); // needs to load second soap.init ()}; bundle { // people based services people.init (); // needs to load first custody.init (); webEditServer.init ()}; bundle { //open all the databases that have openOnStartup true Çadded 12/16/98; 6:23:16 PM by DW if defined (user.databases) { if flOpenDatabases { local (i, flmsg = false); for i = 1 to sizeof (user.databases) { if typeOf (user.databases[i]) == tableType { //06/08/01 JES: avert item #1 errors with user.databases [i] { local (flopened = false); try { if openOnStartup { msg (this + ": Opening " + file.fileFromPath (f)); flmsg = true; fileMenu.open (f, hidden:true); flopened = true}} else { log.add ("Startup error opening guest database " + nameof (user.databases [i]) + ": \"" + tryError + "\"", "startupError", flwptext:true)}; if flopened { if defined (runStartupScript) { if runStartupScript { //PBS 10/7/99: check the value of runStartupScript: only run the script if the boolean is true local (adrscript = @[filespec (f)].["#startup"]); if defined (adrscript^) { try { adrscript^ ()} else { log.add ("Error running #startup script in guest database " + nameof (user.databases [i]) + ": \"" + tryError + "\"", "startupError", flwptext:true)}}}}}}}}; if flmsg { msg ("")}}}}; try { //04/28/2001 JES: prevent startup from failing if Tool installation fails. Frontier.tools.startup ()}; scheduler.init (); html.init (); bundle { // webBrowser webBrowser.init (); if system.environment.isMac { try {new (tableType, @user.odbEditors.data.openFiles)}}; //Empty out the list of externally-edited files. if system.environment.isWindows { user.webBrowser.winDefaultBrowserApp = file.findApplication ("htm")}}; bundle { // first root run, phase 2 of 3 if flFirstRootRun { bundle { // set up websites table and related with websites.["#ftpSite"] { folder = file.folderFromPath (Frontier.getProgramPath ()) + "Websites" + file.getPathChar (); Çfile.sureFolder (folder) url = file.fileToURL (folder); isLocal = true}; user.html.sites.default = websites.["#ftpSite"]}; bundle { // personalize this copy of Frontier, configure network settings, and complete the installation local (flWebBasedInstall = true); if flWebBasedInstall { Ç11/29/04; 11:17:45 AM by TAC - the following seems like it should be done as part of mainRepsonder startup, init. IIRC, members.root is a feature of mainResponder bundle { //create the Admin membership group if needed local (adrRoot = @[system.temp.mainResponder.membersRootFile]); local (adrGroup = @adrRoot^.admin); if not defined (adrGroup^) { new (tableType, adrGroup)}; if not defined (adrGroup^.callbacks) { new (tableType, @adrGroup^.callbacks)}; if not defined (adrGroup^.cookieDomain) { adrGroup^.cookieDomain = ""}; if not defined (adrGroup^.cookieExpires) { adrGroup^.cookieExpires = "Mon, 01 Apr 2030 07:00:00 GMT"}; if not defined (adrGroup^.cookieName) { adrGroup^.cookieName = "Admin"}; if not defined (adrGroup^.mailReturnAddress) { adrGroup^.mailReturnAddress = user.prefs.mailAddress}; if not defined (adrGroup^.mailSubject) { adrGroup^.mailSubject = "Admin"}; if not defined (adrGroup^.mailTemplate) { wp.newTextObject ("", @adrGroup^.mailTemplate)}; if not defined (adrGroup^.openToPublic) { adrGroup^.openToPublic = false}; if not defined (adrGroup^.users) { new (tableType, @adrGroup^.users)}}; bundle { // prep for web based install via mainResponder admin website local (portString = ""); if user.inetd.config.http2.port != 80 { portString = ":" + user.inetd.config.http2.port}; if not defined (system.temp.Frontier.setupFrontier) { new (tableType, @system.temp.Frontier.setupFrontier)}; system.temp.Frontier.setupFrontier.flAllowLocalAccessToSetupPage = true; local (setupUrl = "http://127.0.0.1" + portString + "/setupFrontier"); if not defined (system.temp.installer) { new (tableType, @system.temp.installer)}; system.temp.installer.urlToOpen = setupUrl}} else { on infoDialog () { //prompt the user for name, org and initials on kernelCall (adrName, adrInitials, adrOrg, adrEmail) { kernel (dialog.getUserInfo)}; local (name, initials, organization, email); case sys.os () { "Win95"; "WinNT" { if not (kernelCall (@name, @initials, @organization, @email)) { return (false)}; if initials == "" { dialog.alert ("You must specify your initials."); infoDialog ()}; user.prefs.name = name; user.prefs.initials = initials; user.prefs.organization = organization; user.prefs.mailAddress = email}; "MacOS" { bundle { //initialize user.prefs.name etc using info from Internet Config try { name = ic.geticpreference (ic.eventinfo.realName)}; try { organization = ic.geticpreference (ic.eventinfo.organization)}; try { email = ic.geticpreferece (ic.eventinfo.emailAddress)}; user.prefs.name = name; user.prefs.organization = organization; if name != "" { local (i); user.prefs.initials = name [1]; for i = 3 to sizeof (name) { if name [i] == ' ' { user.prefs.initials = user.prefs.initials + name [i+1]}}}}; card.run (@system.cards.userInfoDialog)}}; return (true)}; infoDialog ()}}; //AR 09/27/04 : personalize install ÇrootUpdates.getCurrent ("Frontier") // 11/29/04; 6:57:54 PM by TAC - if we get a root update then we'll need to use rootUpdates.update bundle { // about window local (w); window.about (); w = window.frontMost (); window.zoom (w); menus.scripts.styleCommand ("medium"); window.setPosition (w, 25, 75); };Çwindow.close (s) bundle { // license edit (@system.startup.license); // 12/4/04; 9:26:35 PM by TAC - i rather do this near the beginning of phase 1 firstRootRun but had a problem with this window and setting up the quick script window wp.setSelect (0, 0)}}}; system.callbacks.startup (); //call user's startup scripts bundle { // build menu bar system.menus.buildMenuBar (); system.menus.buildSuitesSubmenu ()}; //5.0 Frontier.enableAgents (flEnableAgents); if flEnableHttpServer { //6.0, daemons don't start up until all the startup code has run new (tableType, @user.inetd.listens); inetd.start ()}; //start up all daemons with startup set true bundle { // first root run, phase 3 of 3 if flFirstRootRun { if defined (system.temp.installer.urlToOpen) { Çwindow.update ("About Frontier") webBrowser.openUrl (system.temp.installer.urlToOpen); webBrowser.bringToFront ()}; user.prefs.firstRootRun = false}}; system.temp.Frontier.startingUp = false; //signal to all who care, let the hits begin! msg (""); fileMenu.save (); Ç Çbundle //license agreement Çlocal (editLicense = false) Çif sys.os () == "MacOS" Çon itemhit (itemnumber) Çcase (itemnumber) Ç1 Çyes ÇeditLicense = true Çreturn (false) Çstop processing the dialog Ç2 Çno Çreturn (false) Çstop processing the dialog Çreturn (true) Çkeep processing the dialog Çdialog.run (517, 1, @itemhit) Çelse Çif dialog.yesNo ("Frontier is licensed software. Do you want to read the license agreement now?") ÇeditLicense = true Çif editLicense Çbundle //get root update ÇproxyInit () Çif user.prefs.serialNumber != "" and not (string.lower (user.prefs.serialNumber) contains "trial") ÇrootUpdates.init () \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-30 15:29:35
|
Update of /cvsroot/frontierkernel/Frontier/Common/source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14626 Modified Files: dialogs.c claybrowservalidate.c Log Message: for replace dialogs the Duplicate button is now the default button, default button for dialogs is safest option Index: dialogs.c =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/source/dialogs.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** dialogs.c 11 Jan 2005 22:48:05 -0000 1.6 --- dialogs.c 30 Sep 2005 15:29:18 -0000 1.7 *************** *** 47,50 **** --- 47,52 ---- #include "lang.h" #include "mac.h" + #include "langinternal.h" /* 2005-09-26 creedon */ + #include "tablestructure.h" /* 2005-09-26 creedon */ #ifdef flcomponent *************** *** 1403,1411 **** /* return 1 if the user clicked on Replace, 2 if Duplicate, 3 if Cancel. */ ! register DialogPtr pdialog; ! register short itemnumber; sysbeep (); --- 1405,1415 ---- /* + 2005-09-26 creedon: changed order of buttons, default is Duplicate which is the safe option + replace use of replacedialogid with threewaydialog function, easier to maintain one dialog resource, than several + return 1 if the user clicked on Replace, 2 if Duplicate, 3 if Cancel. */ ! /* register DialogPtr pdialog; sysbeep (); *************** *** 1426,1430 **** itemnumber = runmodaldialog (); ! disposemodaldialog (pdialog); switch (itemnumber) { --- 1430,1483 ---- itemnumber = runmodaldialog (); ! disposemodaldialog (pdialog); */ ! ! register short itemnumber; ! bigstring bs, prompt; ! bigstring nobutton, yesbutton; ! boolean fl, flExpertMode = false; ! ! getstringlist (langerrorlist, replaceitemerror, prompt); ! ! parsedialogstring (prompt, bsitem, nil, nil, nil, prompt); ! ! getsystemtablescript (idreplacedialogexpertmode, bs); // "user.prefs.flReplaceDialogExpertMode" ! ! pushhashtable (roottable); ! ! disablelangerror (); ! ! fl = langrunstring (bs, bs); ! ! enablelangerror (); ! ! pophashtable (); ! ! if (fl) ! stringisboolean (bs, &flExpertMode); ! ! if (flExpertMode) { ! copystring (duplicatebuttontext, nobutton); ! copystring (replacebuttontext, yesbutton); ! } ! else { ! copystring (duplicatebuttontext, yesbutton); ! copystring (replacebuttontext, nobutton); ! } ! ! itemnumber = threewaydialog (prompt, yesbutton, nobutton, cancelbuttontext); ! ! if (!flExpertMode) ! switch (itemnumber) { ! ! case 1: ! itemnumber = 2; ! ! break; ! ! case 2: ! itemnumber = 1; ! break; ! ! } switch (itemnumber) { Index: claybrowservalidate.c =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/source/claybrowservalidate.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** claybrowservalidate.c 11 Jan 2005 22:48:04 -0000 1.4 --- claybrowservalidate.c 30 Sep 2005 15:29:18 -0000 1.5 *************** *** 35,40 **** #include "claybrowserstruc.h" #include "claybrowservalidate.h" ! ! #define collidewithequal 0x0001 --- 35,40 ---- #include "claybrowserstruc.h" #include "claybrowservalidate.h" ! #include "langinternal.h" /* 2005-09-26 creedon */ ! #include "tablestructure.h" /* 2005-09-26 creedon */ #define collidewithequal 0x0001 *************** *** 212,219 **** static boolean browsercollisiondialog (hdlheadrecord hdest, ptrdraginfo draginfo) { ! bigstring prompt; short itemhit; ! bigstring bscollided; if ((*draginfo).collisiontype == nocollisions) /*no confirmation or deletions needed*/ --- 212,224 ---- static boolean browsercollisiondialog (hdlheadrecord hdest, ptrdraginfo draginfo) { + + /* + 2005-09-26 creedon: changed default order of buttons, default is Duplicate which is the safe option, checks user.prefs.flReplaceDialogExpertMode and if true Replace is the default option + */ ! bigstring bs, bscollided, prompt; ! bigstring nobutton, yesbutton; short itemhit; ! boolean fl, flExpertMode = false; if ((*draginfo).collisiontype == nocollisions) /*no confirmation or deletions needed*/ *************** *** 253,274 **** } ! #ifdef MACVERSION ! itemhit = threewaydialog (prompt, "\x07" "Replace", "\x09" "Duplicate", "\x06" "Cancel"); ! #endif ! #ifdef WIN95VERSION ! itemhit = threewaydialog (prompt, "\x08" "&Replace", "\x0a" "&Duplicate", "\x07" "&Cancel"); ! #endif switch (itemhit) { case 1: ! /*caller should delete all files with their tmpbit set*/ return (true); case 2: ! opcleartmpbits (); ! ! /*caller should rename items where conflicts occur*/ return (true); --- 258,308 ---- } ! getsystemtablescript (idreplacedialogexpertmode, bs); // "user.prefs.flReplaceDialogExpertMode" ! ! disablelangerror (); + fl = langrunstring (bs, bs); + + enablelangerror (); + + if (fl) + stringisboolean (bs, &flExpertMode); + + if (flExpertMode) { + copystring (duplicatebuttontext, nobutton); + copystring (replacebuttontext, yesbutton); + } + else { + copystring (duplicatebuttontext, yesbutton); + copystring (replacebuttontext, nobutton); + } + + itemhit = threewaydialog (prompt, yesbutton, nobutton, cancelbuttontext); + + if (flExpertMode) + switch (itemhit) { + + case 1: + itemhit = 2; + + break; + + case 2: + itemhit = 1; + break; + + } + switch (itemhit) { case 1: ! opcleartmpbits (); ! ! /*caller should rename items where conflicts occur*/ return (true); case 2: ! /*caller should delete all files with their tmpbit set*/ return (true); *************** *** 278,282 **** return (false); ! } } /*browsercollisiondialog*/ --- 312,317 ---- return (false); ! } /* switch */ ! } /*browsercollisiondialog*/ |
|
From: creedon <icr...@us...> - 2005-09-30 15:29:28
|
Update of /cvsroot/frontierkernel/Frontier/Common/headers In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14596 Modified Files: langinternal.h dialogs.h Log Message: for replace dialogs the Duplicate button is now the default button, default button for dialogs is safest option Index: dialogs.h =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/headers/dialogs.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** dialogs.h 11 Jan 2005 22:48:01 -0000 1.3 --- dialogs.h 30 Sep 2005 15:29:13 -0000 1.4 *************** *** 41,48 **** #define savequitprompt 5 ! #define replacedialogid 257 #define replacereplaceitem 1 ! #define replaceduplicateitem 4 ! #define replacecancelitem 5 #define askdialogid 262 /*standard ÒaskÓ dialog for UserLand language*/ --- 41,48 ---- #define savequitprompt 5 ! // #define replacedialogid 257 /* 2005-09-26 creedon - replaced the single occurrence use of this dialog with call to threewaydialog */ #define replacereplaceitem 1 ! #define replaceduplicateitem 2 ! #define replacecancelitem 3 #define askdialogid 262 /*standard ÒaskÓ dialog for UserLand language*/ *************** *** 94,97 **** --- 94,111 ---- #define lastkinditem 10 + /* dialog button text */ + + #ifdef MACVERSION + #define cancelbuttontext "\x06" "Cancel" + #define duplicatebuttontext "\x09" "Duplicate" + #define replacebuttontext "\x07" "Replace" + #endif + + #ifdef WIN95VERSION + #define cancelbuttontext "\x07" "&Cancel" + #define duplicatebuttontext "\x0a" "&Duplicate" + #define replacebuttontext "\x08" "&Replace" + #endif + typedef boolean (*dialogcallback) (DialogPtr, short); Index: langinternal.h =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/headers/langinternal.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** langinternal.h 11 Jan 2005 22:48:01 -0000 1.6 --- langinternal.h 30 Sep 2005 15:29:13 -0000 1.7 *************** *** 201,204 **** --- 201,205 ---- #define frnonexistantgroupnumbererror 159 #define frnonexistantgroupnameerror 160 + #define replaceitemerror 161 /* 2005-09-26 creedon */ #define langstacklist 137 |
|
From: creedon <icr...@us...> - 2005-09-29 21:36:39
|
Update of /cvsroot/frontierkernel/Frontier/Common/source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23810 Modified Files: filedialog.c Log Message: changed mac open file dialog to make it easier to access Mac OS X style osax. Index: filedialog.c =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/source/filedialog.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** filedialog.c 11 Jan 2005 22:48:05 -0000 1.5 --- filedialog.c 29 Sep 2005 21:36:29 -0000 1.6 *************** *** 49,52 **** --- 49,53 ---- #include "shell.rsrc.h" #include "langinternal.h" /*for langbackgroundtask*/ + #include "versions.h" /* 2005-09-23 creedon */ *************** *** 557,561 **** case sfgetfileverb: if(gCanUseNavServ) ! anErr = TimsGetFile(bsprompt, filetypes, &sfdata.sfreply); #if !TARGET_API_MAC_CARBON else --- 558,562 ---- case sfgetfileverb: if(gCanUseNavServ) ! anErr = getafile (bsprompt, filetypes, &sfdata.sfreply); /* 2005-09-21 creedon - changed from TimsGetFile to getafile*/ #if !TARGET_API_MAC_CARBON else *************** *** 1053,1134 **** ! OSErr ! TimsGetFile(bigstring prompt, ptrsftypelist filetypes, StandardFileReply * outReply) ! { ! NavDialogOptions dialogOptions; ! NavEventUPP eventProc = NewNavEventUPP(NavEventProc); ! OSErr anErr = noErr; ! NavTypeListHandle typeList = nil; ! NavReplyRecord reply; ! ! // Specify default options for dialog box ! anErr = NavGetDefaultDialogOptions(&dialogOptions); ! copystring(prompt, dialogOptions.message); ! if (anErr == noErr) ! { ! // Clear preview option ! dialogOptions.dialogOptionFlags ^= kNavAllowPreviews; ! //no multiple files for now. ! dialogOptions.dialogOptionFlags ^=kNavAllowMultipleFiles; ! ! dialogOptions.dialogOptionFlags += kNavSupportPackages; ! // Create the typelist dynamically. ! /*struct tysftypelist { ! short cttypes; ! OSType types [maxsftypelist]; ! }*/ ! //I need to translate this into a type list NavServices understands. - if (filetypes != nil) - { NavTypeListPtr typesP = nil; ! SInt32 hSize = (sizeof(NavTypeList) + ! sizeof(OSType) * (filetypes->cttypes - 1)); ! newhandle(hSize, (Handle*) &typeList); ! typesP = (NavTypeListPtr) *((Handle) typeList); ! typesP->componentSignature = 'LAND'; ! typesP->reserved = 0; ! typesP->osTypeCount = filetypes->cttypes; ! BlockMoveData(&(filetypes->types), typesP->osType, ! (Size) (sizeof(OSType) * filetypes->cttypes)); ! } ! // Call NavGetFile() with specified options and ! // declare our app-defined functions and type list ! anErr = NavChooseFile (nil, &reply, &dialogOptions, ! eventProc, nil, nil, typeList, nil); ! ! if (anErr == noErr && reply.validRecord) ! { ! AEKeyword theKeyword; ! DescType actualType; ! Size actualSize; ! FSSpec documentFSSpec; ! // Get a pointer to selected file ! anErr = AEGetNthPtr(&(reply.selection), 1, ! typeFSS, &theKeyword, ! &actualType, &documentFSSpec, ! sizeof(documentFSSpec), ! &actualSize); ! assert(actualType == typeFSS); ! if (anErr == noErr) ! { ! FSMakeFSSpec (documentFSSpec.vRefNum, documentFSSpec.parID, documentFSSpec.name, &(outReply->sfFile)); ! outReply->sfGood = true; ! } ! // Dispose of NavReplyRecord, resources, descriptors ! anErr = NavDisposeReply(&reply); ! } ! } ! DisposeNavEventUPP(eventProc); ! return anErr; ! } --- 1054,1144 ---- ! OSErr getafile (bigstring prompt, ptrsftypelist filetypes, StandardFileReply * outReply) { ! ! /* 2005-09-21 creedon: created, cribbed from TimsGetFile */ ! ! NavDialogCreationOptions dialogOptions; ! NavDialogRef dialogRef; ! NavEventUPP eventProc = NewNavEventUPP (NavEventProc); ! NavReplyRecord reply; ! NavTypeListHandle typeList = nil; ! OSErr anErr = noErr; ! ! anErr = NavGetDefaultDialogCreationOptions (&dialogOptions); ! dialogOptions.clientName = CFStringCreateWithCString (NULL, APPNAME_SHORT, kCFStringEncodingMacRoman); ! dialogOptions.message = CFStringCreateWithPascalString (NULL, prompt, kCFStringEncodingMacRoman); ! if (anErr == noErr) { ! ! if (filetypes == nil) ! dialogOptions.optionFlags -= kNavNoTypePopup; ! else ! dialogOptions.optionFlags += kNavAllFilesInPopup; // add all documents to show pop-up ! ! dialogOptions.optionFlags ^=kNavAllowMultipleFiles; //no multiple files for now ! ! dialogOptions.optionFlags ^= kNavAllowPreviews; // clear preview option ! ! dialogOptions.optionFlags += kNavSupportPackages; // see packages ! ! // dialogOptions.dialogOptionFlags += kNavAllowOpenPackages; // can open packages ! ! if (filetypes != nil) { // translate into a type list NavServices understands NavTypeListPtr typesP = nil; ! SInt32 hSize = (sizeof (NavTypeList) + sizeof (OSType) * (filetypes->cttypes - 1)); ! newhandle (hSize, (Handle*) &typeList); ! typesP = (NavTypeListPtr) *((Handle) typeList); ! OSType creator = 'LAND'; ! if (filetypes->cttypes <= 1) ! creator = kNavGenericSignature; ! typesP->componentSignature = creator; ! typesP->reserved = 0; ! typesP->osTypeCount = filetypes->cttypes; ! ! BlockMoveData(&(filetypes->types), typesP->osType, (Size) (sizeof(OSType) * filetypes->cttypes)); ! } ! anErr = NavCreateGetFileDialog (&dialogOptions, typeList, eventProc, NULL, NULL, NULL, &dialogRef); ! anErr = NavDialogRun (dialogRef); ! ! anErr = NavDialogGetReply (dialogRef, &reply); ! ! if (anErr == noErr && reply.validRecord) { ! ! AEKeyword theKeyword; ! DescType actualType; ! Size actualSize; ! FSSpec documentFSSpec; ! // Get a pointer to selected file ! anErr = AEGetNthPtr (&(reply.selection), 1, ! typeFSS, &theKeyword, ! &actualType, &documentFSSpec, ! sizeof (documentFSSpec), ! &actualSize); ! ! assert (actualType == typeFSS); ! ! if (anErr == noErr) { ! FSMakeFSSpec (documentFSSpec.vRefNum, documentFSSpec.parID, documentFSSpec.name, &(outReply->sfFile)); ! ! outReply->sfGood = true; ! } ! ! anErr = NavDisposeReply (&reply); // dispose of NavReplyRecord, resources, descriptors ! } ! } ! ! DisposeNavEventUPP (eventProc); ! ! NavDialogDispose (dialogRef); ! return anErr; ! } /* getafile */ |
|
From: creedon <icr...@us...> - 2005-09-29 21:36:32
|
Update of /cvsroot/frontierkernel/Frontier/build_XCode In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23794 Modified Files: Info.plist Log Message: changed mac open file dialog to make it easier to access Mac OS X style osax. Index: Info.plist =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/build_XCode/Info.plist,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Info.plist 11 Nov 2004 09:23:39 -0000 1.2 --- Info.plist 29 Sep 2005 21:36:24 -0000 1.3 *************** *** 41,45 **** </array> <key>CFBundleTypeName</key> ! <string>Frontier Desktop Script</string> </dict> <dict> --- 41,45 ---- </array> <key>CFBundleTypeName</key> ! <string>Frontier Desktop Script (2CLK)</string> </dict> <dict> *************** *** 60,69 **** <string>.fatp</string> </array> <key>CFBundleTypeOSTypes</key> <array> <string>FATP</string> </array> - <key>CFBundleTypeName</key> - <string>Frontier Fat Page</string> </dict> <dict> --- 60,71 ---- <string>.fatp</string> </array> + <key>CFBundleTypeName</key> + <string>Frontier Fat Page</string> <key>CFBundleTypeOSTypes</key> <array> <string>FATP</string> + <string>.FAT</string> + <string>FAT </string> </array> </dict> <dict> *************** *** 149,153 **** </array> <key>CFBundleTypeName</key> ! <string>Frontier Desktop Script</string> </dict> </array> --- 151,155 ---- </array> <key>CFBundleTypeName</key> ! <string>Frontier Desktop Script (FTds)</string> </dict> </array> |
|
From: creedon <icr...@us...> - 2005-09-29 21:36:31
|
Update of /cvsroot/frontierkernel/Frontier/Common/headers In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23779 Modified Files: file.h Log Message: changed mac open file dialog to make it easier to access Mac OS X style osax. Index: file.h =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/headers/file.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** file.h 25 Jul 2005 21:10:05 -0000 1.6 --- file.h 29 Sep 2005 21:36:20 -0000 1.7 *************** *** 468,478 **** extern OSErr TimsPutFile(bigstring prompt, Str255 fileName, StandardFileReply * outReply); ! extern OSErr TimsGetFile(bigstring prompt, ptrsftypelist filetypes, StandardFileReply * outReply); ! ! extern OSErr TimsGetFolderOrVolume(bigstring prompt, SInt16 dialogType, StandardFileReply * outReply); extern pascal void NavEventProc(NavEventCallbackMessage callBackSelector, NavCBRecPtr callBackParms, NavCallBackUserData callBackUD); #endif --- 468,480 ---- extern OSErr TimsPutFile(bigstring prompt, Str255 fileName, StandardFileReply * outReply); ! extern OSErr TimsGetFolderOrVolume(bigstring prompt, SInt16 dialogType, StandardFileReply * outReply); extern pascal void NavEventProc(NavEventCallbackMessage callBackSelector, NavCBRecPtr callBackParms, NavCallBackUserData callBackUD); + + + extern OSErr getafile (bigstring prompt, ptrsftypelist filetypes, StandardFileReply * outReply); /* 2005-09-23 creedon */ + #endif |
|
From: creedon <icr...@us...> - 2005-09-28 03:10:22
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/menus/scripts In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8142 Modified Files: addBookmarkCommand Log Message: changed to work with Booksmarks menu that is part of user menu Index: addBookmarkCommand =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/menus/scripts/addBookmarkCommand,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** addBookmarkCommand 26 Mar 2005 19:41:52 -0000 1.1.1.1 --- addBookmarkCommand 28 Sep 2005 03:10:12 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.menus.scripts.addBookmarkCommand ! ÇAdd an item to the user's Bookmarks menu. ÇChanges: Ç9/20/99; 3:26:56 PM by PBS ÇIf the item is in a guest database, strip the leading path from the title. ÇMake sure the guest database is open before editing the object. Ç10/11/99; 5:45:31 PM by PBS ÇCall string.popFileFromAddress, rather than including code for stripping the file path from the address. local (adr); bundle { //determine the object adr of the thing to be added try { adr = table.getCursorAddress ()} else { scriptError ("Can't add to the Bookmarks menu because the front window doesn't contain an addressable object.")}}; local (adrMenu = @user.menus.bookmarkMenu); local (title = string (adr)); local (logic); bundle { //PBS 9/20/99: if item is in guest database, strip the path from the address, and add fileMenu.open to the logic. if table.inGuestDatabase (adr) { ÇPBS 9/20/99: first strip the path part from the address. title = string.popFileFromAddress (adr); //PBS 10/11/99: call this verb, new in 6.1, to delete the file path part of the address local (f = window.getFile (table.getRootAddress (adr))); //get the file path to the gdb logic = "fileMenu.open (\"" + string.replaceAll (f, "\\", "\\\\") + "\", true);"}}; //open the gdb as hidden logic = logic + "edit (@" + string (adr) + ")"; local (menuName); //PBS 9/21/99: the name of the Bookmarks menu bundle { //PBS 9/21/99: get the name of the Bookmarks menu local (oldTarget = target.set (adrMenu)); op.firstSummit (); menuName = op.getLineText (); try {target.set (oldTarget)}}; if dialog.confirm ("Add \"" + title + "\" to the " + menuName + " menu?") { //PBS 9/20/99: use the title in the prompt menu.addMenuCommand (adrMenu, menuName, title, logic)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.menus.scripts.addBookmarkCommand ! ÇAdd an item to the user's Bookmarks menu. ÇChanges Ç9/14/05; 1:46:22 PM by TAC Çchanged to work with Booksmarks menu that is part of user menu Ç9/20/99; 3:26:56 PM by PBS ÇIf the item is in a guest database, strip the leading path from the title. ÇMake sure the guest database is open before editing the object. Ç10/11/99; 5:45:31 PM by PBS ÇCall string.popFileFromAddress, rather than including code for stripping the file path from the address. local (adr); bundle { //determine the object adr of the thing to be added try { adr = table.getCursorAddress ()} else { scriptError ("Can't add to the Bookmarks menu because the front window doesn't contain an addressable object.")}}; local (adrMenu = @user.menus.customMenu); local (title = string (adr)); local (logic); bundle { //PBS 9/20/99: if item is in guest database, strip the path from the address, and add fileMenu.open to the logic. if table.inGuestDatabase (adr) { ÇPBS 9/20/99: first strip the path part from the address. title = string.popFileFromAddress (adr); //PBS 10/11/99: call this verb, new in 6.1, to delete the file path part of the address local (f = window.getFile (table.getRootAddress (adr))); //get the file path to the gdb logic = "fileMenu.open (\"" + string.replaceAll (f, "\\", "\\\\") + "\", true);"}}; //open the gdb as hidden logic = logic + "edit (@" + string (adr) + ")"; Çbundle // old code Çlocal (menuName) //PBS 9/21/99: the name of the Bookmarks menu Çbundle //PBS 9/21/99: get the name of the Bookmarks menu Çlocal (oldTarget = target.set (adrMenu)) Çop.firstSummit () ÇmenuName = op.getLineText () Çtry {target.set (oldTarget)} if dialog.confirm ("Add \"" + title + "\" to your Bookmarks menu?") { //PBS 9/20/99: use the title in the prompt menu.addMenuCommand (adrMenu, "Bookmarks", title, logic)} \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-28 03:08:58
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/apps/Manila/editResponder In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7553 Modified Files: respond Log Message: changed hard coded references to UserLand Radio and Radio to Frontier.getProgramName Index: respond =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/apps/Manila/editResponder/respond,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** respond 26 Mar 2005 19:42:18 -0000 1.1.1.1 --- respond 28 Sep 2005 03:08:48 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.apps.Manila.editResponder.respond ! on respond (pta) { ÇImplement the edit responder that opens Manila objects for editing. Ç11/26/00; 9:33:13 PM by PBS ÇChanges: Ç11/26/00; 9:33:35 PM by PBS ÇpathArgs have priority over searchArgs, since sometimes we need to send a form, and searchArgs get wiped out in that case. So we use pathArgs in that case. For instance -- the Create a New Story form uses pathArgs, since it's a form. Ç11/27/00; 12:47:13 AM by PBS ÇFixed a bug with editing messages -- you would sometimes get the rendered text instead of the outline. Ç11/27/00; 3:46:47 PM by PBS ÇShortening the URL the server generates -- less info is sent now. Get info from referer, assume defaults, when certain arguments aren't specified. If not supplied, get username and password from prefs or prompt user. Ç12/04/00 at 3:53:37 PM by JES ÇIf there's a scriptError when checking out an item, forget the username and password, so the user will have a chance to enter them again. Ç12/04/00 4:16:11 PM by PBS ÇIf there's an error, display a friendly It Didn't Work page rather than a 500 Server Error page. Ç12/12/00; 10:29:11 PM by PBS ÇIf this is a Macintosh, bring the app to front right away, to work around the MSIE 5 CPU hogging bug. Ç12/17/00; 6:32:24 PM by JES ÇOptimizations: If we already know the canonical site name, get it from user.playlist.manila.sites, instead of calling the server. If the story is already open for editing, don't make any calls to the server; just bring the window to the front. Ç12/27/00; 2:50:35 PM by PBS ÇBring Radio to front on Windows right away (same as on Macs). If there's an error page to display, bring the Web browser to the front. Ç12/30/00; 5:51:36 PM by JES ÇEdit Manila sites' site structure using the structure outline, instead of plain XML. Ç01/22/01; 1:59:38 AM by JES ÇFix a bug where stories created in the browser would not correctly translate to Mac text for editing in Radio. Ç3/22/01; 6:38:26 PM by PBS ÇWhen creating a new story, convert the title that was typed in the form on the web page to Macintosh text (when on a Macintosh). Ç3/12/02; 4:00:26 AM by JES ÇConvert the title of new stories from Latin to Mac text, if running on a Mac. (This conversion used to happen, but was lost in the move to the windowTypes framework.) Frontier.bringToFront (); bundle { //init windowTypes and nodeTypes manila.nodeTypes.init (); manila.windowTypes.init ()}; pta^.responseHeaders.["Content-Type"] = "text/html"; //a sensible default try { on buildResponse (code, shortmessage, longmessage) { pta^.code = code; pta^.responseBody = webserver.util.buildErrorPage (code + " " + string.upper (shortmessage), longmessage); return}; local (args, siteinfo, redirectURL, adrinfo); bundle { //decode args, copy items to siteinfo table and to redirectURL try { new (tabletype, @args); if pta^.pathArgs != "" { webserver.parseArgs (pta^.pathArgs, @args)}; bundle { //add search args local (t); new (tableType, @t); webserver.parseArgs (pta^.searchArgs, @t); table.copyContents (@t, @args)}; new (tabletype, @siteinfo); siteInfo.url = args.url; bundle { //host if defined (args.host) { //PBS 11/27/00: if not defined, get from site URL siteinfo.host = args.host} else { local (urlParts = string.urlSplit (siteInfo.url)); local (host = urlParts [2]); host = string.nthField (host, ':', 1); //strip port siteInfo.host = host}}; bundle { //port if defined (args.port) { //PBS 11/27/00: assume port 80 if not sent siteinfo.port = args.port} else { siteInfo.port = 80}}; bundle { //rpcPath if defined (args.rpcPath) { //PBS 11/27/00: assume /RPC2 if not sent siteinfo.rpcPath = args.rpcPath} else { siteInfo.rpcPath = "/RPC2"}}; bundle { //canonical site name if defined (args.siteName) { //PBS 11/27/00: get siteName via XML-RPC if not defined siteInfo.siteName = args.sitename} else { if defined (args.s) { //short name siteInfo.siteName = args.s} else { try { //12/17/00 JES: try to get the siteName from prefs ÇsiteInfo.siteName = playlist.manila.getCanonicalNameFromPrefs (siteInfo.url) bundle { //get the name from the siteInfoTable at user.manila.data.sites local (adrinfo); if manila.windowTypes.findSiteInfo (siteInfo.url, @adrinfo) { siteInfo.siteName = adrinfo^.siteName}}; if siteInfo.siteName == "" { siteInfo.siteName = manila.getSiteName (args.url)}} else { siteInfo.siteName = manila.getSiteName (args.url)}}}}; bundle { //display site name if defined (args.displaySiteName) { //PBS 11/27/00: use canonical site name if not defined siteInfo.displaySiteName = args.displaySiteName} else { if defined (args.d) { //short name siteInfo.displaySiteName = args.d} else { siteInfo.displaySiteName == ""; bundle { //get the displaySiteName from the siteInfoTable at user.manila.data.sites local (adrinfo); if manila.windowTypes.findSiteInfo (siteInfo.url, @adrinfo) { siteInfo.siteName = adrinfo^.displaySiteName}}; if siteInfo.displaySiteName == "" { //fall back to the canonical site name for displaySiteName siteInfo.displaySiteName = siteInfo.siteName}}}}; bundle { //redirect URL if defined (args.redirectUrl) { //PBS 11/27/00: if not defined, use referer redirectURL = args.redirectURL} else { redirectUrl = pta^.requestHeaders.referer}}; bundle { //server accepts OPML if defined (args.flAcceptsOpml) { siteInfo.flAcceptsOpml = args.flAcceptsOpml}}; bundle { //username and password siteInfo.username = ""; siteInfo.password = ""; if defined (args.u) { siteinfo.username = base64.decode (args.u)}; if defined (args.p) { siteinfo.password = base64.decode (args.p)}; Çif siteInfo.username == "" or siteInfo.password == "" //get from prefs or prompt user ÇsiteInfo.password = "" Çplaylist.manila.getUserNameAndPassword (siteinfo.URL, @siteInfo.username, @siteInfo.password)}} else { scripterror ("Can't edit with Radio because an error occured while decoding the GET arguments: " + tryerror)}}; on passwordError () { try { //to clear the password manila.windowTypes.setUsernameAndPassword (adrinfo, siteInfo.username, "")}; scriptError ("Can't edit with Radio because the username and password have not been set.")}; local (s = string.delete (pta^.path, 1, sizeOf ("/manilaEdit/"))); local (command = string.lower (string.nthField (s, '/', 1))); try { on createInfoCallback (adrinfo) { if manila.windowTypes.getUsernameAndPassword (adrinfo, @siteInfo.username, @siteInfo.password) { manila.windowTypes.setUsernameAndPassword (adrinfo, siteInfo.username, siteInfo.password); return (true)} else { return (false)}}; if manila.windowTypes.findSiteInfo (siteinfo.url, @adrinfo, @createInfoCallback) { bundle { //copy siteInfo items returned by the server if defined (siteinfo.host) { adrinfo^.host = siteinfo.host}; if defined (siteinfo.port) { adrinfo^.port = siteinfo.port}; if defined (siteinfo.rpcPath) { adrinfo^.rpcPath = siteinfo.rpcPath}; if defined (siteinfo.protocol) { adrinfo^.protocol = siteinfo.protocol}; if defined (siteinfo.soapAction) { adrinfo^.soapAction = siteinfo.soapAction}; if defined (siteinfo.siteName) { adrinfo^.siteName = siteinfo.siteName}; if defined (siteinfo.displaySiteName) { adrinfo^.displaySiteName = siteinfo.displaySiteName}; if defined (siteinfo.flAcceptsOpml) { adrinfo^.flAcceptsOpml = siteinfo.flAcceptsOpml}}; case command { "newstory" { local (adrtype); if Frontier.tools.windowTypes.findWindowType ("manilaMessage", @adrtype) { local (inResponseTo = 0); if defined (args.inResponseTo) { inResponseTo = args.inResponseTo}; local (title = args.title); if system.environment.isMac { title = latinToMac.convert (title)}; if not adrtype^.newMessage (args.url, title, inResponseTo, boolean (args.flPromoteToStory)) { scriptError ("Can't create story because there was a problem calling the manilaMessage.newMessage windowType script. It returned false.")}}; Çbundle //old code Çpike.checkSiteInfoTable (@siteinfo, "create story in Radio") Çlocal (storyinfo) Çnew (tableType, @storyinfo) Çnew (tableType, @storyinfo.rendererInfo) Çtry Çstoryinfo.subject = args.title Çif system.environment.isMac //PBS 03/22/01: convert title to Mac text ÇstoryInfo.subject = latinToMac.convert (storyInfo.subject) Çstoryinfo.rendererInfo.name = args.rendererName Çstoryinfo.rendererInfo.flRenderOnEntry = boolean (args.flRenderOnEntry) ÇstoryInfo.flPromoteToStory = boolean (args.flPromoteToStory) Çif defined (args.inResponseTo) ÇstoryInfo.inResponseTo = args.inResponseTo Çif defined (args.flAcceptsOpml) ÇstoryInfo.flServerAcceptsOpml = true Çelse Çscripterror ("Can't edit in Radio because an error occured while decoding the GET arguments: " + tryerror) Çlocal (adrStoryTable = pike.getNewStoryTableAddress (@siteinfo)) ÇadrStoryTable^.siteinfo = siteinfo ÇadrStoryTable^.storyinfo = storyinfo Ç Çthread.callScript (@pike.commands.newStory, {adrStoryTable})}; "editstory" { local (adrtype); if Frontier.tools.windowTypes.findWindowType ("manilaMessage", @adrtype) { local (flHomePage = false, adrwindow); try {flHomePage = (args.url == args.redirectUrl)}; if not adrtype^.openMessage (args.url, args.msgnum, false, flHomePage, @adrwindow) { scriptError ("Can't edit message because there was a problem calling the manilaMessage.openMessage windowType script. It returned false.")}}; Çbundle //old code Çpike.checkSiteInfoTable (@siteinfo, "edit story in Radio") Çlocal (msgnum) //actually, we don't care if it's a number Çtry Çmsgnum = args.msgnum Çelse Çscripterror ("Can't edit in Radio because an error occured while decoding the GET arguments: " + tryerror) Çlocal (adrStoryTable = pike.getStoryTableAddress (@siteinfo, msgnum), flAlreadyOpen = false) Çif defined (adrStoryTable^.outline) //12/17/00 JES: bring the outline to the front if already open Çif window.isOpen (@adrStoryTable^.outline) Çwindow.bringToFront (@adrStoryTable^.outline) ÇflAlreadyOpen = true Çif not flAlreadyOpen //12/17/00 JES: only call the server if the outline wasn't already open Çmanila.message.checkOut (@siteInfo, msgNum) //check out the story: custody support Çlocal (storyinfo = manila.message.get (@siteinfo, msgnum)) Çif defined (storyInfo.outline) ÇstoryInfo.body = storyInfo.outline Çpike.checkStoryInfoTable (@storyinfo, "edit story in Radio") Çif defined (args.flAcceptsOpml) ÇstoryInfo.flServerAcceptsOpml = true Çif system.environment.isMac //convert from Latin to Mac text (if this is a Mac) Çif defined (storyinfo.opml) //01/22/01 JES: only convert to Mac text if the body is opml ÇstoryInfo.body = latinToMac.convert (storyInfo.body) Çthread.callScript (@pike.commands.editStory, {siteinfo, storyinfo})}; "editadvanceditem" { local (item); try { //get the itemtype itemtype = args.itemtype} else { scripterror ("Can't edit in Radio because an error occured while decoding the GET arguments: " + tryerror)}; local (adrtype); if Frontier.tools.windowTypes.findWindowType ("manilaTemplate", @adrtype) { if not adrtype^.openTemplate (args.url, itemtype) { scriptError ("Can't edit message because there was a problem calling the manilaTemplate.openTemplate windowType script. It returned false.")}}; Çbundle //old code Çmanila.advancedPref.checkOut (@siteInfo, itemType) //check it out Çlocal (itemInfo = manila.advancedPref.get (@siteInfo, itemType)) ÇitemInfo.type = itemType Ç Çlocal (adrBuildDisplayRoutine, adrSerializeRoutine) Çcase string.lower (itemInfo.type) //12/30/00 JES: edit site structure with site structure editor Ç"sitestructure" ÇadrBuildDisplayRoutine = @playlist.manila.siteStructure.xmlToOutline ÇadrSerializeRoutine = @playlist.manila.siteStructure.outlineToXml Çthread.callScript (@pike.commands.editAdvancedItem, {siteinfo, iteminfo, true, adrBuildDisplayRoutine, adrSerializeRoutine})}} else { //unimplemented command buildResponse (404, "NOT FOUND", "The object \"" + command + "\" doesn't exist."); return (true)}} else { //username/password error passwordError ()}} else { //the script that implements the command had an error local (lowerError = string.lower (tryError)); if (lowerError contains "password") or (lowerError contains "not a member") { passwordError ()} else { //unhandled error scriptError (tryError)}}; pta^.responseHeaders.location = redirectURL; pta^.responseHeaders.URI = redirectURL; buildResponse (302, "FOUND", "Found the page.")} else { //an error -- show It Didn't Work page webBrowser.bringToFront (); local (htmlText = "<html><head><title>It Didn't Work</title></head>"); on add (s) { htmlText = htmlText + s + "\r"}; add ("<body bgcolor=\"#FFFFFF\">"); add ("<blockquote><h2>It Didn't Work</h2>"); add ("<b>Radio UserLand reported an error:</b><p>" + tryError + ""); add ("</blockquote></body></html>"); pta^.code = 200; pta^.responseBody = htmlText}; return (true)}; Çbundle //debugging Çrespond (@scratchpad.pt) \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.apps.Manila.editResponder.respond ! on respond (pta) { ÇChanges Ç9/14/05; 4:34:26 PM by TAC Çchanged hard coded references to UserLand Radio and Radio to Frontier.getProgramName Ç3/12/02; 4:00:26 AM by JES ÇConvert the title of new stories from Latin to Mac text, if running on a Mac. (This conversion used to happen, but was lost in the move to the windowTypes framework.) Ç3/22/01; 6:38:26 PM by PBS ÇWhen creating a new story, convert the title that was typed in the form on the web page to Macintosh text (when on a Macintosh). Ç01/22/01; 1:59:38 AM by JES ÇFix a bug where stories created in the browser would not correctly translate to Mac text for editing in Radio. Ç2000 Ç12/30/00; 5:51:36 PM by JES ÇEdit Manila sites' site structure using the structure outline, instead of plain XML. Ç12/27/00; 2:50:35 PM by PBS ÇBring Radio to front on Windows right away (same as on Macs). If there's an error page to display, bring the Web browser to the front. Ç12/17/00; 6:32:24 PM by JES ÇOptimizations: If we already know the canonical site name, get it from user.playlist.manila.sites, instead of calling the server. If the story is already open for editing, don't make any calls to the server; just bring the window to the front. Ç12/12/00; 10:29:11 PM by PBS ÇIf this is a Macintosh, bring the app to front right away, to work around the MSIE 5 CPU hogging bug. Ç12/04/00 4:16:11 PM by PBS ÇIf there's an error, display a friendly It Didn't Work page rather than a 500 Server Error page. Ç12/04/00 at 3:53:37 PM by JES ÇIf there's a scriptError when checking out an item, forget the username and password, so the user will have a chance to enter them again. Ç11/27/00; 3:46:47 PM by PBS ÇShortening the URL the server generates -- less info is sent now. Get info from referer, assume defaults, when certain arguments aren't specified. If not supplied, get username and password from prefs or prompt user. Ç11/27/00; 12:47:13 AM by PBS ÇFixed a bug with editing messages -- you would sometimes get the rendered text instead of the outline. Ç11/26/00; 9:33:35 PM by PBS ÇpathArgs have priority over searchArgs, since sometimes we need to send a form, and searchArgs get wiped out in that case. So we use pathArgs in that case. For instance -- the Create a New Story form uses pathArgs, since it's a form. Ç11/26/00; 9:33:13 PM by PBS ÇImplement the edit responder that opens Manila objects for editing. Çscratchpad.pt = pta^ ÇfileMenu.save () local (programName = Frontier.getProgramName ()); Frontier.bringToFront (); bundle { //init windowTypes and nodeTypes manila.nodeTypes.init (); manila.windowTypes.init ()}; pta^.responseHeaders.["Content-Type"] = "text/html"; //a sensible default try { on buildResponse (code, shortmessage, longmessage) { pta^.code = code; pta^.responseBody = webserver.util.buildErrorPage (code + " " + string.upper (shortmessage), longmessage); return}; local (args, siteinfo, redirectURL, adrinfo); bundle { //decode args, copy items to siteinfo table and to redirectURL try { new (tabletype, @args); if pta^.pathArgs != "" { webserver.parseArgs (pta^.pathArgs, @args)}; bundle { //add search args local (t); new (tableType, @t); webserver.parseArgs (pta^.searchArgs, @t); table.copyContents (@t, @args)}; new (tabletype, @siteinfo); siteInfo.url = args.url; bundle { //host if defined (args.host) { //PBS 11/27/00: if not defined, get from site URL siteinfo.host = args.host} else { local (urlParts = string.urlSplit (siteInfo.url)); local (host = urlParts [2]); host = string.nthField (host, ':', 1); //strip port siteInfo.host = host}}; bundle { //port if defined (args.port) { //PBS 11/27/00: assume port 80 if not sent siteinfo.port = args.port} else { siteInfo.port = 80}}; bundle { //rpcPath if defined (args.rpcPath) { //PBS 11/27/00: assume /RPC2 if not sent siteinfo.rpcPath = args.rpcPath} else { siteInfo.rpcPath = "/RPC2"}}; bundle { //canonical site name if defined (args.siteName) { //PBS 11/27/00: get siteName via XML-RPC if not defined siteInfo.siteName = args.sitename} else { if defined (args.s) { //short name siteInfo.siteName = args.s} else { try { //12/17/00 JES: try to get the siteName from prefs ÇsiteInfo.siteName = playlist.manila.getCanonicalNameFromPrefs (siteInfo.url) bundle { //get the name from the siteInfoTable at user.manila.data.sites local (adrinfo); if manila.windowTypes.findSiteInfo (siteInfo.url, @adrinfo) { siteInfo.siteName = adrinfo^.siteName}}; if siteInfo.siteName == "" { siteInfo.siteName = manila.getSiteName (args.url)}} else { siteInfo.siteName = manila.getSiteName (args.url)}}}}; bundle { //display site name if defined (args.displaySiteName) { //PBS 11/27/00: use canonical site name if not defined siteInfo.displaySiteName = args.displaySiteName} else { if defined (args.d) { //short name siteInfo.displaySiteName = args.d} else { siteInfo.displaySiteName == ""; bundle { //get the displaySiteName from the siteInfoTable at user.manila.data.sites local (adrinfo); if manila.windowTypes.findSiteInfo (siteInfo.url, @adrinfo) { siteInfo.siteName = adrinfo^.displaySiteName}}; if siteInfo.displaySiteName == "" { //fall back to the canonical site name for displaySiteName siteInfo.displaySiteName = siteInfo.siteName}}}}; bundle { //redirect URL if defined (args.redirectUrl) { //PBS 11/27/00: if not defined, use referer redirectURL = args.redirectURL} else { redirectUrl = pta^.requestHeaders.referer}}; bundle { //server accepts OPML if defined (args.flAcceptsOpml) { siteInfo.flAcceptsOpml = args.flAcceptsOpml}}; bundle { //username and password siteInfo.username = ""; siteInfo.password = ""; if defined (args.u) { siteinfo.username = base64.decode (args.u)}; if defined (args.p) { siteinfo.password = base64.decode (args.p)}; Çif siteInfo.username == "" or siteInfo.password == "" //get from prefs or prompt user ÇsiteInfo.password = "" Çplaylist.manila.getUserNameAndPassword (siteinfo.URL, @siteInfo.username, @siteInfo.password)}} else { scripterror ("Can't edit with " + programName + " because an error occured while decoding the GET arguments: " + tryerror)}}; on passwordError () { try { //to clear the password manila.windowTypes.setUsernameAndPassword (adrinfo, siteInfo.username, "")}; scriptError ("Can't edit with " + programName + " because the username and password have not been set.")}; local (s = string.delete (pta^.path, 1, sizeOf ("/manilaEdit/"))); local (command = string.lower (string.nthField (s, '/', 1))); try { on createInfoCallback (adrinfo) { if manila.windowTypes.getUsernameAndPassword (adrinfo, @siteInfo.username, @siteInfo.password) { manila.windowTypes.setUsernameAndPassword (adrinfo, siteInfo.username, siteInfo.password); return (true)} else { return (false)}}; if manila.windowTypes.findSiteInfo (siteinfo.url, @adrinfo, @createInfoCallback) { bundle { //copy siteInfo items returned by the server if defined (siteinfo.host) { adrinfo^.host = siteinfo.host}; if defined (siteinfo.port) { adrinfo^.port = siteinfo.port}; if defined (siteinfo.rpcPath) { adrinfo^.rpcPath = siteinfo.rpcPath}; if defined (siteinfo.protocol) { adrinfo^.protocol = siteinfo.protocol}; if defined (siteinfo.soapAction) { adrinfo^.soapAction = siteinfo.soapAction}; if defined (siteinfo.siteName) { adrinfo^.siteName = siteinfo.siteName}; if defined (siteinfo.displaySiteName) { adrinfo^.displaySiteName = siteinfo.displaySiteName}; if defined (siteinfo.flAcceptsOpml) { adrinfo^.flAcceptsOpml = siteinfo.flAcceptsOpml}}; case command { "newstory" { local (adrtype); if Frontier.tools.windowTypes.findWindowType ("manilaMessage", @adrtype) { local (inResponseTo = 0); if defined (args.inResponseTo) { inResponseTo = args.inResponseTo}; local (title = args.title); if system.environment.isMac { title = latinToMac.convert (title)}; if not adrtype^.newMessage (args.url, title, inResponseTo, boolean (args.flPromoteToStory)) { scriptError ("Can't create story because there was a problem calling the manilaMessage.newMessage windowType script. It returned false.")}}; Çbundle //old code Çpike.checkSiteInfoTable (@siteinfo, "create story in Radio") Çlocal (storyinfo) Çnew (tableType, @storyinfo) Çnew (tableType, @storyinfo.rendererInfo) Çtry Çstoryinfo.subject = args.title Çif system.environment.isMac //PBS 03/22/01: convert title to Mac text ÇstoryInfo.subject = latinToMac.convert (storyInfo.subject) Çstoryinfo.rendererInfo.name = args.rendererName Çstoryinfo.rendererInfo.flRenderOnEntry = boolean (args.flRenderOnEntry) ÇstoryInfo.flPromoteToStory = boolean (args.flPromoteToStory) Çif defined (args.inResponseTo) ÇstoryInfo.inResponseTo = args.inResponseTo Çif defined (args.flAcceptsOpml) ÇstoryInfo.flServerAcceptsOpml = true Çelse Çscripterror ("Can't edit in Radio because an error occured while decoding the GET arguments: " + tryerror) Çlocal (adrStoryTable = pike.getNewStoryTableAddress (@siteinfo)) ÇadrStoryTable^.siteinfo = siteinfo ÇadrStoryTable^.storyinfo = storyinfo Ç Çthread.callScript (@pike.commands.newStory, {adrStoryTable})}; "editstory" { local (adrtype); if Frontier.tools.windowTypes.findWindowType ("manilaMessage", @adrtype) { local (flHomePage = false, adrwindow); try {flHomePage = (args.url == args.redirectUrl)}; if not adrtype^.openMessage (args.url, args.msgnum, false, flHomePage, @adrwindow) { scriptError ("Can't edit message because there was a problem calling the manilaMessage.openMessage windowType script. It returned false.")}}; Çbundle //old code Çpike.checkSiteInfoTable (@siteinfo, "edit story in Radio") Çlocal (msgnum) //actually, we don't care if it's a number Çtry Çmsgnum = args.msgnum Çelse Çscripterror ("Can't edit in Radio because an error occured while decoding the GET arguments: " + tryerror) Çlocal (adrStoryTable = pike.getStoryTableAddress (@siteinfo, msgnum), flAlreadyOpen = false) Çif defined (adrStoryTable^.outline) //12/17/00 JES: bring the outline to the front if already open Çif window.isOpen (@adrStoryTable^.outline) Çwindow.bringToFront (@adrStoryTable^.outline) ÇflAlreadyOpen = true Çif not flAlreadyOpen //12/17/00 JES: only call the server if the outline wasn't already open Çmanila.message.checkOut (@siteInfo, msgNum) //check out the story: custody support Çlocal (storyinfo = manila.message.get (@siteinfo, msgnum)) Çif defined (storyInfo.outline) ÇstoryInfo.body = storyInfo.outline Çpike.checkStoryInfoTable (@storyinfo, "edit story in Radio") Çif defined (args.flAcceptsOpml) ÇstoryInfo.flServerAcceptsOpml = true Çif system.environment.isMac //convert from Latin to Mac text (if this is a Mac) Çif defined (storyinfo.opml) //01/22/01 JES: only convert to Mac text if the body is opml ÇstoryInfo.body = latinToMac.convert (storyInfo.body) Çthread.callScript (@pike.commands.editStory, {siteinfo, storyinfo})}; "editadvanceditem" { local (item); try { //get the itemtype itemtype = args.itemtype} else { scripterror ("Can't edit in " + programName + " because an error occured while decoding the GET arguments: " + tryerror)}; local (adrtype); if Frontier.tools.windowTypes.findWindowType ("manilaTemplate", @adrtype) { if not adrtype^.openTemplate (args.url, itemtype) { scriptError ("Can't edit message because there was a problem calling the manilaTemplate.openTemplate windowType script. It returned false.")}}; Çbundle //old code Çmanila.advancedPref.checkOut (@siteInfo, itemType) //check it out Çlocal (itemInfo = manila.advancedPref.get (@siteInfo, itemType)) ÇitemInfo.type = itemType Ç Çlocal (adrBuildDisplayRoutine, adrSerializeRoutine) Çcase string.lower (itemInfo.type) //12/30/00 JES: edit site structure with site structure editor Ç"sitestructure" ÇadrBuildDisplayRoutine = @playlist.manila.siteStructure.xmlToOutline ÇadrSerializeRoutine = @playlist.manila.siteStructure.outlineToXml Çthread.callScript (@pike.commands.editAdvancedItem, {siteinfo, iteminfo, true, adrBuildDisplayRoutine, adrSerializeRoutine})}} else { //unimplemented command buildResponse (404, "NOT FOUND", "The object \"" + command + "\" doesn't exist."); return (true)}} else { //username/password error passwordError ()}} else { //the script that implements the command had an error local (lowerError = string.lower (tryError)); if (lowerError contains "password") or (lowerError contains "not a member") { passwordError ()} else { //unhandled error scriptError (tryError)}}; pta^.responseHeaders.location = redirectURL; pta^.responseHeaders.URI = redirectURL; buildResponse (302, "FOUND", "Found the page.")} else { //an error -- show It Didn't Work page webBrowser.bringToFront (); local (htmlText = "<html><head><title>It Didn't Work</title></head>"); on add (s) { htmlText = htmlText + s + "\r"}; add ("<body bgcolor=\"#FFFFFF\">"); add ("<blockquote><h2>It Didn't Work</h2>"); add ("<b>" + programName + " reported an error:</b><p>" + tryError + ""); add ("</blockquote></body></html>"); pta^.code = 200; pta^.responseBody = htmlText}; return (true)}; Çbundle //testing Çrespond (@scratchpad.pt) \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-26 18:21:10
|
Update of /cvsroot/frontierkernel/Frontier/Common/resources/Win32 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14224 Added Files: kernelverbs.rc Log Message: changed name of file from kernvelverbs.rc to kernelverbs.rc --- NEW FILE: kernelverbs.rc --- /* $Id: kernelverbs.rc,v 1.1 2005/09/26 18:21:02 icreedon Exp $ */ /****************************************************************************** UserLand Frontier(tm) -- High performance Web content management, object database, system-level and Internet scripting environment, including source code editing and debugging. Copyright (C) 1992-2004 UserLand Software, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the [...1016 lines suppressed...] "split\0", "join\0", "visit\0", "grep\0", "getpatterninfo\0", "expand\0" END #endif //flregexpverbs 1024 /*mathverbs*/ EFP DISCARDABLE BEGIN 1, //Number of "blocks" in this resource "math\0", //Function Processor name false, //Window required 3, //Count of verbs "min\0", "max\0", "sqrt\0" END |
|
From: Andre R. <and...@us...> - 2005-09-17 16:39:32
|
Update of /cvsroot/frontierkernel/Frontier/build_XCode/Frontier.xcode In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6818 Modified Files: project.pbxproj Log Message: Renamed kernvelverbs.r to kernelverbs.r in projectfile. Index: project.pbxproj =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/build_XCode/Frontier.xcode/project.pbxproj,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** project.pbxproj 14 Jan 2005 11:12:17 -0000 1.19 --- project.pbxproj 17 Sep 2005 16:39:24 -0000 1.20 *************** *** 36,40 **** BB3B83610730603C0049D0C1, 651527B7072BFE0E00411831, - 6515256A072BFC6500411831, ); isa = PBXGroup; --- 36,39 ---- *************** *** 75,79 **** isa = PBXProject; mainGroup = 6515255C072BFC6500411831; ! productRefGroup = 6515256A072BFC6500411831; projectDirPath = ""; targets = ( --- 74,78 ---- isa = PBXProject; mainGroup = 6515255C072BFC6500411831; ! productRefGroup = 6515255C072BFC6500411831; projectDirPath = ""; targets = ( *************** *** 583,587 **** 651526EF072BFC6800411831, 651526F0072BFC6800411831, - 651526F1072BFC6800411831, 651526F2072BFC6800411831, 651527A1072BFC6900411831, --- 582,585 ---- *************** *** 597,600 **** --- 595,599 ---- 651527AB072BFC6900411831, 65BBB662072E563B008E2F34, + 65AC81D908DC792700ADD675, ); isa = PBXRezBuildPhase; *************** *** 667,679 **** sourceTree = BUILT_PRODUCTS_DIR; }; - 6515256A072BFC6500411831 = { - children = ( - 65152569072BFC6500411831, - ); - isa = PBXGroup; - name = Products; - refType = 4; - sourceTree = "<group>"; - }; 6515256C072BFC6700411831 = { children = ( --- 666,669 ---- *************** *** 1638,1642 **** 651525CF072BFC6700411831, 651525D0072BFC6700411831, ! 651525D1072BFC6700411831, 651525D2072BFC6700411831, 651525D3072BFC6700411831, --- 1628,1632 ---- 651525CF072BFC6700411831, 651525D0072BFC6700411831, ! 65AC81D808DC792700ADD675, 651525D2072BFC6700411831, 651525D3072BFC6700411831, *************** *** 1675,1687 **** sourceTree = SOURCE_ROOT; }; - 651525D1072BFC6700411831 = { - fileEncoding = 30; - isa = PBXFileReference; - lastKnownFileType = sourcecode.rez; - name = kernvelverbs.r; - path = ../Common/resources/Mac/kernvelverbs.r; - refType = 2; - sourceTree = SOURCE_ROOT; - }; 651525D2072BFC6700411831 = { fileEncoding = 30; --- 1665,1668 ---- *************** *** 4117,4126 **** }; }; - 651526F1072BFC6800411831 = { - fileRef = 651525D1072BFC6700411831; - isa = PBXBuildFile; - settings = { - }; - }; 651526F2072BFC6800411831 = { fileRef = 651525D3072BFC6700411831; --- 4098,4101 ---- *************** *** 8349,8352 **** --- 8324,8342 ---- }; }; + 65AC81D808DC792700ADD675 = { + fileEncoding = 30; + isa = PBXFileReference; + lastKnownFileType = sourcecode.rez; + name = kernelverbs.r; + path = ../Common/resources/Mac/kernelverbs.r; + refType = 2; + sourceTree = SOURCE_ROOT; + }; + 65AC81D908DC792700ADD675 = { + fileRef = 65AC81D808DC792700ADD675; + isa = PBXBuildFile; + settings = { + }; + }; 65AF8D17074159A5007C3205 = { children = ( |
|
From: creedon <icr...@us...> - 2005-09-16 04:28:48
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/fatPages In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6157 Modified Files: Tag: commercial_suite_project-branch getFileData Log Message: added table.surePath call before coercing adrPageData to address Index: getFileData =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/fatPages/getFileData,v retrieving revision 1.1.1.1 retrieving revision 1.1.1.1.4.1 diff -C2 -d -r1.1.1.1 -r1.1.1.1.4.1 *** getFileData 26 Mar 2005 19:42:45 -0000 1.1.1.1 --- getFileData 16 Sep 2005 04:28:38 -0000 1.1.1.1.4.1 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.fatPages.getFileData ! on getFileData (path) { ÇThis script is called from the FATP file clicker script. local (flRunnable = false, flOdb = false, adrDest); local (pageSource = fatPages.readSourceFile (path)); bundle { //fill in atts table if not fatPages.getPageAtts (@pageSource, @atts) { fatPages.noObjectError (path)}; if not defined (atts.pageData) { fatPages.noObjectError (path)}; atts.path = path}; bundle { //is this a runnable desktop script? if string.lower (file.type (path)) == "ftds" { ÇDesktop scripts are of type ftds. flRunnable = true}; if defined (atts.runnable) and atts.runnable { flRunnable = true}; if kb.cmdKey () { flRunnable = false}}; if defined (atts.adrPageData) { //is this an odb object? flOdb = true}; if (window.isOpen (path)) and (not flRunnable) and (not flOdb) { window.bringToFront (path); return (true)}; if flOdb and !flRunnable { //if it's an odb object, confirm the destination adr adrDest = fatPages.confirmAddress (atts.adrPageData); if not adrDest { return (false)}}; bundle { //move the data into a new file window or the odb if flOdb { if flRunnable { //no user confirmation adrDest = address (atts.adrPageData)}; fatPages.unpackOdbObject (@atts, adrDest, path, flRunnable)} else { fatPages.unpackFileObject (@atts, path, flRunnable)}}; return (true)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.fatPages.getFileData ! on getFileData (path) { ÇThis script is called from the FATP file clicker script. ÇChanges Ç8/14/05; 10:00:38 AM by TAC Çadded table.surePath call before coercing adrPageData to address local (flRunnable = false, flOdb = false, adrDest); local (pageSource = fatPages.readSourceFile (path)); bundle { //fill in atts table if not fatPages.getPageAtts (@pageSource, @atts) { fatPages.noObjectError (path)}; if not defined (atts.pageData) { fatPages.noObjectError (path)}; atts.path = path}; bundle { //is this a runnable desktop script? if string.lower (file.type (path)) == "ftds" { ÇDesktop scripts are of type ftds. flRunnable = true}; if defined (atts.runnable) and atts.runnable { flRunnable = true}; if kb.cmdKey () { flRunnable = false}}; if defined (atts.adrPageData) { //is this an odb object? flOdb = true}; if (window.isOpen (path)) and (not flRunnable) and (not flOdb) { window.bringToFront (path); return (true)}; if flOdb and !flRunnable { //if it's an odb object, confirm the destination adr adrDest = fatPages.confirmAddress (atts.adrPageData); if not adrDest { return (false)}}; bundle { //move the data into a new file window or the odb if flOdb { if flRunnable { //no user confirmation table.surePath (atts.adrPageData); // 8/14/05; 9:59:06 AM by TAC - may need to be more robust adrDest = address (atts.adrPageData)}; fatPages.unpackOdbObject (@atts, adrDest, path, flRunnable)} else { fatPages.unpackFileObject (@atts, path, flRunnable)}}; return (true)} \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-16 03:58:48
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/file In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1829 Modified Files: Tag: commercial_suite_project-branch creator type Log Message: added check for files like osax Index: type =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/file/type,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -C2 -d -r1.2 -r1.2.2.1 *** type 13 Aug 2005 19:13:05 -0000 1.2 --- type 16 Sep 2005 03:58:39 -0000 1.2.2.1 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.file.type ! on type (path) { ÇChanges Ç8/8/05; 4:24:26 PM by TAC Çworkaround problem kernel has with Mac OS X applications that are packagkes, they have a type code and they are a folder; code cribbed from Sean Elfstrom's <sel...@im...> DuckTape Tool v0.5 on kernelCall (path) { kernel (file.type)}; if system.environment.isCarbon { // it might be a package if file.isFolder (path) { try { // in case of error fallback to kernel return (string4 (string.mid (file.readWholeFile (path + "Contents:PkgInfo"), 1, 4)))}}}; kernelCall (path)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.file.type ! on type (path) { ÇChanges Ç9/15/05; 8:57:21 PM by TAC Çadded check for files like osax Ç9/3/05; 5:42:12 PM by TAC Çadded check for Mac OS X packages; Contents:Info.plist Ç8/8/05; 4:24:26 PM by TAC Çworkaround problem kernel has with Mac OS X applications that are packages, they have a type code and they are a folder; code cribbed from Sean Elfstrom's <sel...@im...> DuckTape Tool v0.5 on kernelCall (path) { kernel (file.type)}; if system.environment.isCarbon { // it might be a package if file.isFolder (path) { Çin case of error fallback to kernel try { // like an application if file.exists (path + "Contents:PkgInfo") { return (string4 (string.mid (file.readWholeFile (path + "Contents:PkgInfo"), 1, 4)))}}; try { // like an osax if file.exists (path + "Contents:Info.plist") { local (cp = re.compile ("<key>CFBundlePackageType</key>[ \n\r\t]*<string>([^<]*)</string>")); local (s = file.readWholeFile (path + "Contents:Info.plist")); local (t = re.extract (cp, s, {1})); if t != {} { return (string4 (t))}}}}}; kernelCall (path)} \ No newline at end of file Index: creator =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/file/creator,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -C2 -d -r1.2 -r1.2.2.1 *** creator 13 Aug 2005 19:13:05 -0000 1.2 --- creator 16 Sep 2005 03:58:38 -0000 1.2.2.1 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.file.creator ! on creator (path) { ÇChanges Ç8/8/05; 4:15:09 PM by TAC Çworkaround problem kernel has with Mac OS X applications that are packagkes, they have a creator code and they are a folder; code cribbed from Sean Elfstrom's <sel...@im...> DuckTape Tool v0.5 on kernelCall (path) { kernel (file.creator)}; if system.environment.isCarbon { // it might be a package if file.isFolder (path) { try { // in case of error fallback to kernel return (string4 (string.mid (file.readWholeFile (path + "Contents:PkgInfo"), 5, 4)))}}}; kernelCall (path)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.file.creator ! on creator (path) { ÇChanges Ç9/15/05; 8:57:21 PM by TAC Çadded check for files like osax Ç9/3/05; 5:42:12 PM by TAC Çadded check for Mac OS X packages; Contents:Info.plist Ç8/8/05; 4:15:09 PM by TAC Çworkaround problem kernel has with Mac OS X applications that are packagkes, they have a creator code and they are a folder; code cribbed from Sean Elfstrom's <sel...@im...> DuckTape Tool v0.5 on kernelCall (path) { kernel (file.creator)}; if system.environment.isCarbon { // it might be a package if file.isFolder (path) { Çin case of error fallback to kernel try { // like an application if file.exists (path + "Contents:PkgInfo") { return (string4 (string.mid (file.readWholeFile (path + "Contents:PkgInfo"), 5, 4)))}}; try { // like an osax if file.exists (path + "Contents:Info.plist") { local (cp = re.compile ("<key>CFBundleSignature</key>[ \n\r\t]*<string>([^<]*)</string>")); local (s = file.readWholeFile (path + "Contents:Info.plist")); local (t = re.extract (cp, s, {1})); if t != {} { return (string4 (t))}}}}}; kernelCall (path)} \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-16 02:52:44
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/suites/DuckTape In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22376 Added Files: Tag: commercial_suite_project-branch initializeNewTerminologyTable Log Message: created --- NEW FILE: initializeNewTerminologyTable --- (This appears to be a binary file; contents omitted.) |
|
From: creedon <icr...@us...> - 2005-09-16 02:51:29
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/suites/DuckTape In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22267 Added Files: Tag: commercial_suite_project-branch installMenu Log Message: created --- NEW FILE: installMenu --- (This appears to be a binary file; contents omitted.) |
|
From: creedon <icr...@us...> - 2005-09-16 02:48:05
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/suites/DuckTape In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21890 Modified Files: Tag: commercial_suite_project-branch parseAete Log Message: factored table initialization code to DuckTape.initializeNewTerminologyTable Index: parseAete =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/suites/DuckTape/Attic/parseAete,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** parseAete 18 Aug 2005 16:28:58 -0000 1.1.2.1 --- parseAete 16 Sep 2005 02:47:56 -0000 1.1.2.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:suites.DuckTape.parseAete ! on parseAete (appPath, adrTable) { Çparse the app's aete resource and build a verb table ÇChanges Ç8/17/05; 9:38:09 PM by TAC Çin parseParams handler, added id as local so ids defined lower in calling chain don't get hammered Çadded call to init Çadded support for user.DuckTape.appIdStyle Çadded support for user.DuckTape.flUseEventInformationTable Ç8/14/05; 10:12:30 PM by TAC Çreworked assignUnique a bit, was still putting items in top level table even though eventInformationEntry was true Ç8/8/05; 1:37:13 PM by TAC Çdisabled FileMaker eventInfo event workaround, eventInfo table has been renamed eventInformation, we now scriptError so that a user can let us know that another collision occured Çminor tweaks to formatting of script and function Çtried to gather up some of the changes into the Changes bundle, i'm sure I missed a few so move 'em or make copies in the Changes bundle if you want Ç12/10/02; 3:36:02 PM by SE Ç Workaround for FMP having an eventInfo event! Ç1999 Ç10/14/99 by SE Çseveral changes related to fat headlines and line lengths Ç99/08/20 by DAB Çchanges related to various get functions such as getShort and getString Çcreated assignUnique Ç12/11/95 dmb Çdon't map entire Misc Standards suite of specific event are present Çthanks to Mike Alexander <mt...@um...> Ç1994 Ç11/2/94 dmb Çremove openApplication, extra quitApplication verbs Ç5/27/94 dml/dmb Çhandle long lines in events Ç1993 Ç9/15/93 dmb Çfixed bug in 'c@#^' handling and post processing Ç9/02/93 dmb Çhandle 'c@#^' psuedo property Ç8/10/93 dmb Çdon't create items with names that match objectModel scripts Ç7/30/93 dmb Çadd " = nil" to optional parameter definitions Ç7/09/93 dmb Çcoerce parameter types. avoid language reserved word collisions Ç2/11/93 dmb Çupdated for latest aete changes. handle special class properties. Ç9/24/92 dmb Çfirst cut parsing the application aete resource directly DuckTape.init (); local (aeteAdr, ix = 1); on placeLine (s) { // place a script line that my be too long for one line // Thu, Oct 14, 1999 at 5:18:25 PM by SE, simplified for fat headlines local (maxLen = 200); // don't use all 255 characters; that's too long for reading local (pos = op.getCursor ()); local (dir = right); local (comment = ""); Çif string.length (s) > maxLen // won't fit on one line, Thu, Oct 14, 1999 at 5:16:01 PM by SE, no longer needed--we have fat headlines now Çif s contains 'Ç' Çcomment = string.nthField (s, 'Ç', 2) Çs = string.nthField (s, 'Ç', 1) Çwhile string.length (s) > maxLen // still won't fit on one line Çlocal (i) Çfor i = maxLen - 1 downto 1 Çif s [i] == " " Çop.setLineText (string.mid (s, 1, i) + "\\") Çs = string.delete (s, 1, i) Çop.insert ("", dir) Çdir = down // for next time Çbreak op.setLineText (s); Çif comment != "" // Thu, Oct 14, 1999 at 5:16:49 PM by SE, no longer needed--we have fat headlines now Çop.insert (comment, dir) Çscript.makeComment () op.setCursor (pos)}; on getShort () { local (n); rollBeachBall (); n = number (binary (string.mid (aeteAdr^, ix, 2))); // 99/08/20, 16:46:59 by DAB ix = ix + 2; return (n)}; on getString () { local (n, s); rollBeachBall (); n = number (string.nthChar (aeteAdr^, ix)); // 99/08/20, 16:47:17 by DAB s = string.mid (aeteAdr^, ix + 1, n); // 99/08/20, 17:02:19 by DAB ix = ix + n + 1; return (s)}; on getString4 () { local (x); rollBeachBall (); x = string4 (string.mid (aeteAdr^, ix, 4)); // 99/08/20, 16:47:29 by DAB ix = ix + 4; return (x)}; on getName () { local (ixSpace, x); x = string.lower (getString ()); while string.countWords (x) > 1 { // make it an innerCase identifier ixSpace = string.patternMatch (' ', x); ch = string.upper (string.nthChar (x, ixSpace + 1)); x= string.firstWord (x) + ch + string.mid (x, ixSpace + 2, infinity)}; msg ("DuckTape: " + x); return (x)}; on skipString () { getString ()}; on skipBytes (n) { ix = ix + n}; on align () { if ix % 2 == 0 { // remember, we're in a 1-based world, so this is an odd byte ++ix}}; on assignUnique (name, adrValue, eventInformationEntry = false) { // 8/14/05; 8:02:31 PM by TAC - reworked a bit, was still putting items in top level table even though eventInformationEntry was true Çon assignUnique (name, adrValue, eventInformationEntry = false) // old code Çon sameValue (adr1, adr2) Çif typeOf (adr1^) != typeOf (adr2^) Çreturn (false) Çreturn (adr1^ == adr2^) Çlocal (adr, ct = 1) Çadr = @objectModel.[name] Çif defined (adr^) Çif sameValue (adr, adrValue) Çreturn (false) Çif typeOf (adr^) == scriptType Çreturn (false) Çif not eventInformationEntry and typeOf (adrValue^) == string4Type ÇscriptError ("Got one") Çif eventInformationEntry Çadr = @adrTable^.eventInformation.[name] Çelse Çadr = @adrTable^.[name] Çwhile defined (adr^) Çif sameValue (adr, adrValue) Çreturn (false) Çadr = @adrTable^.[name + ct++] Çtable.assign (adr, adrValue^) Çreturn (true) on sameValue (adr1, adr2) { if typeOf (adr1^) != typeOf (adr2^) { return (false)}; return (adr1^ == adr2^)}; local (adr, ct = 1); adr = @objectModel.[name]; if defined (adr^) { if sameValue (adr, adrValue) { return (false)}; if typeOf (adr^) == scriptType { return (false)}}; if eventInformationEntry { adr = @adrTable^.eventInformation} else { adr = adrTable}; local (s = name); while defined (adr^.[s]) { if sameValue (@adr^.[s], adrValue) { return (false)}; s = name + ct++}; table.assign (@adr^.[s], adrValue^); return (true)}; on parseEvents () { local (ixEvent, ctEvents, eventPrefix); on makeScript (onStatement, returnStatement, adr) { new (scriptType, adr); target.set (adr); placeLine (onStatement); // handles line overflow op.insertAtEndOfList (""); // Make a place for the return statement placeLine (returnStatement); Çop.setLineText (onStatement) Çop.insert (returnStatement, right) op.go (left, 1); window.zoom (adr); close (adr); return (true)}; on makeName (type) { Çbased on the direct parameter's type, come up with a name for it case type { objspecType { return ("obj")}; stringType { return ("s")}; intType; longType { return ("n")}; booleanType { return ("flag")}; aliasType; filespecType { return ("file")}} else { return ("x")}}; on makeParam (name, type) { local (coerceR); case type { objspecType { coerceR = "objspec"}; filespecType { coerceR = "filespec"}; aliasType { coerceR = "alias"}; 'itxt'; stringType { coerceR = "string"}; intType { coerceR = "short"}; longType { coerceR = "long"}; 'savo'; enumeratorType { coerceR = "enum"}; string4Type { coerceR = "string4"}; booleanType { coerceR = "boolean"}; singleType { coerceR = "single"}; doubleType { coerceR = "double"}; pointType { coerceR = "point"}; rectType { coerceR = "rect"}; rgbType { coerceR = "rgb"}} else { return (name)}; return (coerceR + " (" + name + ')')}; on mapSuite (code, adr) { case code { 'reqd' { adr^ = @system.macintosh.required}; 'core' { adr^ = @system.macintosh.core}; 'misc' { adr^ = @system.macintosh.misc}} else { return (false)}; return (true)}; on mapEvent (adrScript, adrTable) { local (hdr, rtn); local (verb = nameOf (adrScript^), appName = nameOf (adrTable^)); local (suiteName = string.nthField (adrScript, '.', string.countFields (adrScript, '.') - 1)); local (adr = @adrTable^.[verb]); rollBeachBall (); target.set (adrScript); msg ("DuckTape: " + nameOf (adrScript^)); op.firstSummit (); hdr = op.getLineText () - "appID"; hdr = hdr - ", "; rtn = string.commentDelete (hdr - ("on " + verb + " (")); rtn = string.popTrailing (rtn, ' '); rtn = string.replaceAll (rtn, " = nil", ""); rtn = string.replaceAll (rtn, " = 'no '", ""); if string.length (rtn) > 1 { // has at least one param rtn = ", " + rtn}; rtn = suiteName + '.' + verb + " (" + DuckTape.appIdStyle (appName, user.DuckTape.appIdStyle) + rtn; rtn = "return (" + rtn + ')'; return (makeScript (hdr, rtn, adr))}; on parseParams (isFirst) { local (id, ixParam, flags); for ixParam = 1 to getShort () { paramName = getName (); if defined (system.compiler.language.keywords.[paramName]) { local (ch = string.upper (string.nthChar (paramName, 1))); paramName = eventName + ch + string.delete (paramName, 1, 1)}; align (); id = getString4 (); paramType = getString4 (); skipString (); align (); ÇskipBytes (2) // param flags flags = getShort (); // param flags if not isFirst { hdr = hdr + ", "}; hdr = hdr + paramName; if flags < 0 { // high bit set -> optional parameter hdr = hdr + " = nil"}; rtn = rtn + ", '" + id + "', " + makeParam (paramName, paramType); isFirst = false}}; ctEvents = getShort (); if mapSuite (suiteCode, @adrSuite) and (suiteCode 'misc' or ctEvents == 0) { // map all events of suite for i = 1 to sizeOf (adrSuite^) { mapEvent (@adrSuite^ [i], adrTable)}}; bundle { // event prefix eventPrefix = "return (appleEvent ("; eventPrefix = eventPrefix + DuckTape.appIdStyle (nameOf (adrTable^), user.DuckTape.appIdStyle) + ", '"}; for ixEvent = 1 to ctEvents { // add / overwrite event provided local (eventName, comment, class, paramName, paramType, id, hdr, rtn, adr); eventName = getName (); comment = getString (); align (); class = getString4 (); id = getString4 (); Çif (eventName == "eventInfo") // Tue, Dec 10, 2002 at 3:36:02 PM by SE Workaround for FMP having an eventInfo event! ÇeventName = eventName + "1" if (eventName == "eventInformation") { // name space collision scriptError ("DuckTape Suite: parseAete name collision error. Please report this error to <http://sourceforge.net/tracker/?group_id=120666&atid=687798>.")}; adr = @adrTable^.[eventName]; hdr = "on " + eventName + " ("; rtn = eventPrefix + class + "', '" + id + "'"; skipBytes (4); // reply type skipString (); // reply description align (); skipBytes (2); // flags paramType = getString4 (); // direct param type skipString (); // direct param description align (); skipBytes (2); // reply flags if paramType != 'null' { // has a direct param local (paramName = makeName (paramType)); hdr = hdr + paramName; rtn = rtn + ", '----', " + makeParam (paramName, paramType); parseParams (false)} else { parseParams (true)}; hdr = hdr + ") // " + comment; rtn = rtn + "))"; if defined (user.DuckTape.skipOnParse.[class].[id]) { continue}; makeScript (hdr, rtn, adr)}}; on parseClasses () { local (ixClass, x, description); on parseProperties () { local (ixProperty); for ixProperty = 1 to getShort () { local (s); name = getName (); align (); value = getString4 (); if value == 'c@#!' { // kAESpecialClassProperties skipSpecialClass = true}; if value == 'c@#^' { // same props & elements as class sameAsClass = getString4 (); description = "all properties of " + sameAsClass + '*'} // append asterix for postprocessing f & r else { skipBytes (4); // property class description = name}; s = getString (); // what is it? if string.length (s) > 0 { description = description + " -- " + s}; align (); skipBytes (2); if not skipSpecialClass { if value != 'c@#^' { assignUnique (name, @value, user.DuckTape.flUseEventInformationTable)}; op.insert (description, dir); dir = down}}}; on parseElements () { local (ixElement, ixKeyForm); if sameAsClass != 0 { op.insert ("all elements of " + sameAsClass + '*', dir); dir = down}; for ixElement = 1 to getShort () { ÇskipBytes (4) // element class value = getString4 (); if not skipSpecialClass { op.insert (string (value) + '*', dir); // append asterix for postprocessing f & r dir = down}; for ixKeyForm = 1 to getShort () { skipBytes (4)}}}; // ignore it target.set (@adrTable^.objectHierarchy); editMenu.setFontSize (9); dir == noDirection; for ixClass = 1 to getShort () { local (className, classID, skipSpecialClass = false, sameAsClass = 0); className = getName (); align (); classID = getString4 (); description = className + " -- " + getString (); // the class description if dir == noDirection { op.setLineText (description)} else { op.insert (description, down)}; dir = right; op.insert ("Properties:", dir); align (); parseProperties (); if dir == right { // nothing added op.deleteLine ()} else { op.go (left, 1)}; if not skipSpecialClass { assignUnique (className, @classID, user.DuckTape.flUseEventInformationTable); op.insert ("Elements:", dir); dir = right} else { op.go (left, infinity); op.deleteLine (); dir = down}; parseElements (); if dir == right { // nothing added op.deleteLine ()}; op.go (left, infinity)}; op.firstSummit (); target.clear ()}; on parseComparisonOps () { local (ixComparison); for ixComparison = 1 to getShort () { skipString (); align (); skipBytes (4); skipString (); align ()}}; on parseEnumerations () { local (ixEnumeration); on parseEnumerators () { local (ixenumerator); for ixEnumerator = 1 to getShort () { local (name, value, adr); name = getName (); align (); value = enum (getString4 ()); assignUnique (name, @value, user.DuckTape.flUseEventInformationTable); Çadr = @adrTable^.[name] Çif defined (adr^) // name already used Çif (typeOf (adr^) != binaryType) or (adr^ != value) // not a duplicate, use unique name Çtable.assign (table.uniqueName (name, adrTable), value) Çelse Çadr^ = value skipString (); align ()}}; for ixEnumeration = 1 to getShort () { skipBytes (4); parseEnumerators ()}}; on parseSuites () { local (ixSuite, suiteCode, dir); for ixSuite = 1 to getShort () { getString (); // name of the suite skipString (); // description align (); suiteCode = getString4 (); skipBytes (4); // skip up to event array parseEvents (); parseClasses (); parseComparisonOps (); parseEnumerations ()}}; bundle { // make sure the table exists if not defined (adrTable^) { new (tableType, adrTable)}}; bundle { // make sure the eventInformation subtable exists 99/08/20, 13:29:44 by DAB if not defined (adrTable^.eventInformation) { new (tableType, @adrTable^.eventInformation)}}; bundle { // set up the class hierarchy outline new (outlineType, @adrTable^.objectHierarchy)}; bundle { // parse the resource Çlocal (name) Çif !rez.getNthResource (appPath, 'aete', 1, @name, @aete) ÇscriptError ("Couldn't find the resource.") Ç99/08/18, 20:42:00 by DAB move aete read to own script ÇDynamic aete, are returned as lists of aete on parseOneAETE () { ix = 1; string.setWordChar (' '); // make sure it's normal skipBytes (6); // skip up to suite array parseSuites ()}; local (aeteList); DuckTape.getAETE (appPath, @aeteList); if typeof (aeteList) == tableType { // dynamic case local (iy); for iy =1 to sizeof (aeteList) { aeteAdr = @aeteList[iy]; parseOneAete ()}} else { aeteAdr = @aeteList; parseOneAETE ()}}; bundle { // post-process the class hierarchy outline local (savedParams); table.assign (@savedParams, user.prefs.search); // save off user.prefs.search.wholewords = true; user.prefs.search.wraparound = true; on translateClasses (adrTable) { local (i, adr); for i = 1 to sizeof (adrTable^) { adr = @adrTable ^[i]; msg ("DuckTape: " + nameOf (adr^)); if typeOf (adr^) == string4type { user.prefs.search.searchfor = string (adr^) + '*'; user.prefs.search.replacewith = nameOf (adr^); search.reset (); search.replaceall ()}}}; target.set (@adrTable^.objectHierarchy); translateClasses (adrTable); translateClasses (@objectModel); wp.setTextMode (false); op.firstSummit (); op.sort (); target.clear (); table.assign (@user.prefs.search, savedParams)}; // restore originals bundle { // remove unneeded verbs if defined (adrTable^.quit) and defined (adrTable^.quitApplication) { delete (@adrTable^.quitApplication)}; if defined (adrTable^.openApplication) { delete (@adrTable^.openApplication)}}; msg (""); window.open (adrTable); return (true)}; Çbundle // testing ÇparseAete (system.verbs.[temp.DuckTape.appsTableItemName].appInfo.path, @system.verbs.[temp.DuckTape.appsTableItemName]) \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:suites.DuckTape.parseAete ! on parseAete (appPath, adrTable) { Çparse the app's aete resource and build a verb table ÇChanges Ç9/5/05; 6:01:53 PM by TAC Çsave root of adrTable near end of script Çadded support for user.DuckTape.callbacks.afterParseAete Çremoved support for skipping class/id when parsing events Çadded support for user.DuckTape.eventInformationTableName Ç8/18/05; 10:24:05 AM by TAC Çadded support for skipping class/id when parsing events Çin parseParams handler, added id as local so ids defined higher in calling chain don't get hammered Çadded call to init Çadded support for user.DuckTape.appIdStyle Çadded support for user.DuckTape.flUseEventInformationTable Ç8/14/05; 10:12:30 PM by TAC Çreworked assignUnique a bit, was still putting items in top level table even though eventInformationEntry was true Ç8/8/05; 1:37:13 PM by TAC Çdisabled FileMaker eventInfo event workaround, eventInfo table has been renamed eventInformation, we now scriptError so that a user can let us know that another collision occured Çminor tweaks to formatting of script and function Çtried to gather up some of the changes into the Changes bundle, i'm sure I missed a few so move 'em or make copies in the Changes bundle if you want Ç12/10/02; 3:36:02 PM by SE Ç Workaround for FMP having an eventInfo event! Ç1999 Ç10/14/99 by SE Çseveral changes related to fat headlines and line lengths Ç99/08/20 by DAB Çchanges related to various get functions such as getShort and getString Çcreated assignUnique Ç12/11/95 dmb Çdon't map entire Misc Standards suite of specific event are present Çthanks to Mike Alexander <mt...@um...> Ç1994 Ç11/2/94 dmb Çremove openApplication, extra quitApplication verbs Ç5/27/94 dml/dmb Çhandle long lines in events Ç1993 Ç9/15/93 dmb Çfixed bug in 'c@#^' handling and post processing Ç9/02/93 dmb Çhandle 'c@#^' psuedo property Ç8/10/93 dmb Çdon't create items with names that match objectModel scripts Ç7/30/93 dmb Çadd " = nil" to optional parameter definitions Ç7/09/93 dmb Çcoerce parameter types. avoid language reserved word collisions Ç2/11/93 dmb Çupdated for latest aete changes. handle special class properties. Ç9/24/92 dmb Çfirst cut parsing the application aete resource directly local (aeteAdr, ix = 1); on placeLine (s) { // place a script line that my be too long for one line // Thu, Oct 14, 1999 at 5:18:25 PM by SE, simplified for fat headlines local (maxLen = 200); // don't use all 255 characters; that's too long for reading local (pos = op.getCursor ()); local (dir = right); local (comment = ""); Çif string.length (s) > maxLen // won't fit on one line, Thu, Oct 14, 1999 at 5:16:01 PM by SE, no longer needed--we have fat headlines now Çif s contains 'Ç' Çcomment = string.nthField (s, 'Ç', 2) Çs = string.nthField (s, 'Ç', 1) Çwhile string.length (s) > maxLen // still won't fit on one line Çlocal (i) Çfor i = maxLen - 1 downto 1 Çif s [i] == " " Çop.setLineText (string.mid (s, 1, i) + "\\") Çs = string.delete (s, 1, i) Çop.insert ("", dir) Çdir = down // for next time Çbreak op.setLineText (s); Çif comment != "" // Thu, Oct 14, 1999 at 5:16:49 PM by SE, no longer needed--we have fat headlines now Çop.insert (comment, dir) Çscript.makeComment () op.setCursor (pos)}; on getShort () { local (n); rollBeachBall (); n = number (binary (string.mid (aeteAdr^, ix, 2))); // 99/08/20, 16:46:59 by DAB ix = ix + 2; return (n)}; on getString () { local (n, s); rollBeachBall (); n = number (string.nthChar (aeteAdr^, ix)); // 99/08/20, 16:47:17 by DAB s = string.mid (aeteAdr^, ix + 1, n); // 99/08/20, 17:02:19 by DAB ix = ix + n + 1; return (s)}; on getString4 () { local (x); rollBeachBall (); x = string4 (string.mid (aeteAdr^, ix, 4)); // 99/08/20, 16:47:29 by DAB ix = ix + 4; return (x)}; on getName () { local (ixSpace, x); x = string.lower (getString ()); while string.countWords (x) > 1 { // make it an innerCase identifier ixSpace = string.patternMatch (' ', x); ch = string.upper (string.nthChar (x, ixSpace + 1)); x= string.firstWord (x) + ch + string.mid (x, ixSpace + 2, infinity)}; msg ("DuckTape: " + x); return (x)}; on skipString () { getString ()}; on skipBytes (n) { ix = ix + n}; on align () { if ix % 2 == 0 { // remember, we're in a 1-based world, so this is an odd byte ++ix}}; on assignUnique (name, adrValue, eventInformationEntry = false) { // 8/14/05; 8:02:31 PM by TAC - reworked a bit, was still putting items in top level table even though eventInformationEntry was true on sameValue (adr1, adr2) { if typeOf (adr1^) != typeOf (adr2^) { return (false)}; return (adr1^ == adr2^)}; local (adr, ct = 1); adr = @objectModel.[name]; if defined (adr^) { if sameValue (adr, adrValue) { return (false)}; if typeOf (adr^) == scriptType { return (false)}}; if eventInformationEntry { adr = @adrTable^.[user.DuckTape.eventInformationTableName]} else { adr = adrTable}; local (s = name); while defined (adr^.[s]) { if sameValue (@adr^.[s], adrValue) { return (false)}; s = name + ct++}; table.assign (@adr^.[s], adrValue^); return (true)}; on parseEvents () { local (ixEvent, ctEvents, eventPrefix); on makeScript (onStatement, returnStatement, adr) { new (scriptType, adr); target.set (adr); placeLine (onStatement); // handles line overflow op.insertAtEndOfList (""); // Make a place for the return statement placeLine (returnStatement); Çop.setLineText (onStatement) Çop.insert (returnStatement, right) op.go (left, 1); window.zoom (adr); close (adr); return (true)}; on makeName (type) { Çbased on the direct parameter's type, come up with a name for it case type { objspecType { return ("obj")}; stringType { return ("s")}; intType; longType { return ("n")}; booleanType { return ("flag")}; aliasType; filespecType { return ("file")}} else { return ("x")}}; on makeParam (name, type) { local (coerceR); case type { objspecType { coerceR = "objspec"}; filespecType { coerceR = "filespec"}; aliasType { coerceR = "alias"}; 'itxt'; stringType { coerceR = "string"}; intType { coerceR = "short"}; longType { coerceR = "long"}; 'savo'; enumeratorType { coerceR = "enum"}; string4Type { coerceR = "string4"}; booleanType { coerceR = "boolean"}; singleType { coerceR = "single"}; doubleType { coerceR = "double"}; pointType { coerceR = "point"}; rectType { coerceR = "rect"}; rgbType { coerceR = "rgb"}} else { return (name)}; return (coerceR + " (" + name + ')')}; on mapSuite (code, adr) { case code { 'reqd' { adr^ = @system.macintosh.required}; 'core' { adr^ = @system.macintosh.core}; 'misc' { adr^ = @system.macintosh.misc}} else { return (false)}; return (true)}; on mapEvent (adrScript, adrTable) { local (hdr, rtn); local (verb = nameOf (adrScript^), appName = nameOf (adrTable^)); local (suiteName = string.nthField (adrScript, '.', string.countFields (adrScript, '.') - 1)); local (adr = @adrTable^.[verb]); rollBeachBall (); target.set (adrScript); msg ("DuckTape: " + nameOf (adrScript^)); op.firstSummit (); hdr = op.getLineText () - "appID"; hdr = hdr - ", "; rtn = string.commentDelete (hdr - ("on " + verb + " (")); rtn = string.popTrailing (rtn, ' '); rtn = string.replaceAll (rtn, " = nil", ""); rtn = string.replaceAll (rtn, " = 'no '", ""); if string.length (rtn) > 1 { // has at least one param rtn = ", " + rtn}; rtn = suiteName + '.' + verb + " (" + DuckTape.appIdStyle (appName, user.DuckTape.appIdStyle) + rtn; rtn = "return (" + rtn + ')'; return (makeScript (hdr, rtn, adr))}; on parseParams (isFirst) { local (id, ixParam, flags); for ixParam = 1 to getShort () { paramName = getName (); if defined (system.compiler.language.keywords.[paramName]) { local (ch = string.upper (string.nthChar (paramName, 1))); paramName = eventName + ch + string.delete (paramName, 1, 1)}; align (); id = getString4 (); paramType = getString4 (); skipString (); align (); ÇskipBytes (2) // param flags flags = getShort (); // param flags if not isFirst { hdr = hdr + ", "}; hdr = hdr + paramName; if flags < 0 { // high bit set -> optional parameter hdr = hdr + " = nil"}; rtn = rtn + ", '" + id + "', " + makeParam (paramName, paramType); isFirst = false}}; ctEvents = getShort (); if mapSuite (suiteCode, @adrSuite) and (suiteCode 'misc' or ctEvents == 0) { // map all events of suite for i = 1 to sizeOf (adrSuite^) { mapEvent (@adrSuite^ [i], adrTable)}}; bundle { // event prefix eventPrefix = "return (appleEvent ("; eventPrefix = eventPrefix + DuckTape.appIdStyle (nameOf (adrTable^), user.DuckTape.appIdStyle) + ", '"}; for ixEvent = 1 to ctEvents { // add / overwrite event provided local (eventName, comment, class, paramName, paramType, id, hdr, rtn, adr); eventName = getName (); comment = getString (); align (); class = getString4 (); id = getString4 (); Çif (eventName == "eventInfo") // Tue, Dec 10, 2002 at 3:36:02 PM by SE Workaround for FMP having an eventInfo event! ÇeventName = eventName + "1" if user.DuckTape.flUseEventInformationTable { if (eventName == user.DuckTape.eventInformationTableName) { // name space collision scriptError ("DuckTape Suite: parseAete name collision error. Please report this error to <http://sourceforge.net/tracker/?group_id=120666&atid=687798>.")}}; adr = @adrTable^.[eventName]; hdr = "on " + eventName + " ("; rtn = eventPrefix + class + "', '" + id + "'"; skipBytes (4); // reply type skipString (); // reply description align (); skipBytes (2); // flags paramType = getString4 (); // direct param type skipString (); // direct param description align (); skipBytes (2); // reply flags if paramType != 'null' { // has a direct param local (paramName = makeName (paramType)); hdr = hdr + paramName; rtn = rtn + ", '----', " + makeParam (paramName, paramType); parseParams (false)} else { parseParams (true)}; hdr = hdr + ") // " + comment; rtn = rtn + "))"; makeScript (hdr, rtn, adr)}}; on parseClasses () { local (ixClass, x, description); on parseProperties () { local (ixProperty); for ixProperty = 1 to getShort () { local (s); name = getName (); align (); value = getString4 (); if value == 'c@#!' { // kAESpecialClassProperties skipSpecialClass = true}; if value == 'c@#^' { // same props & elements as class sameAsClass = getString4 (); description = "all properties of " + sameAsClass + '*'} // append asterix for postprocessing f & r else { skipBytes (4); // property class description = name}; s = getString (); // what is it? if string.length (s) > 0 { description = description + " -- " + s}; align (); skipBytes (2); if not skipSpecialClass { if value != 'c@#^' { assignUnique (name, @value, user.DuckTape.flUseEventInformationTable)}; op.insert (description, dir); dir = down}}}; on parseElements () { local (ixElement, ixKeyForm); if sameAsClass != 0 { op.insert ("all elements of " + sameAsClass + '*', dir); dir = down}; for ixElement = 1 to getShort () { ÇskipBytes (4) // element class value = getString4 (); if not skipSpecialClass { op.insert (string (value) + '*', dir); // append asterix for postprocessing f & r dir = down}; for ixKeyForm = 1 to getShort () { skipBytes (4)}}}; // ignore it target.set (@adrTable^.objectHierarchy); editMenu.setFontSize (9); dir == noDirection; for ixClass = 1 to getShort () { local (className, classID, skipSpecialClass = false, sameAsClass = 0); className = getName (); align (); classID = getString4 (); description = className + " -- " + getString (); // the class description if dir == noDirection { op.setLineText (description)} else { op.insert (description, down)}; dir = right; op.insert ("Properties:", dir); align (); parseProperties (); if dir == right { // nothing added op.deleteLine ()} else { op.go (left, 1)}; if not skipSpecialClass { assignUnique (className, @classID, user.DuckTape.flUseEventInformationTable); op.insert ("Elements:", dir); dir = right} else { op.go (left, infinity); op.deleteLine (); dir = down}; parseElements (); if dir == right { // nothing added op.deleteLine ()}; op.go (left, infinity)}; op.firstSummit (); target.clear ()}; on parseComparisonOps () { local (ixComparison); for ixComparison = 1 to getShort () { skipString (); align (); skipBytes (4); skipString (); align ()}}; on parseEnumerations () { local (ixEnumeration); on parseEnumerators () { local (ixenumerator); for ixEnumerator = 1 to getShort () { local (name, value, adr); name = getName (); align (); value = enum (getString4 ()); assignUnique (name, @value, user.DuckTape.flUseEventInformationTable); Çadr = @adrTable^.[name] Çif defined (adr^) // name already used Çif (typeOf (adr^) != binaryType) or (adr^ != value) // not a duplicate, use unique name Çtable.assign (table.uniqueName (name, adrTable), value) Çelse Çadr^ = value skipString (); align ()}}; for ixEnumeration = 1 to getShort () { skipBytes (4); parseEnumerators ()}}; on parseSuites () { local (ixSuite, suiteCode, dir); for ixSuite = 1 to getShort () { getString (); // name of the suite skipString (); // description align (); suiteCode = getString4 (); skipBytes (4); // skip up to event array parseEvents (); parseClasses (); parseComparisonOps (); parseEnumerations ()}}; Çbundle // 8/24/05; 6:16:55 PM by TAC - old code? are these really needed? Çbundle // make sure the table exists Çif not defined (adrTable^) Çnew (tableType, adrTable) Çbundle // make sure the eventInformation subtable exists 99/08/20, 13:29:44 by DAB Çif not defined (adrTable^.eventInformation) Çnew (tableType, @adrTable^.eventInformation) bundle { // set up the class hierarchy outline new (outlineType, @adrTable^.objectHierarchy)}; bundle { // parse the resource Çlocal (name) Çif !rez.getNthResource (appPath, 'aete', 1, @name, @aete) ÇscriptError ("Couldn't find the resource.") Ç99/08/18, 20:42:00 by DAB move aete read to own script ÇDynamic aete, are returned as lists of aete on parseOneAETE () { ix = 1; string.setWordChar (' '); // make sure it's normal skipBytes (6); // skip up to suite array parseSuites ()}; local (aeteList); DuckTape.getAETE (appPath, @aeteList); if typeof (aeteList) == tableType { // dynamic case local (iy); for iy =1 to sizeof (aeteList) { aeteAdr = @aeteList[iy]; parseOneAete ()}} else { aeteAdr = @aeteList; parseOneAETE ()}}; bundle { // post-process the class hierarchy outline local (savedParams); table.assign (@savedParams, user.prefs.search); // save off user.prefs.search.wholewords = true; user.prefs.search.wraparound = true; on translateClasses (adrTable) { local (i, adr); for i = 1 to sizeof (adrTable^) { adr = @adrTable ^[i]; msg ("DuckTape: " + nameOf (adr^)); if typeOf (adr^) == string4type { user.prefs.search.searchfor = string (adr^) + '*'; user.prefs.search.replacewith = nameOf (adr^); search.reset (); search.replaceall ()}}}; target.set (@adrTable^.objectHierarchy); translateClasses (adrTable); translateClasses (@objectModel); wp.setTextMode (false); op.firstSummit (); op.sort (); target.clear (); table.assign (@user.prefs.search, savedParams)}; // restore originals bundle { // remove unneeded verbs if defined (adrTable^.quit) and defined (adrTable^.quitApplication) { delete (@adrTable^.quitApplication)}; if defined (adrTable^.openApplication) { delete (@adrTable^.openApplication)}}; DuckTape.callbackLoop (@user.DuckTape.callbacks.afterParseAete, adrTable); fileMenu.saveMyRoot (adrTable); msg (""); window.open (adrTable); return (true)}; Çbundle // testing ÇparseAete (system.verbs.[temp.DuckTape.appsTableItemName].appInfo.path, @system.verbs.[temp.DuckTape.appsTableItemName]) \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-16 02:47:29
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/suites/DuckTape In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21826 Modified Files: Tag: commercial_suite_project-branch newAppsTableItem Log Message: factored table initialization code to DuckTape.initializeNewTerminologyTable Index: newAppsTableItem =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/suites/DuckTape/Attic/newAppsTableItem,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -C2 -d -r1.1.2.2 -r1.1.2.3 *** newAppsTableItem 22 Aug 2005 01:21:42 -0000 1.1.2.2 --- newAppsTableItem 16 Sep 2005 02:47:22 -0000 1.1.2.3 *************** *** 1,3 **** FrontierVcsFile:1:scpt:suites.DuckTape.newAppsTableItem ! ÇChanges Ç8/21/05; 6:14:38 PM by TAC Çin replaceAll handler set user.prefs.search.regularexpression to false to prevent unpredictable replace behaviour Ç8/17/05; 11:07:44 AM by TAC Çbring about window to front so import process can report progress Ç8/16/05; 11:22:18 PM by TAC Çadded call to init Çadded support for user.DuckTape.appIdStyle Çadded support for user.DuckTape.flUseEventInformationTable Ç8/14/05; 7:45:14 PM by TAC Çnotify if new apps table items name is in conflict with other than system.verbs.apps table, example: trying to bring in Mail.app causes a a conflict with suites.mail. Ç8/7/05; 11:51:34 AM by TAC Çcreated, based on the work done by Sean Elfstrom < sel...@im... >. DuckTape.init (); local (f); if file.getFileDialog ("Select the application from which to create a new apps table item...", @f, DuckTape.data.appTypes) { if not (defined (temp.DuckTape)) { new (tableType, @temp.DuckTape)}; bundle { // apps table item name local (s = file.fileFromPath (f)); s = string.replaceAll (s, " ", ""); s = string.popTrailing (s, file.getPathChar ()); // might be an Mac OS X application package if s endsWith ".app" { // might be a Mac OS X application name s = string.popSuffix (s, '.')}; temp.DuckTape.appsTableItemName = s}; if dialog.ask ("New apps table item name:", @temp.DuckTape.appsTableItemName) { local (adrGlueTable = @system.verbs.apps.[temp.DuckTape.appsTableItemName]); try { // 8/14/05; 6:51:45 PM by TAC - notify if conflict with other than system.verbs.apps table, an improvement on this would be to continue to ask the user for new names until they cancel and not make them have to start over. local (adr = address (temp.DuckTape.appsTableItemName)); if adr != adrGlueTable { if defined (adr^) { if dialog.twoWay ("The name \"" + temp.DuckTape.appsTableItemName + "\" conflicts with " + string.popFileFromAddress (adr) + ". Do you want to continue?", "No", "Yes") { return (false)}}}}; if defined (adrGlueTable^) { if dialog.twoWay ("An apps table item with the name of \"" + temp.DuckTape.appsTableItemName + "\" already exists. Are you sure you want to replace it?", "No", "Yes") { return (false)}}; on replaceAll (searchString, replaceString) { local (numReplaced, savedParams); table.assign (@savedParams, user.prefs.search); // save off user.prefs.search.flatSearch = false; user.prefs.search.frontWindowOnly = false; user.prefs.search.regularexpression = false; user.prefs.search.wholeWords = false; user.prefs.search.searchFor = searchString; user.prefs.search.replaceWith = replaceString; search.reset (); numReplaced = search.replaceAll (); table.assign (@user.prefs.search, savedParams); // restore originals return (numReplaced)}; new (tableType, adrGlueTable); table.copyContents (@DuckTape.data.newTable, adrGlueTable); local (adrAppInfo = @adrGlueTable^.appInfo); bundle { // add appInfo table items adrAppInfo^.name = temp.DuckTape.appsTableItemName; ÇadrAppInfo^.sharedMenus = dialog.yesNo ("Does " + temp.DuckTape.appsTableItemName + " support Menu Sharing?") adrAppInfo^.path = f; adrAppInfo^.id = string4 (file.creator (f)); if system.environment.isCarbon { // it might be a package if file.isFolder (f) { adrAppInfo^.id = string4 (string.mid (file.readWholeFile (f + "Contents:PkgInfo"), 5, 4))}}; Çbundle // 8/7/05; 11:50:42 AM by TAC - old code, is this needed anymore? Çif not dialog.ask ("What is " + temp.appname + "'s creator id?", @adrAppInfo^.id) Çreturn ÇadrAppInfo^.id = string4 (adrAppInfo^.id) ÇadrGlueTable^.id = adrAppInfo^.id }; adrGlueTable^.id = string4 (adrAppInfo^.id); bundle { // set up new table target.set (adrGlueTable); replaceAll ("[[sample]]", temp.DuckTape.appsTableItemName); replaceAll ("[[sample.id]]", DuckTape.appIdStyle (temp.DuckTape.appsTableItemName, user.DuckTape.appIdStyle)); target.clear (); sys.systemTask (); // 8/7/05; 11:46:40 AM by TAC - is this needed? }; bundle { // import local (flDoImport = false); try { if rez.countResources (adrAppInfo^.path, 'aete') > 0 { flDoImport = true}}; if system.environment.isCarbon { // it might be a package if file.isFolder (adrAppInfo^.path) { flDoImport = true}}; if flDoImport { window.about (); msg ("DuckTape: "); DuckTape.parseAete (f, adrGlueTable)}}; Çif adrAppInfo^.sharedMenus // 8/7/05; 12:32:34 PM by TAC - old code? Çlocal (adrMenuBar = @system.menus.sharedMenus.[adrAppInfo^.id]) Çif not defined (adrMenuBar^) Çif not dialog.confirm ("Create a new shared menu bar for " + temp.appname + "?") Çreturn Çon linkScript (scriptString) Çlocal (tempscript) Ç Çnew (scriptType, @tempscript) Çtarget.set (@tempscript) ÇeditMenu.setFont (user.prefs.fonts.scriptfont) ÇeditMenu.setFontSize (user.prefs.fonts.scriptfontsize) Çop.setLineText (scriptString) Çop.insert ("Frontier.bringToFront ()", down) Çtarget.clear () Ç Çtarget.set (adrMenuBar) Çmenu.setScript (@tempscript) Ç Çtable.copy (@DuckTapeData.newMenuBar, @system.menus.sharedMenus) Çtable.rename (@system.menus.sharedMenus.newMenuBar, adrAppInfo^.id) Çtarget.set (adrMenuBar) Çop.firstSummit () Çop.expand (infinity) Çop.go (right, 1) Çop.go (down, infinity) Çcursor on "Edit Scripts Table" ÇlinkScript ("edit (@" + temp.appname + ")") Çop.go (up, 1) Çcursor on "Edit Shared Menu" ÇlinkScript ("edit (@" + adrMenuBar + ")") Çop.firstSummit () Çtarget.clear () ÇsomethingCreated = true fileMenu.save ()}} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:suites.DuckTape.newAppsTableItem ! ÇChanges Ç9/5/05; 6:41:02 PM by TAC Çfactored table initialization code to DuckTape.initializeNewTerminologyTable, factored code improvements include: Çadded support for user.DuckTape.callbacks.afterAppInfoInitialized Çpop .osax for apps table item name Çremove now redundant grabbing appid from mac os x package code Çholding down shift key will allow user to see all files types Çadded support for user.DuckTape.eventInformationTableName Ç8/21/05; 6:14:38 PM by TAC Çin replaceAll handler set user.prefs.search.regularexpression to false to prevent unpredictable replace behaviour Ç8/17/05; 11:07:44 AM by TAC Çbring about window to front so import process can report progress Ç8/16/05; 11:22:18 PM by TAC Çadded call to init Çadded support for user.DuckTape.appIdStyle Çadded support for user.DuckTape.flUseEventInformationTable Ç8/14/05; 7:45:14 PM by TAC Çnotify if new apps table items name is in conflict with other than system.verbs.apps table, example: trying to bring in Mail.app causes a a conflict with suites.mail. Ç8/7/05; 11:51:34 AM by TAC Çcreated, based on the work done by Sean Elfstrom < sel...@im... >. local (adrTerminologyTable, path); if DuckTape.initializeNewTerminologyTable (@path, @adrTerminologyTable) { window.about (); msg ("DuckTape: "); DuckTape.parseAete (path, adrTerminologyTable)} \ No newline at end of file |