You can subscribe to this list here.
| 2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(13) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2007 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
(14) |
Jun
|
Jul
|
Aug
(2) |
Sep
(1) |
Oct
|
Nov
|
Dec
|
| 2008 |
Jan
|
Feb
|
Mar
|
Apr
(3) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(1) |
Nov
(1) |
Dec
|
|
From: <ek...@us...> - 2011-11-12 23:20:24
|
Revision: 410
http://farplugins.svn.sourceforge.net/farplugins/?rev=410&view=rev
Author: ekot
Date: 2011-11-12 23:20:18 +0000 (Sat, 12 Nov 2011)
Log Message:
-----------
Fixed page display
Modified Paths:
--------------
trunk/farplugins/index.php
Modified: trunk/farplugins/index.php
===================================================================
--- trunk/farplugins/index.php 2011-10-10 17:45:53 UTC (rev 409)
+++ trunk/farplugins/index.php 2011-11-12 23:20:18 UTC (rev 410)
@@ -1,16 +1,11 @@
-<?php
+<?php
// TODO: store status in DB
require_once "config.inc.php";
require_once "config_db.inc.php";
+include_once('simplepie.inc');
-function fetchDBNews( $limit = 7 ) {
- $sql = "SELECT `title`,`title_link`,`datetime`,`source`,`source_link`,`text`
- FROM `farplugins_news` ORDER BY `datetime` DESC LIMIT $limit";
- return get_rows($sql);
-}
-
// simple controller
if (isset($_GET['farplugins_xml'])) {
readfile($rss_file);
@@ -18,28 +13,63 @@
}
?>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
- <link rel="alternate" type="application/rss+xml" title="RSS feed" href="http://feeds.feedburner.com/osfarplugins"/>
+ <link rel="alternate" type="application/rss+xml" title="RSS feed" href="http://sourceforge.net/export/rss2_projnews.php?group_id=52167"/>
<title>FarPlugins</title>
-<!-- <meta http-equiv="refresh" content="30;url=http://farplugins.sf.net/wiki/"> -->
<style type="text/css"><!--
- img { border-style: none; }
+img { border-style: none; }
+
+body {
+ font-family: Sans-Serif;
+}
+
.moreweight {font-weight:bold; }
.newstext {text-align:justify}
.newstitle {font-weight:bold; }
.newstitle a {font-weight:bold; text-decoration:none; }
- .sourceinfo {font-size: smaller; font-style:italic; color:darkgray}
+ .sourceinfo {font-size: smaller; font-style:italic; color:gray}
- .siteheader td {text-align: center; border:solid 1px black; }
+ .siteheader td {text-align: center; border:solid 1px black; font-family:'Sans-Serif'; }
+ .siteheader td h3 {text-align: center; font-family:Sans-Serif; }
.siteheader h2 a {text-decoration:none}
.siteheader h2, h1 {margin-bottom:0; margin-top:0}
.rssblock {border:solid 1px black; background-color: gray; color:white; font-weight:bold;}
.rssblock a {color:white; font-weight:bold;}
-//--></style>
+ .pluginsblock {border:solid 1px black; }
+ .pluginsblock td {border:solid 1px black; }
+
+table.border1px
+{
+ border-width: 0 0 1px 1px;
+ border-spacing: 0;
+ border-collapse: collapse;
+ border-style: solid;
+}
+.border1px td, .mystyle th
+{
+ margin: 0;
+ padding: 4px;
+ border-width: 1px 1px 0 0;
+ border-style: solid;
+}
+
+#box-table-a {
+ font-family:"Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
+ text-align:left;
+ border-collapse:collapse;
+ margin:20px;
+ border-radius: 20px;
+}
+
+#box-table-a th {font-weight:normal;background:#b9c9fe;border-top:4px solid #aabcfe;border-bottom:1px solid #fff;color:#039;padding:8px;}
+#box-table-a td {background:#e8edff;border-bottom:1px solid #fff;color:#669;border-top:1px solid transparent;padding:8px;}
+#box-table-a tr:hover td{background:#d0dafd;color:#339;}
+
+--></style>
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#000099" vlink="#330066" alink="#FF0000">
@@ -48,95 +78,97 @@
<td width="210" style="border:0"><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=52167&type=5" width="210" height="62" border="0" alt="SourceForge Logo" align="left"/></a></td>
<td align="center" style="background-color: gray; color: white">
<h1>Open Source Far Plugins</h1>
- </td>
- <td width="210" style="background-color: #FFFF99;"><h2><a href="http://farplugins.sourceforge.net/wiki/"><br/>Far Wiki »</a></h2></td>
-</tr>
-<tr>
- <td colspan="3" style="border:0"><br/>
- <a class="moreweight" href="wiki/">[more >>]</a><br/><br/>
-
</td>
</tr>
</table>
<table width="100%" border="0" summary="project farplugins">
<tr>
- <!-- FarPlugins Status -->
<td width="210" valign="top">
+ <!-- left block -->
+ </td>
+ <!-- List of plugins -->
+ <td valign="top">
+ <br/>
+ Open Far plugins project hosts miscelanneous open source plugins for <a href="http://farmanager.com">Far</a> file and archive manager
+ <br/>
- <table class="rssblock">
- <tr><td>
- <!-- a href="http://farplugins.sourceforge.net/?farplugins.xml" -->
- <a href="http://feeds.feedburner.com/osfarplugins">
- <img src="rss.gif" border="0" alt="FarPlugins RSS" />
- </a> <a href="http://farplugins.sourceforge.net/"> FarPlugins </a> News
-
- </td></tr>
- <tr><td>
-
- <a href="http://plugring.farmanager.com/plugringupd.rss">
- <img src="rss.gif" border="0" alt="PlugRing Updates"/>
- </a> <a href="http://plugring.farmanager.com/"> PlugRing </a> Updates
-
- </td></tr>
- <tr><td>
-
- <a href="http://farplugins.sourceforge.net/wiki/xml/recentchanges_farwacko.xml">
- <img src="rss.gif" border="0" alt="FarWiki Changes"/>
- </a> <a href="http://farplugins.sourceforge.net/wiki/"> FarWiki </a> Changes </td></tr>
-
+ <table id="box-table-a" class="rounded-corner">
+ <thead>
+ <tr><th colspan="3"><h4>Pugins for Far 2</h4></th></tr>
+ </thead>
+ <tr>
+ <td>NTEvent2</td><td>Plugin for viewing Windows event logs</td><td><a href="http://sourceforge.net/projects/farplugins/files/nt_event2/">Download...</a></td>
+ </tr>
+ <tr>
+ <td>AdaFar</td><td>Sample plugin written in Ada programming language</td><td><a href="http://sourceforge.net/projects/farplugins/files/adafar/">Download...</a></td>
+ </tr>
+ <tr><th colspan="3"><h4>Pugins for Far 1</h4></th></tr>
+ <tr>
+ <td>CEFar</td><td>Browsing Windows CE device connected to your machine</td><td><a href="http://sourceforge.net/projects/farplugins/files/CEFar/">Download...</a></td>
+ </tr>
+ <tr>
+ <td>ConsoleManager</td><td>Allows to run several console programs in one console window</td><td><a href="http://sourceforge.net/projects/farplugins/files/conman/">Download...</a></td>
+ </tr>
+ <tr>
+ <td>MultiPanel</td><td>Multi-panel plug-in for FAR Manager</td><td><a href="http://sourceforge.net/projects/farplugins/files/MultiPanel/">Download...</a></td>
+ </tr>
</table>
-<?php // fix broken HTML code until RSS stats are available
-
- $from = array("<A href", "</A>", "<BR>", "<I>", "</I>", "<HR SIZE=\"1\" NoShade>");
- $to = array("<a href", "</a>", "<br/>", "<i>", "</i>", "<hr size=\"1\" noshade=\"noshade\"/>");
-
- $from = array_merge($from, array("<A HREF", "<B>", "</B>"));
- $to = array_merge( $to, array("<a href", "<b>", "</b>"));
-
- print str_replace($from, $to, file_get_contents($status_file));
-
-?>
- </td>
<!-- Project News -->
- <td valign="top">
+ <h3><a href="http://sourceforge.net/export/rss2_projnews.php?group_id=52167"> <img src="feed.png" border="0" alt="FarPlugins RSS" /></a>News</h3>
<?php
- // readfile($news_file);
- $news = fetchDBNews();
- foreach ($news as $n) {
- extract($n, EXTR_OVERWRITE | EXTR_PREFIX_ALL, "n");
+ $feed = new SimplePie();
+ $feed->set_feed_url(array('http://sourceforge.net/export/rss2_projnews.php?group_id=52167',
+ 'http://sourceforge.net/export/rss2_projnews.php?group_id=34855',
+ 'http://sourceforge.net/export/rss2_projnews.php?group_id=247527',
+ 'http://sourceforge.net/export/rss2_projnews.php?group_id=187849'));
+ $feed->init();
+ $feed->handle_content_type();
+ foreach($feed->get_items(0, 100) as $item) {
+ $n = array_search($item->get_feed(), $feeds);
+ $title = $item->get_title();
+ $content = $item->get_content();
+ $permalink = $item->get_permalink();
+ $item_date = $item->get_date('j M Y');
+ $n_title_link = $item->get_link();
+ $current_feed = $item->get_feed();
+ $n_source = $current_feed->get_title();
+ $n_source_link = $current_feed->get_link();
echo "<div class=\"newitem\">\n";
echo " <div class=\"newstitle\">";
- echo ($n_title_link)?"<a href=\"$n_title_link\">$n_title</a>":$n_title;
+ echo ($permalink)?"<a href=\"$n_title_link\">$title</a>":$title;
echo " </div>\n";
- echo " <div class=\"sourceinfo\">$n_datetime - <a href=\"$n_source_link\">$n_source</a></div>\n";
- echo " <div class=\"newstext\">$n_text</div>\n";
- if ($n_title_link) {
- echo " <div class=\"readmore\"><a href=\"$n_title_link\">Original article...</a></div>\n";
+ echo " <div class=\"sourceinfo\">$item_date - <a href=\"$n_source_link\">$n_source</a></div>\n";
+ echo " <div class=\"newstext\">$content</div>\n";
+ if ($permalink) {
+ echo " <div class=\"readmore\"><a href=\"$permalink\">Original article...</a></div>\n";
}
echo "</div><br/><br/>\n";
}
- /* <!--
-<A HREF="http://sourceforge.net/forum/forum.php?forum_id=176252"><B>Welcome</B></A>
-<BR> <I>belugin - 2002-05-08 03:44</I> - <A HREF="http://sourceforge.net/projects/farplugins/">Open Far Plugins</A><BR>Welvome to the projects. First plugins are in the base<div align="center"> <A HREF="http://sourceforge.net/forum/forum.php?forum_id=176252">[Read More/Comment]</a></div><HR width="100%" size="1" noshade><div align="center"><a href="http://sourceforge.net/news/?group_id=52167">[News archive]</a></div> </td>
---> */
-
?>
</td>
<!-- Useful Links -->
<td width="210" valign="top">
- Useful links:
<ul>
- <li><a href="http://www.farmanager.com"/>FAR File and Archive Manager</a></li>
- <li><a href="http://enforum.farmanager.com"/>Far Forum [EN]</a></li>
- <li><a href="http://forum.farmanager.com"/>Far Forum [RU]</a></li>
+ <li><a href="http://sourceforge.net/projects/farplugins">Open FAR plugins project page</a></li>
+ <li><a href="http://www.farmanager.com">FAR File and Archive Manager</a></li>
+ <li><a href="http://enforum.farmanager.com">English Far Forum</a></li>
+ <li><a href="http://forum.farmanager.com">Russian Far Forum</a></li>
</ul>
</td>
</tr>
</table>
<br/>
-<div align="center"><a href="http://sourceforge.net/projects/farplugins"><img src="<?php echo $ext_feed_image; ?>" alt="farplugins project"/></a></div>
+<p>
+ <a href="http://validator.w3.org/check?uri=referer"><img
+ src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
+ <a href="http://jigsaw.w3.org/css-validator/check/referer">
+ <img style="border:0;width:88px;height:31px"
+ src="http://jigsaw.w3.org/css-validator/images/vcss"
+ alt="Valid CSS!" />
+ </a>
+</p>
</body>
</html>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ek...@us...> - 2011-10-10 17:46:02
|
Revision: 409
http://farplugins.svn.sourceforge.net/farplugins/?rev=409&view=rev
Author: ekot
Date: 2011-10-10 17:45:53 +0000 (Mon, 10 Oct 2011)
Log Message:
-----------
Updated to use FAR 2.0 Unicode API
Modified Paths:
--------------
trunk/skel/adafar/file_id.diz
trunk/skel/adafar/readme.txt
trunk/skel/adafar/src/adafar.adb
trunk/skel/adafar/src/adafar.ads
trunk/skel/adafar/src/adafar.def
trunk/skel/adafar/src/build.bat
trunk/skel/adafar/src/elim.bat
trunk/skel/adafar/src/far.ads
trunk/skel/adafar/src/farlng.ads
trunk/skel/adafar/src/farutil.adb
trunk/skel/adafar/src/farutil.ads
trunk/skel/adafar/whatsnew.txt
Added Paths:
-----------
trunk/skel/adafar/COPYING
trunk/skel/adafar/src/Interface_Wchar.adb
trunk/skel/adafar/src/Interface_Wchar.ads
trunk/skel/adafar/src/do_varargs.c
Removed Paths:
-------------
trunk/skel/adafar/ada.hrc
Added: trunk/skel/adafar/COPYING
===================================================================
--- trunk/skel/adafar/COPYING (rev 0)
+++ trunk/skel/adafar/COPYING 2011-10-10 17:45:53 UTC (rev 409)
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
Deleted: trunk/skel/adafar/ada.hrc
===================================================================
--- trunk/skel/adafar/ada.hrc 2011-09-26 03:54:18 UTC (rev 408)
+++ trunk/skel/adafar/ada.hrc 2011-10-10 17:45:53 UTC (rev 409)
@@ -1,145 +0,0 @@
-<?xml version="1.0" encoding="windows-1251"?>
-<!DOCTYPE hrc PUBLIC "-//Cail Lomecb//DTD Colorer HRC take5//EN" "../hrc.dtd">
-<hrc version="take5" xmlns="http://colorer.sf.net/2003/hrc">
- <type name="ada" access="public">
- <annotation>
- <documentation><![CDATA[
- Ada syntax
- <filename>/\.(ads|adb|adc)$/i</filename>
- ]]></documentation>
- <contributors>
- Eugene Kotlyarov 2:5058/26...@fi... http://ekot.narod.ru/far
- </contributors>
- </annotation>
-
- <region name="String" parent="def:String"/>
- <region name="Symbol" parent="def:Symbol"/>
- <region name="Keyword" parent="def:Keyword"/>
- <region name="Number" parent="def:Number"/>
- <region name="Function" parent="def:Function"/>
- <region name="PairStart" parent="def:PairStart"/>
- <region name="PairEnd" parent="def:PairEnd"/>
-
- <scheme name="ada">
-<!-- Comments -->
- <block start="/--/" end="/$/" scheme="def:Comment" region="def:LineComment"/>
-<!-- paired -->
- <block start="/(\()/" end="/(\))/" scheme="ada" region00="Symbol" region01="PairStart" region10="Symbol" region11="PairEnd"/>
- <block start="/(\[)/" end="/(\])/" scheme="ada" region00="Symbol" region01="PairStart" region10="Symbol" region11="PairEnd"/>
- <block start="/\b(begin)\b/i" end="/\b(end)\b/i" scheme="ada" region00="Symbol" region01="PairStart" region10="Symbol" region11="PairEnd"/>
- <block start="/\b(if)\b/i" end="/\b(end\s+if)/i" scheme="ada" region00="Symbol" region01="PairStart" region10="Symbol" region11="PairEnd"/>
- <block start="/\b(case)\b/i" end="/\b(end\s+case)/i" scheme="ada" region00="Symbol" region01="PairStart" region10="Symbol" region11="PairEnd"/>
- <block start="/\b(loop)\b/i" end="/\b(end\s+loop)/i" scheme="ada" region00="Symbol" region01="PairStart" region10="Symbol" region11="PairEnd"/>
- <regexp match="/(pragma\s+([A-Za-z_])+\s*(.*\))?;)/i" region0="def:Directive"/>
- <regexp match="/\b(?{Keyword}procedure|function)\s+(?{Function}[_\w]+)\s*/i"/>
-<!-- character -->
- <regexp match="/('.')/" region0="String"/>
-<!-- Strings -->
- <regexp match="/(".*?")/" region0="String"/>
-<!-- Numbers -->
-<!-- based -->
- <regexp match="/[0-9_]+\#[0-9a-f_]+(\.([0-9a-f][_]?)+)?\#/i" region0="Number"/>
-<!-- decimal -->
- <regexp match="/\b[0-9_]+(\.([0-9][_]?)+)?(E([\+]?|\-)([0-9][_]?)*)?\b/" region="Number"/>
-<!-- Symbols -->
- <keywords region="Symbol">
- <symb name="<"/>
- <symb name="=>"/>
- <symb name="^"/>
- <symb name="+"/>
- <symb name="&"/>
- <symb name="~"/>
- <symb name="|"/>
- <symb name="-"/>
- <symb name="*"/>
- <symb name="/"/>
- <symb name=";"/>
- <symb name=":"/>
- <symb name=":="/>
- <symb name="="/>
- <symb name="("/>
- <symb name=")"/>
- <symb name="["/>
- <symb name="]"/>
- <symb name=","/>
- <symb name=">"/>
- <symb name="}"/>
- <symb name="{"/>
- <symb name="'"/>
- <symb name="."/>
- </keywords>
-<!-- Common words -->
- <keywords ignorecase="yes" region="Keyword">
- <word name="abort"/>
- <word name="abs"/>
- <word name="abstract"/>
- <word name="accept"/>
- <word name="access"/>
- <word name="aliased"/>
- <word name="all"/>
- <word name="and"/>
- <word name="array"/>
- <word name="at"/>
- <word name="begin"/>
- <word name="body"/>
- <word name="case"/>
- <word name="constant"/>
- <word name="declare"/>
- <word name="delay"/>
- <word name="delta"/>
- <word name="digits"/>
- <word name="do"/>
- <word name="else"/>
- <word name="elsif"/>
- <word name="end"/>
- <word name="entry"/>
- <word name="exception"/>
- <word name="exit"/>
- <word name="for"/>
- <word name="function"/>
- <word name="generic"/>
- <word name="goto"/>
- <word name="if"/>
- <word name="in"/>
- <word name="limited"/>
- <word name="loop"/>
- <word name="mod"/>
- <word name="new"/>
- <word name="not"/>
- <word name="or"/>
- <word name="others"/>
- <word name="out"/>
- <word name="package"/>
- <word name="pragma"/>
- <word name="private"/>
- <word name="procedure"/>
- <word name="protected"/>
- <word name="is"/>
- <word name="raise"/>
- <word name="range"/>
- <word name="record"/>
- <word name="rem"/>
- <word name="renames"/>
- <word name="requeue"/>
- <word name="return"/>
- <word name="reverse"/>
- <word name="select"/>
- <word name="separate"/>
- <word name="null"/>
- <word name="of"/>
- <word name="subtype"/>
- <word name="tagged"/>
- <word name="task"/>
- <word name="terminate"/>
- <word name="then"/>
- <word name="type"/>
- <word name="when"/>
- <word name="with"/>
- <word name="until"/>
- <word name="use"/>
- <word name="while"/>
- <word name="xor"/>
- </keywords>
- </scheme>
- </type>
-</hrc>
\ No newline at end of file
Modified: trunk/skel/adafar/file_id.diz
===================================================================
--- trunk/skel/adafar/file_id.diz 2011-09-26 03:54:18 UTC (rev 408)
+++ trunk/skel/adafar/file_id.diz 2011-10-10 17:45:53 UTC (rev 409)
@@ -1,3 +1,3 @@
- FAR API for Ada v0.3 for FAR 1.65+
-(c) 2001-03 Eugene Kotlyarov 2:5058/26.9
+ FAR API for Ada v0.4 for FAR 2.0
+ (c) 2001-11 Eugene Kotlyarov
http://ekot.narod.ru/far
Modified: trunk/skel/adafar/readme.txt
===================================================================
--- trunk/skel/adafar/readme.txt 2011-09-26 03:54:18 UTC (rev 408)
+++ trunk/skel/adafar/readme.txt 2011-10-10 17:45:53 UTC (rev 409)
@@ -1,10 +1,9 @@
AdaFAR plugin for Far Manager
-ENGLISH (russian text is below)
-
This is test plugin for FAR manager written in Ada language.
FAR manager can be taken from http://www.farmanager.com
+ Source code is distributed under GPL v3 see COPYING file
It can:
@@ -14,8 +13,9 @@
Far commandline;
- use *.lng files.
- Used compiler: GNAT Ada v3.15p for Windows
- Latest version is available from ftp://cs.nyu.edu/pub/gnat
+ Used compiler: GNAT Ada built for Mingw
+ You need to install Cygwin and Mingw Ada packages.
+ To get win32api libraries you need to install GNAT compiler from Adacore.com
Known problems:
@@ -30,24 +30,7 @@
Also to reduce size you can take several slightly patched WinApi
packages from my homepage http://ekot.narod.ru/far
- 2. Far.ads contains definitions only for FAR 1.65 API.
-
-RUSSIAN (DOS 866)
-
- \x9D\xE2\xAE \xA4\xA5\xAC\xAE\xAD\xE1\xE2\xE0\xA0樮\xAD\xAD\xEB\xA9 \xAF\xAB\xA0\xA3\xA8\xAD \xA4\xAB\xEF Far Manager \xAD\xA0\xAF\xA8ᠭ\xAD\xEB\xA9 \xAD\xA0 Ada.
-
- \x97\xE2\xAE \xAE\xAD 㬥\xA5\xE2:
- - ᮧ\xA4\xA0\xA5\xE2 \xEE \xAF\xA0\xAD\xA5\xAB\xEC \xAF\xE0\xA8 \xAD\xA0\xA6\xA0⨨ Enter \xAD\xA0 䠩\xAB\xA5 far.ads;
- - \xAF\xAE\xAA\xA0\xA7뢠\xA5\xE2 \xAF\xE0\xAE\xE1⮩ \xA4\xA8\xA0\xAB\xAE\xA3 \xAF\xE0\xA8 \xAD\xA0\xA6\xA0⨨ F7 \xA2 \xAF\xA0\xAD\xA5\xAB\xA8 \xAF\xAB\xA0\xA3\xA8\xAD\xA0;
- - \xA2\xEB\xA7뢠\xA5\xE2\xE1\xEF \xA8\xA7 \xAC\xA5\xAD\xEE \xAF\xAB\xA0\xA3\xA8\xAD\xAE\xA2, \xA0 ⠪\xA6\xA5 \xA8\xA7 ।\xA0\xAA\xE2\xAE\xE0\xA0, \xAF\xE0\xAEᬮ\xE2\xE0騪\xA0 \xA8
- \xAA\xAE\xAC\xA0\xAD\xA4\xAD\xAE\xA9 \xE1\xE2ப\xA8, \xAE 祬 \xA8 ᮮ\xA1頥\xE2;
- - \xA8ᯮ\xAB\xEC\xA7\xE3\xA5\xE2 *.lng 䠩\xAB\xEB.
-
- \x88ᯮ\xAB짮\xA2\xA0\xAB\xE1\xEF \xAA\xAE\xAC\xAF\xA8\xAB\xEF\xE2\xAE\xE0: GNAT Ada v3.15p for Windows
- \x8F\xAE\xA4\xAD\xEF\xEF \xA2\xA5\xE0\xE1\xA8\xEF \xA4\xAE\xE1\xE2㯭\xA0 \xAD\xA0 ftp://cs.nyu.edu/pub/gnat (24Mb)
-
(c) Eugene Kotlyarov
- fido : 2:5058/26.9
WWW : http://ekot.narod.ru/far
- email: ek...@or... Eug...@p9...
-
+ email: ek...@na...
+
\ No newline at end of file
Added: trunk/skel/adafar/src/Interface_Wchar.adb
===================================================================
--- trunk/skel/adafar/src/Interface_Wchar.adb (rev 0)
+++ trunk/skel/adafar/src/Interface_Wchar.adb 2011-10-10 17:45:53 UTC (rev 409)
@@ -0,0 +1,316 @@
+-------------------------------------------------------------------------------
+-- --
+-- Ada Interface to the X Window System and Motif(tm)/Lesstif --
+-- Copyright (c) 1996-2000 Hans-Frieder Vogt --
+-- --
+-- Adabindx is free software; you can redistribute it and/or modify it --
+-- under the terms of the GNU General Public License as published by the --
+-- Free Software Foundation; either version 2 of the License, or (at your --
+-- option) any later version. --
+-- --
+-- This program is distributed in the hope that it will be useful, but --
+-- WITHOUT ANY WARRANTY; without even the implied warranty of --
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. --
+-- See the GNU General Public License for more details. --
+-- --
+-- You should have received a copy of the GNU General Public License --
+-- along with this program; if not, write to the --
+-- Free Software Foundation, Inc., --
+-- 59 Temple Place - Suite 330, --
+-- Boston, MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU General Public License. --
+-- --
+-- X Window System is copyrighted by the X Consortium --
+-- Motif(tm) is copyrighted by the Open Software Foundation, Inc. --
+-- and by The Open Group --
+-- --
+-- --
+-------------------------------------------------------------------------------
+
+-------------------------------------------------------------------------------
+--
+-- HISTORY:
+-- June 20, 1998 begin of history
+--
+-------------------------------------------------------------------------------
+
+-- package which implements C style wchar_t* handling like
+-- the interfaces.c.strings package
+
+with System; use System;
+with System.Address_To_Access_Conversions;
+
+package body Interface_Wchar is
+
+ -- factor by which an address offset has to be multiplied to get
+ -- the address of the next element
+ Wide_Factor : constant := wchar_t'Size / char'Size;
+
+ package WChar_Access is new Address_To_Access_Conversions (wchar_t);
+
+ -----------------------
+ -- Local Subprograms --
+ -----------------------
+
+ function Peek (From : wchars_ptr) return wchar_t;
+ pragma Inline (Peek);
+ -- Given a chars_ptr value, obtain referenced character
+
+ procedure Poke (Value : wchar_t; Into : wchars_ptr);
+ pragma Inline (Poke);
+ -- Given a wchars_ptr, modify referenced Wide Character value
+
+ function "+" (Left : wchars_ptr; Right : size_t) return wchars_ptr;
+ pragma Inline ("+");
+ -- Address arithmetic on wchars_ptr value
+
+ function Position_Of_Nul (Into : wchar_array) return size_t;
+ -- Returns position of the first Nul in Into or Into'Last + 1 if none
+
+ function C_Malloc (Size : size_t) return wchars_ptr;
+ pragma Import (C, C_Malloc, "__gnat_malloc");
+
+ procedure C_Free (Address : wchars_ptr);
+ pragma Import (C, C_Free, "free");
+
+ ---------
+ -- "+" --
+ ---------
+
+ function "+" (Left : wchars_ptr; Right : size_t) return wchars_ptr is
+ begin
+ return Left + wchars_ptr (Wide_Factor * Right);
+ end "+";
+
+ ----------
+ -- Free --
+ ----------
+
+ procedure Free (Item : in out wchars_ptr) is
+ begin
+ if Item = Null_WPtr then
+ return;
+ end if;
+
+ C_Free (Item);
+ Item := Null_WPtr;
+ end Free;
+
+ --------------------
+ -- New_Char_Array --
+ --------------------
+
+ function New_Char_Array (Chars : wchar_array) return wchars_ptr is
+ Index : size_t;
+ Pointer : wchars_ptr;
+ begin
+ -- Get index of position of null. If Index > Chars'last, nul is absent
+ -- and must be added explicitly.
+
+ Index := Position_Of_Nul (Into => Chars);
+ Pointer := C_Malloc (Wide_Factor * (Index - Chars'First + 1));
+
+ -- If nul is present, transfer string up to and including it.
+
+ if Index <= Chars'Last then
+ Update (Item => Pointer,
+ Offset => 0,
+ Chars => Chars (Chars'First .. Index),
+ Check => False);
+ else
+ -- If original string has no nul, transfer whole string and add
+ -- terminator explicitly.
+
+ Update (Item => Pointer,
+ Offset => 0,
+ Chars => Chars,
+ Check => False);
+ Poke (wide_nul,
+ Into => Pointer + size_t '(Chars'Length) + size_t'(1));
+ end if;
+
+ return Pointer;
+ end New_Char_Array;
+
+ ----------------
+ -- New_String --
+ ----------------
+
+ function New_String (Str : Wide_String) return wchars_ptr is
+ begin
+ return New_Char_Array (To_C (Str));
+ end New_String;
+
+ ----------
+ -- Peek --
+ ----------
+
+ function Peek (From : wchars_ptr) return wchar_t is
+ use WChar_Access;
+ begin
+ return To_Pointer (Address (To_Address (From))).all;
+ end Peek;
+
+ ----------
+ -- Poke --
+ ----------
+
+ procedure Poke (Value : wchar_t; Into : wchars_ptr) is
+ use WChar_Access;
+ begin
+ To_Pointer (Address (To_Address (Into))).all := Value;
+ end Poke;
+
+ ---------------------
+ -- Position_Of_Nul --
+ ---------------------
+
+ function Position_Of_Nul (Into : wchar_array) return size_t is
+ begin
+ for J in Into'Range loop
+ if Into (J) = wide_nul then
+ return J;
+ end if;
+ end loop;
+
+ return Into'Last + 1;
+ end Position_Of_Nul;
+
+ ------------
+ -- Strlen --
+ ------------
+
+ function Strlen (Item : wchars_ptr) return size_t is
+ Item_Index : size_t := 0;
+
+ begin
+ if Item = Null_WPtr then
+ raise Dereference_Error;
+ end if;
+
+ loop
+ if Peek (Item + Item_Index) = wide_nul then
+ return Item_Index;
+ end if;
+
+ Item_Index := Item_Index + 1;
+ end loop;
+ end Strlen;
+
+ ------------------
+ -- To_Chars_Ptr --
+ ------------------
+
+ function To_Chars_Ptr
+ (Item : wchar_array_access;
+ Nul_Check : Boolean := False)
+ return wchars_ptr
+ is
+ begin
+ if Item = null then
+ return Null_WPtr;
+ elsif Nul_Check
+ and then Position_Of_Nul (Into => Item.all) > Item'Last
+ then
+ raise Terminator_Error;
+ else
+ return To_Integer (Item (Item'First)'Address);
+ end if;
+ end To_Chars_Ptr;
+
+ ------------
+ -- Update --
+ ------------
+
+ procedure Update
+ (Item : wchars_ptr;
+ Offset : size_t;
+ Chars : wchar_array;
+ Check : Boolean := True)
+ is
+ Index : wchars_ptr := Item + Wide_Factor*Offset;
+
+ begin
+ if Check and then Offset + Chars'Length > Strlen (Item) then
+ raise Update_Error;
+ end if;
+
+ for J in Chars'Range loop
+ Poke (Chars (J), Into => Index);
+ Index := Index + size_t'(1);
+ end loop;
+ end Update;
+
+ procedure Update
+ (Item : wchars_ptr;
+ Offset : size_t;
+ Str : Wide_String;
+ Check : Boolean := True)
+ is
+ begin
+ Update (Item, Offset, To_C (Str), Check);
+ end Update;
+
+ -----------
+ -- Value --
+ -----------
+
+ function Value (Item : wchars_ptr) return wchar_array is
+ Result : wchar_array (0 .. Strlen (Item));
+
+ begin
+ if Item = Null_WPtr then
+ raise Dereference_Error;
+ end if;
+
+ -- Note that the following loop will also copy the terminating Nul
+
+ for J in Result'Range loop
+ Result (J) := Peek (Item + J);
+ end loop;
+
+ return Result;
+ end Value;
+
+ function Value
+ (Item : wchars_ptr;
+ Length : size_t)
+ return wchar_array
+ is
+ Result : wchar_array (0 .. Length - 1);
+
+ begin
+ if Item = Null_WPtr then
+ raise Dereference_Error;
+ end if;
+
+ for J in Result'Range loop
+ Result (J) := Peek (Item + J);
+ if Result (J) = wide_nul then
+ return Result (0 .. J);
+ end if;
+ end loop;
+
+ return Result;
+ end Value;
+
+ function Value (Item : wchars_ptr) return Wide_String is
+ begin
+ return To_Ada (Value (Item));
+ end Value;
+
+ function Value
+ (Item : wchars_ptr;
+ Length : size_t)
+ return Wide_String is
+ begin
+ return To_Ada (Value (Item, Length));
+ end Value;
+
+end Interface_Wchar;
Added: trunk/skel/adafar/src/Interface_Wchar.ads
===================================================================
--- trunk/skel/adafar/src/Interface_Wchar.ads (rev 0)
+++ trunk/skel/adafar/src/Interface_Wchar.ads 2011-10-10 17:45:53 UTC (rev 409)
@@ -0,0 +1,106 @@
+-------------------------------------------------------------------------------
+-- --
+-- Ada Interface to the X Window System and Motif(tm)/Lesstif --
+-- Copyright (c) 1996-2000 Hans-Frieder Vogt --
+-- --
+-- Adabindx is free software; you can redistribute it and/or modify it --
+-- under the terms of the GNU General Public License as published by the --
+-- Free Software Foundation; either version 2 of the License, or (at your --
+-- option) any later version. --
+-- --
+-- This program is distributed in the hope that it will be useful, but --
+-- WITHOUT ANY WARRANTY; without even the implied warranty of --
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. --
+-- See the GNU General Public License for more details. --
+-- --
+-- You should have received a copy of the GNU General Public License --
+-- along with this program; if not, write to the --
+-- Free Software Foundation, Inc., --
+-- 59 Temple Place - Suite 330, --
+-- Boston, MA 02111-1307, USA. --
+-- --
+-- As a special exception, if other files instantiate generics from this --
+-- unit, or you link this unit with other files to produce an executable, --
+-- this unit does not by itself cause the resulting executable to be --
+-- covered by the GNU General Public License. This exception does not --
+-- however invalidate any other reasons why the executable file might be --
+-- covered by the GNU General Public License. --
+-- --
+-- X Window System is copyrighted by the X Consortium --
+-- Motif(tm) is copyrighted by the Open Software Foundation, Inc. --
+-- and by The Open Group --
+-- --
+-- --
+-------------------------------------------------------------------------------
+
+-------------------------------------------------------------------------------
+--
+-- HISTORY:
+-- June 20, 1998 begin of history
+--
+-------------------------------------------------------------------------------
+
+-- package which implements C style wchar_t* handling like
+-- the interfaces.c.strings package
+
+with System.Storage_Elements;
+with Interfaces.C; use Interfaces.C;
+package Interface_Wchar is
+
+ type wchar_array_access is access all wchar_array;
+
+ type wchars_ptr is private;
+
+ type wchars_ptr_array is array (size_t range <>) of wchars_ptr;
+
+ Null_WPtr : constant wchars_ptr;
+
+ function To_Chars_Ptr
+ (Item : wchar_array_access;
+ Nul_Check : Boolean := False)
+ return wchars_ptr;
+
+ function New_Char_Array (Chars : wchar_array) return wchars_ptr;
+
+ function New_String (Str : Wide_String) return wchars_ptr;
+
+ procedure Free (Item : in out wchars_ptr);
+
+ Dereference_Error : exception;
+
+ function Value (Item : wchars_ptr) return wchar_array;
+
+ function Value
+ (Item : wchars_ptr;
+ Length : size_t)
+ return wchar_array;
+
+ function Value (Item : wchars_ptr) return Wide_String;
+
+ function Value
+ (Item : wchars_ptr;
+ Length : size_t)
+ return Wide_String;
+
+ function Strlen (Item : wchars_ptr) return size_t;
+
+ procedure Update
+ (Item : wchars_ptr;
+ Offset : size_t;
+ Chars : wchar_array;
+ Check : Boolean := True);
+
+ procedure Update
+ (Item : wchars_ptr;
+ Offset : size_t;
+ Str : Wide_St...
[truncated message content] |
|
From: <ek...@us...> - 2011-09-26 03:54:27
|
Revision: 408
http://farplugins.svn.sourceforge.net/farplugins/?rev=408&view=rev
Author: ekot
Date: 2011-09-26 03:54:18 +0000 (Mon, 26 Sep 2011)
Log Message:
-----------
Initial add
Added Paths:
-----------
trunk/nt_event2/
trunk/nt_event2/addon/
trunk/nt_event2/addon/colorer/
trunk/nt_event2/addon/colorer/default.hrc
trunk/nt_event2/addon/colorer/evtinfo.hrc
trunk/nt_event2/addon/colorer/evtinfor.hrc
trunk/nt_event2/addon/colorer/readme.txt
trunk/nt_event2/addon/esc/
trunk/nt_event2/addon/esc/esc.xml
trunk/nt_event2/bin/
trunk/nt_event2/readme.txt
trunk/nt_event2/src/
trunk/nt_event2/src/bootstrap/
trunk/nt_event2/src/el_category_cache.cpp
trunk/nt_event2/src/el_config.cpp
trunk/nt_event2/src/el_sid_cache.cpp
trunk/nt_event2/src/el_utils.cpp
trunk/nt_event2/src/ev_ver.m4
trunk/nt_event2/src/evplugin.h
trunk/nt_event2/src/evversion.m4
trunk/nt_event2/src/file_id_diz.m4
trunk/nt_event2/src/formatcode.bat
trunk/nt_event2/src/makefile
trunk/nt_event2/src/ntevent.cpp
trunk/nt_event2/src/ntevent.def
trunk/nt_event2/src/ntevent.lng
trunk/nt_event2/src/ntevent.rc
trunk/nt_event2/src/ntevent_hlf.m4
trunk/nt_event2/src/nteventr.lng
trunk/nt_event2/src/nteventr_hlf.m4
trunk/nt_event2/src/o/
Added: trunk/nt_event2/addon/colorer/default.hrc
===================================================================
--- trunk/nt_event2/addon/colorer/default.hrc (rev 0)
+++ trunk/nt_event2/addon/colorer/default.hrc 2011-09-26 03:54:18 UTC (rev 408)
@@ -0,0 +1,293 @@
+<?xml version="1.0" encoding='Windows-1251'?>
+<!DOCTYPE hrc PUBLIC "-//Cail Lomecb//DTD Colorer HRC take5//EN"
+ "http://colorer.sf.net/2003/hrc.dtd">
+<hrc version="take5" xmlns="http://colorer.sf.net/2003/hrc"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://colorer.sf.net/2003/hrc http://colorer.sf.net/2003/hrc.xsd">
+
+ <type name="def">
+ <annotation><documentation>
+ Shared macro-schemes, Common Region definitions,
+ </documentation></annotation>
+
+ <region name="default" description="Transparent region"/>
+ <region name="Text" description="Background text"/>
+
+ <region name="Syntax" description="Syntax check region"/>
+ <region name="Special" description="Invisible region"/>
+ <region name="Outlined" parent="Special" description="Outlined region"/>
+
+ <region name="PairStart" parent="Special" description="Paired struct start"/>
+ <region name="PairEnd" parent="Special" description="Paired struct end"/>
+ <region name="PairStrongStart" parent="PairStart" description="Blocked pair start"/>
+ <region name="PairStrongEnd" parent="PairEnd" description="Blocked pair end"/>
+
+ <region name="Number" description="Common Number"/>
+ <region name="NumberDec" parent="Number" description="Decimal Number"/>
+ <region name="NumberHex" parent="Number" description="Hexadecimal Number"/>
+ <region name="NumberBin" parent="Number" description="Binary Number"/>
+ <region name="NumberOct" parent="Number" description="Octal Number"/>
+ <region name="NumberFloat" parent="Number" description="Float Number"/>
+ <region name="NumberSuffix" parent="Number" description="Number Suffix"/>
+ <region name="NumberPrefix" parent="Number" description="Number Prefix"/>
+
+ <region name="String" description="Common string"/>
+ <region name="StringContent" parent="String" description="Tokens in String Content"/>
+ <region name="StringEdge" parent="String" description="String edges"/>
+ <region name="Character" parent="String" description="Single character"/>
+ <region name="CharacterContent" parent="Character" description="Character Content"/>
+
+ <region name="Comment" parent="Syntax" description="Comment"/>
+ <region name="CommentContent" parent="Comment" description="Comment Content"/>
+ <region name="LineComment" parent="Comment" description="Single Line Comment"/>
+ <region name="CommentEdge" parent="Comment" description="Comment edges"/>
+ <region name="CommentDoc" parent="Comment" description="In-Source Documentation comments"/>
+ <region name="CommentDocContent" parent="CommentDoc" description="In-Source Documentation Elements"/>
+ <region name="CommentDocEdge" parent="CommentDoc" description="In-Source Documentation Edges"/>
+
+ <region name="Symbol" description="Symbol"/>
+ <region name="SymbolStrong" parent="Symbol" description="Strong Symbol"/>
+ <region name="Operator" parent="Symbol" description="Symbolic or Literal Operator"/>
+ <region name="Prefix" description="Prefix"/>
+ <region name="PrefixStrong" parent="Prefix" description="Other prefix"/>
+
+ <region name="Keyword" description="Common Keyword"/>
+ <region name="KeywordStrong" parent="Keyword" description="Strong Keyword"/>
+ <region name="TypeKeyword" parent="Keyword" description="Simple type object declaration Keywords"/>
+ <region name="ClassKeyword" parent="Keyword" description="Class object Keywords"/>
+ <region name="StructKeyword" parent="Keyword" description="Structure object Keywords"/>
+ <region name="FunctionKeyword" parent="Keyword" description="Function object Keyword"/>
+ <region name="InterfaceKeyword" parent="Keyword" description="Interface object Keywords"/>
+ <region name="DeprecatedKeyword" parent="Keyword" description="Deprecate Keyword"/>
+
+ <region name="Constant" parent="Keyword" description="Constant declaration"/>
+ <region name="BooleanConstant" parent="Constant" description="Boolean Constant declaration"/>
+ <region name="Identifier" description="Identifier"/>
+
+ <!-- DEPRECATED!!! -->
+ <region name="Function" parent="Outlined" description="Function definition"/>
+
+ <region name="Register" description="Assembler register"/>
+ <region name="Var" description="Variable reference"/>
+ <region name="VarStrong" parent="Var" description="Strong Variable reference"/>
+
+ <region name="Directive" description="Compiler/Preprocessor directive"/>
+ <region name="DirectiveContent" parent="Directive" description="Internal directive text"/>
+ <region name="DirectiveEdge" parent="DirectiveContent" description="Directive edges"/>
+
+ <region name="Parameter" description="Parameter declaration"/>
+ <region name="ParameterStrong" parent="Parameter" description="Special parameter"/>
+ <region name="ParameterUnknown" parent="ParameterStrong" description="Undefined parameter"/>
+
+ <region name="Tag" description="XML/HTML/SGML tag"/>
+ <region name="OpenTag" parent="Tag" description="Opening tag"/>
+ <region name="CloseTag" parent="Tag" description="Closing tag"/>
+
+ <region name="EmbeddedTag" parent="Tag" description="Tag for embedded structures (asp, etc.)"/>
+
+ <region name="Label" description="Label"/>
+ <region name="LabelStrong" parent="Label" description="High contrast Label"/>
+
+ <region name="Insertion" description="Insertion source code"/>
+ <region name="InsertionStart" parent="Insertion" description="Source Insertion start"/>
+ <region name="InsertionEnd" parent="Insertion" description="Source Insertion end"/>
+ <region name="InsertionEmbed" parent="Insertion" description="Insertion embedded code"/>
+
+ <region name="URI" description="URI Address"/>
+ <region name="URL" parent="URI" description="URL Address"/>
+ <region name="Path" parent="URI" description="File Path"/>
+ <region name="EMail" parent="URI" description="EMail Address"/>
+ <region name="Date" description="Date"/>
+ <region name="Time" description="Time"/>
+
+ <region name="Error" description="Syntax error"/>
+ <region name="ErrorText" parent="Error" description="Potentially bad text"/>
+
+ <region name="TODO" parent="Error" description="TODO notes"/>
+ <region name="Debug" parent="Error" description="DEBUG notes"/>
+
+
+ <entity name="neverMatch" value="$neverMore^"/>
+
+
+ <scheme name="empty"/>
+ <scheme name="def"/>
+
+ <scheme name="CString">
+ <regexp match="/ (?{StringEdge}") (?{String} ( \\. | [^\\"] )*?) (?{StringEdge}") /x"/>
+ </scheme>
+
+ <scheme name="CHexNumber">
+ <regexp match="/\b 0x[\da-fA-F]+ (?{NumberSuffix}ul{0,2}|l{1,2}u?|(i64)|(i128))? \b/ix" region="NumberHex"/>
+ </scheme>
+
+ <scheme name="FloatNumber">
+ <regexp match="/\B \. \d+ ([eE][\-+]?\d+)? ([lLfF]?)\b/x" region0="NumberFloat" region2="NumberSuffix"/>
+ <regexp match="/\b \d+\.\d* ([eE][\-+]?\d+)? ([lLfF]?)\b/x" region0="NumberFloat" region2="NumberSuffix"/>
+ <regexp match="/\b \d+ ([eE][\-+]?\d+) ([lLfF]?)\b/x" region0="NumberFloat" region2="NumberSuffix"/>
+ </scheme>
+
+ <scheme name="DecNumber">
+ <regexp match="/\b\d+ (ul{0,2}|l{1,2}u?|i64|i128)?\b/ix" region0="NumberDec" region1="NumberSuffix"/>
+ </scheme>
+
+ <scheme name="Number">
+ <inherit scheme="CHexNumber"/>
+ <inherit scheme="FloatNumber"/>
+ <inherit scheme="DecNumber"/>
+ </scheme>
+
+ <scheme name="BadHex">
+ <regexp match="/\b(0x[\da-fA-F]*?([^\s\W\da-fA-F]).*?)\b/i" region0="Error"/>
+ </scheme>
+
+ <scheme name="StandardString">
+ <regexp match="/(?{StringEdge}") (?{String}.*?) (?{StringEdge}")/ix"/>
+ <regexp match="/(?{StringEdge}') (?{String}.*?) (?{StringEdge}')/ix"/>
+ </scheme>
+
+ <scheme name="Apost">
+ <regexp match="/\w(')[avDLSTMdstml]/" region1="String"/>
+ </scheme>
+
+ <scheme name="NetURL">
+ <regexp priority="low" region="URL"><![CDATA[
+ /\b ((https?|ftp|news|nntp|wais|wysiwyg|gopher|javascript|castanet|about)
+ \:\/\/ | (www|ftp|fido[0-9]*)\.)
+ [\[\]\@\%\:\+\w\.\/\~\?\-\*=_#&;]+\b\/?/ix]]>
+ </regexp>
+ </scheme>
+
+ <scheme name="NetEMail">
+<!-- Mail address -->
+ <regexp region1="EMail" region3="String" region4="String" priority="low"><![CDATA[
+ /( (\b mailto\s*\:\s*)? (<?) [A-Za-z\d][\w\.\~\-_#]*
+ \@[\w\~\-_#]+? \. [\?\=\w\.\~\-_#]+ (>?) ) /x]]>
+ </regexp>
+ <regexp match="/p\d{,3}\.f\d\.n\d{,4}\.z\d\.fidonet\.org/" region="EMail"/>
+ </scheme>
+
+ <scheme name="NetFTN">
+<!-- FTN address 2:5080/80.66 -->
+ <regexp region0="EMail" priority="low"><![CDATA[
+ /\b [1-9]\d* \: \d+\/\d+ (\.\d+)? (\@\w[\w\.\-]+)? \b/x]]>
+ </regexp>
+ </scheme>
+
+ <scheme name="NetAddresses">
+ <inherit scheme="NetEMail"/>
+ <inherit scheme="NetURL"/>
+ <inherit scheme="NetFTN"/>
+ </scheme>
+
+ <scheme name="Path">
+<!-- full path -->
+ <regexp region="Path"><![CDATA[
+ /\b ([A-Za-z]\: | [\w_\~\-\.`'!@#&\$\^\{\}\(\)]*\\)
+ [\w_\~\-\\\.`'!@#&\$\^\{\}\(\)]+ /x]]>
+ </regexp>
+<!-- file name only - disabled
+ <regexp match="/\b([A-Za-z0-9_\~\-`'!#&\$\^\{\}]+\.[A-Za-z0-9_\~\-`'!@#&\$\^\{\}]{1,5})\b/" region0="Path"/-->
+<!-- unix path
+ <regexp match="/\.?\/?([\w\.\-]+\/)+[\w\.\-]*/" region0="Path"/ -->
+ </scheme>
+
+ <scheme name="Date">
+ <regexp match="/\b[0-3]?\d[\/\.\-][0-1]?\d[\/\.\-]\d\d(\d\d)?\b/" region="Date"/>
+ </scheme>
+
+ <scheme name="Time">
+ <regexp region="Time"><![CDATA[/\b[0-2]?\d:[0-5]\d(:[0-5]\d)?(\s?(am|pm))?\b/i]]></regexp>
+ </scheme>
+
+ <scheme name="RCS">
+ <regexp region="Directive"><![CDATA[
+ /\$(Archive|Author|Date|Header|Id|Locker|Log|RCSfile|Revision|Source|State)(: .*?)?\$/]]>
+ </regexp>
+ <regexp match="/^<{7,}.*$/" region="TODO"/>
+ <regexp match="/^={7,}$/" region="TODO"/>
+ <regexp match="/^>{7,}.*$/" region="TODO"/>
+ </scheme>
+
+ <scheme name="Comment">
+<!-- just add http and e-mail highlighting -->
+ <inherit scheme="NetEMail"/>
+ <inherit scheme="NetURL"/>
+ <inherit scheme="RCS"/>
+ <regexp region="TODO">/[\!\?]{2,}/</regexp>
+<!--<regexp region="TODO">/[\w\-\_]{1,20} \s{,2} [\!\?]{2,}/x</regexp>-->
+ <regexp region="TODO" priority='low'>/\b((FIXME|TODO|BUG|FIX)\b.*$)/xi</regexp>
+
+ </scheme>
+
+ <scheme name="cNestedComment-internal">
+ <inherit scheme="Comment"/>
+ <block scheme="cNestedComment-internal" region="Comment">
+ <start region="PairStart">/\/\*/</start>
+ <end region="PairEnd">/\*\//</end>
+ </block>
+ </scheme>
+
+ <scheme name="cNestedComment">
+ <block scheme="cNestedComment-internal" region="Comment">
+ <start region="PairStart">/\/\*/</start>
+ <end region="PairEnd">/\*\//</end>
+ </block>
+ </scheme>
+
+
+ <scheme name="unixCommentDirective">
+ <regexp match="/^#!\s*([\S]+)( .*)?$/"
+ region0="Comment" region1="VarStrong" region2="KeywordStrong"
+ />
+ </scheme>
+ <scheme name="unixCommentFirstline"> <!-- first line in file only -->
+ <inherit scheme='unixCommentDirective'/>
+ <block start="//" end="/%neverMatch;/" scheme="def"/>
+ </scheme>
+
+
+ <scheme name="PairedBrackets">
+<!-- paired block -->
+ <block start="/(\{)/" end="/(\})/" scheme="PairedBrackets" region00="SymbolStrong" region01="PairStart" region10="SymbolStrong" region11="PairEnd"/>
+ <block start="/(\()/" end="/(\))/" scheme="PairedBrackets" region00="Symbol" region01="PairStart" region10="Symbol" region11="PairEnd"/>
+ <block start="/(\[)/" end="/(\])/" scheme="PairedBrackets" region00="Symbol" region01="PairStart" region10="Symbol" region11="PairEnd"/>
+ </scheme>
+
+ </type>
+</hrc>
+<!-- ***** BEGIN LICENSE BLOCK *****
+ - Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ -
+ - The contents of this file are subject to the Mozilla Public License Version
+ - 1.1 (the "License"); you may not use this file except in compliance with
+ - the License. You may obtain a copy of the License at
+ - http://www.mozilla.org/MPL/
+ -
+ - Software distributed under the License is distributed on an "AS IS" basis,
+ - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ - for the specific language governing rights and limitations under the
+ - License.
+ -
+ - The Original Code is the Colorer Library.
+ -
+ - The Initial Developer of the Original Code is
+ - Igor Russkih <irusskih at gmail dot com>.
+ - Portions created by the Initial Developer are Copyright (C) 1999-2007
+ - the Initial Developer. All Rights Reserved.
+ -
+ - Contributor(s):
+ -
+ - Alternatively, the contents of this file may be used under the terms of
+ - either the GNU General Public License Version 2 or later (the "GPL"), or
+ - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ - in which case the provisions of the GPL or the LGPL are applicable instead
+ - of those above. If you wish to allow use of your version of this file only
+ - under the terms of either the GPL or the LGPL, and not to allow others to
+ - use your version of this file under the terms of the MPL, indicate your
+ - decision by deleting the provisions above and replace them with the notice
+ - and other provisions required by the LGPL or the GPL. If you do not delete
+ - the provisions above, a recipient may use your version of this file under
+ - the terms of any one of the MPL, the GPL or the LGPL.
+ -
+ - ***** END LICENSE BLOCK ***** -->
Added: trunk/nt_event2/addon/colorer/evtinfo.hrc
===================================================================
--- trunk/nt_event2/addon/colorer/evtinfo.hrc (rev 0)
+++ trunk/nt_event2/addon/colorer/evtinfo.hrc 2011-09-26 03:54:18 UTC (rev 408)
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="us-ascii"?>
+<hrc version="take5" xmlns="http://colorer.sf.net/2003/hrc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+<type name="NTEvents">
+<annotation>
+<documentation><![CDATA[
+
+ *.info (for NTEvent plugin) colouring rules.
+ Designed for Colorer 1.0.3
+ Add the prototype like this to the proto.hrc or your custom hrc file:
+ ==========================================================
+<prototype name="NTEvent" group="scripts" description="NTEvent">
+<filename>/\.(info)$/i</filename>
+<location link="...\evtinfo.hrc"/>
+</prototype>
+ ==========================================================
+
+]]></documentation>
+<contributors>
+Eugene Kotlyarov
+</contributors>
+</annotation>
+
+ <region name="asmString" parent="String"/>
+ <region name="asmComment" parent="Comment"/>
+ <region name="asmToDo" parent="TODO"/>
+ <region name="asmDefinition" parent="Directive"/>
+ <region name="asmDirective" parent="Directive"/>
+ <region name="asmMnemonics" parent="Keyword"/>
+
+<region name="eiCategory" parent="Keyword"/>
+<region name="eiText" parent="dParam"/>
+<region name="eiDate" parent="dDate"/>
+<region name="eiTime" parent="dTime"/>
+<region name="eiError" parent="dError"/>
+<region name="eiWarning" parent="dTodo"/>
+<region name="eiOther" parent="eiText"/>
+
+<scheme name="other_stuff"> <!--include here whatever you want-->
+ <inherit scheme="mPath"/>
+ <inherit scheme="mNetAddresses"/>
+ <inherit scheme="mStdStr"/>
+ <inherit scheme="mCHexNumb"/>
+</scheme>
+
+<scheme name="MultiLine">
+ <block start="/^\M./" end="/$/" scheme="other_stuff" region="eiText"/>
+</scheme>
+
+<scheme name="EvtInfo">
+ <regexp match="/\M^([\w\s]+):(.*)$/" region1="dFunction"/>
+ <regexp match="/^(Date):\s+(.*)$/" region1="eiCategory" region2="eiDate"/>
+ <regexp match="/^(Time):\s+(.*)$/" region1="eiCategory" region2="eiTime"/>
+ <regexp match="/^(User):\s+(.*)$/" region1="eiCategory" region2="eiText"/>
+ <regexp match="/^(Computer):\s+(.*)$/" region1="eiCategory" region2="eiText"/>
+ <regexp match="/^(Event ID):\s+(.*)$/" region1="eiCategory" region2="eiText"/>
+ <regexp match="/^(Source):\s+(.*)$/" region1="eiCategory" region2="eiText"/>
+ <regexp match="/^(Type):\s+((Error)|(Warning)|(.*))$/" region1="eiCategory"
+ region3="eiError" region4="eiWarning" region5="eiOther"/>
+ <regexp match="/^(Category):\s+(.*)$/" region1="eiCategory" region2="eiText"/>
+ <regexp match="/^(Product):\s+(.*)$/" region1="eiCategory" region2="eiText"/>
+
+ <block start="/(Description):/" end="/^$/" scheme="MultiLine"
+ region01="eiCategory"/>
+
+ <block start="/(Data):/" end="/^$/" scheme="MultiLine"
+ region01="eiCategory"/>
+</scheme>
+</type>
+</hrc>
Added: trunk/nt_event2/addon/colorer/evtinfor.hrc
===================================================================
--- trunk/nt_event2/addon/colorer/evtinfor.hrc (rev 0)
+++ trunk/nt_event2/addon/colorer/evtinfor.hrc 2011-09-26 03:54:18 UTC (rev 408)
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="Windows-1251"?>
+<!DOCTYPE hrc SYSTEM "../hrc.dtd">
+<?xml-stylesheet type="text/xsl" href="../hrc.xsl"?>
+<!--
+ \x91奬\xA0 \xE0\xA0\xE1\xAA\xE0\xA0᪨ 䠩\xAB\xAE\xA2 *.info (\xA4\xAB\xEF \xAF\xAB\xA0\xA3\xA8\xAD\xA0 NTEvent).
+ \x90\xA0\xA7ࠡ\xAE⠭\xAE \xA4\xAB\xEF "Colorer 4ever".
+ \x84\xAE\xA1\xA0\xA2\xEC\xE2\xA5 \xA4\xE3\xEE騥 \xE1\xE2ப\xA8 \xA2 䠩\xAB colorer.hrc:
+ ==========================================================
+ <type descr="\x91\xAE\xA1\xEB\xE2\xA8\xEF" name="evt" exts="/\.info$/i">
+ <load name="_addons\evtinfor.hrc"/>
+ <scheme name="EvtInfo"/>
+ </type>
+ ==========================================================
+-->
+<hrc version="4ever">
+
+<define name="eiCategory" value="dKeyword"/>
+<define name="eiText" value="dParam"/>
+<define name="eiDate" value="dDate"/>
+<define name="eiTime" value="dTime"/>
+<define name="eiError" value="dError"/>
+<define name="eiWarning" value="dTodo"/>
+<define name="eiOther" value="eiText"/>
+
+<scheme name="other_stuff"> <!--include here whatever you want-->
+ <inherit scheme="mPath"/>
+ <inherit scheme="mNetAddresses"/>
+ <inherit scheme="mStdStr"/>
+ <inherit scheme="mCHexNumb"/>
+</scheme>
+<scheme name="MultiLine">
+ <block start="/^\M./" end="/$/" scheme="other_stuff" region="eiText"/>
+</scheme>
+
+<scheme name="EvtInfo">
+ <regexp match="/\M^([\w\s]+):(.*)$/" region1="dFunction"/>
+ <regexp match="/^(\x84\xA0\xE2\xA0):\s+(.*)$/" region1="eiCategory" region2="eiDate"/>
+ <regexp match="/^(\x82६\xEF):\s+(.*)$/" region1="eiCategory" region2="eiTime"/>
+ <regexp match="/^(\x8F\xAE\xAB짮\xA2\xA0⥫\xEC):\s+(.*)$/" region1="eiCategory" region2="eiText"/>
+ <regexp match="/^(\x8A\xAE\xAC\xAF\xEC\xEE\xE2\xA5\xE0):\s+(.*)$/" region1="eiCategory" region2="eiText"/>
+ <regexp match="/^(\x8A\xAE\xA4 \(ID\)):\s+(.*)$/" region1="eiCategory" region2="eiText"/>
+ <regexp match="/^(\x88\xE1\xE2\xAE筨\xAA):\s+(.*)$/" region1="eiCategory" region2="eiText"/>
+ <regexp match="/^(\x92\xA8\xAF):\s+((\x8E訡\xAA\xA0)|(\x8F।\xE3\xAF०\xA4\xA5\xAD\xA8\xA5)|(.*))$/" region1="eiCategory"
+ region3="eiError" region4="eiWarning" region5="eiOther"/>
+ <regexp match="/^(\x8A\xA0⥣\xAE\xE0\xA8\xEF):\s+(.*)$/" region1="eiCategory" region2="eiText"/>
+ <regexp match="/^(\x8Fத\xE3\xAA\xE2):\s+(.*)$/" region1="eiCategory" region2="eiText"/>
+
+ <block start="/(\x8E\xAF\xA8ᠭ\xA8\xA5):/" end="/^$/" scheme="MultiLine"
+ region01="eiCategory"/>
+
+ <block start="/(\x84\xA0\xAD\xAD\xEB\xA5):/" end="/^$/" scheme="MultiLine"
+ region01="eiCategory"/>
+</scheme>
+</hrc>
Added: trunk/nt_event2/addon/colorer/readme.txt
===================================================================
--- trunk/nt_event2/addon/colorer/readme.txt (rev 0)
+++ trunk/nt_event2/addon/colorer/readme.txt 2011-09-26 03:54:18 UTC (rev 408)
@@ -0,0 +1,22 @@
+=== English
+0. Make sure you have "Colorer forever" plugin properly installed.
+1. Create folder Colorer\hrc\_addons.
+2. Copy evtinfo.hrc to Colorer\hrc\_addons.
+3. Add following lines into colorer.hrc:
+
+ <type descr="Events" name="evt" exts="/\.info$/i">
+ <load name="_addons\evtinfo.hrc"/>
+ <scheme name="EvtInfo"/>
+ </type>
+
+
+=== Russian
+0. Удостоверьтесь в том, что у Вас установлен плагин "Colorer forever".
+1. Создайте папку Colorer\hrc\_addons.
+2. Скопируйте evtinfor.hrc в папку Colorer\hrc\_addons.
+3. Добавьте следующие строки в colorer.hrc:
+
+ <type descr="События" name="evt" exts="/\.info$/i">
+ <load name="_addons\evtinfor.hrc"/>
+ <scheme name="EvtInfo"/>
+ </type>
Added: trunk/nt_event2/addon/esc/esc.xml
===================================================================
--- trunk/nt_event2/addon/esc/esc.xml (rev 0)
+++ trunk/nt_event2/addon/esc/esc.xml 2011-09-26 03:54:18 UTC (rev 408)
@@ -0,0 +1,5 @@
+<Esc-Settings>
+ <Types>
+ <type name="nt events" mask="[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].err.info,[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].war.info,[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].inf.info,[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].aus.info,[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].auf.info,[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].info" tabsize="10"/>
+ </Types>
+</Esc-Settings>
Added: trunk/nt_event2/readme.txt
===================================================================
--- trunk/nt_event2/readme.txt (rev 0)
+++ trunk/nt_event2/readme.txt 2011-09-26 03:54:18 UTC (rev 408)
@@ -0,0 +1,192 @@
+*********************************** NT ONLY ***********************************
+
+Introduction
+
+NT Events is a plugin for FAR Manager.
+It allows to list/backup/clear NT Event Logs.
+
+Status
+
+NT Events is freeware. You can use the binaries and the source code for any
+purpose you like.
+
+Warranty
+NT Events is distributed "AS IS". No warranty of any kind is expressed or
+implied. Use it at your own risk.
+
+Highliting
+
+You may highlight different event types.
+
+REGEDIT4
+
+[HKEY_CURRENT_USER\Software\Far\Colors\Highlight]
+
+[HKEY_CURRENT_USER\Software\Far\Colors\Highlight\GroupV]
+"Mask"="*.auf.info"
+"NormalColor"=dword:00000014
+"CursorColor"=dword:00000000
+"IncludeAttributes"=dword:00000000
+"ExcludeAttributes"=dword:00000000
+"SelectedColor"=dword:00000000
+"SelectedCursorColor"=dword:00000000
+"MarkChar"=dword:00000000
+
+[HKEY_CURRENT_USER\Software\Far\Colors\Highlight\GroupW]
+"Mask"="*.aus.info"
+"NormalColor"=dword:00000013
+"CursorColor"=dword:00000000
+"IncludeAttributes"=dword:00000000
+"ExcludeAttributes"=dword:00000000
+"SelectedColor"=dword:00000000
+"SelectedCursorColor"=dword:00000000
+"MarkChar"=dword:00000000
+
+[HKEY_CURRENT_USER\Software\Far\Colors\Highlight\GroupX]
+"Mask"="*.inf.info"
+"NormalColor"=dword:00000019
+"CursorColor"=dword:00000000
+"IncludeAttributes"=dword:00000000
+"ExcludeAttributes"=dword:00000000
+"SelectedColor"=dword:00000000
+"SelectedCursorColor"=dword:00000000
+"MarkChar"=dword:00000000
+
+[HKEY_CURRENT_USER\Software\Far\Colors\Highlight\GroupY]
+"Mask"="*.war.info"
+"IncludeAttributes"=dword:00000000
+"ExcludeAttributes"=dword:00000000
+"NormalColor"=dword:0000001a
+"SelectedColor"=dword:00000000
+"CursorColor"=dword:00000000
+"SelectedCursorColor"=dword:00000000
+"MarkChar"=dword:00000000
+
+[HKEY_CURRENT_USER\Software\Far\Colors\Highlight\GroupZ]
+"Mask"="*.err.info"
+"IncludeAttributes"=dword:00000000
+"ExcludeAttributes"=dword:00000000
+"NormalColor"=dword:0000001c
+"SelectedColor"=dword:00000000
+"CursorColor"=dword:00000000
+"SelectedCursorColor"=dword:00000000
+"MarkChar"=dword:00000000
+
+Contacts
+
+E-mail: zg...@ma...
+
+History
+
+v2.0 build 1 25.09.2011
+- make unicode and 64 bit versions for Far 2.0
+
+v0.5 build 14 04-05-2003 RC3
+- dialog history bug.
+- removed unneeded '"'-symbol from resources.
+- Crash on ShiftF1.
+- ShiftF3/ShiftF4 view event data in viewer/editor.
+- gcc 3.2.2.
+
+v0.5 build 13 26-08-2002
+- Shift-F2 problem fixed.
+- you can customize quickview.
+- state saving may be disabled.
+- *.info generated mor clearly.
+- fixed: params parsing bug.
+- state saving improved.
+- fixed: memory overrun bug.
+
+v0.5 build 12 01-06-2002
+- plugin save all state.
+- then file is opened in editor, plugin set R/O attribute for this file.
+
+v0.5 build 11 06-04-2002
+- fixed: realloc bug.
+- fixed: search bug.
+- fixed: bad colors in overwrite dialog in FAR 1.70 beta 4.
+
+v0.4 build 10 17-12-2001 RC2
+- workaround for FormatMessage AV.
+- memory leak.
+- AV fix in cathegory cache.
+
+v0.4 build 9 13-12-2001
+- "local" label.
+- support multiple event and parameters files.
+- AV under stress.
+- settings for Esc plugin.
+- empty data don't shown.
+- changes in documentation.
+- fixed: oem problem in categories. introduced in build 6.
+
+v0.3 build 8 22-09-2001 RC1
+- now backup work only on local log.
+- sid cache optimization.
+- small optimization in GetFiles.
+- fixed: oem problem in usernames. introduced in build 6.
+
+v0.2 build 7 18-09-2001
+- user now in 4th custom column.
+- fixed: local time bug. introduced in build 6.
+- now you can specify status.
+- fixed: sid cache host bug.
+- fixed: sid cache domain bug.
+- dead code.
+- fixed: Shift-Del bug.
+
+v0.2 build 6 08-09-2001
+- fixed: creation/modification time bug.
+- category full support.
+- sid cache.
+- Esc processing then log is scanned.
+- fixed: memory leak.
+- fixed: Alt-Del bug.
+- fixed: get full file name then open from command line.
+- support "ParameterMessageFile" registry key.
+- fixed: inconvenient formatting.
+- progress then copying.
+- russian .hlf file. thanks a lot to Sergey Morozov <msv...@ya...>
+
+v0.1 build 5 14-07-2001 Beta 1
+- hrc for colorer 4ever. thanks a lot to Alexey Yatsenko <al...@ho...>.
+- russian .lng file. thanks a lot to Alexey Yatsenko <al...@ho...>.
+- Shift-F6: local.
+
+v0.1 build 4 06-07-2001 Alfa 2
+- fixed: oem problems.
+- fixed: didn't display error in some cases.
+- fixed: keybar names.
+- computer name now may contain oem characters.
+- cd behavior changed.
+- event content now is recoded to oem.
+- fixed: forward/backward.
+- more convenient copy routine.
+- fixed: instead data displayed garbage.
+- fixed: oem problems.
+- fixed: evt: prefix sometimes didn't work with files.
+- remove ExitFar declaration.
+
+v0.0 build 3 21-06-2001 Alfa 1
+- scan type.
+- evt prefix.
+- fix in SetDirectory.
+- partial network support.
+- text limited 260 symbols in copy dialog.
+- fix: bug in event reading.
+- *.evt support.
+- backup log.
+- very slow get user name.
+- add to config menu.
+- add to disk menu.
+- configuration dialog.
+
+v0.0 build 2 22-05-2001
+- clear log.
+- key titles.
+- local time.
+- custom columns.
+- lng.
+
+v0.0 build 1 16-05-2001
+- first version.
Added: trunk/nt_event2/src/el_category_cache.cpp
===================================================================
--- trunk/nt_event2/src/el_category_cache.cpp (rev 0)
+++ trunk/nt_event2/src/el_category_cache.cpp 2011-09-26 03:54:18 UTC (rev 408)
@@ -0,0 +1,161 @@
+#include <stdio.h>
+#include <windows.h>
+#include <wchar.h>
+#include <string.h>
+#include "evplugin.h"
+
+static const wchar_t *empty_string = L"";
+
+struct CacheRecord
+{
+ char *source;
+ wchar_t *category;
+ wchar_t category_bad[6];
+ unsigned short category_index;
+ bool flag;
+ CacheRecord *next;
+};
+
+static CacheRecord *category_cache = NULL;
+
+void free_category_cache (void)
+{
+ CacheRecord *tmp_rec;
+ while (category_cache)
+ {
+ tmp_rec = category_cache;
+ category_cache = category_cache->next;
+ free (tmp_rec->source);
+ free (tmp_rec->category);
+ free (tmp_rec);
+ }
+};
+
+static wchar_t *add_category_cache (char *source, unsigned short category_index)
+{
+ wchar_t *res = (wchar_t *) empty_string;
+ CacheRecord *new_rec = (CacheRecord *) malloc (sizeof (CacheRecord));
+ if (new_rec)
+ {
+ new_rec->category_index = category_index;
+ new_rec->flag = false;
+ new_rec->source = (char *) malloc (strlen (source) + 1);
+ if (new_rec->source)
+ {
+ new_rec->next = category_cache;
+ category_cache = new_rec;
+ strcpy (new_rec->source, source);
+ HKEY hKey = NULL;
+ wchar_t CatFile[MAX_PATH];
+ CatFile[0] = 0;
+ if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, EVENTLOG_KEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
+ {
+ wchar_t NameBuffer[MAX_PATH];
+ LONG Result;
+ for (int i = 0;; i++)
+ {
+ Result = RegEnumKey (hKey, i, NameBuffer, sizeof (NameBuffer));
+ if (Result == ERROR_NO_MORE_ITEMS)
+ break;
+ if (Result == ERROR_SUCCESS)
+ {
+ wchar_t Key[1024];
+ wchar_t CatFileWork[MAX_PATH];
+ HKEY hKey2;
+ DWORD Type;
+ DWORD DataSize = 0;
+ wsprintf (Key, L"%s\\%s\\%s", EVENTLOG_KEY, NameBuffer, source);
+ if ((RegOpenKeyEx (HKEY_LOCAL_MACHINE, Key, 0, KEY_QUERY_VALUE, &hKey2)) == ERROR_SUCCESS)
+ {
+ DataSize = sizeof (CatFileWork);
+ if (RegQueryValueEx (hKey2, L"CategoryMessageFile", 0, &Type, (LPBYTE) CatFileWork, &DataSize)
+ == ERROR_SUCCESS)
+ {
+ ExpandEnvironmentStrings (CatFileWork, CatFile, sizeof (CatFile));
+ }
+ RegCloseKey (hKey2);
+ break;
+ }
+ }
+ }
+ RegCloseKey (hKey);
+ }
+ if (CatFile[0])
+ {
+ HINSTANCE lib;
+ wchar_t *category;
+ DWORD category_size = 0;
+ lib = LoadLibrary (CatFile);
+ if (lib)
+ {
+ category_size =
+ FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE |
+ FORMAT_MESSAGE_ARGUMENT_ARRAY | FORMAT_MESSAGE_MAX_WIDTH_MASK, lib, category_index,
+ LANG_NEUTRAL, (wchar_t *) &category, 512, NULL);
+ FreeLibrary (lib);
+ }
+ if (category_size)
+ {
+ new_rec->category = (wchar_t *) malloc ((wcslen (category) + 1) * sizeof(wchar_t));
+ if (new_rec->category)
+ {
+ wcscpy (new_rec->category, category);
+ res = new_rec->category;
+ new_rec->flag = true;
+ }
+ LocalFree (category);
+ }
+ }
+ if (!new_rec->flag)
+ {
+ wsprintf (new_rec->category_bad, L"%d", category_index);
+ res = new_rec->category_bad;
+ }
+ } // new_rec->source
+ else
+ free (new_rec);
+ }
+ return res;
+}
+
+static wchar_t *get_category_cache (char *source, unsigned short category_index)
+{
+ wchar_t *res = NULL;
+ CacheRecord *tmp_rec = category_cache;
+ while (tmp_rec)
+ {
+ if (source)
+ {
+ if (/*!_stricmp (tmp_rec->source, source)*/ 0)
+ {
+ if (tmp_rec->flag)
+ {
+ if (tmp_rec->category_index == category_index)
+ {
+ res = tmp_rec->category;
+ break;
+ }
+ }
+ else
+ {
+ wsprintf (tmp_rec->category_bad, L"%d", category_index);
+ res = tmp_rec->category_bad;
+ break;
+ }
+ }
+ }
+ tmp_rec = tmp_rec->next;
+ }
+ return res;
+}
+
+wchar_t *GetCategory (EVENTLOGRECORD * rec)
+{
+ wchar_t *res = (wchar_t *) empty_string;
+ char *source = (char *) (rec + 1);
+ unsigned short category_index = rec->EventCategory;
+ res = get_category_cache (source, category_index);
+ if (!res)
+ res = add_category_cache (source, category_index);
+ return res;
+}
Added: trunk/nt_event2/src/el_config.cpp
===================================================================
--- trunk/nt_event2/src/el_config.cpp (rev 0)
+++ trunk/nt_event2/src/el_config.cpp 2011-09-26 03:54:18 UTC (rev 408)
@@ -0,0 +1,134 @@
+static LONG_PTR WINAPI ConfigDialogProc (HANDLE hDlg, int Msg, int Param1, LONG_PTR Param2)
+{
+ return Info.DefDlgProc (hDlg, Msg, Param1, Param2);
+}
+
+enum
+{
+ CONFIG_BORDER = 0,
+ CONFIG_ADDDISK,
+ CONFIG_ADDMENU,
+ CONFIG_SEP1,
+ CONFIG_BROWSEEVT,
+ CONFIG_STRIPEXT,
+ CONFIG_RESTORE,
+ CONFIG_SEP2,
+ CONFIG_FORWARD,
+ CONFIG_BACKWARD,
+ CONFIG_SHOWHEADER,
+ CONFIG_SHOWDESC,
+ CONFIG_SHOWDATA,
+ CONFIG_SEP3,
+ CONFIG_PREFIXLABEL,
+ CONFIG_PREFIX,
+ CONFIG_SEP4,
+ CONFIG_SAVE,
+ CONFIG_CANCEL,
+};
+
+static int Config ()
+{
+ //Show dialog
+ /*
+ 0000000000111111111122222222223333333333444444444455555555556666666666777777
+ 0123456789012345678901234567890123456789012345678901234567890123456789012345
+ 00 00
+ 01 \xC9\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD Event viewer \xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCDͻ 01
+ 02 \xBA [x] Add to Disks menu \xBA 02
+ 03 \xBA [ ] Add to Plugins menu \xBA 03
+ 04 \xC7\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4Ķ 05
+ 05 \xBA [ ] Browse .evt files \xBA 06
+ 06 \xBA [ ] Strip second extension \xBA 07
+ 07 \xC7\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4Ķ 08
+ 08 \xBA (*) Scan forward \xBA 09
+ 09 \xBA ( ) Scan backward \xBA 10
+ 10 \xC7\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4Ķ 11
+ 11 \xBA Command line prefix to start the nt events: \xBA 12
+ 12 \xBA evt \xBA 13
+ 13 \xC7\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4Ķ 14
+ 14 \xBA [ Ok ] [ Cancel ] \xBA 15
+ 15 \xC8\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCDͼ 16
+ 16 17
+ 0000000000111111111122222222223333333333444444444455555555556666666666777777
+ 0123456789012345678901234567890123456789012345678901234567890123456789012345
+ */
+
+ struct InitDialogItem InitItems[] = {
+ /* 0 */ {DI_DOUBLEBOX, 3, 1, 72, 17, 0, 0, 0, 0, (wchar_t *) mName},
+ /* 1 */ {DI_CHECKBOX, 5, 2, 0, 0, 0, 0, 0, 0, (wchar_t *) mConfigAddToDisksMenu},
+ /* 2 */ {DI_CHECKBOX, 5, 3, 0, 0, 0, 0, 0, 0, (wchar_t *) mConfigAddToPluginMenu},
+ /* 3 */ {DI_TEXT, -1, 4, 0, 0, 0, 0, DIF_SEPARATOR, 0, L""},
+ /* 4 */ {DI_CHECKBOX, 5, 5, 0, 0, 0, 0, 0, 0, (wchar_t *) mConfigBrowseEvtFiles},
+ /* 5 */ {DI_CHECKBOX, 5, 6, 0, 0, 0, 0, 0, 0, (wchar_t *) mConfigStripExtension},
+ /* 6 */ {DI_CHECKBOX, 5, 7, 0, 0, 0, 0, 0, 0, (wchar_t *) mConfigRestore},
+ /* 7 */ {DI_TEXT, -1, 8, 0, 0, 0, 0, DIF_SEPARATOR, 0, L""},
+ /* 8 */ {DI_RADIOBUTTON, 5, 9, 0, 0, 0, 0, DIF_GROUP, 0, (wchar_t *) mConfigScan1},
+ /*09 */ {DI_RADIOBUTTON, 5, 10, 0, 0, 0, 0, 0, 0, (wchar_t *) mConfigScan2},
+ /*10 */ {DI_CHECKBOX, 39, 9, 0, 0, 0, 0, 0, 0, (wchar_t *) mConfigShowHeader},
+ /*10 */ {DI_CHECKBOX, 39, 10, 0, 0, 0, 0, 0, 0, (wchar_t *) mConfigShowDescription},
+ /*10 */ {DI_CHECKBOX, 39, 11, 0, 0, 0, 0, 0, 0, (wchar_t *) mConfigShowData},
+ /*11 */ {DI_TEXT, -1, 12, 0, 0, 0, 0, DIF_SEPARATOR, 0, L""},
+ /*12 */ {DI_TEXT, 5, 13, 0, 0, 0, 0, 0, 0, (wchar_t *) mConfigPrefix},
+ /*13*/ {DI_FIXEDIT, 5, 14, 19, 12, 0, (DWORD_PTR)L"AAAAAAAAAAAAAAA", DIF_MASKEDIT, 0, L""},
+ /*14 */ {DI_TEXT, -1, 15, 0, 0, 0, 0, DIF_SEPARATOR, 0, L""},
+ /*15 */ {DI_BUTTON, 0, 16, 0, 0, 0, 0, DIF_CENTERGROUP, 1, (wchar_t *) mConfigSave},
+ /*16 */ {DI_BUTTON, 0, 16, 0, 0, 0, 0, DIF_CENTERGROUP, 0, (wchar_t *) mConfigCancel}
+ };
+ struct FarDialogItem DialogItems[ARRAYSIZE(InitItems)];
+ memset(DialogItems, 0, sizeof(DialogItems));
+ InitDialogItems (InitItems, DialogItems, ARRAYSIZE(InitItems));
+
+ DialogItems[CONFIG_ADDDISK].Selected = Opt.AddToDisksMenu;
+ DialogItems[CONFIG_ADDMENU].Selected = Opt.AddToPluginsMenu;
+ DialogItems[CONFIG_BROWSEEVT].Selected = Opt.BrowseEvtFiles;
+ DialogItems[CONFIG_STRIPEXT].Selected = Opt.StripExt;
+ DialogItems[CONFIG_RESTORE].Selected = Opt.Restore;
+ DialogItems[CONFIG_FORWARD + Opt.ScanType].Selected = 1;
+ DialogItems[CONFIG_PREFIX].PtrData = Opt.Prefix;
+ DialogItems[CONFIG_SHOWHEADER].Selected = QVOpt.ShowHeader;
+ DialogItems[CONFIG_SHOWDESC].Selected = QVOpt.ShowDescription;
+ DialogItems[CONFIG_SHOWDATA].Selected = QVOpt.ShowData;
+
+ HANDLE hDlg = Info.DialogInit(Info.ModuleNumber, -1, -1, 76, 19, L"Config", DialogItems,
+ ARRAYSIZE(DialogItems), 0, 0, ConfigDialogProc, 0);
+ int DlgCode = Info.DialogRun(hDlg);
+
+ if (DlgCode != CONFIG_SAVE)
+ return (FALSE);
+ Opt.AddToDisksMenu = Info.SendDlgMessage(hDlg, DM_GETCHECK, CONFIG_ADDDISK, 0);
+ Opt.AddToPluginsMenu = Info.SendDlgMessage(hDlg, DM_GETCHECK, CONFIG_ADDMENU, 0);
+ Opt.BrowseEvtFiles = Info.SendDlgMessage(hDlg, DM_GETCHECK, CONFIG_BROWSEEVT, 0);
+ Opt.StripExt = Info.SendDlgMessage(hDlg, DM_GETCHECK, CONFIG_STRIPEXT, 0);
+ Opt.ScanType = Info.SendDlgMessage(hDlg, DM_GETCHECK, CONFIG_FORWARD, 0) ? 0 : 1;
+ Opt.Restore = Info.SendDlgMessage(hDlg, DM_GETCHECK, CONFIG_RESTORE, 0);
+ QVOpt.ShowHeader = Info.SendDlgMessage(hDlg, DM_GETCHECK, CONFIG_SHOWHEADER, 0);
+ QVOpt.ShowDescription = Info.SendDlgMessage(hDlg, DM_GETCHECK, CONFIG_SHOWDESC, 0);
+ QVOpt.ShowData = Info.SendDlgMessage(hDlg, DM_GETCHECK, CONFIG_SHOWDATA, 0);
+
+ wcscpy (Opt.Prefix, (wchar_t *)Info.SendDlgMessage(hDlg, DM_GETCONSTTEXTPTR, CONFIG_PREFIX, 0));
+ OutputDebugString(Opt.Prefix);
+ FSF.Trim (Opt.Prefix);
+ OutputDebugString(Opt.Prefix);
+
+ HKEY hKey;
+ DWORD Disposition;
+ if ((RegCreateKeyEx (HKEY_CURRENT_USER, PluginRootKey, 0, NULL, 0, KEY_WRITE, NULL, &hKey, &Disposition)) ==
+ ERROR_SUCCESS)
+ {
+ RegSetValueEx (hKey, L"AddToDisksMenu", 0, REG_DWORD, (LPBYTE) & Opt.AddToDisksMenu, sizeof (Opt.AddToDisksMenu));
+ RegSetValueEx (hKey, L"AddToPluginsMenu", 0, REG_DWORD, (LPBYTE) & Opt.AddToPluginsMenu,
+ sizeof (Opt.AddToPluginsMenu));
+ RegSetValueEx (hKey, L"BrowseEvtFiles", 0, REG_DWORD, (LPBYTE) & Opt.BrowseEvtFiles, sizeof (Opt.BrowseEvtFiles));
+ RegSetValueEx (hKey, L"StripExt", 0, REG_DWORD, (LPBYTE) & Opt.StripExt, sizeof (Opt.StripExt));
+ RegSetValueEx (hKey, L"ScanType", 0, REG_DWORD, (LPBYTE) & Opt.ScanType, sizeof (Opt.ScanType));
+ RegSetValueEx (hKey, L"Prefix", 0, REG_SZ, (LPBYTE) Opt.Prefix, sizeof(wchar_t) * (wcslen (Opt.Prefix) + 1));
+
+ RegSetValueEx (hKey, L"Restore", 0, REG_DWORD, (LPBYTE) & Opt.Restore, sizeof (Opt.Restore));
+ RegSetValueEx (hKey, L"ShowHeader", 0, REG_DWORD, (LPBYTE) & QVOpt.ShowHeader, sizeof (QVOpt.ShowHeader));
+ RegSetValueEx (hKey, L"ShowDescription", 0, REG_DWORD, (LPBYTE) & QVOpt.ShowDescription,
+ sizeof (QVOpt.ShowDescription));
+ RegSetValueEx (hKey, L"ShowData", 0, REG_DWORD, (LPBYTE) & QVOpt.ShowData, sizeof (QVOpt.ShowData));
+ RegCloseKey (hKey);
+ }
+ return (TRUE);
+}
Added: trunk/nt_event2/src/el_sid_cache.cpp
===================================================================
--- trunk/nt_event2/src/el_sid_cache.cpp (rev 0)
+++ trunk/nt_event2/src/el_sid_cache.cpp 2011-09-26 03:54:18 UTC (rev 408)
@@ -0,0 +1,122 @@
+#include <windows.h>
+#include <wchar.h>
+
+struct CacheRecord
+{
+ PSID sid;
+ wchar_t *username;
+ CacheRecord *next;
+};
+
+static CacheRecord *sid_cache = NULL;
+
+void free_sid_cache (void)
+{
+ CacheRecord *tmp_rec;
+ while (sid_cache)
+ {
+ tmp_rec = sid_cache;
+ sid_cache = sid_cache->next;
+ free (tmp_rec->sid);
+ free (tmp_rec->username);
+ free (tmp_rec);
+ }
+};
+
+static const wchar_t *NA = L"N/A";
+
+static wchar_t *add_sid_cache (wchar_t * computer1, wchar_t * computer2, PSID sid)
+{
+ wchar_t *res = (wchar_t *)NA;
+ const wchar_t *account_unknown = L"Account Unknown";
+ CacheRecord *new_rec = (CacheRecord *) malloc (sizeof (CacheRecord));
+ if (new_rec)
+ {
+ new_rec->sid = (PSID) malloc (GetLengthSid (sid));
+ if (new_rec->sid)
+ {
+ DWORD name_size = 0, domain_size = 0;
+ SID_NAME_USE type;
+ wchar_t *computer = computer1;
+ CopySid (GetLengthSid (sid), new_rec->sid, sid);
+ add_sid_cache_retry:
+ if (!LookupAccountSid (computer, sid, NULL, &name_size, NULL, &domain_size, &type))
+ {
+ if (GetLastError () == ERROR_INSUFFICIENT_BUFFER)
+ {
+ new_rec->username = (wchar_t *) malloc ((name_size + domain_size) * sizeof(wchar_t));
+ if (new_rec->username)
+ {
+ wchar_t *domain_ptr = new_rec->username, *user_ptr = new_rec->username + domain_size;
+ if (domain_size == 1)
+ {
+ user_ptr = new_rec->username;
+ domain_ptr = new_rec->username + name_size;
+ }
+ if (LookupAccountSid (computer, sid, user_ptr, &name_size, domain_ptr, &domain_size, &type))
+ {
+ if (domain_size)
+ new_rec->username[domain_size] = L'\\';
+ goto add_sid_cache_link;
+ }
+ }
+ }
+ else if (((GetLastError () == RPC_S_SERVER_UNAVAILABLE) || (GetLastError () == ERROR_NONE_MAPPED))
+ && (computer == computer1))
+ {
+ computer = computer2;
+ goto add_sid_cache_retry;
+ }
+ else
+ {
+ new_rec->username = (wchar_t *) malloc ((wcslen (account_unknown) + 1) * sizeof(wchar_t));
+ if (new_rec->username)
+ {
+ wcscpy (new_rec->username, account_unknown);
+ add_sid_cache_link:
+ new_rec->next = sid_cache;
+ sid_cache = new_rec;
+ res = new_rec->username;
+ goto add_sid_cache_ok;
+ }
+ }
+ }
+ }
+ free (new_rec->sid);
+ free (new_rec->username);
+ free (new_rec);
+ }
+add_sid_cache_ok:
+ return res;
+}
+
+static wchar_t *get_sid_cache (PSID sid)
+{
+ wchar_t *res = NULL;
+ CacheRecord *tmp_rec = sid_cache;
+ while (tmp_rec)
+ {
+ if (EqualSid (tmp_rec->sid, sid))
+ {
+ res = tmp_rec->username;
+ break;
+ }
+ tmp_rec = tmp_rec->next;
+ }
+ return res;
+}
+
+wchar_t *GetEventUserName (wchar_t * computer, EVENTLOGRECORD * rec)
+{
+ wchar_t *res = (wchar_t *)NA;
+ PSID sid = (char *) rec + rec->UserSidOffset;
+ wchar_t *computer2 = (wchar_t *) (rec + 1);
+ computer2 += wcslen (computer2) + 1;
+ if (IsValidSid (sid))
+ {
+ res = get_sid_cache (sid);
+ if (!res)
+ res = add_sid_cache (computer, computer2, sid);
+ }
+ return res;
+}
Added: trunk/nt_event2/src/el_utils.cpp
===================================================================
--- trunk/nt_event2/src/el_utils.cpp (rev 0)
+++ trunk/nt_event2/src/el_utils.cpp 2011-09-26 03:54:18 UTC (rev 408)
@@ -0,0 +1,327 @@
+struct MsgPath
+{
+ wchar_t path[MAX_PATH];
+};
+
+static void parse_filelist (wchar_t * List, struct MsgPath **File, int *FileCount)
+{
+ wchar_t *cur_pos = List, *next_pos, expanded[MAX_PATH];
+ *FileCount = 0;
+ while (cur_pos)
+ {
+ (*FileCount)++;
+ cur_pos = wcschr (cur_pos, ';');
+ if (cur_pos)
+ cur_pos++;
+ }
+ if (*FileCount)
+ {
+ *File = (struct MsgPath *) malloc (sizeof (struct MsgPath) * (*FileCount));
+ if (*File)
+ {
+ cur_pos = List;
+ for (int i = 1; i < (*FileCount); i++)
+ {
+ next_pos = wcschr (cur_pos, ';');
+ if (next_pos)
+ {
+ wcsncpy ((*File)[i - 1].path, cur_pos, next_pos - cur_pos);
+ cur_pos = next_pos + 1;
+ }
+ else
+ break;
+ }
+ wcscpy ((*File)[(*FileCount) - 1].path, cur_pos);
+ for (int i = 0; i < (*FileCount); i++)
+ {
+ ExpandEnvironmentStrings ((*File)[i].path, expanded, sizeof (expanded));
+ }
+ }
+ else
+ *FileCount = 0;
+ }
+}
+
+static void GetMessageFile (wchar_t * Src, struct MsgPath **MsgFile,
+ int *MsgFileCount, struct MsgPath **ParamsFile, int *ParamsFileCount)
+{
+ HKEY hKey = NULL;
+ MsgFile[0] = 0;
+ ParamsFile[0] = 0;
+ if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, EVENTLOG_KEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
+ {
+ wchar_t NameBuffer[MAX_PATH];
+ LONG Result;
+ for (int i = 0;; i++)
+ {
+ Result = RegEnumKey (hKey, i, NameBuffer, sizeof (NameBuffer));
+ if (Result == ERROR_NO_MORE_ITEMS)
+ break;
+ if (Result == ERROR_SUCCESS)
+ {
+ wchar_t Key[1024];
+ wchar_t MsgFileWork[MAX_PATH];
+ HKEY hKey2;
+ DWORD Type;
+ DWORD DataSize = 0;
+ wsprintf (Key, L"%s\\%s\\%s", EVENTLOG_KEY, NameBuffer, Src);
+ if ((RegOpenKeyEx (HKEY_LOCAL_MACHINE, Key, 0, KEY_QUERY_VALUE, &hKey2)) == ERROR_SUCCESS)
+ {
+ DataSize = sizeof (MsgFileWork);
+ if (RegQueryValueEx (hKey2, L"EventMessageFile", 0, &Type, (LPBYTE) MsgFileWork, &DataSize) == ERROR_SUCCESS)
+ {
+ parse_filelist (MsgFileWork, MsgFile, MsgFileCount);
+ }
+ DataSize = sizeof (MsgFileWork);
+ if (RegQueryValueEx
+ (hKey2, L"ParameterMessageFile", 0, &Type, (LPBYTE) MsgFileWork, &DataSize) == ERROR_SUCCESS)
+ {
+ parse_filelist (MsgFileWork, ParamsFile, ParamsFileCount);
+ }
+ RegCloseKey (hKey2);
+ break;
+ }
+ }
+ }
+ RegCloseKey (hKey);
+ }
+}
+
+static const int FILL_COUNT = 64;
+
+static wchar_t *FormatLogMessage (wchar_t * Class, EVENTLOGRECORD * rec)
+{
+ wchar_t *SourceName = (wchar_t *) (rec + 1);
+ HINSTANCE lib;
+ wchar_t **msgs = NULL;
+ wchar_t *fmsg;
+ DWORD fsize = 0;
+ wchar_t *params = NULL, *new_params;
+ int params_size = 0;
+ wchar_t *res = NULL;
+
+ struct MsgPath *filename = NULL, *params_filename = NULL;
+ int filename_count = 0;
+ int params_filename_count = 0;
+
+ OutputDebugString(L"FormatLogMessage.1");
+ if (!SourceName[0])
+ return NULL;
+ GetMessageFile (SourceName, &filename, &filename_count, ¶ms_filename, ¶ms_filename_count);
+ if (rec->NumStrings)
+ {
+ OutputDebugString(L"FormatLogMessage.2");
+ int offset = 0;
+ int *param_ptrs = NULL;
+ msgs = (wchar_t **) malloc ((rec->NumStrings + FILL_COUNT) * sizeof (wchar_t *));
+ if (!msgs)
+ goto clear_exit;
+ param_ptrs = (int *) malloc (rec->NumStrings * sizeof (int));
+ for (int i = 0; i < rec->NumStrings; i++)
+ {
+ OutputDebugString(L"FormatLogMessage.2.1");
+ msgs[i] = (wchar_t *)(((char *) rec) + rec->StringOffset + offset);
+ OutputDebugString(msgs[i]);
+ offset += sizeof(wchar_t) * (wcslen (msgs[i]) + 1);
+ if (param_ptrs && params_filename_count)
+ {
+ bool has_params = false;
+ wchar_t *endptr = msgs[i];
+ wchar_t *new_endptr;
+
+ param_ptrs[i] = params_size + 1;
+ int zero_len = 1, back_offset = 0;
+ while (*endptr)
+ {
+ wchar_t *perc_pos = wcsstr (endptr, L"%%");
+ if (!perc_pos)
+ break;
+ has_params = true;
+ long err = wcstol (perc_pos + 2, &new_endptr, 10);
+ wchar_t *param_message;
+ DWORD param_message_size = 0;
+ for (int j = 0; j < params_filename_count; j++)
+ {
+ lib = LoadLibrary (params_filename[j].path);
+ if (lib)
+ {
+ param_message_size =
+ FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_HMODULE |
+ FORMAT_MESSAGE_ARGUMENT_ARRAY |
+ FORMAT_MESSAGE_MAX_WIDTH_MASK |
+ FORMAT_MESSAGE_IGNORE_INSERTS, lib,
+ err, LANG_NEUTRAL, (wchar_t *) & param_message, 512, NULL);
+ FreeLibrary (lib);
+ OutputDebugString(L"param_message");
+ OutputDebugString(param_message);
+ if (param_message_size)
+ break;
+ }
+ }
+ if (param_message_size)
+ {
+ param_message_size = wcslen (param_message);
+ new_params =
+ (wchar_t *) realloc (params,
+ (params_size +
+ param_message_size + (perc_pos - endptr) + zero_len) * sizeof (wchar_t));
+ if (new_params)
+ {
+ params = new_params;
+ }
+ else
+ {
+ free (params);
+ params = NULL;
+ break;
+ }
+ wcsncpy (params + params_size + back_offset, endptr, perc_pos - endptr);
+ params_size += param_message_size + (perc_pos - endptr) + zero_len;
+
+ LocalFree (param_message);
+ zero_len = 0;
+ back_offset = -1;
+ }
+ endptr = new_endptr;
+ }
+ if (has_params)
+ {
+ if (*endptr)
+ {
+ int tail_size = wcslen (endptr) + zero_len;
+ new_params = (wchar_t *) realloc (params, (params_size + tail_size) * sizeof (wchar_t));
+ if (new_params)
+ {
+ params = new_params;
+ }
+ else
+ {
+ free (params);
+ params = NULL;
+ break;
+ }
+ wcscpy (params + params_size + back_offset, endptr);
+ params_size += tail_size;
+ }
+ }
+ else
+ param_ptrs[i] = 0;
+ }
+ }
+ if (param_ptrs)
+ {
+ if (params)
+ {
+ for (int i = 0; i < rec->NumStrings; i++)
+ if (param_ptrs[i])
+ msgs[i] = params + param_ptrs[i] - 1;
+ }
+ free (param_ptrs);
+ }
+ for (int i = rec->NumStrings; i < (rec->NumStrings + FILL_COUNT); i++)
+ msgs[i] = (wchar_t *)empty_string;
+ }
+ if (filename_count)
+ {
+ for (int j = 0; j < filename_count; j++)
+ {
+ wchar_t expanded_filename[MAX_PATH];
+ ExpandEnvironmentStrings(filename[j].path, expanded_filename, MAX_PATH);
+ OutputDebugString(expanded_filename);
+ lib = LoadLibrary (expanded_filename);
+ if (lib)
+ {
+ fsize =
+ FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_HMODULE |
+ FORMAT_MESSAGE_ARGUMENT_ARRAY |
+ FORMAT_MESSAGE_MAX_WIDTH_MASK, lib,
+ rec->EventID, LANG_NEUTRAL, (wchar_t *) & fmsg, 512, (char **) msgs);
+ OutputDebugString(L"FormatLogMessage.3");
+ OutputDebugString(fmsg);
+ FreeLibrary (lib);
+ if (fsize)
+ break;
+ }
+ }
+ }
+ if (fsize)
+ {
+ res = (wchar_t *) malloc ((fsize + 1) * sizeof (wchar_t));
+ if (res)
+ memcpy (res, fmsg, (fsize + 1) * sizeof(wchar_t));
+ LocalFree (fmsg);
+ OutputDebugString(L"FormatLogMessage.4");
+ OutputDebugString(res);
+ }
+ else
+ {
+ int mem_size = 1;
+ for (int i = 0; i < rec->NumStrings; i++)
+ mem_size += 2 + wcslen (msgs[i]);
+ mem_size += 2 + wcslen (GetMsg (mFileErr1)) + 9 + wcslen ((wchar_t *) (rec + 1));
+ mem_size += 2 + wcslen (GetMsg (mFileErr2));
+ res = (wchar_t *) malloc (mem_size * sizeof (wchar_t));
+ if (res)
+ {
+ wsprintf (res, GetMsg (mFileErr1), rec->EventID & 0xffff, (wchar_t *) (rec + 1));
+ wsprintf (res, L"%s%s", res, L"\r\n");
+ wsprintf (res, L"%s%s", res, GetMsg (mFileErr2));
+ wsprintf (res, L"%s%s", res, L"\r\n");
+ for (int i = 0; i < rec->NumStrings; i++)
+ {
+ wsprintf (res, L"%s%s", res, msgs[i]);
+ wsprintf (res, L"%s%s", res, L"\r\n");
+ }
+ }
+ }
+ free (params);
+ if (msgs)
+ free (msgs);
+clear_exit:
+ free (filename);
+ free (params_filename);
+ return res;
+}
+
+#undef FILL_COUNT
+#undef FILLER
+
+static wchar_t *GetComputerName (EVENTLOGRECORD * rec)
+{
+ static wchar_t CompName[SMALL_BUFFER];
+ wchar_t *SourceName = (wchar_t *) (rec + 1);
+ wsprintf (CompName, L"%s", SourceName + wcslen (SourceName) + 1);
+ return CompName;
+}
+
+static const wchar_t *GetType (DWORD type)
+{
+ switch (type)
+ {
+ case EVENTLOG_ERROR_TYPE:
+ return GetMsg (mTypeError);
+ case EVENTLOG_WARNING_TYPE:
+ return GetMsg (mTypeWarning);
+ case EVENTLOG_INFORMATION_TYPE:
+ return GetMsg (mTypeInformation);
+ case EVENTLOG_AUDIT_SUCCESS:
+ return GetMsg (mTypeSuccessAudit);
+ case EVENTLOG_AUDIT_FAILURE:
+ return GetMsg (mTypeFailureAudit);
+ }
+ return GetMsg (mTypeUnknown);
+}
+
+static BOOL CheckLogName (EventViewer * panel, const wchar_t * LogName)
+{
+ BOOL res = FALSE;
+ HANDLE evt = OpenEventLog (panel->computer_ptr, LogName); //REMOTE
+ if (evt)
+ {
+ CloseEventLog (evt);
+ res = TRUE;
+ }
+ return res;
+}
Added: trunk/nt_event2/src/ev_ver.m4
===================================================================
--- trunk/nt_event2/src/ev_ver.m4 (rev 0)
+++ trunk/nt_event2/src/ev_ver.m4 2011-09-26 03:54:18 UTC (rev 408)
@@ -0,0 +1,5 @@
+define(MAJOR,2)dnl
+define(MINOR,0)dnl
+define(BUILD,1)dnl
+define(TYPE,RC1)dnl
+define(DATE,25.09.2011)dnl
Added: trunk/nt_event2/src/evplugin.h
===================================================================
--- trunk/nt_event2/src/evplugin.h (rev 0)
+++ trunk/nt_event2/src/evplugin.h 2011-09-26 03:54:18 UTC (rev 408)
@@ -0,0 +1,229 @@
+enum {
+ mName,
+ mNameDisk,
+ mRootName,
+ mExtMain,
+ mExtError,
+ mExtWarning,
+ mExtInformation,
+ mExtAuditSuccess,
+ mExtAuditFailure,
+ mExtNameError,
+ mFileDate,
+ mFileTime,
+ mFileUser,
+ mFileComputer,
+ mFileEventID,
+ mFileSource,
+ mFileType,
+ mFileCategory,
+ mFileDescription,
+ mFileData,
+ mFileErr1,
+ mFileErr2,
+ mTypeError,
+ mTypeWarning,
+ mTypeInformation,
+ mTypeSuccessAudit,
+ mTypeFailureAudit,
+ mTypeUnknown,
+ mTitleTime,
+ mTitleSource,
+ mTitleCategory,
+ mTitleEvent,
+ mTitleUser,
+ mTitleComputer,
+ mCpyDlgCopyTitle,
+ mCpyDlgMoveTitle,
+ mCpyDlgCopyOk,
+ mCpyDlgMoveOk,
+ mCpyDlgCancel,
+ mCpyDlgCopyTox1,
+ mCpyDlgCopyTo234,
+ mCpyDlgCopyToN,
+ mCpyDlgMoveTox1,
+ mCpyDlgMoveTo234,
+ mCpyDlgMoveToN,
+ mClearLog,
+ mConfigAddToDisksMenu,
+ mConfigDisksMenuDigit,
+ mConfigAddToPluginMenu,
+ mConfigBrowseEvtFiles,
+ mConfigStripExtension,
+ mConfigRestore,
+ mConfigScan1,
+ mConfigScan2,
+ mConfigShowHeader,
+ mConfigShowDescription,
+ mConfigShowData,
+ mConfigPrefix,
+ mConfigSave,
+ mConfigCancel,
+ mSelCompTitle,
+ mSelCompLabel,
+ mSelCompFootnote,
+ mExistSource,
+ mExistDestination,
+ mExistDestAlreadyExists,
+ mExistAcceptChoice,
+ mExistOverwrite,
+ mExistSkip,
+ mExistAppend,
+ mExistCancel,
+ mRetryError,
+ mRetryFrom,
+ mRetryTo,
+ mRetryRetry,
+ mRetrySkip,
+ mRetryCancel,
+ mClearCancel,
+ mClearClear,
+ mClearSkip,
+ mOtherConnecting,
+ mOtherScanning,
+ mError,
+ mErr1,
+ mErr2,
+ mKeyBackup,
+ mKeyMove,
+ mKeyClear,
+ mKeyRemote,
+ mKeyLocal,
+ mKeyViewData,
+ mKeyEditData,
+ mOk,
+ mPanelTypeDir0,
+ mPanelSizeDir0,
+ mColonTypeDir0,
+ mColonSizeDir0,
+ mPanelFullDir0,
+ mPanelTypeDir1,
+ mPanelSizeDir1,
+ mColonTypeDir1,
+ mColonSizeDir1,
+ mPanelFullDir1,
+ mPanelTypeDir2,
+ mPanelSizeDir2,
+ mColonTypeDir2,
+ mColonSizeDir2,
+ mPanelFullDir2,
+ mPanelTypeDir3,
+ mPanelSizeDir3,
+ mColonTypeDir3,
+ mColonSizeDir3,
+ mPanelFullDir3,
+ mPanelTypeDir4,
+ mPanelSizeDir4,
+ mColonTypeDir4,
+ mColonSizeDir4,
+ mPanelFullDir4,
+ mPanelTypeDir5,
+ mPanelSizeDir5,
+ mColonTypeDir5,
+ mColonSizeDir5,
+ mPanelFullDir5,
+ mPanelTypeDir6,
+ mPanelSizeDir6,
+ mColonTypeDir6,
+ mColonSizeDir6,
+ mPanelFullDir6,
+ mPanelTypeDir7,
+ mPanelSizeDir7,
+ mColonTypeDir7,
+ mColonSizeDir7,
+ mPanelFullDir7,
+ mPanelTypeDir8,
+ mPanelSizeDir8,
+ mColonTypeDir8,
+ mColonSizeDir8,
+ mPanelFullDir8,
+...
[truncated message content] |
|
From: <Se...@us...> - 2008-04-11 23:04:47
|
Revision: 407
http://farplugins.svn.sourceforge.net/farplugins/?rev=407&view=rev
Author: Seisen
Date: 2008-04-11 16:04:53 -0700 (Fri, 11 Apr 2008)
Log Message:
-----------
1. Correctly work in "Far 1.71 alpha 4 build 2335", i hope in future versions too
(they added 'ACTL_REDRAWALL' in 'AdvControl')
2. Build in "Microsoft Visual Studio 2005" (Compiler Version 15.00.21022.08)
3. Mouse work in Multipanel list
4. Some code and documentation refactoring and tuning (reduce flickering i hope)
Modified Paths:
--------------
trunk/multipanel/doc/todo.txt
trunk/multipanel/src/dialog.cpp
trunk/multipanel/src/dialog.hpp
trunk/multipanel/src/editor_screen_view.cpp
trunk/multipanel/src/editor_screen_view.hpp
trunk/multipanel/src/file_panel_view.cpp
trunk/multipanel/src/file_panel_view.hpp
trunk/multipanel/src/items.hpp
trunk/multipanel/src/macro.cpp
trunk/multipanel/src/macro.hpp
trunk/multipanel/src/makefile
trunk/multipanel/src/makeuser
trunk/multipanel/src/platform.hpp
trunk/multipanel/src/plugin.cpp
trunk/multipanel/src/plugin.def
trunk/multipanel/src/plugin.hpp
trunk/multipanel/src/plugin_en.hlf
trunk/multipanel/src/plugin_ru.hlf
trunk/multipanel/src/registry.cpp
trunk/multipanel/src/registry.hpp
trunk/multipanel/src/view.cpp
trunk/multipanel/src/view.hpp
trunk/multipanel/src/view_list_dialog.cpp
trunk/multipanel/src/view_list_dialog.hpp
trunk/multipanel/src/window.cpp
trunk/multipanel/src/window.hpp
Modified: trunk/multipanel/doc/todo.txt
===================================================================
--- trunk/multipanel/doc/todo.txt 2008-04-05 06:06:56 UTC (rev 406)
+++ trunk/multipanel/doc/todo.txt 2008-04-11 23:04:53 UTC (rev 407)
@@ -15,114 +15,117 @@
REQUESTS
. \x80\xAB\xA5\xAAᥩ \x81\xAB㤮\xA2 (bl...@tu...) \x84\xAE\xA1\xA0\xA2\xA8\xE2\xEC \xA2\xAE\xA7\xAC\xAE\xA6\xAD\xAE\xE1\xE2\xEC \xAF\xA5२\xAC\xA5\xAD\xAE\xA2\xA0\xAD\xA8\xEF \xAF\xA0\xAD\xA5\xAB\xA8
- \xA2 \xA4\xA8\xA0\xAB\xAE\xA3\xA5 \xA8 \xE1\xAE\xE5࠭\xA5\xAD\xA8\xEF \xA8\xAC\xA5\xAD\xA8 \xAF\xA0\xAD\xA5\xAB\xA8 \xA2\xAD\xA5 \xA7\xA0\xA2\xA8ᨬ\xAE\xE1\xE2\xA8 \xAC\xA5\xAD塞 \xAC\xEB \xAF\xE3\xE2\xEC \xA8\xAB\xA8
- \xAD\xA5\xE2. \x97\xA0\xE1\xE2\xAE \xAF\xE3\xE2\xA8 \xA1뢠\xEE\xE2 \xA4\xAB\xA8\xAD\xAD묨 \xA8 \xA0\xA1᮫\xEE⭮ \xAD\xA5\xA8\xAD\xE4\xAEଠ⨢\xAD묨 \xAA \xAFਬ\xA5\xE0\xE3
- \xA5 ࠡ\xAE\xE2\xA0 \xA8\xA4\xA5\xE2 \xE1 ࠧ\xAD묨 \xA2\xA5\xE0\xE1\xA8ﬨ \xAF\xAA\xE2\xA0, \xAE⫨\xE7\xA0\xEE\xE2\xE1\xEF ⮫쪮 \xAD\xA0\xA7\xA2\xA0\xAD\xA8\xEF
- \xAF\xA0\xAA\xA5⮢ \xAA\xAE\xE2\xAE\xE0\xEB\xA5 \xAE\xA1१\xA0\xEE\xE2\xE1\xEF.
+ \xA2 \xA4\xA8\xA0\xAB\xAE\xA3\xA5 \xA8 \xE1\xAE\xE5࠭\xA5\xAD\xA8\xEF \xA8\xAC\xA5\xAD\xA8 \xAF\xA0\xAD\xA5\xAB\xA8 \xA2\xAD\xA5 \xA7\xA0\xA2\xA8ᨬ\xAE\xE1\xE2\xA8 \xAC\xA5\xAD塞 \xAC\xEB \xAF\xE3\xE2\xEC \xA8\xAB\xA8
+ \xAD\xA5\xE2. \x97\xA0\xE1\xE2\xAE \xAF\xE3\xE2\xA8 \xA1뢠\xEE\xE2 \xA4\xAB\xA8\xAD\xAD묨 \xA8 \xA0\xA1᮫\xEE⭮ \xAD\xA5\xA8\xAD\xE4\xAEଠ⨢\xAD묨 \xAA \xAFਬ\xA5\xE0\xE3
+ \xA5 ࠡ\xAE\xE2\xA0 \xA8\xA4\xA5\xE2 \xE1 ࠧ\xAD묨 \xA2\xA5\xE0\xE1\xA8ﬨ \xAF\xAA\xE2\xA0, \xAE⫨\xE7\xA0\xEE\xE2\xE1\xEF ⮫쪮 \xAD\xA0\xA7\xA2\xA0\xAD\xA8\xEF
+ \xAF\xA0\xAA\xA5⮢ \xAA\xAE\xE2\xAE\xE0\xEB\xA5 \xAE\xA1१\xA0\xEE\xE2\xE1\xEF.
VERSION 3.*
-! Fix bug with ... in panel paths.
-! Document where to get and how to replace old msvcrt.dll under Win95.
+. Update help for mouse clicks
! Add Undo close panel function (F11 z CtrlZ).
. Display the panel count in the Panels dialog header.
. Reset "plugin" panel type to "files" for invalid locations.
? Add Disk menu item, and also showing number of panels.
? Print current panel set name in panel list dialog.
-. Fix bug with dialog background redraw after switching dialog to quick mode frame.
. Email Konstantin Melnikov <co...@qm...> MacroView ideas: plugins register own groups.
- ! Fix locale in MacroView group name.
- . Add links to custom plugins' macros.
-? When FAR's file panel is hidden, walking in panel list dialog should not unhide it. Check in display().
+ ! Fix locale in MacroView group name.
+ . Add links to custom plugins' macros.
. Fix bug in display with restoring PanelInfo.CurrentFileIndex if the file has been deleted.
-. Send the most important TECHINFO requests to fido7.far.support.
. Option: [ ] Allow independent settings for every panel. Help: Collumn mode and sort mode. TECHINFO.
. Refine Clone panel aside macro to work better with LRU.
. Add panel suite list dialog.
- . Functions: new/clone/delete/rename.
- . Entry shows: name, panel count.
- . Sorted always by name.
-. Process mouse click, double click in the panel list. Update help.
- For example, for mouse click:
- . Get DN_MOUSECLICK.
- . If on the list box (by index).
- . Find list item index from click screen coord, list dialog coord, and dialog screen coord.
- . Call the_view_list_box.select_view_by_item_index(int a_item_index).
- . Find the view iterator by index.
- . If selected_view is different, set it, and redisplay the view.
- . Create pos.SelectPos, center it, and set the pos.
- . Return the correct code.
- . Process double click.
+ . Functions: new/clone/delete/rename.
+ . Entry shows: name, panel count.
+ . Sorted always by name.
. Add more simple functions into the dialog:
- . Panel protection flag - cannot close accidentally ([Ctrl]Insert in dialog).
- @ Editable panel locations (F2 in dialog).
- @ Editable panel indices (ShiftF2 in dialog; swap two indices if already busy).
- @ Incremental index search.
- @ Write a hint in help about view indices - why one might need them.
- - Close all not protected (CtrlShiftF4). Confirm. If closing an active view, activate as close_view says.
+ . Panel protection flag - cannot close accidentally ([Ctrl]Insert in dialog).
+ @ Editable panel locations (F2 in dialog).
+ @ Editable panel indices (ShiftF2 in dialog; swap two indices if already busy).
+ @ Incremental index search.
+ @ Write a hint in help about view indices - why one might need them.
+ - Close all not protected (CtrlShiftF4). Confirm. If closing an active view, activate as close_view says.
++ Seisen: issues below done (or cancelled) in version 3.3a2:
+. Process mouse click, double click in the panel list.
+ For example, for mouse click:
+ . Get DN_MOUSECLICK.
+ . If on the list box (by index).
+ . Find list item index from click screen coord, list dialog coord, and dialog screen coord.
+ . Call the_view_list_box.select_view_by_item_index(int a_item_index).
+ . Find the view iterator by index.
+ . If selected_view is different, set it, and redisplay the view.
+ . Create pos.SelectPos, center it, and set the pos.
+ . Return the correct code.
+ . Process double click.
+- Fix bug with ... in panel paths. (Seisen: cannot see it anymore)
+- Document where to get and how to replace old msvcrt.dll under Win95. (Seisen: Win95 is died... soon time for WinXP)
+- Fix bug with dialog background redraw after switching dialog to quick mode frame. (Seisen: cannot see it)
+? When FAR's file panel is hidden, walking in panel list dialog should not unhide it. Check in display(). (Seisen: work)
+- Send the most important TECHINFO requests to fido7.far.support. (Seisen: useless, besides Far 1.80 is opensourced now)
+
VERSION 4 (editor/viewer panels)
* Implement editor/viewer views (Stas).
- . First off, just try switching to an editor.
- . MUST remap F12, Ctrl[Shift]Tab to plugin.
- . Implement saving/loading of editors and viewers.
- + Does it make sense to merge editors/viewers and file panels into the same list (NO). If yes, do
- not block switching to editors/viewers displayed in other windows, just not disable the buttons.
- ! Verify whether when switching between editor and viewer mode, the editor/viewer id stays the same.
- ! Warn on switching, about multiple viewers with same file name.
- @ Make GoFile function in Editor try to search for an appropriate view and display choice:
- Cur Panel / Old Panel / New Panel.
- @ Switch editors and file panels separately, but show all in one hierarchical dialog (as sub-windows)
- for clearness.
- - Ctrl[Shift]~ in editor/viewer switches to attached (AKA sub-) editors/viewers. They are distinguished
- by window name?
+ . First off, just try switching to an editor.
+ . MUST remap F12, Ctrl[Shift]Tab to plugin.
+ . Implement saving/loading of editors and viewers.
+ + Does it make sense to merge editors/viewers and file panels into the same list (NO). If yes, do
+ not block switching to editors/viewers displayed in other windows, just not disable the buttons.
+ ! Verify whether when switching between editor and viewer mode, the editor/viewer id stays the same.
+ ! Warn on switching, about multiple viewers with same file name.
+ @ Make GoFile function in Editor try to search for an appropriate view and display choice:
+ Cur Panel / Old Panel / New Panel.
+ @ Switch editors and file panels separately, but show all in one hierarchical dialog (as sub-windows)
+ for clearness.
+ - Ctrl[Shift]~ in editor/viewer switches to attached (AKA sub-) editors/viewers. They are distinguished
+ by window name?
VERSION 5 (plugin panels?)
. Empty panel.
- - Cannot create an empty panel (turn off dots, put zero files manually) without plugin.
- . Add command line prefix "mp:...", and parse it.
- . Add command line prefix "mp:panels". Calls panel list dialog. Help.
- . Add command line prefix "mp:files". Calls sub-plugin.
- + If location is "", works good as "safe" New panel.
- + If location starts with "@", works as "slow" panel.
- + If location does not start with "@":
- . If location is unavailable, adds "-" before the CurDir, and shows empty panel.
- . If location is available, calls the real file panel for it.
- . Processes Ctrl\ to go to the closest existing parent.
- . Processes CtrlR to call the real file panel if the location became available.
- . Update help.
- . Call plugin, using Far command line, when panel list dialog is exited.
- . If cannot use FCTL_UPDATEPANEL to redraw the panel, then must save command line, exit
- dialog, call plugin (cmd prefix), enter dialog (cmd prefix), restore command line.
- . When entering panel list dialog, detect new plugins as supported (by their CurDir).
- . Change the warning to "The currently displayed panel does not support Multi-panel. Please exit
- this panel first."
- . Enable closing the last two panels - create empty panel instead.
- @ TECHINFO: Add PanelInfo.PluginInstanceId, Get[Open]PluginInfo(PluginInstanceId) -> [Open]PluginInfo,
- and a 32 bit user data field to [Open]PluginInfo. Can remove garbage from CurDir then.
- . Until this is done, must add plugin instance number into CurDir as "Files[1]:location".
- . Make sure all panel titles display nicely at the panel top. Can store real location, and more
- information, in memory, and display only plugin name and instance index as CurDir, if needed.
+ - Cannot create an empty panel (turn off dots, put zero files manually) without plugin.
+ . Add command line prefix "mp:...", and parse it.
+ . Add command line prefix "mp:panels". Calls panel list dialog. Help.
+ . Add command line prefix "mp:files". Calls sub-plugin.
+ + If location is "", works good as "safe" New panel.
+ + If location starts with "@", works as "slow" panel.
+ + If location does not start with "@":
+ . If location is unavailable, adds "-" before the CurDir, and shows empty panel.
+ . If location is available, calls the real file panel for it.
+ . Processes Ctrl\ to go to the closest existing parent.
+ . Processes CtrlR to call the real file panel if the location became available.
+ . Update help.
+ . Call plugin, using Far command line, when panel list dialog is exited.
+ . If cannot use FCTL_UPDATEPANEL to redraw the panel, then must save command line, exit
+ dialog, call plugin (cmd prefix), enter dialog (cmd prefix), restore command line.
+ . When entering panel list dialog, detect new plugins as supported (by their CurDir).
+ . Change the warning to "The currently displayed panel does not support Multi-panel. Please exit
+ this panel first."
+ . Enable closing the last two panels - create empty panel instead.
+ @ TECHINFO: Add PanelInfo.PluginInstanceId, Get[Open]PluginInfo(PluginInstanceId) -> [Open]PluginInfo,
+ and a 32 bit user data field to [Open]PluginInfo. Can remove garbage from CurDir then.
+ . Until this is done, must add plugin instance number into CurDir as "Files[1]:location".
+ . Make sure all panel titles display nicely at the panel top. Can store real location, and more
+ information, in memory, and display only plugin name and instance index as CurDir, if needed.
. MultiPanel Plugin API.
- @ Make it a general plugin API: If CurDir contains any prefix, use command line to display it.
- + Plugin panels already intercept New and Close operations (standard in Far).
- . Some plugins want to intercept also Suspend/Resume (switch away/to), to save/restore state
- on disk or in memory.
- . Some plugins want to intercept also Save/Restore (exit/start Far), to serialize state for MP.
- . Pass those events to open plugins, using command line, from MultiPanel.
- @ Change MultiArc to use MultiPanel API.
- . Add "arc" command line prefix first.
- ...
- @ Change TmpPanel to use MultiPanel API.
- ...
+ @ Make it a general plugin API: If CurDir contains any prefix, use command line to display it.
+ + Plugin panels already intercept New and Close operations (standard in Far).
+ . Some plugins want to intercept also Suspend/Resume (switch away/to), to save/restore state
+ on disk or in memory.
+ . Some plugins want to intercept also Save/Restore (exit/start Far), to serialize state for MP.
+ . Pass those events to open plugins, using command line, from MultiPanel.
+ @ Change MultiArc to use MultiPanel API.
+ . Add "arc" command line prefix first.
+ ...
+ @ Change TmpPanel to use MultiPanel API.
+ ...
. Better slow media support (needs the empty panel!)
- . Slow media is network dirs.
- . Slow media is removable drives.
- . Slow media is dirs with more than X files (use the Far's Disable auto update.. option).
- . Mark panel as using slow media in panel list dialog. How?
- . Make sure F11 z CtrlR forcedly redisplays the panel.
+ . Slow media is network dirs.
+ . Slow media is removable drives.
+ . Slow media is dirs with more than X files (use the Far's Disable auto update.. option).
+ . Mark panel as using slow media in panel list dialog. How?
+ . Make sure F11 z CtrlR forcedly redisplays the panel.
MORE
@@ -130,8 +133,8 @@
. HACK: Cannot disable the F9MENU items for F12, CtrlU, QuitEditor|Viewer, GoFile.
. Get revision from svn (use escape, or at least svn status -u), and automatically put into help files.
@ Write Clone panel aside that does not close dialog: SCREEN FLICKERS (TECHINFO)
- F11 z CtrlQ CtrlF3 Tab Ctrl~ Tab
- F11 z CtrlF3 CtrlEnter Tab F11 z Ctrl~ Enter Tab F11 z CtrlQ
+ F11 z CtrlQ CtrlF3 Tab Ctrl~ Tab
+ F11 z CtrlF3 CtrlEnter Tab F11 z Ctrl~ Enter Tab F11 z CtrlQ
@ Release the source for public patches (needs a license).
@ Create a Windows Explorer extension - Open FAR panel here, or change the existing FAR Shell Launcher.
? Prevent simultaneous running of multiple copies of the plugin - they all will work incorrectly.
@@ -140,24 +143,24 @@
? Make GCC-compiled plugin not behave like on a tty (-mgui?). Benefits: smaller code, ensured compliance.
? Add TECHINFO: Make F5 and F6 not reset the path even in single panel mode.
? Fix TECHINFO 1: Process CtrlU and Tab (need both for Fullscreen) in the dialog, update install*, readme,
- help. Bind macro. Add handler to view_list_box and dialog. Exchange the PanelInfos. Exchange the views.
- Rewrite is_file_panel_left. TOO MUCH WORK, BUT FULLSCREEN PANELS WOULD STILL NOT BE USABLE, AND CTRLU
- IS NOT USED THAT OFTEN.
+ help. Bind macro. Add handler to view_list_box and dialog. Exchange the PanelInfos. Exchange the views.
+ Rewrite is_file_panel_left. TOO MUCH WORK, BUT FULLSCREEN PANELS WOULD STILL NOT BE USABLE, AND CTRLU
+ IS NOT USED THAT OFTEN.
- Add switching to active Background Copy dialogs.
- . Read info about processes from BC.
- . No quick preview with BC dialogs, but dynamically show progress, directly in panel list lines.
- . BC should not auto-destroy them when done, but keep till OK.
- ! Cannot update LRU between MP calls.
+ . Read info about processes from BC.
+ . No quick preview with BC dialogs, but dynamically show progress, directly in panel list lines.
+ . BC should not auto-destroy them when done, but keep till OK.
+ ! Cannot update LRU between MP calls.
- Finalize design, and implement key installation in configuration_dialog.
- . Implement show_key_dialog, show_function_dialog.
- . Implement save_configuration, restore_configuration.
+ . Implement show_key_dialog, show_function_dialog.
+ . Implement save_configuration, restore_configuration.
- When switching from File panel to File panel, put current folder from the old panel into Folder
- history of the new panel (the folder will be put into the oldest entry of Folder history), by
- rebuilding the Folder history. Is this possible?
+ history of the new panel (the folder will be put into the oldest entry of Folder history), by
+ rebuilding the Folder history. Is this possible?
- Implement a custom dialog for failed assertions.
- . Install it instead of the Win32 dialog, before the FAR's red dialog (just redefine assert).
- . Show source file name minus project root. "Internal error, please report to the authors..."
- . Should not ship a debug build of the plugin though, so makes sense only for special circumstances.
+ . Install it instead of the Win32 dialog, before the FAR's red dialog (just redefine assert).
+ . Show source file name minus project root. "Internal error, please report to the authors..."
+ . Should not ship a debug build of the plugin though, so makes sense only for special circumstances.
- Add recommended macro for ShiftF9 to save panels AND setup (F11 z ShiftF9 Enter Esc ShiftF9).
- Optimize the executable size (read the articles on PlugRing).
- Implement "quick" mode compatibility with Win98SE (SetWindowsHookEx, Thread, shared memory CTRL flag).
@@ -167,58 +170,58 @@
- Convert all the documents but readme into XML or HTML/CSS for more convenience and flexibility in writing.
= Let select the Switch (OK) view button, but emulate the disabled status with a custom button coloring.
- Write CtrlU that does not close dialog:
- F11 z CtrlQ CtrlShiftF4 Tab Ctrl~ Tab CtrlF4
- F11 z CtrlShiftF4 Enter Tab F11 z Ctrl~ ShiftEnter Tab F11 z CtrlF4 Enter
+ F11 z CtrlQ CtrlShiftF4 Tab Ctrl~ Tab CtrlF4
+ F11 z CtrlShiftF4 Enter Tab F11 z Ctrl~ ShiftEnter Tab F11 z CtrlF4 Enter
- More key redefinition.
- + Auto-fix: Sometimes the dialog is called in "normal" mode, if quickly playing with Ctrl~.
- Can sometimes quickly release Ctrl before plugin is called.
- + Auto-fix: Fix bug with quick dialog dismissal: floppy disk, DN_ENTERIDLE.
- = Cannot pass {CtrlF3} in a macro - or have to pass all together :-)
- = Could use options menu (that is no auto-scan :-)
- = Scan all Far macros for known, exact {F11 shortcut button_shortcut} combinations.
- = In dialog, process keys from found macros.
- = Cannot auto-detect quick modifier because might want CTRL or SHIFT qithout quick mode.
- = Read F11 menu shortcut from Far registry.
- - Process Tab in dialog. For macros. Impossible to press in quick mode. Update help.
- - Replace hard coded keys with buttons (in quick mode - invisible buttons). Process [Shift]Tab.
- - Auto-fix: Can have Clone panel aside and Swap panels as macros, and have dialog stay after them.
- - Add buttons to "normal" dialog, (process [Shift]Tab to switch focus?), process
- buttons' Alt-shortcuts from everywhere, and buttons letter-shortcuts.
- - In quick dialog, process only F11 shortcut Alt_button combinations.
- ! F11 does not allow to specify the length of the following sequence to be ignored.
- - Hardcode quick modifier to be CTRL. If user wants CTRL without quick mode, can put Esc in macro.
- ! Must pass a flag with macro: PANELS CtrlF3: F11 z CTRL AltN, DIALOGS CtrlF3: F11 z AltN.
- - But still cannot fix broken panel order after Clone panel aside!
- - But if add Tab and CtrlU to the dialog, can write macro that works fine!
- - Later, macros that want quick dialog use {F11 shortcut {F11 quick_modifiers} button_shortcut}.
- - F11 z F11 <Win32_VK_*> Down -- cannot be used manually if needed; and not all invokable from FAR
- - F11 z F11 <CtrlLR|AltLR|ShiftLR|WinLR|Apps> Down -- cannot be used manually if needed
- + F11 z <[R]Ctrl|[R]Alt|Shift>F11 Down
- . Check when FAR distinguishes the R-modifiers
- + Translate the modifiers into Win32_VK_*
- + Allow only one modifier per macro
- + Display warning (yes) OR ignore OR take first?
- + Document the <modifier>F11 in the help
+ + Auto-fix: Sometimes the dialog is called in "normal" mode, if quickly playing with Ctrl~.
+ Can sometimes quickly release Ctrl before plugin is called.
+ + Auto-fix: Fix bug with quick dialog dismissal: floppy disk, DN_ENTERIDLE.
+ = Cannot pass {CtrlF3} in a macro - or have to pass all together :-)
+ = Could use options menu (that is no auto-scan :-)
+ = Scan all Far macros for known, exact {F11 shortcut button_shortcut} combinations.
+ = In dialog, process keys from found macros.
+ = Cannot auto-detect quick modifier because might want CTRL or SHIFT qithout quick mode.
+ = Read F11 menu shortcut from Far registry.
+ - Process Tab in dialog. For macros. Impossible to press in quick mode. Update help.
+ - Replace hard coded keys with buttons (in quick mode - invisible buttons). Process [Shift]Tab.
+ - Auto-fix: Can have Clone panel aside and Swap panels as macros, and have dialog stay after them.
+ - Add buttons to "normal" dialog, (process [Shift]Tab to switch focus?), process
+ buttons' Alt-shortcuts from everywhere, and buttons letter-shortcuts.
+ - In quick dialog, process only F11 shortcut Alt_button combinations.
+ ! F11 does not allow to specify the length of the following sequence to be ignored.
+ - Hardcode quick modifier to be CTRL. If user wants CTRL without quick mode, can put Esc in macro.
+ ! Must pass a flag with macro: PANELS CtrlF3: F11 z CTRL AltN, DIALOGS CtrlF3: F11 z AltN.
+ - But still cannot fix broken panel order after Clone panel aside!
+ - But if add Tab and CtrlU to the dialog, can write macro that works fine!
+ - Later, macros that want quick dialog use {F11 shortcut {F11 quick_modifiers} button_shortcut}.
+ - F11 z F11 <Win32_VK_*> Down -- cannot be used manually if needed; and not all invokable from FAR
+ - F11 z F11 <CtrlLR|AltLR|ShiftLR|WinLR|Apps> Down -- cannot be used manually if needed
+ + F11 z <[R]Ctrl|[R]Alt|Shift>F11 Down
+ . Check when FAR distinguishes the R-modifiers
+ + Translate the modifiers into Win32_VK_*
+ + Allow only one modifier per macro
+ + Display warning (yes) OR ignore OR take first?
+ + Document the <modifier>F11 in the help
- Power mode, that enables switching to the other panel too, by shifting panels.
- ! IMPOSSIBLE until Far allows to hide/unhide panels or change dir of a hidden panel.
- . Activated only in single panel mode.
- . If second panel hides unsupported panel: Disable+Proceed OR Warning+Exit (if no option).
- ! Option: Power switching: On (useful in single panel mode only), Off.
- @ Add option flag, dialog, registry write/read/default.
- - Add separate command from Ctrl[Shift]~ - not quickly visible by new users.
- . Do not disable switching to the other panel.
- , Fix shading in the list.
- , Fix all whiles that skip the other panel.
- . On first display, shift current panel location into passive panel.
- ! On dialog exit, send CtrlP to hide the passive panel (update TECHINFO 14).
- . On dialog cancel, restore the passive panel location, before CtrlP.
- . Update help.
- + Change actuate_view to modify the other window too.
- + Remove display2 (view::display asks its window if it is "current" or "other").
- + If destination is not file panel - no shift.
- . Add F11 z F5/F6 to do correct copy/rename even in single panel mode.
- - Usual macros do not work on ".." (copy/move menu is not called at all).
- - Usual macros do not work for plugin destinations (dst path after CtrlShift] is garbage).
- - Document (and add TECHINFO) that standard F5/F6 do not show correct paths in single panel
- mode, but Background Copy does.
- . Recommend using manual CtrlShift] with standard F5/F6, or use the recommended macros.
+ ! IMPOSSIBLE until Far allows to hide/unhide panels or change dir of a hidden panel.
+ . Activated only in single panel mode.
+ . If second panel hides unsupported panel: Disable+Proceed OR Warning+Exit (if no option).
+ ! Option: Power switching: On (useful in single panel mode only), Off.
+ @ Add option flag, dialog, registry write/read/default.
+ - Add separate command from Ctrl[Shift]~ - not quickly visible by new users.
+ . Do not disable switching to the other panel.
+ , Fix shading in the list.
+ , Fix all whiles that skip the other panel.
+ . On first display, shift current panel location into passive panel.
+ ! On dialog exit, send CtrlP to hide the passive panel (update TECHINFO 14).
+ . On dialog cancel, restore the passive panel location, before CtrlP.
+ . Update help.
+ + Change actuate_view to modify the other window too.
+ + Remove display2 (view::display asks its window if it is "current" or "other").
+ + If destination is not file panel - no shift.
+ . Add F11 z F5/F6 to do correct copy/rename even in single panel mode.
+ - Usual macros do not work on ".." (copy/move menu is not called at all).
+ - Usual macros do not work for plugin destinations (dst path after CtrlShift] is garbage).
+ - Document (and add TECHINFO) that standard F5/F6 do not show correct paths in single panel
+ mode, but Background Copy does.
+ . Recommend using manual CtrlShift] with standard F5/F6, or use the recommended macros.
Modified: trunk/multipanel/src/dialog.cpp
===================================================================
--- trunk/multipanel/src/dialog.cpp 2008-04-05 06:06:56 UTC (rev 406)
+++ trunk/multipanel/src/dialog.cpp 2008-04-11 23:04:53 UTC (rev 407)
@@ -3,71 +3,71 @@
namespace far_multi_panel {
- void init_dialog_single_box(FarDialogItem* a_dialog_item_ptr,
- int x1, int y1, int x2, int y2, const char* a_name_const_str, DWORD flags) {
+ void init_dialog_single_box(FarDialogItem* a_dialog_item_ptr,
+ int x1, int y1, int x2, int y2, const char* a_name_const_str, DWORD flags) {
- a_dialog_item_ptr->Type = DI_SINGLEBOX;
- a_dialog_item_ptr->X1 = x1;
- a_dialog_item_ptr->Y1 = y1;
- a_dialog_item_ptr->X2 = x2;
- a_dialog_item_ptr->Y2 = y2;
- strcpy(a_dialog_item_ptr->Data, a_name_const_str);
- a_dialog_item_ptr->DefaultButton = FALSE;
- a_dialog_item_ptr->Focus = FALSE;
- a_dialog_item_ptr->Flags = flags;
- }
+ a_dialog_item_ptr->Type = DI_SINGLEBOX;
+ a_dialog_item_ptr->X1 = x1;
+ a_dialog_item_ptr->Y1 = y1;
+ a_dialog_item_ptr->X2 = x2;
+ a_dialog_item_ptr->Y2 = y2;
+ strcpy(a_dialog_item_ptr->Data, a_name_const_str);
+ a_dialog_item_ptr->DefaultButton = FALSE;
+ a_dialog_item_ptr->Focus = FALSE;
+ a_dialog_item_ptr->Flags = flags;
+ }
- void init_dialog_double_box(FarDialogItem* a_dialog_item_ptr,
- int x1, int y1, int x2, int y2, const char* a_name_const_str, DWORD flags) {
+ void init_dialog_double_box(FarDialogItem* a_dialog_item_ptr,
+ int x1, int y1, int x2, int y2, const char* a_name_const_str, DWORD flags) {
- a_dialog_item_ptr->Type = DI_DOUBLEBOX;
- a_dialog_item_ptr->X1 = x1;
- a_dialog_item_ptr->Y1 = y1;
- a_dialog_item_ptr->X2 = x2;
- a_dialog_item_ptr->Y2 = y2;
- strcpy(a_dialog_item_ptr->Data, a_name_const_str);
- a_dialog_item_ptr->DefaultButton = FALSE;
- a_dialog_item_ptr->Focus = FALSE;
- a_dialog_item_ptr->Flags = flags;
- }
+ a_dialog_item_ptr->Type = DI_DOUBLEBOX;
+ a_dialog_item_ptr->X1 = x1;
+ a_dialog_item_ptr->Y1 = y1;
+ a_dialog_item_ptr->X2 = x2;
+ a_dialog_item_ptr->Y2 = y2;
+ strcpy(a_dialog_item_ptr->Data, a_name_const_str);
+ a_dialog_item_ptr->DefaultButton = FALSE;
+ a_dialog_item_ptr->Focus = FALSE;
+ a_dialog_item_ptr->Flags = flags;
+ }
- void init_dialog_list_box(FarDialogItem* a_dialog_item_ptr,
- int x1, int y1, int x2, int y2, FarList* a_far_list_ptr, DWORD flags) {
+ void init_dialog_list_box(FarDialogItem* a_dialog_item_ptr,
+ int x1, int y1, int x2, int y2, FarList* a_far_list_ptr, DWORD flags) {
- a_dialog_item_ptr->Type = DI_LISTBOX;
- a_dialog_item_ptr->X1 = x1;
- a_dialog_item_ptr->Y1 = y1;
- a_dialog_item_ptr->X2 = x2;
- a_dialog_item_ptr->Y2 = y2;
- a_dialog_item_ptr->ListItems = a_far_list_ptr;
- a_dialog_item_ptr->Data[0] = 0;
- a_dialog_item_ptr->DefaultButton = FALSE;
- a_dialog_item_ptr->Focus = FALSE;
- a_dialog_item_ptr->Flags = flags;
- }
+ a_dialog_item_ptr->Type = DI_LISTBOX;
+ a_dialog_item_ptr->X1 = x1;
+ a_dialog_item_ptr->Y1 = y1;
+ a_dialog_item_ptr->X2 = x2;
+ a_dialog_item_ptr->Y2 = y2;
+ a_dialog_item_ptr->ListItems = a_far_list_ptr;
+ a_dialog_item_ptr->Data[0] = 0;
+ a_dialog_item_ptr->DefaultButton = FALSE;
+ a_dialog_item_ptr->Focus = FALSE;
+ a_dialog_item_ptr->Flags = flags;
+ }
- void init_dialog_text(FarDialogItem* a_dialog_item_ptr,
- int x1, int y1, const char* a_name_const_str, DWORD flags) {
+ void init_dialog_text(FarDialogItem* a_dialog_item_ptr,
+ int x1, int y1, const char* a_name_const_str, DWORD flags) {
- a_dialog_item_ptr->Type = DI_TEXT;
- a_dialog_item_ptr->X1 = x1;
- a_dialog_item_ptr->Y1 = y1;
- strcpy(a_dialog_item_ptr->Data, a_name_const_str);
- a_dialog_item_ptr->DefaultButton = FALSE;
- a_dialog_item_ptr->Focus = FALSE;
- a_dialog_item_ptr->Flags = flags;
- }
+ a_dialog_item_ptr->Type = DI_TEXT;
+ a_dialog_item_ptr->X1 = x1;
+ a_dialog_item_ptr->Y1 = y1;
+ strcpy(a_dialog_item_ptr->Data, a_name_const_str);
+ a_dialog_item_ptr->DefaultButton = FALSE;
+ a_dialog_item_ptr->Focus = FALSE;
+ a_dialog_item_ptr->Flags = flags;
+ }
- void init_dialog_button(FarDialogItem* a_dialog_item_ptr,
- int x1, int y1, const char* a_name_const_str, DWORD flags) {
+ void init_dialog_button(FarDialogItem* a_dialog_item_ptr,
+ int x1, int y1, const char* a_name_const_str, DWORD flags) {
- a_dialog_item_ptr->Type = DI_BUTTON;
- a_dialog_item_ptr->X1 = x1;
- a_dialog_item_ptr->Y1 = y1;
- strcpy(a_dialog_item_ptr->Data, a_name_const_str);
- a_dialog_item_ptr->DefaultButton = FALSE;
- a_dialog_item_ptr->Focus = FALSE;
- a_dialog_item_ptr->Flags = flags;
- }
+ a_dialog_item_ptr->Type = DI_BUTTON;
+ a_dialog_item_ptr->X1 = x1;
+ a_dialog_item_ptr->Y1 = y1;
+ strcpy(a_dialog_item_ptr->Data, a_name_const_str);
+ a_dialog_item_ptr->DefaultButton = FALSE;
+ a_dialog_item_ptr->Focus = FALSE;
+ a_dialog_item_ptr->Flags = flags;
+ }
- }
+ }
Modified: trunk/multipanel/src/dialog.hpp
===================================================================
--- trunk/multipanel/src/dialog.hpp 2008-04-05 06:06:56 UTC (rev 406)
+++ trunk/multipanel/src/dialog.hpp 2008-04-11 23:04:53 UTC (rev 407)
@@ -6,21 +6,21 @@
namespace far_multi_panel {
- void init_dialog_single_box(FarDialogItem* a_dialog_item_ptr,
- int x1, int y1, int x2, int y2, const char* a_name_const_str, DWORD flags);
+ void init_dialog_single_box(FarDialogItem* a_dialog_item_ptr,
+ int x1, int y1, int x2, int y2, const char* a_name_const_str, DWORD flags);
- void init_dialog_double_box(FarDialogItem* a_dialog_item_ptr,
- int x1, int y1, int x2, int y2, const char* a_name_const_str, DWORD flags);
+ void init_dialog_double_box(FarDialogItem* a_dialog_item_ptr,
+ int x1, int y1, int x2, int y2, const char* a_name_const_str, DWORD flags);
- void init_dialog_list_box(FarDialogItem* a_dialog_item_ptr,
- int x1, int y1, int x2, int y2, FarList* a_far_list_ptr, DWORD flags);
+ void init_dialog_list_box(FarDialogItem* a_dialog_item_ptr,
+ int x1, int y1, int x2, int y2, FarList* a_far_list_ptr, DWORD flags);
- void init_dialog_text(FarDialogItem* a_dialog_item_ptr,
- int x1, int y1, const char* a_name_const_str, DWORD flags);
+ void init_dialog_text(FarDialogItem* a_dialog_item_ptr,
+ int x1, int y1, const char* a_name_const_str, DWORD flags);
- void init_dialog_button(FarDialogItem* a_dialog_item_ptr,
- int x1, int y1, const char* a_name_const_str, DWORD flags);
+ void init_dialog_button(FarDialogItem* a_dialog_item_ptr,
+ int x1, int y1, const char* a_name_const_str, DWORD flags);
- }
+ }
#endif
Modified: trunk/multipanel/src/editor_screen_view.cpp
===================================================================
--- trunk/multipanel/src/editor_screen_view.cpp 2008-04-05 06:06:56 UTC (rev 406)
+++ trunk/multipanel/src/editor_screen_view.cpp 2008-04-11 23:04:53 UTC (rev 407)
@@ -3,29 +3,29 @@
namespace far_multi_panel {
- editor_screen_view::editor_screen_view(int a_editor_screen_id) :
- view(), the_editor_screen_id(a_editor_screen_id) {}
+ editor_screen_view::editor_screen_view(int a_editor_screen_id) :
+ view(), the_editor_screen_id(a_editor_screen_id) {}
- const char* editor_screen_view::title_const_str() const {
- // todo: include the "modified" status into the title
- return "some editor title";
- }
+ const char* editor_screen_view::title_const_str() const {
+ // todo: include the "modified" status into the title
+ return "some editor title";
+ }
- const char* editor_screen_view::formatted_title_const_str(int a_width) const {
- // todo: include the "modified" status into the title
- return "some editor title";
- }
+ const char* editor_screen_view::formatted_title_const_str(int a_width) const {
+ // todo: include the "modified" status into the title
+ return "some editor title";
+ }
- bool editor_screen_view::is_available() const {
- return false;
- }
+ bool editor_screen_view::is_available() const {
+ return false;
+ }
- void editor_screen_view::update_is_available() {
- }
+ void editor_screen_view::update_is_available() {
+ }
- void editor_screen_view::display() {
- }
+ void editor_screen_view::display(bool redrawAll) {
+ }
- view* editor_screen_view::clone() { return new editor_screen_view(*this); }
+ view* editor_screen_view::clone() { return new editor_screen_view(*this); }
- }
+ }
Modified: trunk/multipanel/src/editor_screen_view.hpp
===================================================================
--- trunk/multipanel/src/editor_screen_view.hpp 2008-04-05 06:06:56 UTC (rev 406)
+++ trunk/multipanel/src/editor_screen_view.hpp 2008-04-11 23:04:53 UTC (rev 407)
@@ -6,40 +6,40 @@
namespace far_multi_panel {
- /* A view corresponding to a FAR's Editor screen.
+ /* A view corresponding to a FAR's Editor screen.
- Because there can be multiple Editor screens opened in FAR
- natively, this does not store any state information about the
- view, but retrieves it directly from the corresponding Editor
- screen.
- */
- class editor_screen_view : public view {
+ Because there can be multiple Editor screens opened in FAR
+ natively, this does not store any state information about the
+ view, but retrieves it directly from the corresponding Editor
+ screen.
+ */
+ class editor_screen_view : public view {
- public:
- editor_screen_view(int a_editor_screen_id);
+ public:
+ editor_screen_view(int a_editor_screen_id);
- int editor_screen_id() const { return the_editor_screen_id; }
+ int editor_screen_id() const { return the_editor_screen_id; }
- msg_id type_title_msg_id() const { return msg_id__none; }
+ msg_id type_title_msg_id() const { return msg_id__none; }
- const char* title_const_str() const;
+ const char* title_const_str() const;
- const char* formatted_title_const_str(int a_width) const;
+ const char* formatted_title_const_str(int a_width) const;
- bool is_available() const;
+ bool is_available() const;
- void update_is_available();
+ void update_is_available();
- void display();
+ void display(bool redrawAll);
- view* clone();
+ view* clone();
- private:
- /* A unique (on a FAR session basis) ID of the FAR Editor instance.
- */
- int the_editor_screen_id;
- };
+ private:
+ /* A unique (on a FAR session basis) ID of the FAR Editor instance.
+ */
+ int the_editor_screen_id;
+ };
- }
+ }
#endif
Modified: trunk/multipanel/src/file_panel_view.cpp
===================================================================
--- trunk/multipanel/src/file_panel_view.cpp 2008-04-05 06:06:56 UTC (rev 406)
+++ trunk/multipanel/src/file_panel_view.cpp 2008-04-11 23:04:53 UTC (rev 407)
@@ -8,344 +8,349 @@
namespace far_multi_panel {
- file_panel_view* file_panel_view::create() {
- /* TODO: Should accept a view to use as a template for the PanelInfo
- parameters. Usually, the current view would be passed as a template.
- */
+ file_panel_view* file_panel_view::create() {
+ /* TODO: Should accept a view to use as a template for the PanelInfo
+ parameters. Usually, the current view would be passed as a template.
+ */
#if 0
- // See TECHINFO 11: C:\ is currently
- // used instead of the empty panel.
- PanelInfo the_panel_info;
- the_panel_info.PanelType = PTYPE_FILEPANEL;
- the_panel_info.Plugin = FALSE;
- //the_panel_info.PanelRect
- //the_panel_info.PanelItems
- the_panel_info.ItemsNumber = 0;
- //the_panel_info.SelectedItems
- the_panel_info.SelectedItemsNumber = 0;
- the_panel_info.CurrentItem = 0;
- the_panel_info.TopPanelItem = 0;
- the_panel_info.Visible = 1;
- the_panel_info.Focus = 1;
- the_panel_info.ViewMode = 1;
- //the_panel_info.ColumnTypes
- //the_panel_info.ColumnWidths
- strcpy(the_panel_info.CurDir, "C:\\");
- the_panel_info.ShortNames = 0;
- //the_panel_info.SortMode
- the_panel_info.Flags = 0;
- the_panel_info.Reserved = 0;
+ // See TECHINFO 11: C:\ is currently
+ // used instead of the empty panel.
+ PanelInfo the_panel_info;
+ the_panel_info.PanelType = PTYPE_FILEPANEL;
+ the_panel_info.Plugin = FALSE;
+ //the_panel_info.PanelRect
+ //the_panel_info.PanelItems
+ the_panel_info.ItemsNumber = 0;
+ //the_panel_info.SelectedItems
+ the_panel_info.SelectedItemsNumber = 0;
+ the_panel_info.CurrentItem = 0;
+ the_panel_info.TopPanelItem = 0;
+ the_panel_info.Visible = 1;
+ the_panel_info.Focus = 1;
+ the_panel_info.ViewMode = 1;
+ //the_panel_info.ColumnTypes
+ //the_panel_info.ColumnWidths
+ strcpy(the_panel_info.CurDir, "C:\\");
+ the_panel_info.ShortNames = 0;
+ //the_panel_info.SortMode
+ the_panel_info.Flags = 0;
+ the_panel_info.Reserved = 0;
- return new file_panel_view(the_panel_info);
+ return new file_panel_view(the_panel_info);
#else
- // See TECHINFO 11: C:\ is currently
- // used instead of the empty panel.
- verify(the_plugin.Control(INVALID_HANDLE_VALUE,
- FCTL_SETPANELDIR, "C:\\"));
- return create_from_current_file_panel();
+ // See TECHINFO 11: C:\ is currently
+ // used instead of the empty panel.
+ verify(the_plugin.Control(INVALID_HANDLE_VALUE,
+ FCTL_SETPANELDIR, "C:\\"));
+ return create_from_current_file_panel();
#endif
- }
+ }
- file_panel_view* file_panel_view::create_from_current_file_panel(int a_panel_id_index) {
- PanelInfo the_panel_info;
- verify(the_plugin.Control(INVALID_HANDLE_VALUE,
- FCTL_GETPANELINFO, &the_panel_info));
- return new file_panel_view(the_panel_info, a_panel_id_index);
- }
+ file_panel_view* file_panel_view::create_from_current_file_panel(int a_panel_id_index) {
+ PanelInfo the_panel_info;
+ verify(the_plugin.Control(INVALID_HANDLE_VALUE,
+ FCTL_GETPANELINFO, &the_panel_info));
+ return new file_panel_view(the_panel_info, a_panel_id_index);
+ }
- file_panel_view* file_panel_view::create_from_current_file_panel() {
- PanelInfo the_panel_info;
- verify(the_plugin.Control(INVALID_HANDLE_VALUE,
- FCTL_GETPANELINFO, &the_panel_info));
- return new file_panel_view(the_panel_info);
- }
+ file_panel_view* file_panel_view::create_from_current_file_panel() {
+ PanelInfo the_panel_info;
+ verify(the_plugin.Control(INVALID_HANDLE_VALUE,
+ FCTL_GETPANELINFO, &the_panel_info));
+ return new file_panel_view(the_panel_info);
+ }
- file_panel_view* file_panel_view::create_from_other_current_file_panel(int a_panel_id_index) {
- PanelInfo the_panel_info;
- verify(the_plugin.Control(INVALID_HANDLE_VALUE,
- FCTL_GETANOTHERPANELINFO, &the_panel_info));
- return new file_panel_view(the_panel_info, a_panel_id_index);
- }
+ file_panel_view* file_panel_view::create_from_other_current_file_panel(int a_panel_id_index) {
+ PanelInfo the_panel_info;
+ verify(the_plugin.Control(INVALID_HANDLE_VALUE,
+ FCTL_GETANOTHERPANELINFO, &the_panel_info));
+ return new file_panel_view(the_panel_info, a_panel_id_index);
+ }
- file_panel_view* file_panel_view::create_from_other_current_file_panel() {
- PanelInfo the_panel_info;
- verify(the_plugin.Control(INVALID_HANDLE_VALUE,
- FCTL_GETANOTHERPANELINFO, &the_panel_info));
- return new file_panel_view(the_panel_info);
- }
+ file_panel_view* file_panel_view::create_from_other_current_file_panel() {
+ PanelInfo the_panel_info;
+ verify(the_plugin.Control(INVALID_HANDLE_VALUE,
+ FCTL_GETANOTHERPANELINFO, &the_panel_info));
+ return new file_panel_view(the_panel_info);
+ }
- file_panel_view::file_panel_view(const PanelInfo& a_panel_info, int a_panel_id_index) :
- view(a_panel_id_index),
- the_panel_info(a_panel_info),
- the_is_available(true) {
- deep_clone_the_panel_info();
- }
+ file_panel_view::file_panel_view(const PanelInfo& a_panel_info, int a_panel_id_index) :
+ view(a_panel_id_index),
+ the_panel_info(a_panel_info),
+ the_is_available(true) {
+ deep_clone_the_panel_info();
+ }
- file_panel_view::file_panel_view(const PanelInfo& a_panel_info) :
- view(),
- the_panel_info(a_panel_info),
- the_is_available(true) {
- deep_clone_the_panel_info();
- }
+ file_panel_view::file_panel_view(const PanelInfo& a_panel_info) :
+ view(),
+ the_panel_info(a_panel_info),
+ the_is_available(true) {
+ deep_clone_the_panel_info();
+ }
- file_panel_view::file_panel_view(const file_panel_view& a_file_panel_view) :
- view(),
- the_panel_info(a_file_panel_view.the_panel_info),
- the_is_available(a_file_panel_view.the_is_available) {
- deep_clone_the_panel_info();
- }
+ file_panel_view::file_panel_view(const file_panel_view& a_file_panel_view) :
+ view(),
+ the_panel_info(a_file_panel_view.the_panel_info),
+ the_is_available(a_file_panel_view.the_is_available) {
+ deep_clone_the_panel_info();
+ }
- file_panel_view::~file_panel_view() {
- term_the_panel_info();
- }
+ file_panel_view::~file_panel_view() {
+ term_the_panel_info();
+ }
- void file_panel_view::update_from_current_file_panel() {
- PanelInfo the_panel_info;
- verify(the_plugin.Control(INVALID_HANDLE_VALUE,
- FCTL_GETPANELINFO, &the_panel_info));
- update(the_panel_info);
- }
+ void file_panel_view::update_from_current_file_panel() {
+ PanelInfo the_panel_info;
+ verify(the_plugin.Control(INVALID_HANDLE_VALUE,
+ FCTL_GETPANELINFO, &the_panel_info));
+ update(the_panel_info);
+ }
- void file_panel_view::update_from_other_current_file_panel() {
- PanelInfo the_panel_info;
- verify(the_plugin.Control(INVALID_HANDLE_VALUE,
- FCTL_GETANOTHERPANELINFO, &the_panel_info));
- update(the_panel_info);
- }
+ void file_panel_view::update_from_other_current_file_panel() {
+ PanelInfo the_panel_info;
+ verify(the_plugin.Control(INVALID_HANDLE_VALUE,
+ FCTL_GETANOTHERPANELINFO, &the_panel_info));
+ update(the_panel_info);
+ }
- void file_panel_view::update(const PanelInfo& a_panel_info) {
- // See TECHINFO 11: C:\ is currently
- // used instead of the empty panel.
- if (is_available() || strcmp(a_panel_info.CurDir, "C:\\") != 0) {
- term_the_panel_info();
- the_panel_info = a_panel_info;
- the_is_available = true;
- deep_clone_the_panel_info();
- }
- }
+ void file_panel_view::update(const PanelInfo& a_panel_info) {
+ // See TECHINFO 11: C:\ is currently
+ // used instead of the empty panel.
+ if (is_available() || strcmp(a_panel_info.CurDir, "C:\\") != 0) {
+ term_the_panel_info();
+ the_panel_info = a_panel_info;
+ the_is_available = true;
+ deep_clone_the_panel_info();
+ }
+ }
- view* file_panel_view::clone() { return new file_panel_view(*this); }
+ view* file_panel_view::clone() { return new file_panel_view(*this); }
- void file_panel_view::deep_clone_the_panel_info() {
- /* Create own copies of all the parts of the panel info.
- */
+ void file_panel_view::deep_clone_the_panel_info() {
+ /* Create own copies of all the parts of the panel info.
+ */
- PluginPanelItem* the_fars_plugin_panel_item_arr_ptr =
- the_panel_info.PanelItems;
+ PluginPanelItem* the_fars_plugin_panel_item_arr_ptr =
+ the_panel_info.PanelItems;
- the_panel_info.PanelItems =
- new PluginPanelItem[the_panel_info.ItemsNumber];
+ the_panel_info.PanelItems =
+ new PluginPanelItem[the_panel_info.ItemsNumber];
- for (int i = 0; i < the_panel_info.ItemsNumber; ++i) {
+ for (int i = 0; i < the_panel_info.ItemsNumber; ++i) {
- PluginPanelItem& the_own_plugin_panel_item =
- the_panel_info.PanelItems[i];
- PluginPanelItem& the_fars_plugin_panel_item =
- the_fars_plugin_panel_item_arr_ptr[i];
+ PluginPanelItem& the_own_plugin_panel_item =
+ the_panel_info.PanelItems[i];
+ PluginPanelItem& the_fars_plugin_panel_item =
+ the_fars_plugin_panel_item_arr_ptr[i];
- the_own_plugin_panel_item =
- the_fars_plugin_panel_item; // copy
+ the_own_plugin_panel_item =
+ the_fars_plugin_panel_item; // copy
- if (the_fars_plugin_panel_item.Description != NULL) {
- the_own_plugin_panel_item.Description =
- new char[strlen(the_fars_plugin_panel_item.Description)+1];
- strcpy(the_own_plugin_panel_item.Description,
- the_fars_plugin_panel_item.Description); // copy
- }
+ if (the_fars_plugin_panel_item.Description != NULL) {
+ the_own_plugin_panel_item.Description =
+ new char[strlen(the_fars_plugin_panel_item.Description)+1];
+ strcpy(the_own_plugin_panel_item.Description,
+ the_fars_plugin_panel_item.Description); // copy
+ }
- if (the_fars_plugin_panel_item.Owner != NULL) {
- the_own_plugin_panel_item.Owner =
- new char[strlen(the_fars_plugin_panel_item.Owner)+1];
- strcpy(the_own_plugin_panel_item.Owner,
- the_fars_plugin_panel_item.Owner); // copy
- }
+ if (the_fars_plugin_panel_item.Owner != NULL) {
+ the_own_plugin_panel_item.Owner =
+ new char[strlen(the_fars_plugin_panel_item.Owner)+1];
+ strcpy(the_own_plugin_panel_item.Owner,
+ the_fars_plugin_panel_item.Owner); // copy
+ }
- if (the_fars_plugin_panel_item.CustomColumnData != NULL) {
- the_own_plugin_panel_item.CustomColumnData =
- new char*[the_own_plugin_panel_item.CustomColumnNumber];
+ if (the_fars_plugin_panel_item.CustomColumnData != NULL) {
+ the_own_plugin_panel_item.CustomColumnData =
+ new char*[the_own_plugin_panel_item.CustomColumnNumber];
- for (int i = 0; i <
- the_own_plugin_panel_item.CustomColumnNumber; ++i) {
+ for (int i = 0; i <
+ the_own_plugin_panel_item.CustomColumnNumber; ++i) {
- char*& the_own_custom_collumn_data_str =
- the_own_plugin_panel_item.CustomColumnData[i];
- char*& the_fars_custom_collumn_data_str =
- the_fars_plugin_panel_item.CustomColumnData[i];
+ char*& the_own_custom_collumn_data_str =
+ the_own_plugin_panel_item.CustomColumnData[i];
+ char*& the_fars_custom_collumn_data_str =
+ the_fars_plugin_panel_item.CustomColumnData[i];
- the_own_custom_collumn_data_str =
- new char[strlen(the_fars_custom_collumn_data_str)+1];
- strcpy(the_own_custom_collumn_data_str,
- the_fars_custom_collumn_data_str); // copy
- }
- }
- }
- }
+ the_own_custom_collumn_data_str =
+ new char[strlen(the_fars_custom_collumn_data_str)+1];
+ strcpy(the_own_custom_collumn_data_str,
+ the_fars_custom_collumn_data_str); // copy
+ }
+ }
+ }
+ }
- void file_panel_view::term_the_panel_info() {
+ void file_panel_view::term_the_panel_info() {
- for (int i = 0; i < the_panel_info.ItemsNumber; ++i) {
+ for (int i = 0; i < the_panel_info.ItemsNumber; ++i) {
- PluginPanelItem& the_own_plugin_panel_item =
- the_panel_info.PanelItems[i];
+ PluginPanelItem& the_own_plugin_panel_item =
+ the_panel_info.PanelItems[i];
- if (the_own_plugin_panel_item.Description != NULL)
- delete[] the_own_plugin_panel_item.Description;
+ if (the_own_plugin_panel_item.Description != NULL)
+ delete[] the_own_plugin_panel_item.Description;
- if (the_own_plugin_panel_item.Owner != NULL)
- delete[] the_own_plugin_panel_item.Owner;
+ if (the_own_plugin_panel_item.Owner != NULL)
+ delete[] the_own_plugin_panel_item.Owner;
- if (the_own_plugin_panel_item.CustomColumnData != NULL) {
+ if (the_own_plugin_panel_item.CustomColumnData != NULL) {
- for (int i = 0; i <
- the_own_plugin_panel_item.CustomColumnNumber; ++i) {
+ for (int i = 0; i <
+ the_own_plugin_panel_item.CustomColumnNumber; ++i) {
- delete[] the_own_plugin_panel_item.CustomColumnData[i];
- }
+ delete[] the_own_plugin_panel_item.CustomColumnData[i];
+ }
- delete[] the_own_plugin_panel_item.CustomColumnData;
- }
- }
+ delete[] the_own_plugin_panel_item.CustomColumnData;
+ }
+ }
- delete[] the_panel_info.PanelItems;
- }
+ delete[] the_panel_info.PanelItems;
+ }
- msg_id file_panel_view::type_title_msg_id() const {
- return (the_panel_info.Plugin == TRUE ? msg_id__plugin_view_type_title :
- (the_panel_info.PanelType == PTYPE_FILEPANEL ? msg_id__files_view_type_title :
- the_panel_info.PanelType == PTYPE_TREEPANEL ? msg_id__tree_view_type_title :
- the_panel_info.PanelType == PTYPE_QVIEWPANEL ? msg_id__qview_view_type_title :
- the_panel_info.PanelType == PTYPE_INFOPANEL ? msg_id__info_view_type_title :
- msg_id__unknown_view_type_title));
- }
+ msg_id file_panel_view::type_title_msg_id() const {
+ return (the_panel_info.Plugin == TRUE ? msg_id__plugin_view_type_title :
+ (the_panel_info.PanelType == PTYPE_FILEPANEL ? msg_id__files_view_type_title :
+ the_panel_info.PanelType == PTYPE_TREEPANEL ? msg_id__tree_view_type_title :
+ the_panel_info.PanelType == PTYPE_QVIEWPANEL ? msg_id__qview_view_type_title :
+ the_panel_info.PanelType == PTYPE_INFOPANEL ? msg_id__info_view_type_title :
+ msg_id__unknown_view_type_title));
+ }
- bool file_panel_view::is_unsupported() const {
- return (the_panel_info.Plugin == TRUE ? true :
- (the_panel_info.PanelType == PTYPE_FILEPANEL ? false :
- the_panel_info.PanelType == PTYPE_TREEPANEL ? true :
- the_panel_info.PanelType == PTYPE_QVIEWPANEL ? true :
- the_panel_info.PanelType == PTYPE_INFOPANEL ? true :
- true));
- }
+ bool file_panel_view::is_unsupported() const {
+ return (the_panel_info.Plugin == TRUE ? true :
+ (the_panel_info.PanelType == PTYPE_FILEPANEL ? false :
+ the_panel_info.PanelType == PTYPE_TREEPANEL ? true :
+ the_panel_info.PanelType == PTYPE_QVIEWPANEL ? true :
+ the_panel_info.PanelType == PTYPE_INFOPANEL ? true :
+ true));
+ }
- const char* file_panel_view::title_const_str() const {
- return the_panel_info.CurDir;
- }
+ const char* file_panel_view::title_const_str() const {
+ return the_panel_info.CurDir;
+ }
- const char* file_panel_view::formatted_title_const_str(int a_width) const {
- static char the_title_str[NM];
- const int the_max_size = sizeof_arr(the_panel_info.CurDir);
- static_assert(the_max_size <= NM);
- strcpy(&the_title_str[0], the_panel_info.CurDir);
- return the_plugin.FSF->TruncPathStr(the_title_str, a_width);
- }
+ const char* file_panel_view::formatted_title_const_str(int a_width) const {
+ static char the_title_str[NM];
+ const int the_max_size = sizeof_arr(the_panel_info.CurDir);
+ static_assert(the_max_size <= NM);
+ strcpy(&the_title_str[0], the_panel_info.CurDir);
+ return the_plugin.FSF->TruncPathStr(the_title_str, a_width);
+ }
- void file_panel_view::update_is_available() {
- DWORD the_file_attributes = GetFileAttributes(the_panel_info.CurDir);
- the_is_available = (the_file_attributes != 0xFFFFFFFF &&
- (the_file_attributes | FILE_ATTRIBUTE_DIRECTORY) != 0);
- }
+ void file_panel_view::update_is_available() {
+ DWORD the_file_attributes = GetFileAttributes(the_panel_info.CurDir);
+ the_is_available = (the_file_attributes != 0xFFFFFFFF &&
+ (the_file_attributes | FILE_ATTRIBUTE_DIRECTORY) != 0);
+ }
- void file_panel_view::display() {
- verify(the_plugin.Control(INVALID_HANDLE_VALUE,
- (!is_view_displayed_in_another_window(this) ?
- FCTL_SETPANELDIR : FCTL_SETANOTHERPANELDIR),
- (is_available() ? the_panel_info.CurDir : "C:\\")));
- // See TECHINFO 11: C:\ is currently
- // used instead of the empty panel.
+ void file_panel_view::display(bool redrawAll) {
+ verify(the_plugin.Control(INVALID_HANDLE_VALUE,
+ (!is_view_displayed_in_another_window(this) ?
+ FCTL_SETPANELDIR : FCTL_SETANOTHERPANELDIR),
+ (is_available() ? the_panel_info.CurDir : "C:\\")));
+ // See TECHINFO 11: C:\ is currently
+ // used instead of the empty panel.
- verify(the_plugin.Control(INVALID_HANDLE_VALUE,
- (!is_view_displayed_in_another_window(this) ?
- FCTL_SETVIEWMODE : FCTL_SETANOTHERVIEWMODE),
- &the_panel_info.ViewMode));
+ verify(the_plugin.Control(INVALID_HANDLE_VALUE,
+ (!is_view_displayed_in_another_window(this) ?
+ FCTL_SETVIEWMODE : FCTL_SETANOTHERVIEWMODE),
+ &the_panel_info.ViewMode));
- verify(the_plugin.Control(INVALID_HANDLE_VALUE,
- (!is_view_displayed_in_another_window(this) ?
- FCTL_SETSORTMODE : FCTL_SETANOTHERSORTMODE),
- &the_panel_info.SortMode));
+ verify(the_plugin.Control(INVALID_HANDLE_VALUE,
+ (!is_view_displayed_in_another_window(this) ?
+ FCTL_SETSORTMODE : FCTL_SETANOTHERSORTMODE),
+ &the_panel_info.SortMode));
- int the_sort_order = ((the_panel_info.Flags &
- PFLAGS_REVERSESORTORDER) != 0);
- verify(the_plugin.Control(INVALID_HANDLE_VALUE,
- (!is_view_displayed_in_another_window(this) ?
- FCTL_SETSORTORDER : FCTL_SETANOTHERSORTORDER),
- &the_sort_order));
+ int the_sort_order = ((the_panel_info.Flags &
+ PFLAGS_REVERSESORTORDER) != 0);
+ verify(the_plugin.Control(INVALID_HANDLE_VALUE,
+ (!is_view_displayed_in_another_window(this) ?
+ FCTL_SETSORTORDER : FCTL_SETANOTHERSORTORDER),
+ &the_sort_order));
- int current_item = 0;
+ int current_item = 0;
- // See TECHINFO 11: C:\ is currently
- // used instead of the empty panel.
- if (is_available()) {
- /* The selection should only be restored after the correct sort
- mode and order have been restored, because the selecion data
- structure relies on the file index in the list, not on the
- actual file name.
+ // See TECHINFO 11: C:\ is currently
+ // used instead of the empty panel.
+ if (is_available()) {
+ /* The selection should only be restored after the correct sort
+ mode and order have been restored, because the selecion data
+ structure relies on the file index in the list, not on the
+ actual file name.
- Also, fix up the selected item set, in case the directory
- contents has changed since the last panel visit.
- */
+ Also, fix up the selected item set, in case the directory
+ contents has changed since the last panel visit.
+ */
- PanelInfo the_new_panel_info;
- verify(the_plugin.Control(INVALID_HANDLE_VALUE,
- (!is_view_displayed_in_another_window(this) ?
- FCTL_GETPANELINFO : FCTL_GETANOTHERPANELINFO),
- &the_new_panel_info));
+ PanelInfo the_new_panel_info;
+ verify(the_plugin.Control(INVALID_HANDLE_VALUE,
+ (!is_view_displayed_in_another_window(this) ?
+ FCTL_GETPANELINFO : FCTL_GETANOTHERPANELINFO),
+ &the_new_panel_info));
- /* Transfer the old selection into the new panel info.
- */
- for (int i = 0; i < the_panel_info.ItemsNumber; ++i) {
- PluginPanelItem& the_panel_item_ptr = the_panel_info.PanelItems[i];
+ /* Transfer the old selection into the new panel info.
+ */
+ for (int i = 0; i < the_panel_info.ItemsNumber; ++i) {
+ PluginPanelItem& the_panel_item_ptr = the_panel_info.PanelItems[i];
- if (the_panel_item_ptr.Flags & PPIF_SELECTED) {
- for (int j = 0; j < the_new_panel_info.ItemsNumber; ++j) {
- PluginPanelItem& the_new_panel_item_ptr = the_new_panel_info.PanelItems[j];
+ if (the_panel_item_ptr.Flags & PPIF_SELECTED) {
+ for (int j = 0; j < the_new_panel_info.ItemsNumber; ++j) {
+ PluginPanelItem& the_new_panel_item_ptr = the_new_panel_info.PanelItems[j];
- if (strcmp(the_panel_item_ptr.FindData.cFileName,
- the_new_panel_item_ptr.FindData.cFileName) == 0) {
- the_new_panel_item_ptr.Flags |= PPIF_SELECTED;
- break;
- }
- }
- }
- }
+ if (strcmp(the_panel_item_ptr.FindData.cFileName,
+ the_new_panel_item_ptr.FindData.cFileName) == 0) {
+ the_new_panel_item_ptr.Flags |= PPIF_SELECTED;
+ break;
+ }
+ }
+ ...
[truncated message content] |
|
From: <tEC...@us...> - 2008-04-05 06:06:56
|
Revision: 406
http://farplugins.svn.sourceforge.net/farplugins/?rev=406&view=rev
Author: tECHtonik
Date: 2008-04-04 23:06:56 -0700 (Fri, 04 Apr 2008)
Log Message:
-----------
+ test commit
Modified Paths:
--------------
trunk/farplugins/index.php
Modified: trunk/farplugins/index.php
===================================================================
--- trunk/farplugins/index.php 2008-04-05 06:02:57 UTC (rev 405)
+++ trunk/farplugins/index.php 2008-04-05 06:06:56 UTC (rev 406)
@@ -127,10 +127,11 @@
</td>
<!-- Useful Links -->
<td width="210" valign="top">
+ Useful links:
<ul>
<li><a href="http://www.farmanager.com"/>FAR File and Archive Manager</a></li>
- <li><a href="http://enforum.farmanager.com"/>English Far Forum</a></li>
- <li><a href="http://forum.farmanager.com"/>Russian Far Forum</a></li>
+ <li><a href="http://enforum.farmanager.com"/>Far Forum [EN]</a></li>
+ <li><a href="http://forum.farmanager.com"/>Far Forum [RU]</a></li>
</ul>
</td>
</tr>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tec...@us...> - 2008-04-05 06:02:51
|
Revision: 405
http://farplugins.svn.sourceforge.net/farplugins/?rev=405&view=rev
Author: techtonik
Date: 2008-04-04 23:02:57 -0700 (Fri, 04 Apr 2008)
Log Message:
-----------
+ test commit
Modified Paths:
--------------
trunk/farplugins/index.php
Modified: trunk/farplugins/index.php
===================================================================
--- trunk/farplugins/index.php 2007-09-24 19:09:54 UTC (rev 404)
+++ trunk/farplugins/index.php 2008-04-05 06:02:57 UTC (rev 405)
@@ -49,7 +49,7 @@
<td align="center" style="background-color: gray; color: white">
<h1>Open Source Far Plugins</h1>
</td>
- <td width="210" style="background-color: #FFFF99;"><h2><a href="http://farplugins.sourceforge.net/wiki/">Proceed to <br/>Far Wiki »</a></h2></td>
+ <td width="210" style="background-color: #FFFF99;"><h2><a href="http://farplugins.sourceforge.net/wiki/"><br/>Far Wiki »</a></h2></td>
</tr>
<tr>
<td colspan="3" style="border:0"><br/>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tec...@us...> - 2007-09-24 19:09:54
|
Revision: 404
http://farplugins.svn.sourceforge.net/farplugins/?rev=404&view=rev
Author: techtonik
Date: 2007-09-24 12:09:54 -0700 (Mon, 24 Sep 2007)
Log Message:
-----------
+ feed redirect
Modified Paths:
--------------
trunk/farplugins/index.php
Modified: trunk/farplugins/index.php
===================================================================
--- trunk/farplugins/index.php 2007-08-21 04:51:03 UTC (rev 403)
+++ trunk/farplugins/index.php 2007-09-24 19:09:54 UTC (rev 404)
@@ -22,7 +22,7 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
- <link rel="alternate" type="application/rss+xml" title="RSS feed" href="http://feeds.feedburner.com/farpluginsNews"/>
+ <link rel="alternate" type="application/rss+xml" title="RSS feed" href="http://feeds.feedburner.com/osfarplugins"/>
<title>FarPlugins</title>
<!-- <meta http-equiv="refresh" content="30;url=http://farplugins.sf.net/wiki/"> -->
<style type="text/css"><!--
@@ -66,7 +66,8 @@
<table class="rssblock">
<tr><td>
- <a href="http://farplugins.sourceforge.net/?farplugins.xml">
+ <!-- a href="http://farplugins.sourceforge.net/?farplugins.xml" -->
+ <a href="http://feeds.feedburner.com/osfarplugins">
<img src="rss.gif" border="0" alt="FarPlugins RSS" />
</a> <a href="http://farplugins.sourceforge.net/"> FarPlugins </a> News
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tec...@us...> - 2007-08-21 04:51:04
|
Revision: 403
http://farplugins.svn.sourceforge.net/farplugins/?rev=403&view=rev
Author: techtonik
Date: 2007-08-20 21:51:03 -0700 (Mon, 20 Aug 2007)
Log Message:
-----------
- do not require write privileges on export
Modified Paths:
--------------
trunk/farplugins/wiki/handlers/page/export.xml.php
Modified: trunk/farplugins/wiki/handlers/page/export.xml.php
===================================================================
--- trunk/farplugins/wiki/handlers/page/export.xml.php 2007-08-21 04:46:09 UTC (rev 402)
+++ trunk/farplugins/wiki/handlers/page/export.xml.php 2007-08-21 04:51:03 UTC (rev 403)
@@ -22,7 +22,7 @@
foreach ($pages as $num=>$page)
{
// check ACLS
- if (!$this->HasAccess("write", $page["tag"])) continue;
+ if (!$this->HasAccess("read", $page["tag"])) continue;
// output page
$tag = $page["tag"];
if ($numOfSlashes == substr_count($tag, "/")) $tag = "";
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tec...@us...> - 2007-08-21 04:46:06
|
Revision: 402
http://farplugins.svn.sourceforge.net/farplugins/?rev=402&view=rev
Author: techtonik
Date: 2007-08-20 21:46:09 -0700 (Mon, 20 Aug 2007)
Log Message:
-----------
+ prepare to fix export
Added Paths:
-----------
trunk/farplugins/wiki/handlers/
trunk/farplugins/wiki/handlers/page/
trunk/farplugins/wiki/handlers/page/export.xml.php
Added: trunk/farplugins/wiki/handlers/page/export.xml.php
===================================================================
--- trunk/farplugins/wiki/handlers/page/export.xml.php (rev 0)
+++ trunk/farplugins/wiki/handlers/page/export.xml.php 2007-08-21 04:46:09 UTC (rev 402)
@@ -0,0 +1,65 @@
+<?php
+header("Content-type: text/xml");
+
+$xml = "<?xml version=\"1.0\" encoding=\"".$this->GetCharset()."\"?>\n";
+$xml .= "<rss version=\"2.0\">\n";
+$xml .= "<channel>\n";
+$xml .= "<title>".$this->tag."</title>\n";
+$xml .= "<link>".$this->GetConfigValue("base_url")."</link>\n";
+$xml .= "<description>Export of entire cluster of ".$this->GetConfigValue("wakka_name")."/".$this->tag."</description>\n";
+$xml .= "<language></language>\n";//!!!
+$xml .= "<generator>WackoWiki ".WACKO_VERSION."</generator>\n";//!!!
+
+if ($this->HasAccess("read"))
+{
+
+ $numOfSlashes = substr_count($this->tag, "/");
+
+ $pages = $this->LoadAll("select * from ".
+ $this->config["table_prefix"]."pages where (supertag = '".quote($this->supertag)."'".
+ " OR supertag like '".quote($this->supertag."/%")."')".
+ " and comment_on = ''");
+ foreach ($pages as $num=>$page)
+ {
+ // check ACLS
+ if (!$this->HasAccess("write", $page["tag"])) continue;
+ // output page
+ $tag = $page["tag"];
+ if ($numOfSlashes == substr_count($tag, "/")) $tag = "";
+ else
+ {
+ $_tag = explode("/", $tag);
+ $tag = "";
+ for ($i=0; $i<count($_tag); $i++)
+ {
+ if ($i>$numOfSlashes) $tag .= $_tag[$i]."/";
+ }
+ }
+
+
+ $xml .= "<item>\n";
+ $xml .= "<guid>".rtrim($tag, "/")."</guid>\n";
+ $xml .= "<title></title>\n";
+ $xml .= "<link>".$this->GetConfigValue("base_url").$page["supertag"]."</link>\n";
+ $xml .= "<description><![CDATA[".str_replace("]]>","]]>",$page["body"])."]]></description>\n";
+ $xml .= "<author>".$page["owner"]."</author>\n";
+ $xml .= "<pubDate>".gmdate('D, d M Y H:i:s \G\M\T', strtotime($page["time"]))."</pubDate>\n";
+ $xml .= "</item>\n";
+ }
+
+}
+else
+{
+ $xml .= "<item>\n";
+ $xml .= "<title>Error</title>\n";
+ $xml .= "<link>".$this->href("show")."</link>\n";
+ $xml .= "<description>You're not allowed to access this information.</description>\n";
+ $xml .= "</item>\n";
+}
+
+$xml .= "</channel>\n";
+$xml .= "</rss>\n";
+
+print($xml);
+
+?>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tec...@us...> - 2007-05-24 07:24:41
|
Revision: 401
http://farplugins.svn.sourceforge.net/farplugins/?rev=401&view=rev
Author: techtonik
Date: 2007-05-24 00:24:42 -0700 (Thu, 24 May 2007)
Log Message:
-----------
fixed RSS feed about wiki changes
Modified Paths:
--------------
trunk/farplugins/wiki/classes/wacko.php
trunk/farplugins/wiki/wakka.php
trunk/farplugins/wiki/xml/.htaccess
Added Paths:
-----------
trunk/farplugins/wiki/xml/index.php
Modified: trunk/farplugins/wiki/classes/wacko.php
===================================================================
--- trunk/farplugins/wiki/classes/wacko.php 2007-05-24 06:31:12 UTC (rev 400)
+++ trunk/farplugins/wiki/classes/wacko.php 2007-05-24 07:24:42 UTC (rev 401)
@@ -1961,7 +1961,7 @@
$xml .= "</channel>\n";
$xml .= "</rss>\n";
- $filename = "xml/recentchanges_".preg_replace("/[^a-zA-Z0-9]/", "", strtolower($this->GetConfigValue("wakka_name"))).".xml";
+ $filename = $this->GetConfigValue("xml_path")."/recentchanges_".preg_replace("/[^a-zA-Z0-9]/", "", strtolower($this->GetConfigValue("wakka_name"))).".xml";
$fp = @fopen($filename, "w");
if ($fp)
Modified: trunk/farplugins/wiki/wakka.php
===================================================================
--- trunk/farplugins/wiki/wakka.php 2007-05-24 06:31:12 UTC (rev 400)
+++ trunk/farplugins/wiki/wakka.php 2007-05-24 07:24:42 UTC (rev 401)
@@ -62,6 +62,7 @@
"action_path" => "actions",
"handler_path" => "handlers",
+ "xml_path" => "xml",
"language" => "en",
"theme" => "default",
Modified: trunk/farplugins/wiki/xml/.htaccess
===================================================================
--- trunk/farplugins/wiki/xml/.htaccess 2007-05-24 06:31:12 UTC (rev 400)
+++ trunk/farplugins/wiki/xml/.htaccess 2007-05-24 07:24:42 UTC (rev 401)
@@ -1,3 +1,5 @@
-<IfModule mod_rewrite.c>
- RewriteEngine off
-</IfModule>
+<IfModule mod_rewrite.c>
+ RewriteEngine On
+ RewriteBase /wiki/xml
+ RewriteRule ^(.*)$ index.php?read=$1 [QSA,L]
+</IfModule>
Added: trunk/farplugins/wiki/xml/index.php
===================================================================
--- trunk/farplugins/wiki/xml/index.php (rev 0)
+++ trunk/farplugins/wiki/xml/index.php 2007-05-24 07:24:42 UTC (rev 401)
@@ -0,0 +1,14 @@
+<?php
+
+// proxy for reaading XML feeds from outside htdocs
+//
+// works in pair with .htaccess mod_rewrite
+
+include("../wakka.config.php");
+
+import_request_variables("g", "frmget_");
+if (isset($frmget_read)) {
+ readfile($wakkaConfig["xml_path"]."/".basename($frmget_read));
+}
+
+?>
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tec...@us...> - 2007-05-24 06:31:10
|
Revision: 400
http://farplugins.svn.sourceforge.net/farplugins/?rev=400&view=rev
Author: techtonik
Date: 2007-05-23 23:31:12 -0700 (Wed, 23 May 2007)
Log Message:
-----------
+ prepare xml directory to transparently give out required files from another location
Added Paths:
-----------
trunk/farplugins/wiki/xml/
trunk/farplugins/wiki/xml/.htaccess
Property Changed:
----------------
trunk/farplugins/wiki/classes/
Property changes on: trunk/farplugins/wiki/classes
___________________________________________________________________
Name: svn:ignore
+ *
Added: trunk/farplugins/wiki/xml/.htaccess
===================================================================
--- trunk/farplugins/wiki/xml/.htaccess (rev 0)
+++ trunk/farplugins/wiki/xml/.htaccess 2007-05-24 06:31:12 UTC (rev 400)
@@ -0,0 +1,3 @@
+<IfModule mod_rewrite.c>
+ RewriteEngine off
+</IfModule>
Property changes on: trunk/farplugins/wiki/xml/.htaccess
___________________________________________________________________
Name: svn:executable
+ *
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tec...@us...> - 2007-05-22 15:07:47
|
Revision: 399
http://farplugins.svn.sourceforge.net/farplugins/?rev=399&view=rev
Author: techtonik
Date: 2007-05-22 08:07:39 -0700 (Tue, 22 May 2007)
Log Message:
-----------
+ hack for database sessions in WackoWiki code
Modified Paths:
--------------
trunk/farplugins/wiki/wakka.php
Modified: trunk/farplugins/wiki/wakka.php
===================================================================
--- trunk/farplugins/wiki/wakka.php 2007-05-22 15:03:40 UTC (rev 398)
+++ trunk/farplugins/wiki/wakka.php 2007-05-22 15:07:39 UTC (rev 399)
@@ -242,6 +242,9 @@
}
}
+// techtonik: setup sessions to be saved in db
+require_once "session2db.php";
+
// start session
session_start();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tec...@us...> - 2007-05-22 15:04:47
|
Revision: 398
http://farplugins.svn.sourceforge.net/farplugins/?rev=398&view=rev
Author: techtonik
Date: 2007-05-22 08:03:40 -0700 (Tue, 22 May 2007)
Log Message:
-----------
+ unaltered wiki files fro further modifications
Added Paths:
-----------
trunk/farplugins/wiki/classes/
trunk/farplugins/wiki/classes/wacko.php
trunk/farplugins/wiki/wakka.php
Added: trunk/farplugins/wiki/classes/wacko.php
===================================================================
--- trunk/farplugins/wiki/classes/wacko.php (rev 0)
+++ trunk/farplugins/wiki/classes/wacko.php 2007-05-22 15:03:40 UTC (rev 398)
@@ -0,0 +1,2360 @@
+<?php
+// $Id: wacko.php 481 2005-03-07 14:18:45Z kukutz $
+
+// constants
+define("TRAN_DONTCHANGE", "0");
+define("TRAN_LOWERCASE", "1");
+define("TRAN_LOAD", "0");
+define("TRAN_DONTLOAD", "1");
+define("LOAD_NOCACHE", "0");
+define("LOAD_CACHE", "1");
+define("LOAD_ALL", "0");
+define("LOAD_META", "1");
+define("BM_AUTO", "0");
+define("BM_USER", "1");
+define("BM_DEFAULT", "2");
+
+
+class Wacko
+{
+ var $dblink;
+ var $page;
+ var $tag;
+ var $queryLog = array();
+ var $interWiki = array();
+ var $VERSION;
+ var $WVERSION; //Wacko version
+ var $context = array("");
+ var $current_context = 0;
+ var $pages_meta = "id, tag, time, owner, user, latest, handler, comment_on, super_comment_on, supertag, lang, keywords, description";
+ var $first_inclusion = array(); // for backlinks
+ // if you change this two symbols, settings for all users will be lost.
+ var $optionSplitter = "\n";
+ var $valueSplitter = "=";
+ var $format_safe = true; //for htmlspecialchars() in PreLink
+ var $unicode_entities = array(); //common unicode array
+ var $timer;
+ var $toc_context = array();
+ var $search_engines = array("bot", "rambler", "yandex", "crawl", "search", "archiver", "slurp", "aport", "crawler", "google", "inktomi", "spider", );
+ var $_langlist = null;
+ var $languages = null;
+ var $resources = null;
+ var $wantedCache = null;
+ var $pageCache = null;
+ var $_formatter_noautolinks = null;
+ var $post_wacko_action = null;
+ var $_userhost = null;
+
+ // constructor
+ function Wacko($config)
+ {
+ $this->timer = $this->GetMicroTime();
+ $this->config = $config;
+ $this->dblink = connect($this->config["mysql_host"], $this->config["mysql_user"], $this->config["mysql_password"], $this->config["mysql_database"], $this->config["db_collation"]);
+ $this->VERSION = WAKKA_VERSION;
+ $this->WVERSION = WACKO_VERSION;
+ }
+
+ // DATABASE
+ function Query($query, $debug=0)
+ {
+ if ($debug) echo "((QUERY: $query))";
+ if($this->GetConfigValue("debug")>=2) $start = $this->GetMicroTime();
+ $result = query($query, $this->dblink);
+ if($this->GetConfigValue("debug")>=2)
+ {
+ $time = $this->GetMicroTime() - $start;
+ $this->queryLog[] = array(
+ "query" => $query,
+ "time" => $time);
+ }
+ return $result;
+ }
+
+ function LoadSingle($query) { if ($data = $this->LoadAll($query)) return $data[0]; }
+
+ function LoadAll($query)
+ {
+ $data = array();
+ if ($r = $this->Query($query))
+ {
+ while ($row = fetch_assoc($r)) $data[] = $row;
+ free_result($r);
+ }
+ return $data;
+ }
+
+
+ // MISC
+ function GetMicroTime() { list($usec, $sec) = explode(" ",microtime()); return ((float)$usec + (float)$sec); }
+
+ function IncludeBuffered($filename, $notfoundText = "", $vars = "", $path = "")
+ {
+ if ($path) $dirs = explode(":", $path);
+ else $dirs = array("");
+
+ foreach($dirs as $dir)
+ {
+ if ($dir) $dir .= "/";
+ $fullfilename = $dir.$filename;
+ $fullfilename = trim($fullfilename, "./");
+ if (@file_exists($fullfilename))
+ {
+ if (is_array($vars)) extract($vars, EXTR_SKIP);
+
+ ob_start();
+ include($fullfilename);
+ $output = ob_get_contents();
+ ob_end_clean();
+ return $output;
+ }
+ }
+ if ($notfoundText) return $notfoundText;
+ else return false;
+ }
+
+ // VARIABLES
+ function GetPageTag() { return $this->tag; }
+ function GetPageSuperTag() { return $this->supertag; }
+ function GetPageTime() { return $this->page["time"]; }
+ function GetMethod() { return $this->method; }
+ function GetConfigValue($name) { return isset( $this->config[$name] ) ? $this->config[$name] : ''; }
+ function SetResource($lang) {$this->resource=&$this->resources[$lang];}
+
+ function SetLanguage($lang)
+ {
+// echo "<b>SetLanguage:</b> ".$lang."<br />";
+ $this->LoadResource($lang);
+ $this->language = &$this->languages[$lang];
+ setlocale(LC_CTYPE,$this->language["locale"]);
+ $this->language["locale"] = setlocale(LC_CTYPE,0);
+ $this->language["UPPER"] = "[".$this->language["UPPER_P"]."]";
+ $this->language["UPPERNUM"] = "[0-9".$this->language["UPPER_P"]."]";
+ $this->language["LOWER"] = "[".$this->language["LOWER_P"]."]";
+ $this->language["ALPHA"] = "[".$this->language["ALPHA_P"]."]";
+ $this->language["ALPHANUM"] = "[0-9".$this->language["ALPHA_P"]."]";
+ $this->language["ALPHANUM_P"]= "0-9".$this->language["ALPHA_P"];
+ }
+
+ function LoadResource($lang)
+ {
+ if (!$this->resources[$lang])
+ {
+ $resourcefile = "lang/wakka.".$lang.".php";
+ if (@file_exists($resourcefile)) include($resourcefile);
+ // wakka.all
+ $resourcefile = "lang/wakka.all.php";
+ if (!$this->resources["all"])
+ {
+ if (@file_exists($resourcefile)) include($resourcefile);
+ $this->resources["all"] =& $wackoAllResource;
+ }
+ $wackoResource = array_merge($wakkaResource, $this->resources["all"]);
+ // theme
+ $resourcefile = "themes/".$this->config["theme"]."/lang/wakka.".$lang.".php";
+ if (@file_exists($resourcefile)) include($resourcefile);
+ $wackoResource = array_merge((array)$wackoResource, (array)$themeResource);
+ // wakka.all theme
+ $resourcefile = "themes/".$this->config["theme"]."/lang/wakka.all.php";
+ if (@file_exists($resourcefile)) include($resourcefile);
+ $wackoResource = array_merge((array)$wackoResource, (array)$themeResource);
+
+ $this->resources[$lang] = $wackoResource;
+
+ $this->LoadLang($lang);
+ }
+ }
+
+ function LoadLang($lang)
+ {
+ if (!isset( $this->languages[$lang] ))
+ {
+ $resourcefile = "lang/lang.".$lang.".php";
+ if (@file_exists($resourcefile)) include($resourcefile);
+ $this->languages[$lang] = $wackoLanguage;
+ $ue = @array_flip($wackoLanguage["unicode_entities"]);
+ $this->unicode_entities = array_merge($this->unicode_entities, $ue);
+ unset($this->unicode_entities[0]);
+ }
+ }
+
+ function LoadAllLanguages()
+ {
+ if (!$this->GetConfigValue("multilanguage")) return;
+ $langs = $this->AvailableLanguages();
+ foreach ($langs as $lang)
+ $this->LoadLang($lang);
+ }
+
+ function AvailableLanguages()
+ {
+ if (!$this->_langlist)
+ {
+ $handle=opendir("lang");
+ while (false!==($file = readdir($handle))) {
+ if ($file != "." && $file != ".." && $file != "wakka.all.php" && !is_dir("lang/".$file) && 1==preg_match("/^wakka\.(.*?)\.php$/",$file,$match)) {
+ $langlist[] = $match[1];
+ }
+ }
+ closedir($handle);
+ $this->_langlist = $langlist;
+ }
+ return $this->_langlist;
+ }
+
+ function GetResourceValue($name, $lang="", $dounicode=true)
+ {
+ if (!$this->GetConfigValue("multilanguage")) return $this->resource[$name];
+
+ //echo "<b>GetResourceValue:</b> $lang + $name + $this->userlang + $this->pagelang<br />";
+
+ if (!$lang && $this->userlang!=$this->pagelang) $lang = $this->userlang;
+ if ($lang!="")
+ {
+ $this->LoadResource($lang);
+ return (is_array($this->resources[$lang][$name]))?$this->resources[$lang][$name]:($dounicode?$this->DoUnicodeEntities($this->resources[$lang][$name], $lang):$this->resources[$lang][$name]);
+ }
+ return $this->resource[$name];
+ }
+
+ function FormatResourceValue($name, $lang="")
+ {
+ $string = $this->GetResourceValue($name, $lang, false);
+ $this->format_safe = false;
+ $string = $this->Format($string);
+ $this->format_safe = true;
+ return $string;
+ }
+
+ function DetermineLang()
+ {
+ $langlist = $this->AvailableLanguages();
+ //!!!! wrong code, maybe!
+ if ($this->GetMethod()=="edit" && $_GET["add"]==1)
+ if ($_REQUEST["lang"] && in_array($_REQUEST["lang"], $langlist))
+ $lang = $_REQUEST["lang"];
+ else
+ $lang = $this->userlang;
+ else
+ $lang = $this->pagelang;
+
+ return $lang;
+ }
+
+ function SetPageLang($lang)
+ {
+ if (!$lang) return false;
+ $this->pagelang = $lang;
+ $this->SetLanguage($lang);
+ return true;
+ }
+
+ function GetCharset()
+ {
+ $lang = $this->DetermineLang();
+ $this->LoadResource($lang);
+ return $this->languages[$lang]["charset"];
+ }
+
+ function DoUnicodeEntities($string, $lang)
+ {
+ if (!$this->GetConfigValue("multilanguage")) return $string;
+ $_lang = $this->DetermineLang();
+ if ($lang==$_lang) return $string;
+
+// die("<h2>".$lang."<>".$_lang."</h2>");
+
+ $this->LoadResource($lang);
+ if (is_array($this->languages[$lang]["unicode_entities"]))
+ {
+ return @strtr($string, $this->languages[$lang]["unicode_entities"]);
+ }
+ else return $string;
+ }
+
+ function tryUtfDecode ($string)
+ {
+ $t1 = $this->utf8ToUnicodeEntities($string);
+ $t2 = @strtr($t1, $this->unicode_entities);
+ //echo "<pre><h1>".$string."|".$t1."|".$t2."</h1></pre>";
+ if (!preg_match("/\&\#[0-9]+\;/", $t2))
+ $string = $t2;
+ return $string;
+ }
+
+ function utf8ToUnicodeEntities ($source)
+ {
+ // array used to figure what number to decrement from character order value
+ // according to number of characters used to map unicode to ascii by utf-8
+ $decrement[4] = 240; $decrement[3] = 224;
+ $decrement[2] = 192; $decrement[1] = 0;
+
+ // the number of bits to shift each charNum by
+ $shift[1][0] = 0; $shift[2][0] = 6;
+ $shift[2][1] = 0; $shift[3][0] = 12;
+ $shift[3][1] = 6; $shift[3][2] = 0;
+ $shift[4][0] = 18; $shift[4][1] = 12;
+ $shift[4][2] = 6; $shift[4][3] = 0;
+
+ $pos = 0;
+ $len = strlen ($source);
+ $encodedString = '';
+ while ($pos < $len)
+ {
+ $asciiPos = ord (substr ($source, $pos, 1));
+ if (($asciiPos >= 240) && ($asciiPos <= 255))
+ {// 4 chars representing one unicode character
+ $thisLetter = substr ($source, $pos, 4);
+ $pos += 4;
+ }
+ else if (($asciiPos >= 224) && ($asciiPos <= 239))
+ {// 3 chars representing one unicode character
+ $thisLetter = substr ($source, $pos, 3);
+ $pos += 3;
+ }
+ else if (($asciiPos >= 192) && ($asciiPos <= 223))
+ {// 2 chars representing one unicode character
+ $thisLetter = substr ($source, $pos, 2);
+ $pos += 2;
+ }
+ else
+ {// 1 char (lower ascii)
+ $thisLetter = substr ($source, $pos, 1);
+ $pos += 1;
+ }
+
+ // process the string representing the letter to a unicode entity
+ $thisLen = strlen ($thisLetter);
+ if ($thisLen>1)
+ {
+ $thisPos = 0;
+ $decimalCode = 0;
+ while ($thisPos < $thisLen)
+ {
+ $thisCharOrd = ord (substr ($thisLetter, $thisPos, 1));
+ if ($thisPos == 0)
+ {
+ $charNum = intval ($thisCharOrd - $decrement[$thisLen]);
+ $decimalCode += ($charNum << $shift[$thisLen][$thisPos]);
+ }
+ else
+ {
+ $charNum = intval ($thisCharOrd - 128);
+ $decimalCode += ($charNum << $shift[$thisLen][$thisPos]);
+ }
+ $thisPos++;
+ }
+ $encodedLetter = "&#". $decimalCode . ';';
+ }
+ else
+ $encodedLetter = $thisLetter;
+ $encodedString .= $encodedLetter;
+ }
+ return $encodedString;
+ }
+
+ function GetWakkaName() { return $this->GetConfigValue("wakka_name"); }
+ function GetWakkaVersion() { return $this->VERSION; }
+ function GetWackoVersion() { return $this->WVERSION; }
+
+ // PAGES
+ // NpjTranslit
+ var $NpjMacros = array( "\xE2\xE8\xEA\xE8" => "wiki", "\xE2\xE0\xEA\xE0" => "wacko", "\xF8\xE2\xE0\xEA\xE0" => "shwacko",
+ "\xE2\xE5\xE1" => "web", "\xEB\xE0\xED\xF1" => "lance", "\xEA\xF3\xEA\xF3\xF6" => "kukutz", "\xEC\xE5\xED\xE4\xEE\xEA\xF3\xF1\xE8" => "mendokusee",
+ "\xFF\xF0\xE5\xEC\xEA\xEE" => "iaremko", "\xED\xE8\xEA\xEE\xEB\xE0\xE9" => "nikolai", "\xE0\xEB\xE5\xEA\xF1\xE5\xE9" => "aleksey", "\xE0\xED\xE0\xF2\xEE\xEB\xE8\xE9" => "anatoly"
+ );
+
+ function NpjTranslit($tag, $strtolow = TRAN_LOWERCASE, $donotload=TRAN_LOAD)
+ {
+ $_lang = null;
+ if (!$this->GetConfigValue("multilanguage")) $donotload = 1;
+ if (!$donotload)
+ if ($page = $this->LoadPage($tag, "", LOAD_CACHE, LOAD_META))
+ {
+ $_lang = $this->language["code"];
+ if ($page["lang"]) $lang = $page["lang"];
+ else $lang = $this->GetConfigValue("language");
+
+ $this->SetLanguage($lang);
+ }
+
+ $tag = str_replace( "//", "/", $tag );
+ $tag = str_replace( "-", "", $tag );
+ $tag = str_replace( " ", "", $tag );
+ $tag = str_replace( "'", "_", $tag );
+ $_tag = strtolower( $tag );
+ if ($strtolow) $tag = @strtr( $_tag, $this->NpjMacros );
+ else
+ foreach( $this->NpjMacros as $macro=>$value )
+ while (($pos = strpos($_tag, $macro)) !== false)
+ {
+ $_tag = substr_replace( $_tag, $value, $pos, strlen($macro) );
+ $tag = substr_replace( $tag, ucfirst($value), $pos, strlen($macro) );
+ }
+
+ $tag = @strtr( $tag, $this->language["NpjLettersFrom"], $this->language["NpjLettersTo"] );
+ $tag = @strtr( $tag, $this->language["NpjBiLetters"] );
+ if ($strtolow) $tag = strtolower( $tag );
+
+ if ($_lang)
+ $this->SetLanguage($_lang);
+ return rtrim($tag, "/");
+ }
+
+ function Translit($tag, $direction=1) { //deprecated
+ return $tag;
+ }
+
+ function LoadPage($tag, $time = "", $cache = LOAD_CACHE, $metadataonly = LOAD_ALL)
+ {
+ $supertag = $this->NpjTranslit($tag, TRAN_LOWERCASE, TRAN_DONTLOAD);
+
+ if ($this->GetCachedWantedPage($supertag)==1) return "";
+
+ $page = $this->OldLoadPage($supertag,$time,$cache, true, $metadataonly); // 1. search for supertag
+ if (!$page) // 2. if not found, search for tag
+// {
+ $page = $this->OldLoadPage($tag,$time,$cache, false, $metadataonly);
+/* if ($page) // 3. if found, update supertag
+ {
+ $this->Query( "update ".$this->config["table_prefix"]."pages ".
+ "set supertag='".$supertag."' where tag = '".$tag."';" );
+ }
+ }
+*/
+ if (!$page) $this->CacheWantedPage($supertag);
+ return $page;
+ }
+
+ function OldLoadPage($tag, $time = "", $cache = 1, $supertagged = false, $metadataonly = 0)
+ {
+ $page = null;
+ if (!$supertagged) $supertag = $this->NpjTranslit($tag, TRAN_LOWERCASE, TRAN_DONTLOAD);
+ else $supertag=$tag;
+ // retrieve from cache
+ if (!$time && $cache && ($cachedPage = $this->GetCachedPage($supertag, $metadataonly))) $page = $cachedPage;
+ // load page
+ if ($metadataonly) $what = $this->pages_meta;
+ else $what = "*";
+ if (!$page)
+ {
+ if ($supertagged) {
+ $page = $this->LoadSingle("select ".$what." from ".$this->config["table_prefix"]."pages where supertag='".quote($tag)."' and latest = 'Y' limit 1");
+ if ($time && $time!=$page["time"]) {
+ $this->CachePage($page, $metadataonly);
+ $page = $this->LoadSingle("select ".$what." from ".$this->config["table_prefix"]."revisions where supertag='".quote($tag)."' and time = '".quote($time)."' limit 1");
+ }
+ }
+ else {
+ $page = $this->LoadSingle("select ".$what." from ".$this->config["table_prefix"]."pages where tag='".quote($tag)."' and latest = 'Y' limit 1");
+ if ($time && $time!=$page["time"]) {
+ $this->CachePage($page, $metadataonly);
+ $page = $this->LoadSingle("select ".$what." from ".$this->config["table_prefix"]."revisions where tag='".quote($tag)."' and time = '".quote($time)."' limit 1");
+ }
+ }
+ }// cache result
+ if (!$time && !$cachedPage) $this->CachePage($page, $metadataonly);
+ return $page;
+ }
+
+ function GetCachedPage($tag, $metadataonly=0) {
+ if (isset( $this->pageCache[$tag] ))
+ if ($this->pageCache[$tag]["mdonly"]==0 || $metadataonly==$this->pageCache[$tag]["mdonly"])
+ return $this->pageCache[$tag];
+ return false;
+ }
+
+ function CachePage($page, $metadataonly=0) {
+ $page["supertag"] = $this->NpjTranslit($page["supertag"], TRAN_LOWERCASE, TRAN_DONTLOAD);
+ $this->pageCache[$page["supertag"]] = $page;
+ $this->pageCache[$page["supertag"]]["mdonly"] = $metadataonly;
+ }
+
+ function CacheWantedPage($tag, $check = 0) {
+ if ($check==0)
+ $this->wantedCache[$this->language["code"]][$tag] = 1;
+ else if ($this->OldLoadPage($tag, "", 1, false, 1)=="")
+ $this->wantedCache[$this->language["code"]][$tag] = 1;
+ }
+
+ function ClearCacheWantedPage($tag){
+ $this->wantedCache[$this->language["code"]][$tag] = 0;
+ }
+
+ function GetCachedWantedPage($tag)
+ {
+ if (isset( $this->wantedCache[$this->language["code"]][$tag] ))
+ return $this->wantedCache[$this->language["code"]][$tag];
+ else
+ return '';
+ }
+
+ function GetCachedACL($tag, $privilege, $useDefaults)
+ {
+ if (isset( $this->aclCache[$tag."#".$privilege."#".$useDefaults] ))
+ return $this->aclCache[$tag."#".$privilege."#".$useDefaults];
+ else
+ return '';
+ }
+ function CacheACL($tag, $privilege, $useDefaults, $acl) { $this->aclCache[$tag."#".$privilege."#".$useDefaults] = $acl; }
+
+ function CacheLinks()
+ {
+ if ($links = $this->LoadAll("select * from ".$this->config["table_prefix"]."links where from_tag='".quote($this->GetPageTag())."'"))
+ {
+ $cl = count($links);
+ for ($i=0; $i<$cl; $i++)
+ $pages[$i] = $links[$i]["to_tag"];
+ }
+
+ $user = $this->GetUser();
+ $pages[$cl] = $user["name"];
+
+
+ $bookm = $this->GetDefaultBookmarks($user["lang"], "site")."\n".($user["bookmarks"] ? $user["bookmarks"] : $this->GetDefaultBookmarks($user["lang"]));
+ $bookmarks = explode("\n", $bookm);
+ for ($i=0; $i<=count($bookmarks); $i++)
+ $pages[$cl+$i] = preg_replace("/^(.*?)\s.*$/","\\1",preg_replace("/[\[\]\(\)]/","",$bookmarks[$i]));
+
+ $pages[]=$this->GetPageTag();
+
+ $spages_str = ''; $pages_str = '';
+ for ($i=0; $i<count($pages); $i++)
+ {
+ $spages[$i] = $this->NpjTranslit($pages[$i], TRAN_LOWERCASE, TRAN_DONTLOAD);
+ $spages_str .= "'".quote($spages[$i])."', ";
+ $pages_str .= "'".quote($pages[$i])."', ";
+ }
+
+ $spages_str=substr($spages_str,0,strlen($spages_str)-2);
+ $pages_str=substr($pages_str,0,strlen($pages_str)-2);
+
+ if ($links = $this->LoadAll("select ".$this->pages_meta." from ".$this->config["table_prefix"]."pages where supertag in (".$spages_str.")"))
+ for ($i=0; $i<count($links); $i++)
+ {
+ $this->CachePage($links[$i], 1);
+ $exists[] = $links[$i]["supertag"];
+ }
+ $notexists = @array_values(@array_diff($spages, $exists));
+ for ($i=0; $i<count($notexists); $i++)
+ {
+ $this->CacheWantedPage($pages[array_search($notexists[$i],$spages)], 1);
+ $this->CacheACL($notexists[$i], "read", 1, $acl);
+ }
+
+// unset($exists);
+ if ($read_acls = $this->LoadAll("select * from ".$this->config["table_prefix"]."acls where BINARY page_tag in (".$pages_str.") and privilege = 'read'"))
+ for ($i=0; $i<count($read_acls); $i++)
+ {
+ $this->CacheACL($read_acls[$i]["supertag"], "read", 1, $read_acls[$i]);
+// $exists[] = $read_acls[$i]["tag"];
+ }
+/*
+ $notexists = @array_values(@array_diff($pages, $exists));
+ for ($i=0; $i<count($notexists); $i++)
+ {
+ $acl = array("supertag" => $notexists[$i], "page_tag" => $notexists[$i], "privilege" => "read", "list" => "*", "time" => date("YmdHis"));
+ $this->CacheACL($notexists[$i], "read", 1, $acl);
+ }
+*/
+ $ddd = $this->GetMicroTime();
+ $this->queryLog[] = array(
+ "query" => "<b>end caching links</b>",
+ "time" => $this->GetResourceValue("MeasuredTime").": ".(number_format(($ddd-$this->timer),3))." s");
+ }
+
+ function SetPage($page)
+ {
+ $langlist = $this->AvailableLanguages();
+ $this->page = $page;
+ if ($this->page["tag"]) $this->tag = $this->page["tag"];
+ if ($page["lang"])
+ $this->pagelang = $page["lang"];
+ else if ($_REQUEST["add"] && $_REQUEST["lang"] && in_array($_REQUEST["lang"], $langlist))
+ $this->pagelang = $_REQUEST["lang"];
+ else if ($_REQUEST["add"])
+ $this->pagelang = $this->userlang;
+ else
+ $this->pagelang = $this->GetConfigValue("language");
+ }
+
+ function LoadPageById($id)
+ {
+ if ($id!="-1")
+ return $this->LoadSingle("select * from ".$this->config["table_prefix"]."revisions where id = '".quote($id)."' limit 1");
+ else
+ return $this->LoadSingle("select * from ".$this->config["table_prefix"]."pages where tag='".quote($this->GetPageTag())."' and latest='Y' limit 1");
+ }
+
+ function LoadRevisions($page)
+ {
+ $rev = $this->LoadAll("select ".$this->pages_meta." from ".$this->config["table_prefix"]."revisions where tag='".quote($page)."' order by time desc");
+ if (is_array($rev)) array_unshift($rev, $this->LoadSingle("select ".$this->pages_meta." from ".$this->config["table_prefix"]."pages where tag='".quote($page)."' order by time desc limit 1"));
+ else $rev[] = $this->LoadSingle("select ".$this->pages_meta." from ".$this->config["table_prefix"]."pages where tag='".quote($page)."' order by time desc limit 1");
+ return $rev;
+ }
+
+ function LoadPagesLinkingTo($tag, $for="")
+ {
+ return $this->LoadAll("select from_tag as tag from ".$this->config["table_prefix"]."links where ".
+ ($for?"from_tag like '".quote($for)."/%' and ":"").
+ "((to_supertag='' AND to_tag='".quote($tag)."') OR to_supertag='".quote($this->NpJTranslit($tag))."')".
+ " order by tag");
+ }
+
+ function LoadRecentlyChanged($limit=70, $for="", $from="")
+ {
+ $limit= (int) $limit;
+ if ($pages =
+ $this->LoadAll("select ".$this->pages_meta." from ".$this->config["table_prefix"]."pages ".
+ "where latest = 'Y' and comment_on = '' ".($from?"and time<='".quote($from)." 23:59:59'":"").
+ ($for?"and supertag like '".quote($this->NpjTranslit($for))."/%' ":"").
+ "order by time desc limit ".$limit))
+ {
+ foreach ($pages as $page)
+ {
+ $this->CachePage($page, 1);
+ }
+
+ if ($read_acls = $this->LoadAll("select a.* "
+ ."from ".$this->config["table_prefix"]."acls a, ".$this->config["table_prefix"]."pages p "
+ ."where p.latest = 'Y' "
+ ."and p.comment_on = '' "
+ ."and a.supertag = p.supertag "
+ .($for?"and p.supertag like '".quote($this->NpjTranslit($for))."/%' ":"")
+ ."and privilege = 'read' "
+ ."order by time desc limit ".$limit))
+ for ($i=0; $i<count($read_acls); $i++) {
+ $this->CacheACL($read_acls[$i]["supertag"], "read", 1,$read_acls[$i]);
+ }
+
+ return $pages;
+ }
+ }
+
+ function LoadWantedPages($for="")
+ {
+ $pref = $this->config["table_prefix"];
+ $sql = "select distinct ".$pref."links.to_tag as tag,count(".$pref."links.from_tag) as count ".
+ "from ".$pref."links left join ".$pref."pages on ".
+ "((".$pref."links.to_tag = ".$pref."pages.tag AND ".$pref."links.to_supertag='') ".
+ " OR ".$pref."links.to_supertag=".$pref."pages.supertag) ".
+ "where ".($for?$pref."links.to_tag like '".quote($for)."/%' and ":"").
+ $pref."pages.tag is NULL group by tag order by count desc, tag asc limit 200";
+ return $this->LoadAll($sql);
+ }
+
+ function LoadOrphanedPages($for="")
+ {
+ $pref = $this->config["table_prefix"];
+ $sql = "select distinct tag from ".$pref."pages left join ".$pref."links on ".
+// $pref."pages.tag = ".$pref."links.to_tag where ".
+ "((".$pref."links.to_tag = ".$pref."pages.tag AND ".$pref."links.to_supertag='') ".
+ " OR ".$pref."links.to_supertag=".$pref."pages.supertag) where ".
+ ($for?$pref."pages.tag like '".quote($for)."/%' and ":"").
+ $pref."links.to_tag is NULL and ".$pref."pages.comment_on = '' ".
+ "order by tag limit 200";
+ return $this->LoadAll($sql);
+ }
+
+ function LoadPageTitles() { return $this->LoadAll("select distinct tag from ".$this->config["table_prefix"]."pages order by tag"); }
+ function LoadAllPages() { return $this->LoadAll("select ".$this->pages_meta." from ".$this->config["table_prefix"]."pages where latest = 'Y' and LEFT(supertag,7)!='comment' order by BINARY tag limit 1000"); }
+
+ function FullTextSearch($phrase,$filter)
+ {
+ return $this->LoadAll("select ".$this->pages_meta." from ".$this->config["table_prefix"].
+ "pages where latest = 'Y' and (( match(body) against('".quote($phrase)."') ".
+ "or lower(tag) like lower('%".quote($phrase)."%')) ".($filter?"and comment_on=''":"")." )");
+ }
+
+ function TagSearch($phrase) { return $this->LoadAll("select ".$this->pages_meta." from ".$this->config["table_prefix"]."pages where latest = 'Y' and lower(tag) like binary lower('%".quote($phrase)."%') order by supertag"); }
+
+ function SendMail($email,$subject, $message) {
+ $headers = "From: \"".$this->GetConfigValue("wakka_name")."\"<".$this->GetConfigValue("admin_email").">\r\n";
+ $headers .= "X-Mailer: PHP/".phpversion()."\r\n"; //mailer
+ $headers .= "X-Priority: 3\r\n"; //1 UrgentMessage, 3 Normal
+ $headers .= "Content-Type: text/html; charset=".$this->GetCharset()."\r\n";
+ $subject = "=?".$this->GetCharset()."?B?" . base64_encode($subject) . "?=";
+ @mail($email, $subject, "<html><head></head><body>".$message."</body></html>", $headers);
+ }
+
+ function SavePage($tag, $body, $comment_on = "")
+ {
+ // get current user
+ $user = $this->GetUserName();
+
+ //ANTISPAM
+ $this->spam = array(".cn/", "shop263", "haishun", "qenset-sh", "7766888.com", "xsjby", "asp169.com", "fm360.net",
+ "garrywa.com", "funasia", "sec66.com", "xhhj.com", "cndevi.com", "sinostrategy.com", "hdfix.com",
+ "voip99", "zhiliaotuofa", "shuangchuang", "9li.", "agreatserver.", "how-to-make-valances.",
+ "pop-the-question.", "m-shopping.de", "vitabig.com", "komusumeya.net", "ryohin.kir", "kir.jp",
+ "haru-ulala", "buy-cheap-", ".uni.cc", ".6x.to", ".qn.com", ".go.ro", "wiki.t35.com", "junyuan.com",
+ "gad1ee.com", "0008888.com", "njlvtong.com", "shellbitumen.com", "njuyq.com", "searcher.cn",
+ "51asa.com", "sooyi.com", "dlctc.com", "ganzao.", "68l.com", "tt33tt.com", "99bbcc.com", "88aabb.com",
+ "5iu5iu.com", "tg123.net", "88118888.com", "dzdg007", "condyloma.net", "hpv.com", "17836.com", "hpv888.com",
+ "bxmm.com", "hpv120.com", "d9d.net", "chinaoo.com", "vipwww", "fengxiong.net", "13788888888.com",
+ "pc123.cn", "88558888.com", "3333888888.com");
+
+ if (is_array($this->spam))
+ foreach ($this->spam as $spam)
+ {
+ if (strpos($body, $spam)!==false) return "Error: couldn't connect to database.";
+ }
+
+// die ($this->userlang."|".$this->pagelang."|".$_REQUEST["lang"]."|".$_POST["tag"]."|".$this->tag."|".$this->supertag);
+ if($_POST["tag"])
+ {
+ $this->tag = $tag = $_POST["tag"];
+ $this->supertag = $this->NpjTranslit($tag);
+ }
+
+ if (!$this->NpjTranslit($tag)) return;
+
+ if ($this->GetConfigValue("cache"))
+ if ($comment_on) $this->cache->CacheInvalidate($comment_on);
+ else
+ {
+ $this->cache->CacheInvalidate($this->tag);
+ $this->cache->CacheInvalidate($this->supertag);
+ }
+
+ if ($this->HasAccess("write", $tag) || ($comment_on && $this->HasAccess("comment", $comment_on)))
+ {
+ $body = $this->Format($body, "preformat");
+ // is page new?
+ if (!$oldPage = $this->LoadPage($tag))
+ {
+ $langlist = $this->AvailableLanguages();
+ if ($_REQUEST["lang"] && in_array($_REQUEST["lang"], $langlist))
+ $lang = $_REQUEST["lang"];
+ else
+ $lang = $this->userlang;
+
+ if (!$lang) $lang = $this->GetConfigValue["language"];
+
+ $this->SetLanguage($lang);
+
+ $body_r = $this->Format($body, "wacko");
+ if ($this->GetConfigValue("paragrafica") && !$comment_on)
+ {
+ $body_r = $this->Format($body_r, "paragrafica");
+ $body_toc = $this->body_toc;
+ }
+ // create default write acl. store empty write ACL for comments.
+ // get default acl for root.
+ if (strstr($this->context[$this->current_context], "/"))
+ {
+ $root = preg_replace( "/^(.*)\\/([^\\/]+)$/", "$1", $this->context[$this->current_context] );
+ $write_acl = $this->LoadAcl($root, "write");
+ while ($write_acl["default"]==1)
+ {
+ $_root = $root;
+ $root = preg_replace( "/^(.*)\\/([^\\/]+)$/", "$1", $root );
+ if ($root == $_root) break;
+ $write_acl = $this->LoadAcl($root, "write");
+ }
+ $write_acl = $write_acl["list"];
+ $read_acl = $this->LoadAcl($root, "read"); $read_acl = $read_acl["list"];
+ $comment_acl = $this->LoadAcl($root, "comment"); $comment_acl = $comment_acl["list"];
+ }
+ else
+ { $write_acl = $this->GetConfigValue("default_write_acl");
+ $read_acl = $this->GetConfigValue("default_read_acl");
+ $comment_acl = $this->GetConfigValue("default_comment_acl");
+ }
+
+ // current user is owner; if user is logged in! otherwise, no owner.
+ if ($this->GetUser()) $owner = $user;
+
+ $this->Query("insert into ".$this->config["table_prefix"]."pages set ".
+ ($comment_on ? "comment_on = '".quote($comment_on)."', " : "").
+ ($comment_on ? "super_comment_on = '".quote($this->NpjTranslit($comment_on))."', " : "").
+ "time = now(), ".
+ "owner = '".quote($owner)."', ".
+ "user = '".quote($user)."', ".
+ "latest = 'Y', ".
+ "supertag = '".quote($this->NpjTranslit($tag))."', ".
+ "body = '".quote($body)."', ".
+ "body_r = '".quote($body_r)."', ".
+ "body_toc = '".quote($body_toc)."', ".
+ "lang = '".quote($lang)."', ".
+ "tag = '".quote($tag)."'");
+
+
+ $this->SaveAcl($tag, "write", ($comment_on ? "" : $write_acl));
+ $this->SaveAcl($tag, "read", $read_acl);
+ $this->SaveAcl($tag, "comment", ($comment_on ? "" : $comment_acl));
+
+ if ($this->GetUser() && !$this->GetConfigValue("disable_autosubscribe"))
+ $this->SetWatch($this->GetUserName(), $this->GetPageTag());
+
+ if ($comment_on) {
+ $username = $this->GetUserName();
+ $Watchers = $this->LoadAll("select distinct user from ".$this->config["table_prefix"]."pagewatches where tag = '".quote($comment_on)."'");
+ foreach ($Watchers as $Watcher)
+ if ($Watcher["user"] != $username)
+ {
+ $_user = $this->GetUser();
+ $Watcher["name"] = $Watcher["user"];
+ $this->SetUser($Watcher, 0);
+
+ if ($this->HasAccess("read", $comment_on, $Watcher["user"]))
+ {
+ $User = $this->LoadSingle("select email, lang, more, email_confirm from " .$this->config["user_table"]." where name = '".quote($Watcher["user"])."'");
+ $User["options"] = $this->DecomposeOptions($User["more"]);
+ if ($User["email_confirm"]=="" && $User["options"]["send_watchmail"]!="N")
+ {
+ $lang = $User["lang"];
+ $subject = $this->GetResourceValue("Comment for watched page",$lang)."'".$comment_on."'";
+ $message = $this->GetResourceValue("MailHello",$lang). $Watcher["user"].".<br /> <br /> ";
+ $message .= $username.
+ $this->GetResourceValue("Someone commented",$lang)."<br /> * <a href=\"".$this->Href("",$comment_on,"")."\">".$this->Href("",$comment_on,"")."</a><br />";
+ $message .= "<hr />".$this->Format($body_r, "post_wacko")."<hr />";
+ $message .= "<br />".$this->GetResourceValue("MailGoodbye",$lang)." ".$this->GetConfigValue("wakka_name");
+ $this->SendMail($User["email"], $subject, $message);
+ }
+ }
+ $this->SetUser($_user, 0);
+ }
+ }
+ }
+ else
+ {
+ $this->SetLanguage($this->pagelang);
+ $body_r = $this->Format($body, "wacko");
+ if ($this->GetConfigValue("paragrafica"))
+ {
+ $body_r = $this->Format($body_r, "paragrafica");
+ $body_toc = $this->body_toc;
+ }
+ // aha! page isn't new. keep owner!
+ $owner = $oldPage["owner"];
+ if ($oldPage['body'] != $body)
+ {
+ // move revision
+ $this->Query("insert into ".$this->config["table_prefix"]."revisions (tag, time, body, owner, user, latest, handler, comment_on, supertag, keywords, description) ".
+ "select tag, time, body, owner, user, 'N', handler, comment_on, supertag, keywords, description from ".$this->config["table_prefix"]."pages WHERE tag = '".quote($tag)."' and latest='Y' LIMIT 1");
+
+ // add new revision
+ $this->Query("update ".$this->config["table_prefix"]."pages set ".
+ ($comment_on ? "comment_on = '".quote($comment_on)."', " : "").
+ ($comment_on ? "super_comment_on = '".quote($this->NpjTranslit($comment_on))."', " : "").
+ "time = now(), ".
+ "owner = '".quote($owner)."', ".
+ "user = '".quote($user)."', ".
+ "supertag = '".$this->NpjTranslit($tag)."', ".
+ "body = '".quote($body)."', ".
+ "body_toc = '".quote($body_toc)."', ".
+ "body_r = '".quote($body_r)."' ".
+ "where tag = '".quote($tag)."' and latest='Y' LIMIT 1");
+ }
+
+ $username = $this->GetUserName();
+ $Watchers = $this->LoadAll("select distinct user from ".$this->config["table_prefix"]."pagewatches where tag = '".quote($tag)."'");
+ if ($Watchers)
+ {
+ foreach ($Watchers as $Watcher)
+ if ($Watcher["user"] != $username)
+ {
+ $_user = $this->GetUser();
+ $Watcher["name"] = $Watcher["user"];
+ $this->SetUser($Watcher, 0);
+ $lang = $Watcher["lang"];
+ if ($this->HasAccess("read", $tag, $Watcher["user"]))
+ {
+ $User = $this->LoadSingle("select email, lang, more, email_confirm from " .$this->config["user_table"]." where name = '".quote($Watcher["user"])."'");
+ $User["options"] = $this->DecomposeOptions($User["more"]);
+ if ($User["email_confirm"]=="" && $User["options"]["send_watchmail"]!="N")
+ {
+ $lang = $User["lang"];
+ $subject = $this->GetResourceValue("A watched Page changed!",$lang)."'".$tag."'";
+ $message = "<style>.additions {color: #008800;}\n.deletions {color: #880000;}</style>";
+ $message .= $this->GetResourceValue("MailHello",$lang). $Watcher["user"].".<br /> <br /> ";
+ $message .= $username.
+ $this->GetResourceValue("Someone changed this page:",$lang)."<br /> ";//* <a href=\"".$this->Href("",$tag,"")."\">".$this->Href("",$tag,"")."</a><br />";
+ $_GET["fastdiff"] = 1;
+ $_GET["a"] = -1;
+ $page = $this->LoadSingle("select ".$this->pages_meta." from ".$this->config["table_prefix"]."revisions where tag='".quote($tag)."' order by time desc");
+ $_GET["b"] = $page["id"];
+ $message .= "<hr />".$this->IncludeBuffered("handlers/page/diff.php", "oops")."<hr />";
+ $message .= "<br />".$this->GetResourceValue("MailGoodbye",$lang)." ".$this->GetConfigValue("wakka_name");
+ $this->SendMail($User["email"], $subject, $message);
+ }
+ }
+ $this->SetUser( $_user, 0 );
+ }
+ }
+ $this->SetLanguage($this->userlang);
+ }
+ }
+
+ $this->WriteRecentChangesXML();
+
+ return $body_r;
+ }
+
+ function SaveMeta($tag, $metadata)
+ {
+ if ($this->UserIsOwner($tag))
+ {
+ // update
+ $this->Query("update ".$this->config["table_prefix"]."pages set ".
+ "lang = '".quote($metadata["lang"])."', ".
+ "keywords = '".quote($metadata["keywords"])."', ".
+ "description = '".quote($metadata["description"])."' ".
+ "where tag = '".quote($tag)."' and latest='Y' LIMIT 1");
+ }
+ return true;
+ }
+
+ // COOKIES
+ function SetSessionCookie($name, $value) { SetCookie($this->config["cookie_prefix"].$name, $value, 0, "/"); $_COOKIE[$this->config["cookie_prefix"].$name] = $value; }
+ function SetPersistentCookie($name, $value, $remember = 1) { SetCookie($this->config["cookie_prefix"].$name, $value, time() + ($remember ? 90*24*60*60 : 60 * 60), "/"); $_COOKIE[$this->config["cookie_prefix"].$name] = $value; }
+ function DeleteCookie($name) { SetCookie($this->config["cookie_prefix"].$name, "", 1, "/"); $_COOKIE[$this->config["cookie_prefix"].$name] = ""; }
+ function GetCookie($name) { return $_COOKIE[$this->config["cookie_prefix"].$name]; }
+
+ // HTTP/REQUEST/LINK RELATED
+ function SetMessage($message) { $_SESSION["message"] = $message; }
+ function GetMessage() { $message = $_SESSION["message"]; $_SESSION["message"] = ""; return $message; }
+ function Redirect($url) { header("Location: $url"); exit; }
+
+ function UnwrapLink( $tag )
+ {
+ if ($tag=="/") return "";
+ if ($tag=="!") return $this->tag;
+
+ $newtag = $tag;
+
+ if (strstr($this->context[$this->current_context], "/"))
+ $root = preg_replace( "/^(.*)\\/([^\\/]+)$/", "$1", $this->context[$this->current_context] );
+ else $root = "";
+ if (preg_match("/^\.\/(.*)$/", $tag, $matches)) { $root=""; }
+ else if (preg_match("/^\/(.*)$/", $tag, $matches)) { $root = ""; $newtag = $matches[1]; }
+ else if (preg_match("/^\!\/(.*)$/", $tag, $matches))
+ {
+ $root = $this->context[$this->current_context];
+ $newtag = $matches[1];
+ }
+ else if (preg_match("/^\.\.\/(.*)$/", $tag, $matches))
+ {
+ $newtag = $matches[1];
+ if (strstr($root, "/"))
+ $root = preg_replace( "/^(.*)\\/([^\\/]+)$/", "$1", $root );
+ else $root = "";
+ }
+ if ($root != "") $newtag= "/".$newtag;
+ $tag = $root.$newtag;
+ $tag = str_replace( "//", "/", $tag );
+ return $tag;
+ }
+
+ // returns just PageName[/method].
+ function MiniHref($method = "", $tag = "", $addpage = "")
+ {
+ if (!$tag = trim($tag)) $tag = $this->tag;
+ if (!$addpage) $tag=$this->SlimUrl($tag);
+ //$tag = $this->Translit($tag, 0);
+ $tag = trim( $tag, "/." );
+ return $tag.($method ? "/".$method : "");
+ }
+
+ // returns the full url to a page/method.
+ function Href($method = "", $tag = "", $params = "", $addpage=0)
+ {
+ $href = $this->config["base_url"].$this->MiniHref($method, $tag, $addpage);
+ if ($addpage) $params="add=1".($params?"&".$params:"");
+ if ($params)
+ {
+ $href .= ($this->config["rewrite_mode"] ? "?" : "&").$params;
+ }
+ return $href;
+ }
+
+ function ComposeLinkToPage($tag, $method = "", $text = "", $track = 1)
+ {
+ if (!$text) $text = $this->AddSpaces($tag);
+ //$text = htmlentities($text);
+ if ($_SESSION["linktracking"] && $track)
+ $this->TrackLinkTo($tag);
+ return '<a href="'.$this->href($method, $tag).'">'.$text.'</a>';
+ }
+
+ function PreLink($tag, $text = "", $track = 1)
+ {
+// if (!$text) $text = $this->AddSpaces($tag);
+
+ if (preg_match("/^[\!\.".$this->language["ALPHANUM_P"]."]+$/", $tag))
+ {// it's a Wiki link!
+ if ($_SESSION["linktracking"] && $track) $this->TrackLinkTo($this->UnwrapLink( $tag ));
+ }
+ return "\xA2\xA2".$tag." ==".($this->format_safe?str_replace(">", ">", str_replace("<", "<", $text)):$text)."\xAF\xAF";
+ }
+
+ // <?
+ function Link($tag, $method = "", $text = "", $track = 1, $safe=0, $linklang="")
+ {
+ $class = ''; $title = ''; $lang = '';
+
+ $text = str_replace('"', """, $text);
+
+ if (!$safe)
+ $text = htmlspecialchars($text, ENT_NOQUOTES);
+
+ if ($linklang)
+ $this->SetLanguage($linklang);
+
+ $imlink = false;
+ if (preg_match("/^[\.\-".$this->language["ALPHANUM_P"]."]+\.(gif|jpg|jpe|jpeg|png)$/i", $text))
+ $imlink = $this->GetConfigValue("root_url")."/images/".$text;
+ else if (preg_match("/^(http|https|ftp):\/\/([^\\s\"<>]+)\.(gif|jpg|jpe|jpeg|png)$/i", preg_replace("/<\/?nobr>/", "" ,$text)))
+ $imlink = $text = preg_replace("/(<|\<\;)\/?span( class\=\"nobr\")?(>|\>\;)/", "" ,$text);
+ $url = '';
+
+ if (preg_match("/^(mailto[:])?[^\\s\"<>&\:]+\@[^\\s\"<>&\:]+\.[^\\s\"<>&\:]+$/", $tag, $matches))
+ {// this is a valid Email
+ $url = ($matches[1]=="mailto:" ? $tag : "mailto:".$tag);
+ $title = $this->GetResourceValue("MailLink");
+ $icon = $this->GetResourceValue("mailicon");
+ $tpl = "email";
+ }
+ else if (preg_match("/^#/", $tag))
+ {// html-anchor
+ $url = $tag;
+ $tpl = "anchor";
+ }
+ else if (preg_match("/^[\.\-".$this->language["ALPHANUM_P"]."]+\.(gif|jpg|jpe|jpeg|png)$/i", $tag))
+ {// image
+ $text = preg_replace("/(<|\<\;)\/?span( class\=\"nobr\")?(>|\>\;)/", "" ,$text);
+ return "<img src=\"".$this->GetConfigValue("root_url")."/images/".$tag."\" ".($text?"alt=\"".$text."\" title=\"".$text."\"":"")." />";
+ }
+ else if (preg_match("/^(http|https|ftp|file):\/\/([^\\s\"<>]+)\.(gif|jpg|jpe|jpeg|png)$/i", $tag))
+ {// external image
+ $text = preg_replace("/(<|\<\;)\/?span( class\=\"nobr\")?(>|\>\;)/", "" ,$text);
+ return "<img src=\"".str_replace("&", "&", str_replace("&", "&", $tag))."\" ".($text?"alt=\"".$text."\" title=\"".$text."\"":"")." />";
+ }
+ else if (preg_match("/^(http|https|ftp|file):\/\/([^\\s\"<>]+)\.(rpm|gz|tgz|zip|rar|exe|doc|xls|ppt|tgz|pdf)$/", $tag))
+ {// this is a file link
+ $url = str_replace("&", "&", str_replace("&", "&", $tag));
+ $title= $this->GetResourceValue("FileLink");
+ $icon = $this->GetResourceValue("fileicon");
+ $tpl = "file";
+ }
+ else if (preg_match("/^(http|https|ftp|file|nntp|telnet):\/\/([^\\s\"<>]+)$/", $tag))
+ {// this is a valid external URL
+ $url = str_replace("&", "&", str_replace("&", "&", $tag));
+ if (!stristr($tag,$this->config["base_url"]))
+ {
+ $title= $this->GetResourceValue("OuterLink2");
+ $icon = $this->GetResourceValue("outericon");
+ }
+ $tpl = "outerlink";
+ }
+ else if (preg_match("/^(_?)file:([^\\s\"<>\(\)]+)$/", $tag, $matches))
+ {// this is a file:
+ $noimg = $matches[1];
+ $thing = $matches[2];
+ $arr = explode("/", $thing);
+//echo($thing."<br />");
+ if (count($arr)==1) // file:shit.zip
+ {
+// echo ($thing."<br />");
+ //try to find in global storage and return if success
+ $desc = $this->CheckFileExists($thing);
+// print_r($desc);
+ if (is_array($desc))
+ {
+ $title = $desc["description"]." (".ceil($desc["filesize"]/1024)." ".$this->GetResourceValue("UploadKB").")";
+ if ($desc["picture_w"] && !$noimg)
+ {
+ if (!$text) $text = $title;
+ return "<img src=\"".$this->GetConfigValue("root_url").$this->config["upload_path"]."/".$thing."\" ".($text?"alt=\"".$text."\" title=\"".$text."\"":"")." width='".$desc["picture_w"]."' height='".$desc["picture_h"]."' />";
+ }
+ $url = $this->GetConfigValue("root_url").$this->config["upload_path"]."/".$thing;
+ $icon = $this->GetResourceValue("fileicon");
+ $imlink = false;
+ $tpl = "localfile";
+ }
+ }
+ if (count($arr)==2 && $arr[0]=="") // file:/shit.zip
+ {
+ //try to find in global storage and return if success
+ $desc = $this->CheckFileExists($arr[1]);
+ if (is_array($desc))
+ {
+ $title = $desc["description"]." (".ceil($desc["filesize"]/1024)." ".$this->GetResourceValue("UploadKB").")";
+ if ($desc["picture_w"] && !$noimg)
+ {
+ if (!$text) $text = $title;
+ return "<img src=\"".$this->GetConfigValue("root_url").$this->config["upload_path"]."/".$thing."\" ".($text?"alt=\"".$text."\" title=\"".$text."\"":"")." width='".$desc["picture_w"]."' height='".$desc["picture_h"]."' />";
+ }
+ $url = $this->GetConfigValue("root_url").$this->config["upload_path"].$thing;
+ $imlink = false;
+ $icon = $this->GetResourceValue("fileicon");
+ $tpl = "localfile";
+ }
+ else //404
+ {
+ $tpl = "wlocalfile";
+ $title = "404: /".$this->config["upload_path"].$thing;
+ $url = "404";
+ }
+
+ }
+ if (!$url)
+ {
+ $file = $arr[count($arr)-1];
+ unset($arr[count($arr)-1]);
+ $_pagetag = implode("/", $arr);
+ if ($_pagetag=="") $_pagetag = "!/";
+ //unwrap tag (check !/, ../ cases)
+ $pagetag = $this->UnwrapLink( $_pagetag );
+ //try to find in local $tag storage
+ $desc = $this->CheckFileExists($file, $pagetag);
+ if (is_array($desc))
+ {
+ //check 403 here!
+ if ($this->IsAdmin() || ($desc["id"] && ($this->GetPageOwner($this->tag) == $this->GetUserName())) ||
+ ($this->HasAccess("read", $pagetag)) || ($desc["user"] == $this->GetUserName()) )
+ {
+ $title = $desc["description"]." (".ceil($desc["filesize"]/1024)." ".$this->GetResourceValue("UploadKB").")";
+ if ($desc["picture_w"] && !$noimg)
+ {
+ if (!$text) $text = $title;
+ return "<img src=\"".$this->config["base_url"].trim($pagetag,"/")."/files".($this->config["rewrite_mode"] ? "?" : "&")."get=".$file."\" ".($text?"alt=\"".$text."\" title=\"".$text."\"":"")." width='".$desc["picture_w"]."' height='".$desc["picture_h"]."' />";
+ }
+ $url = $this->config["base_url"].trim($pagetag,"/")."/files".($this->config["rewrite_mode"] ? "?" : "&")."get=".$file;
+ $imlink = false;
+ $icon = $this->GetResourceValue("fileicon");
+ $tpl = "localfile";
+ }
+ else //403
+ {
+ $url = $this->config["base_url"].trim($pagetag,"/")."/files".($this->config["rewrite_mode"] ? "?" : "&")."get=".$file;
+ $imlink = false;
+ $icon = $this->GetResourceValue("lockicon");
+ $tpl = "localfile";
+ $class = "denied";
+ }
+ }
+ else //404
+ {
+ $tpl = "wlocalfile";
+ $title = "404: /".trim($pagetag,"/")."/files".($this->config["rewrite_mode"] ? "?" : "&")."get=".$file;
+ $url = "404";
+ }
+
+ }
+ //forgot 'bout 403
+ }
+ else if ($this->GetConfigValue("disable_tikilinks")!=1 && preg_match("/^(".$this->language["UPPER"].$this->language["LOWER"].$this->language["ALPHANUM"]."*)\.(".$this->language["ALPHA"].$this->language["ALPHANUM"]."+)$/s", $tag, $matches))
+ {// it`s a Tiki link!
+ if (!$text) $text = $this->AddSpaces($tag);
+ $tag = "/".$matches[1]."/".$matches[2];
+ return $this->Link( $tag, $method, $text, $track, 1);
+ }
+ else if (preg_match("/^([[:alnum:]]+)[:]([".$this->language["ALPHANUM_P"]."\-\_\.\+\&\=\#]*)$/", $tag, $matches))
+ {// interwiki
+ $parts = explode("/",$matches[2]);
+ for ($i=0;$i<count($parts);$i++) $parts[$i] = str_replace("%23", "#", urlencode($parts[$i]));
+ $url = $this->GetInterWikiUrl($matches[1], implode("/",$parts));
+ $icon = $this->GetResourceValue("iwicon");
+ $tpl = "interwiki";
+ if ($linklang)
+ $text = $this->DoUnicodeEntities($text, $linklang);
+ }
+ else if (preg_match("/^([\!\.".$this->language["ALPHANUM_P"]."]+)(\#[".$this->language["ALPHANUM_P"]."\_\-]+)?$/", $tag, $matches))
+ {// it's a Wiki link!
+ $tag = $otag = $matches[1];
+ $untag = $unwtag = $this->UnwrapLink( $tag );
+
+ $regex_handlers = '/^(.*?)\/('.$this->GetConfigValue("standart_handlers").')\/(.*)$/i';
+ $ptag = $this->NpjTranslit($unwtag);
+ $handler = null;
+ if (preg_match( $regex_handlers, "/".$ptag."/", $match ))
+ {
+ $handler = $match[2];
+ $ptag = $match[1];
+ $unwtag = "/".$unwtag."/";
+ $co = substr_count($_ptag, "/") - substr_count($ptag, "/");
+ for ($i=0; $i<$co; $i++) $unwtag = substr($unwtag,0,strrpos($unwtag,"/"));
+ if ($handler)
+ {
+ $opar = "/".$untag."/";
+ for ($i=0; $i<substr_count($data, "/")+2; $i++) $opar = substr($opar,strpos($opar,"/")+1);
+ $params = explode("/", $opar); //there're good params
+ }
+ }
+ $unwtag = trim($unwtag, "/.");
+ $unwtag = str_replace( "_", "", $unwtag );
+ if ($handler) $method = $handler;
+ //if ($tag=="!/edit") echo "{".$tag."|".$untag."|".$unwtag."|".$handler."}";
+
+ $thispage = $this->LoadPage($unwtag, "", LOAD_CACHE, LOAD_META);
+ if (!$thispage && $linklang)
+ {
+ $this->SetLanguage($linklang);
+ $lang = $linklang;
+ $thispage = $this->LoadPage($unwtag, "", LOAD_CACHE, LOAD_META);
+ }
+ if ($thispage)
+ {
+ $_lang = $this->language["code"];
+ if ($thispage["lang"]) $lang = $thispage["lang"];
+ else $lang = $this->GetConfigValue("language");
+
+ $this->SetLanguage($lang);
+ $supertag = $this->NpjTranslit($tag);
+// echo "<h1>".$_lang."|".$lang."|".$supertag."</h1>";
+ }
+ else
+ {
+ $supertag = $this->NpjTranslit($tag, TRAN_LOWERCASE, TRAN_DONTLOAD);
+ }
+
+
+ $aname="";
+ if (substr($tag,0,2)=="!/")
+ {
+ $icon = $this->GetResourceValue("childicon");
+ $page0 = substr($tag,2);
+ $page = $this->AddSpaces($page0);
+ $tpl = "childpage";
+ }
+ else if (substr($tag,0,3)=="../")
+ {
+ $icon = $this->GetResourceValue("parenticon");
+ $page0 = substr($tag,3);
+ $page = $this->AddSpaces($page0);
+ $tpl = "parentpage";
+ }
+ else if (substr($tag,0,1)=="/")
+ {
+ $icon = $this->GetResourceValue("rooticon");
+ $page0 = substr($tag,1);
+ $page = $this->AddSpaces($page0);
+ $tpl = "rootpage";
+ }
+ else
+ {
+ $icon = $this->GetResourceValue("equalicon");
+ $page0 = $tag;
+ $page = $this->AddSpaces($page0);
+ $tpl = "equalpage";
+ }
+ if ($imlink) $text="<img src=\"$imlink\" border=\"0\" title=\"$text\" />";
+ if ($text)
+ {
+ $tpl = "descrpage";
+ $icon = "";
+ }
+ $pagepath = substr($untag,0, strlen($untag) - strlen($page0));
+ $anchor = isset( $matches[2] ) ? $matches[2] : '';
+ $tag = $unwtag;
+ if ($_SESSION["linktracking"] && $track) $this->TrackLinkTo($tag);
+
+ if (!isset( $this->first_inclusion[ $supertag ] )) $aname = "name=\"".$supertag."\"";
+ $this->first_inclusion[ $supertag ] = 1;
+
+ if ($thispage)
+ {
+ $pagelink = $this->href($method, $thispage["tag"]).$this->AddDateTime($tag).($anchor?$anchor:"");
+ if ($this->config["hide_locked"]) $access = $this->HasAccess("read",$tag);
+ else
+ {
+ $access = true;
+ $this->_acl["list"]=="*";
+ }
+ if (!$access)
+ {
+ $class="denied";
+ $accicon = $this->GetResourceValue("lockicon");
+ }
+ else if ($this->_acl["list"]=="*")
+ {
+ $class = "";
+ $accicon = "";
+ }
+ else
+ {
+ $class="customsec";
+ $accicon = $this->GetResourceValue("keyicon");
+ }
+ // language
+// echo "<< ".$lang.":".$_lang.":".$otag."|$linklang >>";
+// if ($lang!=$this->pagelang)
+// {
+ if ($text==trim($otag,"/") || $linklang)
+ $text = $this->DoUnicodeEntities($text, $lang);
+// echo "< ".$text.":".$otag." >";
+ $page = $this->DoUnicodeEntities($page, $lang);
+// }
+ if (isset($_lang)) $this->SetLanguage($_lang);
+ }
+ else
+ {
+ $tpl = ($this->method=="print" || $this->method=="msword"?"p":"")."w".$tpl;
+ $pagelink = $this->href("edit", $tag, $lang?"lang=".$lang:"", 1);
+ $accicon = $this->GetResourceValue("wantedicon");
+ $title = $this->GetResourceValue("CreatePage");
+ if ($linklang)
+ {
+ $text = $this->DoUnicodeEntities($text, $linklang);
+ $page = $this->DoUnicodeEntities($page, $linklang);
+ }
+ }
+
+ $icon = str_replace("{theme}", $this->GetConfigValue("theme_url"), $icon);
+ $accicon = str_replace("{theme}", $this->GetConfigValue("theme_url"), $accicon);
+ $res = $this->GetResourceValue("tpl.".$tpl);
+ $text = trim($text);
+ if ($res)
+ {
+ //todo: pagepath
+ $aname = str_replace("/", ".", $aname);
+ $res = str_replace("{aname}", $aname, $res);
+ $res = str_replace("{icon}", $icon, $res);
+ $res = str_replace("{accicon}",$accicon,$res);
+ $res = str_replace("{class}", $class, $res);
+ $res = str_replace("{title}", $title, $res);
+ $res = str_replace("{pagelink}", $pagelink, $res);
+ $res = str_replace("{pagepath}", $pagepath, $res);
+ $res = str_replace("{page}", $page, $res);
+ $res = str_replace("{text}", $text, $res);
+// if ($linklang) {echo("{aname}". $aname);echo("{icon}". $icon);echo("{accicon}".$accicon);echo("{class}". $class);echo("{title}". $title);echo("{pagelink}". $pagelink);echo("{pagepath}". $pagepath);echo("{page}". $page);echo("{text}". $text);}
+
+ if (!$text) $text = htmlspecialchars($tag, ENT_NOQUOTES);
+ if ($this->GetConfigValue("youarehere_text"))
+ if ($this->NpjTranslit($tag) == $this->NpjTranslit($this->context[$this->current_context]))
+ $res = str_replace("####", $text, $this->GetConfigValue("youarehere_text"));
+ return $res;
+ }
+ die ("ERROR: no tpl '$tpl'!");
+ }
+ if (!$text) $text = htmlspecialchars($tag, ENT_NOQUOTES);
+ if ($url)
+ {
+ if ($imlink) $text="<img src=\"$imlink\" border=\"0\" title=\"$text\" />";
+ $icon = str_replace("{theme}", $this->GetConfigValue("theme_url"), $icon);
+ $res = $this->GetResourceValue("tpl.".$tpl);
+ if ($res)
+ {
+ if (!$class) $class="outerlink";
+ $res = str_replace("{icon}", $icon, $res);
+ $res = str_replace("{class}", $class, $res);
+ $res = str_replace("{title}", $title, $res);
+ $res = str_replace("{url}", $url, $res);
+ $res = str_replace("{text}", $text, $res);
+ return $res;
+ }
+ }
+ //echo ("<br>".$tag."<br>");
+ //die("^([[:alnum:]]+)[:]([".$this->language["ALPHANUM_P"]."\-\_\.\+\&\=]*)$");
+ return $text;
+ }
+
+ function AddDatetime($tag)
+ {
+ if ($user = $this->GetUser()) $show = $user["showdatetime"];
+ if (!$show) $show=$this->GetConfigValue("show_datetime");
+ if (!$show) $show = "Y";
+ if ($show!="N" && $show!="0")
+ {
+ $_page = $this->LoadPage($tag, "", LOAD_CACHE, LOAD_META);
+ return ($this->config["rewrite_mode"] ? "?" : "&").
+ "v=".base_convert($this->crc16(preg_replace("/[ :\-]/","",$_page["time"])),10,36);
+ } else return "";
+ }
+
+ function crc16($string) {
+ $crc = 0xFFFF;
+ for ($x = 0; $x < strlen ($string); $x++) {
+ $crc = $crc ^ ord($string[$x]);
+ for ($y = 0; $y < 8; $y++) {
+ if (($crc & 0x0001) == 0x0001) {
+ $crc = (($crc >> 1) ^ 0xA001);
+ } else { $crc = $crc >> 1; }
+ }
+ }
+ return $crc;
+ }
+
+ function AddSpaces($text)
+ {
+ $show = "Y";
+ if ($user = $this->GetUser()) $show = $user["show_spaces"];
+ if (!$show) $show=$this->GetConfigValue("show_spaces");
+ if ($show!="N") {
+ $text = preg_replace("/(".$this->language["ALPHANUM"].")(".$this->language["UPPERNUM"].")/","\\1 \\2",$text);
+ $text = preg_replace("/(".$this->language["UPPERNUM"].")(".$this->language["UPPERNUM"].")/","\\1 \\2",$text);
+ $text = preg_replace("/(".$this->language["ALPHANUM"].")\//","\\1 /",$text);
+ $text = preg_replace("/(".$this->language["UPPER"].") (?=".$this->language["UPPER"]." ".$this->language["UPPERNUM"].")/","\\1",$text);
+ $text = preg_replace("/(".$this->language["UPPER"].") (?=".$this->language["UPPER"]." \/)/","\\1",$text);
+ $text = preg_replace("/\/(".$this->language["ALPHANUM"].")/","/ \\1",$text);
+ $text = preg_replace("/(".$this->language["UPPERNUM"].") (".$this->language["UPPERNUM"].")($|\b)/","\\1\\2",$text);
+ $text = preg_replace("/([0-9])(".$this->language["ALPHA"].")/","\\1 \\2",$text);
+ $text = preg_replace("/(".$this->language["ALPHA"].")([0-9])/","\\1 \\2",$text);
+ $text = preg_replace("/([0-9]) (?=[0-9])/","\\1",$text);
+ }
+ if (strpos($text, "/")===0) $text = $this->GetResourceValue("RootLinkIcon").substr($text, 1);
+ if (strpos($text, "!/")===0) $text = $this->GetResourceValue("SubLinkIcon").substr($text, 2);
+ if (strpos($text, "../")===0) $text = $this->GetResourceValue("UpLinkIcon").substr($text, 3);
+ return $text;
+ }
+
+ function SlimUrl($text)
+ {
+ $text = $this->NpjTranslit($text, TRAN_DONTCHANGE);
+ $text = str_replace("_", "'", $text);
+ if ($this->config["urls_underscores"]==1)
+ {
+ $text = preg_replace("/(".$this->language["ALPHANUM"].")(".$this->language["UPPERNUM"].")/","\\1\xB6\\2",$text);
+ $text = preg_replace("/(".$this->language["UPPERNUM"].")(".$this->language["UPPERNUM"].")/","\\1\xB6\\2",$text);
+ $text = preg_replace("/(".$this->language["UPPER"].")\xB6(?=".$this->language["UPPER"]."\xB6".$this->language["UPPERNUM"].")/","\\1",$text);
+ $text = preg_replace("/(".$this->language["UPPER"].")\xB6(?=".$this->language["UPPER"]."\xB6\/)/","\\1",$text);
+ $text = preg_replace("/(".$this->language["UPPERNUM"].")\xB6(".$this->language["UPPERNUM"].")($|\b)/","\\1\\2",$text);
+ $text = preg_replace("/\/\xB6(".$this->language["UPPERNUM"].")/","/\\1",$text);
+ $text = str_replace("\xB6", "_", $text);
+ }
+ return $text;
+ }
+
+ function IsWikiName($text) { return preg_match("/^".$this->language["UPPER"].$this->language["LOWER"]."+".$this->language["UPPERNUM"].$this->language["ALPHANUM"]."*$/", $text); }
+ function TrackLinkTo($tag) { $this->linktable[] = $tag; }
+ function GetLinkTable() { return $this->linktable; }
+ function ClearLinkTable() { $this->linktable = array(); }
+ function StartLinkTracking() { $_SESSION["linktracking"] = 1; }
+ function StopLinkTracking() { $_SESSION["linktracking"] = 0; }
+
+ function WriteLinkTable()
+ {
+ // delete old link table
+ $this->Query("delete from ".$this->config["table_prefix"]."links where from_tag = '".quote($this->GetPageTag())."'");
+ if ($linktable = $this->GetLinkTable())
+ {
+ $from_tag = quote($this->GetPageTag());
+ foreach ($linktable as $to_tag)
+ {
+ $lower_to_tag = strtolower($to_tag);
+ if (!$written[$lower_to_tag])
+ {
+ $query.="('".$from_tag."', '".quote($to_tag)."', '".quote($this->NpjTranslit($to_tag))."'),";
+ $written[$lower_to_tag] = 1;
+ }
+ }
+ $this->Query("insert into ".$this->config["table_prefix"]."links (from_tag, to_tag, to_supertag) VALUES ".rtrim($query,","));
+ }
+ }
+
+ function Header($mod="") {
+// $this->StopLinkTracking();
+ $result = $this->IncludeBuffered("header".$mod.".php", "Theme is corrupt: ".$this->GetConfigValue("theme"), "", "themes/".$this->GetConfigValue("theme")."/appearance");
+// $this->StartLinkTracking();
+ return $result;
+ }
+
+ function Footer($mod="") {
+// $this->StopLinkTracking();
+ $result = $this->IncludeBuffered("footer".$mod.".php", "Theme is corrupt: ".$this->GetConfigValue("theme"), "", "themes/".$this->GetConfigValue("theme")."/appearance");
+// $this->StartLinkTracking();
+ return $result;
+ }
+
+ function UseClass($class_name, $class_dir="", $file_name="" )
+ {
+ if(!class_exists($class_name))
+ {
+ if ($file_name == "") $file_name=$class_name;
+ if ($class_dir == "") $class_dir=$this->classes_dir;
+ $class_file = $class_dir.$file_name.".php";
+ $class_file = trim($class_file, "./");
+
+ if (!@is_readable($class_file))
+ die("Cannot load class ".$class_name." from ". $class_file. " (".$class_dir.")");
+ else require_once($class_file);
+ }
+ }
+
+ // tabbed theme output routine
+ function EchoTab( $link, $h...
[truncated message content] |
|
From: <tec...@us...> - 2007-05-22 11:58:07
|
Revision: 397
http://farplugins.svn.sourceforge.net/farplugins/?rev=397&view=rev
Author: techtonik
Date: 2007-05-22 04:58:08 -0700 (Tue, 22 May 2007)
Log Message:
-----------
+ svn:ignore attributes
Property Changed:
----------------
trunk/farplugins/wiki/themes/
trunk/farplugins/wiki/themes/coffee/
trunk/farplugins/wiki/themes/coffee/appearance/
trunk/farplugins/wiki/themes/coffee/css/
trunk/farplugins/wiki/themes/coffee/icons/
Property changes on: trunk/farplugins/wiki/themes
___________________________________________________________________
Name: svn:ignore
+ *
Property changes on: trunk/farplugins/wiki/themes/coffee
___________________________________________________________________
Name: svn:ignore
+ *
Property changes on: trunk/farplugins/wiki/themes/coffee/appearance
___________________________________________________________________
Name: svn:ignore
+ *
Property changes on: trunk/farplugins/wiki/themes/coffee/css
___________________________________________________________________
Name: svn:ignore
+ *
Property changes on: trunk/farplugins/wiki/themes/coffee/icons
___________________________________________________________________
Name: svn:ignore
+ *
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tec...@us...> - 2007-05-22 11:46:40
|
Revision: 396
http://farplugins.svn.sourceforge.net/farplugins/?rev=396&view=rev
Author: techtonik
Date: 2007-05-22 04:46:40 -0700 (Tue, 22 May 2007)
Log Message:
-----------
- typo + svn:ignore
Modified Paths:
--------------
trunk/farplugins/wiki/session2db.php
Property Changed:
----------------
trunk/farplugins/wiki/
Property changes on: trunk/farplugins/wiki
___________________________________________________________________
Name: svn:ignore
+ *
Modified: trunk/farplugins/wiki/session2db.php
===================================================================
--- trunk/farplugins/wiki/session2db.php 2007-05-22 11:38:31 UTC (rev 395)
+++ trunk/farplugins/wiki/session2db.php 2007-05-22 11:46:40 UTC (rev 396)
@@ -1,126 +1,126 @@
-<?php
-
-/** by techtonik **/
-/** just create table for sessions using the query below and
- setup database params, then include this file into yours
- before any session_start() and you're done
-**/
-
-/*
-CREATE TABLE sessions_in_db (
- sessionid CHAR(32) NOT NULL,
- timeset DATETIME NOT NULL,
- lastupdate DATETIME NOT NULL,
- sessiondata LONGTEXT NOT NULL,
- remarks TINYTEXT NULL,
- PRIMARY KEY(sessionid)
-)
-
-}*/
-
-$session2db_server = 'mysql4-f.sourceforge.net';
-$session2db_user = '';
-$session2db_pass = '';
-$session2db_db = '';
-
-/** techtonik: read config from WackoWiki (if this file is included from wakka.php) **/
-if (isset($wakkaConfig)) { //
- $session2db_server = $wakkaConfig["mysql_host"];
- $session2db_user = $wakkaConfig["mysql_user"];
- $session2db_pass = $wakkaConfig["mysql_pass"];
- $session2db_db = $wakkaConfig["mysql_password"];
-}
-/** **/
-
-
-$session2db_link = NULL;
-
-session_set_save_handler('session2db_open', 'session2db_close', 'session2db_read',
- 'session2db_write', 'session2db_destroy', 'session2db_gc');
-
-
-function session2db_open($storagepath, $filename) {
- global $session2db_link, $session2db_server, $session2db_user, $session2db_pass, $session2db_db;
-
- // make db_connection
- $session2db_link = mysql_connect($session2db_server, $session2db_user, $session2db_pass) or die('Could not connect to database.');
- mysql_select_db($session2db_db) or die('Could not select database.');
-
- return TRUE;
-}
-
-
-function session2db_close() {
- // garbage collection could be executed in this function
- return TRUE;
-}
-
-
-function session2db_read($sessionid) {
- // should always return string here
- $query = "SELECT sessiondata FROM sessions_in_db
- WHERE sessionid = '".mysql_escape_string($sessionid)."'";
- // and lastupdate > NOW - lifetime
- return session2db_get_rows($query, 0, 0, "");
-}
-
-
-function session2db_write($sessionid, $data) {
- // should always return string here
- $query = "REPLACE sessions_in_db (sessionid, lastupdate, sessiondata)
- VALUES ('".mysql_escape_string($sessionid)."',
- NOW(),
- '".mysql_escape_string($data)."')";
- return session2db_get_rows($query, 0, 0, "");
-}
-
-
-function session2db_destroy($sessionid) {
- $query = "DELETE FROM sessions_in_db WHERE sessionid = '".mysql_escape_string($sessionid)."'";
- return session2db_get_rows($query, 0, 0, "");
-}
-
-
-function session2db_gc($lifetime) {
- $query = "DELETE FROM sessions_in_db WHERE lastupdate < NOW() - SEC_TO_TIME(".mysql_escape_string($lifetime).")";
- return session2db_get_rows($query, 0, 0, "");
-}
-
-
-
-//--------------------------------------------------------------------------------------------
-
-/** Outputs detailed mysql error information
- */
-function session2db_myerr(){
- return "MySQL Error. " . mysql_errno() . ": " . mysql_error();
- }
-
-/**
- * Returns result of a query or DIES
- * @param $index integer index in $rows array
- * @param $offset mixed index in a fetched row
- * @param $retnull mixed return this value if no result available
- */
-function session2db_get_rows($query, $index = NULL, $offset = NULL, $retnull = NULL) {
- global $session2db_link;
-// var_dump($query);
- $result = mysql_query($query, $session2db_link) or die(session2db_myerr());
-
- if (!is_bool($result) && $row = mysql_fetch_assoc($result)) {
- $resarray[] = $row;
- while ($row = mysql_fetch_assoc($result)) $resarray[] = $row;
- if (is_null($index)):
- return $resarray;
- elseif (is_null($offset)):
- return $resarray[$index];
- else:
- list($key, $value) = each(array_slice($resarray[$index], $offset, 1));
- return $value;
- endif;
- } else {
- return $retnull;
- }
-}
-
+<?php
+
+/** by techtonik **/
+/** just create table for sessions using the query below and
+ setup database params, then include this file into yours
+ before any session_start() and you're done
+**/
+
+/*
+CREATE TABLE sessions_in_db (
+ sessionid CHAR(32) NOT NULL,
+ timeset DATETIME NOT NULL,
+ lastupdate DATETIME NOT NULL,
+ sessiondata LONGTEXT NOT NULL,
+ remarks TINYTEXT NULL,
+ PRIMARY KEY(sessionid)
+)
+
+}*/
+
+$session2db_server = 'mysql4-f.sourceforge.net';
+$session2db_user = '';
+$session2db_pass = '';
+$session2db_db = '';
+
+/** techtonik: read config from WackoWiki (if this file is included from wakka.php) **/
+if (isset($wakkaConfig)) { //
+ $session2db_server = $wakkaConfig["mysql_host"];
+ $session2db_user = $wakkaConfig["mysql_user"];
+ $session2db_pass = $wakkaConfig["mysql_password"];
+ $session2db_db = $wakkaConfig["mysql_database"];
+}
+/** **/
+
+
+$session2db_link = NULL;
+
+session_set_save_handler('session2db_open', 'session2db_close', 'session2db_read',
+ 'session2db_write', 'session2db_destroy', 'session2db_gc');
+
+
+function session2db_open($storagepath, $filename) {
+ global $session2db_link, $session2db_server, $session2db_user, $session2db_pass, $session2db_db;
+
+ // make db_connection
+ $session2db_link = mysql_connect($session2db_server, $session2db_user, $session2db_pass) or die('Could not connect to database.');
+ mysql_select_db($session2db_db) or die('Could not select database.');
+
+ return TRUE;
+}
+
+
+function session2db_close() {
+ // garbage collection could be executed in this function
+ return TRUE;
+}
+
+
+function session2db_read($sessionid) {
+ // should always return string here
+ $query = "SELECT sessiondata FROM sessions_in_db
+ WHERE sessionid = '".mysql_escape_string($sessionid)."'";
+ // and lastupdate > NOW - lifetime
+ return session2db_get_rows($query, 0, 0, "");
+}
+
+
+function session2db_write($sessionid, $data) {
+ // should always return string here
+ $query = "REPLACE sessions_in_db (sessionid, lastupdate, sessiondata)
+ VALUES ('".mysql_escape_string($sessionid)."',
+ NOW(),
+ '".mysql_escape_string($data)."')";
+ return session2db_get_rows($query, 0, 0, "");
+}
+
+
+function session2db_destroy($sessionid) {
+ $query = "DELETE FROM sessions_in_db WHERE sessionid = '".mysql_escape_string($sessionid)."'";
+ return session2db_get_rows($query, 0, 0, "");
+}
+
+
+function session2db_gc($lifetime) {
+ $query = "DELETE FROM sessions_in_db WHERE lastupdate < NOW() - SEC_TO_TIME(".mysql_escape_string($lifetime).")";
+ return session2db_get_rows($query, 0, 0, "");
+}
+
+
+
+//--------------------------------------------------------------------------------------------
+
+/** Outputs detailed mysql error information
+ */
+function session2db_myerr(){
+ return "MySQL Error. " . mysql_errno() . ": " . mysql_error();
+ }
+
+/**
+ * Returns result of a query or DIES
+ * @param $index integer index in $rows array
+ * @param $offset mixed index in a fetched row
+ * @param $retnull mixed return this value if no result available
+ */
+function session2db_get_rows($query, $index = NULL, $offset = NULL, $retnull = NULL) {
+ global $session2db_link;
+// var_dump($query);
+ $result = mysql_query($query, $session2db_link) or die(session2db_myerr());
+
+ if (!is_bool($result) && $row = mysql_fetch_assoc($result)) {
+ $resarray[] = $row;
+ while ($row = mysql_fetch_assoc($result)) $resarray[] = $row;
+ if (is_null($index)):
+ return $resarray;
+ elseif (is_null($offset)):
+ return $resarray[$index];
+ else:
+ list($key, $value) = each(array_slice($resarray[$index], $offset, 1));
+ return $value;
+ endif;
+ } else {
+ return $retnull;
+ }
+}
+
?>
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tec...@us...> - 2007-05-22 11:38:29
|
Revision: 395
http://farplugins.svn.sourceforge.net/farplugins/?rev=395&view=rev
Author: techtonik
Date: 2007-05-22 04:38:31 -0700 (Tue, 22 May 2007)
Log Message:
-----------
- typo
Modified Paths:
--------------
trunk/farplugins/wiki/session2db.php
Modified: trunk/farplugins/wiki/session2db.php
===================================================================
--- trunk/farplugins/wiki/session2db.php 2007-05-22 11:35:45 UTC (rev 394)
+++ trunk/farplugins/wiki/session2db.php 2007-05-22 11:38:31 UTC (rev 395)
@@ -24,7 +24,7 @@
$session2db_db = '';
/** techtonik: read config from WackoWiki (if this file is included from wakka.php) **/
-if (!isset($wakkaConfig)) { //
+if (isset($wakkaConfig)) { //
$session2db_server = $wakkaConfig["mysql_host"];
$session2db_user = $wakkaConfig["mysql_user"];
$session2db_pass = $wakkaConfig["mysql_pass"];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tec...@us...> - 2007-05-22 11:35:44
|
Revision: 394
http://farplugins.svn.sourceforge.net/farplugins/?rev=394&view=rev
Author: techtonik
Date: 2007-05-22 04:35:45 -0700 (Tue, 22 May 2007)
Log Message:
-----------
+ store sessions in database as SF denies write access to htdocs
Modified Paths:
--------------
trunk/farplugins/wiki/.htaccess
Added Paths:
-----------
trunk/farplugins/wiki/session2db.php
Modified: trunk/farplugins/wiki/.htaccess
===================================================================
--- trunk/farplugins/wiki/.htaccess 2007-05-22 11:27:29 UTC (rev 393)
+++ trunk/farplugins/wiki/.htaccess 2007-05-22 11:35:45 UTC (rev 394)
@@ -4,5 +4,6 @@
RewriteRule ^(.*/[^\./]*[^/])$ $1/
RewriteRule ^(robots\.txt)$ robots.txt [L]
RewriteRule ^(favicon\.ico)$ favicon.ico [L]
+ RewriteBase /wiki
RewriteRule ^(.*)$ wakka.php?wakka=$1 [QSA,L]
</IfModule>
Added: trunk/farplugins/wiki/session2db.php
===================================================================
--- trunk/farplugins/wiki/session2db.php (rev 0)
+++ trunk/farplugins/wiki/session2db.php 2007-05-22 11:35:45 UTC (rev 394)
@@ -0,0 +1,126 @@
+<?php
+
+/** by techtonik **/
+/** just create table for sessions using the query below and
+ setup database params, then include this file into yours
+ before any session_start() and you're done
+**/
+
+/*
+CREATE TABLE sessions_in_db (
+ sessionid CHAR(32) NOT NULL,
+ timeset DATETIME NOT NULL,
+ lastupdate DATETIME NOT NULL,
+ sessiondata LONGTEXT NOT NULL,
+ remarks TINYTEXT NULL,
+ PRIMARY KEY(sessionid)
+)
+
+}*/
+
+$session2db_server = 'mysql4-f.sourceforge.net';
+$session2db_user = '';
+$session2db_pass = '';
+$session2db_db = '';
+
+/** techtonik: read config from WackoWiki (if this file is included from wakka.php) **/
+if (!isset($wakkaConfig)) { //
+ $session2db_server = $wakkaConfig["mysql_host"];
+ $session2db_user = $wakkaConfig["mysql_user"];
+ $session2db_pass = $wakkaConfig["mysql_pass"];
+ $session2db_db = $wakkaConfig["mysql_password"];
+}
+/** **/
+
+
+$session2db_link = NULL;
+
+session_set_save_handler('session2db_open', 'session2db_close', 'session2db_read',
+ 'session2db_write', 'session2db_destroy', 'session2db_gc');
+
+
+function session2db_open($storagepath, $filename) {
+ global $session2db_link, $session2db_server, $session2db_user, $session2db_pass, $session2db_db;
+
+ // make db_connection
+ $session2db_link = mysql_connect($session2db_server, $session2db_user, $session2db_pass) or die('Could not connect to database.');
+ mysql_select_db($session2db_db) or die('Could not select database.');
+
+ return TRUE;
+}
+
+
+function session2db_close() {
+ // garbage collection could be executed in this function
+ return TRUE;
+}
+
+
+function session2db_read($sessionid) {
+ // should always return string here
+ $query = "SELECT sessiondata FROM sessions_in_db
+ WHERE sessionid = '".mysql_escape_string($sessionid)."'";
+ // and lastupdate > NOW - lifetime
+ return session2db_get_rows($query, 0, 0, "");
+}
+
+
+function session2db_write($sessionid, $data) {
+ // should always return string here
+ $query = "REPLACE sessions_in_db (sessionid, lastupdate, sessiondata)
+ VALUES ('".mysql_escape_string($sessionid)."',
+ NOW(),
+ '".mysql_escape_string($data)."')";
+ return session2db_get_rows($query, 0, 0, "");
+}
+
+
+function session2db_destroy($sessionid) {
+ $query = "DELETE FROM sessions_in_db WHERE sessionid = '".mysql_escape_string($sessionid)."'";
+ return session2db_get_rows($query, 0, 0, "");
+}
+
+
+function session2db_gc($lifetime) {
+ $query = "DELETE FROM sessions_in_db WHERE lastupdate < NOW() - SEC_TO_TIME(".mysql_escape_string($lifetime).")";
+ return session2db_get_rows($query, 0, 0, "");
+}
+
+
+
+//--------------------------------------------------------------------------------------------
+
+/** Outputs detailed mysql error information
+ */
+function session2db_myerr(){
+ return "MySQL Error. " . mysql_errno() . ": " . mysql_error();
+ }
+
+/**
+ * Returns result of a query or DIES
+ * @param $index integer index in $rows array
+ * @param $offset mixed index in a fetched row
+ * @param $retnull mixed return this value if no result available
+ */
+function session2db_get_rows($query, $index = NULL, $offset = NULL, $retnull = NULL) {
+ global $session2db_link;
+// var_dump($query);
+ $result = mysql_query($query, $session2db_link) or die(session2db_myerr());
+
+ if (!is_bool($result) && $row = mysql_fetch_assoc($result)) {
+ $resarray[] = $row;
+ while ($row = mysql_fetch_assoc($result)) $resarray[] = $row;
+ if (is_null($index)):
+ return $resarray;
+ elseif (is_null($offset)):
+ return $resarray[$index];
+ else:
+ list($key, $value) = each(array_slice($resarray[$index], $offset, 1));
+ return $value;
+ endif;
+ } else {
+ return $retnull;
+ }
+}
+
+?>
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tec...@us...> - 2007-05-22 11:27:27
|
Revision: 393
http://farplugins.svn.sourceforge.net/farplugins/?rev=393&view=rev
Author: techtonik
Date: 2007-05-22 04:27:29 -0700 (Tue, 22 May 2007)
Log Message:
-----------
+ SourceForge elements
Modified Paths:
--------------
trunk/farplugins/wiki/themes/coffee/appearance/footer.php
trunk/farplugins/wiki/themes/coffee/appearance/header.php
trunk/farplugins/wiki/themes/coffee/css/wakka.css
Added Paths:
-----------
trunk/farplugins/wiki/themes/coffee/icons/favicon.ico
Modified: trunk/farplugins/wiki/themes/coffee/appearance/footer.php
===================================================================
--- trunk/farplugins/wiki/themes/coffee/appearance/footer.php 2007-05-22 11:25:47 UTC (rev 392)
+++ trunk/farplugins/wiki/themes/coffee/appearance/footer.php 2007-05-22 11:27:29 UTC (rev 393)
@@ -45,6 +45,10 @@
<div class="searchbar">
<span class="nobr"><?php echo $this->GetResourceValue("SearchText") ?><input type="text" name="phrase" size="15" style="border: none; border-bottom: 1px solid #CCCCAA; padding: 0px; margin: 0px;" /></span>
</div>
+
+ <div class="sflogo">
+ <a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=52167&type=1" width="88" height="31" border="0" alt="SourceForge.net Logo" /></a>
+ </div>
</div>
<?php echo $this->FormClose(); ?>
Modified: trunk/farplugins/wiki/themes/coffee/appearance/header.php
===================================================================
--- trunk/farplugins/wiki/themes/coffee/appearance/header.php 2007-05-22 11:25:47 UTC (rev 392)
+++ trunk/farplugins/wiki/themes/coffee/appearance/header.php 2007-05-22 11:27:29 UTC (rev 393)
@@ -12,7 +12,7 @@
<meta name="description" content="<?php echo $this->GetDescription(); ?>" />
<meta http-equiv="content-type" content="text/html; charset=<?php echo $this->GetCharset(); ?>" />
<link rel="stylesheet" type="text/css" href="<?php echo $this->GetConfigValue("theme_url") ?>css/wakka.css" />
- <link rel="shortcut icon" href="<?php echo $this->GetConfigValue("theme_url") ?>icons/wacko.ico" type="image/x-icon" />
+ <link rel="shortcut icon" href="<?php echo $this->GetConfigValue("theme_url") ?>icons/favicon.ico" type="image/x-icon" />
<link rel="alternate" type="application/rss+xml" title="RecentChanges in RSS" href="<?php echo $this->GetConfigValue("root_url");?>xml/recentchanges_<?php echo preg_replace("/[^a-zA-Z0-9]/", "", strtolower($this->GetConfigValue("wakka_name")));?>.xml" />
<link rel="alternate" type="application/rss+xml" title="History/revisions of <?php echo $this->tag; ?> in RSS" href="<?php echo $this->href("revisions.xml");?>" />
<script language="JavaScript" type="text/javascript" src="<?php echo $this->GetConfigValue("root_url");?>js/default.js"></script>
Modified: trunk/farplugins/wiki/themes/coffee/css/wakka.css
===================================================================
--- trunk/farplugins/wiki/themes/coffee/css/wakka.css 2007-05-22 11:25:47 UTC (rev 392)
+++ trunk/farplugins/wiki/themes/coffee/css/wakka.css 2007-05-22 11:27:29 UTC (rev 393)
@@ -28,7 +28,8 @@
/* \xCF\xEE\xE4\xE2\xE0\xEB \xF1\xF2\xF0\xE0\xED\xE8\xF6\xFB */
div.filesheader, div.commentsheader, div.footer {padding: 5px 10px; background-color: #FFEFD5; border-top: 1px solid #ccc; font-size: 90%}
-div.searchbar { float: right; padding: 10px; border: 1px solid #ccc; background-color: #FFE4B5;}
+div.searchbar {float: right; padding: 10px; border: 1px solid #ccc; background-color: #FFE4B5;}
+div.sflogo {float: left; padding: 10px 0px 0px 10px; border: none;}
div.copyright {clear: right; padding: 10px; color: #AAAAAA; font-size: 11px; text-align: right}
.commentform form { width: 100% }
.commentform form textarea { width: 100%; padding: 0}
Added: trunk/farplugins/wiki/themes/coffee/icons/favicon.ico
===================================================================
(Binary files differ)
Property changes on: trunk/farplugins/wiki/themes/coffee/icons/favicon.ico
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tec...@us...> - 2007-05-22 11:25:45
|
Revision: 392
http://farplugins.svn.sourceforge.net/farplugins/?rev=392&view=rev
Author: techtonik
Date: 2007-05-22 04:25:47 -0700 (Tue, 22 May 2007)
Log Message:
-----------
+ document wiki hacks (initial version)
Added Paths:
-----------
trunk/farplugins/wiki/themes/coffee/
trunk/farplugins/wiki/themes/coffee/appearance/
trunk/farplugins/wiki/themes/coffee/appearance/footer.php
trunk/farplugins/wiki/themes/coffee/appearance/header.php
trunk/farplugins/wiki/themes/coffee/css/
trunk/farplugins/wiki/themes/coffee/css/wakka.css
trunk/farplugins/wiki/themes/coffee/icons/
trunk/farplugins/wiki/themes/coffee/icons/wacko.ico
Added: trunk/farplugins/wiki/themes/coffee/appearance/footer.php
===================================================================
--- trunk/farplugins/wiki/themes/coffee/appearance/footer.php (rev 0)
+++ trunk/farplugins/wiki/themes/coffee/appearance/footer.php 2007-05-22 11:25:47 UTC (rev 392)
@@ -0,0 +1,73 @@
+<?php echo $this->FormOpen("", $this->GetResourceValue("TextSearchPage"), "get"); ?>
+<div class="footer">
+<?php
+echo $this->HasAccess("write") ? "<a href=\"".$this->href("edit")."\" accesskey=\"E\" title=\"".$this->GetResourceValue("EditTip")."\">".$this->GetResourceValue("EditText")."</a> |\n" : "";
+echo $this->GetPageTime() ? "<a href=\"".$this->href("revisions")."\" title=\"".$this->GetResourceValue("RevisionTip")."\">".$this->GetPageTime()."</a> |\n" : "";
+
+// if this page exists
+ if ($this->page)
+ {
+// if owner is current user
+ if ($this->UserIsOwner())
+ {
+ print($this->GetResourceValue("YouAreOwner"));
+ print(" <a href=\"".$this->href("rename")."\"><img src=\"".$this->GetConfigValue("theme_url")."icons/rename.gif\" title=\"".$this->GetResourceValue("RenameText")."\" alt=\"".$this->GetResourceValue("RenameText")."\" align=\"absmiddle\" border=\"0\" /></a>");
+// if (!$this->GetConfigValue("remove_onlyadmins") || $this->IsAdmin()) print(" <a href=\"".$this->href("remove")."\"><img src=\"".$this->GetConfigValue("theme_url")."icons/1del.gif\" title=\"".$this->GetResourceValue("DeleteTip")."\" alt=\"".$this->GetResourceValue("DeleteText")."\" align=\"absmiddle\" border=\"0\" /></a>");
+ print(" | <a href=\"".$this->href("acls")."\"".(($this->method=='edit')?" onclick=\"return window.confirm('".$this->GetResourceValue("EditACLConfirm")."');\"":"").">".$this->GetResourceValue("EditACLText")."</a>");
+ } else {
+ if ($owner = $this->GetPageOwner())
+ {
+ print($this->GetResourceValue("Owner").$this->Link($owner));
+ } else if (!$this->page["comment_on"]) {
+ print($this->GetResourceValue("Nobody").($this->GetUser() ? " (<a href=\"".$this->href("claim")."\">".$this->GetResourceValue("TakeOwnership")."</a>)" : ""));
+ }
+ }
+
+ if ($this->CheckACL($this->GetUserName(),$this->config["rename_globalacl"]) && !$this->UserIsOwner())
+ {
+ print(" <a href=\"".$this->href("rename")."\"><img src=\"".$this->GetConfigValue("theme_url")."icons/rename.gif\" title=\"".$this->GetResourceValue("RenameText")."\" alt=\"".$this->GetResourceValue("RenameText")."\" align=\"absmiddle\" border=\"0\" /></a>");
+ }
+
+ if ($this->IsAdmin())
+ {
+ print(" <a href=\"".$this->href("remove")."\"><img src=\"".$this->GetConfigValue("theme_url")."icons/1del.gif\" title=\"".$this->GetResourceValue("DeleteTip")."\" alt=\"".$this->GetResourceValue("DeleteText")."\" align=\"absmiddle\" border=\"0\" /></a>");
+ }
+
+ print(" | <a href=\"".$this->href("settings"). "\"".(($this->method=='edit')?" onclick=\"return window.confirm('".$this->GetResourceValue("EditACLConfirm")."');\"":"").">".$this->GetResourceValue("SettingsText")."</a> | ");
+
+// print("<a href=\"".$this->href("referrers")."\"><img src=\"".$this->GetConfigValue("theme_url")."icons/referer.gif\" title=\"".$this->GetResourceValue("ReferrersTip")."\" alt=\"".$this->GetResourceValue("ReferrersText")."\" border=\"0\" align=\"absmiddle\" /></a> |");
+
+ }
+?>
+
+<?php echo ($this->IsWatched($this->GetUserName(), $this->GetPageTag()) ? "<a href=\"".$this->href("watch")."\"><img src=\"".$this->GetConfigValue("theme_url")."icons/1unvisibl.gif\" title=\"".$this->GetResourceValue("RemoveWatch")."\" alt=\"".$this->GetResourceValue("RemoveWatch")."\" align=\"absmiddle\" border=\"0\" /></a>" : "<a href=\"".$this->href("watch")."\"><img src=\"".$this->GetConfigValue("theme_url")."icons/visibl.gif\" title=\"".$this->GetResourceValue("SetWatch")."\" alt=\"".$this->GetResourceValue("SetWatch")."\" align=\"absmiddle\" border=\"0\" /></a>" ) ?> |
+ <?php echo"<a href=\"".$this->href("print")."\" target=\"_new\"><img src=\"".$this->GetConfigValue("theme_url")."icons/1print.gif\" title=\"".$this->GetResourceValue("PrintVersion")."\" alt=\"".$this->GetResourceValue("PrintVersion")."\" align=\"absmiddle\" border=\"0\" /></a>";?> |
+ <div class="searchbar">
+ <span class="nobr"><?php echo $this->GetResourceValue("SearchText") ?><input type="text" name="phrase" size="15" style="border: none; border-bottom: 1px solid #CCCCAA; padding: 0px; margin: 0px;" /></span>
+ </div>
+</div>
+
+<?php echo $this->FormClose(); ?>
+
+
+<div class="copyright">
+ Powered by <?php echo $this->Link("WackoWiki:WackoWiki", "", "WackoWiki ".$this->GetWackoVersion()) ?>
+</div>
+
+
+<?php
+ if ($this->GetConfigValue("debug")>=2)
+ {
+ print("<span style=\"font-size: 11px; color: #888888\">");
+ print("<strong>Query log:</strong><br />\n");
+ foreach ($this->queryLog as $query)
+ {
+ print($query["query"]." (".$query["time"].")<br />\n");
+ $zz++;
+ }
+ print("<b>total: $zz</b>");
+ print("</span>");
+ }
+
+//don't place final </body></html> here. Wacko closes HTML automatically.
+?>
Added: trunk/farplugins/wiki/themes/coffee/appearance/header.php
===================================================================
--- trunk/farplugins/wiki/themes/coffee/appearance/header.php (rev 0)
+++ trunk/farplugins/wiki/themes/coffee/appearance/header.php 2007-05-22 11:25:47 UTC (rev 392)
@@ -0,0 +1,78 @@
+<?php
+ $message = $this->GetMessage();
+ header("Content-Type: text/html; charset=".$this->GetCharset());
+?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title><?php echo $this->GetWakkaName()." : ".$this->AddSpaces($this->GetPageTag()).($this->method!="show"?" (".$this->method.")":""); ?></title>
+<?php if ($this->GetMethod() != 'show' || $this->page["latest"] == "N")
+ echo "<meta name=\"robots\" content=\"noindex, nofollow\" />\n";?>
+ <meta name="keywords" content="<?php echo $this->GetKeywords(); ?>" />
+ <meta name="description" content="<?php echo $this->GetDescription(); ?>" />
+ <meta http-equiv="content-type" content="text/html; charset=<?php echo $this->GetCharset(); ?>" />
+ <link rel="stylesheet" type="text/css" href="<?php echo $this->GetConfigValue("theme_url") ?>css/wakka.css" />
+ <link rel="shortcut icon" href="<?php echo $this->GetConfigValue("theme_url") ?>icons/wacko.ico" type="image/x-icon" />
+ <link rel="alternate" type="application/rss+xml" title="RecentChanges in RSS" href="<?php echo $this->GetConfigValue("root_url");?>xml/recentchanges_<?php echo preg_replace("/[^a-zA-Z0-9]/", "", strtolower($this->GetConfigValue("wakka_name")));?>.xml" />
+ <link rel="alternate" type="application/rss+xml" title="History/revisions of <?php echo $this->tag; ?> in RSS" href="<?php echo $this->href("revisions.xml");?>" />
+ <script language="JavaScript" type="text/javascript" src="<?php echo $this->GetConfigValue("root_url");?>js/default.js"></script>
+ <script language="JavaScript" type="text/javascript" src="<?php echo $this->GetConfigValue("root_url");?>js/protoedit.js"></script>
+ <script language="JavaScript" type="text/javascript" src="<?php echo $this->GetConfigValue("root_url");?>js/wikiedit2.js"></script>
+<?php
+ if ($user = $this->GetUser())
+ if ($user["doubleclickedit"] == "Y") {
+?>
+ <script language="JavaScript" type="text/javascript">
+ var edit = "<?php echo $this->href("edit");?>";
+ </script>
+<?php }?>
+</head>
+
+<body onload="all_init();<?php if ($message) echo "alert('".$message."');";?>">
+
+<?php echo $this->FormOpen("", $this->GetResourceValue("LoginPage"), "post"); ?>
+<input type="hidden" name="action" value="login" />
+
+<div class="header">
+ <div class="user">
+
+ <?php if ($this->GetUser()) { ?>
+ <span class="nobr"><?php echo $this->GetResourceValue("YouAre"); ?> <img src="<?php echo $this->GetConfigValue("theme_url") ?>icons/user.gif" width="12" height="12" border="0" style="vertical-align: baseline; " alt=""/><?php echo $this->Link($this->GetUserName()) ?></span><br />
+ <span class="small">( <span class="nobr Tune"><?php echo $this->ComposeLinkToPage($this->GetResourceValue("YouArePanelLink"), "", $this->GetResourceValue("YouArePanelName"), 0); ?> | <a onclick="return confirm('<?php echo $this->GetResourceValue("LogoutAreYouSure");?>');" href="<?php echo $this->Href("",$this->GetResourceValue("LoginPage")).($this->config["rewrite_mode"] ? "?" : "&");?>action=logout&goback=<?php echo $this->SlimUrl($this->tag);?>"><?php echo $this->GetResourceValue("LogoutLink"); ?></a></span> )</span>
+
+ <?php } else { ?>
+
+ <span class="nobr"><input type="hidden" name="goback" value="<?php echo $this->SlimUrl($this->tag);?>" /><strong><?php echo $this->GetResourceValue("LoginWelcome") ?>: </strong><input type="text" name="name" size="18" class="login" /> <?php echo $this->GetResourceValue("LoginPassword") ?>: <input type="password" name="password" class="login" size="8" /> <input type="submit" value="Ok" /></span>
+
+ <?php } ?>
+
+ </div>
+ <div class="title">
+ <?php echo $this->config["wakka_name"] ?>: <?php echo $this->GetPagePath(); ?>
+ <a class="Search" title="<?php echo $this->GetConfigValue("search_title_help")?>" href="<?php echo $this->config["base_url"].$this->GetResourceValue("TextSearchPage").($this->config["rewrite_mode"] ? "?" : "&");?>phrase=<?php echo urlencode($this->GetPageTag()); ?>">...</a>
+ </div>
+
+</div>
+
+<div class="bookmarks">
+<?php
+
+ echo $this->ComposeLinkToPage($this->config["root_page"]);
+ echo " | ";
+ //echo $this->GetBookmarksFormatted();
+ echo $this->Format($this->GetBookmarksFormatted(), "post_wacko");
+ //echo $this->Format(implode(" | ", $this->GetBookmarks()));
+?> | <?php
+
+ if ($this->GetUser()) {
+ if (!in_array($this->GetPageSuperTag(),$this->GetBookmarkLinks())) {?>
+ <a href="<?php echo $this->Href('', '', "addbookmark=yes")?>"><img src="<?php echo $this->GetConfigValue("theme_url") ?>icons/toolbar1.gif" alt="+" title="<?php echo $this->GetResourceValue("AddToBookmarks") ?>" border="0" align="absmiddle" /></a><?php
+ } else {
+ ?><a href="<?php echo $this->Href('', '', "removebookmark=yes")?>"><img src="<?php echo $this->GetConfigValue("theme_url") ?>icons/toolbar2.gif" alt="-" title="<?php echo $this->GetResourceValue("RemoveFromBookmarks") ?>" border="0" align="absmiddle" /></a><?php
+ }
+ } ?>
+
+
+</div>
+
+<?php echo $this->FormClose(); ?>
Added: trunk/farplugins/wiki/themes/coffee/css/wakka.css
===================================================================
--- trunk/farplugins/wiki/themes/coffee/css/wakka.css (rev 0)
+++ trunk/farplugins/wiki/themes/coffee/css/wakka.css 2007-05-22 11:25:47 UTC (rev 392)
@@ -0,0 +1,221 @@
+/* Kukutz */
+
+label {cursor:pointer; cursor:hand;}
+
+dfn { font-variant: small-caps; letter-spacing: 0.1em; font-style: normal; cursor: help; border-bottom: 1px dotted #000; }
+* html dfn { \background: url(javascript:DOTS) repeat-x bottom left; }
+
+/* \xD1\xF1\xFB\xEB\xEA\xE8 */
+
+a:link { color: #0000CD}
+a:visited { color: #0068CC }
+span.missingpage {background-color: #FFFACD;}
+
+/* \xCE\xF1\xED\xEE\xE2\xFB \xE2\xF1\xE5\xF5 \xEE\xF1\xED\xEE\xE2 */
+
+body {color: black; background: white; font: 10pt Trebuchet MS }
+body, h1, h2, h3, h4, h5, h6 {padding: 0; margin: 0}
+p, td, li, select, textarea, legend { font: 10pt Trebuchet MS }
+td {vertical-align: top }
+
+/* \xC7\xE0\xE3\xEE\xEB\xEE\xE2\xEE\xEA \xF1\xF2\xF0\xE0\xED\xE8\xF6\xFB */
+div.header {background-color: #FFEFD5; padding: 10px; font-size: 90%}
+div.header div.title {font-size: 140%; padding-top: 10px}
+div.header div.user {float: right; text-align: right}
+div.bookmarks {padding: 5px 10px; font-size: 90%; border-bottom: 1px solid #ccc; background-color: #FFE4B5}
+span.small {font-size: 80%}
+
+/* \xCF\xEE\xE4\xE2\xE0\xEB \xF1\xF2\xF0\xE0\xED\xE8\xF6\xFB */
+
+div.filesheader, div.commentsheader, div.footer {padding: 5px 10px; background-color: #FFEFD5; border-top: 1px solid #ccc; font-size: 90%}
+div.searchbar { float: right; padding: 10px; border: 1px solid #ccc; background-color: #FFE4B5;}
+div.copyright {clear: right; padding: 10px; color: #AAAAAA; font-size: 11px; text-align: right}
+.commentform form { width: 100% }
+.commentform form textarea { width: 100%; padding: 0}
+.commentinfo, .copyright a { color: #AAAAAA }
+
+/* \xC7\xE0\xE3\xEE\xEB\xEE\xE2\xEA\xE8 \xE2 \xF2\xE5\xEA\xF1\xF2\xE5 */
+
+h1 { padding-top: 2px; padding-bottom: 7px; font: 18pt Trebuchet MS }
+h2 { padding-top: 20px; padding-bottom: 5px; font: italic normal 16pt Trebuchet MS }
+h3 { padding-top: 15px; padding-bottom: 5px; font: 14pt Trebuchet MS }
+h4 { padding-top: 15px; padding-bottom: 5px; font: italic bold 10pt Trebuchet MS }
+
+/* \xD4\xEE\xF0\xEC\xFB */
+form { margin: 0px; padding: 0px }
+fieldset { padding: 10px; border: 1px solid black }
+legend {font-weight: normal; padding: 0 5px;}
+.textarea { width: 100%; height: 400px }
+
+/* \xCE\xF1\xED\xEE\xE2\xED\xEE\xE5 \xEF\xEE\xEB\xE5 \xF1\xF2\xF0\xE0\xED\xE8\xF6\xFB */
+div.pagebefore { display: none}
+div.page {padding: 10px 10px;}
+
+/* \xD1\xEF\xE8\xF1\xEA\xE8 */
+ul, ol { margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px }
+
+/* \xD4\xEE\xF0\xEC\xE0\xF2\xF2\xE5\xF0\xFB */
+.code { border: solid #888888 2px; width: 80%; padding: 3px; background: #FFFFFF; color: black; font: 10pt Lucida Console }
+
+.email1 {color:#800000}
+.email2 {color:#808000}
+.email-odd {color:#800000}
+.email-even {color:#808000}
+
+td.micq1 {padding: 2px; font-weight: bold;}
+td.micq2 {padding: 2px; font: 10px Trebuchet MS, Tahoma, Arial;}
+td.micq3 {padding: 2px; width: 100%; }
+
+/* Tale of Contents */
+
+div.toc1 { margin-left: 0px; padding-left: 0px; list-style-type: none; font-weight: bold }
+div.toc2 { margin-left: 0px; padding-left: 15px; list-style-type: none }
+div.toc3 { margin-left: 0px; padding-left: 30px; list-style-type: none }
+div.toc4 { margin-left: 0px; padding-left: 45px; list-style-type: none }
+div.toc5 { margin-left: 0px; padding-left: 60px; list-style-type: none }
+div.toc6 { margin-left: 0px; padding-left: 75px; list-style-type: none }
+
+
+blockquote { border-left: #999 3px solid; padding: 5px }
+blockquote p { padding: 0px; margin: 5px 0px }
+
+
+cite { color: #888800; font-style: normal }
+
+
+
+
+
+p.auto { margin: 0px; padding: 0px; font-size: 100% }
+strike a:visited, s a:visited, strike, s, strike a:visited, s a:link { color: #999999 }
+strike img, s img { filter: Gray }
+table.dtable { width: 100%; border: 0px none; border-collapse: collapse }
+table.dtable tr td { border-width: 0px; border-color: #999999; border-style: none; padding: 4px; vertical-align: top }
+table.upload td { padding: 2px 5px 2px 5px; vertical-align: bottom }
+table.upload td.desc- { width: 100%; color: #444444; font-size: 80% }
+table.upload td.dt- .dt2-,
+table.upload td.remove- .remove2-,
+table.upload td.size- .size2- { color: #666666; font: 11px Tahoma }
+table.upload td.dt-,
+table.upload td.file- { white-space: nowrap; color: #000000; font-size: 80%; font-weight: bold }
+table.upload td.dt-, table.upload td.remove- { padding-right: 0 }
+table.upload td.remove- a.remove2-:hover,
+table.upload td.remove- a.remove2-:active { color: #ff0000 }
+table.upload td.size- { padding-right: 0; text-align: right }
+table.usertable { border: 1px none; border-collapse: collapse }
+table.usertable tr td { border-width: 1px; border-color: black; border-style: solid; padding: 4px; vertical-align: top }
+
+
+
+.add { color: #c00; font-weight: bold; text-decoration: underline }
+.additions { color: #008800 }
+.center{ text-align: center }
+
+
+.codeold { border: solid #888888 2px; width: 100%; padding: 3px; background: #FFFFFF; color: black; font: 10pt Lucida Console; height: 400px; overflow: scroll }
+
+.del { color: #c00; font-style: italic; text-decoration: line-through }
+.deletions { color: #880000 }
+.error { color: #CC3333; font-weight: bold }
+.files, .comment { padding: 10px; border-left: 1px inset; border-right: 1px inset; border-top: 1px solid #CCCCCC; border-bottom: 1px solid #EEEEEE; background: #EEEEEE }
+.filesform, .commentform { padding: 10px; border-left: 1px inset; border-right: 1px inset; border-top: 1px solid #CCCCCC; background: #EEEEEE }
+.include { padding: 8px; background: #F5F5F5 }
+.indent { margin-left: 40px }
+.logbtn { font: 10px Trebuchet MS, Verdana, Arial, Helvetica, sans-serif; height: 21px }
+.main { font-size: 22px }
+
+
+.name { font-size: 11px; text-align: right }
+.notes { color: #888800 }
+.outerlink { color: #990000 }
+
+
+
+.pageedit { border: 1px inset; border-bottom: none; background: #FFFFFF }
+.pleft .p- { float: left; padding: 0 15px 0 0 }
+.pleft, .pleft .pbody- { padding: 0 }
+.pmark { color: #cccccc; font: 10px Arial }
+.pmark a:link,
+.pmark a:visited { color: #cccccc }
+.pmark a:hover,
+.pmark a:active { color: #cc3300 }
+.pright { }
+.pright .p- { float: right; padding: 0 0 0 15px }
+.pright .pbody- { }
+.print { font: 12px Trebuchet MS }
+.revisioninfo { padding-bottom: 20px; color: #AAAAAA }
+
+ .preview {margin:2px;border:red 2px solid;}
+ .preview legend {color:red;font-weight:bold;}
+
+.buttonsspacer{width:10px;height:1px;}
+
+.time{ color: #cccccc; font: 9px Trebuchet MS, Tahoma, Arial, Verdana }
+
+#tooltip{ border: 1px solid #666666; margin: 0px; padding: 3px 5px; background: #FFFFFF; color: #333333; font: menu; position: absolute; visibility: hidden }
+
+/* vseedit toolbar */
+ .toolbar tr { background: ButtonFace; }
+ .toolbar .btn-, .toolbar .btn-hover, .toolbar .btn-active, .toolbar .btn-pressed {
+ background: ButtonFace;
+ color: ButtonText;
+ border: 1px solid ButtonFace;
+ padding: 1px; margin: 0px;
+ cursor: pointer; cursor: hand;
+ }
+ .toolbar .btn- img{
+ width: 20px;
+ height: 20px;
+ }
+ .toolbar .btn-hover {
+ border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
+ }
+ .toolbar .btn-active, .toolbar .btn-pressed {
+ border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
+ }
+ .toolbar .btn-pressed {
+ background: ButtonHighlight;
+ }
+ .edname-w, .edname-r, .edname-s
+ { font: bold 14px Arial; border: 3px solid #D4D0C8; padding: 0 7px; color:#ffffff; vertical-align: middle;}
+ .edname-w { background: #1E9905; }
+ .edname-r { background: #2A45D0; }
+ .edname-s { background: #D08C2A; }
+
+/* Text_Highlighter */
+.hl-main {font-family: monospace; font-size:13px;}
+.hl-gutter { background-color: #CCCCCC; padding-right: 10px;
+ font-family: monospace; font-size:13px;}
+.hl-table {border: solid 1px #000000; }
+
+.hl-default { color: #000000; }
+.hl-code { color: #7f7f33; }
+.hl-brackets { color: #009966; }
+.hl-comment { color: #7F7F7F; }
+.hl-quotes { color: #00007F; }
+.hl-string { color: #7F0000; }
+.hl-identifier { color: #000000; }
+.hl-reserved { color: #7F007F; }
+.hl-inlinedoc { color: #0000FF; }
+.hl-var { color: #0066FF; }
+.hl-url { color: #FF0000; }
+.hl-special { color: #0000FF; }
+.hl-number { color: #007F00; }
+.hl-inlinetags { color: #FF0000; }
+.hl-builtin { color:#996633; }
+
+.nobr {white-space: nowrap}
+
+div.action { margin:2px; background: #eeeeee }
+div.action-content { padding:10px 10px 25px 10px; }
+
+.cl-red {color: #CC0000;}
+.cl-green {color: #008000;}
+.cl-blue {color: #0000CC;}
+
+tt { color:#666600; background:#ffffcc; padding: 0 2px }
+
+.cite {color:#ff0000;font-style:normal;}
+/* .mark { color: #008800;font-style:normal; } */
+.mark { color: #00000; background:#ffaaaa; }
+
Added: trunk/farplugins/wiki/themes/coffee/icons/wacko.ico
===================================================================
(Binary files differ)
Property changes on: trunk/farplugins/wiki/themes/coffee/icons/wacko.ico
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tec...@us...> - 2007-05-22 11:24:05
|
Revision: 391
http://farplugins.svn.sourceforge.net/farplugins/?rev=391&view=rev
Author: techtonik
Date: 2007-05-22 04:24:07 -0700 (Tue, 22 May 2007)
Log Message:
-----------
+ document wiki hacks
Modified Paths:
--------------
trunk/farplugins/.cvsignore
Added Paths:
-----------
trunk/farplugins/wiki/
trunk/farplugins/wiki/.htaccess
trunk/farplugins/wiki/themes/
Property Changed:
----------------
trunk/farplugins/
Property changes on: trunk/farplugins
___________________________________________________________________
Name: svn:ignore
- config.inc.php
config_db.inc.php
+ config.inc.php
config_db.inc.php
plugring
Modified: trunk/farplugins/.cvsignore
===================================================================
--- trunk/farplugins/.cvsignore 2007-05-22 10:47:47 UTC (rev 390)
+++ trunk/farplugins/.cvsignore 2007-05-22 11:24:07 UTC (rev 391)
@@ -1,2 +1,3 @@
config.inc.php
config_db.inc.php
+plugring
\ No newline at end of file
Added: trunk/farplugins/wiki/.htaccess
===================================================================
--- trunk/farplugins/wiki/.htaccess (rev 0)
+++ trunk/farplugins/wiki/.htaccess 2007-05-22 11:24:07 UTC (rev 391)
@@ -0,0 +1,8 @@
+<IfModule mod_rewrite.c>
+ RewriteEngine on
+ RewriteCond %{REQUEST_FILENAME} -d
+ RewriteRule ^(.*/[^\./]*[^/])$ $1/
+ RewriteRule ^(robots\.txt)$ robots.txt [L]
+ RewriteRule ^(favicon\.ico)$ favicon.ico [L]
+ RewriteRule ^(.*)$ wakka.php?wakka=$1 [QSA,L]
+</IfModule>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tec...@us...> - 2007-05-22 10:47:46
|
Revision: 390
http://farplugins.svn.sourceforge.net/farplugins/?rev=390&view=rev
Author: techtonik
Date: 2007-05-22 03:47:47 -0700 (Tue, 22 May 2007)
Log Message:
-----------
- export filename is configured through config.inc.php
Removed Paths:
-------------
trunk/farplugins/farplugins.xml
Deleted: trunk/farplugins/farplugins.xml
===================================================================
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lo...@us...> - 2007-05-21 13:54:48
|
Revision: 389
http://farplugins.svn.sourceforge.net/farplugins/?rev=389&view=rev
Author: lomecb
Date: 2007-05-21 06:54:09 -0700 (Mon, 21 May 2007)
Log Message:
-----------
multipanel tagged
Added Paths:
-----------
tags/multipanel-initial-ci/
Copied: tags/multipanel-initial-ci (from rev 388, trunk/multipanel)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lo...@us...> - 2007-05-21 13:44:19
|
Revision: 388
http://farplugins.svn.sourceforge.net/farplugins/?rev=388&view=rev
Author: lomecb
Date: 2007-05-21 06:42:01 -0700 (Mon, 21 May 2007)
Log Message:
-----------
Added Paths:
-----------
trunk/multipanel/
trunk/multipanel/bin/
trunk/multipanel/bin/makedep.exe
trunk/multipanel/bin/makedep.txt
trunk/multipanel/doc/
trunk/multipanel/doc/announce.txt
trunk/multipanel/doc/development.txt
trunk/multipanel/doc/future_ideas.rtf
trunk/multipanel/doc/history_en.txt
trunk/multipanel/doc/history_ru.txt
trunk/multipanel/doc/install_en.reg
trunk/multipanel/doc/install_en.txt
trunk/multipanel/doc/install_ru.reg
trunk/multipanel/doc/install_ru.txt
trunk/multipanel/doc/options_design.txt
trunk/multipanel/doc/plans.txt
trunk/multipanel/doc/power_mode.diff
trunk/multipanel/doc/readme_en.txt
trunk/multipanel/doc/readme_ru.txt
trunk/multipanel/doc/releasing.txt
trunk/multipanel/doc/techinfo_en.txt
trunk/multipanel/doc/todo.txt
trunk/multipanel/doc/white_paper.rtf
trunk/multipanel/src/
trunk/multipanel/src/dialog.cpp
trunk/multipanel/src/dialog.hpp
trunk/multipanel/src/editor_screen_view.cpp
trunk/multipanel/src/editor_screen_view.hpp
trunk/multipanel/src/file_panel_view.cpp
trunk/multipanel/src/file_panel_view.hpp
trunk/multipanel/src/items.hpp
trunk/multipanel/src/macro.cpp
trunk/multipanel/src/macro.hpp
trunk/multipanel/src/make_gcc.sh
trunk/multipanel/src/makefile
trunk/multipanel/src/makeuser
trunk/multipanel/src/makeuser_sample
trunk/multipanel/src/platform.hpp
trunk/multipanel/src/plugin.cpp
trunk/multipanel/src/plugin.def
trunk/multipanel/src/plugin.dll.base
trunk/multipanel/src/plugin.dll.exp
trunk/multipanel/src/plugin.hpp
trunk/multipanel/src/plugin_en.hlf
trunk/multipanel/src/plugin_en.lng
trunk/multipanel/src/plugin_ru.hlf
trunk/multipanel/src/plugin_ru.lng
trunk/multipanel/src/registry.cpp
trunk/multipanel/src/registry.hpp
trunk/multipanel/src/view.cpp
trunk/multipanel/src/view.hpp
trunk/multipanel/src/view_list_dialog.cpp
trunk/multipanel/src/view_list_dialog.hpp
trunk/multipanel/src/window.cpp
trunk/multipanel/src/window.hpp
trunk/multipanel/tests/
trunk/multipanel/tests/m.bat
trunk/multipanel/tests/test1.cpp
trunk/multipanel/tests/test2.cpp
trunk/multipanel/tests/test3.cpp
trunk/multipanel/tests/test4.cpp
Added: trunk/multipanel/bin/makedep.exe
===================================================================
(Binary files differ)
Property changes on: trunk/multipanel/bin/makedep.exe
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/multipanel/bin/makedep.txt
===================================================================
--- trunk/multipanel/bin/makedep.txt (rev 0)
+++ trunk/multipanel/bin/makedep.txt 2007-05-21 13:42:01 UTC (rev 388)
@@ -0,0 +1,74 @@
+1.3 beta6 (31-aug-2000) by Stas
++ Added '-f' command line option.
+
+1.3 beta5 (20-may-2000) by Stas
++ Win95: Check mixed case filename access.
+
+1.3 (sm)
+beta4:
++ Fix: '#' symbol in '-t' output was always printed to stdout, resulting in
+ incorrect behavior with '-w' or '-a' switches.
+beta3:
++ '-w' switch added. Dependency output will be redirected to specified file.
+ We need this to avoid calling shell each time makedep called from a makefile.
+ Note that '-a' switch appends output to the file, while '-w' overwrites it.
+beta:
++ C-Break: ignored, but makedep will return 1
++ Fix: include-path'ed subincludes were not searched in parent's directory first
++ '.' is not added automatically to include search list
+alpha:
++ '-t' switch added that allows to backtrace file dependencies. Mekedep will
+ output all files (but no more than twenty) which include each header.
++ Fix: Makedep was mislead when an include file name matched name of a
+ directory located in the search path.
+
+1.2 (sm)
++ text after #include "filename" was not ignored - fixed
++ paths specified in INCLUDE env. variable are now searched after '-I' paths.
+ Behavior of -x and -E switches yet retained (i.e. they act as if 'INCLUDE'
+ was parsed before '-I').
+
+1.1 (stas):
++ Fix for DMAKE - it does not like filenames starting with ".(/|\\)".
+
+1.0 (sm):
++ include file names could not contain spaces - fixed
+
+0.9f(sm):
++ memory leak fix
++ last line in a file was not read - fixed
+
+0.9 (sm):
++ Bugfix in '-r'
++ Added '-x' key. Makedep will silently ignore all include files it finds in
+ include directories specified before '-x', in %include% as well.
+ -rxi is a good replacement for -rsi in some cases.
+
+0.8 (sm):
++ Added '-E' key. The only way to get rid of %include% variable contents
+
+0.7m (sm) :
++ Bugfix in '-i'
+
+0.6 (sm) :
++ Added '-i' key.
++ Added '-o' key.
+
+0.5 (sm) :
++ Added '-c' key. It makes searching for source file to start from object's dir.
+
+0.4 (sm) :
++ Repaired lost source file formatting and 4sp tabs in makedep.c
++ Added '-e' key (source file extension to search first)
++ Restored '-u', added '-l'
+
+0.3 (stas) :
++ Made compilable with MSVC (_findfirst()).
++ Added missing includes from MGL 4.04.
++ Does not corrupt case in pathnames.
++ Option '-u' removed (I was lazy to add simmetric option '-l').
++ Now always produces pathnames in format with '/' and lowercase drive letter.
++ All produced pathanems are now quoted with "".
++ Character ':' in dependency is now always enclosed in spaces.
+
+--
Added: trunk/multipanel/doc/announce.txt
===================================================================
--- trunk/multipanel/doc/announce.txt (rev 0)
+++ trunk/multipanel/doc/announce.txt 2007-05-21 13:42:01 UTC (rev 388)
@@ -0,0 +1,5 @@
+\xCC\xEE\xE4\xF3\xEB\xFC \xEF\xEE\xE7\xE2\xEE\xEB\xFF\xE5\xF2 FAR \xEE\xF2\xEA\xF0\xFB\xE2\xE0\xF2\xFC \xE1\xEE\xEB\xE5\xE5 \xF7\xE5\xEC \xE4\xE2\xE5 \xF4\xE0\xE9\xEB\xEE\xE2\xFB\xE5 \xEF\xE0\xED\xE5\xEB\xE8.
+
+\xCC\xEE\xE4\xF3\xEB\xFC \xF1\xED\xE8\xEC\xE0\xE5\xF2 \xEE\xE3\xF0\xE0\xED\xE8\xF7\xE5\xED\xE8\xE5 \xED\xE0 \xEA\xEE\xEB\xE8\xF7\xE5\xF1\xF2\xE2\xEE \xF4\xE0\xE9\xEB\xEE\xE2\xFB\xF5 \xEF\xE0\xED\xE5\xEB\xE5\xE9 \xE2 FAR.
+\xCF\xEE\xEB\xFC\xE7\xEE\xE2\xE0\xF2\xE5\xEB\xFC \xEC\xEE\xE6\xE5\xF2 \xEE\xF2\xEA\xF0\xFB\xE2\xE0\xF2\xFC \xEB\xFE\xE1\xEE\xE5 \xEA\xEE\xEB\xE8\xF7\xE5\xF1\xF2\xE2\xEE \xF4\xE0\xE9\xEB\xEE\xE2\xFB\xF5 \xEF\xE0\xED\xE5\xEB\xE5\xE9,
+\xE8 \xE1\xFB\xF1\xF2\xF0\xEE \xEF\xE5\xF0\xE5\xEA\xEB\xFE\xF7\xE0\xF2\xFC\xF1\xFF \xEC\xE5\xE6\xE4\xF3 \xED\xE8\xEC\xE8, \xED\xE5 \xE7\xE0\xEF\xF3\xF1\xEA\xE0\xFF \xED\xE5\xF1\xEA\xEE\xEB\xFC\xEA\xEE FAR\xEE\xE2.
Added: trunk/multipanel/doc/development.txt
===================================================================
--- trunk/multipanel/doc/development.txt (rev 0)
+++ trunk/multipanel/doc/development.txt 2007-05-21 13:42:01 UTC (rev 388)
@@ -0,0 +1,22 @@
+Multi-panel plug-in for FAR Manager, Developer notes
+
+TERMINOLOGY
+
+A /window/ is one of the two FAR panels.
+
+A /view/ is a window state. For example, a File panel view memorizes
+a current directory, currently selected files, a sorting mode, etc.,
+when an Editor screen view memorizes a currently opened file in an
+editor instance. A window displays only a single view at a time.
+
+Talking of multiple panels actually means switching multiple views within
+a single native panel (a window). But the public documentation of this
+plugin will most often mention just multiple panels, instead of multiple
+views. While being technically incorrect, this is actually a more usual
+notation for the user.
+
+STANDARDS
+
+Please conform to the methodologies already employed in the project, and
+follow the style set in this project before you (for example, source code
+formatting, identifier naming, comment writing style, etc.).
Added: trunk/multipanel/doc/future_ideas.rtf
===================================================================
--- trunk/multipanel/doc/future_ideas.rtf (rev 0)
+++ trunk/multipanel/doc/future_ideas.rtf 2007-05-21 13:42:01 UTC (rev 388)
@@ -0,0 +1,139 @@
+{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff37\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset204\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset204\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset204\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}
+{\f37\fswiss\fcharset204\fprq2{\*\panose 00000000000000000000}Verdana;}{\f40\froman\fcharset0\fprq2 Times New Roman;}{\f38\froman\fcharset238\fprq2 Times New Roman CE;}{\f41\froman\fcharset161\fprq2 Times New Roman Greek;}
+{\f42\froman\fcharset162\fprq2 Times New Roman Tur;}{\f43\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f44\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f45\froman\fcharset186\fprq2 Times New Roman Baltic;}
+{\f46\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f50\fswiss\fcharset0\fprq2 Arial;}{\f48\fswiss\fcharset238\fprq2 Arial CE;}{\f51\fswiss\fcharset161\fprq2 Arial Greek;}{\f52\fswiss\fcharset162\fprq2 Arial Tur;}
+{\f53\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f54\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\f55\fswiss\fcharset186\fprq2 Arial Baltic;}{\f56\fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f60\fmodern\fcharset0\fprq1 Courier New;}
+{\f58\fmodern\fcharset238\fprq1 Courier New CE;}{\f61\fmodern\fcharset161\fprq1 Courier New Greek;}{\f62\fmodern\fcharset162\fprq1 Courier New Tur;}{\f63\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}
+{\f64\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f65\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f66\fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f410\fswiss\fcharset0\fprq2 Verdana;}{\f408\fswiss\fcharset238\fprq2 Verdana CE;}
+{\f411\fswiss\fcharset161\fprq2 Verdana Greek;}{\f412\fswiss\fcharset162\fprq2 Verdana Tur;}{\f415\fswiss\fcharset186\fprq2 Verdana Baltic;}{\f416\fswiss\fcharset163\fprq2 Verdana (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;
+\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;
+\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af37\afs20\alang1025 \ltrch\fcs0
+\f37\fs20\lang1033\langfe1049\cgrid\langnp1033\langfenp1049 \snext0 Normal;}{\s1\ql \li0\ri0\sb240\sa60\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af1\afs32\alang1025 \ltrch\fcs0
+\b\f1\fs32\lang1033\langfe1049\kerning32\cgrid\langnp1033\langfenp1049 \sbasedon0 \snext0 heading 1;}{\s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \rtlch\fcs1
+\ab\ai\af1\afs28\alang1025 \ltrch\fcs0 \b\i\f1\fs28\lang1033\langfe1049\cgrid\langnp1033\langfenp1049 \sbasedon0 \snext0 heading 2;}{\*\cs10 \additive Default Paragraph Font;}{\*
+\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
+\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}{
+\s15\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af37\afs20\alang1025 \ltrch\fcs0 \f37\fs20\lang1033\langfe1049\cgrid\langnp1033\langfenp1049 \sbasedon0 \snext15 Body Text;}{\*\cs16
+\additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 Hyperlink;}{\*\cs17 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf12 \sbasedon10 FollowedHyperlink;}}{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\listtable{\list\listtemplateid1941183866
+\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747265\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li360\jclisttab\tx360\lin360 }
+{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747269\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel
+\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747269\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listlevel\levelnfc23
+\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747265\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2520\jclisttab\tx2520\lin2520 }{\listlevel\levelnfc23\levelnfcn23
+\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747267\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747269\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li3960\jclisttab\tx3960\lin3960 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747265\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li4680\jclisttab\tx4680\lin4680 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1
+\levelspace360\levelindent0{\leveltext\leveltemplateid68747267\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5400\jclisttab\tx5400\lin5400 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
+\levelindent0{\leveltext\leveltemplateid68747269\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6120\jclisttab\tx6120\lin6120 }{\listname ;}\listid5787832}{\list\listtemplateid2142244728\listhybrid{\listlevel\levelnfc23\levelnfcn23
+\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747265\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li360\jclisttab\tx360\lin360 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747267\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1080\jclisttab\tx1080\lin1080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747269\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1
+\levelspace360\levelindent0{\leveltext\leveltemplateid68747265\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2520\jclisttab\tx2520\lin2520 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
+\levelindent0{\leveltext\leveltemplateid68747267\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid68747269\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li3960\jclisttab\tx3960\lin3960 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid68747265\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li4680\jclisttab\tx4680\lin4680 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid68747267\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5400\jclisttab\tx5400\lin5400 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747269
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6120\jclisttab\tx6120\lin6120 }{\listname ;}\listid70739842}{\list\listtemplateid-870046176\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1
+\levelspace360\levelindent0{\leveltext\leveltemplateid68747265\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li360\jclisttab\tx360\lin360 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
+\levelindent0{\leveltext\leveltemplateid68747267\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1080\jclisttab\tx1080\lin1080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid68747269\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid68747265\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2520\jclisttab\tx2520\lin2520 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid68747267\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747269
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li3960\jclisttab\tx3960\lin3960 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747265
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li4680\jclisttab\tx4680\lin4680 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747267
+\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5400\jclisttab\tx5400\lin5400 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747269
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6120\jclisttab\tx6120\lin6120 }{\listname ;}\listid766654072}{\list\listtemplateid1941183866\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1
+\levelspace360\levelindent0{\leveltext\leveltemplateid68747265\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li360\jclisttab\tx360\lin360 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
+\levelindent0{\leveltext\leveltemplateid-1623046390\'01o;}{\levelnumbers;}\hich\af2\fbias0\hres0\chhres0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0
+{\leveltext\leveltemplateid68747269\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid68747265\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2520\jclisttab\tx2520\lin2520 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid68747267\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747269
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li3960\jclisttab\tx3960\lin3960 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747265
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li4680\jclisttab\tx4680\lin4680 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747267
+\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5400\jclisttab\tx5400\lin5400 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747269
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6120\jclisttab\tx6120\lin6120 }{\listname ;}\listid1490363227}{\list\listtemplateid1941183866\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1
+\levelspace360\levelindent0{\leveltext\leveltemplateid68747265\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li360\jclisttab\tx360\lin360 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
+\levelindent0{\leveltext\leveltemplateid68747267\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li1080\jclisttab\tx1080\lin1080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid68747269\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid68747265\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li2520\jclisttab\tx2520\lin2520 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid68747267\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747269
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li3960\jclisttab\tx3960\lin3960 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747265
+\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0 \fi-360\li4680\jclisttab\tx4680\lin4680 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747267
+\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5400\jclisttab\tx5400\lin5400 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747269
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6120\jclisttab\tx6120\lin6120 }{\listname ;}\listid1966689833}}{\*\listoverridetable{\listoverride\listid766654072\listoverridecount0\ls1}{\listoverride\listid1966689833
+\listoverridecount0\ls2}{\listoverride\listid70739842\listoverridecount0\ls3}{\listoverride\listid1490363227\listoverridecount0\ls4}{\listoverride\listid5787832\listoverridecount0\ls5}}{\*\rsidtbl \rsid15229957}{\*\generator Microsoft Word 11.0.8134;}
+{\info{\title Multi Panel plug-in for Far Manager, Design}{\author Stanislav Baranov}{\operator Alenka}{\creatim\yr2002\mo7\dy14\hr17\min14}{\revtim\yr2007\mo5\dy13\hr1\min17}{\version6}{\edmins6}{\nofpages2}{\nofwords442}{\nofchars2525}
+{\*\company Bright Side}{\nofcharsws2962}{\vern24611}{\*\password 00000000}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1701\margr850\margt1134\margb1134\gutter0\ltrsect
+\deftab708\widowctrl\ftnbj\aenddoc\donotembedsysfont0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\noxlattoyen\expshrtn\noultrlspc
+\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1800\dgvorigin1440\dghshow1\dgvshow1
+\jexpand\viewkind4\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\rsidroot15229957 \fet0{\*\wgrffmtfilter 013f}\ilfomacatclnup0\ltrpar \sectd \ltrsect
+\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4
+\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}
+{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar
+\s1\ql \li0\ri0\sb240\sa60\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af1\afs32\alang1025 \ltrch\fcs0 \b\f1\fs32\lang1033\langfe1049\kerning32\cgrid\langnp1033\langfenp1049 {\rtlch\fcs1
+\af1 \ltrch\fcs0 \insrsid15229957 Multi Panel Plug-in for FAR Manager, Future Ideas
+\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\ai\af1\afs28\alang1025 \ltrch\fcs0 \b\i\f1\fs28\lang1033\langfe1049\cgrid\langnp1033\langfenp1049 {
+\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid15229957 Location list
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \ltrpar\ql \fi-360\li360\ri0\sb120\sa120\widctlpar
+\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0 \rtlch\fcs1 \af37\afs20\alang1025 \ltrch\fcs0 \f37\fs20\lang1033\langfe1049\cgrid\langnp1033\langfenp1049 {\rtlch\fcs1 \af37 \ltrch\fcs0 \insrsid15229957
+Lists the whole hierarchy, with groups and windows.
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Item shows: group name, window count. Functions: create sub-group, move items between groups.
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}The current switch ring is highlighted.
+\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\ai\af1\afs28\alang1025 \ltrch\fcs0 \b\i\f1\fs28\lang1033\langfe1049\cgrid\langnp1033\langfenp1049 {
+\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid15229957 Window groups
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \ltrpar\ql \fi-360\li360\ri0\sb120\sa120\widctlpar
+\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0 \rtlch\fcs1 \af37\afs20\alang1025 \ltrch\fcs0 \f37\fs20\lang1033\langfe1049\cgrid\langnp1033\langfenp1049 {\rtlch\fcs1 \af37 \ltrch\fcs0 \insrsid15229957
+Ctrl-[Shift]-` switches between window groups in LRU order, shows quick list within current switch ring while Ctrl is held, rearranges ring stack after releasing Ctrl.
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Alt-Up/Down switches between window groups \endash does it work together with LRU?
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Supported window groups are file panels/console output and editors/viewers.
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Assignable shortcuts, directly to given groups.
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Hierarchical grouping. Windows are only at leaf groups?
+\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\ai\af1\afs28\alang1025 \ltrch\fcs0 \b\i\f1\fs28\lang1033\langfe1049\cgrid\langnp1033\langfenp1049 {
+\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid15229957 Window branching
+\par }\pard\plain \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af37\afs20\alang1025 \ltrch\fcs0 \f37\fs20\lang1033\langfe1049\cgrid\langnp1033\langfenp1049 {\rtlch\fcs1 \af37 \ltrch\fcs0
+\insrsid15229957 FAR Manager allows displaying of a single location on a panel. Multi Panel extends the panel to displaying of multiple locations simultaneously combined into a single view, without disrupting the usual work style, but empowering it.
+
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li360\ri0\sb120\sa120\widctlpar
+\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin360\itap0 {\rtlch\fcs1 \af37 \ltrch\fcs0 \insrsid15229957
+Allows displaying more than one location, but with a current context localized, to which all the current operation are applied.
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}It's a tree view, with collapsing, attach, detach...
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Save branch specification, and roll back to it.
+\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\ai\af1\afs28\alang1025 \ltrch\fcs0 \b\i\f1\fs28\lang1033\langfe1049\cgrid\langnp1033\langfenp1049 {
+\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid15229957 Options
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \ltrpar\ql \fi-360\li360\ri0\sb120\sa120\widctlpar
+\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0 \rtlch\fcs1 \af37\afs20\alang1025 \ltrch\fcs0 \f37\fs20\lang1033\langfe1049\cgrid\langnp1033\langfenp1049 {\rtlch\fcs1 \af37 \ltrch\fcs0 \insrsid15229957
+Automatic window grouping by window type: disabled, sub-groups within current group, global groups.
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Exchange Ctrl-` and Ctrl-Tab.
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Window group list key.
+\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\ai\af1\afs28\alang1025 \ltrch\fcs0 \b\i\f1\fs28\lang1033\langfe1049\cgrid\langnp1033\langfenp1049 {
+\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid15229957 Why FAR
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \ltrpar\ql \fi-360\li360\ri0\sb120\sa120\widctlpar
+\jclisttab\tx360\wrapdefault\faauto\ls2\rin0\lin360\itap0 \rtlch\fcs1 \af37\afs20\alang1025 \ltrch\fcs0 \f37\fs20\lang1033\langfe1049\cgrid\langnp1033\langfenp1049 {\rtlch\fcs1 \af37 \ltrch\fcs0 \insrsid15229957 There is a moderate amount of use
+ful features in FAR implemented to date, so no need to redo them, for a new product:
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af10\afs20 \ltrch\fcs0 \f10\fs20\lang1033\langfe1049\langfenp1049 \loch\af10\dbch\af0\hich\f10 \'a7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sb120\sa120\widctlpar
+\jclisttab\tx720\wrapdefault\faauto\ls5\ilvl1\rin0\lin720\itap0 {\rtlch\fcs1 \af37 \ltrch\fcs0 \insrsid15229957 rich file listing and sorting modes
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af10\afs20 \ltrch\fcs0 \f10\fs20\lang1033\langfe1049\langfenp1049 \loch\af10\dbch\af0\hich\f10 \'a7\tab}fast group file operations
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af10\afs20 \ltrch\fcs0 \f10\fs20\lang1033\langfe1049\langfenp1049 \loch\af10\dbch\af0\hich\f10 \'a7\tab}unified file system support (archives, FTP, etc.)
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af10\afs20 \ltrch\fcs0 \f10\fs20\lang1033\langfe1049\langfenp1049 \loch\af10\dbch\af0\hich\f10 \'a7\tab}regular expression search and replace in file tree
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af10\afs20 \ltrch\fcs0 \f10\fs20\lang1033\langfe1049\langfenp1049 \loch\af10\dbch\af0\hich\f10 \'a7\tab}Windows Explorer menu access
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af10\afs20 \ltrch\fcs0 \f10\fs20\lang1033\langfe1049\langfenp1049 \loch\af10\dbch\af0\hich\f10 \'a7\tab}an average directory tree comparison
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af10\afs20 \ltrch\fcs0 \f10\fs20\lang1033\langfe1049\langfenp1049 \loch\af10\dbch\af0\hich\f10 \'a7\tab}an average OS console
+\par }\pard \ltrpar\ql \li360\ri0\sb120\sa120\widctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af37 \ltrch\fcs0 \insrsid15229957
+It is appropriate to mention here that integrated viewers and editors are not considered an important feature for a file manager though.
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li360\ri0\sb120\sa120\widctlpar
+\jclisttab\tx360\wrapdefault\faauto\ls2\rin0\lin360\itap0 {\rtlch\fcs1 \af37 \ltrch\fcs0 \insrsid15229957
+FAR is a de-facto standard, after Windows Explorer, and solutions integrated into development environments. The authors themselves spent years living in FAR.
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}FAR has a good user base \endash great for testing and feedback.
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}FAR is stable.
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}FAR is still being relatively actively developed.
+\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af37 \ltrch\fcs0 \insrsid15229957 But is FAR plug-in API powerful enough to make Multi Panel implementation possible? See Challenges.
+\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sa60\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\ai\af1\afs28\alang1025 \ltrch\fcs0 \b\i\f1\fs28\lang1033\langfe1049\cgrid\langnp1033\langfenp1049 {
+\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid15229957 Challenges
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af3\afs20 \ltrch\fcs0 \f3\fs20\lang1033\langfe1049\langfenp1049 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \ltrpar\ql \fi-360\li360\ri0\sb120\sa120\widctlpar
+\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0 \rtlch\fcs1 \af37\afs20\alang1025 \ltrch\fcs0 \f37\fs20\lang1033\langfe1049\cgrid\langnp1033\langfenp1049 {\rtlch\fcs1 \af37 \ltrch\fcs0 \insrsid15229957
+Try to implement the window branching feature on a standard panel, but in a convenient for a user way. Can request items and put items from other plug-ins? }{\rtlch\fcs1 \af37 \ltrch\fcs0 \cf6\insrsid15229957 Archives \endash
+ kind of, because they will re-read the archive every time the plug-in is re-opened. FTP \endash no, because it will break connection every time plug-in is closed. No custom highlighting of files. }{\rtlch\fcs1 \af37 \ltrch\fcs0 \insrsid15229957
+Can probably implement custom columns. Can disable adding two dots. Can disable using filters and sorting. Can override processing of any keys, like arrow movement, to change the context highlighting, etc. Can set command line directory. }{\rtlch\fcs1
+\af37 \ltrch\fcs0 \cf6\insrsid15229957 Can override standard find operation, but not file search plug-in; could highlight the context available for such limited operations.
+\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af37 \ltrch\fcs0 \insrsid15229957
+\par }}
\ No newline at end of file
Added: trunk/multipanel/doc/history_en.txt
===================================================================
--- trunk/multipanel/doc/history_en.txt (rev 0)
+++ trunk/multipanel/doc/history_en.txt 2007-05-21 13:42:01 UTC (rev 388)
@@ -0,0 +1,133 @@
+Multi-panel plug-in for FAR Manager, Change history
+
+2003-Dec-02 (revision 94) - Version 3.2
++ Fixed panel loading to work on all configurations.
++ Fixed panel save/restore dialog sizes and buttons.
+
+2003-May-16 (revision 92) - Version 3.1
++ Fixed crash during FAR command line parsing.
++ Added requirement of msvcp60.dll to installation guide.
+
+2003-May-12 (revision 91) - Version 3.0
++ Added the plugin home page http://garret.ru/~baranov in the documentation.
++ Milestone: Finished the testing, and published the version.
+
+2003-Apr-18 (revision 90)
++ Added the ShiftF9 and CtrlShiftF9 commands, to manually save/restore panel suite in registry.
++ Changed "Panel list" dialog title to "Panels", to have the same style as FAR's "Screens" dialog.
++ Fixed internal bugs in panel saving/restoring: hidden panels, top panel item, fixed mode flag.
++ Updated TECHINFO 16 with a proposal of adding "Run before FAR exit" macro flag to FAR.
++ Updated TECHINFO 14 that FAR API does not let plugin set active window on panels restore.
++ Updated docs, including license, copyright, and compliance with FAR Manager 1.70 beta 5 build 1634.
+
+2003-Feb-22 (revision 77)
++ Implemented complete saving and restoring of all file panels in registry, including selection, etc.
++ Added support for named panel suites, for independent panels in different running FAR copies.
++ Added FAR startup command line option "mp:suite <name>" to set panel suite for given FAR session.
++ Added recommended macros for F10 and CtrlAltShiftF10 to auto-restore panels between FAR sessions.
+
+2003-Jan-17 (revision 70) - Version 2.0
++ Milestone: Finished the testing, and published the version.
+
+2003-Jan-10 (revision 69)
++ Added the missing help for the Ctrl(Up|Down|Home|End) commands.
++ Disabled "quick" mode in non-NT Windows, for new macros (containing CtrlQ) to work everywhere.
+
+2002-Dec-29 (revision 66)
++ Added processing of key macros in the panel list dialog, to completely enable key redefinition.
++ Plugin's own macros can be edited with FAR Macro browser (MacroView). Limitations apply.
++ Added Ctrl{Up|Down|Home|End} commands, to manually reorder panels in the panel list dialog.
++ Added TECHINFO 16 that some Control functions in FAR API crash during execution of ExitFAR function.
++ Added TECHINFO 17 about limitations of plugin's macros.
++ Added TECHINFO 18 that FAR key queue gets reset on ACTL_POSTKEYSEQUENCE function of FAR API.
++ Added TECHINFO 19 that KSFLAGS_DISABLEOUTPUT is ignored on ACTL_POSTKEYSEQUENCE function of FAR API.
++ Added TECHINFO 20 about why the "quick" mode of the panel list dialog works starting with Win2k.
++ Milestone: Started the alpha-testing.
+
+2002-Dec-26 (revision 59)
+
++ Added the CtrlQ command to trigger the "quick" dialog mode. Updated the recommended macros.
++ Added the CtrlF command to trigger the fixed panel order mode, and the CtrlEnter command.
++ Made the dialog border indicate the dialog modes by dynamically changing the canvas and line.
++ Added examples of recommended macros for CtrlUp and CtrlDown that do not reorder panels.
++ Renamed the recommended plugin directory to MultiPanel/. Do not forget to delete the old one!
+
+2002-Dec-22 (revision 51)
+
++ Enabled big-screen auto-formatting of the panel list dialog size, in all modes.
++ Added TESTIMONIALS section to the help. Thanks everyone for feedback!
++ Remapped New panel function from CtrlShiftF3 to CtrlShiftF4.
++ Added Clone panel aside macro as CtrlShiftF3.
++ Added Swap panels (extended) macro as CtrlU.
++ Added TECHINFO 15 about impossibility to limit the scope of a FAR macro to dialogs of a certain plugin.
++ Updated TECHINFO 14 that FAR API does not set PanelInfo.Visible, Use sort groups, Show selected first.
+
+2002-Oct-10 (revision 50) - Version 1.0
+
++ Fixed the bug with detecting all network locations as unavailable.
++ Fixed the bug with resetting unsupported panel, on cancelling the dialog, entered for the first time.
++ Fixed a one-character bug with the panel list dialog formatting.
++ Added TECHINFO 14 that FAR API does not let plugin to set PanelInfo.ShortNames.
++ Refined the documentation and installation.
++ Milestone: Finished the internal testing, and published the version.
+
+2002-Oct-05 (revision 46)
+
++ Sergey Baranov joined the project.
++ Added support for unavailable locations: no error, panel is marked with '-' until location is back.
++ Added processing of the CtrlR button in the panel list dialog, to redraw the selected panel.
++ Added TECHINFO 13 about broken panel redraw after calling FCTL_SETSELECTION function of FAR API.
++ Fixed the panel switching when the panel list dialog is cancelled, or the active panel is closed.
++ Fixed the file selection on an inactive panel to be safe, when the directory contents is changed.
++ Fixed the bug with the New panel function not initializing some panel data, and causing a crash.
++ Fixed smaller bugs, refined the documentation.
+
+2002-Oct-01 (revision 45)
+
++ Andrey Belousow (Seisen) joined the project.
++ Added processing of the PageUp/PageDown/Home/End buttons in the panel list dialog.
++ Added the New panel function, and TECHINFO 11 about its current limitations.
++ Fixed the panel list dialog formatting, for any number of panels, instead of 100.
++ Fixed the bug with the FAR Plugin commands menu item, after switching the FAR language dynamically.
++ Disabled mouse movement tracking in the panel list dialog, and added mouse wheel processing.
++ Fixed scrolling in the panel list, to make sure the selected item is centered is possible.
++ Added TECHINFO 12 about early or fake DN_ENTERIDLE events from FAR API.
++ Added TECHINFO 10 about limitations and inconsistencies of DN_KEY event in FAR API.
++ Fixed smaller bugs, refined the documentation.
++ Milestone: Started the final internal testing.
+
+2002-Aug-24 (revision 38)
+
++ Reviewed and refined all public documentation.
++ Translated all public documentation to Russian.
++ Added TECHINFO 9 about consequences of absent support of background plugins in file panels in FAR.
++ Added TECHINFO 8 that automatic dialog positioning in FAR API is inconsistent.
++ Added TECHINFO 7 that FAR API does not always initialize PanelInfo.CurDir for QView file panels.
++ Added TECHINFO 6 about why support of Tree/Info/QView file panels is limited.
++ Added TECHINFO 5 about why support of other plugin's file panels is limited.
++ Added TECHINFO 4 that DialogEx function in FAR API crashes for correct values of Y1.
++ Added TECHINFO 3 that FAR API does not let plugin receive and process CtrlEsc.
++ Added TECHINFO 2 that the "Colors / Dialog / Disabled list" setting is misplaced in FAR.
++ Added TECHINFO 1 that FAR API does not let determining by PanelInfo whether panel is left or right.
++ Changed panel index compression to produce the inverse index ordering.
++ Fixed the bug with indices of new panel after panel index compression.
++ Allowed incorrect behavior of panel indices in case of two fullscreen panels (techinfo).
++ Added panel display optimization, noticable on large directories.
++ Added a warning when trying to switch from an unsupported panel (Plugin/Tree/Info/QView).
++ Localized the panel type names - this was the last not localized piece of code.
++ Added dynamic formatting and resizing of the panel list dialog depending on the contents.
+
+2002-Aug-11 (revision 28)
+
++ Researched the feasibility of the multi-panel plugin idea for the latest FAR version.
++ Designed and documented the core architecture of the plugin.
++ Implemented complete panel state switching.
++ Implemented dynamic panel preview.
++ Implemented panel LRU.
++ Implemented custom dialog for panel list.
++ Implemented "quick" dialog mode, using Ctrl as modifier.
++ Milestone: Published the project internally, for evaluation and feedback.
+
+2002-Jul-14
+
++ Created the project white paper.
Added: trunk/multipanel/doc/history_ru.txt
===================================================================
--- trunk/multipanel/doc/history_ru.txt (rev 0)
+++ trunk/multipanel/doc/history_ru.txt 2007-05-21 13:42:01 UTC (rev 388)
@@ -0,0 +1,132 @@
+\xCC\xEE\xE4\xF3\xEB\xFC \xCC\xF3\xEB\xFC\xF2\xE8-\xEF\xE0\xED\xE5\xEB\xFC \xE4\xEB\xFF FAR, \xC8\xF1\xF2\xEE\xF0\xE8\xFF \xE8\xE7\xEC\xE5\xED\xE5\xED\xE8\xE9
+
+2003-\xC4\xE5\xEA-02 (\xF0\xE5\xE2\xE8\xE7\xE8\xFF 94) - \xC2\xE5\xF0\xF1\xE8\xFF 3.2
++ \xC8\xF1\xEF\xF0\xE0\xE2\xEB\xE5\xED\xE0 \xE7\xE0\xE3\xF0\xF3\xE7\xEA\xE0 \xEF\xE0\xED\xE5\xEB\xE5\xE9, \xEA\xEE\xF2\xEE\xF0\xE0\xFF \xED\xE5 \xF0\xE0\xE1\xEE\xF2\xE0\xEB\xE0 \xE2 \xF0\xE5\xE4\xEA\xEE\xE9 \xF1\xE8\xF2\xF3\xE0\xF6\xE8\xE8.
++ \xC8\xF1\xEF\xF0\xE0\xE2\xEB\xE5\xED\xFB \xF0\xE0\xE7\xEC\xE5\xF0\xFB \xE8 \xEA\xED\xEE\xEF\xEA\xE8 \xE4\xE8\xE0\xEB\xEE\xE3\xEE\xE2 \xF1\xEE\xF5\xF0\xE0\xED\xE5\xED\xE8\xFF \xE8 \xE7\xE0\xE3\xF0\xF3\xE7\xEA\xE8 \xEF\xE0\xED\xE5\xEB\xE5\xE9.
+
+2003-\xCC\xE0\xE9-16 (\xF0\xE5\xE2\xE8\xE7\xE8\xFF 92) - \xC2\xE5\xF0\xF1\xE8\xFF 3.1
++ \xC8\xF1\xEF\xF0\xE0\xE2\xEB\xE5\xED\xEE \xEF\xE0\xE4\xE5\xED\xE8\xE5 \xE2\xEE \xE2\xF0\xE5\xEC\xFF \xF0\xE0\xE7\xE1\xEE\xF0\xE0 \xEA\xEE\xEC\xE0\xED\xE4\xED\xEE\xE9 \xF1\xF2\xF0\xEE\xEA\xE8 FAR.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED\xE0 \xE8\xED\xF4\xEE\xF0\xEC\xE0\xF6\xE8\xFF \xEE \xED\xE5\xEE\xE1\xF5\xEE\xE4\xE8\xEC\xEE\xF1\xF2\xE8 \xED\xE0\xEB\xE8\xF7\xE8\xFF msvcp60.dll \xE2 \xF0\xF3\xEA\xEE\xE2\xEE\xE4\xF1\xF2\xE2\xEE \xEF\xEE \xF3\xF1\xF2\xE0\xED\xEE\xE2\xEA\xE5.
+
+2003-\xCC\xE0\xE9-12 (\xF0\xE5\xE2\xE8\xE7\xE8\xFF 91) - \xC2\xE5\xF0\xF1\xE8\xFF 3.0
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED\xE0 \xE2 \xE4\xEE\xEA\xF3\xEC\xE5\xED\xF2\xE0\xF6\xE8\xFE \xE4\xEE\xEC\xE0\xF8\xED\xFF\xFF \xF1\xF2\xF0\xE0\xED\xE8\xF6\xE0 \xEF\xEB\xE0\xE3\xE8\xED\xE0: http://garret.ru/~baranov.
++ \xC2\xE5\xF5\xE0: \xC7\xE0\xEA\xEE\xED\xF7\xE5\xED\xEE \xF2\xE5\xF1\xF2\xE8\xF0\xEE\xE2\xE0\xED\xE8\xE5, \xEE\xEF\xF3\xE1\xEB\xE8\xEA\xEE\xE2\xE0\xED\xE0 \xE2\xE5\xF0\xF1\xE8\xFF.
+
+2003-\xC0\xEF\xF0-18 (\xF0\xE5\xE2\xE8\xE7\xE8\xFF 90)
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED\xFB \xEA\xEE\xEC\xE0\xED\xE4\xFB ShiftF9 \xE8 CtrlShiftF9, \xE4\xEB\xFF \xF0\xF3\xF7\xED\xEE\xE3\xEE \xF1\xEE\xF5\xF0\xE0\xED\xE5\xED\xE8\xFF/\xE2\xEE\xF1\xF1\xF2\xE0\xED\xEE\xE2\xEB\xE5\xED\xE8\xFF \xED\xE0\xE1\xEE\xF0\xE0 \xEF\xE0\xED\xE5\xEB\xE5\xE9 \xE2 \xF0\xE5\xE5\xF1\xF2\xF0\xE5.
++ \xC8\xE7\xEC\xE5\xED\xE5\xED \xE7\xE0\xE3\xEE\xEB\xEE\xE2\xEE\xEA \xE4\xE8\xE0\xEB\xEE\xE3\xE0 "\xD1\xEF\xE8\xF1\xEE\xEA \xEF\xE0\xED\xE5\xEB\xE5\xE9" \xED\xE0 "\xCF\xE0\xED\xE5\xEB\xE8", \xE4\xEB\xFF \xF1\xEE\xEE\xF2\xE2\xE5\xF2\xF1\xF2\xE2\xE8\xFF \xF1\xF2\xE8\xEB\xFF \xF1 \xE4\xE8\xE0\xEB\xEE\xE3\xEE\xEC FAR "\xDD\xEA\xF0\xE0\xED\xFB".
++ \xC8\xF1\xEF\xF0\xE0\xE2\xEB\xE5\xED\xFB \xEE\xF8\xE8\xE1\xEA\xE8 \xE2 \xF1\xEE\xF5\xF0\xE0\xED\xE5\xED\xE8\xE8/\xE2\xEE\xF1\xF1\xF2\xE0\xED\xEE\xE2\xEB\xE5\xED\xE8\xE8 \xEF\xE0\xED\xE5\xEB\xE5\xE9: \xF1\xEF\xF0\xFF\xF2\xE0\xED\xED\xFB\xE5 \xEF\xE0\xED\xE5\xEB\xE8, \xE2\xE5\xF0\xF5\xED\xE8\xE9 \xFD\xEB\xE5\xEC\xE5\xED\xF2, \xF4\xE8\xEA\xF1. \xF0\xE5\xE6\xE8\xEC.
++ \xC4\xEE\xEF\xEE\xEB\xED\xE5\xED TECHINFO 16 \xEF\xF0\xE5\xE4\xEB\xEE\xE6\xE5\xED\xE8\xE5\xEC \xE4\xEE\xE1\xE0\xE2\xE8\xF2\xFC \xE2 FAR \xF4\xEB\xE0\xE3 "\xC2\xFB\xEF\xEE\xEB\xED\xE8\xF2\xFC \xEF\xF0\xE8 \xE2\xFB\xF5\xEE\xE4\xE5 \xE8\xE7 FAR" \xE4\xEB\xFF \xEC\xE0\xEA\xF0\xEE\xEA\xEE\xEC\xE0\xED\xE4.
++ \xC4\xEE\xEF\xEE\xEB\xED\xE5\xED TECHINFO 14 \xF7\xF2\xEE FAR API \xED\xE5 \xEF\xEE\xE7\xE2\xEE\xEB\xFF\xE5\xF2 \xEF\xEB\xE0\xE3\xE8\xED\xF3 \xF3\xF1\xF2\xE0\xED\xE0\xE2\xEB\xE8\xE2\xE0\xF2\xFC \xE0\xEA\xF2\xE8\xE2\xED\xF3\xFE \xEF\xE0\xED\xE5\xEB\xFC.
++ \xCE\xE1\xED\xEE\xE2\xEB\xE5\xED\xE0 \xE4\xEE\xEA\xF3\xEC\xE5\xED\xF2\xE0\xF6\xE8\xFF, \xE2\xEA\xEB\xFE\xF7\xE0\xFF \xEB\xE8\xF6\xE5\xED\xE7\xE8\xFE, copyright, \xE8 \xF1\xEE\xE2\xEC\xE5\xF1\xF2\xE8\xEC\xEE\xF1\xF2\xFC \xF1 FAR Manager 1.70 beta 5 build 1634.
+
+2003-\xD4\xE5\xE2-22 (\xF0\xE5\xE2\xE8\xE7\xE8\xFF 77)
++ \xD0\xE5\xE0\xEB\xE8\xE7\xEE\xE2\xE0\xED\xEE \xF1\xEE\xF5\xF0\xE0\xED\xE5\xED\xE8\xE5 \xE8 \xE2\xEE\xF1\xF1\xF2\xE0\xED\xEE\xE2\xEB\xE5\xED\xE8\xE5 \xE2\xF1\xE5\xF5 \xF4\xE0\xE9\xEB\xEE\xE2\xFB\xF5 \xEF\xE0\xED\xE5\xEB\xE5\xE9 \xE2 \xF0\xE5\xE5\xF1\xF2\xF0\xE5, \xE2\xEA\xEB\xFE\xF7\xE0\xFF \xE2\xFB\xE4\xE5\xEB\xE5\xED\xE8\xE5 \xF4\xE0\xE9\xEB\xEE\xE2 \xE8 \xF2.\xEF.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED\xE0 \xEF\xEE\xE4\xE4\xE5\xF0\xE6\xEA\xE0 \xE8\xEC\xE5\xED\xEE\xE2\xE0\xED\xFB\xF5 \xED\xE0\xE1\xEE\xF0\xEE\xE2 \xEF\xE0\xED\xE5\xEB\xE5\xE9, \xE4\xEB\xFF \xED\xE5\xE7\xE0\xE2\xE8\xF1\xE8\xEC\xEE\xF1\xF2\xE8 \xED\xE0\xE1\xEE\xF0\xEE\xE2 \xEF\xE0\xED\xE5\xEB\xE5\xE9 \xE2 \xF0\xE0\xE7\xED\xFB\xF5 \xEA\xEE\xEF\xE8\xFF\xF5 FAR.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED\xE0 \xEE\xEF\xF6\xE8\xFF \xEA\xEE\xEC\xE0\xED\xE4\xED\xEE\xE9 \xF1\xF2\xF0\xEE\xEA\xE8 \xE7\xE0\xEF\xF3\xF1\xEA\xE0 FAR "mp:suite <name>" \xE4\xEB\xFF \xE7\xE0\xE4\xE0\xED\xE8\xFF \xF1\xE5\xF1\xF1\xE8\xE8 FAR \xED\xE0\xE1\xEE\xF0\xE0 \xEF\xE0\xED\xE5\xEB\xE5\xE9.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED\xFB \xF0\xE5\xEA\xEE\xEC\xE5\xED\xE4\xF3\xE5\xEC\xFB\xE5 \xEC\xE0\xEA\xF0\xEE\xF1\xFB F10 \xE8 CtrlAltShiftF10 \xE4\xEB\xFF \xE0\xE2\xF2\xEE-\xF1\xEE\xF5\xF0\xE0\xED\xE5\xED\xE8\xFF \xEF\xE0\xED\xE5\xEB\xE5\xE9 \xEC\xE5\xE6\xE4\xF3 \xF1\xE5\xF1\xF1\xE8\xFF\xEC\xE8 FAR.
+
+2003-\xDF\xED\xE2-17 (\xF0\xE5\xE2\xE8\xE7\xE8\xFF 70) - \xC2\xE5\xF0\xF1\xE8\xFF 2.0
++ \xC2\xE5\xF5\xE0: \xC7\xE0\xEA\xEE\xED\xF7\xE5\xED\xEE \xF2\xE5\xF1\xF2\xE8\xF0\xEE\xE2\xE0\xED\xE8\xE5, \xEE\xEF\xF3\xE1\xEB\xE8\xEA\xEE\xE2\xE0\xED\xE0 \xE2\xE5\xF0\xF1\xE8\xFF.
+
+2003-\xDF\xED\xE2-10 (\xF0\xE5\xE2\xE8\xE7\xE8\xFF 69)
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED\xEE \xEE\xF2\xF1\xF3\xF2\xF1\xF2\xE2\xF3\xFE\xF9\xE5\xE5 \xEE\xEF\xE8\xF1\xE0\xED\xE8\xE5 \xEA\xEE\xEC\xE0\xED\xE4 Ctrl(Up|Down|Home|End) \xE2 \xF4\xE0\xE9\xEB \xEF\xEE\xEC\xEE\xF9\xE8.
++ \xC7\xE0\xEF\xF0\xE5\xF9\xE5\xED \xEF\xE5\xF0\xE5\xF5\xEE\xE4 \xE2 "\xE1\xFB\xF1\xF2\xF0\xFB\xE9" \xF0\xE5\xE6\xE8\xEC \xE2 \xED\xE5-NT Windows, \xF7\xF2\xEE\xE1\xFB \xED\xEE\xE2\xFB\xE5 \xEC\xE0\xEA\xF0\xFB (\xF1\xEE\xE4\xE5\xF0\xE6\xE0\xF9\xE8\xE5 CtrlQ) \xF0\xE0\xE1\xEE\xF2\xE0\xEB\xE8 \xE2\xE5\xE7\xE4\xE5.
+
+2002-\xC4\xE5\xEA-29 (\xF0\xE5\xE2\xE8\xE7\xE8\xFF 66)
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED\xE0 \xEE\xE1\xF0\xE0\xE1\xEE\xF2\xEA\xE0 \xEC\xE0\xEA\xF0\xEE\xEA\xEE\xEC\xE0\xED\xE4 \xE2 \xE4\xE8\xE0\xEB\xEE\xE3\xE5 \xF1\xEF\xE8\xF1\xEA\xE0 \xEF\xE0\xED\xE5\xEB\xE5\xE9, \xE4\xEB\xFF \xEF\xEE\xEB\xED\xEE\xE9 \xEF\xEE\xE4\xE4\xE5\xF0\xE6\xEA\xE8 \xEF\xE5\xF0\xE5\xED\xE0\xE7\xED\xE0\xF7\xE5\xED\xE8\xFF \xEA\xEB\xE0\xE2\xE8\xF8.
++ \xCB\xE8\xF7\xED\xFB\xE5 \xEC\xE0\xEA\xF0\xEE\xEA\xEE\xEC\xE0\xED\xE4\xFB \xEF\xEB\xE0\xE3\xE8\xED\xE0 \xEC\xEE\xE3\xF3\xF2 \xF0\xE5\xE4\xE0\xEA\xF2\xE8\xF0\xEE\xE2\xE0\xF2\xFC\xF1\xFF \xF1 \xEF\xEE\xEC\xEE\xF9\xFC\xFE Macro browser (MacroView). \xC5\xF1\xF2\xFC \xEE\xE3\xF0\xE0\xED\xE8\xF7\xE5\xED\xE8\xFF.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED\xFB \xEA\xEE\xEC\xE0\xED\xE4\xFB Ctrl{Up|Down|Home|End}, \xE4\xEB\xFF \xF0\xF3\xF7\xED\xEE\xE9 \xF1\xEE\xF0\xF2\xE8\xF0\xEE\xE2\xEA\xE8 \xF1\xEF\xE8\xF1\xEA\xE0 \xEF\xE0\xED\xE5\xEB\xE5\xE9 \xE2 \xE4\xE8\xE0\xEB\xEE\xE3\xE5.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED TECHINFO 16 \xEE \xEF\xF0\xEE\xE1\xEB\xE5\xEC\xE5 \xE2 FAR API \xF1 \xF4\xF3\xED\xEA\xF6\xE8\xE5\xE9 Control \xE2\xEE \xE2\xF0\xE5\xEC\xFF \xE2\xFB\xEF\xEE\xEB\xED\xE5\xED\xE8\xFF \xF4\xF3\xED\xEA\xF6\xE8\xE8 ExitFAR.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED TECHINFO 17 \xEE\xE1 \xEE\xE3\xF0\xE0\xED\xE8\xF7\xE5\xED\xE8\xFF\xF5 \xEF\xEE\xE4\xE4\xE5\xF0\xE6\xEA\xE8 \xEC\xE0\xEA\xF0\xEE\xEA\xEE\xEC\xE0\xED\xE4 \xE2 \xEF\xEB\xE0\xE3\xE8\xED\xE5.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED TECHINFO 18 \xF7\xF2\xEE \xEE\xF7\xE5\xF0\xE5\xE4\xFC \xEA\xEB\xE0\xE2\xE8\xF8 FAR \xF1\xE1\xF0\xE0\xF1\xFB\xE2\xE0\xE5\xF2\xF1\xFF \xEF\xF0\xE8 \xE2\xFB\xE7\xEE\xE2\xE5 \xF4\xF3\xED\xEA\xF6\xE8\xE8 ACTL_POSTKEYSEQUENCE FAR API.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED TECHINFO 19 \xF7\xF2\xEE KSFLAGS_DISABLEOUTPUT \xE8\xE3\xED\xEE\xF0\xE8\xF0\xF3\xE5\xF2\xF1\xFF \xEF\xF0\xE8 \xE2\xFB\xE7\xEE\xE2\xE5 \xF4\xF3\xED\xEA\xF6\xE8\xE8 ACTL_POSTKEYSEQUENCE API.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED TECHINFO 20 \xEF\xEE\xF7\xE5\xEC\xF3 "\xE1\xFB\xF1\xF2\xF0\xFB\xE9" \xF0\xE5\xE6\xE8\xEC \xE4\xE8\xE0\xEB\xEE\xE3\xE0 \xF1\xEF\xE8\xF1\xEA\xE0 \xEF\xE0\xED\xE5\xEB\xE5\xE9 \xF0\xE0\xE1\xEE\xF2\xE0\xE5\xF2 \xED\xE0\xF7\xE8\xED\xE0\xFF \xF1 Win2k.
++ \xC2\xE5\xF5\xE0: \xCD\xE0\xF7\xE0\xF2\xEE \xE0\xEB\xFC\xF4\xE0-\xF2\xE5\xF1\xF2\xE8\xF0\xEE\xE2\xE0\xED\xE8\xE5.
+
+2002-\xC4\xE5\xEA-26 (\xF0\xE5\xE2\xE8\xE7\xE8\xFF 59)
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED\xE0 \xEA\xEE\xEC\xE0\xED\xE4\xE0 CtrlQ, \xEF\xE5\xF0\xE5\xEA\xEB\xFE\xF7\xE0\xFE\xF9\xE0\xFF "\xE1\xFB\xF1\xF2\xF0\xFB\xE9" \xF0\xE5\xE6\xE8\xEC \xE4\xE8\xE0\xEB\xEE\xE3\xE0. \xCE\xE1\xED\xEE\xE2\xEB\xE5\xED\xFB \xF0\xE5\xEA\xEE\xEC\xE5\xED\xE4\xF3\xE5\xEC\xFB\xE5 \xEC\xE0\xEA\xF0\xEE\xF1\xFB.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED\xE0 \xEA\xEE\xEC\xE0\xED\xE4\xE0 CtrlF, \xEF\xE5\xF0\xE5\xEA\xEB\xFE\xF7\xE0\xFE\xF9\xE0\xFF \xF0\xE5\xE6\xE8\xEC \xEF\xEE\xF1\xF2\xEE\xFF\xED\xED\xEE\xE3\xEE \xEF\xEE\xF0\xFF\xE4\xEA\xE0 \xEF\xE0\xED\xE5\xEB\xE5\xE9, \xE8 \xEA\xEE\xEC\xE0\xED\xE4\xE0 CtrlEnter.
++ \xD0\xE5\xE0\xEB\xE8\xE7\xEE\xE2\xE0\xED\xEE \xEE\xF2\xEE\xE1\xF0\xE0\xE6\xE5\xED\xE8\xE5 \xF0\xE0\xEC\xEA\xEE\xE9 \xE4\xE8\xE0\xEB\xEE\xE3\xE0 \xE5\xE3\xEE \xF0\xE5\xE6\xE8\xEC\xE0, \xE4\xE8\xED\xE0\xEC\xE8\xF7\xE5\xF1\xEA\xE8\xEC \xE8\xE7\xEC\xE5\xED\xE5\xED\xE8\xE5\xEC \xEE\xEA\xE0\xE9\xEC\xEB\xE5\xED\xE8\xFF \xE8 \xEB\xE8\xED\xE8\xE8.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED\xFB \xEF\xF0\xE8\xEC\xE5\xF0\xFB \xF0\xE5\xEA\xEE\xEC\xE5\xED\xE4\xF3\xE5\xEC\xFB\xF5 \xEC\xE0\xEA\xF0\xEE\xF1\xEE\xE2 CtrlUp \xE8 CtrlDown, \xEA\xEE\xF2\xEE\xF0\xFB\xE5 \xED\xE5 \xEF\xE5\xF0\xE5\xF3\xEF\xEE\xF0\xFF\xE4\xEE\xF7\xE8\xE2\xE0\xFE\xF2 \xEF\xE0\xED\xE5\xEB\xE8.
++ \xCF\xE5\xF0\xE5\xE8\xEC\xE5\xED\xEE\xE2\xE0\xED\xE0 \xF0\xE5\xEA\xEE\xEC\xE5\xED\xE4\xF3\xE5\xEC\xE0\xFF \xE4\xE8\xF0\xE5\xEA\xF2\xEE\xF0\xE8\xFF \xEF\xEB\xE0\xE3\xE8\xED\xE0 \xE2 MultiPanel/. \xCD\xE5 \xE7\xE0\xE1\xF3\xE4\xFC\xF2\xE5 \xF1\xF2\xE5\xF0\xE5\xF2\xFC \xF1\xF2\xE0\xF0\xF3\xFE \xE2\xE5\xF0\xF1\xE8\xFE!
+
+2002-\xC4\xE5\xEA-22 (\xF0\xE5\xE2\xE8\xE7\xE8\xFF 51)
+
++ \xD0\xE0\xE7\xF0\xE5\xF8\xE5\xED\xEE \xEF\xEE\xEB\xED\xEE\xFD\xEA\xF0\xE0\xED\xED\xEE\xE5 \xE0\xE2\xF2\xEE\xF4\xEE\xF0\xEC\xE0\xF2\xE8\xF0\xEE\xE2\xE0\xED\xE8\xE5 \xF0\xE0\xE7\xEC\xE5\xF0\xE0 \xE4\xE8\xE0\xEB\xEE\xE3\xE0 \xF1\xEF\xE8\xF1\xEA\xE0 \xEF\xE0\xED\xE5\xEB\xE5\xE9, \xE2\xEE \xE2\xF1\xE5\xF5 \xF0\xE5\xE6\xE8\xEC\xE0\xF5.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED \xE2 \xEF\xEE\xEC\xEE\xF9\xFC \xF0\xE0\xE7\xE4\xE5\xEB \xCE\xF2\xE7\xFB\xE2\xFB \xEF\xEE\xEB\xFC\xE7\xEE\xE2\xE0\xF2\xE5\xEB\xE5\xE9. \xC1\xEE\xEB\xFC\xF8\xEE\xE5 \xF1\xEF\xE0\xF1\xE8\xE1\xEE \xE2\xF1\xE5\xEC \xE7\xE0 \xEA\xEE\xEC\xEC\xE5\xED\xF2\xE0\xF0\xE8\xE8!
++ \xCF\xE5\xF0\xE5\xED\xE0\xE7\xED\xE0\xF7\xE5\xED\xE0 \xF4\xF3\xED\xEA\xF6\xE8\xFF \xCD\xEE\xE2\xE0\xFF \xEF\xE0\xED\xE5\xEB\xFC \xF1 CtrlShiftF3 \xED\xE0 CtrlShiftF4.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED\xE0 \xEC\xE0\xEA\xF0\xEE\xEA\xEE\xEC\xE0\xED\xE4\xE0 \xCA\xEB\xEE\xED\xE8\xF0\xEE\xE2\xE0\xF2\xFC \xEF\xE0\xED\xE5\xEB\xFC \xE2\xE1\xEE\xEA, \xED\xE0 CtrlShiftF3.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED\xE0 \xEC\xE0\xEA\xF0\xEE\xEA\xEE\xEC\xE0\xED\xE4\xE0 \xCE\xE1\xEC\xE5\xED\xFF\xF2\xFC \xEF\xE0\xED\xE5\xEB\xE8 (\xF0\xE0\xF1\xF8\xE8\xF0\xE5\xED\xED\xE0\xFF), \xED\xE0 CtrlU.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED TECHINFO 15 \xEE \xED\xE5\xE2\xEE\xE7\xEC\xEE\xE6\xED\xEE\xF1\xF2\xE8 \xEE\xE3\xF0\xE0\xED\xE8\xF7\xE8\xF2\xFC \xE4\xE5\xE9\xF1\xF2\xE2\xE8\xE5 \xEC\xE0\xEA\xF0\xEE\xEA\xEE\xEC\xE0\xED\xE4\xFB FAR \xE4\xE8\xE0\xEB\xEE\xE3\xE0\xEC\xE8 \xEA\xEE\xED\xEA\xF0\xE5\xF2\xED\xEE\xE3\xEE \xEF\xEB\xE0\xE3\xE8\xED\xE0.
++ \xC4\xEE\xEF\xEE\xEB\xED\xE5\xED TECHINFO 14 \xF7\xF2\xEE \xE2 FAR API \xED\xE5 \xF3\xF1\xF2\xE0\xED\xEE\xE2\xE8\xF2\xFC PanelInfo.Visible, Use sort groups, Show selected first.
+
+2002-\xCE\xEA\xF2-10 (\xF0\xE5\xE2\xE8\xE7\xE8\xFF 50) - \xC2\xE5\xF0\xF1\xE8\xFF 1.0
+
++ \xC8\xF1\xEF\xF0\xE0\xE2\xEB\xE5\xED\xE0 \xEE\xF8\xE8\xE1\xEA\xE0 \xF1 \xEE\xEF\xF0\xE5\xE4\xE5\xEB\xE5\xED\xE8\xE5\xEC \xF1\xE5\xF2\xE5\xE2\xFB\xF5 \xE4\xE8\xF0\xE5\xEA\xF2\xEE\xF0\xE8\xE9 \xEA\xE0\xEA \xED\xE5\xF1\xF3\xF9\xE5\xF1\xF2\xE2\xF3\xFE\xF9\xE8\xF5.
++ \xC8\xF1\xEF\xF0\xE0\xE2\xEB\xE5\xED\xE0 \xEE\xF8\xE8\xE1\xEA\xE0 \xF1\xEE \xF1\xE1\xF0\xEE\xF1\xEE\xEC \xED\xE5\xEF\xEE\xE4\xE4\xE5\xF0\xE6\xE8\xE2\xE0\xE5\xEC\xEE\xE9 \xEF\xE0\xED\xE5\xEB\xE8, \xEF\xF0\xE8 \xEE\xF2\xEC\xE5\xED\xE5 \xE4\xE8\xE0\xEB\xEE\xE3\xE0 \xEF\xEE\xF1\xEB\xE5 \xF1\xE0\xEC\xEE\xE3\xEE \xEF\xE5\xF0\xE2\xEE\xE3\xEE \xE2\xF5\xEE\xE4\xE0.
++ \xC8\xF1\xEF\xF0\xE0\xE2\xEB\xE5\xED\xE0 \xEE\xF8\xE8\xE1\xEA\xE0 \xE2 \xEE\xE4\xE8\xED \xF1\xE8\xEC\xE2\xEE\xEB \xF1 \xF4\xEE\xF0\xEC\xE0\xF2\xE8\xF0\xEE\xE2\xE0\xED\xE8\xE5\xEC \xE4\xE8\xE0\xEB\xEE\xE3\xE0 \xF1\xEF\xE8\xF1\xEA\xE0 \xEF\xE0\xED\xE5\xEB\xE5\xE9.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED TECHINFO 14 \xF7\xF2\xEE FAR API \xED\xE5 \xEF\xEE\xE7\xE2\xEE\xEB\xFF\xE5\xF2 \xEF\xEB\xE0\xE3\xE8\xED\xF3 \xF3\xF1\xF2\xE0\xED\xEE\xE2\xE8\xF2\xFC PanelInfo.ShortNames.
++ \xD3\xEB\xF3\xF7\xF8\xE5\xED\xE0 \xE4\xEE\xEA\xF3\xEC\xE5\xED\xF2\xE0\xF6\xE8\xFF \xE8 \xF3\xF1\xF2\xE0\xED\xEE\xE2\xEA\xE0, \xEF\xE5\xF0\xE5\xF1\xEC\xEE\xF2\xF0\xE5\xED\xE0 \xED\xF3\xEC\xE5\xF0\xE0\xF6\xE8\xFF \xE2\xE5\xF0\xF1\xE8\xE9.
++ \xC2\xE5\xF5\xE0: \xC7\xE0\xEA\xEE\xED\xF7\xE5\xED\xEE \xE2\xED\xF3\xF2\xF0\xE5\xED\xED\xE5\xE5 \xF2\xE5\xF1\xF2\xE8\xF0\xEE\xE2\xE0\xED\xE8\xE5, \xEE\xEF\xF3\xE1\xEB\xE8\xEA\xEE\xE2\xE0\xED\xE0 \xE2\xE5\xF0\xF1\xE8\xFF.
+
+2002-\xCE\xEA\xF2-05 (\xF0\xE5\xE2\xE8\xE7\xE8\xFF 46)
+
++ \xD1\xE5\xF0\xE3\xE5\xE9 \xC1\xE0\xF0\xE0\xED\xEE\xE2 \xEF\xF0\xE8\xF1\xEE\xE5\xE4\xE8\xED\xE8\xEB\xF1\xFF \xEA \xEF\xF0\xEE\xE5\xEA\xF2\xF3.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED\xE0 \xEF\xEE\xE4\xE4\xE5\xF0\xE6\xEA\xE0 \xED\xE5\xF1\xF3\xF9\xE5\xF1\xF2\xE2\xF3\xFE\xF9\xE8\xF5 \xE4\xE8\xF0\xE5\xEA\xF2\xEE\xF0\xE8\xE9: \xE2\xEC\xE5\xF1\xF2\xEE \xEE\xF8\xE8\xE1\xEA\xE8, \xEF\xE0\xED\xE5\xEB\xFC \xEF\xEE\xEC\xE5\xF7\xE5\xED\xE0 \xEA\xE0\xEA '-' \xEF\xEE\xEA\xE0 \xE4\xE8\xF0\xE5\xEA\xF2\xEE\xF0\xE8\xE8 \xED\xE5\xF2.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED\xE0 \xEE\xE1\xF0\xE0\xE1\xEE\xF2\xEA\xE0 \xEA\xED\xEE\xEF\xEA\xE8 CtrlR \xE2 \xE4\xE8\xE0\xEB\xEE\xE3\xE5 \xF1\xEF\xE8\xF1\xEA\xE0 \xEF\xE0\xED\xE5\xEB\xE5\xE9 - \xEF\xE5\xF0\xE5\xF0\xE8\xF1\xEE\xE2\xE0\xF2\xFC \xE2\xFB\xE1\xF0\xE0\xED\xED\xF3\xFE \xEF\xE0\xED\xE5\xEB\xFC.
++ \xC4\xEE\xE1\xE0\xE2\xEB\xE5\xED TECHINFO 13 \xEE \xEF\xF0\xEE\xE1\xEB\xE5\xEC\xE0\xF2\xE8\xF7\xED\xEE\xE9 \xEF\xE5\xF0\xE5\xF0\xE8\...
[truncated message content] |
|
From: <tec...@us...> - 2007-01-15 20:21:53
|
Revision: 386
http://farplugins.svn.sourceforge.net/farplugins/?rev=386&view=rev
Author: techtonik
Date: 2007-01-15 12:20:58 -0800 (Mon, 15 Jan 2007)
Log Message:
-----------
* update Cake to 1.1.12.4205
Modified Paths:
--------------
trunk/plugbase/plugring/cake/VERSION.txt
trunk/plugbase/plugring/cake/basics.php
trunk/plugbase/plugring/cake/config/config.php
trunk/plugbase/plugring/cake/dispatcher.php
trunk/plugbase/plugring/cake/libs/configure.php
trunk/plugbase/plugring/cake/libs/controller/components/acl.php
trunk/plugbase/plugring/cake/libs/error.php
trunk/plugbase/plugring/cake/libs/file.php
trunk/plugbase/plugring/cake/libs/model/datasources/dbo_source.php
trunk/plugbase/plugring/cake/libs/model/dbo/dbo_postgres.php
trunk/plugbase/plugring/cake/libs/model/model_php4.php
trunk/plugbase/plugring/cake/libs/model/model_php5.php
trunk/plugbase/plugring/cake/libs/router.php
trunk/plugbase/plugring/cake/libs/view/helper.php
trunk/plugbase/plugring/cake/libs/view/helpers/html.php
trunk/plugbase/plugring/cake/libs/view/view.php
trunk/plugbase/plugring/cake/scripts/acl.php
trunk/plugbase/plugring/cake/scripts/bake.php
Modified: trunk/plugbase/plugring/cake/VERSION.txt
===================================================================
--- trunk/plugbase/plugring/cake/VERSION.txt 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/VERSION.txt 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,9 +1,9 @@
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// +---------------------------------------------------------------------------------------------------+ //
-// + $Id: VERSION.txt 4064 2006-12-04 05:29:12Z phpnut $
-// + Last Modified: $Date: 2006-12-03 23:29:12 -0600 (Sun, 03 Dec 2006) $
+// + $Id: VERSION.txt 4205 2006-12-25 12:36:03Z phpnut $
+// + Last Modified: $Date: 2006-12-25 06:36:03 -0600 (Mon, 25 Dec 2006) $
// + Modified By: $LastChangedBy: phpnut $
// +---------------------------------------------------------------------------------------------------+ //
///////////////////////////////////////////////////////////////////////////////////////////////////////////
-1.1.11.4064
\ No newline at end of file
+1.1.12.4205
\ No newline at end of file
Modified: trunk/plugbase/plugring/cake/basics.php
===================================================================
--- trunk/plugbase/plugring/cake/basics.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/basics.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,5 +1,5 @@
<?php
-/* SVN FILE: $Id: basics.php 4064 2006-12-04 05:29:12Z phpnut $ */
+/* SVN FILE: $Id: basics.php 4202 2006-12-25 12:06:13Z phpnut $ */
/**
* Basic Cake functionality.
*
@@ -21,9 +21,9 @@
* @package cake
* @subpackage cake.cake
* @since CakePHP v 0.2.9
- * @version $Revision: 4064 $
+ * @version $Revision: 4202 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-12-03 23:29:12 -0600 (Sun, 03 Dec 2006) $
+ * @lastmodified $Date: 2006-12-25 06:06:13 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
@@ -196,14 +196,14 @@
foreach($paths->controllerPaths as $path) {
foreach(listClasses($path) as $controller) {
- if (file_exists($path . $controller . '.php')) {
- if (!key_exists($controller, $loadedControllers)) {
- require($path . $controller . '.php');
- $loadedControllers[$controller] = $controller;
- }
+ list($name) = explode('.', $controller);
+ $className = Inflector::camelize($name);
+ if (loadController($name)) {
+ $loadedControllers[$controller] = $className;
}
}
}
+ return $loadedControllers;
}
/**
* Loads a controller and its helper libraries.
@@ -281,15 +281,16 @@
if (file_exists($file)) {
require($file);
return true;
- } elseif (file_exists(APP . 'plugins' . DS . $plugin . DS . 'controllers' . DS . $plugin . '_controller.php')) {
- require(APP . 'plugins' . DS . $plugin . DS . 'controllers' . DS . $plugin . '_controller.php');
- return true;
- } else {
- return false;
+ } elseif (!class_exists(Inflector::camelize($plugin . '_controller'))) {
+ if(file_exists(APP . 'plugins' . DS . $plugin . DS . 'controllers' . DS . $plugin . '_controller.php')) {
+ require(APP . 'plugins' . DS . $plugin . DS . 'controllers' . DS . $plugin . '_controller.php');
+ return true;
+ } else {
+ return false;
+ }
}
- } else {
- return true;
}
+ return true;
}
/**
* Loads a helper
Modified: trunk/plugbase/plugring/cake/config/config.php
===================================================================
--- trunk/plugbase/plugring/cake/config/config.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/config/config.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,5 +1,5 @@
<?php
-/* SVN FILE: $Id: config.php 4064 2006-12-04 05:29:12Z phpnut $ */
+/* SVN FILE: $Id: config.php 4205 2006-12-25 12:36:03Z phpnut $ */
/**
* Core Configurations.
*
@@ -19,10 +19,10 @@
* @package cake
* @subpackage cake.app.config
* @since CakePHP v 1.1.11.4062
- * @version $Revision: 4064 $
+ * @version $Revision: 4205 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-12-03 23:29:12 -0600 (Sun, 03 Dec 2006) $
+ * @lastmodified $Date: 2006-12-25 06:36:03 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
-$config['Cake.version'] = '1.1.11.4064';
+$config['Cake.version'] = '1.1.12.4205';
?>
\ No newline at end of file
Modified: trunk/plugbase/plugring/cake/dispatcher.php
===================================================================
--- trunk/plugbase/plugring/cake/dispatcher.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/dispatcher.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,5 +1,5 @@
<?php
-/* SVN FILE: $Id: dispatcher.php 3999 2006-11-27 21:00:58Z phpnut $ */
+/* SVN FILE: $Id: dispatcher.php 4202 2006-12-25 12:06:13Z phpnut $ */
/**
* Dispatcher takes the URL information, parses it for paramters and
* tells the involved controllers what to do.
@@ -22,9 +22,9 @@
* @package cake
* @subpackage cake.cake
* @since CakePHP v 0.2.9
- * @version $Revision: 3999 $
+ * @version $Revision: 4202 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-11-27 15:00:58 -0600 (Mon, 27 Nov 2006) $
+ * @lastmodified $Date: 2006-12-25 06:06:13 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
@@ -170,11 +170,11 @@
$missingAction = true;
}
- if (in_array(strtolower($params['action']), array('toString', 'requestAction', 'log',
- 'cakeError', 'constructClasses', 'redirect',
- 'set', 'setAction', 'validate', 'validateErrors',
- 'render', 'referer', 'flash', 'flashOut',
- 'generateFieldNames', 'postConditions', 'cleanUpFields',
+ if (in_array(strtolower($params['action']), array('tostring', 'requestaction', 'log',
+ 'cakeerror', 'constructclasses', 'redirect',
+ 'set', 'setaction', 'validate', 'validateerrors',
+ 'render', 'referer', 'flash', 'flashout',
+ 'generatefieldnames', 'postconditions', 'cleanupfields',
'beforefilter', 'beforerender', 'afterfilter'))) {
$missingAction = true;
}
Modified: trunk/plugbase/plugring/cake/libs/configure.php
===================================================================
--- trunk/plugbase/plugring/cake/libs/configure.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/libs/configure.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,5 +1,5 @@
<?php
-/* SVN FILE: $Id: configure.php 4064 2006-12-04 05:29:12Z phpnut $ */
+/* SVN FILE: $Id: configure.php 4202 2006-12-25 12:06:13Z phpnut $ */
/**
* Short description for file.
*
@@ -21,9 +21,9 @@
* @package cake
* @subpackage cake.cake.libs
* @since CakePHP v 1.0.0.2363
- * @version $Revision: 4064 $
+ * @version $Revision: 4202 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-12-03 23:29:12 -0600 (Sun, 03 Dec 2006) $
+ * @lastmodified $Date: 2006-12-25 06:06:13 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
@@ -155,9 +155,15 @@
$name = $_this->__configVarNames($var);
if(count($name) > 1){
- return $_this->{$name[0]}[$name[1]];
+ if(isset($_this->{$name[0]}[$name[1]])) {
+ return $_this->{$name[0]}[$name[1]];
+ }
+ return null;
} else {
- return $_this->{$name[0]};
+ if(isset($_this->{$name[0]})) {
+ return $_this->{$name[0]};
+ }
+ return null;
}
}
/**
@@ -196,10 +202,11 @@
function load($fileName) {
$_this =& Configure::getInstance();
- if(config($fileName) === false) {
+ if(!file_exists(CONFIGS . $fileName . '.php')) {
trigger_error("Configure::load() - $fileName.php not found", E_USER_WARNING);
return false;
}
+ include(CONFIGS . $fileName . '.php');
if(!isset($config)){
trigger_error("Configure::load() - no variable \$config found in $fileName.php", E_USER_WARNING);
return false;
Modified: trunk/plugbase/plugring/cake/libs/controller/components/acl.php
===================================================================
--- trunk/plugbase/plugring/cake/libs/controller/components/acl.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/libs/controller/components/acl.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,5 +1,5 @@
<?php
-/* SVN FILE: $Id: acl.php 4009 2006-11-28 10:19:40Z phpnut $ */
+/* SVN FILE: $Id: acl.php 4202 2006-12-25 12:06:13Z phpnut $ */
/**
* Access Control List factory class.
*
@@ -21,9 +21,9 @@
* @package cake
* @subpackage cake.cake.libs.controller.components
* @since CakePHP v 0.10.0.1076
- * @version $Revision: 4009 $
+ * @version $Revision: 4202 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-11-28 04:19:40 -0600 (Tue, 28 Nov 2006) $
+ * @lastmodified $Date: 2006-12-25 06:06:13 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
@@ -70,7 +70,7 @@
if($classname == 'DB_ACL') {
$this->Aro = new Aro();
- $this->Aco = new Aro();
+ $this->Aco = new Aco();
}
return $this->_instance;
}
Modified: trunk/plugbase/plugring/cake/libs/error.php
===================================================================
--- trunk/plugbase/plugring/cake/libs/error.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/libs/error.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,5 +1,5 @@
<?php
-/* SVN FILE: $Id: error.php 4064 2006-12-04 05:29:12Z phpnut $ */
+/* SVN FILE: $Id: error.php 4202 2006-12-25 12:06:13Z phpnut $ */
/**
* Short description for file.
*
@@ -21,9 +21,9 @@
* @package cake
* @subpackage cake.cake.libs
* @since CakePHP v 0.10.5.1732
- * @version $Revision: 4064 $
+ * @version $Revision: 4202 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-12-03 23:29:12 -0600 (Sun, 03 Dec 2006) $
+ * @lastmodified $Date: 2006-12-25 06:06:13 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
uses('sanitize');
@@ -48,12 +48,15 @@
function __construct($method, $messages) {
parent::__construct();
static $__previousError = null;
- $allow = array('.', '/', '_', ' ', '-');
+ $allow = array('.', '/', '_', ' ', '-', '~');
if(substr(PHP_OS,0,3) == "WIN") {
$allow = array_merge($allow, array('\\', ':') );
}
$clean = new Sanitize();
$messages = $clean->paranoid($messages, $allow);
+ if(!class_exists('Dispatcher')){
+ require CAKE . 'dispatcher.php';
+ }
$this->__dispatch =& new Dispatcher();
if ($__previousError != array($method, $messages)) {
Modified: trunk/plugbase/plugring/cake/libs/file.php
===================================================================
--- trunk/plugbase/plugring/cake/libs/file.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/libs/file.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,5 +1,5 @@
<?php
-/* SVN FILE: $Id: file.php 2963 2006-05-26 17:30:33Z phpnut $ */
+/* SVN FILE: $Id: file.php 4202 2006-12-25 12:06:13Z phpnut $ */
/**
* Convenience class for reading, writing and appending to files.
*
@@ -20,9 +20,9 @@
* @package cake
* @subpackage cake.cake.libs
* @since CakePHP v 0.2.9
- * @version $Revision: 2963 $
+ * @version $Revision: 4202 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-05-26 12:30:33 -0500 (Fri, 26 May 2006) $
+ * @lastmodified $Date: 2006-12-25 06:06:13 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
@@ -193,13 +193,13 @@
if (file_exists($dir) && is_dir($dir) && is_writable($dir) && !$this->exists()) {
if (!touch($this->getFullPath())) {
- print ("[File] Could not create $this->getName()!");
+ print ("[File] Could not create {$this->getName()}!");
return false;
} else {
return true;
}
} else {
- print ("[File] Could not create $this->getName()!");
+ print ("[File] Could not create {$this->getName()}!");
return false;
}
}
Modified: trunk/plugbase/plugring/cake/libs/model/datasources/dbo_source.php
===================================================================
--- trunk/plugbase/plugring/cake/libs/model/datasources/dbo_source.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/libs/model/datasources/dbo_source.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,5 +1,5 @@
<?php
-/* SVN FILE: $Id: dbo_source.php 4064 2006-12-04 05:29:12Z phpnut $ */
+/* SVN FILE: $Id: dbo_source.php 4202 2006-12-25 12:06:13Z phpnut $ */
/**
* Short description for file.
*
@@ -21,9 +21,9 @@
* @package cake
* @subpackage cake.cake.libs.model.datasources
* @since CakePHP v 0.10.0.1076
- * @version $Revision: 4064 $
+ * @version $Revision: 4202 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-12-03 23:29:12 -0600 (Sun, 03 Dec 2006) $
+ * @lastmodified $Date: 2006-12-25 06:06:13 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
@@ -1321,14 +1321,14 @@
$c = 0;
$data = null;
$out = array();
- $bool = array('and', 'or', 'and not', 'or not', 'xor', '||', '&&');
+ $bool = array('and', 'or', 'not', 'and not', 'or not', 'xor', '||', '&&');
$join = ' AND ';
foreach($conditions as $key => $value) {
if (in_array(strtolower(trim($key)), $bool)) {
$join = ' ' . strtoupper($key) . ' ';
$value = $this->conditionKeysToString($value);
- if (strpos($join, 'NOT')) {
+ if (strpos($join, 'NOT') !== false) {
$out[] = 'NOT (' . join(') ' . strtoupper($key) . ' (', $value) . ')';
} else {
$out[] = '(' . join(') ' . strtoupper($key) . ' (', $value) . ')';
Modified: trunk/plugbase/plugring/cake/libs/model/dbo/dbo_postgres.php
===================================================================
--- trunk/plugbase/plugring/cake/libs/model/dbo/dbo_postgres.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/libs/model/dbo/dbo_postgres.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,5 +1,5 @@
<?php
-/* SVN FILE: $Id: dbo_postgres.php 3963 2006-11-25 14:01:03Z phpnut $ */
+/* SVN FILE: $Id: dbo_postgres.php 4202 2006-12-25 12:06:13Z phpnut $ */
/**
* PostgreSQL layer for DBO.
@@ -22,9 +22,9 @@
* @package cake
* @subpackage cake.cake.libs.model.dbo
* @since CakePHP v 0.9.1.114
- * @version $Revision: 3963 $
+ * @version $Revision: 4202 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-11-25 08:01:03 -0600 (Sat, 25 Nov 2006) $
+ * @lastmodified $Date: 2006-12-25 06:06:13 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
@@ -356,6 +356,10 @@
* @return int
*/
function lastInsertId($source, $field = 'id') {
+ if(strpos($this->__descriptions[$source][0]['default'], 'nextval') === false) {
+ return null;
+ }
+
$sql = "SELECT last_value AS max FROM {$source}_{$field}_seq";
$res = $this->rawQuery($sql);
$data = $this->fetchRow($res);
Modified: trunk/plugbase/plugring/cake/libs/model/model_php4.php
===================================================================
--- trunk/plugbase/plugring/cake/libs/model/model_php4.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/libs/model/model_php4.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,5 +1,5 @@
<?php
-/* SVN FILE: $Id: model_php4.php 4050 2006-12-02 03:49:35Z phpnut $ */
+/* SVN FILE: $Id: model_php4.php 4202 2006-12-25 12:06:13Z phpnut $ */
/**
* Object-relational mapper.
*
@@ -21,9 +21,9 @@
* @package cake
* @subpackage cake.cake.libs.model
* @since CakePHP v 0.10.0.0
- * @version $Revision: 4050 $
+ * @version $Revision: 4202 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-12-01 21:49:35 -0600 (Fri, 01 Dec 2006) $
+ * @lastmodified $Date: 2006-12-25 06:06:13 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
@@ -621,7 +621,6 @@
function getColumnType($column) {
$columns = $this->loadInfo();
$columns = $columns->value;
- $db =& ConnectionManager::getDataSource($this->useDbConfig);
$cols = array();
foreach($columns as $col) {
@@ -817,8 +816,9 @@
}
$count++;
}
+ $exists = $this->exists();
- if (empty($this->id) && $this->hasField('created') && !in_array('created', $fields) && ($whitelist && in_array('created', $fieldList) || !$whitelist)) {
+ if (!$exists && $this->hasField('created') && !in_array('created', $fields) && ($whitelist && in_array('created', $fieldList) || !$whitelist)) {
$fields[] = 'created';
$values[] = date('Y-m-d H:i:s');
}
@@ -833,7 +833,7 @@
$values[] = date('Y-m-d H:i:s');
}
- if (!$this->exists()) {
+ if (!$exists) {
$this->id = false;
}
@@ -959,7 +959,7 @@
$id = $this->id;
- if ($this->beforeDelete()) {
+ if ($this->exists() && $this->beforeDelete()) {
$db =& ConnectionManager::getDataSource($this->useDbConfig);
if ($this->id && $db->delete($this)) {
@@ -1146,7 +1146,10 @@
'order' => $order
);
- if (!$this->beforeFind($queryData)) {
+ $ret = $this->beforeFind($queryData);
+ if (is_array($ret)) {
+ $queryData = $ret;
+ } elseif ($ret === false) {
return null;
}
@@ -1612,8 +1615,8 @@
if (defined('CACHE_CHECK') && CACHE_CHECK === true) {
$assoc[] = strtolower(Inflector::pluralize($this->name));
- foreach($this->__associations as $key => $asscociation) {
- foreach($this->$asscociation as $key => $className) {
+ foreach($this->__associations as $key => $association) {
+ foreach($this->$association as $key => $className) {
$check = strtolower(Inflector::pluralize($className['className']));
if (!in_array($check, $assoc)) {
Modified: trunk/plugbase/plugring/cake/libs/model/model_php5.php
===================================================================
--- trunk/plugbase/plugring/cake/libs/model/model_php5.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/libs/model/model_php5.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,5 +1,5 @@
<?php
-/* SVN FILE: $Id: model_php5.php 4050 2006-12-02 03:49:35Z phpnut $ */
+/* SVN FILE: $Id: model_php5.php 4202 2006-12-25 12:06:13Z phpnut $ */
/**
* Object-relational mapper.
*
@@ -21,9 +21,9 @@
* @package cake
* @subpackage cake.cake.libs.model
* @since CakePHP v 0.10.0.0
- * @version $Revision: 4050 $
+ * @version $Revision: 4202 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-12-01 21:49:35 -0600 (Fri, 01 Dec 2006) $
+ * @lastmodified $Date: 2006-12-25 06:06:13 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
@@ -614,7 +614,6 @@
function getColumnType($column) {
$columns = $this->loadInfo();
$columns = $columns->value;
- $db =& ConnectionManager::getDataSource($this->useDbConfig);
$cols = array();
foreach($columns as $col) {
@@ -811,8 +810,9 @@
}
$count++;
}
+ $exists = $this->exists();
- if (empty($this->id) && $this->hasField('created') && !in_array('created', $fields) && ($whitelist && in_array('created', $fieldList) || !$whitelist)) {
+ if (!$exists && $this->hasField('created') && !in_array('created', $fields) && ($whitelist && in_array('created', $fieldList) || !$whitelist)) {
$fields[] = 'created';
$values[] = date('Y-m-d H:i:s');
}
@@ -827,7 +827,7 @@
$values[] = date('Y-m-d H:i:s');
}
- if (!$this->exists()) {
+ if (!$exists) {
$this->id = false;
}
@@ -953,7 +953,7 @@
$id = $this->id;
- if ($this->beforeDelete()) {
+ if ($this->exists() && $this->beforeDelete()) {
$db =& ConnectionManager::getDataSource($this->useDbConfig);
if ($this->id && $db->delete($this)) {
@@ -1140,7 +1140,10 @@
'order' => $order
);
- if (!$this->beforeFind($queryData)) {
+ $ret = $this->beforeFind($queryData);
+ if (is_array($ret)) {
+ $queryData = $ret;
+ } elseif ($ret === false) {
return null;
}
@@ -1606,8 +1609,8 @@
if (defined('CACHE_CHECK') && CACHE_CHECK === true) {
$assoc[] = strtolower(Inflector::pluralize($this->name));
- foreach($this->__associations as $key => $asscociation) {
- foreach($this->$asscociation as $key => $className) {
+ foreach($this->__associations as $key => $association) {
+ foreach($this->$association as $key => $className) {
$check = strtolower(Inflector::pluralize($className['className']));
if (!in_array($check, $assoc)) {
Modified: trunk/plugbase/plugring/cake/libs/router.php
===================================================================
--- trunk/plugbase/plugring/cake/libs/router.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/libs/router.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,5 +1,5 @@
<?php
-/* SVN FILE: $Id: router.php 4050 2006-12-02 03:49:35Z phpnut $ */
+/* SVN FILE: $Id: router.php 4202 2006-12-25 12:06:13Z phpnut $ */
/**
* Parses the request URL into controller, action, and parameters.
*
@@ -19,9 +19,9 @@
* @package cake
* @subpackage cake.cake.libs
* @since CakePHP v 0.2.9
- * @version $Revision: 4050 $
+ * @version $Revision: 4202 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-12-01 21:49:35 -0600 (Fri, 01 Dec 2006) $
+ * @lastmodified $Date: 2006-12-25 06:06:13 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
@@ -184,7 +184,16 @@
$out[$names[$ii]] = $found;
} else {
// unnamed elements go in as 'pass'
- $out['pass'] = array_filter(explode('/', $found));
+ $found = explode('/', $found);
+ $pass = array();
+ foreach($found as $key => $value) {
+ if ($value == "0") {
+ $pass[$key] = $value;
+ } elseif ($value) {
+ $pass[$key] = $value;
+ }
+ }
+ $out['pass'] = $pass;
}
$ii++;
}
Modified: trunk/plugbase/plugring/cake/libs/view/helper.php
===================================================================
--- trunk/plugbase/plugring/cake/libs/view/helper.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/libs/view/helper.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,5 +1,5 @@
<?php
-/* SVN FILE: $Id: helper.php 4050 2006-12-02 03:49:35Z phpnut $ */
+/* SVN FILE: $Id: helper.php 4202 2006-12-25 12:06:13Z phpnut $ */
/**
* Backend for helpers.
*
@@ -21,9 +21,9 @@
* @package cake
* @subpackage cake.cake.libs.view
* @since CakePHP v 0.2.9
- * @version $Revision: 4050 $
+ * @version $Revision: 4202 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-12-01 21:49:35 -0600 (Fri, 01 Dec 2006) $
+ * @lastmodified $Date: 2006-12-25 06:06:13 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
@@ -69,7 +69,7 @@
'blockend' => '</div>',
'css' => '<link rel="%s" type="text/css" href="%s" %s/>',
'style' => '<style type="text/css"%s>%s</style>',
- 'charset' => '<meta http-equiv="Content-Type" content="text/html, charset=%s" />',
+ 'charset' => '<meta http-equiv="Content-Type" content="text/html; charset=%s" />',
'javascriptblock' => '<script type="text/javascript">%s</script>',
'javascriptlink' => '<script type="text/javascript" src="%s"></script>');
/**
Modified: trunk/plugbase/plugring/cake/libs/view/helpers/html.php
===================================================================
--- trunk/plugbase/plugring/cake/libs/view/helpers/html.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/libs/view/helpers/html.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,5 +1,5 @@
<?php
-/* SVN FILE: $Id: html.php 4050 2006-12-02 03:49:35Z phpnut $ */
+/* SVN FILE: $Id: html.php 4205 2006-12-25 12:36:03Z phpnut $ */
/**
* Html Helper class file.
*
@@ -19,9 +19,9 @@
* @package cake
* @subpackage cake.cake.libs.view.helpers
* @since CakePHP v 0.9.1
- * @version $Revision: 4050 $
+ * @version $Revision: 4205 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-12-01 21:49:35 -0600 (Fri, 01 Dec 2006) $
+ * @lastmodified $Date: 2006-12-25 06:36:03 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
@@ -178,7 +178,7 @@
$htmlAttributes['onclick']="return confirm('{$confirmMessage}');";
}
- if (((strpos($url, '://')) || (strpos($url, 'javascript:') === 0) || (strpos($url, 'mailto:') === 0))) {
+ if (((strpos($url, '://')) || (strpos($url, 'javascript:') === 0) || (strpos($url, 'mailto:') === 0) || $url{0} == '#')) {
$output = sprintf($this->tags['link'], $url, $this->_parseAttributes($htmlAttributes), $title);
} else {
$output = sprintf($this->tags['link'], $this->url($url, true), $this->_parseAttributes($htmlAttributes), $title);
@@ -528,11 +528,10 @@
* @access public
*/
function dayOptionTag($tagName, $value = null, $selected = null, $selectAttr = null, $optionAttr = null, $showEmpty = true) {
- if (empty($selected) && ($this->tagValue($tagName))) {
+ if (empty($selected) && $this->tagValue($tagName)) {
$selected = date('d', strtotime($this->tagValue($tagName)));
}
-
- $dayValue = empty($selected) ? ($showEmpty ? NULL : date('d')) : $selected;
+ $dayValue = empty($selected) ? ($showEmpty == true ? NULL : date('d')) : $selected;
$days = array('01' => '1', '02' => '2', '03' => '3', '04' => '4', '05' => '5', '06' => '6', '07' => '7', '08' => '8', '09' => '9', '10' => '10', '11' => '11', '12' => '12', '13' => '13', '14' => '14', '15' => '15', '16' => '16', '17' => '17', '18' => '18', '19' => '19', '20' => '20', '21' => '21', '22' => '22', '23' => '23', '24' => '24', '25' => '25', '26' => '26', '27' => '27', '28' => '28', '29' => '29', '30' => '30', '31' => '31');
$option = $this->selectTag($tagName . "_day", $days, $dayValue, $selectAttr, $optionAttr, $showEmpty);
return $option;
@@ -614,12 +613,11 @@
$selected = date('g', strtotime($this->tagValue($tagName)));
}
}
-
if ($format24Hours) {
- $hourValue = !isset($selected) ? ($showEmpty ? NULL : date('H')) : $selected;
+ $hourValue = empty($selected) ? ($showEmpty ? NULL : date('H')) : $selected;
} else {
- $hourValue = !isset($selected) ? ($showEmpty ? NULL : date('g')) : $selected;
- if (intval($hourValue) == 0) {
+ $hourValue = empty($selected) ? ($showEmpty ? NULL : date('g')) : $selected;
+ if (isset($selected) && intval($hourValue) == 0 && !$showEmpty) {
$hourValue = 12;
}
}
@@ -630,7 +628,8 @@
$hours = array('01' => '1', '02' => '2', '03' => '3', '04' => '4', '05' => '5', '06' => '6', '07' => '7', '08' => '8', '09' => '9', '10' => '10', '11' => '11', '12' => '12');
}
- return $this->selectTag($tagName . "_hour", $hours, $hourValue, $selectAttr, $optionAttr, $showEmpty);
+ $option = $this->selectTag($tagName . "_hour", $hours, $hourValue, $selectAttr, $optionAttr, $showEmpty);
+ return $option;
}
/**
* Returns a SELECT element for minutes.
@@ -646,7 +645,7 @@
if (empty($selected) && ($this->tagValue($tagName))) {
$selected = date('i', strtotime($this->tagValue($tagName)));
}
- $minValue = !isset($selected) ? ($showEmpty ? NULL : date('i')) : $selected;
+ $minValue = empty($selected) ? ($showEmpty ? NULL : date('i')) : $selected;
for($minCount = 0; $minCount < 60; $minCount++) {
$mins[sprintf('%02d', $minCount)] = sprintf('%02d', $minCount);
Modified: trunk/plugbase/plugring/cake/libs/view/view.php
===================================================================
--- trunk/plugbase/plugring/cake/libs/view/view.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/libs/view/view.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,5 +1,5 @@
<?php
-/* SVN FILE: $Id: view.php 4064 2006-12-04 05:29:12Z phpnut $ */
+/* SVN FILE: $Id: view.php 4202 2006-12-25 12:06:13Z phpnut $ */
/**
* Methods for displaying presentation data in the view.
*
@@ -20,9 +20,9 @@
* @package cake
* @subpackage cake.cake.libs.view
* @since CakePHP v 0.10.0.1076
- * @version $Revision: 4064 $
+ * @version $Revision: 4202 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-12-03 23:29:12 -0600 (Sun, 03 Dec 2006) $
+ * @lastmodified $Date: 2006-12-25 06:06:13 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
@@ -357,7 +357,7 @@
* @access public
*/
function element($name, $params = array()) {
- return $this->renderElement($name, $params = array());
+ return $this->renderElement($name, $params);
}
/**
* Renders a layout. Returns output from _render(). Returns false on error.
Modified: trunk/plugbase/plugring/cake/scripts/acl.php
===================================================================
--- trunk/plugbase/plugring/cake/scripts/acl.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/scripts/acl.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,6 +1,6 @@
#!/usr/bin/php -q
<?php
-/* SVN FILE: $Id: acl.php 3815 2006-11-03 06:43:06Z phpnut $ */
+/* SVN FILE: $Id: acl.php 4202 2006-12-25 12:06:13Z phpnut $ */
/**
* Short description for file.
*
@@ -22,9 +22,9 @@
* @package cake
* @subpackage cake.cake.scripts
* @since CakePHP v 0.10.0.1232
- * @version $Revision: 3815 $
+ * @version $Revision: 4202 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-11-03 00:43:06 -0600 (Fri, 03 Nov 2006) $
+ * @lastmodified $Date: 2006-12-25 06:06:13 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
@@ -38,21 +38,29 @@
$root = dirname(dirname(dirname(__FILE__)));
$here = $argv[0];
$dataSource = 'default';
-
+ $unset = array();
for ($i = 1; $i < count($argv); $i++) {
// Process command-line modifiers here
switch (strtolower($argv[$i])) {
case '-app':
$app = $argv[$i + 1];
+ $unset[$i] = $argv[$i];
+ $unset[$i + 1] = $argv[$i + 1];
break;
case '-core':
$core = $argv[$i + 1];
+ $unset[$i] = $argv[$i];
+ $unset[$i + 1] = $argv[$i + 1];
break;
case '-root':
$root = $argv[$i + 1];
+ $unset[$i] = $argv[$i];
+ $unset[$i + 1] = $argv[$i + 1];
break;
case '-datasource':
$dataSource = $argv[$i + 1];
+ $unset[$i] = $argv[$i];
+ $unset[$i + 1] = $argv[$i + 1];
break;
}
}
@@ -84,20 +92,18 @@
require ('cake'.DS.'basics.php');
require ('cake'.DS.'config'.DS.'paths.php');
require (CONFIGS.'core.php');
-
- if (file_exists( CONFIGS.'database.php' )) {
- require_once (CONFIGS.'database.php');
- } else {
- die("Unable to find /app/config/database.php. Please create it before continuing.\n\n");
- }
- uses ('object', 'neat_array', 'session', 'security', 'inflector', 'model'.DS.'connection_manager',
+ uses ('object', 'configure', 'neat_array', 'session', 'security', 'inflector', 'model'.DS.'connection_manager',
'model'.DS.'datasources'.DS.'dbo_source', 'model'.DS.'model');
require(CAKE.'app_model.php');
uses ('controller'.DS.'components'.DS.'acl', 'controller'.DS.'components'.DS.'dbacl'.DS.'models'.DS.'aclnode',
'controller'.DS.'components'.DS.'dbacl'.DS.'models'.DS.'aco', 'controller'.DS.'components'.DS.'dbacl'.DS.'models'.DS.'acoaction',
'controller'.DS.'components'.DS.'dbacl'.DS.'models'.DS.'aro');
//Get and format args: first arg is the name of the script.
- $serverArgs = env('argv');
+ $serverArgs = $argv;
+ if(!empty($unset)) {
+ $serverArgs = array_values(array_diff($argv, $unset));
+ }
+
$wasted = array_shift($serverArgs);
$command = array_shift($serverArgs);
$args = $serverArgs;
@@ -160,11 +166,6 @@
* @param unknown_type $args
*/
function __construct ($command, $args) {
- $this->dataSource = DATASOURCE;
- $acl = new AclComponent();
- $this->acl = $acl->getACL();
- $this->args = $args;
- $this->db =& ConnectionManager::getDataSource($this->dataSource);
$this->stdin = fopen('php://stdin', 'r');
$this->stdout = fopen('php://stdout', 'w');
$this->stderr = fopen('php://stderr', 'w');
@@ -181,6 +182,23 @@
fwrite($this->stderr, $out);
exit();
}
+
+ if(!in_array($command, array('help'))) {
+ if(!file_exists(CONFIGS.'database.php')) {
+ $this->stdout('');
+ $this->stdout('Your database configuration was not found.');
+ $this->stdout('Take a moment to create one:');
+ $this->doDbConfig();
+ }
+ require_once (CONFIGS.'database.php');
+
+ if(!in_array($command, array('initdb'))) {
+ $this->dataSource = DATASOURCE;
+ $this->Acl = new AclComponent();
+ $this->args = $args;
+ $this->db =& ConnectionManager::getDataSource($this->dataSource);
+ }
+ }
switch ($command) {
case 'create':
@@ -217,7 +235,8 @@
$this->help();
break;
default:
- fwrite($this->stderr, "Unknown ACL command '$command'.\nFor usage, try 'php acl.php help'.\n\n");
+ break;
+ //fwrite($this->stderr, "Unknown ACL command '$command'.\nFor usage, try 'php acl.php help'.\n\n");
}
}
/**
@@ -228,14 +247,12 @@
$this->checkArgNumber(4, 'create');
$this->checkNodeType();
extract($this->__dataVars());
- $node = &new $class;
-
- $parent = intval($this->args[2]);
-
- if(!$node->create(intval($this->args[1]), $parent, $this->args[3])){
- $this->displayError("Parent Node Not Found", "There was an error creating the Aro, probably couldn't find the parent node.\n If you wish to create a new root node, specify the parent ID as '0'.");
+
+ $parent = (is_numeric($this->args[2])) ? intval($this->args[2]) : $this->args[2];
+ if(!$this->Acl->{$class}->create(intval($this->args[1]), $parent, $this->args[3])){
+ $this->displayError("Parent Node Not Found", "There was an error creating the ".$class.", probably couldn't find the parent node.\n If you wish to create a new root node, specify the <parent_id> as '0'.");
}
- fwrite($this->stdout, "New $class '".$this->args[3]."' created.\n\n");
+ $this->stdout("New $class '".$this->args[3]."' created.\n\n");
}
/**
* Enter description here...
@@ -245,10 +262,8 @@
$this->checkArgNumber(2, 'delete');
$this->checkNodeType();
extract($this->__dataVars());
- $node = &new $class;
- //What about children
- //$node->del($this->args[1])
- //fwrite($this->stdout, "$class deleted.\n\n");
+ $this->Acl->{$class}->del($this->args[1]);
+ $this->stdout("$class deleted.\n\n");
}
/**
@@ -259,12 +274,10 @@
$this->checkArgNumber(3, 'setParent');
$this->checkNodeType();
extract($this->__dataVars());
- $node = &new $class;
-
- if (!$node->setParent($this->args[2], $this->args[1])){
- fwrite($this->stdout, "Error in setting new parent. Please make sure the parent node exists, and is not a descendant of the node specified.\n");
+ if (!$this->Acl->{$class}->setParent($this->args[2], $this->args[1])){
+ $this->stdout("Error in setting new parent. Please make sure the parent node exists, and is not a descendant of the node specified.\n");
} else {
- fwrite($this->stdout, "Node parent set to ".$this->args[2]."\n\n");
+ $this->stdout("Node parent set to ".$this->args[2]."\n\n");
}
}
/**
@@ -280,11 +293,11 @@
if (!$suppliedNode) {
$this->displayError("Supplied Node '".$args[1]."' not found. No tree returned.");
}
- $node = &new $class;
- $nodes = $node->getPath(intval($this->args[1]));
+ $id = (is_numeric($this->args[2])) ? intval($this->args[1]) : $this->args[1];
+ $nodes = $this->Acl->{$class}->getPath($id);
for ($i = 0; $i < count($nodes); $i++) {
- fwrite($this->stdout, str_repeat(' ', $i) . "[" . $nodes[$i][$class]['id'] . "]" . $nodes[$i][$class]['alias'] . "\n");
+ $this->stdout(str_repeat(' ', $i) . "[" . $nodes[$i][$class]['id'] . "]" . $nodes[$i][$class]['alias'] . "\n");
}
}
/**
@@ -294,8 +307,10 @@
function grant() {
$this->checkArgNumber(3, 'grant');
//add existence checks for nodes involved
- $this->acl->allow(intval($this->args[0]), intval($this->args[1]), $this->args[2]);
- fwrite($this->stdout, "Permission granted.\n");
+ $aro = (is_numeric($this->args[0])) ? intval($this->args[0]) : $this->args[0];
+ $aco = (is_numeric($this->args[1])) ? intval($this->args[1]) : $this->args[1];
+ $this->Acl->allow($aro, $aco, $this->args[2]);
+ $this->stdout("Permission granted.\n");
}
/**
* Enter description here...
@@ -304,28 +319,32 @@
function deny() {
$this->checkArgNumber(3, 'deny');
//add existence checks for nodes involved
- $this->acl->deny(intval($this->args[0]), intval($this->args[1]), $this->args[2]);
- fwrite($this->stdout, "Requested permission successfully denied.\n");
+ $aro = (is_numeric($this->args[0])) ? intval($this->args[0]) : $this->args[0];
+ $aco = (is_numeric($this->args[1])) ? intval($this->args[1]) : $this->args[1];
+ $this->Acl->allow($aro, $aco, $this->args[2]);
+ $this->stdout("Requested permission successfully denied.\n");
}
/**
* Enter description here...
*
*/
- function inherit() {}
+ function inherit() {
+ $this->stdout("not implemented. sorry.\n");
+ }
/**
* Enter description here...
*
*/
function view() {
- $this->checkArgNumber(1, 'view');
+ $this->checkArgNumber(2, 'view');
$this->checkNodeType();
extract($this->__dataVars());
- $node = &new $class;
- $nodes = $node->findAll(null, null, 'lft ASC');
+ $conditions = $this->Acl->{$class}->_resolveID($this->args[1]);
+ $nodes = $this->Acl->{$class}->findAll($conditions, null, 'lft ASC');
$right = array();
- fwrite($this->stdout, $class . " tree:\n");
- fwrite($this->stdout, "------------------------------------------------\n");
+ $this->stdout($class . " tree:\n");
+ $this->stdout("------------------------------------------------\n");
for($i = 0; $i < count($nodes); $i++){
if (count($right) > 0){
@@ -337,10 +356,10 @@
}
}
}
- fwrite($this->stdout, str_repeat(' ',count($right)) . "[" . $nodes[$i][$class]['id'] . "]" . $nodes[$i][$class]['alias']."\n");
+ $this->stdout(str_repeat(' ',count($right)) . "[" . $nodes[$i][$class]['id'] . "]" . $nodes[$i][$class]['alias']."\n");
$right[] = $nodes[$i][$class]['rght'];
}
- fwrite($this->stdout, "------------------------------------------------\n");
+ $this->stdout("------------------------------------------------\n");
}
/**
* Enter description here...
@@ -348,8 +367,8 @@
*/
function initdb() {
$db =& ConnectionManager::getDataSource($this->dataSource);
- fwrite($this->stdout, "Initializing Database...\n");
- fwrite($this->stdout, "Creating access control objects table (acos)...\n");
+ $this->stdout("Initializing Database...\n");
+ $this->stdout("Creating access control objects table (acos)...\n");
$sql = " CREATE TABLE ".$db->fullTableName('acos')." (
".$db->name('id')." ".$db->column($db->columns['primary_key']).",
".$db->name('object_id')." ".$db->column($db->columns['integer'])." default NULL,
@@ -362,7 +381,7 @@
die("Error: " . $db->lastError() . "\n\n");
}
- fwrite($this->stdout, "Creating access request objects table (aros)...\n");
+ $this->stdout("Creating access request objects table (aros)...\n");
$sql2 = "CREATE TABLE ".$db->fullTableName('aros')." (
".$db->name('id')." ".$db->column($db->columns['primary_key']).",
".$db->name('foreign_key')." ".$db->column($db->columns['integer'])." default NULL,
@@ -375,7 +394,7 @@
die("Error: " . $db->lastError() . "\n\n");
}
- fwrite($this->stdout, "Creating relationships table (aros_acos)...\n");
+ $this->stdout("Creating relationships table (aros_acos)...\n");
$sql3 = "CREATE TABLE ".$db->fullTableName('aros_acos')." (
".$db->name('id')." ".$db->column($db->columns['primary_key']).",
".$db->name('aro_id')." ".$db->column($db->columns['integer'])." default NULL,
@@ -390,7 +409,7 @@
die("Error: " . $db->lastError() . "\n\n");
}
- fwrite($this->stdout, "\nDone.\n");
+ $this->stdout("\nDone.\n");
}
/**
@@ -399,8 +418,8 @@
*/
function upgradedb() {
$db =& ConnectionManager::getDataSource($this->dataSource);
- fwrite($this->stdout, "Initializing Database...\n");
- fwrite($this->stdout, "Upgrading table (aros)...\n");
+ $this->stdout("Initializing Database...\n");
+ $this->stdout("Upgrading table (aros)...\n");
$sql = "ALTER TABLE ".$db->fullTableName('aros')."
CHANGE ".$db->name('user_id')."
".$db->name('foreign_key')."
@@ -409,7 +428,7 @@
if ($db->query($sql) === false) {
die("Error: " . $db->lastError() . "\n\n");
}
- fwrite($this->stdout, "\nDatabase upgrade is complete.\n");
+ $this->stdout("\nDatabase upgrade is complete.\n");
}
/**
@@ -422,11 +441,11 @@
$out .= "Commands:\n";
$out .= "\n";
$out .= "\tcreate aro|aco <link_id> <parent_id> <alias>\n";
- $out .= "\t\tCreates a new ACL object under the parent specified by parent_id (see\n";
- $out .= "\t\t'view'). The link_id allows you to link a current user object to Cake's\n";
- $out .= "\t\tACL structures. The alias parameter allows you address your object\n";
- $out .= "\t\tusing a non-integer ID. Example: \"\$php acl.php create aro 0 jda57 John\"\n";
- $out .= "\t\twould create a new ARO object at the root of the tree, linked to jda57\n";
+ $out .= "\t\tCreates a new ACL object under the parent specified by <parent_id>, an id/alias (see\n";
+ $out .= "\t\t'view'). The link_id allows you to link a user object to Cake's\n";
+ $out .= "\t\tACL structures. The alias parameter allows you to address your object\n";
+ $out .= "\t\tusing a non-integer ID. Example: \"\$php acl.php create aro 57 0 John\"\n";
+ $out .= "\t\twould create a new ARO object at the root of the tree, linked to 57\n";
$out .= "\t\tin your users table, with an internal alias 'John'.";
$out .= "\n";
$out .= "\n";
@@ -476,7 +495,7 @@
$out .= "\t\tDisplays this help message.\n";
$out .= "\n";
$out .= "\n";
- fwrite($this->stdout, $out);
+ $this->stdout($out);
}
/**
* Enter description here...
@@ -489,7 +508,7 @@
$out .= "Error: $title\n";
$out .= "$msg\n";
$out .= "\n";
- fwrite($this->stdout, $out);
+ $this->stdout($out);
exit();
}
@@ -521,10 +540,9 @@
* @return unknown
*/
function nodeExists($type, $id) {
- //fwrite($this->stdout, "Check to see if $type with ID = $id exists...\n");
+ //$this->stdout("Check to see if $type with ID = $id exists...\n");
extract($this->__dataVars($type));
- $node = &new $class;
- $possibility = $node->find('id = ' . $id);
+ $possibility = $this->Acl->{$class}->find('id = ' . $id);
if (empty($possibility[$class]['id'])) {
return false;
@@ -552,5 +570,235 @@
$vars['class'] = $class;
return $vars;
}
+/**
+ * Database configuration setup.
+ *
+ */
+ function doDbConfig() {
+ $this->hr();
+ $this->stdout('Database Configuration:');
+ $this->hr();
+
+ $driver = '';
+
+ while ($driver == '') {
+ $driver = $this->getInput('What database driver would you like to use?', array('mysql','mysqli','mssql','sqlite','postgres', 'odbc'), 'mysql');
+ if ($driver == '') {
+ $this->stdout('The database driver supplied was empty. Please supply a database driver.');
+ }
+ }
+
+ switch($driver) {
+ case 'mysql':
+ $connect = 'mysql_connect';
+ break;
+ case 'mysqli':
+ $connect = 'mysqli_connect';
+ break;
+ case 'mssql':
+ $connect = 'mssql_connect';
+ break;
+ case 'sqlite':
+ $connect = 'sqlite_open';
+ break;
+ case 'postgres':
+ $connect = 'pg_connect';
+ break;
+ case 'odbc':
+ $connect = 'odbc_connect';
+ break;
+ default:
+ $this->stdout('The connection parameter could not be set.');
+ break;
+ }
+
+ $host = '';
+
+ while ($host == '') {
+ $host = $this->getInput('What is the hostname for the database server?', null, 'localhost');
+ if ($host == '') {
+ $this->stdout('The host name you supplied was empty. Please supply a hostname.');
+ }
+ }
+ $login = '';
+
+ while ($login == '') {
+ $login = $this->getInput('What is the database username?', null, 'root');
+
+ if ($login == '') {
+ $this->stdout('The database username you supplied was empty. Please try again.');
+ }
+ }
+ $password = '';
+ $blankPassword = false;
+
+ while ($password == '' && $blankPassword == false) {
+ $password = $this->getInput('What is the database password?');
+ if ($password == '') {
+ $blank = $this->getInput('The password you supplied was empty. Use an empty password?', array('y', 'n'), 'n');
+ if($blank == 'y')
+ {
+ $blankPassword = true;
+ }
+ }
+ }
+ $database = '';
+
+ while ($database == '') {
+ $database = $this->getInput('What is the name of the database you will be using?', null, 'cake');
+
+ if ($database == '') {
+ $this->stdout('The database name you supplied was empty. Please try again.');
+ }
+ }
+
+ $prefix = '';
+
+ while ($prefix == '') {
+ $prefix = $this->getInput('Enter a table prefix?', null, 'n');
+ }
+ if(low($prefix) == 'n') {
+ $prefix = '';
+ }
+
+ $this->stdout('');
+ $this->hr();
+ $this->stdout('The following database configuration will be created:');
+ $this->hr();
+ $this->stdout("Driver: $driver");
+ $this->stdout("Connection: $connect");
+ $this->stdout("Host: $host");
+ $this->stdout("User: $login");
+ $this->stdout("Pass: " . str_repeat('*', strlen($password)));
+ $this->stdout("Database: $database");
+ $this->stdout("Table prefix: $prefix");
+ $this->hr();
+ $looksGood = $this->getInput('Look okay?', array('y', 'n'), 'y');
+
+ if (low($looksGood) == 'y' || low($looksGood) == 'yes') {
+ $this->bakeDbConfig($driver, $connect, $host, $login, $password, $database, $prefix);
+ } else {
+ $this->stdout('Bake Aborted.');
+ }
+ }
+/**
+ * Creates a database configuration file for Bake.
+ *
+ * @param string $host
+ * @param string $login
+ * @param string $password
+ * @param string $database
+ */
+ function bakeDbConfig( $driver, $connect, $host, $login, $password, $database, $prefix) {
+ $out = "<?php\n";
+ $out .= "class DATABASE_CONFIG {\n\n";
+ $out .= "\tvar \$default = array(\n";
+ $out .= "\t\t'driver' => '{$driver}',\n";
+ $out .= "\t\t'connect' => '{$connect}',\n";
+ $out .= "\t\t'host' => '{$host}',\n";
+ $out .= "\t\t'login' => '{$login}',\n";
+ $out .= "\t\t'password' => '{$password}',\n";
+ $out .= "\t\t'database' => '{$database}', \n";
+ $out .= "\t\t'prefix' => '{$prefix}' \n";
+ $out .= "\t);\n";
+ $out .= "}\n";
+ $out .= "?>";
+ $filename = CONFIGS.'database.php';
+ $this->__createFile($filename, $out);
+ }
+/**
+ * Prompts the user for input, and returns it.
+ *
+ * @param string $prompt Prompt text.
+ * @param mixed $options Array or string of options.
+ * @param string $default Default input value.
+ * @return Either the default value, or the user-provided input.
+ */
+ function getInput($prompt, $options = null, $default = null) {
+ if (!is_array($options)) {
+ $print_options = '';
+ } else {
+ $print_options = '(' . implode('/', $options) . ')';
+ }
+
+ if($default == null) {
+ $this->stdout('');
+ $this->stdout($prompt . " $print_options \n" . '> ', false);
+ } else {
+ $this->stdout('');
+ $this->stdout($prompt . " $print_options \n" . "[$default] > ", false);
+ }
+ $result = trim(fgets($this->stdin));
+
+ if($default != null && empty($result)) {
+ return $default;
+ } else {
+ return $result;
+ }
+ }
+/**
+ * Outputs to the stdout filehandle.
+ *
+ * @param string $string String to output.
+ * @param boolean $newline If true, the outputs gets an added newline.
+ */
+ function stdout($string, $newline = true) {
+ if ($newline) {
+ fwrite($this->stdout, $string . "\n");
+ } else {
+ fwrite($this->stdout, $string);
+ }
+ }
+/**
+ * Outputs to the stderr filehandle.
+ *
+ * @param string $string Error text to output.
+ */
+ function stderr($string) {
+ fwrite($this->stderr, $string);
+ }
+/**
+ * Outputs a series of minus characters to the standard output, acts as a visual separator.
+ *
+ */
+ function hr() {
+ $this->stdout('---------------------------------------------------------------');
+ }
+/**
+ * Creates a file at given path.
+ *
+ * @param string $path Where to put the file.
+ * @param string $contents Content to put in the file.
+ * @return Success
+ */
+ function __createFile ($path, $contents) {
+ $path = str_replace('//', '/', $path);
+ echo "\nCreating file $path\n";
+ if (is_file($path) && $this->interactive === true) {
+ fwrite($this->stdout, "File exists, overwrite?" . " {$path} (y/n/q):");
+ $key = trim(fgets($this->stdin));
+
+ if ($key=='q') {
+ fwrite($this->stdout, "Quitting.\n");
+ exit;
+ } elseif ($key == 'a') {
+ $this->dont_ask = true;
+ } elseif ($key == 'y') {
+ } else {
+ fwrite($this->stdout, "Skip" . " {$path}\n");
+ return false;
+ }
+ }
+
+ if ($f = fopen($path, 'w')) {
+ fwrite($f, $contents);
+ fclose($f);
+ fwrite($this->stdout, "Wrote" . "{$path}\n");
+ return true;
+ } else {
+ fwrite($this->stderr, "Error! Could not write to" . " {$path}.\n");
+ return false;
+ }
+ }
}
?>
\ No newline at end of file
Modified: trunk/plugbase/plugring/cake/scripts/bake.php
===================================================================
--- trunk/plugbase/plugring/cake/scripts/bake.php 2006-12-31 14:26:01 UTC (rev 385)
+++ trunk/plugbase/plugring/cake/scripts/bake.php 2007-01-15 20:20:58 UTC (rev 386)
@@ -1,6 +1,6 @@
#!/usr/bin/php -q
<?php
-/* SVN FILE: $Id: bake.php 4043 2006-12-01 02:47:40Z phpnut $ */
+/* SVN FILE: $Id: bake.php 4202 2006-12-25 12:06:13Z phpnut $ */
/**
* Command-line code generation utility to automate programmer chores.
*
@@ -24,9 +24,9 @@
* @package cake
* @subpackage cake.cake.scripts.bake
* @since CakePHP v 0.10.0.1232
- * @version $Revision: 4043 $
+ * @version $Revision: 4202 $
* @modifiedby $LastChangedBy: phpnut $
- * @lastmodified $Date: 2006-11-30 20:47:40 -0600 (Thu, 30 Nov 2006) $
+ * @lastmodified $Date: 2006-12-25 06:06:13 -0600 (Mon, 25 Dec 2006) $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
define ('DS', DIRECTORY_SEPARATOR);
@@ -104,10 +104,14 @@
define ('ROOT', $rootDir);
define ('APP_DIR', $appDir);
+ define ('DEBUG', 1);
+
+ if(!empty($core)){
+ define('CAKE_CORE_INCLUDE_PATH', dirname($core));
+ }else{
+ define('CAKE_CORE_INCLUDE_PATH', $root);
+ }
- define ('DEBUG', 1);;
- define('CAKE_CORE_INCLUDE_PATH', $root);
-
if(function_exists('ini_set')) {
ini_set('include_path',ini_get('include_path').
PATH_SEPARATOR.CAKE_CORE_INCLUDE_PATH.DS.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <tec...@us...> - 2006-12-31 14:26:04
|
Revision: 385
http://farplugins.svn.sourceforge.net/farplugins/?rev=385&view=rev
Author: techtonik
Date: 2006-12-31 06:26:01 -0800 (Sun, 31 Dec 2006)
Log Message:
-----------
* markup fixes
Modified Paths:
--------------
trunk/farplugins/index.php
Modified: trunk/farplugins/index.php
===================================================================
--- trunk/farplugins/index.php 2006-12-31 12:17:05 UTC (rev 384)
+++ trunk/farplugins/index.php 2006-12-31 14:26:01 UTC (rev 385)
@@ -18,11 +18,11 @@
}
?>
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="alternate" type="application/rss+xml" title="RSS feed" href="?farplugins.xml" />
+ <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
+ <link rel="alternate" type="application/rss+xml" title="RSS feed" href="http://feeds.feedburner.com/farpluginsNews"/>
<title>FarPlugins</title>
<!-- <meta http-equiv="refresh" content="30;url=http://farplugins.sf.net/wiki/"> -->
<style type="text/css"><!--
@@ -45,11 +45,11 @@
<body bgcolor="#FFFFFF" text="#000000" link="#000099" vlink="#330066" alink="#FF0000">
<table width="100%" border="0" summary="farplugins header" class="siteheader">
<tr>
- <td width="210" style="border:0"><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=52167&type=5" width="210" height="62" border="0" alt="SourceForge Logo" align="left"></a></td>
+ <td width="210" style="border:0"><a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.php?group_id=52167&type=5" width="210" height="62" border="0" alt="SourceForge Logo" align="left"/></a></td>
<td align="center" style="background-color: gray; color: white">
<h1>Open Source Far Plugins</h1>
</td>
- <td style="background-color: #FFFF99;"><h2><a href="http://farplugins.sourceforge.net/wiki/">Proceed to <br/>Far Wiki »</a></h2></td>
+ <td width="210" style="background-color: #FFFF99;"><h2><a href="http://farplugins.sourceforge.net/wiki/">Proceed to <br/>Far Wiki »</a></h2></td>
</tr>
<tr>
<td colspan="3" style="border:0"><br/>
@@ -62,7 +62,7 @@
<table width="100%" border="0" summary="project farplugins">
<tr>
<!-- FarPlugins Status -->
- <td width="340" valign="top">
+ <td width="210" valign="top">
<table class="rssblock">
<tr><td>
@@ -70,14 +70,14 @@
<img src="rss.gif" border="0" alt="FarPlugins RSS" />
</a> <a href="http://farplugins.sourceforge.net/"> FarPlugins </a> News
- </tr></td>
+ </td></tr>
<tr><td>
<a href="http://plugring.farmanager.com/plugringupd.rss">
<img src="rss.gif" border="0" alt="PlugRing Updates"/>
</a> <a href="http://plugring.farmanager.com/"> PlugRing </a> Updates
- </tr></td>
+ </td></tr>
<tr><td>
<a href="http://farplugins.sourceforge.net/wiki/xml/recentchanges_farwacko.xml">
@@ -86,7 +86,17 @@
</table>
- <?php readfile($status_file); ?>
+<?php // fix broken HTML code until RSS stats are available
+
+ $from = array("<A href", "</A>", "<BR>", "<I>", "</I>", "<HR SIZE=\"1\" NoShade>");
+ $to = array("<a href", "</a>", "<br/>", "<i>", "</i>", "<hr size=\"1\" noshade=\"noshade\"/>");
+
+ $from = array_merge($from, array("<A HREF", "<B>", "</B>"));
+ $to = array_merge( $to, array("<a href", "<b>", "</b>"));
+
+ print str_replace($from, $to, file_get_contents($status_file));
+
+?>
</td>
<!-- Project News -->
<td valign="top">
@@ -95,16 +105,17 @@
// readfile($news_file);
$news = fetchDBNews();
foreach ($news as $n) {
- echo '<div class="newitem">'."\n";
- echo '<div class="newstitle">';
- echo ($n['title_link'])?'<a href="'.$n['title_link'].'">'.$n['title'].'</a>':$n['title'];
- echo "</div>\n";
- echo '<div class="sourceinfo">'.$n['datetime'].' - <a href="'.$n['source_link'].'">'.$n['source'].'</a></div>'."\n";
- echo '<div class="newstext">'.$n['text'].'</div>'."\n";
- if ($n['title_link']) {
- echo '<div class="readmore"><a href="'.$n['title_link'].'">Original article...</a></div>'."\n";
+ extract($n, EXTR_OVERWRITE | EXTR_PREFIX_ALL, "n");
+ echo "<div class=\"newitem\">\n";
+ echo " <div class=\"newstitle\">";
+ echo ($n_title_link)?"<a href=\"$n_title_link\">$n_title</a>":$n_title;
+ echo " </div>\n";
+ echo " <div class=\"sourceinfo\">$n_datetime - <a href=\"$n_source_link\">$n_source</a></div>\n";
+ echo " <div class=\"newstext\">$n_text</div>\n";
+ if ($n_title_link) {
+ echo " <div class=\"readmore\"><a href=\"$n_title_link\">Original article...</a></div>\n";
}
- echo '</div><br/><br/>'."\n";
+ echo "</div><br/><br/>\n";
}
/* <!--
<A HREF="http://sourceforge.net/forum/forum.php?forum_id=176252"><B>Welcome</B></A>
@@ -113,6 +124,14 @@
?>
</td>
+ <!-- Useful Links -->
+ <td width="210" valign="top">
+ <ul>
+ <li><a href="http://www.farmanager.com"/>FAR File and Archive Manager</a></li>
+ <li><a href="http://enforum.farmanager.com"/>English Far Forum</a></li>
+ <li><a href="http://forum.farmanager.com"/>Russian Far Forum</a></li>
+ </ul>
+ </td>
</tr>
</table>
<br/>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|