From b285fc17e1eb94c9f991dc0c6ab490345e2f7f28 Mon Sep 17 00:00:00 2001 From: Maxim Lihachev Date: Wed, 28 Aug 2013 22:00:00 +0600 Subject: [PATCH] Initial commit --- COPYING | 674 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 28 +++ slacklog.gif | Bin 0 -> 40003 bytes slacklog.tcl | 152 ++++++++++++++ 4 files changed, 854 insertions(+) create mode 100644 COPYING create mode 100644 README.md create mode 100644 slacklog.gif create mode 100755 slacklog.tcl diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + 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. + + + Copyright (C) + + 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 . + +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: + + Copyright (C) + 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 +. + + 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 +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..5776787 --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +**slacklog** - доступные обновления Slackware Linux + +##Лицензия + Copyright (C) 2010-2013, Maxim Lihachev, + + 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 . + +##Описание + Скрипт отображает доступные обновления пакетов из репозитория Slackware + + Использование: slacklog [-u] + -u - вывод адресов пакетов для скачивания + +##Структура скрипта +![][structure] +[structure]:slacklog.gif + diff --git a/slacklog.gif b/slacklog.gif new file mode 100644 index 0000000000000000000000000000000000000000..1787c48b73c184d1189e29fe653e738315ba1c5c GIT binary patch literal 40003 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 | +# | +# 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 . | +# | +#---------------------------------------------------------------------------+ +# | +# Скрипт отображает доступные обновления пакетов из репозитория Slackware | +# | +# Использование: slacklog [-u] | +# -u - вывод адресов пакетов для скачивания | +# | +#---------------------------------------------------------------------------+ + +package require http + +#Опции +namespace eval opt { + #Архитектура компьютера + set arch "x86" + + #Адреса репозитория пакетов + array set repository { + x86 "http://slackware.osuosl.org/slackware-current/slackware/" + x86_64 "http://slackware.osuosl.org/slackware64-current/slackware64/" + } + + #Адреса списков изменений для различных архитектур + array set changelog { + x86 "http://slackware.osuosl.org/slackware-current/ChangeLog.txt" + x86_64 "http://slackware.osuosl.org/slackware64-current/ChangeLog.txt" + } + + #Директория со списком установленных пакетов + set localLogs "/var/log/packages/" + + #Правило разбора списков пакетов + # category/package--title--vers-arch-minor.txz + # xap/mozilla-firefox-16.0-i486-1.txz + set packageName {(?:[-+\w]+\/)?([-+\w]+)-((?:[\w\.]+)+)-([\w]+)-([\w]+)(?:\.txz)?} + + #Настройка цвета + array set color { + NC "\033\[00m" + Blue "\033\[1;36m" + Green "\033\[1;32m" + Yellow "\033\[1;33m" + Magenta "\033\[1;35m" + Red "\033\[1;31m" + } +} + +#Процедуры для работы с пакетами Slackware +namespace eval pkg { + #Получение списка установленных пакетов + proc installed {} { + split [glob -tails -directory $opt::localLogs *] + } + + #Функции работы с пакетами: + #Получение списка доступных пакетов + proc available {} { + lreverse [split [http::data [http::geturl $opt::changelog($opt::arch)]] "\n"] + } + + #Сохранение информации о пакетах в словарях + proc save {source -> var} { + upvar #1 $var package + + foreach line $source { + #Разбор по регулярному выражению + if {[regexp $opt::packageName $line url name version arch minor]} { + foreach pkgInfo {url version arch minor} { + dict set package($name) $pkgInfo [set $pkgInfo] + } + } + } + } + + #Получение версии пакета + proc getVersion {package} { + dict with $package { return "$version-$minor" } + } + + #Получение адреса пакета в репозитории + proc getUrl {package} { + return $opt::repository($opt::arch)[dict get $package url] + } + + #Сравнение версий (-1: <; 0: =; 1: >) + proc cmp {package1 package2} { + foreach v1 [split $package1 .] v2 [split $package2 .] { + expr { + $v1 > $v2 ? [return 1] : + $v1 < $v2 ? [return -1] : 0 + } + } + return 0 + } +} + +#Получение списка пакетов, доступных для обновления +proc showUpdates {} { + #Получение списков доступных и установленных пакетов + pkg::save [pkg::available] -> opt::newPackages + pkg::save [pkg::installed] -> opt::installedPackages + + set number 0 + foreach pkgName [array names opt::newPackages] { + #Установлен пакет, находящийся в списке изменений + if {[info exists opt::installedPackages($pkgName)]} { + set newPkgVersion [pkg::getVersion opt::newPackages($pkgName)] + set oldPkgVersion [pkg::getVersion opt::installedPackages($pkgName)] + + #Проверка на новую версию и вывод названия пакета + if {[pkg::cmp $newPkgVersion $oldPkgVersion] == 1} { + #Вывод адресов пакетов + if {[lindex $::argv 0] eq "-u"} { + puts [pkg::getUrl $opt::newPackages($pkgName)] + } else { + # ✓ № | Пакет | ↓ Старая версия | ↑ Новая версия + puts [format " \ + $opt::color(Yellow)✓ %2s\ + $opt::color(Blue)%-30s\ + $opt::color(Magenta)↓ %-16s\ + $opt::color(Green)↑ %-16s\ + $opt::color(NC)" \ + [incr number] $pkgName $oldPkgVersion $newPkgVersion] + } + } + } + } +} + +if {[catch {showUpdates} ERR]} { puts "$opt::color(Red)$ERR$opt::color(NC)" } +