| !{{{姓 名}}} | !{{{- 类 群 -}}} | !{{{2007年任务}}} | !{{{6月底完成}}} | !{{{7-12月完成}}} | !{{{数据进度}}} | !{{{照片进度}}} |\n| 陈彦生 | 报春花科 | 3138 | | 3175 | | |\n|~| 杜鹃花科 | 3377 | | 3699 | | |\n|~| 木犀科 | 3859 | | | | |\n|~| 鹿蹄草科 | 329 | | 343 | | |\n|~| 山茱萸科 | 2229 | 2313 | | 100% | |\n|~| @@color(green):岩梅科@@ | | | | | |\n|~| @@color(green):山榄科@@ | | | 39 | | |\n|~| @@color(green):柿树科@@ | | | 489 | | |\n|~| @@color(green):桤叶树科@@ | | | | | |\n|~| @@color(green):白花丹科@@ | | | 676 | | |\n|~| @@color(green):紫金牛科@@ | | | 1361 | | |\n|~| @@color(green):山矾科@@ | | | 1151 | | |\n|~|bgcolor:#fee; 合计 |bgcolor:#fee; 12932 |bgcolor:#fee; 2313 |bgcolor:#fee; 10933 |bgcolor:#fee; |bgcolor:#fee; -29 |\n| 郭晓思 | 忍冬科 | 12282 | 12107 | | 100% | |\n|~| 虎耳草科 | 4414 | 4455 | | 100% | |\n|~| 川续断科 | 562 | 564 | | 100% | |\n|~| 车前科 | 1014 | | 1092 | | |\n|~| 狸藻科 | 40 | | 46 | | |\n|~| 爵床科 | 205 | | 234 | | |\n|~| 透骨草科 | 133 | | 137 | | |\n|~| 萝藦科 | 2340 | | 2431 | | |\n|~|bgcolor:#fee; 合计 |bgcolor:#fee; 20990 |bgcolor:#fee; 17126 |bgcolor:#fee; 3940 |bgcolor:#fee; |bgcolor:#fee; 76 |\n| 常朝阳 |bgcolor:#fee; 旋花科 |bgcolor:#fee; 2216 |bgcolor:#fee; 2242 |bgcolor:#fee; |bgcolor:#fee;100% |bgcolor:#fee; |\n| 吴振海 | 紫草科 | 3013 | 3010 | | 100% | |\n|~| 马鞭草科 | 3107 | | 3120 | | |\n|~| 茄科 | 2510 | | 2526 | | |\n|~| 苦苣苔科 | 749 | | 750 | | |\n|~| 紫葳科 | 632 | | 644 | | |\n|~| 列当科 | 216 | 215 | | 100% | |\n|~| 胡麻科 | 22 | | 20 | | |\n|~|bgcolor:#fee; 合计 |bgcolor:#fee; 10249 |bgcolor:#fee; 3225 |bgcolor:#fee; 7060 |bgcolor:#fee; |bgcolor:#fee; 36 |\n| 张跃进 | 裸子植物 | 4829 | | 4762 | | |\n|~|bgcolor:#ddd; 柏科| 1458 | | 1459 | | |\n|~|bgcolor:#ddd; 松科| 1518 | | 1516 | | |\n|~|bgcolor:#ddd; 红豆杉科| 279 | | 273 | | |\n|~|bgcolor:#ddd; 罗汉松科| 42 | | 38 | | |\n|~|bgcolor:#ddd; 麻黄科| 447 | | 449 | | |\n|~|bgcolor:#ddd; 买麻藤科| 26 | | 24 | | |\n|~|bgcolor:#ddd; 南洋杉科| 1 | | | | |\n|~|bgcolor:#ddd; 三尖杉科| 593 | | 598 | | |\n|~|bgcolor:#ddd; 杉科| 296 | | 295 | | |\n|~|bgcolor:#ddd; 苏铁科| 7 | | 3 | | |\n|~|bgcolor:#ddd; 银杏科| 108 | | 107 | | |\n|~|bgcolor:#ddd; 棕榈科| 54 | | | | |\n|~| 木通科 | 788 | | 787 | | |~|~|\n|~|bgcolor:#fee; 合计 |bgcolor:#fee; 5617 |bgcolor:#fee; |bgcolor:#fee; 5549 |bgcolor:#fee; |bgcolor:#fee; -68 |\n|~|bgcolor:#fee; 全部合计 |bgcolor:#fee; 52004 |bgcolor:#fee; 24906 |bgcolor:#fee; 27482 |bgcolor:#fee; |bgcolor:#fee; 41 |\n\n* 注合同书任务量为 56000,包括了前一年度超额完成的任务4400.\n\n另外上交十字花科照片 ...\n
项目成员须知:\n(1)《科技部标本数字化项目考核指标》 [[察看详情 >>>|科技部标本数字化项目考核指标]]\n(2)《科技部标本数字化项目管理办法》 [[察看详情 >>>|科技部标本数字化项目管理办法]]\n(3)@@color(red):''数据质量以专家的声誉作保证,请各位专家自己负责。''@@\n(4)除了上缴科技部,各科也将在网上建立专科数据库,作为责任专家的成绩。\n\n----\n\n| 任务总表|c\n| !{{{姓 名}}} | !{{{2007年任务}}} | !{{{6月底完成}}} | !{{{7-12月完成}}} | !{{{数据进度}}} | !{{{照片进度}}} | !{{{- 备 注 -}}} |\n| 合计 | 56078 | 17453 | 38625 | | | |\n| 陈彦生 | 12980 | 4188 | 8792 | | |~|\n| 常朝阳 | 10536 | 3230 | 7306 | | |~|\n| 郭晓思 | 16696 | 5009 | 11687 | | |~|\n| 吴振海 | 10249 | 3229 | 7020 | | |~|\n| 张跃进 | 5617 | 1797 | 3820 | | |~|\n\n\n----\n\n| !{{{姓 名}}} | !{{{- 类 群 -}}} | !{{{2007年任务}}} | !{{{6月底完成}}} | !{{{7-12月完成}}} | !{{{数据进度}}} | !{{{照片进度}}} | !{{{拍照}}} | !{{{- 备 注 -}}} |\n| 陈彦生 | 合计 | 12980 | 4188 | 8792 | | | 王林忠 | |\n|~| 报春花科 | 3138 | | | | |~|~|\n|~| 杜鹃花科 | 3377 | | | | |~|~|\n|~| 木犀科 | 3859 | 3859 | | | |~|~|\n|~| 鹿蹄草科 | 329 | 329 | | | |~|~|\n|~| 山茱萸科 | 2229 | | | | |~|~|\n|~| 岩梅科 | 30 | | | | |~|~|\n|~| 桤叶树科 | 18 | | | | |~|~|\n\n\n----\n\n| !{{{姓 名}}} | !{{{- 类 群 -}}} | !{{{2007年任务}}} | !{{{6月底完成}}} | !{{{7-12月完成}}} | !{{{数据进度}}} | !{{{照片进度}}} | !{{{拍照}}} | !{{{- 备 注 -}}} |\n| 常朝阳 | 合计 | 10536 | 3230 | 7306 | | | 孙建钊 | |\n|~| 玄参科 | 4588 | | | | |~|~|\n|~| 萝藦科 | 2340 | | | | |~|~|\n|~| 旋花科 | 2216 | 2216 | | | |~|~|\n|~| 车前科 | 1014 | 1014 | | | |~|~|\n|~| 狸藻科 | 40 | | | | |~|~|\n|~| 爵床科 | 205 | | | | |~|~|\n|~| 透骨草科 | 133 | | | | |~|~|\n\n----\n\n| !{{{姓 名}}} | !{{{- 类 群 -}}} | !{{{2007年任务}}} | !{{{6月底完成}}} | !{{{7-12月完成}}} | !{{{数据进度}}} | !{{{照片进度}}} | !{{{拍照}}} | !{{{- 备 注 -}}} |\n| 郭晓思 | 合计 | 16696 | 5009 | 11687 | | | 李军超 | |\n|~| 忍冬科 | 12282 | 595 | 11687 | | |~|~|\n|~| 虎耳草科 | 4414 | 4414 | | | |~|~|\n\n----\n\n| !{{{姓 名}}} | !{{{- 类 群 -}}} | !{{{2007年任务}}} | !{{{6月底完成}}} | !{{{7-12月完成}}} | !{{{数据进度}}} | !{{{照片进度}}} | !{{{拍照}}} | !{{{- 备 注 -}}} |\n| 吴振海 | 合计 | 10249 | 3229 | 7020 | | | | |\n|~| 紫草科 | 3013 | 3013 | | | | 孙建钊 |~|\n|~| 马鞭草科 | 3107 | | | | | 吴振海 |~|\n|~| 茄科 | 2510 | | | | |~|~|\n|~| 苦苣苔科 | 749 | | | | |~|~|\n|~| 紫葳科 | 632 | | | | |~|~|\n|~| 列当科 | 216 | 216 | | | |~|~|\n|~| 胡麻科 | 22 | | | | |~|~|\n\n----\n\n| !{{{姓 名}}} | !{{{- 类 群 -}}} | !{{{2007年任务}}} | !{{{6月底完成}}} | !{{{7-12月完成}}} | !{{{数据进度}}} | !{{{照片进度}}} | !{{{拍照}}} | !{{{- 备 注 -}}} |\n| 张跃进 | 合计 | 5617 | 1797 | 3820 | | | 王林忠 | |\n|~| @@color(green):裸子植物@@ | 4829 | | | | |~|~|\n|~| 柏科| 1458 | | | | |~|~|\n|~| 松科| 1518 | 1518 | | | |~|~|\n|~| 红豆杉科| 279 | 279 | | | |~|~|\n|~| 罗汉松科| 42 | | | | |~|~|\n|~| 麻黄科| 447 | | | | |~|~|\n|~| 买麻藤科| 26 | | | | |~|~|\n|~| 南洋杉科| 1 | | | | |~|~|\n|~| 三尖杉科| 593 | | | | |~|~|\n|~| 杉科| 296 | | | | |~|~|\n|~| 苏铁科| 7 | | | | |~|~|\n|~| 银杏科| 108 | | | | |~|~|\n|~| 棕榈科| 54 | | | | |~|~|\n|~| @@color(green):木通科@@ | 788 | | | | |~|~|\n
王林忠任务\n| !{{{文件夹}}} | !{{{日期}}} | !{{{数量}}} | !{{{科属}}} |\n| WLZ-001 | 03-03 | 242 | 野茉莉 |\n| WLZ-002 | 03-05 | 450 | 木犀科 |\n| WLZ-003 | 03-07 | 426 | 木犀科 |\n| WLZ-004 | 03-11 | 445 | 木犀科 |\n| WLZ-005 | 03-14 | 465 | 木犀科 |\n| WLZ-006 | 03-25 | 457 | 木犀科 |\n| WLZ-007 | 04-01 | 382 | 木犀科 |\n| WLZ-008 | 04-11 | 456 | 木犀科 |\n| WLZ-009 | 04-12 | 450 | 木犀科 |\n| WLZ-010 | 04-15 | 463 | 木犀科 |\n| WLZ-011 | 04-15 | 186 | 木犀科 |\n| WLZ-012 | 04-16 | 468 | 马钱科 |\n| WLZ-013 | 04-24 | 496 | 马钱科 |\n| WLZ-014 | 04-24 | 95 | 马钱科 |\n| WLZ-015 | 04-25 | 507 | 龙胆科 |\n| WLZ-016 | 04-28 | 489 | 龙胆科 |\n| WLZ-017 | 05-05 | 512 | 龙胆科 |\n| WLZ-018 | 05-13 | 554 | 龙胆科 |\n| WLZ-019 | 05-13 | 524 | 龙胆科 |\n| WLZ-020 | 05-22 | 455 | 龙胆科 |\n| WLZ-021 | 06-25 | 479 | 夹竹桃科 |\n| WLZ-022 | 06-26 | 398 | 夹竹桃科 |\n\n\n\n孙建钊任务\n| !{{{文件夹}}} | !{{{日期}}} | !{{{数量}}} | !{{{科属}}} |\n| SJZ-001 | 03-05 | 492 | 仙人掌(13)、瑞香 |\n| SJZ-002 | 03-06 | 484 | 瑞香 |\n| SJZ-003 | 03-06 | 455 | 瑞香、胡颓子 |\n| SJZ-004 | 03-07 | 457 | 胡颓子 |\n| SJZ-005 | 03-08 | 468 | 胡颓子 |\n| SJZ-006 | 03-08 | 414 | 胡颓子 |\n| SJZ-007 | 03-09 | 456 | 胡颓子 |\n| SJZ-008 | 03-10 | 482 | 胡颓子、千屈菜 |\n| SJZ-009 | 03-11 | 456 | 海桑2、石榴、玉蕊、红树、蓝果树、珙桐、千屈菜53、八角枫(293-456) |\n| SJZ-010 | 03-12 | 439 | 八角枫 |\n| SJZ-011 | 03-13 | 455 | 八角枫 |\n\n\n孙建钊大巴山任务\n| !{{{文件夹}}} | !{{{日期}}} | !{{{数量}}} | !{{{科属}}} |\n| SJZ-BA-001 | 03-26 | 354 | 菊科 |\n| SJZ-BA-002 | 03-27 | 300 | 禾本科 |\n| SJZ-BA-003 | 03-28 | 131 | 伞形科61、莎草科62-82、堇菜科83-110、马钱科111-114、大风子科115-118、豆科119-123、桤叶树科124-127、川续断科127-128、灯心草科129、凤仙花科130、远志科131 |\n| SJZ-BA-004 | 04-08 | 454 | 菊科1份,其余为蕨类 |\n| SJZ-BA-005 | 04-08 | 129 | 蕨类 |\n| Vista F盘孙建钊-补充未录入的蕨类遗漏标本 | 07-14 | 208 | 蕨类 |\n| Vista F盘孙建钊-巴山标本(未录入) | 07-14 | 222 | 巴山 |\n\n\n
''任务完成时间: 上半年 6月10日 下半年 11月10日。''\n\n| 陈彦生 | 8科 1个专题 |安息香科、木犀科、马钱科、龙胆科、夹竹桃科、花荵科、玄参科、薯蓣科;以及巴山植物专库 |\n| 郭晓思 | 18科 |葫芦科、桔梗科、菱科、野牡丹科、桃金娘科、使君子科、八角枫科、红树科、玉蕊科、海桑科、石榴科、千屈菜科、胡颓子科、瑞香科、仙人掌科、鼠李科、锦葵科、椴树科 |\n| 吴振海 | 6科 |伞形科、五加科、柳叶菜科、小二仙草科、杉叶藻科、锁阳科 |\n| 张跃进 | 10科 |小檗科、防己科、木兰科、腊梅科、番荔枝科、肉豆蔻科、樟科、莲叶桐科、罂粟科、白花菜科 |\n\n| !{{{姓 名}}} | !{{{- 类 群 -}}} | !{{{2008年任务}}} | !{{{6月底完成}}} | !{{{7-12月完成}}} | !{{{数据进度}}} | !{{{照片进度}}} | !{{{拍照}}} | !{{{- 备 注 -}}} |\n| 陈彦生 | 合计 | 27646 | | | | | 王林忠 | |\n|~| 安息香科 | 600 | | | | |~|~|\n|~| 木犀科 | 4000 | | | | |~|~|\n|~| 马钱科 | 1100 | | | | |~|~|\n|~| 龙胆科 | 2523 | | | | |~|~|\n|~| 夹竹桃科 | 900 | | | | |~|~|\n|~| 花荵科 | 10 | | | | |~|~|\n|~| 玄参科 | 4600 | | | | |~|~|\n|~| 薯蓣科 | 913 | | | | |~|~|\n|~| 巴山专题 | 13000 | | | | |~|~|\n\n| !{{{姓 名}}} | !{{{- 类 群 -}}} | !{{{2008年任务}}} | !{{{6月底完成}}} | !{{{7-12月完成}}} | !{{{数据进度}}} | !{{{照片进度}}} | !{{{拍照}}} | !{{{- 备 注 -}}} |\n| 郭晓思 | 合计 | 16088 | | | | | | |\n|~| 葫芦科 | 1320 | | | | |~|~|\n|~| 桔梗科 | 2522 | | | | |~|~|\n|~| 菱科 | 40 | | | | |~|~|\n|~| 野牡丹科 | 511 | | | | |~|~|\n|~| 桃金娘科 | 300 | | | | |~|~|\n|~| 使君子科 | 40 | | | | |~|~|\n|~| 八角枫科 | 600 | | | | |~|~|\n|~| 红树科 | 20 | | | | |~|~|\n|~| 玉蕊科 | 1 | | | | |~|~|\n|~| 海桑科 | 2 | | | | |~|~|\n|~| 石榴科 | 121 | | | | |~|~|\n|~| 千屈菜科 | 500 | | | | |~|~|\n|~| 胡颓子科 | 2041 | | | | |~|~|\n|~| 瑞香科 | 1105 | | | | |~|~|\n|~| 仙人掌科 | 15 | | | | |~|~|\n|~| 鼠李科 | 4140 | | | | |~|~|\n|~| 锦葵科 | 1410 | | | | |~|~|\n|~| 椴树科 | 1400 | | | | |~|~|\n\n| !{{{姓 名}}} | !{{{- 类 群 -}}} | !{{{2008年任务}}} | !{{{6月底完成}}} | !{{{7-12月完成}}} | !{{{数据进度}}} | !{{{照片进度}}} | !{{{拍照}}} | !{{{- 备 注 -}}} |\n| 吴振海 | 合计 | 10645 | | | | | | |\n|~| 伞形科 | 6375 | | | | |~|~|\n|~| 五加科 | 2644 | | | | |~|~|\n|~| 柳叶菜科 | 1500 | | | | |~|~|\n|~| 小二仙草科 | 61 | | | | |~|~|\n|~| 杉叶藻科 | 50 | | | | |~|~|\n|~| 锁阳科 | 15 | | | | |~|~|\n\n| !{{{姓 名}}} | !{{{- 类 群 -}}} | !{{{2008年任务}}} | !{{{6月底完成}}} | !{{{7-12月完成}}} | !{{{数据进度}}} | !{{{照片进度}}} | !{{{拍照}}} | !{{{- 备 注 -}}} |\n| 张跃进 | 合计 | 9274 | | | | | | |\n|~| 小檗科 | 1942 | | | | |~|~|\n|~| 防己科 | 366 | | | | |~|~|\n|~| 木兰科 | 1600 | | | | |~|~|\n|~| 腊梅科 | 1 | | | | |~|~|\n|~| 番荔枝科 | 110 | | | | |~|~|\n|~| 肉豆蔻科 | 8 | | | | |~|~|\n|~| 樟科 | 3330 | | | | |~|~|\n|~| 莲叶桐科 | 10 | | | | |~|~|\n|~| 罂粟科 | 1817 | | | | |~|~|\n|~| 白花菜科 | 90 | | | | |~|~|\n\n总体合计 63653 份\n
Type the text for [[Bruce]]
http://ylcjp.tiddlyspot.com/\nhttp://ieditor.tiddlyspot.com/
[[2008 科技部任务]]\n[[本站资源]]\n[[网址荟萃]]
[[站内消息]]\n[[本站资源]]\n[[我的热点网址|热点网址]]\n[[任务安排|2007年科技部标本数字化项目任务安排]]\n[[植物学科普|植物学科普]]\n[[工作设想|工作设想]]\n[[植物分类学]]\n[[虚拟植物标本馆]]\n[[网址荟萃]]\n[[BruceWiki]]\n\n\n版权所有 \n[[西北农林科技大学|http://www.nwsuaf.edu.cn]]\n[[植物标本馆|http://wuk.plantlib.net]]\n
-- WUK Herbarium Work Space > 西北农林科技大学植物标本馆内部工作网
{{{Plantlib.net}}}
给马克平、覃海宁的信\n\n\n表达WUK的战略(与CVH紧密合作,背靠大树好乘凉;成为技术上最好的VH),和自己的强烈参与愿望,以及覃海宁老师的愿望。\n\n介绍自己的特点与工作能力。\n\n1、 在CVH建立WUK的镜像系统,作合作机制、管理、技术等方面的探索与示范;\n(比如数据同步的机制与技术等,需要对软件系统作设计上的调整,可能需要开发用户认证、同步方面的部分开发工作)\n2、 分布式Portal系统开发\n建立跨数据库、应用系统、地域的多系统集成门户软件系统。\n核心特点是:\n(1) 跨域集成:可以集成跨地域、跨平台的多种数据库应用项目,提供综合的应用和一站式界面,无需用户在URL间来回跳转。\n(2) 自由参加:被集成者可以控制共享的范围与程度,不会觉得被“控制”或“利用”,它有自主性,有利于实现真正的“共享”,激发合作兴趣,实现长期合作的目的。新的数据库项目只要在Portal中注册,便可以被集成进来。也可以在Portal中注销自己的项目,取消共享。\n(3) 定制应用:集成多个数据库项目数据,以XML和XSLT、AppML等技术实现新的功能和用户界面,突破原有应用范围。\n\n我已有系统的详细构思。\n\n3、 其它特色系统的开发(今后几年的工作设想)\n(1) 通用Virtual Herbarium管理系统系统\n希望最终推出一个Open Source 的软件系统\n(2) 基于Flash 技术的Virtual Herbarium 人机界面\n以多媒体、虚拟现实技术展现标本浏览台,打造个性化的网上标本馆\n(3) 全文版的电子植物志\n
/***\nRequired by Tiddlyspot\n***/\n//{{{\n\nconfig.options.chkHttpReadOnly = false; // make it so you can by default see edit controls via http\n\nif (window.location.protocol != "file:")\n config.options.chkGTDLazyAutoSave = false; // disable autosave in d3\n\nconfig.tiddlyspotSiteId = 'plantlib';\n\n// probably will need to redo this for TW 2.2\nwith (config.shadowTiddlers) {\n SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';\n SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");\n OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");\n DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[Welcome to Tiddlyspot]] ");\n MainMenu = MainMenu.replace(/^/,"[[Welcome to Tiddlyspot]] ");\n}\n\nmerge(config.shadowTiddlers,{\n\n'Welcome to Tiddlyspot':[\n "This document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //What now?// @@ Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",\n "<<tiddler TspotControls>>",\n "@@font-weight:bold;font-size:1.3em;color:#444; //Working online// @@ You can edit this ~TiddlyWiki right now, and save your changes using the \s"save to web\s" button in the column on the right.",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// @@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click \s"upload\s" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //Help!// @@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",\n "",\n "@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// @@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."\n].join("\sn"),\n\n'TspotControls':[\n "| tiddlyspot password:|<<option pasUploadPassword>>|",\n "| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<<br>>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",\n "| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[announcements|http://announce.tiddlyspot.com/]], [[blog|http://tiddlyspot.com/blog/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"\n].join("\sn"),\n\n'TspotSidebar':[\n "<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"\n].join("\sn"),\n\n'TspotOptions':[\n "tiddlyspot password:",\n "<<option pasUploadPassword>>",\n ""\n].join("\sn")\n\n});\n//}}}\n
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |\n| 20/3/2007 22:28:6 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 20/3/2007 22:52:39 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 21/3/2007 10:21:0 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 21/3/2007 10:44:39 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 21/3/2007 11:28:36 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 21/3/2007 16:37:59 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 21/3/2007 23:14:22 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 22/3/2007 9:30:49 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 23/3/2007 9:26:11 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 23/3/2007 10:58:6 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 23/3/2007 14:40:55 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 23/3/2007 15:6:26 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 23/3/2007 16:25:41 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 26/3/2007 10:17:9 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 27/3/2007 10:48:43 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 27/3/2007 14:36:32 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 28/3/2007 11:26:11 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 28/3/2007 16:5:36 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 28/3/2007 17:40:24 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 28/3/2007 18:38:9 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 29/3/2007 10:47:43 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 4/4/2007 10:14:27 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 4/4/2007 11:14:51 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 4/4/2007 14:46:55 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 9/4/2007 16:8:35 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 16/4/2007 16:3:37 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 16/4/2007 16:7:6 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 13/11/2007 9:31:36 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 13/11/2007 9:33:16 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 13/11/2007 10:32:8 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 13/11/2007 11:52:44 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 13/11/2007 15:36:53 | plantlib | [[/|http://plantlib.tiddlyspot.com/#%E6%A4%8D%E7%89%A9%E5%AD%A6%E7%A7%91%E6%99%AE]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 13/11/2007 15:48:49 | plantlib | [[/|http://plantlib.tiddlyspot.com/#%E6%A4%8D%E7%89%A9%E5%AD%A6%E7%A7%91%E6%99%AE]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 13/11/2007 15:59:51 | plantlib | [[/|http://plantlib.tiddlyspot.com/#%E6%A4%8D%E7%89%A9%E5%AD%A6%E7%A7%91%E6%99%AE]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 20/11/2007 9:9:17 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 20/11/2007 9:10:37 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 20/11/2007 9:49:33 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 20/11/2007 14:38:12 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 20/11/2007 18:59:22 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 21/11/2007 14:46:20 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 21/11/2007 16:46:11 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 22/11/2007 8:47:28 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 22/11/2007 16:14:35 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 23/11/2007 8:40:57 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 24/11/2007 15:2:54 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 24/11/2007 16:42:31 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 26/11/2007 10:50:54 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 26/11/2007 16:46:32 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 5/12/2007 11:28:39 | plantlib | [[/|http://plantlib.tiddlyspot.com/#2007%E5%B9%B4%E7%A7%91%E6%8A%80%E9%83%A8%E6%A0%87%E6%9C%AC%E6%95%B0%E5%AD%97%E5%8C%96%E9%A1%B9%E7%9B%AE%E4%BB%BB%E5%8A%A1%E5%AE%89%E6%8E%92]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 5/12/2007 11:38:1 | plantlib | [[/|http://plantlib.tiddlyspot.com/#2007%E5%B9%B4%E7%A7%91%E6%8A%80%E9%83%A8%E6%A0%87%E6%9C%AC%E6%95%B0%E5%AD%97%E5%8C%96%E9%A1%B9%E7%9B%AE%E4%BB%BB%E5%8A%A1%E5%AE%89%E6%8E%92]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 5/12/2007 12:1:13 | plantlib | [[/|http://plantlib.tiddlyspot.com/#2007%E5%B9%B4%E7%A7%91%E6%8A%80%E9%83%A8%E6%A0%87%E6%9C%AC%E6%95%B0%E5%AD%97%E5%8C%96%E9%A1%B9%E7%9B%AE%E4%BB%BB%E5%8A%A1%E5%AE%89%E6%8E%92]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 5/12/2007 12:7:3 | plantlib | [[/|http://plantlib.tiddlyspot.com/#2007%E5%B9%B4%E7%A7%91%E6%8A%80%E9%83%A8%E6%A0%87%E6%9C%AC%E6%95%B0%E5%AD%97%E5%8C%96%E9%A1%B9%E7%9B%AE%E4%BB%BB%E5%8A%A1%E5%AE%89%E6%8E%92]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 5/12/2007 15:13:55 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 5/12/2007 15:33:27 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 5/12/2007 15:34:18 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 5/12/2007 17:51:47 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 6/12/2007 10:45:45 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 6/12/2007 12:7:40 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 7/12/2007 8:48:5 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 7/12/2007 11:58:22 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 9/12/2007 15:36:28 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 9/12/2007 16:38:56 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 9/12/2007 16:46:7 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 10/12/2007 9:20:26 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 10/12/2007 9:37:29 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 15/12/2007 11:4:2 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 15/12/2007 17:48:46 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 15/12/2007 23:50:3 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 16/12/2007 0:55:1 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 16/12/2007 1:9:7 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 16/12/2007 1:26:4 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 16/12/2007 1:55:39 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 16/12/2007 7:8:57 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 16/12/2007 7:16:27 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 16/12/2007 7:35:45 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 16/12/2007 7:56:30 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 16/12/2007 14:33:39 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 24/12/2007 9:20:58 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 24/12/2007 11:39:53 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 29/2/2008 8:18:0 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 29/2/2008 9:14:7 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 29/2/2008 11:2:53 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 3/3/2008 16:26:44 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 5/3/2008 10:26:37 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 5/3/2008 12:9:44 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 5/3/2008 16:33:34 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 6/3/2008 8:59:33 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 6/3/2008 14:50:56 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 7/3/2008 9:52:31 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 7/3/2008 11:1:3 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 8/3/2008 10:7:16 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 9/3/2008 12:8:24 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 10/3/2008 15:54:21 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 11/3/2008 16:17:47 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 11/3/2008 16:28:24 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 12/3/2008 11:40:14 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 13/3/2008 11:21:16 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 14/3/2008 10:47:42 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 25/3/2008 16:3:58 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 27/3/2008 8:40:16 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 27/3/2008 9:9:38 | plantlib | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 28/3/2008 16:27:46 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 1/4/2008 16:55:53 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 8/4/2008 16:38:14 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 8/4/2008 17:55:18 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 14/4/2008 10:37:56 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 15/4/2008 10:38:57 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 16/4/2008 17:11:10 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 24/4/2008 9:57:21 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 24/4/2008 16:18:54 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 25/4/2008 18:5:15 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 28/4/2008 17:5:3 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 5/5/2008 10:49:47 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 13/5/2008 17:40:26 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 15/5/2008 11:4:40 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 22/5/2008 11:50:14 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 25/6/2008 11:55:16 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 26/6/2008 16:23:36 | Bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 5/7/2008 18:5:52 | bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 14/7/2008 10:46:37 | bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 14/7/2008 17:24:10 | bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 11/11/2008 18:31:23 | bruce | [[/|http://plantlib.tiddlyspot.com/]] | [[store.cgi|http://plantlib.tiddlyspot.com/store.cgi]] | . | index.html | . |
/***\n|''Name:''|UploadPlugin|\n|''Description:''|Save to web a TiddlyWiki|\n|''Version:''|3.4.5|\n|''Date:''|Oct 15, 2006|\n|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|\n|''Documentation:''|http://tiddlywiki.bidix.info/#UploadDoc|\n|''Author:''|BidiX (BidiX (at) bidix (dot) info)|\n|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|\n|''~CoreVersion:''|2.0.0|\n|''Browser:''|Firefox 1.5; InternetExplorer 6.0; Safari|\n|''Include:''|config.lib.file; config.lib.log; config.lib.options; PasswordTweak|\n|''Require:''|[[UploadService|http://tiddlywiki.bidix.info/#UploadService]]|\n***/\n//{{{\nversion.extensions.UploadPlugin = {\n major: 3, minor: 4, revision: 5, \n date: new Date(2006,9,15),\n source: 'http://tiddlywiki.bidix.info/#UploadPlugin',\n documentation: 'http://tiddlywiki.bidix.info/#UploadDoc',\n author: 'BidiX (BidiX (at) bidix (dot) info',\n license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',\n coreVersion: '2.0.0',\n browser: 'Firefox 1.5; InternetExplorer 6.0; Safari'\n};\n//}}}\n\n////+++!![config.lib.file]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.file) config.lib.file= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\nconfig.lib.file.dirname = function (filePath) {\n var lastpos;\n if ((lastpos = filePath.lastIndexOf("/")) != -1) {\n return filePath.substring(0, lastpos);\n } else {\n return filePath.substring(0, filePath.lastIndexOf("\s\s"));\n }\n};\nconfig.lib.file.basename = function (filePath) {\n var lastpos;\n if ((lastpos = filePath.lastIndexOf("#")) != -1) \n filePath = filePath.substring(0, lastpos);\n if ((lastpos = filePath.lastIndexOf("/")) != -1) {\n return filePath.substring(lastpos + 1);\n } else\n return filePath.substring(filePath.lastIndexOf("\s\s")+1);\n};\nwindow.basename = function() {return "@@deprecated@@";};\n//}}}\n////===\n\n////+++!![config.lib.log]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.log) config.lib.log= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 1}, \n date: new Date(2006,8,19)\n};\nconfig.lib.Log = function(tiddlerTitle, logHeader) {\n if (version.major < 2)\n this.tiddler = store.tiddlers[tiddlerTitle];\n else\n this.tiddler = store.getTiddler(tiddlerTitle);\n if (!this.tiddler) {\n this.tiddler = new Tiddler();\n this.tiddler.title = tiddlerTitle;\n this.tiddler.text = "| !date | !user | !location |" + logHeader;\n this.tiddler.created = new Date();\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[tiddlerTitle] = this.tiddler;\n else\n store.addTiddler(this.tiddler);\n }\n return this;\n};\n\nconfig.lib.Log.prototype.newLine = function (line) {\n var now = new Date();\n var newText = "| ";\n newText += now.getDate()+"/"+(now.getMonth()+1)+"/"+now.getFullYear() + " ";\n newText += now.getHours()+":"+now.getMinutes()+":"+now.getSeconds()+" | ";\n newText += config.options.txtUserName + " | ";\n var location = document.location.toString();\n var filename = config.lib.file.basename(location);\n if (!filename) filename = '/';\n newText += "[["+filename+"|"+location + "]] |";\n this.tiddler.text = this.tiddler.text + "\sn" + newText;\n this.addToLine(line);\n};\n\nconfig.lib.Log.prototype.addToLine = function (text) {\n this.tiddler.text = this.tiddler.text + text;\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[this.tiddler.tittle] = this.tiddler;\n else {\n store.addTiddler(this.tiddler);\n story.refreshTiddler(this.tiddler.title);\n store.notify(this.tiddler.title, true);\n }\n if (version.major < 2)\n store.notifyAll(); \n};\n//}}}\n////===\n\n////+++!![config.lib.options]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.options) config.lib.options = {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\n\nconfig.lib.options.init = function (name, defaultValue) {\n if (!config.options[name]) {\n config.options[name] = defaultValue;\n saveOptionCookie(name);\n }\n};\n//}}}\n////===\n\n////+++!![PasswordTweak]\n\n//{{{\nversion.extensions.PasswordTweak = {\n major: 1, minor: 0, revision: 3, date: new Date(2006,8,30),\n type: 'tweak',\n source: 'http://tiddlywiki.bidix.info/#PasswordTweak'\n};\n//}}}\n/***\n!!config.macros.option\n***/\n//{{{\nconfig.macros.option.passwordCheckboxLabel = "Save this password on this computer";\nconfig.macros.option.passwordType = "password"; // password | text\n\nconfig.macros.option.onChangeOption = function(e)\n{\n var opt = this.getAttribute("option");\n var elementType,valueField;\n if(opt) {\n switch(opt.substr(0,3)) {\n case "txt":\n elementType = "input";\n valueField = "value";\n break;\n case "pas":\n elementType = "input";\n valueField = "value";\n break;\n case "chk":\n elementType = "input";\n valueField = "checked";\n break;\n }\n config.options[opt] = this[valueField];\n saveOptionCookie(opt);\n var nodes = document.getElementsByTagName(elementType);\n for(var t=0; t<nodes.length; t++) \n {\n var optNode = nodes[t].getAttribute("option");\n if (opt == optNode) \n nodes[t][valueField] = this[valueField];\n }\n }\n return(true);\n};\n\nconfig.macros.option.handler = function(place,macroName,params)\n{\n var opt = params[0];\n if(config.options[opt] === undefined) {\n return;}\n var c;\n switch(opt.substr(0,3)) {\n case "txt":\n c = document.createElement("input");\n c.onkeyup = this.onChangeOption;\n c.setAttribute ("option",opt);\n c.className = "txtOptionInput "+opt;\n place.appendChild(c);\n c.value = config.options[opt];\n break;\n case "pas":\n // input password\n c = document.createElement ("input");\n c.setAttribute("type",config.macros.option.passwordType);\n c.onkeyup = this.onChangeOption;\n c.setAttribute("option",opt);\n c.className = "pasOptionInput "+opt;\n place.appendChild(c);\n c.value = config.options[opt];\n // checkbox link with this password "save this password on this computer"\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option","chk"+opt);\n c.className = "chkOptionInput "+opt;\n place.appendChild(c);\n c.checked = config.options["chk"+opt];\n // text savePasswordCheckboxLabel\n place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));\n break;\n case "chk":\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option",opt);\n c.className = "chkOptionInput "+opt;\n place.appendChild(c);\n c.checked = config.options[opt];\n break;\n }\n};\n//}}}\n/***\n!! Option cookie stuff\n***/\n//{{{\nwindow.loadOptionsCookie_orig_PasswordTweak = window.loadOptionsCookie;\nwindow.loadOptionsCookie = function()\n{\n var cookies = document.cookie.split(";");\n for(var c=0; c<cookies.length; c++) {\n var p = cookies[c].indexOf("=");\n if(p != -1) {\n var name = cookies[c].substr(0,p).trim();\n var value = cookies[c].substr(p+1).trim();\n switch(name.substr(0,3)) {\n case "txt":\n config.options[name] = unescape(value);\n break;\n case "pas":\n config.options[name] = unescape(value);\n break;\n case "chk":\n config.options[name] = value == "true";\n break;\n }\n }\n }\n};\n\nwindow.saveOptionCookie_orig_PasswordTweak = window.saveOptionCookie;\nwindow.saveOptionCookie = function(name)\n{\n var c = name + "=";\n switch(name.substr(0,3)) {\n case "txt":\n c += escape(config.options[name].toString());\n break;\n case "chk":\n c += config.options[name] ? "true" : "false";\n // is there an option link with this chk ?\n if (config.options[name.substr(3)]) {\n saveOptionCookie(name.substr(3));\n }\n break;\n case "pas":\n if (config.options["chk"+name]) {\n c += escape(config.options[name].toString());\n } else {\n c += "";\n }\n break;\n }\n c += "; expires=Fri, 1 Jan 2038 12:00:00 UTC; path=/";\n document.cookie = c;\n};\n//}}}\n/***\n!! Initializations\n***/\n//{{{\n// define config.options.pasPassword\nif (!config.options.pasPassword) {\n config.options.pasPassword = 'defaultPassword';\n window.saveOptionCookie('pasPassword');\n}\n// since loadCookies is first called befor password definition\n// we need to reload cookies\nwindow.loadOptionsCookie();\n//}}}\n////===\n\n////+++!![config.macros.upload]\n\n//{{{\nconfig.macros.upload = {\n accessKey: "U",\n formName: "UploadPlugin",\n contentType: "text/html;charset=UTF-8",\n defaultStoreScript: "store.php"\n};\n\n// only this two configs need to be translated\nconfig.macros.upload.messages = {\n aboutToUpload: "About to upload TiddlyWiki to %0",\n backupFileStored: "Previous file backuped in %0",\n crossDomain: "Certainly a cross-domain isue: access to an other site isn't allowed",\n errorDownloading: "Error downloading",\n errorUploadingContent: "Error uploading content",\n fileLocked: "Files is locked: You are not allowed to Upload",\n fileNotFound: "file to upload not found",\n fileNotUploaded: "File %0 NOT uploaded",\n mainFileUploaded: "Main TiddlyWiki file uploaded to %0",\n passwordEmpty: "Unable to upload, your password is empty",\n urlParamMissing: "url param missing",\n rssFileNotUploaded: "RssFile %0 NOT uploaded",\n rssFileUploaded: "Rss File uploaded to %0"\n};\n\nconfig.macros.upload.label = {\n promptOption: "Save and Upload this TiddlyWiki with UploadOptions",\n promptParamMacro: "Save and Upload this TiddlyWiki in %0",\n saveLabel: "save to web", \n saveToDisk: "save to disk",\n uploadLabel: "upload" \n};\n\nconfig.macros.upload.handler = function(place,macroName,params){\n // parameters initialization\n var storeUrl = params[0];\n var toFilename = params[1];\n var backupDir = params[2];\n var uploadDir = params[3];\n var username = params[4];\n var password; // for security reason no password as macro parameter\n var label;\n if (document.location.toString().substr(0,4) == "http")\n label = this.label.saveLabel;\n else\n label = this.label.uploadLabel;\n var prompt;\n if (storeUrl) {\n prompt = this.label.promptParamMacro.toString().format([this.toDirUrl(storeUrl, uploadDir, username)]);\n }\n else {\n prompt = this.label.promptOption;\n }\n createTiddlyButton(place, label, prompt, \n function () {\n config.macros.upload.upload(storeUrl, toFilename, uploadDir, backupDir, username, password); \n return false;}, \n null, null, this.accessKey);\n};\nconfig.macros.upload.UploadLog = function() {\n return new config.lib.Log('UploadLog', " !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |" );\n};\nconfig.macros.upload.UploadLog.prototype = config.lib.Log.prototype;\nconfig.macros.upload.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir, backupDir) {\n var line = " [[" + config.lib.file.basename(storeUrl) + "|" + storeUrl + "]] | ";\n line += uploadDir + " | " + toFilename + " | " + backupDir + " |";\n this.newLine(line);\n};\nconfig.macros.upload.UploadLog.prototype.endUpload = function() {\n this.addToLine(" Ok |");\n};\nconfig.macros.upload.basename = config.lib.file.basename;\nconfig.macros.upload.dirname = config.lib.file.dirname;\nconfig.macros.upload.toRootUrl = function (storeUrl, username)\n{\n return root = (this.dirname(storeUrl)?this.dirname(storeUrl):this.dirname(document.location.toString()));\n}\nconfig.macros.upload.toDirUrl = function (storeUrl, uploadDir, username)\n{\n var root = this.toRootUrl(storeUrl, username);\n if (uploadDir && uploadDir != '.')\n root = root + '/' + uploadDir;\n return root;\n}\nconfig.macros.upload.toFileUrl = function (storeUrl, toFilename, uploadDir, username)\n{\n return this.toDirUrl(storeUrl, uploadDir, username) + '/' + toFilename;\n}\nconfig.macros.upload.upload = function(storeUrl, toFilename, uploadDir, backupDir, username, password)\n{\n // parameters initialization\n storeUrl = (storeUrl ? storeUrl : config.options.txtUploadStoreUrl);\n toFilename = (toFilename ? toFilename : config.options.txtUploadFilename);\n backupDir = (backupDir ? backupDir : config.options.txtUploadBackupDir);\n uploadDir = (uploadDir ? uploadDir : config.options.txtUploadDir);\n username = (username ? username : config.options.txtUploadUserName);\n password = config.options.pasUploadPassword; // for security reason no password as macro parameter\n if (!password || password === '') {\n alert(config.macros.upload.messages.passwordEmpty);\n return;\n }\n if (storeUrl === '') {\n storeUrl = config.macros.upload.defaultStoreScript;\n }\n if (config.lib.file.dirname(storeUrl) === '') {\n storeUrl = config.lib.file.dirname(document.location.toString())+'/'+storeUrl;\n }\n if (toFilename === '') {\n toFilename = config.lib.file.basename(document.location.toString());\n }\n\n clearMessage();\n // only for forcing the message to display\n if (version.major < 2)\n store.notifyAll();\n if (!storeUrl) {\n alert(config.macros.upload.messages.urlParamMissing);\n return;\n }\n // Check that file is not locked\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n if (BidiX.GroupAuthoring.lock.isLocked() && !BidiX.GroupAuthoring.lock.isMyLock()) {\n alert(config.macros.upload.messages.fileLocked);\n return;\n }\n }\n \n var log = new this.UploadLog();\n log.startUpload(storeUrl, toFilename, uploadDir, backupDir);\n if (document.location.toString().substr(0,5) == "file:") {\n saveChanges();\n }\n var toDir = config.macros.upload.toDirUrl(storeUrl, toFilename, uploadDir, username);\n displayMessage(config.macros.upload.messages.aboutToUpload.format([toDir]), toDir);\n this.uploadChanges(storeUrl, toFilename, uploadDir, backupDir, username, password);\n if(config.options.chkGenerateAnRssFeed) {\n //var rssContent = convertUnicodeToUTF8(generateRss());\n var rssContent = generateRss();\n var rssPath = toFilename.substr(0,toFilename.lastIndexOf(".")) + ".xml";\n this.uploadContent(rssContent, storeUrl, rssPath, uploadDir, '', username, password, \n function (responseText) {\n if (responseText.substring(0,1) != '0') {\n displayMessage(config.macros.upload.messages.rssFileNotUploaded.format([rssPath]));\n }\n else {\n var toFileUrl = config.macros.upload.toFileUrl(storeUrl, rssPath, uploadDir, username);\n displayMessage(config.macros.upload.messages.rssFileUploaded.format(\n [toFileUrl]), toFileUrl);\n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n });\n }\n return;\n};\n\nconfig.macros.upload.uploadChanges = function(storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var original;\n if (document.location.toString().substr(0,4) == "http") {\n original = this.download(storeUrl, toFilename, uploadDir, backupDir, username, password);\n return;\n }\n else {\n // standard way : Local file\n \n original = loadFile(getLocalPath(document.location.toString()));\n if(window.Components) {\n // it's a mozilla browser\n try {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]\n .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);\n converter.charset = "UTF-8";\n original = converter.ConvertToUnicode(original);\n }\n catch(e) {\n }\n }\n }\n //DEBUG alert(original);\n this.uploadChangesFrom(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password);\n};\n\nconfig.macros.upload.uploadChangesFrom = function(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var startSaveArea = '<div id="' + 'storeArea">'; // Split up into two so that indexOf() of this source doesn't find it\n var endSaveArea = '</d' + 'iv>';\n // Locate the storeArea div's\n var posOpeningDiv = original.indexOf(startSaveArea);\n var posClosingDiv = original.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1))\n {\n alert(config.messages.invalidFileError.format([document.location.toString()]));\n return;\n }\n var revised = original.substr(0,posOpeningDiv + startSaveArea.length) + \n allTiddlersAsHtml() + "\sn\st\st" +\n original.substr(posClosingDiv);\n var newSiteTitle;\n if(version.major < 2){\n newSiteTitle = (getElementText("siteTitle") + " - " + getElementText("siteSubtitle")).htmlEncode();\n } else {\n newSiteTitle = (wikifyPlain ("SiteTitle") + " - " + wikifyPlain ("SiteSubtitle")).htmlEncode();\n }\n\n revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");\n revised = revised.replaceChunk("<!--PRE-HEAD-START--"+">","<!--PRE-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPreHead","") + "\sn");\n revised = revised.replaceChunk("<!--POST-HEAD-START--"+">","<!--POST-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPostHead","") + "\sn");\n revised = revised.replaceChunk("<!--PRE-BODY-START--"+">","<!--PRE-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPreBody","") + "\sn");\n revised = revised.replaceChunk("<!--POST-BODY-START--"+">","<!--POST-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPostBody","") + "\sn");\n\n var response = this.uploadContent(revised, storeUrl, toFilename, uploadDir, backupDir, \n username, password, function (responseText) {\n if (responseText.substring(0,1) != '0') {\n alert(responseText);\n displayMessage(config.macros.upload.messages.fileNotUploaded.format([getLocalPath(document.location.toString())]));\n }\n else {\n if (uploadDir !== '') {\n toFilename = uploadDir + "/" + config.macros.upload.basename(toFilename);\n } else {\n toFilename = config.macros.upload.basename(toFilename);\n }\n var toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);\n if (responseText.indexOf("destfile:") > 0) {\n var destfile = responseText.substring(responseText.indexOf("destfile:")+9, \n responseText.indexOf("\sn", responseText.indexOf("destfile:")));\n toFileUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + destfile;\n }\n else {\n toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);\n }\n displayMessage(config.macros.upload.messages.mainFileUploaded.format(\n [toFileUrl]), toFileUrl);\n if (backupDir && responseText.indexOf("backupfile:") > 0) {\n var backupFile = responseText.substring(responseText.indexOf("backupfile:")+11, \n responseText.indexOf("\sn", responseText.indexOf("backupfile:")));\n toBackupUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + backupFile;\n displayMessage(config.macros.upload.messages.backupFileStored.format(\n [toBackupUrl]), toBackupUrl);\n }\n var log = new config.macros.upload.UploadLog();\n log.endUpload();\n store.setDirty(false);\n // erase local lock\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n BidiX.GroupAuthoring.lock.eraseLock();\n // change mtime with new mtime after upload\n var mtime = responseText.substr(responseText.indexOf("mtime:")+6);\n BidiX.GroupAuthoring.lock.mtime = mtime;\n }\n \n \n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n }\n );\n};\n\nconfig.macros.upload.uploadContent = function(content, storeUrl, toFilename, uploadDir, backupDir, \n username, password, callbackFn) {\n var boundary = "---------------------------"+"AaB03x"; \n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n if (window.netscape){\n try {\n if (document.location.toString().substr(0,4) != "http") {\n netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');}\n }\n catch (e) {}\n } \n //DEBUG alert("user["+config.options.txtUploadUserName+"] password[" + config.options.pasUploadPassword + "]");\n // compose headers data\n var sheader = "";\n sheader += "--" + boundary + "\sr\snContent-disposition: form-data; name=\s"";\n sheader += config.macros.upload.formName +"\s"\sr\sn\sr\sn";\n sheader += "backupDir="+backupDir\n +";user=" + username \n +";password=" + password\n +";uploaddir=" + uploadDir;\n // add lock attributes to sheader\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n var l = BidiX.GroupAuthoring.lock.myLock;\n sheader += ";lockuser=" + l.user\n + ";mtime=" + l.mtime\n + ";locktime=" + l.locktime;\n }\n sheader += ";;\sr\sn"; \n sheader += "\sr\sn" + "--" + boundary + "\sr\sn";\n sheader += "Content-disposition: form-data; name=\s"userfile\s"; filename=\s""+toFilename+"\s"\sr\sn";\n sheader += "Content-Type: " + config.macros.upload.contentType + "\sr\sn";\n sheader += "Content-Length: " + content.length + "\sr\sn\sr\sn";\n // compose trailer data\n var strailer = new String();\n strailer = "\sr\sn--" + boundary + "--\sr\sn";\n //strailer = "--" + boundary + "--\sr\sn";\n var data;\n data = sheader + content + strailer;\n //request.open("POST", storeUrl, true, username, password);\n try {\n request.open("POST", storeUrl, true); \n }\n catch(e) {\n alert(config.macros.upload.messages.crossDomain + "\snError:" +e);\n exit;\n }\n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if (request.status == 200)\n callbackFn(request.responseText);\n else\n alert(config.macros.upload.messages.errorUploadingContent + "\snStatus: "+request.status.statusText);\n }\n };\n request.setRequestHeader("Content-Length",data.length);\n request.setRequestHeader("Content-Type","multipart/form-data; boundary="+boundary);\n request.send(data); \n};\n\n\nconfig.macros.upload.download = function(uploadUrl, uploadToFilename, uploadDir, uploadBackupDir, \n username, password) {\n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n try {\n if (uploadUrl.substr(0,4) == "http") {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");\n }\n else {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n }\n } catch (e) { }\n //request.open("GET", document.location.toString(), true, username, password);\n try {\n request.open("GET", document.location.toString(), true);\n }\n catch(e) {\n alert(config.macros.upload.messages.crossDomain + "\snError:" +e);\n exit;\n }\n \n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if(request.status == 200) {\n config.macros.upload.uploadChangesFrom(request.responseText, uploadUrl, \n uploadToFilename, uploadDir, uploadBackupDir, username, password);\n }\n else\n alert(config.macros.upload.messages.errorDownloading.format(\n [document.location.toString()]) + "\snStatus: "+request.status.statusText);\n }\n };\n request.send(null);\n};\n\n//}}}\n////===\n\n////+++!![Initializations]\n\n//{{{\nconfig.lib.options.init('txtUploadStoreUrl','store.php');\nconfig.lib.options.init('txtUploadFilename','');\nconfig.lib.options.init('txtUploadDir','');\nconfig.lib.options.init('txtUploadBackupDir','');\nconfig.lib.options.init('txtUploadUserName',config.options.txtUserName);\nconfig.lib.options.init('pasUploadPassword','');\nsetStylesheet(\n ".pasOptionInput {width: 11em;}\sn"+\n ".txtOptionInput.txtUploadStoreUrl {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadFilename {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadDir {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadBackupDir {width: 25em;}\sn"+\n "",\n "UploadOptionsStyles");\nif (document.location.toString().substr(0,4) == "http") {\n config.options.chkAutoSave = false; \n saveOptionCookie('chkAutoSave');\n}\nconfig.shadowTiddlers.UploadDoc = "[[Full Documentation|http://tiddlywiki.bidix.info/l#UploadDoc ]]\sn"; \n\n//}}}\n////===\n\n////+++!![Core Hijacking]\n\n//{{{\nconfig.macros.saveChanges.label_orig_UploadPlugin = config.macros.saveChanges.label;\nconfig.macros.saveChanges.label = config.macros.upload.label.saveToDisk;\n\nconfig.macros.saveChanges.handler_orig_UploadPlugin = config.macros.saveChanges.handler;\n\nconfig.macros.saveChanges.handler = function(place)\n{\n if ((!readOnly) && (document.location.toString().substr(0,4) != "http"))\n createTiddlyButton(place,this.label,this.prompt,this.onClick,null,null,this.accessKey);\n};\n\n//}}}\n////===\n\n
以下台纸号记录有问题:\n0498773 - 0498776 (不完整)\n0492610 重复\n0494611 错误\n0497613 错误\n0494866 -> 0494860\n\n''049开头''\n* 6264 -> 4264\n* 6361 -> 6316\n* 6738 -> 8798\n* 8798 -> 重复\n* 7043 -> 7073\n* 8892 -> 6892\n* 8893 -> 6893\n* 8894 -> 6894\n* 8996 -> 6996\n* 8995 -> 6995\n* 258 -> 256\n* 8185 -> 8151\n* 8347 -> 8847\n* 8672 -> 6672\n* 8679 -> 6679\n* 8683 -> 6683\n* 8759 -> 6759\n* 8185 -> 8151\n* 8347 -> 8847\n* 8672 -> 6672\n* 8679 -> 6679\n* 8683 -> 6683\n* 8759 -> 6759\n* 8760 -> 6760\n* 8761 -> 6761\n* 8762 -> 6762\n* 230 -> 239\n* 220 -> 226\n* 7361 错误\n* 8587 -> 6587\n* 0498928 -> 0488928\n* 0499169 -> 0489169\n* 9314 -> 4314\n* 0809 -> 0898\n* 1901 -> 1909\n* 1831 -> 1931\n* 3032 -> 3020\n* 0489517 -> 8517\n* 0489129 -> 0494169\n* 8583 -> 6583\n* 8660 -> 6660\n* 8662 -> 6662\n* 8558 -> 6558\n* 8891 -> 6891\n0500358 -> 356\n0502281 -> 2261\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
* 采用 http://zwbbg.nwsuaf.edu.cn 作为标本馆网站的首页导航\n* 采用 plantlib.net 作为自己开发时的主要用名\n* 逐步采用北京的服务器\n* 采用Dreamweaver的Ftp直接编辑功能,直接编辑网站,岂不更佳,自己写 CSS,自己直接写内容,很棒!后面可以讲这些功能做成软件,那就可以直接编辑静态网站了,何必理会动态技术。
* www.plantlib.net 首页改版,采用 ~TiddlyWiki 整个系统竟然只有一个Html文件,采用了Ajax技术,很有意思。\n
Type the text for 'New Tiddler'
* [[西北农林科技大学植物标本馆|http://zwbbg.nwsuaf.edu.cn]] 标本馆的主页\n* [[WUK 虚拟植物标本馆|http://wukvh.plantlib.net]] 在线的西北农林科技大学植物标本馆,包括33万多条标本记录和大量的高清数码标本照片和活体植物照片
植物的分类、命名和鉴定
* [[《教你认植物》光盘|http://teach.plantlib.net]]以前出版,欢迎订购,相应的网站正在建设当中。\n
工作网址\n* [[忙吧|http://www.mangbar.com/]]\n专题技术\n* [[正则表达式|http://regexlib.com/default.aspx]]\n* [[数据库链接字符串大全|http://www.connectionstrings.com/]]\n* [[《Ajax Design Patterns》代码|http://www.ajaxify.com/run/]]\n* [[Thinking in AJAX(三) —— AJAX框架汇总|http://www.duduwolf.com/post/AJAX_Frameworks.asp]]\n在线资源\n* [[站长书库|http://book.chinaz.com/]]\n\n
----\n\n| !{{{姓 名}}} | !{{{- 类 群 -}}} | !{{{2007年任务}}} | !{{{6月底完成}}} | !{{{7-12月完成}}} | !{{{照片进度}}} |!{{{- 备 注 -}}} |\n| 孙建钊 | 合计 | 13549 | 6243 | 7306 | | |\n|~| 紫草科 | 3013 | 3013 | 0 | 1996 |~|\n|~| 玄参科 | 4588 | | | |~|\n|~| 萝藦科 | 2340 | | | |~|\n|~| 旋花科 | 2216 | 2216 | | |~|\n|~| 车前科 | 1014 | 1014 | | |~|\n|~| 狸藻科 | 40 | | | |~|\n|~| 爵床科 | 205 | | | |~|\n|~| 透骨草科 | 133 | | | |~|\n|>|>|>|>|>|>| !照片提交 |\n|>| 日期时间 | 科名 | 数量 |>|>| 备注 |\n|>| 2007-03-23 | 紫草科 | 208 |>|>| |\n|>| 2007-03-26 | 紫草科 | 466 |>|>| |\n|>| 2007-03-27 | 紫草科 | 445 |>|>| |\n|>| 2007-03-28 | 紫草科 | 433 |>|>| |\n|>| 2007-03-28 | 紫草科 | 444 |>|>| |\n|>| 2007-04-04 | 马鞭草科 | 470 |>|>| |\n|>| 2007-04-05 | 马鞭草科 | 466 |>|>| |\n|>| 2007-04-06 | 马鞭草科 | 471 |>|>| |\n|>| ... | ... | ... |>|>| |\n|>| 2007-11-20 | 木通科 | 141 |>|>| |\n|>| 2007-11-20 | 葫芦科 | 285 |>|>| |\n|>| 2007-11-20 | 葫芦科 | 427 |>|>| |\n|>| 2007-11-20 | 葫芦科 | 417 |>|>| |\n|>| 2007-11-21 | 葫芦科 | 213 |>|>| |\n|>| 2007-11-21 | 桔梗科 | 224 |>|>| |\n|>| 2007-11-22 | 桔梗科 | 440 |>|>| |\n|>| 2007-11-22 | 桔梗科 | 457 |>|>| |\n|>| 2007-11-23 | 桔梗科 | 444 |>|>| |\n|>| 2007-11-24 | 桔梗科 | 434 |>|>| |\n|>| 2007-11-26 | 桔梗科 | 313 |>|>| |\n|>| 2007-11-26 | 其余大巴山,总计 | 67 |>|>| |\n|>| 2007-12-05 | 狸藻科 | 46 |>|>| |\n|>| 2007-12-06 | 爵床科 | 207 |>|>| |\n|>| 2007-12-07 | 爵床、车前等 | 422 |>|>| |\n|>| 2007-12-08 | 车前A、B等 | 843 |>|>| |\n|>| 2007-12-09 | 萝藦科1 | 422 |>|>| |\n|>| 2007-12-10 | 萝藦科2 | 431 |>|>| |\n|>| 2007-12-10 | 爵床科 | 3 |>|>| |\n\n\n\n----\n\n| !{{{姓 名}}} | !{{{- 类 群 -}}} | !{{{2007年任务}}} | !{{{6月底完成}}} | !{{{7-12月完成}}} | !{{{照片进度}}} |!{{{- 备 注 -}}} |\n| 王林忠 | 合计 | 18549 | 5985 | 12564 | | |\n|~| 报春花科 | 3138 | | | |~|\n|~| 杜鹃花科 | 3377 | | | |~|\n|~| 木犀科 | 3859 | 3859 | | |~|\n|~| 鹿蹄草科 | 329 | 329 | | |~|\n|~| 山茱萸科 | 2229 | | | 460 |~|\n|~| 柏科| 1458 | | | |~|\n|~| 松科| 1518 | 1518 | | |~|\n|~| 红豆杉科| 279 | 279 | | |~|\n|~| 罗汉松科| 42 | | | |~|\n|~| 麻黄科| 447 | | | |~|\n|~| 买麻藤科| 26 | | | |~|\n|~| 南洋杉科| 1 | | | |~|\n|~| 三尖杉科| 593 | | | |~|\n|~| 杉科| 296 | | | |~|\n|~| 苏铁科| 7 | | | |~|\n|~| 银杏科| 108 | | | |~|\n|~| 棕榈科| 54 | | | |~|\n|~| @@color(green):木通科@@ | 788 | | | |~|\n|>|>|>|>|>|>| !照片提交 |\n|>| 日期时间 | 科名 | 数量 |>|>| 备注 |\n|>| 2007-03-22 | 山茱萸科 | 30 |>|>| |\n|>| 2007-03-28 | 山茱萸科 | 430 |>|>| |\n|>| 2007-04-04 | 山茱萸科 | 420 |>|>| |\n|>| 2007-04-04 | 山茱萸科 | 449 |>|>| |\n|>| 2007-04-09 | 山茱萸科 | 488 |>|>| |\n|>| 2007-04-09 | 山茱萸科 | 342 |>|>| |\n|>| ... | ... | ... |>|>| |\n|>| 2007-11-20 | 报春花 | 474 |>|>| |\n|>| 2007-11-21 | 报春花 | 495 |>|>| |\n|>| 2007-11-21 | 报春花 | 515 |>|>| |\n|>| 2007-11-26 | 报春花 | 461 |>|>| |\n
为了保证本项目的工作能如期完成,我们将按如下条例实施管理:\n# 专题负责人在承担项目期间应保证有充足时间从事本项目的工作;\n# 项目的经费必须专款专用,不允许挪作他用。\n# 专题负责人须定期向项目负责人或其指定的代表提交载有阶段成果的光盘,作为经费划拨的依据;项目负责人在未征得专题负责人同意的前提下,不得以任何形式使用或与他人共享该光盘的成果,否则由此引起的一切责任和后果由项目负责人承担;每次交光盘时要同时上交光盘内容清单,要列明计划任务和实际完成的情况(包括各类群的名称和数量)。\n# 年度经费按7:3的比例分二次划拨。任务书签定后两周内划拨第一次经费;项目和专题负责人确认第一期任务完成后,两周内划拨第二次经费;若第二阶段末仍未完成第一阶段任务者,取消承担资格,专题承担单位督促该专题上缴已完成的成果和未完成任务所对应的下拨经费;提交检查的所有电子化材料和数据须刻录在光盘上。提前完成阶段任务的专题可申请提前验收,并划拨经费。\n# 各专题负责人在项目实施过程中要督促项目具体实施者十分珍惜每一份标本,不能因为本项目的实施而使各单位的标本受到任何不必要的损失。\n# 在上面我们所建议的输录类群中,各专题负责人应该根据所承担的具体任务量完整地输录本单位的某些类群,而不要每一类群都有数据但每一类群都不完整。\n# 所输录的标本应该是有种名的,没有种名的标本请不要上交项目负责人,否则被视为不合格数据。\n# @@拍摄标本必须使用500万像素及以上的数码相机,照片的宽度为1024。 大小为200k左右。@@\n# 每次上阶段完成之后所上交的光盘中包含的内容:\n## 应完成输录标本数量的全部规定字段;\n## 从2006年起,科技部要求本项目每年向E-平台提供标本图像,而且每次提供的图片要求包含各参加单位,因此,@@各参加单位上交的标本图像要与数据量一致。如10万标本,即提交10万张图片。并且每一个图片名要与数据库中该物种的名一一对应(可以选用同一个id或流水号为标识)@@。\n##@@注:上交的数据应以采集号为计算单位,即同一采集号只能计算一次,不管有多少份。@@\n# 由于承担的是科技部项目,各专题负责人有义务协助项目负责人填写科技部及相关所属部门下发的与本项目相关的调查资料或数据。\n# 如果任务书规定的工作按期完成,项目负责人须保证按任务书之规定划拨经费。\n# 一旦签订任务书,不得以任何形式改变所承担的任务。如确有特殊情况,必须提前1个月向项目负责人提出申请,得到书面批准之后方可执行。\n# 如出现以上条例之外的情况,由项目负责人会同课题负责人与专题负责人协商解决。\n# 课题负责人负责课题设计、协调本课题内各专题的工作以及与其他相关课题之间的关系、总结课题进展、提出工作重点、组织学术交流,并协助项目负责人督促检查其下属专题的工作,专题负责人有义务服从课题负责人的管理。\n# 提交任务要求:数据和图片都刻录在DVD光盘上,在光盘的标签面只写1.2.3……在提交光盘的同时,需要提交任务完成情况的文字说明,如一共是几张盘,其中数据几盘,图片几盘。在说明中还需写明1是什么内容,如包含的数据量,或包含的图片量。图片和数据分开,将所要提交的数据放在一张盘中,图片放在另一张盘中。文字说明中同时列出阶段计划的任务量和实际完成的数量。(新)\n
# 所使用的数据库必须是项目组指定的数据库\n# @@输录要完全忠实于原来标本上的信息资料@@\n# 每份标本拍摄一张数码相片,相片的质量要求清晰(包括所照的植物体和标本上的标签),大小要求覆盖整份标本\n# @@所使用的数码相机为500万像素以上@@\n# 数据库必须输录字段\n## 拉丁学名\n## 采集地点:省、市(地区)、县\n## 生境\n## 海拔\n## 采集人\n## 采集号\n## 采集时间\n## 鉴定人\n## 鉴定时间\n## 标本性状描述:花、果、植物高度、颜色等\n## 中文名称\n# @@color(red):__所输录的数据要经有关人员严格校对,尽量避免输录中的错误和遗漏,其准确率应在 ''95%'' 以上。__@@\n# 上交任务时必须列出任务和实际完成情况的清单。\n
* [[中国数字植物标本馆|http://cvh.ibcas.ac.cn]] 中国最大的在线标本数据库和植物学资料库\n* [[标本资源论坛|http://www.biotachina.org/forum/index.php]] 中国数字植物标本平台创建的团队内部交流论坛\n* [[普蘭塔|http://www.planta.cn/forum/index.php]] 生态学与生物多样性论坛\n* [[中国植物科学网|http://www.chinaplant.org/]] 中国植物学界信息报道\n* [[义妹论坛|http://www.emay.com.cn/main]] 著名的植物学民间论坛\n* [[Tiddly Wiki|http://www.tiddlywiki.com]] Tiddly Wiki 主页\n* [[Tiddly Wiki 本地帮助|TiddlyWiki.htm]]\n* [[北京林业大学植物标本馆|http://herbarium.bjfu.edu.cn/search/imgbase.asp##]]\n* [[我要认植物|http://www.bgy.gd.cn/biology/zhiwu/]]\n* [[山东崂山维管植物科列表|http://www.bkjy.sdnu.edu.cn/botany/LS/lszw.asp]]
在线的数字化植物标本馆,提供标本在线浏览与管理
{{{\n\n////////////////////////////////////////////////////////////////\n// anifix1.cpp (v1.1)\n//==============================================================\n// Quick and dirty blanket fix for ANI zero-day vulnerabilities.\n// Prevents loading cursors from outside the Windows directory.\n//\n// Derek Soeder - eEye Digital Security - 03/29/2007\n////////////////////////////////////////////////////////////////\n\n#define WIN32_LEAN_AND_MEAN\n\n#include <windows.h>\n#include <stdio.h>\n\n\n//----------------\nCHAR g_szWindowsDir[MAX_PATH+4];\nWCHAR g_wszWindowsDir[MAX_PATH+4];\n\n\n////////////////////////////////\n// MyLoadImageA_check\n////////////////////////////////\nBOOL __stdcall MyLoadImageA_check(\n HINSTANCE hinst,\n LPCSTR lpszName,\n UINT uType,\n int cxDesired,\n int cyDesired,\n UINT fuLoad)\n{\n HANDLE hfile;\n DWORD cb;\n BYTE buf[4];\n\n //----------------\n if ( hinst == NULL && ((UINT_PTR)lpszName > 0xFFFF) &&\n (uType == IMAGE_ICON || uType == IMAGE_CURSOR) &&\n (fuLoad & LR_LOADFROMFILE) != 0 &&\n !IsBadStringPtrA(lpszName, (UINT)-1) )\n {\n if ( strnicmp(lpszName, g_szWindowsDir, strlen(g_szWindowsDir)) != 0 ||\n strstr(lpszName, "\s\s..\s\s") != NULL )\n {\n hfile = CreateFileA(lpszName, FILE_READ_DATA, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING,\n SECURITY_SQOS_PRESENT|SECURITY_IDENTIFICATION|FILE_FLAG_SEQUENTIAL_SCAN, NULL);\n\n if (hfile == INVALID_HANDLE_VALUE)\n return FALSE;\n\n if (!ReadFile(hfile, buf, sizeof(buf), &cb, NULL) || cb != sizeof(buf))\n {\n CloseHandle(hfile);\n return FALSE;\n }\n\n CloseHandle(hfile);\n return (memcmp(buf, "RIFF", 4) == 0 ? FALSE : TRUE);\n }\n }\n\n return TRUE;\n} //MyLoadImageA_check()\n\n\n////////////////////////////////\n// MyLoadImageA\n////////////////////////////////\nvoid __declspec(naked) MyLoadImageA()\n{\n __asm\n {\n pushad\n push dword ptr [esp+24h+18h]\n push dword ptr [esp+24h+18h]\n push dword ptr [esp+24h+18h]\n push dword ptr [esp+24h+18h]\n push dword ptr [esp+24h+18h]\n push dword ptr [esp+24h+18h]\n call MyLoadImageA_check\n\n test eax, eax\n popad\n jz _reject\n ret\n\n_reject:\n push ERROR_ACCESS_DENIED\n call dword ptr [SetLastError]\n pop eax\n xor eax, eax\n ret 18h\n }\n} //MyLoadImageA()\n\n\n////////////////////////////////\n// MyLoadImageW_check\n////////////////////////////////\nBOOL __stdcall MyLoadImageW_check(\n HINSTANCE hinst,\n LPCWSTR lpwszName,\n UINT uType,\n int cxDesired,\n int cyDesired,\n UINT fuLoad)\n{\n HANDLE hfile;\n DWORD cb;\n BYTE buf[4];\n\n //----------------\n if ( hinst == NULL && ((UINT_PTR)lpwszName > 0xFFFF) &&\n (uType == IMAGE_ICON || uType == IMAGE_CURSOR) &&\n (fuLoad & LR_LOADFROMFILE) != 0 &&\n !IsBadStringPtrW(lpwszName, (UINT)-1) )\n {\n if ( wcsnicmp(lpwszName, g_wszWindowsDir, wcslen(g_wszWindowsDir)) != 0 ||\n wcsstr(lpwszName, L"\s\s..\s\s") != NULL )\n {\n hfile = CreateFileW(lpwszName, FILE_READ_DATA, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING,\n SECURITY_SQOS_PRESENT|SECURITY_IDENTIFICATION|FILE_FLAG_SEQUENTIAL_SCAN, NULL);\n\n if (hfile == INVALID_HANDLE_VALUE)\n return FALSE;\n\n if (!ReadFile(hfile, buf, sizeof(buf), &cb, NULL) || cb != sizeof(buf))\n {\n CloseHandle(hfile);\n return FALSE;\n }\n\n CloseHandle(hfile);\n return (memcmp(buf, "RIFF", 4) == 0 ? FALSE : TRUE);\n }\n }\n\n return TRUE;\n} //MyLoadImageW_check()\n\n\n////////////////////////////////\n// MyLoadImageW\n////////////////////////////////\nvoid __declspec(naked) MyLoadImageW()\n{\n __asm\n {\n pushad\n push dword ptr [esp+24h+18h]\n push dword ptr [esp+24h+18h]\n push dword ptr [esp+24h+18h]\n push dword ptr [esp+24h+18h]\n push dword ptr [esp+24h+18h]\n push dword ptr [esp+24h+18h]\n call MyLoadImageW_check\n\n test eax, eax\n popad\n jz _reject\n ret\n\n_reject:\n push ERROR_ACCESS_DENIED\n call dword ptr [SetLastError]\n pop eax\n xor eax, eax\n ret 18h\n }\n} //MyLoadImageW()\n\n\n////////////////////////////////\n// DisassembleMem32\n////////////////////////////////\nDWORD DisassembleMem32(\n PBYTE pbCode)\n{\n BYTE bmodrm;\n\n //----------------\n bmodrm = *pbCode;\n\n if (bmodrm >= 0xC0)\n return 1;\n\n if (bmodrm >= 0x80)\n return ((bmodrm & 0x07) == 0x04 ? 6 : 5);\n\n if (bmodrm >= 0x40)\n return ((bmodrm & 0x07) == 0x04 ? 3 : 2);\n\n if ((bmodrm & 0x07) == 0x05)\n return 5;\n\n if ((bmodrm & 0x07) == 0x04)\n return ((pbCode[1] & 0x07) == 0x05 ? 6 : 2);\n\n return 1;\n} //DisassembleMem32()\n\n\n////////////////////////////////\n// DisassembleProlog\n////////////////////////////////\nDWORD DisassembleProlog(\n PBYTE pbCode,\n DWORD cbMinimumRequired)\n{\n PBYTE pb;\n DWORD cboperand;\n\n //----------------\n cboperand = 4;\n\n for (pb = pbCode; (DWORD)(pb - pbCode) < cbMinimumRequired; )\n {\n // Potemkin's Hackers Group rocks heavy metal-style (OPCODE.LST)\n\n switch (*pb++)\n {\n case 0x00: // 00h: ADD mem8, reg8\n case 0x01: // 01h: ADD mem, reg\n case 0x02: // 02h: ADD reg8, mem8\n case 0x03: // 03h: ADD reg, mem\n case 0x08: // 08h: OR mem8, reg8\n case 0x09: // 09h: OR mem, reg\n case 0x0A: // 0Ah: OR reg8, mem8\n case 0x0B: // 0Bh: OR reg, mem\n case 0x10: // 10h: ADC mem8, reg8\n case 0x11: // 11h: ADC mem, reg\n case 0x12: // 12h: ADC reg8, mem8\n case 0x13: // 13h: ADC reg, mem\n case 0x18: // 18h: SBB mem8, reg8\n case 0x19: // 19h: SBB mem, reg\n case 0x1A: // 1Ah: SBB reg8, mem8\n case 0x1B: // 1Bh: SBB reg, mem\n case 0x20: // 20h: AND mem8, reg8\n case 0x21: // 21h: AND mem, reg\n case 0x22: // 22h: AND reg8, mem8\n case 0x23: // 23h: AND reg, mem\n case 0x28: // 28h: SUB mem8, reg8\n case 0x29: // 29h: SUB mem, reg\n case 0x2A: // 2Ah: SUB reg8, mem8\n case 0x2B: // 2Bh: SUB reg, mem\n case 0x30: // 30h: XOR mem8, reg8\n case 0x31: // 31h: XOR mem, reg\n case 0x32: // 32h: XOR reg8, mem8\n case 0x33: // 33h: XOR reg, mem\n case 0x38: // 38h: CMP mem8, reg8\n case 0x39: // 39h: CMP mem, reg\n case 0x3A: // 3Ah: CMP reg8, mem8\n case 0x3B: // 3Bh: CMP reg, mem\n case 0x84: // 84h: TEST mem8, reg8\n case 0x85: // 85h: TEST mem, reg\n case 0x86: // 86h: XCHG mem8, reg8\n case 0x87: // 87h: XCHG mem, reg\n case 0x88: // 88h: MOV mem8, reg8\n case 0x89: // 89h: MOV mem, reg\n case 0x8A: // 8Ah: MOV reg8, mem8\n case 0x8B: // 8Bh: MOV reg, mem\n case 0x8C: // 8Ch: <op> mem, sreg\n case 0x8D: // 8Dh: LEA reg, mem\n case 0x8E: // 8Eh: <op> sreg, mem\n case 0x8F: // 8Fh: POP mem\n case 0xC4: // C4h: LES reg, mem\n case 0xC5: // C5h: LDS reg, mem\n case 0xD0: // D0h: <op> mem8, 1\n case 0xD1: // D1h: <op> mem, 1\n case 0xD2: // D2h: <op> mem8, CL\n case 0xD3: // D3h: <op> mem, CL\n case 0xFE: // FEh: <op> mem8\n case 0xFF: // FFh: <op> mem\n pb += DisassembleMem32(pb);\n break;\n\n case 0x04: // 04h: ADD AL, imm8\n case 0x0C: // 0Ch: OR AL, imm8\n case 0x14: // 14h: ADC AL, imm8\n case 0x1C: // 1Ch: SBB AL, imm8\n case 0x24: // 24h: AND AL, imm8\n case 0x2C: // 2Ch: SUB AL, imm8\n case 0x34: // 34h: XOR AL, imm8\n case 0x3C: // 3Ch: CMP AL, imm8\n case 0x6A: // 6Ah: PUSH simm8\n case 0xA8: // A8h: TEST AL, imm8\n case 0xB0: // B0h: MOV AL, imm8\n case 0xB1: // B1h: MOV CL, imm8\n case 0xB2: // B2h: MOV DL, imm8\n case 0xB3: // B3h: MOV BL, imm8\n case 0xB4: // B4h: MOV AH, imm8\n case 0xB5: // B5h: MOV CH, imm8\n case 0xB6: // B6h: MOV DH, imm8\n case 0xB7: // B7h: MOV BH, imm8\n case 0xD4: // D4h: AAM imm8\n case 0xD5: // D5h: AAD imm8\n pb++;\n break;\n\n case 0x05: // 05h: ADD EAX, imm\n case 0x0D: // 0Dh: OR EAX, imm\n case 0x15: // 15h: ADC EAX, imm\n case 0x1D: // 1Dh: SBB EAX, imm\n case 0x25: // 25h: AND EAX, imm\n case 0x2D: // 2Dh: SUB EAX, imm\n case 0x35: // 35h: XOR EAX, imm\n case 0x3D: // 3Dh: CMP EAX, imm\n case 0x68: // 68h: PUSH imm\n case 0xA9: // A9h: TEST EAX, imm\n case 0xB8: // B8h: MOV EAX, imm\n case 0xB9: // B9h: MOV ECX, imm\n case 0xBA: // BAh: MOV EDX, imm\n case 0xBB: // BBh: MOV EBX, imm\n case 0xBC: // BCh: MOV ESP, imm\n case 0xBD: // BDh: MOV EBP, imm\n case 0xBE: // BEh: MOV ESI, imm\n case 0xBF: // BFh: MOV EDI, imm\n pb += cboperand;\n break;\n\n case 0x06: // 06h: PUSH ES\n case 0x07: // 07h: POP ES\n case 0x0E: // 0Eh: PUSH CS\n case 0x16: // 16h: PUSH SS\n case 0x17: // 17h: POP SS\n case 0x1E: // 1Eh: PUSH DS\n case 0x1F: // 1Fh: POP DS\n case 0x26: // 26h: ES:\n case 0x27: // 27h: DAA\n case 0x2E: // 2Eh: CS:\n case 0x2F: // 2Fh: DAS\n case 0x36: // 36h: SS:\n case 0x37: // 37h: AAA\n case 0x3E: // 3Eh: DS:\n case 0x3F: // 3Fh: AAS\n case 0x40: // 40h: INC EAX\n case 0x41: // 41h: INC ECX\n case 0x42: // 42h: INC EDX\n case 0x43: // 43h: INC EBX\n case 0x44: // 44h: INC ESP\n case 0x45: // 45h: INC EBP\n case 0x46: // 46h: INC ESI\n case 0x47: // 47h: INC EDI\n case 0x48: // 48h: DEC EAX\n case 0x49: // 49h: DEC ECX\n case 0x4A: // 4Ah: DEC EDX\n case 0x4B: // 4Bh: DEC EBX\n case 0x4C: // 4Ch: DEC ESP\n case 0x4D: // 4Dh: DEC EBP\n case 0x4E: // 4Eh: DEC ESI\n case 0x4F: // 4Fh: DEC EDI\n case 0x50: // 50h: PUSH EAX\n case 0x51: // 51h: PUSH ECX\n case 0x52: // 52h: PUSH EDX\n case 0x53: // 53h: PUSH EBX\n case 0x54: // 54h: PUSH ESP\n case 0x55: // 55h: PUSH EBP\n case 0x56: // 56h: PUSH ESI\n case 0x57: // 57h: PUSH EDI\n case 0x58: // 58h: POP EAX\n case 0x59: // 59h: POP ECX\n case 0x5A: // 5Ah: POP EDX\n case 0x5B: // 5Bh: POP EBX\n case 0x5C: // 5Ch: POP ESP\n case 0x5D: // 5Dh: POP EBP\n case 0x5E: // 5Eh: POP ESI\n case 0x5F: // 5Fh: POP EDI\n case 0x60: // 60h: PUSHAD\n case 0x61: // 61h: POPAD\n case 0x64: // 64h: FS:\n case 0x90: // 90h: NOP\n case 0x91: // 91h: XCHG EAX, ECX\n case 0x92: // 92h: XCHG EAX, EDX\n case 0x93: // 93h: XCHG EAX, EBX\n case 0x94: // 94h: XCHG EAX, ESP\n case 0x95: // 95h: XCHG EAX, EBP\n case 0x96: // 96h: XCHG EAX, ESI\n case 0x97: // 97h: XCHG EAX, EDI\n case 0x98: // 98h: CWDE\n case 0x99: // 99h: CDQ\n case 0x9C: // 9Ch: PUSHFD\n case 0x9D: // 9Dh: POPFD\n case 0x9E: // 9Eh: SAHF\n case 0x9F: // 9Fh: LAHF\n case 0xA4: // A4h: MOVSB\n case 0xA5: // A5h: MOVSD\n case 0xA6: // A6h: CMPSB\n case 0xA7: // A7h: CMPSD\n case 0xAA: // AAh: STOSB\n case 0xAB: // ABh: STOSD\n case 0xAC: // ACh: LODSB\n case 0xAD: // ADh: LODSD\n case 0xAE: // AEh: SCASB\n case 0xAF: // AFh: SCASD\n case 0xC9: // C9h: LEAVE\n case 0xD6: // D6h: SETALC\n case 0xD7: // D7h: XLAT\n case 0xF0: // F0h: LOCK\n case 0xF2: // F2h: REPNZ\n case 0xF3: // F3h: REP\n case 0xF5: // F5h: CMC\n case 0xF8: // F8h: CLC\n case 0xF9: // F9h: STC\n case 0xFC: // FCh: CLD\n case 0xFD: // FDh: STD\n break;\n\n case 0x66: // 66h: memory access size prefix\n cboperand = 2;\n continue;\n\n case 0x69: // 69h: IMUL reg, imm, mem\n case 0x81: // 81h: <op> mem, imm\n case 0xC7: // C7h: MOV mem, imm\n pb += DisassembleMem32(pb) + cboperand;\n break;\n\n case 0x6B: // 6Bh: IMUL reg8, imm8, mem8\n case 0x80: // 80h: <op> mem8, imm8\n case 0x82: // 82h: <op> mem8, simm8\n case 0x83: // 83h: <op> mem, simm8\n case 0xC0: // C0h: <op> mem8, imm8\n case 0xC1: // C1h: <op> mem, imm8\n case 0xC6: // C6h: MOV mem8, imm8\n pb += DisassembleMem32(pb) + 1;\n break;\n\n case 0xA0: // A0h: MOV AL, [ofs]\n case 0xA1: // A1h: MOV EAX, [ofs]\n case 0xA2: // A2h: MOV [ofs], AL\n case 0xA3: // A3h: MOV [ofs], EAX\n pb += 4;\n break;\n\n case 0xC8: // C8h: ENTER imm16, imm8\n pb += 3;\n break;\n\n case 0xF6: // F6h/0: TEST mem8, imm8; F6h/{1..7}: <op> mem8\n pb += DisassembleMem32(pb) + ((*pb & 0x38) == 0x00 ? 1 : 0);\n break;\n\n case 0xF7: // F7h/0: TEST mem, imm; F7h/{1..7}: <op> mem\n pb += DisassembleMem32(pb) + ((*pb & 0x38) == 0x00 ? cboperand : 0);\n break;\n\n case 0x0F:\n switch (*pb++)\n {\n case 0x0D: // 0Fh/0Dh: <op> mem\n case 0x18: // 0Fh/18h: <op> mem\n case 0x90: // 0Fh/90h: SETO mem8\n case 0x91: // 0Fh/91h: SETNO mem8\n case 0x92: // 0Fh/92h: SETC mem8\n case 0x93: // 0Fh/93h: SETNC mem8\n case 0x94: // 0Fh/94h: SETZ mem8\n case 0x95: // 0Fh/95h: SETNZ mem8\n case 0x96: // 0Fh/96h: SETNA mem8\n case 0x97: // 0Fh/97h: SETA mem8\n case 0x98: // 0Fh/98h: SETS mem8\n case 0x99: // 0Fh/99h: SETNS mem8\n case 0x9A: // 0Fh/9Ah: SETP mem8\n case 0x9B: // 0Fh/9Bh: SETNP mem8\n case 0x9C: // 0Fh/9Ch: SETL mem8\n case 0x9D: // 0Fh/9Dh: SETNL mem8\n case 0x9E: // 0Fh/9Eh: SETNG mem8\n case 0x9F: // 0Fh/9Fh: SETG mem8\n case 0xA3: // 0Fh/A3h: BT mem, reg\n case 0xA5: // 0Fh/A5h: SHLD mem, reg, CL\n case 0xAB: // 0Fh/ABh: BTS mem, reg\n case 0xAD: // 0Fh/ADh: SHRD mem, reg, CL\n case 0xAF: // 0Fh/AFh: IMUL reg, mem\n case 0xB3: // 0Fh/B3h: BTR mem, reg\n case 0xB4: // 0Fh/B4h: LFS reg, mem\n case 0xB5: // 0Fh/B5h: LGS reg, mem\n case 0xB6: // 0Fh/B6h: MOVZX reg, mem8\n case 0xB7: // 0Fh/B7h: MOVZX reg, mem16\n case 0xBB: // 0Fh/BBh: BTC mem, reg\n case 0xBC: // 0Fh/BCh: BSF mem, reg\n case 0xBD: // 0Fh/BDh: BSR mem, reg\n case 0xBE: // 0Fh/BEh: MOVSX reg, mem8\n case 0xBF: // 0Fh/BFh: MOVSX reg, mem16\n case 0xC0: // 0Fh/C0h: XADD mem8, reg8\n case 0xC1: // 0Fh/C1h: XADD mem, reg\n case 0xC7: // 0Fh/C7h/0: CMPXCHG8B mem\n pb += DisassembleMem32(pb);\n break;\n\n case 0xA0: // 0Fh/A0h: PUSH FS\n case 0xA1: // 0Fh/A1h: POP FS\n case 0xA8: // 0Fh/A8h: PUSH GS\n case 0xA9: // 0Fh/A9h: POP GS\n case 0xC8: // 0Fh/C8h: BSWAP EAX\n case 0xC9: // 0Fh/C9h: BSWAP ECX\n case 0xCA: // 0Fh/CAh: BSWAP EDX\n case 0xCB: // 0Fh/CBh: BSWAP EBX\n case 0xCC: // 0Fh/CCh: BSWAP ESP\n case 0xCD: // 0Fh/CDh: BSWAP EBP\n case 0xCE: // 0Fh/CEh: BSWAP ESI\n case 0xCF: // 0Fh/CFh: BSWAP EDI\n break;\n\n case 0xA4: // 0Fh/A4h: SHLD mem, reg, imm8\n case 0xAC: // 0Fh/ACh: SHRD mem, reg, imm8\n case 0xBA: // 0Fh/BAh: <op> mem, imm8\n pb += DisassembleMem32(pb) + 1;\n break;\n\n default:\n return 0;\n }\n break; //case 0x0F\n\n default:\n return 0;\n } //switch(*pb)\n\n cboperand = 4;\n } //for(pb)\n\n return (DWORD)(pb - pbCode);\n} //DisassembleProlog()\n\n\n////////////////////////////////\n// HookFunction\n////////////////////////////////\nBOOL HookFunction(\n PBYTE pbCode,\n void *pfnHook)\n{\n LPVOID lpvbounce;\n DWORD cb;\n DWORD dwprotect;\n\n //---------------- skip hot-patch JMP SHORT if present\n if ( pbCode[0] == 0x8B && pbCode[1] >= 0xC0 && // 8Bh/11abcabc: MOV reg, self\n (((pbCode[1] >> 3) ^ pbCode[1]) & 0x07) == 0 )\n {\n pbCode += 2;\n }\n\n //---------------- prepare dynamic portion of hook\n cb = DisassembleProlog(pbCode, 0x05);\n\n if (cb < 0x05)\n return FALSE;\n\n lpvbounce = VirtualAlloc(NULL, 0x05 + cb + 0x05, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE);\n\n if (lpvbounce == NULL)\n return FALSE;\n\n * ((LPBYTE)lpvbounce + 0x00) = 0xE8; // E8h/xxxxxxxx: CALL pfnHook\n *(LPDWORD)((LPBYTE)lpvbounce + 0x01) = (DWORD)pfnHook - (DWORD)lpvbounce - 0x05;\n memcpy((LPBYTE)lpvbounce + 0x05, pbCode, cb);\n\n * ((LPBYTE)lpvbounce + 0x05 + cb) = 0xE9; // E9h/xxxxxxxx: JMP (pbCode + cb)\n *(LPDWORD)((LPBYTE)lpvbounce + 0x06 + cb) = (DWORD)pbCode - (DWORD)lpvbounce - 0x05 - 0x05;\n\n VirtualProtect(lpvbounce, 0x05 + cb + 0x05, PAGE_EXECUTE_READ, &dwprotect);\n\n //---------------- hook code entry point ("prolog")\n if (!VirtualProtect(pbCode, cb, PAGE_EXECUTE_READWRITE, &dwprotect))\n {\n VirtualFree(lpvbounce, 0, MEM_RELEASE);\n return FALSE;\n }\n\n * (pbCode + 0x00) = 0xE9; // E9h/xxxxxxxx: JMP lpvbounce\n *(DWORD*)(pbCode + 0x01) = (DWORD)lpvbounce - (DWORD)pbCode - 0x05;\n\n VirtualProtect(pbCode, cb, dwprotect, &dwprotect);\n\n return TRUE;\n} //HookFunction()\n\n\n////////////////////////////////\n// HookExports\n////////////////////////////////\n\nconst struct { const char *szexport; void *pfn; } USER32_HOOKS[] =\n{\n { "LoadImageA", MyLoadImageA },\n { "LoadImageW", MyLoadImageW }\n} ;\n\n////////////////////////////////\nBOOL HookExports()\n{\n HMODULE hm;\n PBYTE pb;\n size_t c;\n\n //---------------- hook USER32.DLL exports\n hm = GetModuleHandle("user32.dll");\n\n if (hm == NULL)\n return FALSE;\n\n for (c = 0; c < (sizeof(USER32_HOOKS) / sizeof(USER32_HOOKS[0])); c++)\n {\n pb = (PBYTE)GetProcAddress(hm, USER32_HOOKS[c].szexport);\n\n if (pb == NULL)\n continue;\n\n HookFunction(pb, USER32_HOOKS[c].pfn);\n } //for(c)\n\n return TRUE;\n} //HookExports()\n\n\n////////////////////////////////\n// DllMain\n////////////////////////////////\nBOOL WINAPI DllMain(\n HINSTANCE hinstDLL,\n DWORD fdwReason,\n LPVOID lpvReserved)\n{\n UINT c;\n\n //----------------\n switch (fdwReason)\n {\n case DLL_PROCESS_ATTACH:\n\n c = GetWindowsDirectoryA(g_szWindowsDir, sizeof(g_szWindowsDir) - 1);\n if (c == 0 || c >= sizeof(g_szWindowsDir) - 1)\n break;\n if (g_szWindowsDir[c - 1] != '\s\s')\n g_szWindowsDir[c++] = '\s\s';\n g_szWindowsDir[c] = 0;\n\n c = GetWindowsDirectoryW( g_wszWindowsDir, (sizeof(g_wszWindowsDir) / sizeof(g_wszWindowsDir[0])) - 1 );\n if ( c == 0 || c >= (sizeof(g_wszWindowsDir) / sizeof(g_wszWindowsDir[0])) - 1 )\n break;\n if (g_wszWindowsDir[c - 1] != L'\s\s')\n g_wszWindowsDir[c++] = L'\s\s';\n g_wszWindowsDir[c] = 0;\n\n HookExports();\n\n break;\n } //switch(fdwReason)\n\n return TRUE;\n} //DllMain()\n\n\n\n}}}