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-09-08 02:51:55
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/Frontier In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29252 Modified Files: getProgramName Log Message: changed UserLand Frontier to Frontier Index: getProgramName =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/Frontier/getProgramName,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** getProgramName 26 Mar 2005 19:42:47 -0000 1.1.1.1 --- getProgramName 8 Sep 2005 02:51:47 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.Frontier.getProgramName ! on getProgramName () { ÇChanges Ç5/19/01; 9:41:59 AM by DW ÇCreated. Returns the program name and version in a string that can be displayed or included in an automatically generated file. local (s); if system.environment.isRadio { s = "Radio UserLand"} else { s = "UserLand Frontier"}; s = s + " v" + Frontier.version (); return (s)}; Çbundle //test code Çdialog.alert (getProgramName ()) \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.Frontier.getProgramName ! on getProgramName () { ÇChanges Ç9/7/05; 3:03:53 PM by TAC Çchanged UserLand Frontier to Frontier Ç5/19/01; 9:41:59 AM by DW ÇCreated. Returns the program name and version in a string that can be displayed or included in an automatically generated file. local (s); if system.environment.isRadio { s = "Radio UserLand"} else { s = "Frontier"}; s = s + " v" + Frontier.version (); return (s)}; Çbundle //test code Çdialog.alert (getProgramName ()) \ No newline at end of file |
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9306 Modified Files: countResTypes getNthResType getNthResInfo getNamedResource getResourceAttributes getStringResource putNamedResource putStringResource resourceExists deleteNamedResource setResourceAttributes deleteResource namedResourceExists putResource getResource countResources getNthResource Log Message: added support for get/put of resources from/to data fork of file on Mac OS Index: putResource =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/putResource,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** putResource 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- putResource 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.putResource ! on putResource (path, type, id, adr) { kernel (rez.putresource)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.putResource ! on putResource (path, type, id, adr, fork) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter kernel (rez.putresource)} \ No newline at end of file Index: getNthResType =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/getNthResType,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** getNthResType 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- getNthResType 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.getNthResType ! on getNthResType (path, n, adr) { kernel (rez.getnthrestype)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.getNthResType ! on getNthResType (path, n, adr, fork) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter kernel (rez.getnthrestype)} \ No newline at end of file Index: setResourceAttributes =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/setResourceAttributes,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** setResourceAttributes 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- setResourceAttributes 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.setResourceAttributes ! on setResourceAttributes (path, resourcetype, id, attrs) { kernel (rez.setResourceAttributes)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.setResourceAttributes ! on setResourceAttributes (path, resourcetype, id, attrs, fork) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter kernel (rez.setResourceAttributes)} \ No newline at end of file Index: deleteNamedResource =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/deleteNamedResource,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** deleteNamedResource 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- deleteNamedResource 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.deleteNamedResource ! on deleteNamedResource (path, resourcetype, name) { kernel (rez.deletenamedresource)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.deleteNamedResource ! on deleteNamedResource (path, resourcetype, name, fork) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter kernel (rez.deletenamedresource)} \ No newline at end of file Index: getResourceAttributes =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/getResourceAttributes,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** getResourceAttributes 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- getResourceAttributes 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.getResourceAttributes ! on getResourceAttributes (path, resourcetype, id) { kernel (rez.getResourceAttributes)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.getResourceAttributes ! on getResourceAttributes (path, resourcetype, id, fork) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter kernel (rez.getResourceAttributes)} \ No newline at end of file Index: countResources =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/countResources,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** countResources 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- countResources 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.countResources ! on countResources (path, type) { kernel (rez.countresources)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.countResources ! on countResources (path, type, fork) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter kernel (rez.countresources)} \ No newline at end of file Index: countResTypes =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/countResTypes,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** countResTypes 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- countResTypes 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.countResTypes ! on countResTypes (path) { kernel (rez.countrestypes)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.countResTypes ! on countResTypes (path, fork) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter kernel (rez.countrestypes)} \ No newline at end of file Index: getNamedResource =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/getNamedResource,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** getNamedResource 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- getNamedResource 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.getNamedResource ! on getNamedResource (path, resourcetype, name, adr) { kernel (rez.getnamedresource)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.getNamedResource ! on getNamedResource (path, resourcetype, name, adr, fork) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter kernel (rez.getnamedresource)} \ No newline at end of file Index: getResource =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/getResource,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** getResource 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- getResource 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.getResource ! on getResource (path, resourcetype, id, adr) { kernel (rez.getresource)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.getResource ! on getResource (path, resourcetype, id, adr, fork) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter kernel (rez.getresource)} \ No newline at end of file Index: getNthResInfo =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/getNthResInfo,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** getNthResInfo 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- getNthResInfo 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.getNthResInfo ! on getNthResInfo (path, type, n, adrid, adrname) { kernel (rez.getNthResInfo)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.getNthResInfo ! on getNthResInfo (path, type, n, adrid, adrname, fork) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter kernel (rez.getNthResInfo)} \ No newline at end of file Index: getStringResource =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/getStringResource,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** getStringResource 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- getStringResource 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.getStringResource ! on getStringResource (path, id, adr) { local (s); if not rez.getresource (path, 'STR ', id, @s) { return (false)}; adr^ = string.mid (s, 2, short (string.nthChar (s, 1))); return (true)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.getStringResource ! on getStringResource (path, id, adr, fork = 1) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter local (s); if not rez.getResource (path, 'STR ', id, @s, fork) { return (false)}; adr^ = string.mid (s, 2, short (string.nthChar (s, 1))); return (true)} \ No newline at end of file Index: putStringResource =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/putStringResource,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** putStringResource 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- putStringResource 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.putStringResource ! on putStringResource (fname, id, s) { s = string (char (sizeof (s))) + s; return (rez.putresource (fname, 'STR ', id, @s))} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.putStringResource ! on putStringResource (fname, id, s, fork = 1) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter s = string (char (sizeof (s))) + s; return (rez.putResource (fname, 'STR ', id, @s, fork))} \ No newline at end of file Index: resourceExists =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/resourceExists,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** resourceExists 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- resourceExists 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.resourceExists ! on resourceExists (path, resourcetype, id) { kernel (rez.resourceexists)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.resourceExists ! on resourceExists (path, resourcetype, id, fork) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter kernel (rez.resourceexists)} \ No newline at end of file Index: deleteResource =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/deleteResource,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** deleteResource 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- deleteResource 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.deleteResource ! on deleteResource (path, resourcetype, id) { kernel (rez.deleteresource)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.deleteResource ! on deleteResource (path, resourcetype, id, fork) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter kernel (rez.deleteresource)} \ No newline at end of file Index: putNamedResource =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/putNamedResource,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** putNamedResource 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- putNamedResource 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.putNamedResource ! on putNamedResource (path, type, name, adr) { kernel (rez.putnamedresource)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.putNamedResource ! on putNamedResource (path, type, name, adr, fork) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter kernel (rez.putnamedresource)} \ No newline at end of file Index: getNthResource =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/getNthResource,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** getNthResource 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- getNthResource 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.getNthResource ! on getNthResource (path, type, n, adrname, adrdata) { kernel (rez.getnthresource)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.getNthResource ! on getNthResource (path, type, n, adrname, adrdata, fork) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter kernel (rez.getnthresource)} \ No newline at end of file Index: namedResourceExists =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/rez/namedResourceExists,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** namedResourceExists 26 Mar 2005 19:43:26 -0000 1.1.1.1 --- namedResourceExists 7 Sep 2005 18:13:25 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.rez.namedResourceExists ! on namedResourceExists (path, resourcetype, name) { kernel (rez.namedresourceexists)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.rez.namedResourceExists ! on namedResourceExists (path, resourcetype, name, fork) { ÇChanges Ç9/7/05; 10:08:43 AM by TAC Çadded fork parameter kernel (rez.namedresourceexists)} \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-07 18:00:24
|
Update of /cvsroot/frontierkernel/Frontier/Common/headers In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5405 Modified Files: versions.h Log Message: cranked up version for resource verb changes restored Radio UserLand name, as I understand it Radio UserLand can not be built or distributed as open source so leaving it Radio UserLand is OK. my hope is that some day UserLand will work with the open source community on the code base, Lets leave doors open for them where it makes sense. if I got this wrong, please feel free to change it back. tweaked Andre's trademark change comments. I want to preserve the trademark characters Index: versions.h =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/headers/versions.h,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** versions.h 29 Jan 2005 23:09:56 -0000 1.9 --- versions.h 7 Sep 2005 18:00:14 -0000 1.10 *************** *** 35,38 **** --- 35,40 ---- + /* Radio version information */ + #define radio_major_version 10 #define radio_major_version_bcd 0x10 /* major version in BCD notation */ *************** *** 42,84 **** #define radio_subminor_version_bcd 0x10 /* sub and minor version in BCD notation */ ! #define radio_stage_code 0x40 /* dev = 0x20, alpha = 0x40, beta = 0x60, final = 0x80 */ ! #define radio_revision_level 2 /* for non-final releases only */ ! #define radio_build_number 2 /* increment by one for every release, final or not */ ! #define radio_version_string "10.1a2" #define frontier_major_version 10 #define frontier_major_version_bcd 0x10 /* major version in BCD notation */ ! #define frontier_sub_version 1 #define frontier_minor_version 0 ! #define frontier_subminor_version_bcd 0x10 /* sub and minor version in BCD notation */ ! #define frontier_stage_code 0x40 /* dev = 0x20, alpha = 0x40, beta = 0x60, final = 0x80 */ ! #define frontier_revision_level 2 /* for non-final releases only */ ! #define frontier_build_number 2 /* increment by one for every release, final or not */ ! #define frontier_version_string "10.1a2" ! #define copyright_year_string "2005" /* Define app name and related strings */ #ifdef PIKE ! #define APPNAME "Radio" #define APPNAME_SHORT "Radio" #else ! #define APPNAME "Frontier" #define APPNAME_SHORT "Frontier" #endif /* app name for display -- ends with the trademark character */ - /* 2005-01-12 aradke: app names no longer include trademark character */ #ifdef MACVERSION ! #define APPNAME_TM APPNAME #endif #ifdef WIN95VERSION ! #define APPNAME_TM APPNAME #endif --- 44,90 ---- #define radio_subminor_version_bcd 0x10 /* sub and minor version in BCD notation */ ! #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" + /* Frontier version information */ + #define frontier_major_version 10 #define frontier_major_version_bcd 0x10 /* major version in BCD notation */ ! #define frontier_sub_version 1 #define frontier_minor_version 0 ! #define frontier_subminor_version_bcd 0x10 /* sub and minor version in BCD notation */ ! #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" ! /* strings for all apps */ ! ! #define copyright_year_string "2005" /* Define app name and related strings */ #ifdef PIKE ! #define APPNAME "Radio UserLand" #define APPNAME_SHORT "Radio" #else ! #define APPNAME "Frontier" #define APPNAME_SHORT "Frontier" #endif /* app name for display -- ends with the trademark character */ #ifdef MACVERSION ! #define APPNAME_TM APPNAME /* 2005-01-12 aradke: app names no longer include trademark character - "\xAA" */ #endif #ifdef WIN95VERSION ! #define APPNAME_TM APPNAME /* 2005-01-12 aradke: app names no longer include trademark character - "\x99" */ #endif + |
|
From: creedon <icr...@us...> - 2005-09-07 17:46:02
|
Update of /cvsroot/frontierkernel/Frontier/Common/source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2410 Modified Files: shellwindow.c resources.c shellfile.c fileverbs.c Log Message: added support for get/put of resources from/to data fork of file on Mac OS Index: resources.c =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/source/resources.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** resources.c 11 Jan 2005 22:48:10 -0000 1.4 --- resources.c 7 Sep 2005 17:45:53 -0000 1.5 *************** *** 37,42 **** - - #ifdef WIN95VERSION extern HINSTANCE hInst; --- 37,40 ---- *************** *** 44,48 **** - boolean getstringlist (short listnum, short id, bigstring bs) { #ifdef MACVERSION --- 42,45 ---- *************** *** 142,163 **** ! boolean openresourcefile (const tyfilespec *fs, short *rnum) { ! #ifdef MACVERSION ! register short resourcerefnum = -1; SetResLoad (false); ! resourcerefnum = FSpOpenResFile (fs, fsRdWrPerm); SetResLoad (true); if (ResError () == -39) { /*eof error, file has no resource fork, create one*/ ! ! HCreateResFile ((*fs).vRefNum, (*fs).parID, (StringPtr) (*fs).name); ! ! if (ResError () != noErr) /*failed to create resource fork*/ goto error; ! resourcerefnum = FSpOpenResFile (fs, fsRdWrPerm); } --- 139,184 ---- ! boolean openresourcefile (const tyfilespec *fs, short *rnum, short forktype) { ! #ifdef MACVERSION ! ! /* ! 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile ! */ ! ! short resourcerefnum = -1; ! HFSUniStr255 fork; ! FSRef myRef; SetResLoad (false); ! FSpMakeFSRef (fs, &myRef); ! ! switch (forktype) { ! case resourcefork: ! FSGetResourceForkName (&fork); ! break; ! ! case datafork: ! FSGetDataForkName (&fork); ! break; ! } ! ! /* ! 2005-09-01 creedon - in my reading about the FSOpenResourceFile function someone mentioned that it might not deal well with corrupted resources ! and that dropping back to FSpOpenResFile seemed to do the trick. i've not done that here but could be tried if the problem is real and manifests. ! */ ! ! FSOpenResourceFile (&myRef, fork.length, fork.unicode, fsRdWrPerm, &resourcerefnum); SetResLoad (true); if (ResError () == -39) { /*eof error, file has no resource fork, create one*/ ! ! OSErr errcode = FSCreateResourceFork (&myRef, fork.length, fork.unicode, 0); ! ! if (errcode != noErr) /*failed to create resource fork*/ goto error; ! FSOpenResourceFile (&myRef, fork.length, fork.unicode, fsRdWrPerm, &resourcerefnum); } *************** *** 490,494 **** #ifdef MACVERSION ! boolean saveresource (const tyfilespec *fs, short rnum, ResType type, short id, bigstring bsname, long sizedata, void *pdata) { /* --- 511,515 ---- #ifdef MACVERSION ! boolean saveresource (const tyfilespec *fs, short rnum, ResType type, short id, bigstring bsname, long sizedata, void *pdata, short forktype) { /* *************** *** 498,501 **** --- 519,524 ---- this will only work for resource types that are not used in your application and are not used in the system. be careful in choosing your types! + + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile */ *************** *** 509,513 **** oldrnum = CurResFile (); ! if (!openresourcefile (fs, &rnum)) return (false); --- 532,536 ---- oldrnum = CurResFile (); ! if (!openresourcefile (fs, &rnum, forktype)) return (false); *************** *** 533,537 **** #ifdef MACVERSION ! boolean saveresourcehandle (const tyfilespec *fs, ResType type, short id, bigstring bsname, Handle h) { boolean fl; --- 556,564 ---- #ifdef MACVERSION ! boolean saveresourcehandle (const tyfilespec *fs, ResType type, short id, bigstring bsname, Handle h, short forktype) { ! ! /* ! 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile ! */ boolean fl; *************** *** 539,543 **** lockhandle (h); ! fl = saveresource (fs, -1, type, id, bsname, gethandlesize (h), *h); unlockhandle (h); --- 566,570 ---- lockhandle (h); ! fl = saveresource (fs, -1, type, id, bsname, gethandlesize (h), *h, forktype); unlockhandle (h); *************** *** 553,559 **** #ifdef MACVERSION ! static boolean pushresourcefile (const tyfilespec *fs, char permission) { /* 2.1b8 dmb: call SetResLoad (false) before opening a resource fork to prevent all preload resources from being loaded into our heap --- 580,588 ---- #ifdef MACVERSION ! static boolean pushresourcefile (const tyfilespec *fs, char permission, short forktype) { /* + 2005-09-02 creedon: added support for fork parameter, allows access to resources in data forks + 2.1b8 dmb: call SetResLoad (false) before opening a resource fork to prevent all preload resources from being loaded into our heap *************** *** 561,578 **** register OSErr errcode; ! oldrnum = CurResFile (); ! ! SetResLoad (false); ! newrnum = FSpOpenResFile (fs, permission); ! SetResLoad (true); ! if (newrnum != -1) /*opened OK*/ ! return (true); ! errcode = ResError (); if (errcode != eofErr) { /*don't want an alert if there isn't a resource fork*/ --- 590,631 ---- register OSErr errcode; + FSRef myRef; ! errcode = FSpMakeFSRef (fs, &myRef); ! if (!errcode) { ! HFSUniStr255 fork; ! ! switch (forktype) { ! case resourcefork: ! FSGetResourceForkName (&fork); ! break; ! ! case datafork: ! FSGetDataForkName (&fork); ! break; ! } ! ! oldrnum = CurResFile (); ! SetResLoad (false); ! /* ! 2005-08-31 creedon - in my reading about the FSOpenResourceFile function someone mentioned that it might not deal well with corrupted resources ! and that dropping back to FSpOpenResFile seemed to do the trick. i've not done that here but could be tried if the problem is real and manifests. ! */ ! ! errcode = FSOpenResourceFile (&myRef, fork.length, fork.unicode, permission, &newrnum); ! ! SetResLoad (true); + if (errcode != -1) /*opened OK*/ + return (true); + + errcode = ResError (); + + } + if (errcode != eofErr) { /*don't want an alert if there isn't a resource fork*/ *************** *** 585,597 **** } /*pushresourcefile*/ ! static boolean pushresourcefilereadonly (const tyfilespec *fs) { ! return (pushresourcefile (fs, fsRdPerm)); } /*pushresourcefilereadonly*/ ! static boolean pushresourcefilereadwrite (const tyfilespec *fs) { ! return (pushresourcefile (fs, fsRdWrPerm)); } /*pushresourcefilereadwrite*/ --- 638,658 ---- } /*pushresourcefile*/ ! static boolean pushresourcefilereadonly (const tyfilespec *fs, short forktype) { ! /* ! 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile ! */ ! ! return (pushresourcefile (fs, fsRdPerm, forktype)); } /*pushresourcefilereadonly*/ ! static boolean pushresourcefilereadwrite (const tyfilespec *fs, short forktype) { ! /* ! 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile ! */ ! ! return (pushresourcefile (fs, fsRdWrPerm, forktype)); } /*pushresourcefilereadwrite*/ *************** *** 612,620 **** #endif ! boolean loadresource (const tyfilespec *fs, short rnum, ResType type, short id, bigstring bsname, long sizedata, void *pdata) { /* the inverse of saveresource. we load in the indicated type and id from the indicated file on the indicated volume into the indicated data area. */ --- 673,683 ---- #endif ! boolean loadresource (const tyfilespec *fs, short rnum, ResType type, short id, bigstring bsname, long sizedata, void *pdata, short forktype) { /* the inverse of saveresource. we load in the indicated type and id from the indicated file on the indicated volume into the indicated data area. + + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile */ *************** *** 626,630 **** #ifdef MACVERSION ! if (!pushresourcefilereadonly (fs)) return (false); #endif --- 689,693 ---- #ifdef MACVERSION ! if (!pushresourcefilereadonly (fs, forktype)) return (false); #endif *************** *** 654,662 **** #ifdef MACVERSION ! boolean loadresourcehandle (const tyfilespec *fs, ResType type, short id, bigstring bsname, Handle *hresource) { /* load a resource into a handle. 9/13/91 dmb: now accept nil hresource to just check for resource's existence --- 717,727 ---- #ifdef MACVERSION ! boolean loadresourcehandle (const tyfilespec *fs, ResType type, short id, bigstring bsname, Handle *hresource, short forktype) { /* load a resource into a handle. + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile + 9/13/91 dmb: now accept nil hresource to just check for resource's existence *************** *** 667,671 **** register Handle h; ! if (!pushresourcefilereadonly (fs)) return (false); --- 732,736 ---- register Handle h; ! if (!pushresourcefilereadonly (fs, forktype)) return (false); *************** *** 700,707 **** #ifdef MACVERSION ! boolean deleteresource (const tyfilespec *fs, ResType type, short id, bigstring bsname) { /* delete the resource specified by type, id or bsname */ --- 765,774 ---- #ifdef MACVERSION ! boolean deleteresource (const tyfilespec *fs, ResType type, short id, bigstring bsname, short forkttype) { /* delete the resource specified by type, id or bsname + + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile */ *************** *** 709,713 **** register Handle h; ! if (!pushresourcefilereadwrite (fs)) return (false); --- 776,780 ---- register Handle h; ! if (!pushresourcefilereadwrite (fs, forkttype)) return (false); *************** *** 735,741 **** #ifdef MACVERSION ! boolean getnumresourcetypes (const tyfilespec *fs, short *cttypes) { ! if (!pushresourcefilereadonly (fs)) return (false); --- 802,812 ---- #ifdef MACVERSION ! boolean getnumresourcetypes (const tyfilespec *fs, short *cttypes, short forktype) { ! /* ! 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile ! */ ! ! if (!pushresourcefilereadonly (fs, forktype)) return (false); *************** *** 749,755 **** #ifdef MACVERSION ! boolean getnthresourcetype (const tyfilespec *fs, short n, ResType *type) { ! if (!pushresourcefilereadonly (fs)) return (false); --- 820,830 ---- #ifdef MACVERSION ! boolean getnthresourcetype (const tyfilespec *fs, short n, ResType *type, short forktype) { ! /* ! 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile ! */ ! ! if (!pushresourcefilereadonly (fs, forktype)) return (false); *************** *** 763,769 **** #ifdef MACVERSION ! boolean getnumresources (const tyfilespec *fs, ResType type, short *ctresources) { ! if (!pushresourcefilereadonly (fs)) return (false); --- 838,848 ---- #ifdef MACVERSION ! boolean getnumresources (const tyfilespec *fs, ResType type, short *ctresources, short forktype) { ! /* ! 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile ! */ ! ! if (!pushresourcefilereadonly (fs, forktype)) return (false); *************** *** 777,781 **** #ifdef MACVERSION ! boolean getnthresourcehandle (const tyfilespec *fs, ResType type, short n, short *id, bigstring bsname, Handle *hresource) { /* --- 856,860 ---- #ifdef MACVERSION ! boolean getnthresourcehandle (const tyfilespec *fs, ResType type, short n, short *id, bigstring bsname, Handle *hresource, short forktype) { /* *************** *** 783,786 **** --- 862,867 ---- id and name of the resource + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile + 6/2/92 dmb: accept nil hresource for info retrieval *************** *** 791,795 **** register Handle h; ! if (!pushresourcefilereadonly (fs)) return (false); --- 872,876 ---- register Handle h; ! if (!pushresourcefilereadonly (fs, forktype)) return (false); *************** *** 856,862 **** #ifdef MACVERSION ! boolean getresourceattributes (const tyfilespec *fs, ResType type, short id, bigstring bsname, short *resattrs) { /* 2.1b4 dmb: new routine */ --- 937,945 ---- #ifdef MACVERSION ! boolean getresourceattributes (const tyfilespec *fs, ResType type, short id, bigstring bsname, short *resattrs, short forktype) { /* + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile + 2.1b4 dmb: new routine */ *************** *** 865,869 **** register boolean fl = false; ! if (!pushresourcefilereadonly (fs)) return (false); --- 948,952 ---- register boolean fl = false; ! if (!pushresourcefilereadonly (fs, forktype)) return (false); *************** *** 883,889 **** #ifdef MACVERSION ! boolean setresourceattributes (const tyfilespec *fs, ResType type, short id, bigstring bsname, short resattrs) { /* 2.1b4 dmb: new routine */ --- 966,974 ---- #ifdef MACVERSION ! boolean setresourceattributes (const tyfilespec *fs, ResType type, short id, bigstring bsname, short resattrs, short forktype) { /* + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile + 2.1b4 dmb: new routine */ *************** *** 893,897 **** #define validattrs (resSysHeap | resPurgeable | resLocked | resProtected | resPreload) ! if (!pushresourcefilereadwrite (fs)) return (false); --- 978,982 ---- #define validattrs (resSysHeap | resPurgeable | resLocked | resProtected | resPreload) ! if (!pushresourcefilereadwrite (fs, forktype)) return (false); *************** *** 931,933 **** } /*releaseresourcehandle*/ - --- 1016,1017 ---- Index: shellwindow.c =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/source/shellwindow.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** shellwindow.c 30 Jan 2005 20:31:40 -0000 1.5 --- shellwindow.c 7 Sep 2005 17:45:53 -0000 1.6 *************** *** 623,627 **** boolean loadwindowposition (ptrfilespec fspec, short rnum, tywindowposition *wpos) { ! return (loadresource (fspec, rnum, 'wpos', 128, nil, sizeof (tywindowposition), wpos)); } /*loadwindowposition*/ --- 623,627 ---- boolean loadwindowposition (ptrfilespec fspec, short rnum, tywindowposition *wpos) { ! return (loadresource (fspec, rnum, 'wpos', 128, nil, sizeof (tywindowposition), wpos, 1)); /* 2005-09-02 creedon - added support for fork parameter, see resources.c: openresourcefile and pushresourcefile */ } /*loadwindowposition*/ *************** *** 652,656 **** //This may be a spotlight bug though. resourceSize = sizeof (savedfont); ! if (!loadresource (&fspec, (short) (**h).rnum, 'styl', 128, nil, resourceSize, &savedfont)) { (**h).defaultfont = config.defaultfont; --- 652,656 ---- //This may be a spotlight bug though. resourceSize = sizeof (savedfont); ! if (!loadresource (&fspec, (short) (**h).rnum, 'styl', 128, nil, resourceSize, &savedfont, 1)) { /* 2005-09-02 creedon - added support for fork parameter, see resources.c: openresourcefile and pushresourcefile */ (**h).defaultfont = config.defaultfont; Index: shellfile.c =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/source/shellfile.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** shellfile.c 11 Jan 2005 22:48:10 -0000 1.4 --- shellfile.c 7 Sep 2005 17:45:53 -0000 1.5 *************** *** 205,209 **** #ifdef MACVERSION if (config.flopenresfile) ! if (!openresourcefile (fspec, &rnum)) goto error; #endif --- 205,209 ---- #ifdef MACVERSION if (config.flopenresfile) ! if (!openresourcefile (fspec, &rnum, 1)) /* 2005-09-02 creedon - added support for fork parameter, see resources.c: openresourcefile and pushresourcefile */ goto error; #endif *************** *** 428,432 **** #ifdef MACVERSION if (config.flopenresfile) ! if (!openresourcefile (fspec, &rnum)) { closefile (fnum); --- 428,432 ---- #ifdef MACVERSION if (config.flopenresfile) ! if (!openresourcefile (fspec, &rnum, 1)) { /* 2005-09-02 creedon - added support for fork parameter, see resources.c: openresourcefile and pushresourcefile */ closefile (fnum); *************** *** 543,547 **** if (config.flopenresfile) { ! if (!openresourcefile (fspec, &rnum)) { closefile (fnum); --- 543,547 ---- if (config.flopenresfile) { ! if (!openresourcefile (fspec, &rnum, 1)) { /* 2005-09-02 creedon - added support for fork parameter, see resources.c: openresourcefile and pushresourcefile */ closefile (fnum); *************** *** 688,692 **** #ifdef MACVERSION if (config.flopenresfile) ! if (!openresourcefile (fspec, &rnum)) goto error; #endif --- 688,692 ---- #ifdef MACVERSION if (config.flopenresfile) ! if (!openresourcefile (fspec, &rnum, 1)) /* 2005-09-02 creedon - added support for fork parameter, see resources.c: openresourcefile and pushresourcefile */ goto error; #endif Index: fileverbs.c =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/source/fileverbs.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** fileverbs.c 11 Jan 2005 22:48:05 -0000 1.4 --- fileverbs.c 7 Sep 2005 17:45:53 -0000 1.5 *************** *** 838,848 **** static boolean getresourceverb (hdltreenode hparam1, boolean flnamed, tyvaluerecord *v) { tyfilespec fs; OSType type; ! short id; Handle h; hdlhashtable htable; bigstring bs, bsvarname; if (!getpathvalue (hparam1, 1, &fs)) --- 838,855 ---- static boolean getresourceverb (hdltreenode hparam1, boolean flnamed, tyvaluerecord *v) { + + /* + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile + */ tyfilespec fs; OSType type; ! short id, forktype; ! short ctconsumed = 4; ! short ctpositional = 4; Handle h; hdlhashtable htable; bigstring bs, bsvarname; + tyvaluerecord val; if (!getpathvalue (hparam1, 1, &fs)) *************** *** 855,864 **** return (false); flnextparamislast = true; ! if (!getvarparam (hparam1, 4, &htable, bsvarname)) /*returned handle holder*/ return (false); ! if (!loadresourcehandle (&fs, type, id, bs, &h)) { (*v).data.flvalue = false; --- 862,878 ---- return (false); + if (!getvarparam (hparam1, 4, &htable, bsvarname)) /*returned handle holder*/ + return (false); + flnextparamislast = true; ! setintvalue (1, &val); /* defaults to 1 */ ! ! if (!getoptionalparamvalue (hparam1, &ctconsumed, &ctpositional, "\x04""fork", &val)) return (false); ! forktype = val.data.intvalue; ! ! if (!loadresourcehandle (&fs, type, id, bs, &h, forktype)) { (*v).data.flvalue = false; *************** *** 885,894 **** static boolean putresourceverb (hdltreenode hparam1, boolean flnamed, tyvaluerecord *v) { tyfilespec fs; ! OSType type; ! short id; Handle hbinary; bigstring bs; ! OSType bintype; if (!getpathvalue (hparam1, 1, &fs)) --- 899,914 ---- static boolean putresourceverb (hdltreenode hparam1, boolean flnamed, tyvaluerecord *v) { + /* + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile + */ + tyfilespec fs; ! OSType type, bintype; ! short id, forktype; ! short ctconsumed = 4; ! short ctpositional = 4; Handle hbinary; bigstring bs; ! tyvaluerecord val; if (!getpathvalue (hparam1, 1, &fs)) *************** *** 901,906 **** return (false); - flnextparamislast = true; - if (!getbinaryvalue (hparam1, 4, false, &hbinary)) return (false); --- 921,924 ---- *************** *** 908,912 **** pullfromhandle (hbinary, 0L, sizeof (bintype), &bintype); ! (*v).data.flvalue = saveresourcehandle (&fs, type, id, bs, hbinary); return (true); --- 926,939 ---- pullfromhandle (hbinary, 0L, sizeof (bintype), &bintype); ! flnextparamislast = true; ! ! setintvalue (1, &val); /* defaults to 1 */ ! ! if (!getoptionalparamvalue (hparam1, &ctconsumed, &ctpositional, "\x04""fork", &val)) ! return (false); ! ! forktype = val.data.intvalue; ! ! (*v).data.flvalue = saveresourcehandle (&fs, type, id, bs, hbinary, forktype); return (true); *************** *** 916,928 **** static boolean countrestypesverb (hdltreenode hparam1, tyvaluerecord *v) { tyfilespec fs; ! short cttypes; flnextparamislast = true; ! if (!getpathvalue (hparam1, 1, &fs)) return (false); ! if (!getnumresourcetypes (&fs, &cttypes)) cttypes = 0; --- 943,969 ---- static boolean countrestypesverb (hdltreenode hparam1, tyvaluerecord *v) { + /* + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile + */ + tyfilespec fs; ! short cttypes, forktype; ! short ctconsumed = 1; ! short ctpositional = 1; ! tyvaluerecord val; ! ! if (!getpathvalue (hparam1, 1, &fs)) ! return (false); flnextparamislast = true; ! setintvalue (1, &val); /* defaults to 1 */ ! ! if (!getoptionalparamvalue (hparam1, &ctconsumed, &ctpositional, "\x04""fork", &val)) return (false); ! forktype = val.data.intvalue; ! ! if (!getnumresourcetypes (&fs, &cttypes, forktype)) cttypes = 0; *************** *** 935,940 **** static boolean getnthrestypeverb (hdltreenode hparam1, tyvaluerecord *v) { tyfilespec fs; ! short n; OSType type; hdlhashtable htable; --- 976,987 ---- static boolean getnthrestypeverb (hdltreenode hparam1, tyvaluerecord *v) { + /* + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile + */ + tyfilespec fs; ! short n, forktype; ! short ctconsumed = 3; ! short ctpositional = 3; OSType type; hdlhashtable htable; *************** *** 949,958 **** return (false); flnextparamislast = true; ! if (!getvarparam (hparam1, 3, &htable, bsvarname)) /*returned handle holder*/ return (false); ! if (!getnthresourcetype (&fs, n, &type)) { /*not a fatal error*/ (*v).data.flvalue = false; --- 996,1012 ---- return (false); + if (!getvarparam (hparam1, 3, &htable, bsvarname)) /*returned handle holder*/ + return (false); + flnextparamislast = true; ! setintvalue (1, &val); /* defaults to 1 */ ! ! if (!getoptionalparamvalue (hparam1, &ctconsumed, &ctpositional, "\x04""fork", &val)) return (false); ! forktype = val.data.intvalue; ! ! if (!getnthresourcetype (&fs, n, &type, forktype)) { /*not a fatal error*/ (*v).data.flvalue = false; *************** *** 973,989 **** static boolean countresourcesverb (hdltreenode hparam1, tyvaluerecord *v) { tyfilespec fs; OSType type; ! short ctresources; if (!getpathvalue (hparam1, 1, &fs)) return (false); flnextparamislast = true; ! if (!getostypevalue (hparam1, 2, &type)) return (false); ! if (!getnumresources (&fs, type, &ctresources)) ctresources = 0; --- 1027,1057 ---- static boolean countresourcesverb (hdltreenode hparam1, tyvaluerecord *v) { + /* + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile + */ + tyfilespec fs; OSType type; ! short ctresources, forktype; ! short ctconsumed = 2; ! short ctpositional = 2; ! tyvaluerecord val; if (!getpathvalue (hparam1, 1, &fs)) return (false); + if (!getostypevalue (hparam1, 2, &type)) + return (false); + flnextparamislast = true; ! setintvalue (1, &val); /* defaults to 1 */ ! ! if (!getoptionalparamvalue (hparam1, &ctconsumed, &ctpositional, "\x04""fork", &val)) return (false); ! forktype = val.data.intvalue; ! ! if (!getnumresources (&fs, type, &ctresources, forktype)) ctresources = 0; *************** *** 995,1008 **** static boolean getnthresourceverb (hdltreenode hparam1, tyvaluerecord *v) { tyfilespec fs; OSType type; ! short n; ! short id; Handle h; hdlhashtable ht1, ht2; bigstring bs, bs1, bs2; boolean fl; ! if (!getpathvalue (hparam1, 1, &fs)) return (false); --- 1063,1082 ---- static boolean getnthresourceverb (hdltreenode hparam1, tyvaluerecord *v) { + + /* + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile + */ tyfilespec fs; OSType type; ! short n, id, forktype; ! short ctconsumed = 5; ! short ctpositional = 5; Handle h; hdlhashtable ht1, ht2; bigstring bs, bs1, bs2; boolean fl; ! tyvaluerecord val; ! if (!getpathvalue (hparam1, 1, &fs)) return (false); *************** *** 1017,1026 **** return (false); flnextparamislast = true; ! if (!getvarparam (hparam1, 5, &ht2, bs2)) /*returned handle holder*/ return (false); ! if (!getnthresourcehandle (&fs, type, n, &id, bs, &h)) { (*v).data.flvalue = false; --- 1091,1107 ---- return (false); + if (!getvarparam (hparam1, 5, &ht2, bs2)) /*returned handle holder*/ + return (false); + flnextparamislast = true; ! setintvalue (1, &val); /* defaults to 1 */ ! ! if (!getoptionalparamvalue (hparam1, &ctconsumed, &ctpositional, "\x04""fork", &val)) return (false); ! forktype = val.data.intvalue; ! ! if (!getnthresourcehandle (&fs, type, n, &id, bs, &h, forktype)) { (*v).data.flvalue = false; *************** *** 1057,1060 **** --- 1138,1143 ---- /* + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile + 6/2/92 dmb: created. */ *************** *** 1062,1072 **** tyfilespec fs; OSType type; ! short n; ! short id; hdlhashtable ht1; bigstring bs, bs1; boolean fl; ! if (!langcheckparamcount (hparam1, 5)) return (false); --- 1145,1157 ---- tyfilespec fs; OSType type; ! short n, id, forktype; ! short ctconsumed = 5; ! short ctpositional = 5; hdlhashtable ht1; bigstring bs, bs1; boolean fl; + tyvaluerecord val; ! if (!langcheckparamcount (hparam1, 6)) return (false); *************** *** 1080,1084 **** return (false); ! if (!getnthresourcehandle (&fs, type, n, &id, bs, nil)) { (*v).data.flvalue = false; --- 1165,1176 ---- return (false); ! setintvalue (1, &val); /* defaults to 1 */ ! ! if (!getoptionalparamvalue (hparam1, &ctconsumed, &ctpositional, "\x04""fork", &val)) ! return (false); ! ! forktype = val.data.intvalue; ! ! if (!getnthresourcehandle (&fs, type, n, &id, bs, nil, forktype)) { (*v).data.flvalue = false; *************** *** 1110,1117 **** static boolean resourceexistsverb (hdltreenode hparam1, boolean flnamed, tyvaluerecord *v) { tyfilespec fs; OSType type; ! short id; bigstring bs; if (!getpathvalue (hparam1, 1, &fs)) --- 1202,1216 ---- static boolean resourceexistsverb (hdltreenode hparam1, boolean flnamed, tyvaluerecord *v) { + /* + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile + */ + tyfilespec fs; OSType type; ! short id, forktype; ! short ctconsumed = 3; ! short ctpositional = 3; bigstring bs; + tyvaluerecord val; if (!getpathvalue (hparam1, 1, &fs)) *************** *** 1121,1130 **** return (false); flnextparamislast = true; ! if (!getstringorintvalue (hparam1, 3, flnamed, &id, bs)) return (false); ! (*v).data.flvalue = loadresourcehandle (&fs, type, id, bs, nil); return (true); --- 1220,1236 ---- return (false); + if (!getstringorintvalue (hparam1, 3, flnamed, &id, bs)) + return (false); + flnextparamislast = true; ! setintvalue (1, &val); /* defaults to 1 */ ! ! if (!getoptionalparamvalue (hparam1, &ctconsumed, &ctpositional, "\x04""fork", &val)) return (false); ! forktype = val.data.intvalue; ! ! (*v).data.flvalue = loadresourcehandle (&fs, type, id, bs, nil, forktype); return (true); *************** *** 1135,1147 **** /* 2.1b4 dmb: new verb ! (*/ tyfilespec fs; OSType type; ! short id; bigstring bs; ! short attrs; ! if (!getpathvalue (hparam1, 1, &fs)) return (false); --- 1241,1256 ---- /* + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile 2.1b4 dmb: new verb ! */ tyfilespec fs; OSType type; ! short id, attrs, forktype; ! short ctconsumed = 3; ! short ctpositional = 3; bigstring bs; ! tyvaluerecord val; ! if (!getpathvalue (hparam1, 1, &fs)) return (false); *************** *** 1150,1159 **** return (false); flnextparamislast = true; ! if (!getstringorintvalue (hparam1, 3, flnamed, &id, bs)) return (false); ! if (!getresourceattributes (&fs, type, id, bs, &attrs)) return (false); --- 1259,1275 ---- return (false); + if (!getstringorintvalue (hparam1, 3, flnamed, &id, bs)) + return (false); + flnextparamislast = true; ! setintvalue (1, &val); /* defaults to 1 */ ! ! if (!getoptionalparamvalue (hparam1, &ctconsumed, &ctpositional, "\x04""fork", &val)) return (false); ! forktype = val.data.intvalue; ! ! if (!getresourceattributes (&fs, type, id, bs, &attrs, forktype)) return (false); *************** *** 1165,1176 **** /* 2.1b4 dmb: new verb ! (*/ tyfilespec fs; OSType type; ! short id; bigstring bs; ! short attrs; if (!getpathvalue (hparam1, 1, &fs)) --- 1281,1295 ---- /* + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile 2.1b4 dmb: new verb ! */ tyfilespec fs; OSType type; ! short id, attrs, forktype; ! short ctconsumed = 4; ! short ctpositional = 4; bigstring bs; ! tyvaluerecord val; if (!getpathvalue (hparam1, 1, &fs)) *************** *** 1183,1192 **** return (false); flnextparamislast = true; ! if (!getintvalue (hparam1, 4, &attrs)) return (false); ! if (!setresourceattributes (&fs, type, id, bs, attrs)) return (false); --- 1302,1318 ---- return (false); + if (!getintvalue (hparam1, 4, &attrs)) + return (false); + flnextparamislast = true; ! setintvalue (1, &val); /* defaults to 1 */ ! ! if (!getoptionalparamvalue (hparam1, &ctconsumed, &ctpositional, "\x04""fork", &val)) return (false); ! forktype = val.data.intvalue; ! ! if (!setresourceattributes (&fs, type, id, bs, attrs, forktype)) return (false); *************** *** 1199,1206 **** static boolean deleteresourceverb (hdltreenode hparam1, boolean flnamed, tyvaluerecord *v) { tyfilespec fs; OSType type; ! short id; bigstring bs; if (!getpathvalue (hparam1, 1, &fs)) --- 1325,1339 ---- static boolean deleteresourceverb (hdltreenode hparam1, boolean flnamed, tyvaluerecord *v) { + /* + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile + */ + tyfilespec fs; OSType type; ! short id, forktype; ! short ctconsumed = 3; ! short ctpositional = 3; bigstring bs; + tyvaluerecord val; if (!getpathvalue (hparam1, 1, &fs)) *************** *** 1210,1219 **** return (false); flnextparamislast = true; ! if (!getstringorintvalue (hparam1, 3, flnamed, &id, bs)) return (false); ! (*v).data.flvalue = deleteresource (&fs, type, id, bs); return (true); --- 1343,1359 ---- return (false); + if (!getstringorintvalue (hparam1, 3, flnamed, &id, bs)) + return (false); + flnextparamislast = true; ! setintvalue (1, &val); /* defaults to 1 */ ! ! if (!getoptionalparamvalue (hparam1, &ctconsumed, &ctpositional, "\x04""fork", &val)) return (false); ! forktype = val.data.intvalue; ! ! (*v).data.flvalue = deleteresource (&fs, type, id, bs, forktype); return (true); *************** *** 1486,1491 **** /* ! file.getversion (path): string; return the version number as ! a string, e.g. "1.0b2". */ --- 1626,1632 ---- /* ! file.getversion (path): string; return the version number as a string, e.g. "1.0b2". ! ! 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile */ *************** *** 1493,1503 **** lNumVersion versionnumber; bigstring bs; flnextparamislast = true; ! if (!getpathvalue (hparam1, 1, &fs)) return (false); ! if (loadresource (&fs, -1, 'vers', 1, nil, sizeof (versionnumber), &versionnumber)) versionnumtostring (versionnumber, bs); else --- 1634,1655 ---- lNumVersion versionnumber; bigstring bs; + short forktype; + short ctconsumed = 1; + short ctpositional = 1; + tyvaluerecord val; + + if (!getpathvalue (hparam1, 1, &fs)) + return (false); flnextparamislast = true; ! setintvalue (1, &val); /* defaults to 1 */ ! ! if (!getoptionalparamvalue (hparam1, &ctconsumed, &ctpositional, "\x04""fork", &val)) return (false); ! forktype = val.data.intvalue; ! ! if (loadresource (&fs, -1, 'vers', 1, nil, sizeof (versionnumber), &versionnumber, forktype)) versionnumtostring (versionnumber, bs); else *************** *** 1530,1535 **** /* ! file.setversion (path): boolean; set the short version string. if a valid ! version number is specified, set the numeric fields as well */ --- 1682,1688 ---- /* ! file.setversion (path): boolean; set the short version string. if a valid version number is specified, set the numeric fields as well ! ! 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile */ *************** *** 1538,1551 **** NumVersion versionnumber; VersRecHndl hvers; if (!getpathvalue (hparam1, 1, &fs)) return (false); flnextparamislast = true; ! if (!getstringvalue (hparam1, 2, bsversion)) return (false); ! if (!loadresourcehandle (&fs, 'vers', 1, nil, (Handle *) &hvers)) if (!newclearhandle (emptyversionsize, (Handle *) &hvers)) return (false); --- 1691,1715 ---- NumVersion versionnumber; VersRecHndl hvers; + short forktype; + short ctconsumed = 2; + short ctpositional = 2; + tyvaluerecord val; if (!getpathvalue (hparam1, 1, &fs)) return (false); + if (!getstringvalue (hparam1, 2, bsversion)) + return (false); + flnextparamislast = true; ! setintvalue (1, &val); /* defaults to 1 */ ! ! if (!getoptionalparamvalue (hparam1, &ctconsumed, &ctpositional, "\x04""fork", &val)) return (false); ! forktype = val.data.intvalue; ! ! if (!loadresourcehandle (&fs, 'vers', 1, nil, (Handle *) &hvers, forktype)) if (!newclearhandle (emptyversionsize, (Handle *) &hvers)) return (false); *************** *** 1555,1559 **** if (mungeversionstring (hvers, bsversion, false)) ! if (saveresourcehandle (&fs, 'vers', 1, nil, (Handle) hvers)) (*v).data.flvalue = true; --- 1719,1723 ---- if (mungeversionstring (hvers, bsversion, false)) ! if (saveresourcehandle (&fs, 'vers', 1, nil, (Handle) hvers, forktype)) (*v).data.flvalue = true; *************** *** 1567,1573 **** /* ! file.getfullversion (path): string; return the long version string ! "1.0b2 © Copyright 1991 UserLand Software.". need definitions above, which don't appear in the Think C headers anywhere */ --- 1731,1738 ---- /* ! file.getfullversion (path): string; return the long version string "1.0b2 © Copyright 1991 UserLand Software.". need definitions above, which don't appear in the Think C headers anywhere + + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile */ *************** *** 1575,1587 **** lVersRecHndl hvers; bigstring bs; flnextparamislast = true; ! if (!getpathvalue (hparam1, 1, &fs)) return (false); setemptystring (bs); ! if (loadresourcehandle (&fs, 'vers', 1, nil, (Handle *) &hvers)) { register byte *p; --- 1740,1763 ---- lVersRecHndl hvers; bigstring bs; + short forktype; + short ctconsumed = 1; + short ctpositional = 1; + tyvaluerecord val; + + if (!getpathvalue (hparam1, 1, &fs)) + return (false); flnextparamislast = true; ! setintvalue (1, &val); /* defaults to 1 */ ! ! if (!getoptionalparamvalue (hparam1, &ctconsumed, &ctpositional, "\x04""fork", &val)) return (false); + forktype = val.data.intvalue; + setemptystring (bs); ! if (loadresourcehandle (&fs, 'vers', 1, nil, (Handle *) &hvers, forktype)) { register byte *p; *************** *** 1604,1607 **** --- 1780,1785 ---- /* file.setversion (path): boolean; set the long version string. + + 2005-09-02 creedon: added support for fork parameter, see resources.c: openresourcefile and pushresourcefile */ *************** *** 1609,1627 **** bigstring bsversion; VersRecHndl hvers; if (!getpathvalue (hparam1, 1, &fs)) return (false); flnextparamislast = true; ! if (!getstringvalue (hparam1, 2, bsversion)) return (false); ! if (!loadresourcehandle (&fs, 'vers', 1, nil, (Handle *) &hvers)) if (!newclearhandle (emptyversionsize, (Handle *) &hvers)) return (false); if (mungeversionstring (hvers, bsversion, true)) ! if (saveresourcehandle (&fs, 'vers', 1, nil, (Handle) hvers)) (*v).data.flvalue = true; --- 1787,1816 ---- bigstring bsversion; VersRecHndl hvers; + short forktype; + short ctconsumed = 2; + short ctpositional = 2; + tyvaluerecord val; if (!getpathvalue (hparam1, 1, &fs)) return (false); + if (!getstringvalue (hparam1, 2, bsversion)) + return (false); + flnextparamislast = true; ! setintvalue (1, &val); /* defaults to 1 */ ! ! if (!getoptionalparamvalue (hparam1, &ctconsumed, &ctpositional, "\x04""fork", &val)) return (false); ! forktype = val.data.intvalue; ! ! if (!loadresourcehandle (&fs, 'vers', 1, nil, (Handle *) &hvers, forktype)) if (!newclearhandle (emptyversionsize, (Handle *) &hvers)) return (false); if (mungeversionstring (hvers, bsversion, true)) ! if (saveresourcehandle (&fs, 'vers', 1, nil, (Handle) hvers, forktype)) (*v).data.flvalue = true; |
|
From: creedon <icr...@us...> - 2005-09-07 17:45:51
|
Update of /cvsroot/frontierkernel/Frontier/FrontierSDK/Toolkits/AppletToolkit/Headers In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2385 Modified Files: appletresource.h Log Message: added support for get/put of resources from/to data fork of file on Mac OS Index: appletresource.h =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/FrontierSDK/Toolkits/AppletToolkit/Headers/appletresource.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** appletresource.h 11 Jan 2005 22:48:21 -0000 1.2 --- appletresource.h 7 Sep 2005 17:45:44 -0000 1.3 *************** *** 26,30 **** boolean getresourcestring (short, bigstring); ! boolean openresourcefile (ptrfilespec, short *); boolean closeresourcefile (short); --- 26,30 ---- boolean getresourcestring (short, bigstring); ! boolean openresourcefile (ptrfilespec, short *, short); /* 2005-09-02 creedon - added short for forktype*/ boolean closeresourcefile (short); |
|
From: creedon <icr...@us...> - 2005-09-07 17:45:47
|
Update of /cvsroot/frontierkernel/Frontier/Common/headers In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2358 Modified Files: resources.h Log Message: added support for get/put of resources from/to data fork of file on Mac OS Index: resources.h =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/headers/resources.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** resources.h 11 Jan 2005 22:48:02 -0000 1.2 --- resources.h 7 Sep 2005 17:45:39 -0000 1.3 *************** *** 39,42 **** --- 39,46 ---- /*prototypes*/ + /* + 2005-09-02 creedon: added support for fork parameter, added short to many of the prototypes, see resources.c: openresourcefile and pushresourcefile + */ + extern boolean getstringlist (short, short, bigstring); *************** *** 45,49 **** extern boolean closeresourcefile (short); ! extern boolean openresourcefile (const tyfilespec *, short *); extern boolean writeresource (ResType, short, bigstring, long, void *); --- 49,53 ---- extern boolean closeresourcefile (short); ! extern boolean openresourcefile (const tyfilespec *, short *, short); extern boolean writeresource (ResType, short, bigstring, long, void *); *************** *** 63,89 **** extern boolean filewriteresource (short, ResType, short, bigstring, long, void *); ! extern boolean saveresource (const tyfilespec *, short, ResType, short, bigstring, long, void *); ! extern boolean saveresourcehandle (const tyfilespec *, ResType, short, bigstring, Handle); ! extern boolean loadresource (const tyfilespec *, short, ResType, short, bigstring, long, void *); ! extern boolean loadresourcehandle (const tyfilespec *, ResType, short, bigstring, Handle *); ! extern boolean deleteresource (const tyfilespec *, ResType, short, bigstring); ! extern boolean getnumresourcetypes (const tyfilespec *, short *); ! extern boolean getnthresourcetype (const tyfilespec *, short, ResType *); ! extern boolean getnumresources (const tyfilespec *, ResType, short *); ! extern boolean getnthresourcehandle (const tyfilespec *, ResType, short, short *, bigstring, Handle *); ! extern boolean getresourceattributes (const tyfilespec *, ResType, short, bigstring, short *); ! extern boolean setresourceattributes (const tyfilespec *, ResType, short, bigstring, short); #endif --- 67,103 ---- extern boolean filewriteresource (short, ResType, short, bigstring, long, void *); ! extern boolean saveresource (const tyfilespec *, short, ResType, short, bigstring, long, void *, short); ! extern boolean saveresourcehandle (const tyfilespec *, ResType, short, bigstring, Handle, short); ! extern boolean loadresource (const tyfilespec *, short, ResType, short, bigstring, long, void *, short); ! extern boolean loadresourcehandle (const tyfilespec *, ResType, short, bigstring, Handle *, short); ! extern boolean deleteresource (const tyfilespec *, ResType, short, bigstring, short); ! extern boolean getnumresourcetypes (const tyfilespec *, short *, short); ! extern boolean getnthresourcetype (const tyfilespec *, short, ResType *, short); ! extern boolean getnumresources (const tyfilespec *, ResType, short *, short); ! extern boolean getnthresourcehandle (const tyfilespec *, ResType, short, short *, bigstring, Handle *, short); ! extern boolean getresourceattributes (const tyfilespec *, ResType, short, bigstring, short *, short); ! extern boolean setresourceattributes (const tyfilespec *, ResType, short, bigstring, short, short); #endif + /*constants*/ + + typedef enum tyforktype { + + resourcefork = 1, + + datafork + + } tyforktype; + |
|
From: creedon <icr...@us...> - 2005-09-07 17:06:06
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/tcp In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26187 Modified Files: httpClient Log Message: cookies weren't working for a path that looks like "/mypath" Index: httpClient =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/tcp/httpClient,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** httpClient 26 Mar 2005 19:43:37 -0000 1.1.1.1 --- httpClient 7 Sep 2005 17:05:55 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.tcp.httpClient ! on httpClient (method="GET", server="", port=nil, path="", proxy=user.webBrowser.proxy.domain, proxyPort=user.webBrowser.proxy.port, proxyUserName=user.webBrowser.proxy.userName, proxyPassword=user.webBrowser.proxy.password, data="", datatype="", username="", password="", adrHdrTable=nil, cookiesOn=false, debug=false, timeOutTicks=60*30, flMessages=true, ctFollowRedirects=0, flJustHeaders=false, flAcceptOpml=false, flUseProxy=nil, adrRedirectInfo=nil) { ÇChanges Ç2/7/03; 3:49:12 PM by JES ÇWhen testing for proxy-exempt servers, don't inclue the port number if specified in the server parameter. Ç10/20/02; 2:32:23 AM by JES ÇRespect user.webBrowser.proxy.exceptions. Ç10/16/02; 6:55:56 PM by JES ÇRemoved debugging code. Ç10/14/02; 11:10:16 AM by JES ÇIf server is 127.0.0.1 or "localhost", set flUseProxy to false. Ç10/13/02; 6:23:28 PM by DW ÇNew optional param -- adrRedirectInfo. If it's non-nil (the default) and we're redirecting, we fill the table with info about the redirect. The RSS aggregator needs this information, and it may prove useful in other places. See xml.rss.readService for an example of its usage. Ç12/19/01; 9:58:10 PM by JES ÇAdded a call to webBrowser.init, which initializes prefs at user.webBrowser.proxy. Added optional parameter, flUseProxy, which defaults to nil. If nil, then the value at user.webBrowser.proxy.enabled is used. Pass the value of flUseProxy when following redirects. Ç8/14/01; 1:49:11 PM by JES ÇWhen recursing to following redirects, pass in the flJustHeaders and flAcceptOpml parameters. Ç8/9/01; 6:10:17 PM by JES ÇIf the stream is unexpectedly closed by the remote host, call tcp.abortStream, to avoid consuming the available connections. Ç8/8/01; 3:21:27 PM by JES ÇIf no Accept header has been passed in, add an Accept header with the value: text/x-opml, */*, so that we get the response in opml instead of html. Ç3/1/01; 1:57:33 PM by PBS ÇTrim white space around the content-length header before coercing it to a number. If a server adds white space here, the coercion would fail, resulting in a connection counter leak. (History: this was discovered in Radio when reading the Red Herring channel.) Ç1/10/01; 10:36:30 AM by DW ÇAdd an optional parameter, flJustHeaders, if true, we don't read the body, we just return the header portion of the response. This is useful if you just want to know how big a download is, and want to defer downloading big things until the middle of the night when it's quiet on the Internet. Ç1/7/01; 9:44:18 PM by DW ÇIn Radio, set User-Agent to Radio UserLand. ÇChanged the header so it doesn't use backslashes. The outliner now supports wrapping headlines. Ç9/22/00; 11:27:50 AM by PBS ÇRespect the user's offline settings. Ç11/5/99; 3:00:39 AM by AR ÇIf the server doesn't send a Content-Length header, read until connection closes. Ç10/21/99; 3:57:29 PM by AR ÇAdapted to use new TCP verbs in 6.1. Ç6/14/99; 5:23:37 AM by AR ÇIf flMessages is true, we now clean up the message area before we return. Ç6/13/99; 9:20:04 AM by AR ÇBoth the read and write loop now yield time to other Frontier threads and to the system. ÇThe Host header is now generated correctly if the request goes thru a proxy server. ÇFixed a few inconsistencies in the cookie handling code. Thinks should now work correctly when connecting via a proxy server. ÇAdded an optional parameter, ctFollowRedirects, determining the number of times that HTTP redirects will be followed. In order to preserve previous behaviour, the default value is 0. Ç3/4/99; 11:54:30 AM by PBS ÇIf adrHdrTable^ contains a "Host" sub-item, don't add a Host header item. Ç3/2/99; 10:43:18 AM by DW Çif adrHdrTable^ contains a "User-Agent" sub-item, don't add a User-Agent header item Ç10/25/98; 6:33:59 AM by DW Çallow the use of a colon in the server name to specify the port Çexample: www.scripting.com:80 Çif present, we use that port, not the one specified in the call Çthe assumption is that most callers either specify 80 or don't specify the port at all Çfor crawlers, for example, they definitely want to use the port specified in the server string Çsome commands, esp in the webBrowser class, get the url from another piece of software Ç9/28/98; 4:42:12 AM by DW Çif we're sending to the same machine, set the stream ID to 0 Çuser.webserver.responders.CGI.methods.any is copying it, hope no CGIs are using it! Ç9/17/98; 7:11:56 AM by DW Çmsgs now say that they're from tcp.httpClient. Çchanged Connection to xxx timed out message to... ÇCan't process the request because the connection to xxx timed out. Çallow server to be "localhost", if so, we totally optimize the functionality Ç2/13/98; 8:57:10 AM by DW ÇInitial code assembled from various sample scripts by Dave Winer. ÇThe goal is to have a single documented way to talk to HTTP servers. ÇIt's got a long parameter list, but requires no configuration, doesn't run off a user.xxx table. ÇThe target user of this script is someone who needs to understand how the code works. ÇIt will be distributed with Frontier on both platforms as soon as we agree that this is complete and works. ÇWhen you call it, use parameter labels, don't depend on the order of these params. ÇFor examples, see tcp.examples. if tcp.isOffline () { //PBS 09/22/00: check offline status scriptError ("Can't send HTTP request because TCP is offline.")}; webBrowser.init (); try { //set flUseProxy if (flUseProxy == nil) and (typeOf (flUseProxy) == unknownType) { flUseProxy = user.webBrowser.proxy.enabled}; if server == "127.0.0.1" or string.lower (server) == "localhost" { //JES 10/14/02: don't call the loopback address through the proxy flUseProxy = false}; if flUseProxy { //check the exceptions table -- if we find a match then set flUseProxy to false on wildcardIpMatch (s, oneip) { local (i); if s == oneip { //optimization return (true)}; for i = 1 to 4 { try { local (part = string.nthField (oneip, ".", i)); local (pattern = string.nthField (s, ".", i)); if pattern == "*" { continue}; if pattern contains "-" { local (min = number (string.nthField (pattern, "-", 1)) ); local (max = number (string.nthField (pattern, "-", 2)) ); local (n = number (part)); if n >= min and n <= max { continue} else { return (false)}}; if pattern != part { return (false)}} else { return (false)}}; return (true)}; local (flIpAddress = false, hostToCheck = string.lower (string.nthField (server, ":", 1)) ); try { //see if flIpAddress should be true local (serverWithoutDots = string.replaceAll (server, ".", "")); double (serverWithoutDots); //will error if non-numeric characters are present flIpAddress = true} else { //check domains, and then try a DNS lookup local (adr); local (lowerserver = string.lower (server)); for adr in @user.webBrowser.proxy.exceptions { if string.wildcardMatch (hostToCheck, string.lower (nameOf (adr^)) ) { if adr^ { flUseProxy = false; break}}}; if flUseProxy { //try a reverse lookup so we can check against IP address try { hostToCheck = tcp.dns.getDottedId (server); flIpAddress = true}}}; if flUseProxy { //check to see if this specific IP is excepted if defined (user.webBrowser.proxy.exceptions.[hostToCheck]) { if user.webBrowser.proxy.exceptions.[hostToCheck] { flUseProxy = false}}}; if flUseProxy { //check for IP-address exceptions which contain wildcard characters and ranges local (i); for i = 1 to sizeOf (user.webBrowser.proxy.exceptions) { if user.webBrowser.proxy.exceptions[i] { local (oneexception = nameOf (user.webBrowser.proxy.exceptions[i])); if wildcardIpMatch (oneexception, hostToCheck) { flUseProxy = false; break}}}}}}; on displayMsg (s) { msg ("tcp.httpClient: " + s)}; local (myAddress = tcp.myDottedID (), flSameMachine = false); bundle { //look for the port specified in the server string if server contains ":" { try {port = number (string.nthField (server, ":", 2))}; //it might not be a number server = string.nthField (server, ":", 1)}; if port == nil { //no port was specified, either in the call or in the server string port = 80}}; bundle { //see if it's the same machine if string.lower (server) == "localhost" { flSameMachine = true} else { try {flSameMachine = tcp.equalNames (server, myAddress)}}; //DW 3/9/98 ÇPBS 9/18/98: check that the server on the requested port is Frontier. if port != user.inetd.config.http.port { flSameMachine = false} //it's the same machine, but it's not Frontier as a server else { if not (inetd.isDaemonRunning (@user.inetd.config.http)) { flSameMachine = false}}}; //Frontier isn't running as a webserver, there must be another server on this machine if not (path beginsWith "/") { path = "/" + path}; local (httpCommand = "", adrCookiesTable = @user.webBrowser.cookies); bundle { //build the HTTP request in "httpCommand" on add (s) { httpCommand = httpCommand + s + "\r\n"}; local (uri = path); if flUseProxy and (sizeOf (proxy) > 0) { //the request is going thru a proxy server: set uri accordingly uri = "http://" + server; if port != 80 { uri = uri + ":" + port}; uri = uri + path}; add (method + " " + uri + " HTTP/1.0"); if (adrHdrTable == nil) or (not defined (adrHdrTable^.["User-Agent"])) { //3/2/99; 10:43:10 AM by DW if system.environment.isPike { add ("User-Agent: Radio UserLand/" + Frontier.version () + " (" + sys.os () + ")")} else { add ("User-Agent: Frontier/" + Frontier.version () + " (" + sys.os () + ")")}}; local (host = "Host: " + server); if port != 80 { host = host + ":" + port}; if (adrHdrTable == nil) or (not defined (adrHdrTable^.["Host"])) { //3/4/99; 11:54:30 AM by PBS add (host)}; if flAcceptOpml { //8/8/01; 3:19:50 PM by JES if (adrHdrTable == nil) { add ("Accept: text/x-opml, */*")} else { //headers were passed in if defined (adrHdrTable^.Accept) { local (acceptHeader = adrHdrTable^.Accept); if not (acceptHeader contains "text/x-opml") { if sizeOf (string.trimWhiteSpace (acceptHeader)) > 0 { acceptHeader = "text/x-opml, " + acceptHeader} else { acceptHeader = "text/x-opml"}}; if not (acceptHeader contains "*/*") { acceptHeader = acceptHeader + ", */*"}; add ("Accept: " + acceptHeader)} else { add ("Accept: text/x-opml, */*")}}}; if sizeOf (data) > 0 { add ("Content-Type: " + datatype); add ("Content-length: " + sizeOf (data))}; if (sizeOf (username) > 0) or (sizeOf (password) > 0) { add ("Authorization: Basic " + base64.encode (username + ":" + password, 0))}; if flUseProxy and (sizeOf (proxy) > 0) { //the request is going thru a proxy server if (sizeOf (proxyUsername) > 0) or (sizeOf (proxyPassword) > 0) { //the proxy requires authentication add ("Proxy-Authorization: Basic " + base64.encode (proxyUsername + ":" + proxyPassword, 0))}}; if adrHdrTable != nil { //added 3.27.98 by ASG to include header items local (i); for i = 1 to sizeOf (adrHdrTable^) { local (headerName = nameOf (adrHdrTable^[i])); if flAcceptOpml { //8/8/01; 3:19:50 PM by JES: Only add the Acept header once if string.lower (headerName) == "accept" { continue}}; add (headerName + ": " + adrHdrTable^[i])}}; if cookiesOn and defined (adrCookiesTable^) { //add cookies to the request header: ASG 4/9/98 local (i, j, k, cookiePath = "/", cookiestring); if path != "/" { cookiePath = string.popSuffix (path, "/")}; for i = 1 to sizeOf (adrCookiesTable^) { //loop through cookies table local (adrdomain = @adrCookiesTable^ [i]); if host endsWith nameOf (adrdomain^) { for j = 1 to sizeOf (adrdomain^) { local (adrcookie = @adrdomain^ [j]); if cookiePath contains nameOf (adrcookie^) { for k = 1 to sizeOf (adrcookie^) { if adrcookie^ [k].expires > clock.now () { //add this cookie cookiestring = cookiestring + nameOf (adrcookie^ [k]) + "=" + adrcookie^ [k].value + "; "} else { delete (@adrcookie^ [k])}}}}}}; //this cookie has expired so delete it if cookiestring != nil { cookiestring = string.delete (cookiestring, sizeof (cookiestring) - 1, 2); //delete trailing "; " add ("Cookie: " + cookiestring)}}; //add the cookies to the header add (""); //blank line if sizeOf (data) > 0 { httpCommand = httpCommand + data}}; if debug { //save a copy of the HTTP request for debugging wp.newTextObject (httpCommand, @scratchpad.httpCommand)}; local (httpResult = ""); if flSameMachine { //shortcut the call, turn our worst case into our best case: 9/17/98; 7:21:13 AM by DW local (params); new (tabletype, @params); params.client = myAddress; params.port = port; params.stream = 0; //9/28/98; 4:42:45 AM by DW params.request = httpCommand; httpResult = webserver.server (@params, httpCommand)} else { local (serverAddress = server, serverPort = port); if flUseProxy and (sizeOf (proxy) > 0) { //the request is going thru a proxy server: switch server and port serverAddress = proxy; serverPort = proxyPort}; if flMessages { //PBS 5/5/98 displayMsg ("Connecting to " + serverAddress + ".")}; local (stream = tcp.openStream (serverAddress, serverPort)); local (chunksize = 5 * 1024); if flMessages { displayMsg ("Sending request to " + serverAddress + ".")}; try { tcp.writeStringToStream (stream, httpCommand, chunkSize, timeOutTicks/60)} //write the command to the server else { tcp.abortStream (stream); scriptError (tryError)}; if flMessages { displayMsg ("Waiting for data from " + serverAddress + ".")}; local (pat = "\r\n\r\n"); try { tcp.readStreamUntil (stream, pat, timeOutTicks/60, @httpResult)} else { tcp.abortStream (stream); scriptError (tryerror)}; local (headerTable); webserver.util.parseHeaders (httpResult, @headerTable); if flJustHeaders { //the caller only wants the headers, not the body 1/10/01 by DW tcp.closeStream (stream)} else { if (string.upper (method) != "HEAD") and defined (headerTable.["Content-Length"]) { //we know there's content left to be read local (lenHeader = string.patternMatch (pat, httpResult) - 1); local (lenContent = number (string.trimWhiteSpace (headerTable.["Content-Length"]))); //PBS 03/01/01: trim white space before coercing local (lenTotal = lenHeader + string.length (pat) + lenContent); if flMessages { displayMsg ("Receiving response body (" + string.kBytes (lenContent) + ") from " + serverAddress + ".")}; try { tcp.readStreamBytes (stream, lenTotal, timeOutTicks/60, @httpResult)} else { tcp.abortStream (stream); scriptError (tryerror)}} else { //just read until connection closes if flMessages { displayMsg ("Receiving response from " + serverAddress + ".")}; try { tcp.readStreamUntilClosed (stream, timeOutTicks/60, @httpResult)} else { tcp.abortStream (stream); scriptError (tryerror)}}; tcp.closeStream (stream); if (httpResult != "") and flMessages { displayMsg ("Finished receiving " + string.kBytes (string.length (httpResult)) + " from " + serverAddress + ".")}}}; if (httpResult != "") and cookiesOn { // find, parse, and store any cookies: ASG 4/9/98 local (ixEndHeader, responseHeader, i, j); ixEndHeader = string.patternMatch ("\r\n\r\n", httpResult); //try to find the end of the response header if ixEndHeader > 0 { //there is a valid header, look for cookies responseHeader = string.mid (httpResult, 1, ixEndHeader - 1); //get the header if string.lower (responseHeader) contains "set-cookie:" { //the response header contains at least one cookie if not defined (adrCookiesTable^) { new (tableType, adrCookiesTable)}; for i = 1 to string.countFields (responseHeader, "\r") { //find all the cookies local (onecookie = string.nthField (responseHeader, "\r", i)); //get the cookie onecookie = string.popLeading (onecookie, '\n'); if string.lower (onecookie) beginsWith "set-cookie:" { local (flsecure = false); //not secure by default local (domain = server); //default domain to this server local (cookiePath = "/"); local (expires = clock.now () + (24 * 60 * 60)); //default expires at "end of session" local (cookieName, cookieValue); if path != "/" { cookiePath = string.popSuffix (path, "/")}; onecookie = string.popLeading (string.mid (onecookie, 12, infinity), ' '); for j = 1 to string.countFields (onecookie, ';') { local (cookiepart = string.nthField (onecookie, ';', j)); cookiepart = string.popLeading (cookiepart, ' '); case string.lower (string.nthField (cookiepart, '=', 1)) { //take care of standard parts "domain" { domain = string.nthField (cookiepart, '=', 2)}; "path" { cookiePath = string.nthField (cookiepart, '=', 2)}; "expires" { on cookieDateToSystemDate (cookieDate) { try { //some cookie dates can be converted to dates directly local (systemDate = date (cookieDate)); if systemDate < date ("Monday, 6-Feb-2040") { return (systemDate)}}; try { //it may be a date in the 21st century local (lastpart = string.nthField (cookieDate, "-", 3)); local (ixstart = string.patternMatch (lastpart, cookieDate)); return (date (string.insert ("20", cookieDate, ixstart)))}; return (false)}; expires = cookieDateToSystemDate (string.nthField (cookiepart, '=', 2)); if expires == false { //invalid cookie, ignore it break}}; "secure" { flsecure = true}} else { //this is the actual cookie name/value cookieName = string.nthField (cookiepart, '=', 1); cookieValue = string.nthField (cookiepart, '=', 2)}}; if clock.now () < expires { //store non-expired cookies only if not defined (adrCookiesTable^.[domain]) { //have we cookies already for this domain? new (tableType, @adrCookiesTable^.[domain])}; if not defined (adrCookiesTable^.[domain].[cookiePath]) { new (tableType, @adrCookiesTable^.[domain].[cookiePath])}; if not defined (adrCookiesTable^.[domain].[cookiePath].[cookieName]) { new (tableType, @adrCookiesTable^.[domain].[cookiePath].[cookieName])}; adrCookiesTable^.[domain].[cookiePath].[cookieName].value = cookieValue; adrCookiesTable^.[domain].[cookiePath].[cookieName].expires = expires; adrCookiesTable^.[domain].[cookiePath].[cookieName].secure = flsecure}}}}}}; if debug { //save a copy of the server's response for debugging wp.newTextObject (httpResult, @scratchpad.httpResult)}; if (ctFollowRedirects > 0) { //check whether we are being redirected: AR 6/13/1999 local (statusCode = string.nthField (httpResult, ' ', 2)); if ({"301", "302", "303"} contains statusCode) { //response codes for Moved Permanently, Moved Temporarily, See Other local (flRedirect = false, redirectServer, redirectPath); local (t); new (tableType, @t); webserver.util.parseHeaders (httpResult, @t); if defined (t.location) { //the response has a Location: header field on isAbsoluteURL (s) { if not (s contains ":") { return (false)}; local (scheme = string.lower (string.nthField (s, ":", 1))); if scheme == "" { return (false)}; local (ix); for ix = 1 to sizeof (scheme) { if not string.isAlpha (scheme[ix]) { return (false)}}; return (true)}; on isAbsolutePath (s) { return (s beginsWith "/")}; case true { isAbsoluteURL (t.location) { if string.lower (t.location) beginsWith "http://" { //it's an absolute HTTP URL local (s = string.delete (t.location, 1, string.length ("http://"))); redirectServer = string.nthField (s, "/", 1); redirectPath = string.delete (s, 1, string.length (redirectServer) + 1); flRedirect = true}}; isAbsolutePath (t.location) { redirectServer = server; redirectPath = t.location; flRedirect = true}} else { //assume it is a relative path redirectServer = server; redirectPath = string.popSuffix (path, "/") + "/" + t.location; flRedirect = true}}; if flRedirect { if flMessages { displayMsg ("Redirected to " + t.Location + ".")}; if statusCode == "303" { //use the GET method to retrieve the specified entity method = "GET"}; //see section 10.3.4 of RFC2068 if adrRedirectInfo != nil { //10/13/02 by DW, accumulate info about the redirect local (adrsubtable = @adrRedirectInfo^.[string.padWithZeros (sizeof (adrRedirectInfo^) + 1, 5)]); new (tableType, adrsubtable); adrsubtable^.code = statusCode; adrsubtable^.server = redirectServer; adrsubtable^.port = port; adrsubtable^.path = redirectPath}; httpResult = tcp.httpClient (method, redirectServer, port, redirectPath, proxy, proxyPort, proxyUserName, proxyPassword, data, datatype, username, password, adrHdrTable, cookiesOn, debug, timeOutTicks, flMessages, --ctFollowRedirects, flJustHeaders, flAcceptOpml, flUseProxy, adrRedirectInfo)}}}; if flMessages { //clean up the message area: AR 6/14/1999 msg ("")}; return (httpResult)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.tcp.httpClient ! on httpClient (method="GET", server="", port=nil, path="", proxy=user.webBrowser.proxy.domain, proxyPort=user.webBrowser.proxy.port, proxyUserName=user.webBrowser.proxy.userName, proxyPassword=user.webBrowser.proxy.password, data="", datatype="", username="", password="", adrHdrTable=nil, cookiesOn=false, debug=false, timeOutTicks=60*30, flMessages=true, ctFollowRedirects=0, flJustHeaders=false, flAcceptOpml=false, flUseProxy=nil, adrRedirectInfo=nil) { ÇChanges Ç5/3/04; 12:14:50 AM by TAC Çcookies weren't working for a path that looks like "/mypath" Ç2/7/03; 3:49:12 PM by JES ÇWhen testing for proxy-exempt servers, don't inclue the port number if specified in the server parameter. Ç2002 Ç10/20/02; 2:32:23 AM by JES ÇRespect user.webBrowser.proxy.exceptions. Ç10/16/02; 6:55:56 PM by JES ÇRemoved debugging code. Ç10/14/02; 11:10:16 AM by JES ÇIf server is 127.0.0.1 or "localhost", set flUseProxy to false. Ç10/13/02; 6:23:28 PM by DW ÇNew optional param -- adrRedirectInfo. If it's non-nil (the default) and we're redirecting, we fill the table with info about the redirect. The RSS aggregator needs this information, and it may prove useful in other places. See xml.rss.readService for an example of its usage. Ç2001 Ç12/19/01; 9:58:10 PM by JES ÇAdded a call to webBrowser.init, which initializes prefs at user.webBrowser.proxy. Added optional parameter, flUseProxy, which defaults to nil. If nil, then the value at user.webBrowser.proxy.enabled is used. Pass the value of flUseProxy when following redirects. Ç8/14/01; 1:49:11 PM by JES ÇWhen recursing to following redirects, pass in the flJustHeaders and flAcceptOpml parameters. Ç8/9/01; 6:10:17 PM by JES ÇIf the stream is unexpectedly closed by the remote host, call tcp.abortStream, to avoid consuming the available connections. Ç8/8/01; 3:21:27 PM by JES ÇIf no Accept header has been passed in, add an Accept header with the value: text/x-opml, */*, so that we get the response in opml instead of html. Ç3/1/01; 1:57:33 PM by PBS ÇTrim white space around the content-length header before coercing it to a number. If a server adds white space here, the coercion would fail, resulting in a connection counter leak. (History: this was discovered in Radio when reading the Red Herring channel.) Ç1/10/01; 10:36:30 AM by DW ÇAdd an optional parameter, flJustHeaders, if true, we don't read the body, we just return the header portion of the response. This is useful if you just want to know how big a download is, and want to defer downloading big things until the middle of the night when it's quiet on the Internet. Ç1/7/01; 9:44:18 PM by DW ÇIn Radio, set User-Agent to Radio UserLand. ÇChanged the header so it doesn't use backslashes. The outliner now supports wrapping headlines. Ç9/22/00; 11:27:50 AM by PBS ÇRespect the user's offline settings. Ç1999 Ç11/5/99; 3:00:39 AM by AR ÇIf the server doesn't send a Content-Length header, read until connection closes. Ç10/21/99; 3:57:29 PM by AR ÇAdapted to use new TCP verbs in 6.1. Ç6/14/99; 5:23:37 AM by AR ÇIf flMessages is true, we now clean up the message area before we return. Ç6/13/99; 9:20:04 AM by AR ÇBoth the read and write loop now yield time to other Frontier threads and to the system. ÇThe Host header is now generated correctly if the request goes thru a proxy server. ÇFixed a few inconsistencies in the cookie handling code. Thinks should now work correctly when connecting via a proxy server. ÇAdded an optional parameter, ctFollowRedirects, determining the number of times that HTTP redirects will be followed. In order to preserve previous behaviour, the default value is 0. Ç3/4/99; 11:54:30 AM by PBS ÇIf adrHdrTable^ contains a "Host" sub-item, don't add a Host header item. Ç3/2/99; 10:43:18 AM by DW Çif adrHdrTable^ contains a "User-Agent" sub-item, don't add a User-Agent header item Ç1998 Ç10/25/98; 6:33:59 AM by DW Çallow the use of a colon in the server name to specify the port Çexample: www.scripting.com:80 Çif present, we use that port, not the one specified in the call Çthe assumption is that most callers either specify 80 or don't specify the port at all Çfor crawlers, for example, they definitely want to use the port specified in the server string Çsome commands, esp in the webBrowser class, get the url from another piece of software Ç9/28/98; 4:42:12 AM by DW Çif we're sending to the same machine, set the stream ID to 0 Çuser.webserver.responders.CGI.methods.any is copying it, hope no CGIs are using it! Ç9/17/98; 7:11:56 AM by DW Çmsgs now say that they're from tcp.httpClient. Çchanged Connection to xxx timed out message to... ÇCan't process the request because the connection to xxx timed out. Çallow server to be "localhost", if so, we totally optimize the functionality Ç2/13/98; 8:57:10 AM by DW ÇInitial code assembled from various sample scripts by Dave Winer. ÇThe goal is to have a single documented way to talk to HTTP servers. ÇIt's got a long parameter list, but requires no configuration, doesn't run off a user.xxx table. ÇThe target user of this script is someone who needs to understand how the code works. ÇIt will be distributed with Frontier on both platforms as soon as we agree that this is complete and works. ÇWhen you call it, use parameter labels, don't depend on the order of these params. ÇFor examples, see tcp.examples. if tcp.isOffline () { //PBS 09/22/00: check offline status scriptError ("Can't send HTTP request because TCP is offline.")}; webBrowser.init (); try { //set flUseProxy if (flUseProxy == nil) and (typeOf (flUseProxy) == unknownType) { flUseProxy = user.webBrowser.proxy.enabled}; if server == "127.0.0.1" or string.lower (server) == "localhost" { //JES 10/14/02: don't call the loopback address through the proxy flUseProxy = false}; if flUseProxy { //check the exceptions table -- if we find a match then set flUseProxy to false on wildcardIpMatch (s, oneip) { local (i); if s == oneip { //optimization return (true)}; for i = 1 to 4 { try { local (part = string.nthField (oneip, ".", i)); local (pattern = string.nthField (s, ".", i)); if pattern == "*" { continue}; if pattern contains "-" { local (min = number (string.nthField (pattern, "-", 1)) ); local (max = number (string.nthField (pattern, "-", 2)) ); local (n = number (part)); if n >= min and n <= max { continue} else { return (false)}}; if pattern != part { return (false)}} else { return (false)}}; return (true)}; local (flIpAddress = false, hostToCheck = string.lower (string.nthField (server, ":", 1)) ); try { //see if flIpAddress should be true local (serverWithoutDots = string.replaceAll (server, ".", "")); double (serverWithoutDots); //will error if non-numeric characters are present flIpAddress = true} else { //check domains, and then try a DNS lookup local (adr); local (lowerserver = string.lower (server)); for adr in @user.webBrowser.proxy.exceptions { if string.wildcardMatch (hostToCheck, string.lower (nameOf (adr^)) ) { if adr^ { flUseProxy = false; break}}}; if flUseProxy { //try a reverse lookup so we can check against IP address try { hostToCheck = tcp.dns.getDottedId (server); flIpAddress = true}}}; if flUseProxy { //check to see if this specific IP is excepted if defined (user.webBrowser.proxy.exceptions.[hostToCheck]) { if user.webBrowser.proxy.exceptions.[hostToCheck] { flUseProxy = false}}}; if flUseProxy { //check for IP-address exceptions which contain wildcard characters and ranges local (i); for i = 1 to sizeOf (user.webBrowser.proxy.exceptions) { if user.webBrowser.proxy.exceptions[i] { local (oneexception = nameOf (user.webBrowser.proxy.exceptions[i])); if wildcardIpMatch (oneexception, hostToCheck) { flUseProxy = false; break}}}}}}; on displayMsg (s) { msg ("tcp.httpClient: " + s)}; local (myAddress = tcp.myDottedID (), flSameMachine = false); bundle { //look for the port specified in the server string if server contains ":" { try {port = number (string.nthField (server, ":", 2))}; //it might not be a number server = string.nthField (server, ":", 1)}; if port == nil { //no port was specified, either in the call or in the server string port = 80}}; bundle { //see if it's the same machine if string.lower (server) == "localhost" { flSameMachine = true} else { try {flSameMachine = tcp.equalNames (server, myAddress)}}; //DW 3/9/98 ÇPBS 9/18/98: check that the server on the requested port is Frontier. if port != user.inetd.config.http.port { flSameMachine = false} //it's the same machine, but it's not Frontier as a server else { if not (inetd.isDaemonRunning (@user.inetd.config.http)) { flSameMachine = false}}}; //Frontier isn't running as a webserver, there must be another server on this machine if not (path beginsWith "/") { path = "/" + path}; local (httpCommand = "", adrCookiesTable = @user.webBrowser.cookies); bundle { //build the HTTP request in "httpCommand" on add (s) { httpCommand = httpCommand + s + "\r\n"}; local (uri = path); if flUseProxy and (sizeOf (proxy) > 0) { //the request is going thru a proxy server: set uri accordingly uri = "http://" + server; if port != 80 { uri = uri + ":" + port}; uri = uri + path}; add (method + " " + uri + " HTTP/1.0"); if (adrHdrTable == nil) or (not defined (adrHdrTable^.["User-Agent"])) { //3/2/99; 10:43:10 AM by DW if system.environment.isPike { add ("User-Agent: Radio UserLand/" + Frontier.version () + " (" + sys.os () + ")")} else { add ("User-Agent: Frontier/" + Frontier.version () + " (" + sys.os () + ")")}}; local (host = "Host: " + server); if port != 80 { host = host + ":" + port}; if (adrHdrTable == nil) or (not defined (adrHdrTable^.["Host"])) { //3/4/99; 11:54:30 AM by PBS add (host)}; if flAcceptOpml { //8/8/01; 3:19:50 PM by JES if (adrHdrTable == nil) { add ("Accept: text/x-opml, */*")} else { //headers were passed in if defined (adrHdrTable^.Accept) { local (acceptHeader = adrHdrTable^.Accept); if not (acceptHeader contains "text/x-opml") { if sizeOf (string.trimWhiteSpace (acceptHeader)) > 0 { acceptHeader = "text/x-opml, " + acceptHeader} else { acceptHeader = "text/x-opml"}}; if not (acceptHeader contains "*/*") { acceptHeader = acceptHeader + ", */*"}; add ("Accept: " + acceptHeader)} else { add ("Accept: text/x-opml, */*")}}}; if sizeOf (data) > 0 { add ("Content-Type: " + datatype); add ("Content-length: " + sizeOf (data))}; if (sizeOf (username) > 0) or (sizeOf (password) > 0) { add ("Authorization: Basic " + base64.encode (username + ":" + password, 0))}; if flUseProxy and (sizeOf (proxy) > 0) { //the request is going thru a proxy server if (sizeOf (proxyUsername) > 0) or (sizeOf (proxyPassword) > 0) { //the proxy requires authentication add ("Proxy-Authorization: Basic " + base64.encode (proxyUsername + ":" + proxyPassword, 0))}}; if adrHdrTable != nil { //added 3.27.98 by ASG to include header items local (i); for i = 1 to sizeOf (adrHdrTable^) { local (headerName = nameOf (adrHdrTable^[i])); if flAcceptOpml { //8/8/01; 3:19:50 PM by JES: Only add the Acept header once if string.lower (headerName) == "accept" { continue}}; add (headerName + ": " + adrHdrTable^[i])}}; if cookiesOn and defined (adrCookiesTable^) { //add cookies to the request header: ASG 4/9/98 local (i, j, k, cookiePath = "/", cookiestring); if path != "/" { cookiePath = string.popSuffix (path, "/"); if cookiePath == "" { // 5/3/04; 12:14:50 AM by TAC - cookies weren't working for a path that looks like "/mypath" cookiePath = "/"}}; for i = 1 to sizeOf (adrCookiesTable^) { //loop through cookies table local (adrdomain = @adrCookiesTable^ [i]); if host endsWith nameOf (adrdomain^) { for j = 1 to sizeOf (adrdomain^) { local (adrcookie = @adrdomain^ [j]); if cookiePath contains nameOf (adrcookie^) { for k = 1 to sizeOf (adrcookie^) { if adrcookie^ [k].expires > clock.now () { //add this cookie cookiestring = cookiestring + nameOf (adrcookie^ [k]) + "=" + adrcookie^ [k].value + "; "} else { delete (@adrcookie^ [k])}}}}}}; //this cookie has expired so delete it if cookiestring != nil { cookiestring = string.delete (cookiestring, sizeof (cookiestring) - 1, 2); //delete trailing "; " add ("Cookie: " + cookiestring)}}; //add the cookies to the header add (""); //blank line if sizeOf (data) > 0 { httpCommand = httpCommand + data}}; if debug { //save a copy of the HTTP request for debugging wp.newTextObject (httpCommand, @scratchpad.httpCommand)}; local (httpResult = ""); if flSameMachine { //shortcut the call, turn our worst case into our best case: 9/17/98; 7:21:13 AM by DW local (params); new (tabletype, @params); params.client = myAddress; params.port = port; params.stream = 0; //9/28/98; 4:42:45 AM by DW params.request = httpCommand; httpResult = webserver.server (@params, httpCommand)} else { local (serverAddress = server, serverPort = port); if flUseProxy and (sizeOf (proxy) > 0) { //the request is going thru a proxy server: switch server and port serverAddress = proxy; serverPort = proxyPort}; if flMessages { //PBS 5/5/98 displayMsg ("Connecting to " + serverAddress + ".")}; local (stream = tcp.openStream (serverAddress, serverPort)); local (chunksize = 5 * 1024); if flMessages { displayMsg ("Sending request to " + serverAddress + ".")}; try { tcp.writeStringToStream (stream, httpCommand, chunkSize, timeOutTicks/60)} //write the command to the server else { tcp.abortStream (stream); scriptError (tryError)}; if flMessages { displayMsg ("Waiting for data from " + serverAddress + ".")}; local (pat = "\r\n\r\n"); try { tcp.readStreamUntil (stream, pat, timeOutTicks/60, @httpResult)} else { tcp.abortStream (stream); scriptError (tryerror)}; local (headerTable); webserver.util.parseHeaders (httpResult, @headerTable); if flJustHeaders { //the caller only wants the headers, not the body 1/10/01 by DW tcp.closeStream (stream)} else { if (string.upper (method) != "HEAD") and defined (headerTable.["Content-Length"]) { //we know there's content left to be read local (lenHeader = string.patternMatch (pat, httpResult) - 1); local (lenContent = number (string.trimWhiteSpace (headerTable.["Content-Length"]))); //PBS 03/01/01: trim white space before coercing local (lenTotal = lenHeader + string.length (pat) + lenContent); if flMessages { displayMsg ("Receiving response body (" + string.kBytes (lenContent) + ") from " + serverAddress + ".")}; try { tcp.readStreamBytes (stream, lenTotal, timeOutTicks/60, @httpResult)} else { tcp.abortStream (stream); scriptError (tryerror)}} else { //just read until connection closes if flMessages { displayMsg ("Receiving response from " + serverAddress + ".")}; try { tcp.readStreamUntilClosed (stream, timeOutTicks/60, @httpResult)} else { tcp.abortStream (stream); scriptError (tryerror)}}; tcp.closeStream (stream); if (httpResult != "") and flMessages { displayMsg ("Finished receiving " + string.kBytes (string.length (httpResult)) + " from " + serverAddress + ".")}}}; if (httpResult != "") and cookiesOn { // find, parse, and store any cookies: ASG 4/9/98 local (ixEndHeader, responseHeader, i, j); ixEndHeader = string.patternMatch ("\r\n\r\n", httpResult); //try to find the end of the response header if ixEndHeader > 0 { //there is a valid header, look for cookies responseHeader = string.mid (httpResult, 1, ixEndHeader - 1); //get the header if string.lower (responseHeader) contains "set-cookie:" { //the response header contains at least one cookie if not defined (adrCookiesTable^) { new (tableType, adrCookiesTable)}; for i = 1 to string.countFields (responseHeader, "\r") { //find all the cookies local (onecookie = string.nthField (responseHeader, "\r", i)); //get the cookie onecookie = string.popLeading (onecookie, '\n'); if string.lower (onecookie) beginsWith "set-cookie:" { local (flsecure = false); //not secure by default local (domain = server); //default domain to this server local (cookiePath = "/"); local (expires = clock.now () + (24 * 60 * 60)); //default expires at "end of session" local (cookieName, cookieValue); if path != "/" { cookiePath = string.popSuffix (path, "/")}; onecookie = string.popLeading (string.mid (onecookie, 12, infinity), ' '); for j = 1 to string.countFields (onecookie, ';') { local (cookiepart = string.nthField (onecookie, ';', j)); cookiepart = string.popLeading (cookiepart, ' '); case string.lower (string.nthField (cookiepart, '=', 1)) { //take care of standard parts "domain" { domain = string.nthField (cookiepart, '=', 2)}; "path" { cookiePath = string.nthField (cookiepart, '=', 2)}; "expires" { on cookieDateToSystemDate (cookieDate) { try { //some cookie dates can be converted to dates directly local (systemDate = date (cookieDate)); if systemDate < date ("Monday, 6-Feb-2040") { return (systemDate)}}; try { //it may be a date in the 21st century local (lastpart = string.nthField (cookieDate, "-", 3)); local (ixstart = string.patternMatch (lastpart, cookieDate)); return (date (string.insert ("20", cookieDate, ixstart)))}; return (false)}; expires = cookieDateToSystemDate (string.nthField (cookiepart, '=', 2)); if expires == false { //invalid cookie, ignore it break}}; "secure" { flsecure = true}} else { //this is the actual cookie name/value cookieName = string.nthField (cookiepart, '=', 1); cookieValue = string.nthField (cookiepart, '=', 2)}}; if clock.now () < expires { //store non-expired cookies only if not defined (adrCookiesTable^.[domain]) { //have we cookies already for this domain? new (tableType, @adrCookiesTable^.[domain])}; if not defined (adrCookiesTable^.[domain].[cookiePath]) { new (tableType, @adrCookiesTable^.[domain].[cookiePath])}; if not defined (adrCookiesTable^.[domain].[cookiePath].[cookieName]) { new (tableType, @adrCookiesTable^.[domain].[cookiePath].[cookieName])}; adrCookiesTable^.[domain].[cookiePath].[cookieName].value = cookieValue; adrCookiesTable^.[domain].[cookiePath].[cookieName].expires = expires; adrCookiesTable^.[domain].[cookiePath].[cookieName].secure = flsecure}}}}}}; if debug { //save a copy of the server's response for debugging wp.newTextObject (httpResult, @scratchpad.httpResult)}; if (ctFollowRedirects > 0) { //check whether we are being redirected: AR 6/13/1999 local (statusCode = string.nthField (httpResult, ' ', 2)); if ({"301", "302", "303"} contains statusCode) { //response codes for Moved Permanently, Moved Temporarily, See Other local (flRedirect = false, redirectServer, redirectPath); local (t); new (tableType, @t); webserver.util.parseHeaders (httpResult, @t); if defined (t.location) { //the response has a Location: header field on isAbsoluteURL (s) { if not (s contains ":") { return (false)}; local (scheme = string.lower (string.nthField (s, ":", 1))); if scheme == "" { return (false)}; local (ix); for ix = 1 to sizeof (scheme) { if not string.isAlpha (scheme[ix]) { return (false)}}; return (true)}; on isAbsolutePath (s) { return (s beginsWith "/")}; case true { isAbsoluteURL (t.location) { if string.lower (t.location) beginsWith "http://" { //it's an absolute HTTP URL local (s = string.delete (t.location, 1, string.length ("http://"))); redirectServer = string.nthField (s, "/", 1); redirectPath = string.delete (s, 1, string.length (redirectServer) + 1); flRedirect = true}}; isAbsolutePath (t.location) { redirectServer = server; redirectPath = t.location; flRedirect = true}} else { //assume it is a relative path redirectServer = server; redirectPath = string.popSuffix (path, "/") + "/" + t.location; flRedirect = true}}; if flRedirect { if flMessages { displayMsg ("Redirected to " + t.Location + ".")}; if statusCode == "303" { //use the GET method to retrieve the specified entity method = "GET"}; //see section 10.3.4 of RFC2068 if adrRedirectInfo != nil { //10/13/02 by DW, accumulate info about the redirect local (adrsubtable = @adrRedirectInfo^.[string.padWithZeros (sizeof (adrRedirectInfo^) + 1, 5)]); new (tableType, adrsubtable); adrsubtable^.code = statusCode; adrsubtable^.server = redirectServer; adrsubtable^.port = port; adrsubtable^.path = redirectPath}; httpResult = tcp.httpClient (method, redirectServer, port, redirectPath, proxy, proxyPort, proxyUserName, proxyPassword, data, datatype, username, password, adrHdrTable, cookiesOn, debug, timeOutTicks, flMessages, --ctFollowRedirects, flJustHeaders, flAcceptOpml, flUseProxy, adrRedirectInfo)}}}; if flMessages { //clean up the message area: AR 6/14/1999 msg ("")}; return (httpResult)} \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-06 19:59:40
|
Update of /cvsroot/frontierkernel/Frontier/Common/resources/Mac In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24604 Modified Files: SHELL.R Log Message: DLOG and DITL 256 sizes generally match threeway Index: SHELL.R =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/resources/Mac/SHELL.R,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** SHELL.R 13 Jan 2005 01:02:31 -0000 1.7 --- SHELL.R 6 Sep 2005 19:59:31 -0000 1.8 *************** *** 1005,1010 **** }; ! resource 'DLOG' (256, "Save?", purgeable) { ! {0, 0, 104, 256}, dBoxProc, invisible, --- 1005,1010 ---- }; ! resource 'DLOG' (256, "Save?", purgeable) { /* 2005-09-06 creedon - sizes generally match threeway */ ! {0, 0, 105, 347}, dBoxProc, invisible, *************** *** 1209,1216 **** }; ! resource 'DITL' (256, "Save?", purgeable) { { /* array DITLarray: 5 elements */ /* [1] */ ! {72, 176, 96, 240}, Button { enabled, --- 1209,1216 ---- }; ! resource 'DITL' (256, "Save?", purgeable) { /* 2005-09-06 creedon - sizes generally match threeway */ { /* array DITLarray: 5 elements */ /* [1] */ ! {72, 246, 92, 331}, Button { enabled, *************** *** 1218,1222 **** }, /* [2] */ ! {72, 16, 96, 80}, Button { enabled, --- 1218,1222 ---- }, /* [2] */ ! {72, 50, 92, 135}, Button { enabled, *************** *** 1224,1228 **** }, /* [3] */ ! {72, 96, 96, 160}, Button { enabled, --- 1224,1228 ---- }, /* [3] */ ! {72, 148, 92, 233}, Button { enabled, *************** *** 1230,1234 **** }, /* [4] */ ! {8, 56, 56, 240}, StaticText { disabled, --- 1230,1234 ---- }, /* [4] */ ! {15, 56, 63, 330}, StaticText { disabled, |
|
From: creedon <icr...@us...> - 2005-09-05 16:38:20
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/xml In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30590 Modified Files: entityDecode Log Message: when flAlphaEntities is true undo what enityEncode did in reverse order, the old code wasn't able to decode simple urls in attribute values Index: entityDecode =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/xml/entityDecode,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** entityDecode 26 Mar 2005 19:44:15 -0000 1.1.1.1 --- entityDecode 5 Sep 2005 16:38:11 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.xml.entityDecode ! on entityDecode (s, flAlphaEntities = false, flSkipMalformedEntities = false, flDecodeHexEntities = false) { ÇChanges -- the flipside of xml.entityEncode Ç8/16/04; 4:07:17 PM by JES ÇNew optional parameter, flDecodeHexEntities. If true, then entities in the form, &x2A; will be decoded to their equivalent character. ÇDefault is false, preserving existing behavior. Ç12/12/01; 2:47:54 AM by JES ÇNew optional parameter, flSkipMalformedEntities. If true, then malformed numerical entities which either contain non-numeric characters or which lack an ending semicolon character don't cause an error. They're passed through as-is. Ç10/22/99; 3:35:56 PM by DW Çdecode &#xxx; to the equivalent ASCII character. Ç11/14/2000; 5:44:31 PM by DW Çxml.entityDecode now takes an optional boolean parameter, default value false, that says whether "alpha" entities are decoded. This is necessary to avoid breakage. The four entities are: < > & " Ç11/29/01; 6:56:06 PM by PBS ÇSkip entities > 255, since they can't be decoded into characters. local (ix, ixremainder, numstring, ixsemi, remainder = s); loop { ixremainder = string.patternMatch ("&#", remainder); if ixremainder == 0 { break}; ix = ixremainder + (sizeof (s) - sizeof (remainder)); numstring = ""; ixsemi = sizeof (s); for i = ix + 2 to sizeof (s) { if s [i] == ';' { ixsemi = i; break}; numstring = numstring + s [i]}; local (num, flMalformed = false); try { num = number (numstring)} else { //hex entity or malformed if flDecodeHexEntities { //JES 8/16/04: decode hex entities if numstring[1] == "x" { try { num = number ("0" + numstring)} else { flMalformed = true}} else { if flAlphaEntities { //decode alpha entities inline with numeric entities to prevent double-decoding case numstring { "amp" { s = string.delete (s, ix, ixsemi - ix + 1); s = string.insert ("&", s, ix)}; "lt" { s = string.delete (s, ix, ixsemi - ix + 1); s = string.insert ("<", s, ix)}; "gt" { s = string.delete (s, ix, ixsemi - ix + 1); s = string.insert (">", s, ix)}; "quot" { s = string.delete (s, ix, ixsemi - ix + 1); s = string.insert ("\"", s, ix)}} else { flMalformed = true}} else { flMalformed = true}}} else { flMalformed = true}}; if flSkipMalformedEntities and flMalformed { remainder = string.mid (s, ix + 1, infinity); continue}; if num < 256 { //PBS //11/29/01: skip large entities s = string.delete (s, ix, ixsemi - ix + 1); s = string.insert (char (num), s, ix)}; remainder = string.mid (s, ix + 1, infinity)}; bundle { //decode alpha entities if flAlphaEntities and (not flDecodeHexEntities) { ÇJES 8/19/04: If flDecodeHexEntities is true, alpha-entities are decoded inline with numeric entities. Prevents double-decoding. s = string.replaceall (s, "<", "<"); s = string.replaceall (s, ">", ">"); s = string.replaceall (s, "&", "&"); s = string.replaceall (s, """, "\"")}}; return (s)}; Çbundle //test code Çxml.entityDecode ("Oh the <buzzing> of the bees & the "sycamore" trees.", true) Çxml.entityDecode ("A’PB") Çxml.entityDecode (xml.entityEncode ("Olejováø skvrna na \"Labi\"zøejmì do <Nìmecka> & nedoplujeøíjna 1999 13:49"), true) Çxml.entityDecode ("{Hello}", flSkipMalformedEntities:true) Ç"{Hello}" Çxml.entityDecode ("{Hello}", flSkipMalformedEntities:false) //should be an error \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.xml.entityDecode ! on entityDecode (s, flAlphaEntities = false, flSkipMalformedEntities = false, flDecodeHexEntities = false) { ÇChanges Ç8/1/05; 11:56:58 PM by TAC Çwhen flAlphaEntities is true undo what enityEncode did in reverse order, the old code wasn't able to decode simple urls in attribute values Çold code order Çs = string.replaceAll (s, "<", "<") Çs = string.replaceAll (s, ">", ">") Çs = string.replaceAll (s, "&", "&") Çs = string.replaceAll (s, """, "\"") Çnew code order Çs = string.replaceAll (s, """, "\"") Çs = string.replaceAll (s, "&", "&") Çs = string.replaceAll (s, ">", ">") Çs = string.replaceAll (s, "<", "<") Ç8/16/04; 4:07:17 PM by JES ÇNew optional parameter, flDecodeHexEntities. If true, then entities in the form, &x2A; will be decoded to their equivalent character. ÇDefault is false, preserving existing behavior. Ç12/12/01; 2:47:54 AM by JES ÇNew optional parameter, flSkipMalformedEntities. If true, then malformed numerical entities which either contain non-numeric characters or which lack an ending semicolon character don't cause an error. They're passed through as-is. Ç10/22/99; 3:35:56 PM by DW Çdecode &#xxx; to the equivalent ASCII character. Ç11/14/2000; 5:44:31 PM by DW Çxml.entityDecode now takes an optional boolean parameter, default value false, that says whether "alpha" entities are decoded. This is necessary to avoid breakage. The four entities are: < > & " Ç11/29/01; 6:56:06 PM by PBS ÇSkip entities > 255, since they can't be decoded into characters. Çthe flipside of xml.entityEncode local (ix, ixremainder, numstring, ixsemi, remainder = s); loop { ixremainder = string.patternMatch ("&#", remainder); if ixremainder == 0 { break}; ix = ixremainder + (sizeof (s) - sizeof (remainder)); numstring = ""; ixsemi = sizeof (s); for i = ix + 2 to sizeof (s) { if s [i] == ';' { ixsemi = i; break}; numstring = numstring + s [i]}; local (num, flMalformed = false); try { num = number (numstring)} else { //hex entity or malformed if flDecodeHexEntities { //JES 8/16/04: decode hex entities if numstring[1] == "x" { try { num = number ("0" + numstring)} else { flMalformed = true}} else { if flAlphaEntities { //decode alpha entities inline with numeric entities to prevent double-decoding case numstring { "amp" { s = string.delete (s, ix, ixsemi - ix + 1); s = string.insert ("&", s, ix)}; "lt" { s = string.delete (s, ix, ixsemi - ix + 1); s = string.insert ("<", s, ix)}; "gt" { s = string.delete (s, ix, ixsemi - ix + 1); s = string.insert (">", s, ix)}; "quot" { s = string.delete (s, ix, ixsemi - ix + 1); s = string.insert ("\"", s, ix)}} else { flMalformed = true}} else { flMalformed = true}}} else { flMalformed = true}}; if flSkipMalformedEntities and flMalformed { remainder = string.mid (s, ix + 1, infinity); continue}; if num < 256 { //PBS //11/29/01: skip large entities s = string.delete (s, ix, ixsemi - ix + 1); s = string.insert (char (num), s, ix)}; remainder = string.mid (s, ix + 1, infinity)}; bundle { //decode alpha entities if flAlphaEntities and (not flDecodeHexEntities) { ÇJES 8/19/04: If flDecodeHexEntities is true, alpha-entities are decoded inline with numeric entities. Prevents double-decoding. s = string.replaceAll (s, """, "\""); s = string.replaceAll (s, "&", "&"); s = string.replaceAll (s, ">", ">"); s = string.replaceAll (s, "<", "<")}}; return (s)}; Çbundle //test code Çxml.entityDecode ("Oh the <buzzing> of the bees & the "sycamore" trees.", true) Çxml.entityDecode (xml.entityEncode ("Olejováø skvrna na \"Labi\"zøejmì do <Nìmecka> & nedoplujeøíjna 1999 13:49"), true) Çxml.entityDecode ("{Hello}", flSkipMalformedEntities:true) Ç"{Hello}" Çxml.entityDecode ("{Hello}", flSkipMalformedEntities:false) //should be an error \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-05 16:28:27
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/startup In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28279 Modified Files: startupScript Log Message: added user.prefs.flCompactModalMenus Index: startupScript =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/startup/startupScript,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** startupScript 15 Jul 2005 01:28:09 -0000 1.7 --- startupScript 5 Sep 2005 16:28:17 -0000 1.8 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.startup.startupScript ! ÇThis script runs when Frontier opens the Frontier.root file. ÇChanges Ç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.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, disabled until mR can be rewritten from the perspective of the open source release 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 Ç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 |
|
From: creedon <icr...@us...> - 2005-09-05 16:27:37
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/menus In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28120 Modified Files: menubar Log Message: now two styles of modal menus, compact and full Index: menubar =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/menus/menubar,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** menubar 14 Jun 2005 04:51:57 -0000 1.2 --- menubar 5 Sep 2005 16:27:27 -0000 1.3 *************** *** 1,3 **** FrontierVcsFile:1:mbar:system.menus.menubar ! AAEFAQAACo4AAQAAAAAAAAAAAAAAKwADA/0E/QAAAAAAAAZHZW5ldmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgArAAMD/QT9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAP2AAAFsAAAAgAADwZHZW5ldmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAApJOSS77TrsAAAKFMAAAAsQC2AS4ByUxBTkT///////8AAAAAAABtYWMgAAAAAAAAAAAAAAAARGF0YWJhc2UNCUZpbmQgYW5kIFJlcGxhY2UNCQlGaW5kLi4uDQkJUmVwbGFjZS4uLg0JCUZpbmQgTmV4dA0JCVJlcGxhY2UgJiBGaW5kIE5leHQNCUp1bXAuLi4NCVNlYXJjaC4uLg0JLQ0JPXN5c3RlbS5tZW51cy5zY3JpcHRzLnVwZGF0ZU1lbnVJdGVtICgpDQktDQlBZGQgdG8gdXNlci5kYXRhYmFzZXMuLi4NCS0NCT0iQmFja3VwICIgKyBmaWxlLmZpbGVGcm9tUGF0aCAoRnJvbnRpZXIuZ2V0RmlsZXBhdGggKCkpICsgIi4uLiINCUV4cG9ydC4uLg0JQmF0Y2ggRXhwb3J0DQkJT3BlbiBMaXN0DQkJT3BlbiBUYWJsZQ0JCS0NCQlFeHBvcnQgZnJvbSBMaXN0Li4uDQkJSW1wb3J0IGZyb20gRm9sZGVyLi4uDQkJLQ0JCU5pZ2h0bHkgRXhwb3J0Li4uDQktDQlBcHBsZVNjcmlwdHMNCQlMb2FkIEFwcGxlU2NyaXB0Li4uDQkJTG9hZCBhIEZvbGRlci4uLg0JCUxvYWQgYW4gT1NBWC4uLg0JLQ0JRWRpdCB3aXRoIEFwcA1PcGVyYXRpb25zDQlRdWljayBTY3JpcHQNCS0NCVdlYg0JCVdlYiBTZXJ2ZXINCQkJPXN5c3RlbS5tZW51cy5zY3JpcHRzLnNlcnZlck1lbnVJdGVtICgpDQkJCVNldCBQb3J0Li4uDQkJLQ0JCVByZXZpZXcgUGFnZQ0JCS0NCQlQdWJsaXNoIFBhZ2UNCQlQdWJsaXNoIFRhYmxlLi4uDQkJLQ0JCU5ldyBXZWJzaXRlLi4uDQkJSW1wb3J0IFdlYnNpdGUuLi4NCQktDQkJTmV3IFBhZ2UuLi4NCQktDQkJTG9hZCBJbWFnZSBGaWxlLi4uDQkJQnVpbGQgR2xvc3NhcnkuLi4NCQlCdWlsZCBOZXh0UHJldiBMaXN0Li4uDQkJQ29weSBVUkwNCQlWaWV3IFBhZ2UgaW4gRmluZGVyDQkJLQ0JCUNoYW5nZWQgUGFnZXMNCQkJUHVibGlzaCBBbGwuLi4NCQkJQWRkIFNlbGVjdGVkIENlbGwuLi4NCQkJT3BlbiBMaXN0DQkJCUNsZWFyIExpc3QuLi4NCQkJLQ0JCQk9c3lzdGVtLm1lbnVzLnNjcmlwdHMuYWRkVG9DaGFuZ2VkUGFnZXNNZW51SXRlbSAoKQ0JLQ0JVGV4dA0JCUluc2VydCBEYXRlL1RpbWUNCQlDb21tb24gU3R5bGVzDQkJCT1tZW51cy5zY3JpcHRzLnN0eWxlTWVudUl0ZW0gKCJ0aW55IikNCQkJPW1lbnVzLnNjcmlwdHMuc3R5bGVNZW51SXRlbSAoIm1lZGl1bSIpDQkJCT1tZW51cy5zY3JpcHRzLnN0eWxlTWVudUl0ZW0gKCJyZWFkYWJsZSIpDQkJCT1tZW51cy5zY3JpcHRzLnN0eWxlTWVudUl0ZW0gKCJodWdlIikNCS0NCVRvb2xzDQlTdWl0ZXMNCVNjaGVkdWxlcg0JCUFkZCBhbiBFdmVyeSBNaW51dGUgVGFzay4uLg0JCUFkZCBhbiBIb3VybHkgVGFzay4uLg0JCUFkZCBhbiBPdmVybmlnaHQgVGFzay4uLg0JCS0NCQk9aWYgdXNlci5zY2hlZHVsZXIucHJlZnMucnVuVGhyZWFkcyB7IlN0b3AgVGhyZWFkcyJ9IGVsc2V7IlN0YXJ0IFRocmVhZHMifQ0JCS0NCQlPcGVuIHVzZXIuc2NoZWR1bGVyIFRhYmxlDQk9c3lzdGVtLm1lbnVzLnNjcmlwdHMuYWdlbnRzTWVudUl0ZW0gKCkNCVVubG9jayBTZW1hcGhvcmVzLi4uDQktDQlSdW4gU2VsZWN0aW9uDYAAAAAAAAAAAAAAAAAAAAAACkYAAAAAAAYLKKAAAAAAAAoAAAAAAAAGCyikAAAAAAAKRwAAAAAABgsoqAAAAAAACkgAAAAAAAYLKLQAAAAAAApKAAAAAAAGCyjAAAAAAAAKAAAAAAAA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//////8AAAAAAABtYWMgAAAAAAAAAAAAAAAAbG9jYWwgKGFkclRhYmxlID0gQHVzZXIuaW5ldGQuY29uZmlnLmh0dHApDWlmIGluZXRkLmlzRGFlbW9uUnVubmluZyAoYWRyVGFibGUpDQlpbmV0ZC5zdG9wT25lIChhZHJUYWJsZSkNCWFkclRhYmxlXi5zdGFydHVwID0gZmFsc2UNCXRyeQ0JCWluZXRkLnN0b3BPbmUgKEB1c2VyLmluZXRkLmNvbmZpZy5odHRwMikNCQl1c2VyLmluZXRkLmNvbmZpZy5odHRwMi5zdGFydHVwID0gZmFsc2UNZWxzZQ0JYWRyVGFibGVeLnN0YXJ0dXAgPSB0cnVlDQlpbmV0ZC5zdGFydE9uZSAoYWRyVGFibGUpDQl0cnkNCQl1c2VyLmluZXRkLmNvbmZpZy5odHRwMi5zdGFydHVwID0gdHJ1ZQ0JCWluZXRkLnN0YXJ0T25lIChAdXNlci5pbmV0ZC5jb25maWcuaHR0cDIpDYAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAAACAAAAPAAAAWkAAAIAAA8FQXJpYWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAABlQAALF4EMuxhTyrAAAAOwAAASYBPwHuAsBMQU5E////////AAAAAAAAbWFjIAAAAAAAAAAAAAAAAGxvY2FsIChvbGRwb3J0ID0gdXNlci5pbmV0ZC5jb25maWcuaHR0cC5wb3J0KQ1sb2NhbCAocG9ydCA9IG9sZHBvcnQpDWxvY2FsIChpc1J1bm5pbmcgPSBpbmV0ZC5pc0RhZW1vblJ1bm5pbmcgKEB1c2VyLmluZXRkLmNvbmZpZy5odHRwKSkNaWYgZGlhbG9nLmdldEludCAoIlBvcnQgZm9yIGh0dHAgc2VydmVyOiIsIEBwb3J0KQ0JaWYgcG9ydCAhPSBvbGRwb3J0DQkJaWYgaXNSdW5uaW5nDQkJCWluZXRkLnN0b3BPbmUgKEB1c2VyLmluZXRkLmNvbmZpZy5odHRwKQ0JCXVzZXIuaW5ldGQuY29uZmlnLmh0dHAucG9ydCA9IHBvcnQNCQlp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 \ No newline at end of file --- 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 |
|
From: creedon <icr...@us...> - 2005-09-05 16:21:51
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/fatPages In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26945 Modified Files: 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.2 diff -C2 -d -r1.1.1.1 -r1.2 *** getFileData 26 Mar 2005 19:42:45 -0000 1.1.1.1 --- getFileData 5 Sep 2005 16:21:43 -0000 1.2 *************** *** 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-05 16:20:51
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/menus In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26696 Modified Files: buildMenuBar Log Message: can now run a script to install a menu Index: buildMenuBar =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/menus/buildMenuBar,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** buildMenuBar 14 Jun 2005 02:58:02 -0000 1.2 --- buildMenuBar 5 Sep 2005 16:20:44 -0000 1.3 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.menus.buildMenuBar ! ÇChanges Ç12/4/04; 11:59:40 PM by TAC Çcommented out bookmarkmenu in case statement Çdisabled modal menu install, let agent handle it on add (adrmenu) { try { menu.install (adrmenu)}}; menu.clearMenuBar (); bundle { //install menus if defined (user.menus.menubar) { add (@user.menus.menubar)} else { add (@system.menus.menubar)}; Çhtml.menu.install () // 11/27/04; 12:07:59 PM by TAC Çadd (@user.menus.bookmarkMenu) // 11/27/04; 12:08:05 PM by TAC add (@user.menus.customMenu); local (i); for i = 1 to sizeOf (user.menus) { //PBS 8/13/98: add additional user menus local (adrMenu = @user.menus [i]); if typeOf (adrMenu^) == addressType { //menus can be address if not defined (adrMenu^^) { continue}; adrMenu = adrMenu^}; if typeOf (adrMenu^) == menuBarType { case string.lower (nameOf (user.menus [i])) { Ç"bookmarkmenu" "custommenu"; "menubar" { continue}}; add (adrMenu)}}; add (@system.menus.helpMenu)}; Çbundle //add the modal menu, based on the type of the frontmost window Çlocal (winType = window.getType (window.frontmost ())) Çtry Çmenu.install (@system.menus.modals.[winType]) Çelse ÇwinType = 0 Çsystem.menus.data.currentMenuType = winType //see system.menus.agent menu.buildMenuBar () //force update \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.menus.buildMenuBar ! ÇChanges Ç9/5/05; 8:46:08 AM by TAC Çcan now run a script to install a menu Ç12/4/04; 11:59:40 PM by TAC Çcommented out bookmarkmenu in case statement Çdisabled modal menu install, let agent handle it on add (adrmenu) { try { menu.install (adrmenu)}}; menu.clearMenuBar (); bundle { //install menus if defined (user.menus.menubar) { add (@user.menus.menubar)} else { add (@system.menus.menubar)}; Çhtml.menu.install () // 11/27/04; 12:07:59 PM by TAC Çadd (@user.menus.bookmarkMenu) // 11/27/04; 12:08:05 PM by TAC add (@user.menus.customMenu); local (i); for i = 1 to sizeOf (user.menus) { //PBS 8/13/98: add additional user menus local (adrMenu = @user.menus [i]); if typeOf (adrMenu^) == addressType { //menus can be address if not defined (adrMenu^^) { continue}; adrMenu = adrMenu^}; if typeOf (adrMenu^) == menuBarType { case string.lower (nameOf (user.menus [i])) { Ç"bookmarkmenu" "custommenu"; "menubar" { continue}}; add (adrMenu)}; if typeOf (adrMenu^) == scriptType { // 9/5/05; 8:46:08 AM by TAC adrMenu^ ()}}; add (@system.menus.helpMenu)}; Çbundle //add the modal menu, based on the type of the frontmost window Çlocal (winType = window.getType (window.frontmost ())) Çtry Çmenu.install (@system.menus.modals.[winType]) Çelse ÇwinType = 0 Çsystem.menus.data.currentMenuType = winType //see system.menus.agent menu.buildMenuBar () //force update \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-05 16:19:53
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/file In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26429 Modified Files: getSpecialFolderPath Log Message: on Mac OS X for trash case, folder is .Trash Index: getSpecialFolderPath =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/verbs/builtins/file/getSpecialFolderPath,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** getSpecialFolderPath 7 Aug 2005 23:18:33 -0000 1.2 --- getSpecialFolderPath 5 Sep 2005 16:19:45 -0000 1.3 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.verbs.builtins.file.getSpecialFolderPath ! on getSpecialFolderPath (vol, specialfolder, create) { ÇChanges Ç8/3/05; 3:20:59 PM by TAC Çadded Documents folder case for Mac OS Carbon, suggest by Sean Elfstrom from a doc server discussion group message Ç8/26/01; 11:30:11 PM by JES ÇAdded support for special folders used for MacOS X. Ç5.0.1 dmb: added "temporary item" support for Windows Çmaps to the Temp directory on kernelcall (vol, specialfolder, create) { kernel (file.getSpecialFolderPath)}; case sys.os () { "MacOS" { if system.environment.isCarbon { if vol == "" { vol = file.getSystemDisk ()}; local (pc = file.getPathChar ()); local (folder); on getUserFolder () { local (username = string.nthField (sys.unixShellCommand ("who am i"), ' ', 1)); return (vol + "Users" + pc + username + pc)}; case string.lower (specialfolder) { "apple menu items" { scriptError ("Can't get the path to the Apple Menu Items folder because Mac OS X does not have an Apple Menu Items folder.")}; "applications" { folder = vol + "Applications" + pc}; "desktop folder" { folder = getUserFolder () + "Desktop" + pc}; "documents" { folder = getUserFolder () + "Documents" + pc}; "extensions" { folder = vol + "System" + pc + "Extensions" + pc}; "favorites" { folder = getUserFolder () + "Library" + pc + "Favorites" + pc}; "fontcollections" { folder = getUserFolder () + "Library" + pc + "FontCollections" + pc}; "fonts" { folder = getUserFolder () + "Library" + pc + "Fonts" + pc}; "preferences" { folder = getUserFolder () + "Library" + pc + "Preferences" + pc}; "startup items"; "startupitems" { scriptError ("Can't get the path to the Startup Items folder because Mac OS X does not have a Startup Items folder.")}; "system"; "system folder" { folder = vol + "System" + pc}; "temp"; "temporary items" { folder = vol + "Temporary Items" + pc}; "trash" { folder = vol + "Trash" + pc}}; if create { file.sureFilePath (folder); file.sureFolder (folder)}; return (filespec (folder))} else { //Classic kernelcall (vol, specialfolder, create)}}; "Win95"; "WinNT" { ÇMonday, December 8, 1997 at 3:59:21 PM by DW Ç"Desktop" -- Windows desktop - virtual folder at the root of the name space. Ç"DesktopDirectory" -- File system directory used to physically store file Çobjects on the desktop (not to be confused with the desktop folder itself). Ç"Fonts" -- Virtual folder containing fonts. Ç"NetHood" -- File system directory containing objects that appear in the network neighborhood. Ç"Personal" -- File system directory that serves as a common respository for documents Ç"Programs" -- File system directory that contains the user's program groups (which are also file system directories). Ç"Recent" -- File system directory that contains the user's most recently used documents. Ç"SendTo" -- File system directory that contains Send To menu items. Ç"StartMenu" -- File system directory containing Start menu items. Ç"StartUp" -- File system directory that corresponds to the user's Startup program group. Ç"Templates" -- File system directory that serves as a common repository for document templates. Ç"Windows" -- The Windows directory is the directory where an application Çshould store initialization and help files. If the user is running a shared Çversion of Windows, the Windows directory is guaranteed to be private for Çeach user. Ç"System" -- Retrieves the path of the Windows system directory. ÇThe system directory contains such files as Windows libraries, drivers, and font files case string.lower (specialfolder) { "preferences" { return (file.getPrefsSubFolder (specialfolder))}; "temp" { local (tempfolder); if vol == "" { vol = file.getSystemDisk ()}; vol = vol [1] + ":\\"; tempfolder = vol + "Temp\\"; if create and not file.exists (tempfolder) { try {file.sureFolder (tempfolder)}}; return (tempfolder)}} else { try { return (kernelcall (vol, specialfolder, create))} else { local (errormessage); if string.lower (string.firstword (specialfolder)) == "temporary" { local (folder); if vol == "" { vol = file.getSystemDisk ()}; folder = vol + "\\Temp\\"; if create { file.sureFolder (folder)}; return (true)}; errormessage = "Couldn't get the folder path because \"" + specialfolder; errormessage = errormessage + "\" is not a special folder name."; return (scriptError (errormessage))}}}}}; Çbundle //testing Çfile.getSpecialFolderPath ("", "documents", true) \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.verbs.builtins.file.getSpecialFolderPath ! on getSpecialFolderPath (vol, specialfolder, create) { ÇChanges Ç8/25/05; 6:13:22 PM by TAC Çon Mac OS X for trash case, folder is .Trash Ç8/3/05; 3:20:59 PM by TAC Çadded Documents folder case for Mac OS Carbon, suggest by Sean Elfstrom from a doc server discussion group message Ç8/26/01; 11:30:11 PM by JES ÇAdded support for special folders used for MacOS X. Ç5.0.1 dmb: added "temporary item" support for Windows Çmaps to the Temp directory on kernelcall (vol, specialfolder, create) { kernel (file.getSpecialFolderPath)}; case sys.os () { "MacOS" { if system.environment.isCarbon { if vol == "" { vol = file.getSystemDisk ()}; local (pc = file.getPathChar ()); local (folder); on getUserFolder () { local (username = string.nthField (sys.unixShellCommand ("who am i"), ' ', 1)); return (vol + "Users" + pc + username + pc)}; case string.lower (specialfolder) { "apple menu items" { scriptError ("Can't get the path to the Apple Menu Items folder because Mac OS X does not have an Apple Menu Items folder.")}; "applications" { folder = vol + "Applications" + pc}; "desktop folder" { folder = getUserFolder () + "Desktop" + pc}; "documents" { folder = getUserFolder () + "Documents" + pc}; "extensions" { folder = vol + "System" + pc + "Extensions" + pc}; "favorites" { folder = getUserFolder () + "Library" + pc + "Favorites" + pc}; "fontcollections" { folder = getUserFolder () + "Library" + pc + "FontCollections" + pc}; "fonts" { folder = getUserFolder () + "Library" + pc + "Fonts" + pc}; "preferences" { folder = getUserFolder () + "Library" + pc + "Preferences" + pc}; "startup items"; "startupitems" { scriptError ("Can't get the path to the Startup Items folder because Mac OS X does not have a Startup Items folder.")}; "system"; "system folder" { folder = vol + "System" + pc}; "temp"; "temporary items" { folder = vol + "Temporary Items" + pc}; "trash" { folder = getUserFolder () + ".Trash" + pc}}; if create { file.sureFilePath (folder); file.sureFolder (folder)}; return (filespec (folder))} else { //Classic kernelcall (vol, specialfolder, create)}}; "Win95"; "WinNT" { ÇMonday, December 8, 1997 at 3:59:21 PM by DW Ç"Desktop" -- Windows desktop - virtual folder at the root of the name space. Ç"DesktopDirectory" -- File system directory used to physically store file Çobjects on the desktop (not to be confused with the desktop folder itself). Ç"Fonts" -- Virtual folder containing fonts. Ç"NetHood" -- File system directory containing objects that appear in the network neighborhood. Ç"Personal" -- File system directory that serves as a common respository for documents Ç"Programs" -- File system directory that contains the user's program groups (which are also file system directories). Ç"Recent" -- File system directory that contains the user's most recently used documents. Ç"SendTo" -- File system directory that contains Send To menu items. Ç"StartMenu" -- File system directory containing Start menu items. Ç"StartUp" -- File system directory that corresponds to the user's Startup program group. Ç"Templates" -- File system directory that serves as a common repository for document templates. Ç"Windows" -- The Windows directory is the directory where an application Çshould store initialization and help files. If the user is running a shared Çversion of Windows, the Windows directory is guaranteed to be private for Çeach user. Ç"System" -- Retrieves the path of the Windows system directory. ÇThe system directory contains such files as Windows libraries, drivers, and font files case string.lower (specialfolder) { "preferences" { return (file.getPrefsSubFolder (specialfolder))}; "temp" { local (tempfolder); if vol == "" { vol = file.getSystemDisk ()}; vol = vol [1] + ":\\"; tempfolder = vol + "Temp\\"; if create and not file.exists (tempfolder) { try {file.sureFolder (tempfolder)}}; return (tempfolder)}} else { try { return (kernelcall (vol, specialfolder, create))} else { local (errormessage); if string.lower (string.firstword (specialfolder)) == "temporary" { local (folder); if vol == "" { vol = file.getSystemDisk ()}; folder = vol + "\\Temp\\"; if create { file.sureFolder (folder)}; return (true)}; errormessage = "Couldn't get the folder path because \"" + specialfolder; errormessage = errormessage + "\" is not a special folder name."; return (scriptError (errormessage))}}}}}; Çbundle //testing Çfile.getSpecialFolderPath ("", "documents", true) \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-05 16:17:55
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/system/menus In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25917 Modified Files: agent buildModalMenu Log Message: now two styles of modal menus, compact and full Index: buildModalMenu =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/menus/buildModalMenu,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** buildModalMenu 14 Jun 2005 02:50:57 -0000 1.1 --- buildModalMenu 5 Sep 2005 16:17:47 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.menus.buildModalMenu ! ÇChanges Ç11/18/04; 7:00:21 PM by TAC - created, used for building more compact modal menus on buildModalMenu (windowType) { local { flCreate = false; menuType}; case windowType { menubarType { menuType = outlineType}} else { menuType = windowType}; if defined (system.temp.Frontier.menus.[windowType]) { local { t1 = timeModified (@system.menus.modals.[menuType]); t2 = timeModified (this); t3 = timeModified (@system.temp.Frontier.menus.[windowType])}; if t1 > t3 or t2 > t3 { flCreate = true}} else { flCreate = true}; if flCreate { local { adrMenu}; on addHtmlMenu (adr) { html.menu.init (); menu.addSubMenu (adr, "", @system.verbs.builtins.html.menu.theMenu)}; if not (defined (system.temp.Frontier.menus)) { new (tableType, @system.temp.Frontier.menus)}; adrMenu = @system.temp.Frontier.menus.[windowType]; adrMenu^ = system.menus.modals.[menuType]; Çif menuType == menubarType ÇadrMenu^ = system.menus.modals.[outlineType] Çelse case windowType { menubarType { menu.deleteMenuCommand (adrMenu, "Outline", "HTML"); menu.deleteMenuCommand (adrMenu, "Outline", "-")}; outlineType; wptextType { addHtmlMenu (adrMenu)}; scriptType; tableType { local { m = system.menus.modals.[outlineType]}; menu.deleteMenuCommand (@m, "Outline", "HTML"); menu.deleteMenuCommand (@m, "Outline", "-"); addHtmlMenu (adrMenu); menu.addSubMenu (adrMenu, "", @m)}}}; return (@system.temp.Frontier.menus.[windowType])} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.menus.buildModalMenu ! ÇChanges Ç8/23/05; 7:25:36 PM by TAC Çnow two styles of modal menus, compact and full Ç11/18/04; 7:00:21 PM by TAC Ç - created on buildModalMenu (windowType) { local { flCreate = false; menuType}; case windowType { menubarType { menuType = outlineType}} else { menuType = windowType}; if defined (system.temp.Frontier.menus.[windowType]) { local { t1; t2 = timeModified (this); t3 = timeModified (@system.temp.Frontier.menus.[windowType])}; if windowType == 'html' { t1 = timeModified (@system.verbs.builtins.html.menu.theMenu)} else { t1 = timeModified (@system.menus.modals.[menuType])}; if t1 > t3 or t2 > t3 { flCreate = true}} else { flCreate = true}; if flCreate { local { adrMenu}; on addHtmlMenu (adr) { menu.addSubMenu (adr, "", @system.verbs.builtins.html.menu.theMenu)}; if not (defined (system.temp.Frontier.menus)) { new (tableType, @system.temp.Frontier.menus)}; adrMenu = @system.temp.Frontier.menus.[windowType]; if windowType == 'html' { adrMenu^ = system.verbs.builtins.html.menu.theMenu} else { adrMenu^ = system.menus.modals.[menuType]}; case windowType { menubarType { menu.deleteMenuCommand (adrMenu, "Outline", "HTML"); menu.deleteMenuCommand (adrMenu, "Outline", "-")}; outlineType { if user.prefs.flCompactModalMenus { addHtmlMenu (adrMenu)} else { menu.deleteMenuCommand (adrMenu, "Outline", "HTML"); menu.deleteMenuCommand (adrMenu, "Outline", "-")}}; wptextType { if user.prefs.flCompactModalMenus { addHtmlMenu (adrMenu)} else { menu.deleteMenuCommand (adrMenu, "WP", "HTML"); menu.deleteMenuCommand (adrMenu, "WP", "-")}}; scriptType { if user.prefs.flCompactModalMenus { local { m = system.menus.modals.[outlineType]}; menu.deleteMenuCommand (@m, "Outline", "HTML"); menu.deleteMenuCommand (@m, "Outline", "-"); addHtmlMenu (adrMenu); menu.addSubMenu (adrMenu, "", @m)} else { menu.deleteMenuCommand (adrMenu, "Script", "Outline"); menu.deleteMenuCommand (adrMenu, "Script", "HTML"); menu.deleteMenuCommand (adrMenu, "Script", "-")}}; tableType { if user.prefs.flCompactModalMenus { local { m = system.menus.modals.[outlineType]}; menu.deleteMenuCommand (@m, "Outline", "HTML"); menu.deleteMenuCommand (@m, "Outline", "-"); addHtmlMenu (adrMenu); menu.addSubMenu (adrMenu, "", @m)} else { menu.deleteMenuCommand (adrMenu, "Table", "Outline"); menu.deleteMenuCommand (adrMenu, "Table", "HTML"); menu.deleteMenuCommand (adrMenu, "Table", "-")}}}}; return (@system.temp.Frontier.menus.[windowType])} \ No newline at end of file Index: agent =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/system/menus/agent,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** agent 14 Jun 2005 02:59:58 -0000 1.2 --- agent 5 Sep 2005 16:17:47 -0000 1.3 *************** *** 1,3 **** FrontierVcsFile:1:scpt:system.menus.agent ! ÇChanges Ç6/12/05; 11:47:46 PM by TAC Ça test of some funky modal menus Ç12/2/01; 7:32:31 PM by JES ÇIf user.radio.settings.flExpired is defined and true, do nothing. Ç1/28/01; 10:43:51 AM by DW ÇWe found a performance bottleneck in Radio. When it's enabling and disabling commands in the File menu, it's calling window.frontmost (apparently) six times per second. This is a fairly slow verb (it can be optimized). So we cache the value in system.temp.windowFrontmost. This is then used by pike.isFileMenuItemEnabled. ÇAlso noted that it's called a few times on every keystroke. Ç10/11/00; 10:25:30 PM by PBS ÇIf Radio UserLand, add or remove Outliner and HTML menus. ÇSome time in 1991 DW ÇAdd or remove menus depending on frontmost window if defined (user.radio.settings.flExpired) { if user.radio.settings.flExpired { return (true)}}; system.temp.windowFrontmost = window.frontmost (); //cache it local (adr = system.temp.windowFrontmost); local (typefront = window.getType (adr)); if typefront == system.menus.data.currentMenuType { Çno change, nothing to do return (true)}; bundle { //handle Outliner and HTML menus if system.environment.isPike { menu.remove (@system.menus.menubar); //Outliner menu.remove (@html.menu.theMenu); case typefront { outlineType { menu.install (@system.menus.menubar); //Outliner menu menu.install (@html.menu.theMenu)}; scriptType; tableType; menubarType { menu.install (@system.menus.menubar)}}}}; //Outliner menu Çbundle // 6/12/05; 11:48:27 PM by TAC - old code Çlocal (adrold = @system.menus.modals.[system.menus.data.currentMenuType]) Çif defined (adrold^) Çmenu.remove (adrold) Ç Çlocal (adrnew = @system.menus.modals.[typefront]) Çif defined (adrnew^) Çmenu.install (adrnew) bundle { // 6/12/05; 11:48:43 PM by TAC - handle modal menus bundle { // remove case system.menus.data.currentMenuType { menubarType { try { menu.remove (@system.temp.Frontier.menus.mbar)}}; outlineType { try { menu.remove (@system.temp.Frontier.menus.optx)}}; scriptType { try { menu.remove (@system.temp.Frontier.menus.scpt)}}; tableType { try { menu.remove (@system.temp.Frontier.menus.tabl)}}; wptextType { try { menu.remove (@system.temp.Frontier.menus.wptx)}}}}; bundle { // add case typeFront { menubarType; outlineType; scriptType; tableType; wpTextType { menu.install (system.menus.buildModalMenu (typeFront))}}}}; system.menus.data.currentMenuType = typeFront; return (true) \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:system.menus.agent ! ÇChanges Ç8/23/05; 7:25:36 PM by TAC Çnow two styles of modal menus, compact and full Ç6/12/05; 11:47:46 PM by TAC Çimplement compact modal menus Ç12/2/01; 7:32:31 PM by JES ÇIf user.radio.settings.flExpired is defined and true, do nothing. Ç1/28/01; 10:43:51 AM by DW ÇWe found a performance bottleneck in Radio. When it's enabling and disabling commands in the File menu, it's calling window.frontmost (apparently) six times per second. This is a fairly slow verb (it can be optimized). So we cache the value in system.temp.windowFrontmost. This is then used by pike.isFileMenuItemEnabled. ÇAlso noted that it's called a few times on every keystroke. Ç10/11/00; 10:25:30 PM by PBS ÇIf Radio UserLand, add or remove Outliner and HTML menus. ÇSome time in 1991 DW ÇAdd or remove menus depending on frontmost window if defined (user.radio.settings.flExpired) { if user.radio.settings.flExpired { return (true)}}; system.temp.windowFrontmost = window.frontmost (); //cache it local (adr = system.temp.windowFrontmost); local (typefront = window.getType (adr)); if typefront == system.menus.data.currentMenuType { Çno change, nothing to do return (true)}; bundle { //handle Outliner and HTML menus if system.environment.isPike { menu.remove (@system.menus.menubar); //Outliner menu.remove (@html.menu.theMenu); case typefront { outlineType { menu.install (@system.menus.menubar); //Outliner menu menu.install (@html.menu.theMenu)}; scriptType; tableType; menubarType { menu.install (@system.menus.menubar)}}}}; //Outliner menu Çbundle // 6/12/05; 11:48:27 PM by TAC - old code Çlocal (adrold = @system.menus.modals.[system.menus.data.currentMenuType]) Çif defined (adrold^) Çmenu.remove (adrold) Ç Çlocal (adrnew = @system.menus.modals.[typefront]) Çif defined (adrnew^) Çmenu.install (adrnew) bundle { // 6/12/05; 11:48:43 PM by TAC - handle modal menus bundle { // remove try { menu.remove (@system.temp.Frontier.menus.[system.menus.data.currentMenuType])}; case system.menus.data.currentMenuType { ÇmenubarType outlineType { if not (user.prefs.flCompactModalMenus) { try { menu.remove (@system.temp.Frontier.menus.html)}}}; scriptType { if not (user.prefs.flCompactModalMenus) { try { menu.remove (@system.temp.Frontier.menus.optx)}; try { menu.remove (@system.temp.Frontier.menus.html)}}}; tableType { if not (user.prefs.flCompactModalMenus) { try { menu.remove (@system.temp.Frontier.menus.optx)}; try { menu.remove (@system.temp.Frontier.menus.html)}}}; wptextType { if not (user.prefs.flCompactModalMenus) { try { menu.remove (@system.temp.Frontier.menus.html)}}}}}; Çbundle // remove Çcase system.menus.data.currentMenuType ÇmenubarType Çtry Çmenu.remove (@system.temp.Frontier.menus.mbar) ÇoutlineType Çtry Çmenu.remove (@system.temp.Frontier.menus.optx) ÇscriptType Çif user.prefs.flCompactModalMenus Çtry Çmenu.remove (@system.temp.Frontier.menus.scpt) Çelse Çtry Çmenu.remove (@system.temp.Frontier.menus.scpt) Çtry Çmenu.remove (@system.temp.Frontier.menus.optx) Çtry Çmenu.remove (@system.temp.Frontier.menus.html) ÇtableType Çif user.prefs.flCompactModalMenus Çtry Çmenu.remove (@system.temp.Frontier.menus.tabl) Çelse Çtry Çmenu.remove (@system.temp.Frontier.menus.tabl) Çtry Çmenu.remove (@system.temp.Frontier.menus.optx) Çtry Çmenu.remove (@system.temp.Frontier.menus.html) ÇwptextType Çif user.prefs.flCompactModalMenus Çtry Çmenu.remove (@system.temp.Frontier.menus.wptx) Çelse bundle { // add if not (defined (system.temp.Frontier.menus)) { new (tableType, @system.temp.Frontier.menus)}; case typeFront { menubarType { menu.install (system.menus.buildModalMenu (typeFront))}; outlineType { menu.install (system.menus.buildModalMenu (typeFront)); if not (user.prefs.flCompactModalMenus) { menu.install (system.menus.buildModalMenu ('html'))}}; scriptType { menu.install (system.menus.buildModalMenu (typeFront)); if not (user.prefs.flCompactModalMenus) { menu.install (system.menus.buildModalMenu (outlineType)); menu.install (system.menus.buildModalMenu ('html'))}}; tableType { menu.install (system.menus.buildModalMenu (typeFront)); if not (user.prefs.flCompactModalMenus) { menu.install (system.menus.buildModalMenu (outlineType)); menu.install (system.menus.buildModalMenu ('html'))}}; wpTextType { menu.install (system.menus.buildModalMenu (typeFront)); if not (user.prefs.flCompactModalMenus) { menu.install (system.menus.buildModalMenu ('html'))}}}}}; system.menus.data.currentMenuType = typeFront; return (true) \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-05 16:02:35
|
Update of /cvsroot/frontierkernel/odbs/mainResponderRoot/mainResponder/discuss In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19156 Modified Files: deleteMessage Log Message: added inResponseToOld Index: deleteMessage =================================================================== RCS file: /cvsroot/frontierkernel/odbs/mainResponderRoot/mainResponder/discuss/deleteMessage,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** deleteMessage 26 Mar 2005 21:45:33 -0000 1.1.1.1 --- deleteMessage 5 Sep 2005 16:02:27 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:mainResponder.discuss.deleteMessage ! on deleteMessage (msgNum, adrRoot=nil) { ÇDelete a message in a discussion group. Just mark its storage deleted, leave it in the tree. ÇChanges: Ç06/01/00; 5:31:30 PM by PBS ÇadrRoot is a new optional parameter. It's the address of the discussion group to use. Pass this parameter when calling this script from outside a website framework rendering context -- otherwise this script will delete a message in the wrong discussion group. local (adrMsgTable = mainResponder.discuss.getMessageTable (msgNum, adrRoot:adrRoot)); adrMsgTable^.flDeleted = true; adrMsgTable^.inResponseTo = -2; return (adrMsgTable)} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:mainResponder.discuss.deleteMessage ! on deleteMessage (msgNum, adrRoot=nil) { ÇDelete a message in a discussion group. Just mark its storage deleted, leave it in the tree. ÇChanges Ç8/2/05; 8:39:55 PM by TAC Çadded inResponseToOld Ç06/01/00; 5:31:30 PM by PBS ÇadrRoot is a new optional parameter. It's the address of the discussion group to use. Pass this parameter when calling this script from outside a website framework rendering context -- otherwise this script will delete a message in the wrong discussion group. local (adrMsgTable = mainResponder.discuss.getMessageTable (msgNum, adrRoot: adrRoot)); adrMsgTable^.flDeleted = true; adrMsgTable^.inResponseToOld = adrMsgTable^.inResponseTo; adrMsgTable^.inResponseTo = -2; return (adrMsgTable)} \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-05 15:57:49
|
Update of /cvsroot/frontierkernel/odbs/prefsRoot/prefsSuite In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17467 Modified Files: displayPicture Log Message: removed return at end of script after scriptError return changed adrString to the more commonly used partialAddress Index: displayPicture =================================================================== RCS file: /cvsroot/frontierkernel/odbs/prefsRoot/prefsSuite/displayPicture,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** displayPicture 28 Jul 2005 06:53:22 -0000 1.1 --- displayPicture 5 Sep 2005 15:57:42 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:prefsSuite.displayPicture ! on displayPicture (adrString = nil, adrMemberInfo = nil, pta = nil) { ÇChanges Ç7/27/05; 8:14:55 PM by TAC Çcreated if pta == nil { pta = html.getPageTableAddress ()}; if adrMemberInfo == nil { try { adrMemberInfo = pta^.adrMemberInfo}}; if adrString == nil { adrString = pta^.pathArgs}; on error () { // this block needs to be updated, intregrate text into mainResponder language table local (replacementTable); new (tableType, @replacementTable); replacementTable.picAddress = pta^.pathArgs; local (languageTable); new (tableType, @languageTable); new (tableType, @languageTable.strings); new (tableType, @languageTable.strings.prefs); languageTable.strings.prefs.pictureDoesntExistError = "Can't display picture at [[picAddress]] because it doesn't exist."; scriptError (mainResponder.getString ("prefs.pictureDoesntExistError", @replacementTable, @languageTable, pta))}; adrString = "[\"" + string.replaceAll (adrString, ".", "\"].[\"") + "\"]"; local (adrImageTable); try { adrImageTable = address (adrMemberInfo + adrString)} else { error ()}; if not (defined (adrImageTable^)) { error ()}; if not (defined (adrImageTable^.height) or defined (adrImageTable^.width)) { // ideally we wouldn't need this, it should be taken care of when the picture is uploaded. folks may have uploaded some pictures already so this is defensive local (hwList); case string.lower (adrImageTable^.["Content-Type"]) { // is it a GIF or a JPEG? "image/gif" { hwList = html.getGifHeightWidth (@adrImageTable^.data)}; "image/jpeg"; "image/pjpeg" { hwList = html.getJpegHeightWidth (@adrImageTable^.data)}}; if hwList != nil { adrImageTable^.height = hwList [1]; adrImageTable^.width = hwList [2]}}; pta^.responseHeaders.["Content-Type"] = adrImageTable^.["Content-Type"]; pta^.responseBody= adrImageTable^.data; scriptError ("!return"); // return now, don't do any more processing return ("")} \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:prefsSuite.displayPicture ! on displayPicture (partialAddress = nil, adrMemberInfo = nil, pta = nil) { ÇChanges Ç7/30/05; 9:36:44 AM by TAC Çremoved return at end of script after scriptError return Çchanged adrString to the more commonly used partialAddress, it's early on so this change shouldn't cause too much trouble Ç7/27/05; 8:14:55 PM by TAC Çcreated if pta == nil { pta = html.getPageTableAddress ()}; if adrMemberInfo == nil { try { adrMemberInfo = pta^.adrMemberInfo}}; if partialAddress == nil { partialAddress = pta^.pathArgs}; on error () { // this block needs to be updated, intregrate text into mainResponder language table local (replacementTable); new (tableType, @replacementTable); replacementTable.picAddress = pta^.pathArgs; local (languageTable); new (tableType, @languageTable); new (tableType, @languageTable.strings); new (tableType, @languageTable.strings.prefs); languageTable.strings.prefs.pictureDoesntExistError = "Can't display picture at [[picAddress]] because it doesn't exist."; scriptError (mainResponder.getString ("prefs.pictureDoesntExistError", @replacementTable, @languageTable, pta))}; partialAddress = "[\"" + string.replaceAll (partialAddress, ".", "\"].[\"") + "\"]"; local (adrImageTable); try { adrImageTable = address (adrMemberInfo + partialAddress)} else { error ()}; if not (defined (adrImageTable^)) { error ()}; if not (defined (adrImageTable^.height) or defined (adrImageTable^.width)) { // ideally we wouldn't need this, it should be taken care of when the picture is uploaded. folks may have uploaded some pictures already so this is defensive local (hwList); case string.lower (adrImageTable^.["Content-Type"]) { // is it a GIF or a JPEG? "image/gif" { hwList = html.getGifHeightWidth (@adrImageTable^.data)}; "image/jpeg"; "image/pjpeg" { hwList = html.getJpegHeightWidth (@adrImageTable^.data)}}; if hwList != nil { adrImageTable^.height = hwList [1]; adrImageTable^.width = hwList [2]}}; pta^.responseHeaders.["Content-Type"] = adrImageTable^.["Content-Type"]; pta^.responseBody= adrImageTable^.data; scriptError ("!return")} // return now, don't do any more processing \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-09-05 15:56:06
|
Update of /cvsroot/frontierkernel/odbs/prefsRoot/prefsSuite/signupWizard In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17007 Modified Files: outline Log Message: for some of the popup menus, added a none option which is default Index: outline =================================================================== RCS file: /cvsroot/frontierkernel/odbs/prefsRoot/prefsSuite/signupWizard/outline,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** outline 2 Apr 2005 23:09:52 -0000 1.1.1.1 --- outline 5 Sep 2005 15:55:54 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:optx:prefsSuite.signupWizard.outline ! <wizard> <panel title="Member Signup Form" private="true"> <description/> <item title="Required info" type="separator"/> <item title="Email address" type="string" adr="personalInfo.email" required="true"/> <item title="Name" type="string" adr="personalInfo.name" required="true"/> <item title="Password" type="password" adr="scratchpassword1" required="true"/> <item title="Repeat" type="password" adr="scratchpassword2" required="true"/> <item title="Hint question" type="popup" adr="personalInfo.hintQuestion" required="true"> <option title="City of Birth?" value="birthCity"/> <option title="Mother's maiden name?" value="motherMaidenName"/> <option title="Pet's name?" value="petName"/> </item> <item title="Hint answer" type="string" adr="personalInfo.hintAnswer" required="true"/> <item title="Personal info (Optional)" type="separator"/> <item title="ZIP/Postal Code" type="string" adr="personalInfo.zipCode" size="12" maxLength="30"/> <item title="Country" type="popup" adr="personalInfo.country"> <option value="US" title="United States"/> <option value="CA" title="Canada"/> <option value="AF" title="Afghanistan"/> <option value="AL" title="Albania"/> <option value="DZ" title="Algeria"/> <option value="AS" title="American Samoa"/> <option value="AD" title="Andorra"/> <option value="AO" title="Angola"/> <option value="AI" title="Anguilla"/> <option value="AQ" title="Antarctica"/> <option value="AG" title="Antigua and Barbuda"/> <option value="AR" title="Argentina"/> <option value="AM" title="Armenia"/> <option value="AW" title="Aruba"/> <option value="AU" title="Australia"/> <option value="AT" title="Austria"/> <option value="AZ" title="Azerbaijan"/> <option value="BS" title="Bahamas"/> <option value="BH" title="Bahrain"/> <option value="BD" title="Bangladesh"/> <option value="BB" title="Barbados"/> <option value="BY" title="Belarus"/> <option value="BE" title="Belgium"/> <option value="BZ" title="Belize"/> <option value="BJ" title="Benin"/> <option value="BM" title="Bermuda"/> <option value="BT" title="Bhutan"/> <option value="BO" title="Bolivia"/> <option value="BA" title="Bosnia and Herzegovina"/> <option value="BW" title="Botswana"/> <option value="BV" title="Bouvet Island"/> <option value="BR" title="Brazil"/> <option value="IO" title="British Indian Ocean Territory"/> <option value="BN" title="Brunei Darussalam"/> <option value="BG" title="Bulgaria"/> <option value="BF" title="Burkina Faso"/> <option value="BI" title="Burundi"/> <option value="KH" title="Cambodia"/> <option value="CM" title="Cameroon"/> <option value="CV" title="Cape Verde"/> <option value="KY" title="Cayman Islands"/> <option value="CF" title="Central African Republic"/> <option value="TD" title="Chad"/> <option value="CL" title="Chile"/> <option value="CN" title="China"/> <option value="CX" title="Christmas Island"/> <option value="CC" title="Cocos (Keeling) Islands"/> <option value="CO" title="Colombia"/> <option value="KM" title="Comoros"/> <option value="CG" title="Congo"/> <option value="CK" title="Cook Islands"/> <option value="CR" title="Costa Rica"/> <option value="HR" title="Croatia (Hrvatska)"/> <option value="CU" title="Cuba"/> <option value="CY" title="Cyprus"/> <option value="CZ" title="Czech Republic"/> <option value="CS" title="Czechoslovakia (former)"/> <option value="DK" title="Denmark"/> <option value="DJ" title="Djibouti"/> <option value="DM" title="Dominica"/> <option value="DO" title="Dominican Republic"/> <option value="TP" title="East Timor"/> <option value="EC" title="Ecuador"/> <option value="EG" title="Egypt"/> <option value="SV" title="El Salvador"/> <option value="GQ" title="Equatorial Guinea"/> <option value="ER" title="Eritrea"/> <option value="EE" title="Estonia"/> <option value="ET" title="Ethiopia"/> <option value="FK" title="Falkland Islands (Malvinas)"/> <option value="FO" title="Faroe Islands"/> <option value="FJ" title="Fiji"/> <option value="FI" title="Finland"/> <option value="FR" title="France"/> <option value="FX" title="France, Metropolitan"/> <option value="GF" title="French Guiana"/> <option value="PF" title="French Polynesia"/> <option value="TF" title="French Southern Territories"/> <option value="GA" title="Gabon"/> <option value="GM" title="Gambia"/> <option value="GE" title="Georgia"/> <option value="DE" title="Germany"/> <option value="GH" title="Ghana"/> <option value="GI" title="Gibraltar"/> <option value="GB" title="Great Britain (UK)"/> <option value="GR" title="Greece"/> <option value="GL" title="Greenland"/> <option value="GD" title="Grenada"/> <option value="GP" title="Guadeloupe"/> <option value="GU" title="Guam"/> <option value="GT" title="Guatemala"/> <option value="GN" title="Guinea"/> <option value="GW" title="Guinea-Bissau"/> <option value="GY" title="Guyana"/> <option value="HT" title="Haiti"/> <option value="HM" title="Heard and McDonald Islands"/> <option value="HN" title="Honduras"/> <option value="HK" title="Hong Kong"/> <option value="HU" title="Hungary"/> <option value="IS" title="Iceland"/> <option value="IN" title="India"/> <option value="ID" title="Indonesia"/> <option value="IR" title="Iran"/> <option value="IQ" title="Iraq"/> <option value="IE" title="Ireland"/> <option value="IL" title="Israel"/> <option value="IT" title="Italy"/> <option value="JM" title="Jamaica"/> <option value="JP" title="Japan"/> <option value="JO" title="Jordan"/> <option value="KZ" title="Kazakhstan"/> <option value="KE" title="Kenya"/> <option value="KI" title="Kiribati"/> <option value="KP" title="Korea (North)"/> <option value="KR" title="Korea (South)"/> <option value="KW" title="Kuwait"/> <option value="KG" title="Kyrgyzstan"/> <option value="LA" title="Laos"/> <option value="LV" title="Latvia"/> <option value="LB" title="Lebanon"/> <option value="LS" title="Lesotho"/> <option value="LR" title="Liberia"/> <option value="LY" title="Libya"/> <option value="LI" title="Liechtenstein"/> <option value="LT" title="Lithuania"/> <option value="MO" title="Macau"/> <option value="MK" title="Macedonia"/> <option value="MG" title="Madagascar"/> <option value="MW" title="Malawi"/> <option value="MY" title="Malaysia"/> <option value="MV" title="Maldives"/> <option value="ML" title="Mali"/> <option value="MT" title="Malta"/> <option value="MH" title="Marshall Islands"/> <option value="MQ" title="Martinique"/> <option value="MR" title="Mauritania"/> <option value="MU" title="Mauritius"/> <option value="YT" title="Mayotte"/> <option value="MX" title="Mexico"/> <option value="FM" title="Micronesia"/> <option value="MD" title="Moldova"/> <option value="MC" title="Monaco"/> <option value="MN" title="Mongolia"/> <option value="MS" title="Montserrat"/> <option value="MA" title="Morocco"/> <option value="MZ" title="Mozambique"/> <option value="MM" title="Myanmar"/> <option value="NA" title="Namibia"/> <option value="NR" title="Nauru"/> <option value="NP" title="Nepal"/> <option value="NL" title="Netherlands"/> <option value="AN" title="Netherlands Antilles"/> <option value="NT" title="Neutral Zone"/> <option value="NC" title="New Caledonia"/> <option value="NZ" title="New Zealand (Aotearoa)"/> <option value="NI" title="Nicaragua"/> <option value="NE" title="Niger"/> <option value="NG" title="Nigeria"/> <option value="NU" title="Niue"/> <option value="NF" title="Norfolk Island"/> <option value="MP" title="Northern Mariana Islands"/> <option value="NO" title="Norway"/> <option value="OM" title="Oman"/> <option value="PK" title="Pakistan"/> <option value="PW" title="Palau"/> <option value="PA" title="Panama"/> <option value="PG" title="Papua New Guinea"/> <option value="PY" title="Paraguay"/> <option value="PE" title="Peru"/> <option value="PH" title="Philippines"/> <option value="PN" title="Pitcairn"/> <option value="PL" title="Poland"/> <option value="PT" title="Portugal"/> <option value="PR" title="Puerto Rico"/> <option value="QA" title="Qatar"/> <option value="RE" title="Reunion"/> <option value="RO" title="Romania"/> <option value="RU" title="Russian Federation"/> <option value="RW" title="Rwanda"/> <option value="GS" title="S. Georgia and S. Sandwich Isls."/> <option value="KN" title="Saint Kitts and Nevis"/> <option value="LC" title="Saint Lucia"/> <option value="VC" title="Saint Vincent and the Grenadines"/> <option value="WS" title="Samoa"/> <option value="SM" title="San Marino"/> <option value="ST" title="Sao Tome and Principe"/> <option value="SA" title="Saudi Arabia"/> <option value="SN" title="Senegal"/> <option value="SC" title="Seychelles"/> <option value="SL" title="Sierra Leone"/> <option value="SG" title="Singapore"/> <option value="SK" title="Slovak Republic"/> <option value="SI" title="Slovenia"/> <option value="Sb" title="Solomon Islands"/> <option value="SO" title="Somalia"/> <option value="ZA" title="South Africa"/> <option value="ES" title="Spain"/> <option value="LK" title="Sri Lanka"/> <option value="SH" title="St. Helena"/> <option value="PM" title="St. Pierre and Miquelon"/> <option value="SD" title="Sudan"/> <option value="SR" title="Suriname"/> <option value="SJ" title="Svalbard and Jan Mayen Islands"/> <option value="SZ" title="Swaziland"/> <option value="SE" title="Sweden"/> <option value="CH" title="Switzerland"/> <option value="SY" title="Syria"/> <option value="TW" title="Taiwan"/> <option value="TJ" title="Tajikistan"/> <option value="TZ" title="Tanzania"/> <option value="TH" title="Thailand"/> <option value="TG" title="Togo"/> <option value="TK" title="Tokelau"/> <option value="TO" title="Tonga"/> <option value="TT" title="Trinidad and Tobago"/> <option value="TN" title="Tunisia"/> <option value="TR" title="Turkey"/> <option value="TM" title="Turkmenistan"/> <option value="TC" title="Turks and Caicos Islands"/> <option value="TV" title="Tuvalu"/> <option value="UM" title="US Minor Outlying Islands"/> <option value="SU" title="USSR (former)"/> <option value="UG" title="Uganda"/> <option value="UA" title="Ukraine"/> <option value="AE" title="United Arab Emirates"/> <option value="UK" title="United Kingdom"/> <option value="UY" title="Uruguay"/> <option value="UZ" title="Uzbekistan"/> <option value="VU" title="Vanuatu"/> <option value="VA" title="Vatican City State (Holy See)"/> <option value="VE" title="Venezuela"/> <option value="VN" title="Viet Nam"/> <option value="VG" title="Virgin Islands (British)"/> <option value="VI" title="Virgin Islands (U.S.)"/> <option value="WF" title="Wallis and Futuna Islands"/> <option value="EH" title="Western Sahara"/> <option value="YE" title="Yemen"/> <option value="YU" title="Yugoslavia"/> <option value="ZR" title="Zaire"/> <option value="ZM" title="Zambia"/> <option value="ZW" title="Zimbabwe"/> </item> <item title="State (US only)" type="popup" adr="personalInfo.stateInitials"> <option title="Alabama" value="AL"/> <option title="Alaska" value="AK"/> <option title="Arizona" value="AZ"/> <option title="Arkansas" value="AR"/> <option value="CA" title="California"/> <option value="CO" title="Colorado"/> <option value="CT" title="Connecticut"/> <option value="DE" title="Delaware"/> <option value="FL" title="Florida"/> <option value="GA" title="Georgia"/> <option value="HI" title="Hawaii"/> <option value="ID" title="Idaho"/> <option value="IL" title="Illinois"/> <option value="IN" title="Indiana"/> <option value="IA" title="Iowa"/> <option value="KS" title="Kansas"/> <option value="KY" title="Kentucky"/> <option value="LA" title="Louisiana"/> <option value="ME" title="Maine"/> <option value="MD" title="Maryland"/> <option value="MA" title="Massachusetts"/> <option value="MI" title="Michigan"/> <option value="MN" title="Minnesota"/> <option value="MS" title="Mississippi"/> <option value="MO" title="Missouri"/> <option value="MT" title="Montana"/> <option value="NE" title="Nebraska"/> <option value="NV" title="Nevada"/> <option value="NH" title="New Hampshire"/> <option value="NJ" title="New Jersey"/> <option value="NM" title="New Mexico"/> <option value="NY" title="New York"/> <option value="NC" title="North Carolina"/> <option value="ND" title="North Dakota"/> <option value="OH" title="Ohio"/> <option value="OK" title="Oklahoma"/> <option value="OR" title="Oregon"/> <option value="PA" title="Pennsylvania"/> <option value="RI" title="Rhode Island"/> <option value="SC" title="South Carolina"/> <option value="SD" title="South Dakota"/> <option value="TN" title="Tennessee"/> <option value="TX" title="Texas"/> <option value="UT" title="Utah"/> <option value="VT" title="Vermont"/> <option value="VA" title="Virginia"/> <option value="WA" title="Washington"/> <option value="WV" title="West Virginia"/> <option value="WI" title="Wisconsin"/> <option value="WY" title="Wyoming"/> </item> <item title="Time Zone" type="popup" adr="personalInfo.timeZone"> <option value="1" title="GMT -12:00 Date Line"/> <option value="3" title="GMT -11:00 Samoa"/> <option value="5" title="GMT -10:00 Hawaii"/> <option value="6" title="GMT -09:30"/> <option value="7" title="GMT -09:00 Alaska"/> <option value="8" title="GMT -08:30"/> <option value="9" title="GMT -08:00 Pacific (U.S. & Canada)"/> <option value="11" title="GMT -07:00 Mountain (US & Canada)"/> <option value="13" title="GMT -06:00 Central (U.S. & Canada)"/> <option value="15" title="GMT -05:00 Eastern (U.S. & Canada)"/> <option value="17" title="GMT -04:00 Atlantic Time (Canada)"/> <option value="18" title="GMT -03:30 Newfoundland"/> <option value="19" title="GMT -03:00 Brasilia, Buenos Aires"/> <option value="21" title="GMT -02:00 Mid-Atlantic"/> <option value="23" title="GMT -01:00 Azores"/> <option value="25" title="GMT 00:00 Greenwich Mean Time"/> <option value="27" title="GMT +01:00 Western & Central Europe"/> <option value="29" title="GMT +02:00 Finland, Israel, S. Africa"/> <option value="31" title="GMT +03:00 Russia, Saudi Arabia"/> <option value="32" title="GMT +03:30 Iran"/> <option value="33" title="GMT +04:00 Arabian Peninsula"/> <option value="34" title="GMT +04:30"/> <option value="35" title="GMT +05:00 West Asia"/> <option value="36" title="GMT +05:30 India"/> <option value="37" title="GMT +06:00 Central Asia"/> <option value="38" title="GMT +06:30"/> <option value="39" title="GMT +07:00 Bangkok, Hanoi, Jakarta"/> <option value="41" title="GMT +08:00 China, W. Australia"/> <option value="43" title="GMT +09:00 Korea, Japan"/> <option value="44" title="GMT +09:30 Cen. Australia (Adelaide)"/> <option value="45" title="GMT +10:00 E. Australia (Brisbane)"/> <option value="46" title="GMT +10:30"/> <option value="47" title="GMT +11:00 Central Pacific"/> <option value="48" title="GMT +11:30"/> <option value="49" title="GMT +12:00 Fiji, New Zealand"/> </item> <item title="Gender" type="popup" adr="personalInfo.gender"> <option value="M" title="Male"/> <option value="F" title="Female"/> </item> <item title="Receive email bulletins in HTML or plain text?" type="separator"/> <item title="Receive bulletins?" type="boolean" adr="bulletins.enabled" default="true"/> <item title="In HTML?" type="boolean" adr="bulletins.inHtml"/> </panel> </wizard> \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:optx:prefsSuite.signupWizard.outline ! <wizard> <panel title="Member Signup Form" private="true"> <description/> <item title="Member Information" type="separator"/> <item title="Email address" type="string" adr="personalInfo.email" required="true"/> <item title="Name" type="string" adr="personalInfo.name" required="true"/> <item title="Password" type="password" adr="scratchpassword1" required="true"/> <item title="Repeat" type="password" adr="scratchpassword2" required="true"/> <item title="Hint question" type="popup" adr="personalInfo.hintQuestion" required="true"> <option title="City of Birth?" value="birthCity"/> <option title="Mother's maiden name?" value="motherMaidenName"/> <option title="Pet's name?" value="petName"/> </item> <item title="Hint answer" type="string" adr="personalInfo.hintAnswer" required="true"/> <item title="Personal Information (Optional)" type="separator"/> <item title="ZIP/Postal Code" type="string" adr="personalInfo.zipCode" size="12" maxLength="30"/> <item title="Country" type="popup" adr="personalInfo.country" default="none"> <option value="" title="none"/> <option value="US" title="United States"/> <option value="CA" title="Canada"/> <option value="AF" title="Afghanistan"/> <option value="AL" title="Albania"/> <option value="DZ" title="Algeria"/> <option value="AS" title="American Samoa"/> <option value="AD" title="Andorra"/> <option value="AO" title="Angola"/> <option value="AI" title="Anguilla"/> <option value="AQ" title="Antarctica"/> <option value="AG" title="Antigua and Barbuda"/> <option value="AR" title="Argentina"/> <option value="AM" title="Armenia"/> <option value="AW" title="Aruba"/> <option value="AU" title="Australia"/> <option value="AT" title="Austria"/> <option value="AZ" title="Azerbaijan"/> <option value="BS" title="Bahamas"/> <option value="BH" title="Bahrain"/> <option value="BD" title="Bangladesh"/> <option value="BB" title="Barbados"/> <option value="BY" title="Belarus"/> <option value="BE" title="Belgium"/> <option value="BZ" title="Belize"/> <option value="BJ" title="Benin"/> <option value="BM" title="Bermuda"/> <option value="BT" title="Bhutan"/> <option value="BO" title="Bolivia"/> <option value="BA" title="Bosnia and Herzegovina"/> <option value="BW" title="Botswana"/> <option value="BV" title="Bouvet Island"/> <option value="BR" title="Brazil"/> <option value="IO" title="British Indian Ocean Territory"/> <option value="BN" title="Brunei Darussalam"/> <option value="BG" title="Bulgaria"/> <option value="BF" title="Burkina Faso"/> <option value="BI" title="Burundi"/> <option value="KH" title="Cambodia"/> <option value="CM" title="Cameroon"/> <option value="CV" title="Cape Verde"/> <option value="KY" title="Cayman Islands"/> <option value="CF" title="Central African Republic"/> <option value="TD" title="Chad"/> <option value="CL" title="Chile"/> <option value="CN" title="China"/> <option value="CX" title="Christmas Island"/> <option value="CC" title="Cocos (Keeling) Islands"/> <option value="CO" title="Colombia"/> <option value="KM" title="Comoros"/> <option value="CG" title="Congo"/> <option value="CK" title="Cook Islands"/> <option value="CR" title="Costa Rica"/> <option value="HR" title="Croatia (Hrvatska)"/> <option value="CU" title="Cuba"/> <option value="CY" title="Cyprus"/> <option value="CZ" title="Czech Republic"/> <option value="CS" title="Czechoslovakia (former)"/> <option value="DK" title="Denmark"/> <option value="DJ" title="Djibouti"/> <option value="DM" title="Dominica"/> <option value="DO" title="Dominican Republic"/> <option value="TP" title="East Timor"/> <option value="EC" title="Ecuador"/> <option value="EG" title="Egypt"/> <option value="SV" title="El Salvador"/> <option value="GQ" title="Equatorial Guinea"/> <option value="ER" title="Eritrea"/> <option value="EE" title="Estonia"/> <option value="ET" title="Ethiopia"/> <option value="FK" title="Falkland Islands (Malvinas)"/> <option value="FO" title="Faroe Islands"/> <option value="FJ" title="Fiji"/> <option value="FI" title="Finland"/> <option value="FR" title="France"/> <option value="FX" title="France, Metropolitan"/> <option value="GF" title="French Guiana"/> <option value="PF" title="French Polynesia"/> <option value="TF" title="French Southern Territories"/> <option value="GA" title="Gabon"/> <option value="GM" title="Gambia"/> <option value="GE" title="Georgia"/> <option value="DE" title="Germany"/> <option value="GH" title="Ghana"/> <option value="GI" title="Gibraltar"/> <option value="GB" title="Great Britain (UK)"/> <option value="GR" title="Greece"/> <option value="GL" title="Greenland"/> <option value="GD" title="Grenada"/> <option value="GP" title="Guadeloupe"/> <option value="GU" title="Guam"/> <option value="GT" title="Guatemala"/> <option value="GN" title="Guinea"/> <option value="GW" title="Guinea-Bissau"/> <option value="GY" title="Guyana"/> <option value="HT" title="Haiti"/> <option value="HM" title="Heard and McDonald Islands"/> <option value="HN" title="Honduras"/> <option value="HK" title="Hong Kong"/> <option value="HU" title="Hungary"/> <option value="IS" title="Iceland"/> <option value="IN" title="India"/> <option value="ID" title="Indonesia"/> <option value="IR" title="Iran"/> <option value="IQ" title="Iraq"/> <option value="IE" title="Ireland"/> <option value="IL" title="Israel"/> <option value="IT" title="Italy"/> <option value="JM" title="Jamaica"/> <option value="JP" title="Japan"/> <option value="JO" title="Jordan"/> <option value="KZ" title="Kazakhstan"/> <option value="KE" title="Kenya"/> <option value="KI" title="Kiribati"/> <option value="KP" title="Korea (North)"/> <option value="KR" title="Korea (South)"/> <option value="KW" title="Kuwait"/> <option value="KG" title="Kyrgyzstan"/> <option value="LA" title="Laos"/> <option value="LV" title="Latvia"/> <option value="LB" title="Lebanon"/> <option value="LS" title="Lesotho"/> <option value="LR" title="Liberia"/> <option value="LY" title="Libya"/> <option value="LI" title="Liechtenstein"/> <option value="LT" title="Lithuania"/> <option value="MO" title="Macau"/> <option value="MK" title="Macedonia"/> <option value="MG" title="Madagascar"/> <option value="MW" title="Malawi"/> <option value="MY" title="Malaysia"/> <option value="MV" title="Maldives"/> <option value="ML" title="Mali"/> <option value="MT" title="Malta"/> <option value="MH" title="Marshall Islands"/> <option value="MQ" title="Martinique"/> <option value="MR" title="Mauritania"/> <option value="MU" title="Mauritius"/> <option value="YT" title="Mayotte"/> <option value="MX" title="Mexico"/> <option value="FM" title="Micronesia"/> <option value="MD" title="Moldova"/> <option value="MC" title="Monaco"/> <option value="MN" title="Mongolia"/> <option value="MS" title="Montserrat"/> <option value="MA" title="Morocco"/> <option value="MZ" title="Mozambique"/> <option value="MM" title="Myanmar"/> <option value="NA" title="Namibia"/> <option value="NR" title="Nauru"/> <option value="NP" title="Nepal"/> <option value="NL" title="Netherlands"/> <option value="AN" title="Netherlands Antilles"/> <option value="NT" title="Neutral Zone"/> <option value="NC" title="New Caledonia"/> <option value="NZ" title="New Zealand (Aotearoa)"/> <option value="NI" title="Nicaragua"/> <option value="NE" title="Niger"/> <option value="NG" title="Nigeria"/> <option value="NU" title="Niue"/> <option value="NF" title="Norfolk Island"/> <option value="MP" title="Northern Mariana Islands"/> <option value="NO" title="Norway"/> <option value="OM" title="Oman"/> <option value="PK" title="Pakistan"/> <option value="PW" title="Palau"/> <option value="PA" title="Panama"/> <option value="PG" title="Papua New Guinea"/> <option value="PY" title="Paraguay"/> <option value="PE" title="Peru"/> <option value="PH" title="Philippines"/> <option value="PN" title="Pitcairn"/> <option value="PL" title="Poland"/> <option value="PT" title="Portugal"/> <option value="PR" title="Puerto Rico"/> <option value="QA" title="Qatar"/> <option value="RE" title="Reunion"/> <option value="RO" title="Romania"/> <option value="RU" title="Russian Federation"/> <option value="RW" title="Rwanda"/> <option value="GS" title="S. Georgia and S. Sandwich Isls."/> <option value="KN" title="Saint Kitts and Nevis"/> <option value="LC" title="Saint Lucia"/> <option value="VC" title="Saint Vincent and the Grenadines"/> <option value="WS" title="Samoa"/> <option value="SM" title="San Marino"/> <option value="ST" title="Sao Tome and Principe"/> <option value="SA" title="Saudi Arabia"/> <option value="SN" title="Senegal"/> <option value="SC" title="Seychelles"/> <option value="SL" title="Sierra Leone"/> <option value="SG" title="Singapore"/> <option value="SK" title="Slovak Republic"/> <option value="SI" title="Slovenia"/> <option value="Sb" title="Solomon Islands"/> <option value="SO" title="Somalia"/> <option value="ZA" title="South Africa"/> <option value="ES" title="Spain"/> <option value="LK" title="Sri Lanka"/> <option value="SH" title="St. Helena"/> <option value="PM" title="St. Pierre and Miquelon"/> <option value="SD" title="Sudan"/> <option value="SR" title="Suriname"/> <option value="SJ" title="Svalbard and Jan Mayen Islands"/> <option value="SZ" title="Swaziland"/> <option value="SE" title="Sweden"/> <option value="CH" title="Switzerland"/> <option value="SY" title="Syria"/> <option value="TW" title="Taiwan"/> <option value="TJ" title="Tajikistan"/> <option value="TZ" title="Tanzania"/> <option value="TH" title="Thailand"/> <option value="TG" title="Togo"/> <option value="TK" title="Tokelau"/> <option value="TO" title="Tonga"/> <option value="TT" title="Trinidad and Tobago"/> <option value="TN" title="Tunisia"/> <option value="TR" title="Turkey"/> <option value="TM" title="Turkmenistan"/> <option value="TC" title="Turks and Caicos Islands"/> <option value="TV" title="Tuvalu"/> <option value="UM" title="US Minor Outlying Islands"/> <option value="SU" title="USSR (former)"/> <option value="UG" title="Uganda"/> <option value="UA" title="Ukraine"/> <option value="AE" title="United Arab Emirates"/> <option value="UK" title="United Kingdom"/> <option value="UY" title="Uruguay"/> <option value="UZ" title="Uzbekistan"/> <option value="VU" title="Vanuatu"/> <option value="VA" title="Vatican City State (Holy See)"/> <option value="VE" title="Venezuela"/> <option value="VN" title="Viet Nam"/> <option value="VG" title="Virgin Islands (British)"/> <option value="VI" title="Virgin Islands (U.S.)"/> <option value="WF" title="Wallis and Futuna Islands"/> <option value="EH" title="Western Sahara"/> <option value="YE" title="Yemen"/> <option value="YU" title="Yugoslavia"/> <option value="ZR" title="Zaire"/> <option value="ZM" title="Zambia"/> <option value="ZW" title="Zimbabwe"/> </item> <item title="State (US only)" type="popup" adr="personalInfo.stateInitials" default="none"> <option value="" title="none"/> <option title="Alabama" value="AL"/> <option title="Alaska" value="AK"/> <option title="Arizona" value="AZ"/> <option title="Arkansas" value="AR"/> <option value="CA" title="California"/> <option value="CO" title="Colorado"/> <option value="CT" title="Connecticut"/> <option value="DE" title="Delaware"/> <option value="FL" title="Florida"/> <option value="GA" title="Georgia"/> <option value="HI" title="Hawaii"/> <option value="ID" title="Idaho"/> <option value="IL" title="Illinois"/> <option value="IN" title="Indiana"/> <option value="IA" title="Iowa"/> <option value="KS" title="Kansas"/> <option value="KY" title="Kentucky"/> <option value="LA" title="Louisiana"/> <option value="ME" title="Maine"/> <option value="MD" title="Maryland"/> <option value="MA" title="Massachusetts"/> <option value="MI" title="Michigan"/> <option value="MN" title="Minnesota"/> <option value="MS" title="Mississippi"/> <option value="MO" title="Missouri"/> <option value="MT" title="Montana"/> <option value="NE" title="Nebraska"/> <option value="NV" title="Nevada"/> <option value="NH" title="New Hampshire"/> <option value="NJ" title="New Jersey"/> <option value="NM" title="New Mexico"/> <option value="NY" title="New York"/> <option value="NC" title="North Carolina"/> <option value="ND" title="North Dakota"/> <option value="OH" title="Ohio"/> <option value="OK" title="Oklahoma"/> <option value="OR" title="Oregon"/> <option value="PA" title="Pennsylvania"/> <option value="RI" title="Rhode Island"/> <option value="SC" title="South Carolina"/> <option value="SD" title="South Dakota"/> <option value="TN" title="Tennessee"/> <option value="TX" title="Texas"/> <option value="UT" title="Utah"/> <option value="VT" title="Vermont"/> <option value="VA" title="Virginia"/> <option value="WA" title="Washington"/> <option value="WV" title="West Virginia"/> <option value="WI" title="Wisconsin"/> <option value="WY" title="Wyoming"/> </item> <item title="Time Zone" type="popup" adr="personalInfo.timeZone" default="none"> <option value="" title="none"/> <option value="1" title="GMT -12:00 Date Line"/> <option value="3" title="GMT -11:00 Samoa"/> <option value="5" title="GMT -10:00 Hawaii"/> <option value="6" title="GMT -09:30"/> <option value="7" title="GMT -09:00 Alaska"/> <option value="8" title="GMT -08:30"/> <option value="9" title="GMT -08:00 Pacific (U.S. & Canada)"/> <option value="11" title="GMT -07:00 Mountain (US & Canada)"/> <option value="13" title="GMT -06:00 Central (U.S. & Canada)"/> <option value="15" title="GMT -05:00 Eastern (U.S. & Canada)"/> <option value="17" title="GMT -04:00 Atlantic Time (Canada)"/> <option value="18" title="GMT -03:30 Newfoundland"/> <option value="19" title="GMT -03:00 Brasilia, Buenos Aires"/> <option value="21" title="GMT -02:00 Mid-Atlantic"/> <option value="23" title="GMT -01:00 Azores"/> <option value="25" title="GMT 00:00 Greenwich Mean Time"/> <option value="27" title="GMT +01:00 Western & Central Europe"/> <option value="29" title="GMT +02:00 Finland, Israel, S. Africa"/> <option value="31" title="GMT +03:00 Russia, Saudi Arabia"/> <option value="32" title="GMT +03:30 Iran"/> <option value="33" title="GMT +04:00 Arabian Peninsula"/> <option value="34" title="GMT +04:30"/> <option value="35" title="GMT +05:00 West Asia"/> <option value="36" title="GMT +05:30 India"/> <option value="37" title="GMT +06:00 Central Asia"/> <option value="38" title="GMT +06:30"/> <option value="39" title="GMT +07:00 Bangkok, Hanoi, Jakarta"/> <option value="41" title="GMT +08:00 China, W. Australia"/> <option value="43" title="GMT +09:00 Korea, Japan"/> <option value="44" title="GMT +09:30 Cen. Australia (Adelaide)"/> <option value="45" title="GMT +10:00 E. Australia (Brisbane)"/> <option value="46" title="GMT +10:30"/> <option value="47" title="GMT +11:00 Central Pacific"/> <option value="48" title="GMT +11:30"/> <option value="49" title="GMT +12:00 Fiji, New Zealand"/> </item> <item title="Gender" type="popup" adr="personalInfo.gender" default="none"> <option value="" title="none"/> <option value="M" title="Male"/> <option value="F" title="Female"/> </item> <item title="Receive email bulletins in HTML or plain text?" type="separator"/> <item title="Receive bulletins?" type="boolean" adr="bulletins.enabled" default="true"/> <item title="In HTML?" type="boolean" adr="bulletins.inHtml"/> </panel> </wizard> \ No newline at end of file |
|
From: Terry T. <ter...@us...> - 2005-08-22 02:08:57
|
Update of /cvsroot/frontierkernel/Frontier/Common/source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25778/Frontier/Common/source Modified Files: filepath.c Log Message: Conditionalize initfsdefault() for Mac platform. Index: filepath.c =================================================================== RCS file: /cvsroot/frontierkernel/Frontier/Common/source/filepath.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** filepath.c 25 Jul 2005 21:10:11 -0000 1.7 --- filepath.c 22 Aug 2005 02:08:48 -0000 1.8 *************** *** 411,416 **** --- 411,418 ---- void initfsdefault (void) { + #ifdef MACVERSION /* 2005-07-18 creedon, karstenw */ getapplicationfilespec (nil, &fsdefault); + #endif } /* initfsdefault */ \ No newline at end of file |
|
From: creedon <icr...@us...> - 2005-08-22 01:21:51
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/suites/DuckTape In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18545 Modified Files: Tag: commercial_suite_project-branch newAppsTableItem menu Log Message: Aug 21 2005 release changes Index: menu =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/suites/DuckTape/Attic/menu,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** menu 18 Aug 2005 16:28:58 -0000 1.1.2.1 --- menu 22 Aug 2005 01:21:42 -0000 1.1.2.2 *************** *** 1,3 **** FrontierVcsFile:1:mbar:suites.DuckTape.menu ! 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 \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:mbar:suites.DuckTape.menu ! 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 \ No newline at end of file Index: newAppsTableItem =================================================================== RCS file: /cvsroot/frontierkernel/odbs/frontierRoot/suites/DuckTape/Attic/newAppsTableItem,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** newAppsTableItem 18 Aug 2005 16:28:58 -0000 1.1.2.1 --- newAppsTableItem 22 Aug 2005 01:21:42 -0000 1.1.2.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:suites.DuckTape.newAppsTableItem ! ÇChanges Ç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.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 Ç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 |
|
From: creedon <icr...@us...> - 2005-08-22 00:42:30
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/suites/fUnit In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11007 Added Files: Tag: fUnit_Suite-branch suiteName readMe menu documentation init unregisterTestSuite registerTestSuite getTempTableAdr Log Message: fUnit Suite initial import --- NEW FILE: getTempTableAdr --- (This appears to be a binary file; contents omitted.) --- NEW FILE: menu --- FrontierVcsFile:1:mbar:suites.fUnit.menu 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 --- NEW FILE: documentation --- FrontierVcsFile:1:optx:suites.fUnit.documentation fUnit fUnit is a Unit Testing framework for the Usertalk environment in Frontier. It is modelled around the standard xUnit framework, for example as seen in JUnit and PyUnit, and adapted for Frontier to take advantage of its unique strengths. About Unit Testing (Unit Testing Advocacy) Unit testing boils down to a series of call to a variety of "assert" functions that "assert" that various things are true at testing time, organized in a particular way that allows a "Unit Testing Framework" to fully automatically execute the tests upon demand, and give a "pass/fail" for the test run. (fUnit also adds an "abort" category which is very useful but commonly missing from xUnit implementations.) The advantages of Unit Testing are: Organization: Unit tests are organized in a way that makes them easy to write, easy to keep around, and easy to execute again and again. *Everybody* writes test scripts, but test scripts are frequently discarded, and even if they are kept around, each developer writes their own. In fact, this suite ships with testSuperStress, where "SuperStress" is just such a salvaged test suite. Now that it is in the framework, we can use all of the framework features, and easily run it at will, in conjunction with other test suites. Framework: fUnit provides a framework with useful features that you don't have to implement yourself. fUnit collects test results in a standard fashion, and allows to use pre-supplied renderers for those (such as the one that displays the results as HTML) or easily write your own. It supplies common functions for testing, such as "assertErrors", and a function to retrieve a stack dump and output it in a standard format in the test results. This way, features can be added to all the test suites at once (like maybe running from a network) without changing the tests. Automatically: Nobody runs tests manually unless it is as easy as pushing a button. Ideally, a project should get it to the point where it doesn't even require that, running tests automatically on commits or periodically. For that, you need standardized tests. Network effects: These advantages combine multiplicatively, not additively, and cause other effects. One of the most exciting is how much easier Unit Testing makes it to refactor code, with confidence that the relevant properties are retained. The first time you massively refactor code and all the old unit tests pass, plus a batch of new ones, you will be a convert. The other exciting one is they save you much, much more time than they cost you ... Unit testing... just try it once for a significant project. Some people push "Test First Development", where you write the tests first and then write the code. I think this is less useful in a dynamic environment like Frontier where it is easy to move functions around, and you're writing experimental code, which stuff in Frontier commonly is. Still, it is worth a try to see if it will work for you. Test Structure fUnit structures its tests in the following manner: "Test Cases" are scripts that start with the word "test", and make use of the various "assert" functions provided by the framework. They can not be run directly. "Test Suites" are Frontier tables that start with the word "test" that contain a collection of test cases. In addition to the test cases, test suites may also contain the following in the table: A string attribute "name", which will be used as the human name of the test case. By default, the name of the table will be used, but it can be inconvenient to have spaces and such in the table name. A string attribute "description", which will be used as the description of the test suite when it is run. By default, this is empty. Another Test Suite. Addresses that point at other Test Suites will be regarded as being an included test suite. (This is useful for aggregating multiple test suites together with needing them to be close in the ODB.) Addresses that point at Test Cases will be regarded as test cases for this suite. A script named "setup" can be included to set up a testing environment that will be used by multiple scripts. The return value of setup will be passed to the test case to use as it wills. Note this script is called for every individual test case, not once for each suite. Errors in this script will halt the execution of the test suite, and teardown will not be called on that run; depending on the contents of the script you may need to manually validate the state of the resources "setup" was responsible for. A script named "teardown" can be included which will be passed the parameter created by "setup" (if any) and can be used to uninitialize any resources like sockets used by the test. Errors in this script will halt the execution of the test suite; depending on the contents of this script and "setup" you may need to manually validate the state of the resources "setup" and "teardown" were responsible for. A "Test Runner" is something that knows how to run tests, and displays the output in some format. Most people won't need to write these. fUnit ships with two Test Runners by default, described in children. Writing a new test runner is easy; run "runTestSuite" with the desired parameters and process the resulting result table or scriptError (in case of setup, teardown, or fUnit code failures). Change the Test Runner fUnit use by default in its menu commands by either setting user.fUnitRunner to the address of your desired Test Runner script, or use the fUnit menu to select one via the "Select Default Runner" option. The "default" test runner simply displays the results table on the screen. You can see the results as they are collected. The "HTML" test runner will output the results of the test as an HTML page and use webbrowser.displayText to display it. It will also nicely format stack traces, when thread.getStackDump is fixed. Generally speaking, a Test Runner is used to interpret the run of a Test Suite, which runs other Test Suites and Test Cases. The relevant menu options in the fUnit menu all use the Test Runner you specify in user.fUnitRunner. Along with the user test suites, fUnit maintains a global test suite which can be used to run all registered tests at once. To register your test suite, call "fUnit.registerTestSuite" with the address to your test suite. All future runs of "fUnit.runAllTests" will now include your test suite. You can call "fUnit.unregisterTestSuite" with the same address to unregister your suite later. (Menu commands for both of these are included for your convenience.) Note that anything included in a test suite that does not match the rules above will be ignored by fUnit, so you can use the suites to store test data or other scripts for use by your test cases. Creating Your Own Test Suite To create your own test suite, create a table starting with the word "test", which I will refer to as "testSuite" for the remainder of this section. (The test suite created by following these directions is available in fUnit.testSuiteSkeleton, which you can also copy and paste.) Create a string value named "name" and enter the name of your suite. Create a string value name "description", and enter a description for your suite. Create a script named "setup", taking no parameters. Create a script named "teardown", taking one parameter, the value returned by setup. Create a test script, starting with the word "test", taking an opitional parameter from the setup script. Use the "Assert Functions", documented below, to test various things. If you install the menu for fUnit, you can now successfully run this test case and see one passed test. menu.install(@fUnit.menu) // hit CTRL-/ while this line is focused to install the menu Testing By Example The tests decribed here are included in the table fUnit.exampleUnitTests, and are already included in the fUnit global test suite when shipped. testSimple testSimple is basically the simplest possible test that has both a failing line and a successful line. It looks like this: on testSimple (setupParam = nil) assert(1 == 1) assert(1 == 2, "Who could ever think 1 == 2?") scriptError("Never get here.") Note the "setupParam = nil" part of the script definition. This test suite does not have a "setup" script, so there is no setupParm passed to "testSimple". However, someday you may add a "setup" script. Using "setupParm = nil" future-proofs your test against that eventuality. The next line calls "assert" with the value "true", which is what 1 == 1 evaluates to. (Try it; put the cursor in the child node of this one and hit "CTRL-/", and Frontier will evaluate the node and show the result as a comment.) Since assert was called with a true value, it immediately returns and does nothing. 1 == 1 After that, assert is called with 1 == 2, which is false. This means "assert" will fail, and the test script will terminate. The second optional parameter is the message which will be sent back out to the test system as the reason the test failed. (Note there is currently a rather small limit on how large that message may be.) 1 == 2 Since the test stops execution after a failed assert, the third "scriptError" line will never be executed. This test shows as a failure, as a result of the second line. testSuperStress SuperStress provides examples of a lot of nitty-gritty Frontier testing. Running Test Suites or Test Cases Test Suites or Test Cases should be run by running one of the scripts in fUnit.runners. fUnit.runners.run will use the user's declared preference (an address to a runner script at user.fUnitRunner), so it should be used unless there is a good reason not to. Runners have the following signiture: run(suiteAdr, testCaseToRun = nil, allowErrorsOut = false) suiteAdr is the address of the test suite to run. testCaseToRun is an optional address of a specific test case to run. It should come from the suite defined by suiteAdr, but this is not checked for. If not given, all test cases and suites will be run. allowErrorsOut is a parameter that allows you to prevent the framework from catching the errors generated by the test suites. This allows them to propogate all the way out to the user level, where you can use the usual "Error Info" dialog box to diagnose the problem. (See "Debugging Hints" at the end of this document.) Assert Functions assert(booleanResult, message = nil) assert is the basic assertion function for test suites. The first parameter is a boolean result, usually of some relatively complicated expression that evaluates to a boolean, not true or false directly. message is a string that will be used as the reason for failure, if one is given. Otherwise, a generic error message will be used. When assert(false) is called, the test case ceases running; put any necessary cleanup in "teardown". Examples: assert("abcdefg" contains "abc") // succeeds assert("23" contains "4", "The digit '4' is not in '23'") // note Frontier has no access to the expression, so make your error messages count assertEqual(value1, value2, message = nil) assertEqual checks that the two values it is passed are equal. If they are not, execution of the test case terminates. This is a convenience function for a common case; it allows the test framework to include value1 and value2 in the resulting error message. If the optional message parameter is passed, it will be used in addition to the default message. Example: assertEqual(1, 2, "1 is not equal to 2") assertNotEqual(value1, value2, message = nil) Same as assertEqual, just inverts the test. Example: assertNotEqual(1, 2, "1 is equal to 2?!?") assertErrors(scriptAdr, errorFragment = nil, failMessage = nil) assertErrors validates that some piece of code correctly throws a scriptError. scriptAdr is the address of a script to test, which will be called with no arguments. This is typically an embedded function; see example. errorFragment is an optional string which will be looked for in the resulting error; if it is not found, the test will fail even if the script errors. This allows the test framework to ensure the correct error is thrown, and its use is highly recommended. Otherwise, any error will be accepted as a passing assert. failMessage will be added to the error report produced by assertErrors if the assertion fails. Note that scriptErrors are limited in length, and with everything this function tries to jam into the error message, it may overflow that length. Example: Test for "division by 0" error on divideByZero() 1 / 0 assertErrors(@divideByZero, "divide by zero") scriptError It is permissible for a test to fail with a normal scriptError, and the text of the error thrown will be used as the reason the test failed in the results. However, fUnit will not be able to obtain the stack dump for the scriptError you throw, and your test may miss out on later such features fUnit adds for error testing, such as convenient jumping to the error. scriptError should be used as a last resort, or possibly for importing other test scripts into an fUnit test suite with a minimum of changes. abort(reason) Calling abort in a test case will terminate the execution of the test case, just like a failed assert. The first argument is the reason for the abort. Abort should be used for tests that are not applicable to the current environment, or can not be run in the current environment. An aborting test indicates to the person running the tests that they should look at the reason given for the abort to see if it can be corrected, or if it is acceptable. Examples for aborting include: Platform specific tests being run on a different platform (see testSuperStress.testMacFileHandling), or tests that require access to a password protected resource which can not be distributed with a password for security reasons, requiring the user to set up a password somewhere, such as Manila XML-RPC client testing. Other Shipped Functions registerTestSuite(adr) Registers a test suite in the global test suite, run when the "Run Global Suite" option in the menu is chosen. unregisterTestSuite(adr) Unregisters a test suite registered with registerTestSuite. getTempTableAdr() Returns the address of a table that can be used as a temporary table. The table returned by this function will be automatically deleted at the end of the test suite execution, so it can be safer to use than alternative table creation mechanisms. fUnit Menu The fUnit menu can be installed by executing the following command: menu.install(@fUnit.menu) // CTRL-/ while the cursor is on this line will execute it The fUnit menu includes convenience functions to run the currently focused test suite or test case (with or without immediate errors), add the test suite to the global test suite, set the default runner, or run the global test suite in an infinite loop. Debugging Hints Two debugging hints that took me a while to learn: The Error Info dialog box, if you hold the mouse button over the "Go To" button, will give you a stack trace, which can be used to jump anywhere in the call stack. This is especially useful in the context of fUnit where the error always occurs in the test case, which isn't terribly useful information. While debugging a script, the Quick Script window is in the context of the script being currently debugged. You can run expressions from "inside" the script and see the results. --- NEW FILE: suiteName --- FrontierVcsFile:1:TEXT:suites.fUnit.suiteName fUnit --- NEW FILE: unregisterTestSuite --- FrontierVcsFile:1:scpt:suites.fUnit.unregisterTestSuite on unregisterTestSuite (adr) { delete(@fUnit.testGlobalSuite[string(adr)])} --- NEW FILE: readMe --- FrontierVcsFile:1:wptx:suites.fUnit.readMe This is the fUnit suite. Created by Jeremy Bowers who wants the Frontier Community to maintain and improve fUnit. [Why I Wrote It] [What It Does] [Things To Watch Out For] --- NEW FILE: init --- (This appears to be a binary file; contents omitted.) --- NEW FILE: registerTestSuite --- FrontierVcsFile:1:scpt:suites.fUnit.registerTestSuite on registerTestSuite (adr) { fUnit.testGlobalSuite[string(adr)] = adr} |
|
From: creedon <icr...@us...> - 2005-08-22 00:42:29
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/suites/fUnit/runners In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10970 Added Files: Tag: fUnit_Suite-branch run default html Log Message: fUnit Suite initial import --- NEW FILE: default --- (This appears to be a binary file; contents omitted.) --- NEW FILE: html --- (This appears to be a binary file; contents omitted.) --- NEW FILE: run --- (This appears to be a binary file; contents omitted.) |
|
From: creedon <icr...@us...> - 2005-08-22 00:42:11
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/suites/fUnit/testGlobalSuite In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10944 Added Files: Tag: fUnit_Suite-branch zH2qYf9KXsoc79FutSuw USmNgf7a6tzCYFBpIu4ZKw name description Log Message: fUnit Suite initial import --- NEW FILE: zH2qYf9KXsoc79FutSuw --- FrontierVcsFile:1:addr:suites.fUnit.testGlobalSuite.["[\"C3A\\\\Documents and Settings\\\\Jerf\\\\Desktop\\\\UserLand Frontier\\\\fUnit.root\"].fUnit.testSuperStress"] ["C:\\Documents and Settings\\Jerf\\Desktop\\UserLand Frontier\\fUnit.root"].fUnit.testSuperStress --- NEW FILE: USmNgf7a6tzCYFBpIu4ZKw --- FrontierVcsFile:1:addr:suites.fUnit.testGlobalSuite.["[\"C3A\\\\Documents and Settings\\\\Jerf\\\\Desktop\\\\UserLand Frontier\\\\fUnit.root\"].fUnit.testfUnit"] ["C:\\Documents and Settings\\Jerf\\Desktop\\UserLand Frontier\\fUnit.root"].fUnit.testfUnit --- NEW FILE: description --- FrontierVcsFile:1:TEXT:suites.fUnit.testGlobalSuite.description The Global Test Suite runs all test suites registered via "registerTestSuite". --- NEW FILE: name --- FrontierVcsFile:1:TEXT:suites.fUnit.testGlobalSuite.name Global Test Suite |
Update of /cvsroot/frontierkernel/odbs/frontierRoot/suites/fUnit/originalSuperStressRemnants/data In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10915 Added Files: Tag: fUnit_Suite-branch xmlReceiver xmlSender helloWorld xmlTestList xmlTestListCopy Log Message: fUnit Suite initial import --- NEW FILE: xmlSender --- FrontierVcsFile:1:scpt:suites.fUnit.originalSuperStressRemnants.data.xmlSender on xmlSender (server, adr) { local (data, s, objecttype); objecttype = typeof (adr^); pack (adr^, @data); s = base64.encode (string (data), 80); local (params = {string (adr) + "Copy", string (objecttype), s}); betty.rpc.client (server, 80, "testing.xmlReceiver", @params)} --- NEW FILE: xmlTestListCopy --- FrontierVcsFile:1:list:suites.fUnit.originalSuperStressRemnants.data.xmlTestListCopy {1, 3, 5, 7} --- NEW FILE: xmlTestList --- FrontierVcsFile:1:list:suites.fUnit.originalSuperStressRemnants.data.xmlTestList {1, 3, 5, 7} --- NEW FILE: helloWorld --- FrontierVcsFile:1:scpt:suites.fUnit.originalSuperStressRemnants.data.helloWorld on helloWorld (name) { return ("Hello " + name + ".")} --- NEW FILE: xmlReceiver --- FrontierVcsFile:1:scpt:suites.fUnit.originalSuperStressRemnants.data.xmlReceiver on xmlReceiver (addressString, objectType, encodedObject) { local (adr = address (addressString)); local (bytes = binary (base64.decode (encodedObject))); setBinaryType (@bytes, objectType); unpack (@bytes, adr); if objectType == scripttype { script.compile (adr)}; export.addToLog (adr); return (true)} |
|
From: creedon <icr...@us...> - 2005-08-22 00:42:02
|
Update of /cvsroot/frontierkernel/odbs/frontierRoot/suites/fUnit/testfUnit2 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10896 Added Files: Tag: fUnit_Suite-branch README Log Message: fUnit Suite initial import --- NEW FILE: README --- FrontierVcsFile:1:optx:suites.fUnit.testfUnit2.README These are suites that are intended to fail, to test the failure states of the fUnit framework. As such, they are not meant to be run directly, but in the context of testfUnit.testfUnitFailures. Do not add these to the global testing suite. |