From: ftp://ftp.uk.freebsd.org/pub/OpenBSD/distfiles/wmSpaceWeather-1.04.tar.gz --- wmspaceweather/BUGS | 1 + wmspaceweather/CHANGES | 18 + wmspaceweather/COPYING | 339 ++++++++++ wmspaceweather/HINTS | 36 ++ wmspaceweather/INSTALL | 22 + wmspaceweather/README | 30 + wmspaceweather/wmSpaceWeather/GetKp | 212 +++++++ wmspaceweather/wmSpaceWeather/Makefile | 34 ++ wmspaceweather/wmSpaceWeather/wmSpaceWeather | Bin 0 -> 28269 bytes wmspaceweather/wmSpaceWeather/wmSpaceWeather.1 | 30 + wmspaceweather/wmSpaceWeather/wmSpaceWeather.c | 680 +++++++++++++++++++++ wmspaceweather/wmSpaceWeather/wmSpaceWeather.o | Bin 0 -> 19808 bytes .../wmSpaceWeather/wmSpaceWeather_mask.xbm | 38 ++ .../wmSpaceWeather/wmSpaceWeather_master.gif | Bin 0 -> 1375 bytes .../wmSpaceWeather/wmSpaceWeather_master.xpm | 119 ++++ wmspaceweather/wmgeneral/wmgeneral.c | 366 +++++++++++ wmspaceweather/wmgeneral/wmgeneral.h | 50 ++ wmspaceweather/wmgeneral/wmgeneral.o | Bin 0 -> 7324 bytes 18 files changed, 1975 insertions(+) create mode 100644 wmspaceweather/BUGS create mode 100644 wmspaceweather/CHANGES create mode 100644 wmspaceweather/COPYING create mode 100644 wmspaceweather/HINTS create mode 100644 wmspaceweather/INSTALL create mode 100644 wmspaceweather/README create mode 100755 wmspaceweather/wmSpaceWeather/GetKp create mode 100644 wmspaceweather/wmSpaceWeather/Makefile create mode 100755 wmspaceweather/wmSpaceWeather/wmSpaceWeather create mode 100644 wmspaceweather/wmSpaceWeather/wmSpaceWeather.1 create mode 100644 wmspaceweather/wmSpaceWeather/wmSpaceWeather.c create mode 100644 wmspaceweather/wmSpaceWeather/wmSpaceWeather.o create mode 100644 wmspaceweather/wmSpaceWeather/wmSpaceWeather_mask.xbm create mode 100644 wmspaceweather/wmSpaceWeather/wmSpaceWeather_master.gif create mode 100644 wmspaceweather/wmSpaceWeather/wmSpaceWeather_master.xpm create mode 100644 wmspaceweather/wmgeneral/wmgeneral.c create mode 100644 wmspaceweather/wmgeneral/wmgeneral.h create mode 100644 wmspaceweather/wmgeneral/wmgeneral.o
diff --git a/wmspaceweather/BUGS b/wmspaceweather/BUGS new file mode 100644 index 0000000..32f5c37 --- /dev/null +++ b/wmspaceweather/BUGS @@ -0,0 +1 @@ +Please send bug reports to [email protected] diff --git a/wmspaceweather/CHANGES b/wmspaceweather/CHANGES new file mode 100644 index 0000000..a2d2f71 --- /dev/null +++ b/wmspaceweather/CHANGES @@ -0,0 +1,18 @@ +wmSpaceWeather changes. + +Version Description +------------------------------------------------------------------------- +1.04 - released Feb 18, 1999 + Added double click capability. Double clicking on mouse button 1 sends + URL (defined via ne command line option -url) to netscape. + +1.03 - released Feb 11, 1999 + Changed display a bit. When no data is + available, it now shows nothing (before it would + show false junk...). Modified Perl Script GetKp. + + +1.02 - released Feb 8, 1999 + bug fixes... + +1.0b - released Dec 19, 1998 diff --git a/wmspaceweather/COPYING b/wmspaceweather/COPYING new file mode 100644 index 0000000..a43ea21 --- /dev/null +++ b/wmspaceweather/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) 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 +this service 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 make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. 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. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +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 +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the 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 a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE 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. + + END OF TERMS AND CONDITIONS + + Appendix: 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 +convey 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) 19yy <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 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision 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, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This 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 Library General +Public License instead of this License. diff --git a/wmspaceweather/HINTS b/wmspaceweather/HINTS new file mode 100644 index 0000000..4aef871 --- /dev/null +++ b/wmspaceweather/HINTS @@ -0,0 +1,36 @@ +Hints for wmSpaceWeather + +Generic. +-------- +wmSpaceWeather version: 1.0b + +usage: wmSpaceWeather [-h] [-display <display>] + + -d <display> Use alternate display. + -h Display help screen. + + + +WindowMaker. +------------ +In WindowMaker simply drag and drop the wmSpaceWeather App on +the WindowMaker Dock or Clip. + + +Afterstep. +--------- +Afterstep users put the following in their .steprc +"Wharf wmSpaceWeather - MaxSwallow "wmSpaceWeather" wmSpaceWeather &". + +Note: AfterStep's Wharf has a problem with pixmaps that are +larger than 60x60 pixels. Please tell the AfterStep authors +to fix this, this is not our fault, but a Wharf problem! + + +Other window managers. +---------------------- +wmSpaceWeather shows as a 64x64 shaped icon on your desktop under other +window managers. + + + diff --git a/wmspaceweather/INSTALL b/wmspaceweather/INSTALL new file mode 100644 index 0000000..954d519 --- /dev/null +++ b/wmspaceweather/INSTALL @@ -0,0 +1,22 @@ +Installation instructions for wmSpaceWeather. + +Requirements +-------------------------------------------------------------- +wmSpaceWeather requires the Xpm library (which should be available on +most machines with XFree86 installed). + +Installation +-------------------------------------------------------------- +1) gunzip wmSpaceWeather-1.0.tar.gz +1) tar -xvf wmSpaceWeather-1.0.tar +2) cd wmSpaceWeather-1.0/wmSpaceWeather/ +3) make +4) make install (must be root) +5) wmSpaceWeather & (or 'wmSpaceWeather -h' for help, or 'man wmSpaceWeather' for the man page) +6) You need to set the location of perl correctly in GetKp if your perl + is located in a place other than /usr/bin/ + + + + + diff --git a/wmspaceweather/README b/wmspaceweather/README new file mode 100644 index 0000000..29c0327 --- /dev/null +++ b/wmspaceweather/README @@ -0,0 +1,30 @@ +wmSpaceWeather-1.0b release +---------------------- +Author....: Michael G. Henderson <[email protected]> + + +Description +----------- +wmSpaceWeather is a space weather monitor + + +Files +----- +README This file. +INSTALL Installation instructions. +HINTS Hints about what you can do with wmSpaceWeather. +BUGS Bug reports +CHANGES Change history. +COPYING GNU General Public License Version 2. + + +Bugs +----- +Send bug reports to [email protected] + + +Copyright +---------- +wmSpaceWeather is copyright (c) 1998 by Michael G. Henderson and +licensed through the GNU General Public License. Read the +COPYING file for the complete GNU license. diff --git a/wmspaceweather/wmSpaceWeather/GetKp b/wmspaceweather/wmSpaceWeather/GetKp new file mode 100755 index 0000000..27f9274 --- /dev/null +++ b/wmspaceweather/wmSpaceWeather/GetKp @@ -0,0 +1,212 @@ +#!/usr/bin/perl + +# +# A really crappy code to grab last 8 Kp values.... +# + + + require "ctime.pl"; + + + ($Year, $Month, $Day) = &year_month_day(); + + if (-e "/tmp/DGD.txt"){ + unlink("/tmp/DGD.txt"); + } + + if (-e "/tmp/curind.txt"){ + unlink("/tmp/curind.txt"); + } + + + $grabcmd = "cd /tmp; wget --passive-ftp --tries 2 -q ftp://www.sec.noaa.gov/pub/indices/DGD.txt"; + system "$grabcmd"; + + + # + # ensure that there are at least 8 values available... + # + %Kp = (); + $Kp{190001011} = 999; + $Kp{190001012} = 999; + $Kp{190001013} = 999; + $Kp{190001014} = 999; + $Kp{190001015} = 999; + $Kp{190001016} = 999; + $Kp{190001017} = 999; + $Kp{190001018} = 999; + + + open(TmpFile, "/tmp/DGD.txt"); + while (<TmpFile>){ + chop; + if ($_ =~ /^\d{4} \d{2} \d{2}\s*\d*/ ){ + + $Date = $_; + + s/^(\d{4}) (\d{2}) (\d{2}).*\s{2,}(.*)/\4/; + s/([ -]{0,1}\d{1,2})([ -]{0,1}\d{1,2})([ -]{0,1}\d{1,2})([ -]{0,1}\d{1,2})([ -]{0,1}\d{1,2})([ -]{0,1}\d{1,2})([ -]{0,1}\d{1,2})([ -]{0,1}\d{1,2})/\1 \2 \3 \4 \5 \6 \7 \8/; + + $Date =~ s/^(\d{4}) (\d{2}) (\d{2}).*\s{2,}(.*)/\1\2\3/; + ($a, $b, $c, $d, $e, $f, $g, $h) = split(/\s{1,}/, $_); + + $TimeTag = $Date*10 + 1; $Kp{$TimeTag} = $a; + $TimeTag = $Date*10 + 2; $Kp{$TimeTag} = $b; + $TimeTag = $Date*10 + 3; $Kp{$TimeTag} = $c; + $TimeTag = $Date*10 + 4; $Kp{$TimeTag} = $d; + $TimeTag = $Date*10 + 5; $Kp{$TimeTag} = $e; + $TimeTag = $Date*10 + 6; $Kp{$TimeTag} = $f; + $TimeTag = $Date*10 + 7; $Kp{$TimeTag} = $g; + $TimeTag = $Date*10 + 8; $Kp{$TimeTag} = $h; + + } + } + close(TmpFile); + + + + # + # Add in very latest stuff + # + $grabcmd = "cd /tmp; wget --passive-ftp --tries 2 -q ftp://www.sec.noaa.gov/pub/latest/curind.txt"; + system "$grabcmd"; + %lmonstr = ( "Jan", 1, "Feb", 2, "Mar", 3, "Apr", 4, "May", 5, "Jun", 6, "Jul", 7, "Aug", 8, "Sep", 9, "Oct", 10, "Nov", 11, "Dec", 12); + +@lval = ($lyear, $lmonstr{$lmon}, $ldom); + open(TmpFile, "/tmp/curind.txt"); + while (<TmpFile>){ + chop; + if ($_ =~ /^:Geomagnetic_Values: (\d{4}) (.*) (\d{1,2})/){ + $y = $_; + $ms = $_; + $d = $_; + + $y =~ s/^:Geomagnetic_Values: (\d{4}) (.*) (\d{1,2})/\1/; + $ms =~ s/^:Geomagnetic_Values: (\d{4}) (.*) (\d{1,2})/\2/; + $d =~ s/^:Geomagnetic_Values: (\d{4}) (.*) (\d{1,2})/\3/; + $tDate = $y*10000 + $lmonstr{$ms}*100 + $d; + } + if ($_ =~ /.*\d/) { + $Line = $_; + } + + if ($_ =~ /^\s{1,}[0-9e\.\+\-]{2,}\s{1,}[0-9e\.\+\-]{2,}\s{1,}[0-9e\.\+\-]{2,}\s{1,}[0-9e\.\+\-]{2,}\s{1,}[0-9e\.\+\-]{2,}\s{1,}[BCMX]{1,}[0-9\.]{1,}\s{1,}[0-9-]{1,}/){ + + $FluxLine = $_; + + } + + + + } + + $Line =~ s/.*\s{3,}(.*)/\1/; + ($a, $b, $c, $d, $e, $f, $g, $h) = split(/\s{1,}/, $Line); + if ($tDate > 0) { + $TimeTag = $tDate*10 + 1; $Kp{$TimeTag} = $a; + $TimeTag = $tDate*10 + 2; $Kp{$TimeTag} = $b; + $TimeTag = $tDate*10 + 3; $Kp{$TimeTag} = $c; + $TimeTag = $tDate*10 + 4; $Kp{$TimeTag} = $d; + $TimeTag = $tDate*10 + 5; $Kp{$TimeTag} = $e; + $TimeTag = $tDate*10 + 6; $Kp{$TimeTag} = $f; + $TimeTag = $tDate*10 + 7; $Kp{$TimeTag} = $g; + $TimeTag = $tDate*10 + 8; $Kp{$TimeTag} = $h; + } else { + $Kp{190001011} = 999; + $Kp{190001012} = 999; + $Kp{190001013} = 999; + $Kp{190001014} = 999; + $Kp{190001015} = 999; + $Kp{190001016} = 999; + $Kp{190001017} = 999; + $Kp{190001018} = 999; + } + + + + $n = 0; + %Result = (); + foreach $key (reverse sort keys %Kp ) { + if (($Kp{$key} >= 0)&&($n < 8)){ + $Result{$key} = $Kp{$key}; + ++$n; + } + } + + open(TmpFile, ">/tmp/LatestKp.txt"); + foreach $key (sort keys %Result ) { + if ($Result{$key} > 10) { $Result{$key} = -1; } + printf TmpFile "$key $Result{$key}\n"; + } + + + + + $FluxLine =~ s/^\s*//; + if ($FluxLine =~ /\d/){ + ($E1, $E2, $P1, $P2, $P3, $Xray, $junk) = split(/\s{1,}/, $FluxLine); + + } else { + $E1 = -999; + $E2 = -999; + $P1 = -999; + $P2 = -999; + $P3 = -999; + $Xray = "Z0.0"; + } + + + printf TmpFile "$E1\n"; + printf TmpFile "$E2\n"; + printf TmpFile "$P1\n"; + printf TmpFile "$P2\n"; + printf TmpFile "$P3\n"; + printf TmpFile "$Xray\n"; + close(TmpFile); + + + + + + + + +# +# sort(List); +# +# $Gif = "$List[$#List]"; +# $Latest = "http://swdcdb.kugi.kyoto-u.ac.jp/dstdir/dst1/q/$Gif"; +# +# +# $grabcmd = "/u/mgh/wwwgrab/wwwgrab $Latest /n/tmp/polar/$Gif"; +# system "$grabcmd"; +# +# +# system "convert -crop 0x0 /n/tmp/polar/${Gif} /n/tmp/polar/Dst.rle"; +# system "fant -s .5 .5 -o /n/tmp/polar/Dst2.rle /n/tmp/polar/Dst.rle"; +# system "convert -frame 4x4 -gamma 3 -crop 0x0 -colors 256 /n/tmp/polar/Dst2.rle /n/leadbelly/belly3/PolarNRT/CEPPAD/IPS/LatestDst.gif"; +# +# +# +# +# +# open(TmpFile, ">/n/leadbelly/belly3/PolarNRT/CEPPAD/IPS/LatestDst.txt"); +# printf TmpFile "${Gif}\n"; +# close(TmpFile); +# +# system "touch /n/leadbelly/belly3/PolarNRT/CEPPAD/IPS/LatestDst.txt"; + + +sub year_month_day{ + + local($ldate_string, $ldow, $lmon, $ldom, $ltim, $lyear, %lmonstr, $tzone, @lval); + + $ldate_string = &ctime(time); + ($ldow, $lmon, $ldom, $ltim, $lyear) = split(" ", $ldate_string); + + %lmonstr = ( "Jan", 1, "Feb", 2, "Mar", 3, "Apr", 4, "May", 5, "Jun", 6, "Jul", 7, "Aug", 8, "Sep", 9, "Oct", 10, "Nov", 11, "Dec", 12); + + @lval = ($lyear, $lmonstr{$lmon}, $ldom); + +} + diff --git a/wmspaceweather/wmSpaceWeather/Makefile b/wmspaceweather/wmSpaceWeather/Makefile new file mode 100644 index 0000000..2e543b6 --- /dev/null +++ b/wmspaceweather/wmSpaceWeather/Makefile @@ -0,0 +1,34 @@ +CC = gcc +CFLAGS = -O2 -Wall +INCDIR = -I/usr/X11R6/include/X11 +DESTDIR= /usr/X11R6 +LIBDIR = -L/usr/X11R6/lib +# for linux +LIBS = -lXpm -lX11 -lXext +# for Solaris +# LIBS = -lXpm -lX11 -lXext -lsocket +OBJS = wmSpaceWeather.o \ + ../wmgeneral/wmgeneral.o + + +.c.o: + $(CC) $(COPTS) -D$(shell echo `uname -s`) -c $< -o $*.o $(INCDIR) + + +all: wmSpaceWeather.o wmSpaceWeather + +wmSpaceWeather.o: wmSpaceWeather_master.xpm wmSpaceWeather_mask.xbm +wmSpaceWeather: $(OBJS) + $(CC) $(COPTS) $(SYSTEM) -o wmSpaceWeather $^ $(INCDIR) $(LIBDIR) $(LIBS) + +clean: + for i in $(OBJS) ; do \ + rm -f $$i; \ + done + rm -f wmSpaceWeather + +install:: wmSpaceWeather + install -s -m 0755 wmSpaceWeather $(DESTDIR)/bin + install -m 0755 GetKp $(DESTDIR)/bin + install -m 0644 wmSpaceWeather.1 $(DESTDIR)/man/man1 + diff --git a/wmspaceweather/wmSpaceWeather/wmSpaceWeather b/wmspaceweather/wmSpaceWeather/wmSpaceWeather new file mode 100755 index 0000000000000000000000000000000000000000..79c022acb8148eb6906e4ffab38d4ea8bfe98a47 GIT binary patch literal 28269 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 MlsdKNv;%<tFJ~6Pt^fc4 literal 0 HcmV?d00001 diff --git a/wmspaceweather/wmSpaceWeather/wmSpaceWeather.1 b/wmspaceweather/wmSpaceWeather/wmSpaceWeather.1 new file mode 100644 index 0000000..3497284 --- /dev/null +++ b/wmspaceweather/wmSpaceWeather/wmSpaceWeather.1 @@ -0,0 +1,30 @@ +.TH WMSPACEWEATHER 1.1 "19 December 1998" +.SH NAME +WMSPACEWEATHER \- Dockable Space Weather Monitor +.SH SYNOPSIS +.B wmSpaceWeather +[-h] [-display <Display>] +.SH DESCRIPTION +.PP +wmSpaceWeather is a space weather monitor. The monitor shows: 2 relativistic electron +and 3 relativistic proton flux levels at geosyncronous orbit (currently from the NOAA +GOES spacecraft), current Solar Flare X-ray flux, and the last 8 3-hour Kp index values. +.PP +Large fluxes of relativistic (aka `Killer') electrons can cause harmful `deep-dielectric' +charging/discharging events inside satellites. High proton fluxes (`Solar Energetic Proton' or +SEP events) can cause single event upsets in satellite electronics. The Kp index is a measure +of how disturbed the Earth's magnetic field has been over a 3-hour interval. Kp can range from +0-9, where 0 is quiet and 9 is very disturbed. The Kp values shown are the 8 previous values +(i.e. the last 24 hours). If the display is up-to-date, the LED next to the Kp +bars will flash blue. If the display is not up-to-date, the LED will flash orange. +.SH OPTIONS +.TP +.B \-h +Display list of command-line options. +.TP +.B \-display [display] +Use an alternate X Display. +.SH BUGS +Let me know if/when you find any. +.SH AUTHOR +Michael G. Henderson <[email protected]> diff --git a/wmspaceweather/wmSpaceWeather/wmSpaceWeather.c b/wmspaceweather/wmSpaceWeather/wmSpaceWeather.c new file mode 100644 index 0000000..19072d9 --- /dev/null +++ b/wmspaceweather/wmSpaceWeather/wmSpaceWeather.c @@ -0,0 +1,680 @@ +/* + * + * wmSpaceWeather-1.04 (C) 1998 Mike Henderson ([email protected]) + * + * - Its a Space Weather Monitor + * + * + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, 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 (see the file COPYING); if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA + * + * ToDo: + * + * - The whole NOAA space weather www site is pretty screwed up! I currently have + * to grab data from 2 separate files to get all that I need. But it seems that + * sometimes one of the files shows less than it should. This seems to be related to + * the way they update the 2 separate files... I will have to find some way of + * making that more robust. + * + * + * + * + * + * + * + * + * + * Changes: + * + * Version 1.04 - released Feb 18, 1999 + * Added double click capability. Double clicking on mouse button 1 sends + * URL (defined via ne command line option -url) to netscape. + * + * Version 1.03 - released Feb 11, 1999 + * Changed display a bit. When no data is + * available, it now shows nothing (before it would + * show false junk...). Modified Perl Script GetKp. + * + * + * Version 1.02 - released Feb 8, 1999 + * bug fixes... + * + * Version 1.0b - released Dec 19, 1998 + * + * + */ + + + + + +/* + * Includes + */ +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <X11/X.h> +#include <X11/xpm.h> +#include "../wmgeneral/wmgeneral.h" +#include "wmSpaceWeather_master.xpm" +#include "wmSpaceWeather_mask.xbm" + + + +/* + * Delay between refreshes (in microseconds) + */ +#define DELAY 10000L +#define WMSPACEWEATHER_VERSION "1.04" + +int GotFirstClick1, GotDoubleClick1; +int GotFirstClick2, GotDoubleClick2; +int GotFirstClick3, GotDoubleClick3; +int DblClkDelay; +char URL[1024]; +int ForceUpdate2; + + +void ParseCMDLine(int argc, char *argv[]); +void pressEvent(XButtonEvent *xev); + + + + + + + + + + +/* + * main + */ +int main(int argc, char *argv[]) { + + +struct tm *Time; +XEvent event; +int i, n, s, k, m, dt1, dt2; +int Year, Month, Day, DayOfMonth, OldDayOfMonth; +int Hours, Mins, Secs, OldSecs, xoff, D[10], xsize; +long CurrentLocalTime; +int height, UpToDate, LEDOn; +double UT, TU, TU2, TU3, T0, gmst, hour24(); + + +double jd(), CurrentJD, LatestAvailJD, tim, DeltaT; +long int TimeTag[8]; +int Kp[8] = { -1, -1, -1, -1, -1, -1, -1, -1 }; +double E1, E2, P1, P2, P3; +char Xray[10], digit[2]; +FILE *fp; + + + + + + + + + + + + /* + * Parse any command line arguments. + */ + ParseCMDLine(argc, argv); + + + + openXwindow(argc, argv, wmSpaceWeather_master, wmSpaceWeather_mask_bits, wmSpaceWeather_mask_width, wmSpaceWeather_mask_height); + + + + + /* + * Loop until we die + */ + n = 32000; + s = 32000; + m = 32000; + dt1 = 32000; + dt2 = 32000; + LEDOn = 0; + DblClkDelay = 32000; + ForceUpdate2 = 1; + while(1) { + + + + + /* + * Keep track of # of seconds + */ + if (m > 100){ + + m = 0; + ++dt1; + ++dt2; + + } else { + + /* + * Increment counter + */ + ++m; + + } + + + + + + /* + * Double Click Delays + * Keep track of click events. If Delay too long, set GotFirstClick's to False. + */ + if (DblClkDelay > 15) { + + DblClkDelay = 0; + GotFirstClick1 = 0; GotDoubleClick1 = 0; + GotFirstClick2 = 0; GotDoubleClick2 = 0; + GotFirstClick3 = 0; GotDoubleClick3 = 0; + + } else { + + ++DblClkDelay; + + } + + + + + + + + + + /* + * Process any pending X events. + */ + while(XPending(display)){ + XNextEvent(display, &event); + switch(event.type){ + case Expose: + RedrawWindow(); + break; + case ButtonPress: + pressEvent(&event.xbutton); + break; + case ButtonRelease: + break; + } + } + + + + + + + /* + * Redraw + */ + RedrawWindow(); + + + + + + + + + + + /* + * Check the Kp file every (approx.) 2 seconds. + * Can significantly reduce this frequency later. But its + * easier to debug this way... + * Do this before trying to download again! The file may be there and it + * may be Up-To-Date! + */ + if (dt2 > 2){ + + dt2 = 0; + + /* + * Compute Current Julian Date + */ + CurrentLocalTime = time(CurrentTime); + Time = gmtime(&CurrentLocalTime); + Year = Time->tm_year+1900; + Month = Time->tm_mon+1; + Day = Time->tm_mday; + Hours = Time->tm_hour; + Mins = Time->tm_min; + Secs = Time->tm_sec; + UT = (double)Hours + (double)Mins/60.0 + (double)Secs/3600.0; + CurrentJD = jd(Year, Month, Day, UT); + + + + /* + * Read in Kp values + */ + if ((fp = fopen("/tmp/LatestKp.txt", "r")) != NULL){ + + for (i=0; i<8; ++i){ + fscanf(fp, "%ld %d", &TimeTag[i], &Kp[i]); + if (Kp[i] < 0) TimeTag[i] = 190001011; + } + fscanf(fp, "%lf", &P1); + fscanf(fp, "%lf", &P2); + fscanf(fp, "%lf", &P3); + fscanf(fp, "%lf", &E1); + fscanf(fp, "%lf", &E2); + fscanf(fp, "%10s", Xray); + fclose(fp); + + } else { + + for (i=0; i<8; ++i) { + Kp[i] = -1; + TimeTag[i] = 190001011; + } + + } + + + + + /* + * Compute Julian Date for latest available Kp + */ + tim = TimeTag[7]; + Year = tim/100000; + tim -= Year*100000; + Month = tim/1000; + tim -= Month*1000; + Day = tim/10; + tim -= Day*10; + UT = tim*3.0; + LatestAvailJD = jd(Year, Month, Day, UT); + + DeltaT = (CurrentJD - LatestAvailJD)*24.0; + UpToDate = (DeltaT <= 3.0) ? 1 : 0; + + if (!UpToDate){ + + /* + * shift data back + */ + k = (int)(DeltaT/3.0); + + if ((k>=0)&&(k<=7)){ + for (i=0; i<8-k; ++i) Kp[i] = Kp[i+k]; + for (i=8-k; i<8; ++i) Kp[i] = -1; + } + + + } + + } + + + + + + + /* + * Update Kp Bars etc... + */ + if (n > 200){ + + n = 0; + + copyXPMArea(5, 67, 47, 20, 5, 39); + + for (i=0; i<8; ++i){ + if ((Kp[i] >= 0)&&(Kp[i] <= 9)){ + height = 2*Kp[i] + 1; + copyXPMArea(53, 86-height+1, 5, height, 5+5*i+i, 58-height+1); + } + } + + /* + * Update Xray display... + */ + if (Xray[0] != 'Z'){ + switch(Xray[0]){ + case 'B': + copyXPMArea(66, 17, 5, 7, 37, 25); + break; + case 'C': + copyXPMArea(72, 17, 5, 7, 37, 25); + break; + case 'M': + copyXPMArea(78, 17, 5, 7, 37, 25); + break; + case 'X': + copyXPMArea(84, 17, 5, 7, 37, 25); + break; + } + digit[0] = Xray[1]; digit[1] = '\0'; + copyXPMArea(atoi(digit)*6+66, 25, 5, 7, 43, 25); + copyXPMArea(127, 30, 3, 3, 49, 30); + digit[0] = Xray[3]; digit[1] = '\0'; + copyXPMArea(atoi(digit)*6+66, 25, 5, 7, 53, 25); + } + + + + + /* + * Update E1 LED... + */ + if ((E1 > 0)&&(E1 < 1e6)) + copyXPMArea(66, 12, 4, 4, 25, 7); + else if ((E1 >= 1e6)&&(E1 < 1e7)) + copyXPMArea(66, 7, 4, 4, 25, 7); + else if (E1 > 1e7) + copyXPMArea(66, 2, 4, 4, 25, 7); + + + /* + * Update E2 LED... + */ + if ((E2 > 0)&&(E2 < 1e3)) + copyXPMArea(66, 12, 4, 4, 31, 7); + else if ((E2 >= 1e3)&&(E2 < 1e4)) + copyXPMArea(66, 7, 4, 4, 31, 7); + else if (E2 > 1e4) + copyXPMArea(66, 2, 4, 4, 31, 7); + + + + /* + * Update P1 LED... + */ + if ((P1 > 0)&&(P1 < 1e2)) + copyXPMArea(66, 12, 4, 4, 22, 16); + else if ((P1 >= 1e2)&&(P1 < 1e3)) + copyXPMArea(66, 7, 4, 4, 22, 16); + else if (P1 > 1e3) + copyXPMArea(66, 2, 4, 4, 22, 16); + + + /* + * Update P2 LED... + */ + if ((P2 > 0)&&(P2 < 0.5e0)) + copyXPMArea(66, 12, 4, 4, 28, 16); + else if ((P2 >= 0.5e0)&&(P2 < 0.5e1)) + copyXPMArea(66, 7, 4, 4, 28, 16); + else if (P2 > 0.5e1) + copyXPMArea(66, 2, 4, 4, 28, 16); + + + /* + * Update P3 LED... + */ + if ((P3 > 0)&&(P3 < 0.3e0)) + copyXPMArea(66, 12, 4, 4, 34, 16); + else if ((P3 >= 0.3e0)&&(P3 < 0.3e1)) + copyXPMArea(66, 7, 4, 4, 34, 16); + else if (P3 > 0.3e1) + copyXPMArea(66, 2, 4, 4, 34, 16); + + + + + + + + + + } else { + + /* + * Increment counter + */ + ++n; + + } + + + + + + /* + * Update the blinking LED which indicates whether or not the + * display is up-to-date + */ + if (s > 20){ + + s = 0; + + if (LEDOn){ + + if (UpToDate) + copyXPMArea(65, 82, 4, 4, 54, 53); + else + copyXPMArea(65, 76, 4, 4, 54, 53); + + LEDOn = 0; + + } else { + + if (UpToDate) + copyXPMArea(60, 82, 4, 4, 54, 53); + else + copyXPMArea(60, 76, 4, 4, 54, 53); + + LEDOn = 1; + + } + } else { + + /* + * Increment counter + */ + ++s; + + } + + + + + + + + + + + /* + * Check every 5 min if the values are not up to date... + */ + if (((!UpToDate)&&(dt1 > 300))||ForceUpdate2){ + + dt1 = 0; + + /* + * Execute Perl script to grab the Latest Kp values + */ + system("GetKp &"); + + ForceUpdate2 = 0; + + } + + + + + /* + * Wait for next update + */ + usleep(DELAY); + + + } + + + +} + + + + + + + + +/* + * ParseCMDLine() + */ +void ParseCMDLine(int argc, char *argv[]) { + + int i; + + for (i = 1; i < argc; i++) { + + if (!strcmp(argv[i], "-display")){ + + ++i; + + } else if ((!strcmp(argv[i], "-url"))||(!strcmp(argv[i], "-u"))){ + + strcpy(URL, argv[++i]); + + } else { + + printf("\nwmSpaceWeather version: %s\n", WMSPACEWEATHER_VERSION); + printf("\nusage: wmSpaceWeather [-h] [-url <www URL>]\n\n"); + printf("\t-url <URL>\tURL to send to Netscape with Button1 double click.\n\n"); + printf("\t-h\t\tDisplay help screen.\n\n"); + exit(1); + + } + } + +} + + + + + + + + +/* + * Compute the Julian Day number for the given date. + * Julian Date is the number of days since noon of Jan 1 4713 B.C. + */ +double jd(ny, nm, nd, UT) +int ny, nm, nd; +double UT; +{ + double A, B, C, D, JD, MJD, day; + + day = nd + UT/24.0; + + + if ((nm == 1) || (nm == 2)){ + ny = ny - 1; + nm = nm + 12; + } + + if (((double)ny+nm/12.0+day/365.25)>=(1582.0+10.0/12.0+15.0/365.25)){ + A = ((int)(ny / 100.0)); + B = 2.0 - A + (int)(A/4.0); + } + else{ + B = 0.0; + } + if (ny < 0.0){ + C = (int)((365.25*(double)ny) - 0.75); + } + else{ + C = (int)(365.25*(double)ny); + } + + D = (int)(30.6001*(double)(nm+1)); + + + JD = B + C + D + day + 1720994.5; + return(JD); + +} + + + + +/* + * This routine handles button presses. + */ +void pressEvent(XButtonEvent *xev){ + + char Command[512]; + + + DblClkDelay = 0; + if ((xev->button == Button1) && (xev->type == ButtonPress)){ + if (GotFirstClick1) GotDoubleClick1 = 1; + else GotFirstClick1 = 1; + } else if ((xev->button == Button2) && (xev->type == ButtonPress)){ + if (GotFirstClick2) GotDoubleClick2 = 1; + else GotFirstClick2 = 1; + } else if ((xev->button == Button3) && (xev->type == ButtonPress)){ + if (GotFirstClick3) GotDoubleClick3 = 1; + else GotFirstClick3 = 1; + } + + /* + * We got a double click on Mouse Button1 (i.e. the left one) + */ + if (GotDoubleClick1) { + GotFirstClick1 = 0; + GotDoubleClick1 = 0; + sprintf(Command, "netscape -remote 'openURL(%s)' || netscape '%s' &", URL, URL); + system(Command); + } + + + /* + * We got a double click on Mouse Button2 (i.e. the left one) + */ + if (GotDoubleClick2) { + } + + + /* + * We got a double click on Mouse Button3 (i.e. the left one) + */ + if (GotDoubleClick3) { + GotFirstClick3 = 0; + GotDoubleClick3 = 0; + ForceUpdate2 = 1; + } + + + + return; + +} + diff --git a/wmspaceweather/wmSpaceWeather/wmSpaceWeather.o b/wmspaceweather/wmSpaceWeather/wmSpaceWeather.o new file mode 100644 index 0000000000000000000000000000000000000000..b21ad86398496c52296f0400d42ad543fe67133e GIT binary patch literal 19808 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 literal 0 HcmV?d00001 diff --git a/wmspaceweather/wmSpaceWeather/wmSpaceWeather_mask.xbm b/wmspaceweather/wmSpaceWeather/wmSpaceWeather_mask.xbm new file mode 100644 index 0000000..b01c3e5 --- /dev/null +++ b/wmspaceweather/wmSpaceWeather/wmSpaceWeather_mask.xbm @@ -0,0 +1,38 @@ +#define wmSpaceWeather_mask_width 64 +#define wmSpaceWeather_mask_height 64 +static char wmSpaceWeather_mask_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff, + 0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff, + 0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff, + 0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff, + 0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0, + 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f, + 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff, + 0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff, + 0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff, + 0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff, + 0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff, + 0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff, + 0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0, + 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f, + 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff, + 0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff, + 0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff, + 0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff, + 0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff, + 0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0, + 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f, + 0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff, + 0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff, + 0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff, + 0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff, + 0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff, + 0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff, + 0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0, + 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x0f, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00}; diff --git a/wmspaceweather/wmSpaceWeather/wmSpaceWeather_master.gif b/wmspaceweather/wmSpaceWeather/wmSpaceWeather_master.gif new file mode 100644 index 0000000000000000000000000000000000000000..9ee154fd43f1aaae5b88807f5aa73540ae8c7fc0 GIT binary patch literal 1375 zcmV-l1)%yzNk%v~VVMA10Q3L=0000O7#JWPA3Qt&ARr(B6mI}WT~7c2PBQ>Hb^ieW z005=jI;Q{s0094Y0ME|=|Nj7(ps1Oe|H#P5W@csp0000000000000000000000000 z000000000000000EC2ui0GR+=000I4U?h%YX`X1Rra<eya4gSsZQu5)?>vwHz@YHg zD;kR}L8BoUI-gM3aY{Y48k1#o%O#GwVCfgI)P~Pt5<tLiyWjA*d_JG3*UKh)zf}te zfPoT&1ayXnbarEWj9hAfgA##&h7=TTmWYRnB1sSsO#+#Xq&Z&%l8}>Z5^)q0nWC_l znss*&6Q2ODmZiQjkCB9dbe6Hkw6$@Z5iOs($iLDq!IP^3t**(U+sbduo}g=^)6$Qq z!^Ga}a^U6fz^B&N?DcK#0tyOx@YCn>l<Wy~r(lA<e&zmIlO%B99eoE8nv=J1P(yq8 z^zoBes#-dR+AwX4RnHyAcftNrr3#ph4KG?RUCzSz5MqFv&u%)n8DM7vo()b4NvTTR z8)PnxB_+AeT>u3)p+ev}b*Ih%KW_#V3dG||mPbd5bvWi})Bsa?_T1^f>d&8CyPo<= z@1i%SHqol>$=52@n{mB#LItpp-KKZUnoY~ouiL+Yaa03%7;#ysi>dOxniXs08-6Mu zCYTrPr>mTSem2!f^yoXQ8~JJ3(zP<D0T}Gn&69!eo4$jq<sJMtaN@;}^UiHtZJ#gL z+SInK$*Jz;&9U$9O?+=|@4&x@*X}$@=vLFw)3z9$Rb_YDuY+GM{(E=h^oNHZe|+!r z*6y*QUVzfI7u|Fv-Tpydef@E_A9DOPw;yxZ$yXi}=NU+#bdj{jo?Y<uCgO<RU6-7G z_>s8agn*d`9c^x;S0Fa%X-HF97EYMoirw+|pnfdUr`vzc7+4#E!n}dtjhz6XV{*kI zw<C8Iu1KMSR1&#{Jutpj7I<KWDdw1D>ZfHx9li%!Y<z@99h1$l$p{G()M@9Pc;>0+ zo_zLclALH%A!rqVwmImbNE90ABA>0PXcun2$<CjTI`YK<m|`kGrkZkkz^0snnyILr zhU)1uj#la-fRav{s;W<@aq6t5);cP!w}uJ_rLe{dU8}A#+N-af;96>~$R4Zgr>E}v z>aamX3T!RB{z4n=rM50hDzn*go9w5~3Ty4PtWHbqv*Ut>?YG;uYpl20hTCMiL;Y&* zx#H5RZYKlu+phrr{u}TB00&&KzXuC!@W80%t8Wd`-fKv;57VHA0T^Q}K*kz#Y{14G zgPgI*9f$03!}C_WZ;=wykw5}$P^@wc7n^MJ$S3D~bIBtMkiY~l3n25%FGSpO8!rbv zG|?^8jPuSP>-_Z8JZsEG&_bijbkp`8oru<3J6(0uP?JnH)n{A%4cJW6>F3*U$Bif3 zL?deV4qHQf_ueSvZ86_~(>-(GgvaUk;fN=$_~LPS{RZPsyz6ealYdJ_8CyYKgX3;& z*@oumHb^cy<?miz2I!k}&W7i!qdvpv?83gR>1MbdgX*h4ZhH)}!|QwHvtyq5?k?aS zO6SDC&^z$Imo9t~ZH0mW0vjoAJnMQmFhN@YATYu7nlmi^!sH`7zWD(I@WA@(x6l^% z(}NHB^|}iX{TkC(pSaXxo9#dUX)^!-7C=A(CgF3)V;udE*SQ2P4uJnF8w5QzzydBH z2|-&!0Scf$#4Yf10QlL<08oGlY*2F(l%NXHR>1<cAZZC8;RXw!xevC^XE4(s2T{1f h{-uzG7QA5chDgLB8c|h+Num;$$iyZ#k!T?R06W=ur40Z8 literal 0 HcmV?d00001 diff --git a/wmspaceweather/wmSpaceWeather/wmSpaceWeather_master.xpm b/wmspaceweather/wmSpaceWeather/wmSpaceWeather_master.xpm new file mode 100644 index 0000000..a909abd --- /dev/null +++ b/wmspaceweather/wmSpaceWeather/wmSpaceWeather_master.xpm @@ -0,0 +1,119 @@ +/* XPM */ +static char *wmSpaceWeather_master[] = { +/* width height num_colors chars_per_pixel */ +" 153 91 21 1", +/* colors */ +". c #000000", +"# c #181818", +"a c #201e1f", +"b c #3c3c00", +"c c #202020", +"d c #00146f", +"e c #00475d", +"f c #4f0000", +"g c #4e3300", +"h c #3a75ff", +"i c #00ff00", +"j c #00a5dc", +"k c #3aa6ff", +"l c #ff0000", +"m c #ff7700", +"n c #cfcf00", +"o c #ffff00", +"p c #98a0a8", +"q c #999aff", +"r c #c8c8c8", +"s c #666666", +/* pixels */ +"pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.........................................................................................", +"pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.........................................................................................", +"pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp..alla...................................................................................", +"pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp..lrll...................................................................................", +"pppp........................................................pppp..llll...................................................................................", +"pppp.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp..alla...................................................................................", +"pppp.accccccqqqcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp.........................................................................................", +"pppp.ccqqqcccccaaaaaaaaaaassaaaassaaaaaaaaaaaaaaaaaaaaaaaaarpppp..aooa.assa..............................................................................", +"pppp.cqcccqccccaaqaaaaaaasrssaasrssaaaaaaaaaaaaaaaaaaaaaaaarpppp..oroo.srss..............................................................................", +"pppp.cqqqqqccccaaaaaaaaaassssaassssaaaaaaaaaaaaaaaaaaaaaaaarpppp..oooo.ssss..............................................................................", +"pppp.cqccccccccaaqaaaaaaaassaaaassaaaaaaaaaaaaaaaaaaaaaaaaarpppp..aooa.assa..............................................................................", +"pppp.ccqqqcccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp.........................................................................................", +"pppp.ccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp..aiia...................................................................................", +"pppp.ccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp..irii...................................................................................", +"pppp.ccccccccqcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp..iiii...................................................................................", +"pppp.cccccccqqqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp..aiia...................................................................................", +"pppp.cqcqqcccqcaaaaaaaassaaaassaaaassaaaaaaaaaaaaaaaaaaaaaarpppp.........................................................................................", +"pppp.cqqccqccccaaqaaaasrssaasrssaasrssaaaaaaaaaaaaaaaaaaaaarpppp..iiii###ooo##m###m#l###l................................................................", +"pppp.cqqccqccccaaaaaaassssaassssaassssaaaaaaaaaaaaaaaaaaaaarpppp..#i##i#o###o#m###m#l###l................................................................", +"pppp.cqcqqcccccaaqaaaaassaaaassaaaassaaaaaaaaaaaaaaaaaaaaaarpppp..#i##i#o#####mm#mm##l#l#................................................................", +"pppp.cqccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp..#iii##o#####m#m#m###l##................................................................", +"pppp.cqccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp..#i##i#o#####m###m##l#l#................................................................", +"pppp.cqccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp..#i##i#o###o#m###m#l###l................................................................", +"pppp.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp..iiii###ooo##m###m#l###l................................................................", +"pppp.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp.........................................................................................", +"pppp.aqaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp..##k#####k####kkk##kkkkk####k##kkkkk###kk##kkkkk##kkk###kkk######.......................", +"pppp.aqaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp..#k#k###kk###k###k#####k###kk##k######k########k#k###k#k###k#####.......................", +"pppp.aaqaqaaaaaqaqqaaaqqqaaqaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp..k###k#k#k#######k####k###k#k##k#kk##k########k##k###k#k##kk#####.......................", +"pppp.aaaqaaaqqaqqaaqaaaaaqaqaaaqaqaaaaaaaaaaaaaaaaaaaaaaaaarpppp..k###k###k#####kk####kk##k##k##kk##k#k#kk#####k###kkk###kk#k#####.......................", +"pppp.aaqaqaaaaaqaaaaaaqqqqaqaaqqaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp..k###k###k####k########k#kkkkk#####k#kk##k###k###k###k#####k#####.......................", +"pppp.aqaaaqaaaaqaaaaaqaaaqaaqqaqaqaaaaaaaaaaaaaaaaaaaaaaaaarpppp..#k#k####k###k#####k###k####k##k###k#k###k##k####k###k####k####k#.......................", +"pppp.aqaaaqaaaaqaaaaaaqqqqaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp..##k###kkkkk#kkkkk##kkk#####k###kkk###kkk###k#####kkk###kk####kkk.......................", +"pppp.aaaaaaaaaaaaaaaaaaaaaaqaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp..##############################################################k#.......................", +"pppp.aaaaaaaaaaaaaaaaaaaaaaaqqqaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp.........................................................................................", +"pppp.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp.........................................................................................", +"pppprrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrpppp.........................................................................................", +"pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.........................................................................................", +"pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.........................................................................................", +"pppp........................................................pppp.........................................................................................", +"pppp.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp.........................................................................................", +"pppp.fffffafffffafffffafffffafffffafffffafffffafffffaaaaaaarpppp.........................................................................................", +"pppp.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp.........................................................................................", +"pppp.fffffafffffafffffafffffafffffafffffafffffafffffaaaaaaarpppp.........................................................................................", +"pppp.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp.........................................................................................", +"pppp.fffffafffffafffffafffffafffffafffffafffffafffffaaaaaaarpppp.........................................................................................", +"pppp.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp.........................................................................................", +"pppp.fffffafffffafffffafffffafffffafffffafffffafffffaaaaaaarpppp.........................................................................................", +"pppp.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp.........................................................................................", +"pppp.fffffafffffafffffafffffafffffafffffafffffafffffaaaaaaarpppp.........................................................................................", +"pppp.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp.........................................................................................", +"pppp.bbbbbabbbbbabbbbbabbbbbabbbbbabbbbbabbbbbabbbbbaaaaaaarpppp.........................................................................................", +"pppp.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp.........................................................................................", +"pppp.eeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaaaaaaarpppp.........................................................................................", +"pppp.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahhaarpppp.........................................................................................", +"pppp.eeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaahrhharpppp.........................................................................................", +"pppp.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahhhharpppp.........................................................................................", +"pppp.eeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaaahhaarpppp.........................................................................................", +"pppp.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpppp.........................................................................................", +"pppp.eeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaaaaaaarpppp.........................................................................................", +"pppprrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrpppp.........................................................................................", +"pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.........................................................................................", +"pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.........................................................................................", +"pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.........................................................................................", +"pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.........................................................................................", +".........................................................................................................................................................", +".........................................................................................................................................................", +".........................................................................................................................................................", +".....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.....................................................................................................", +".....fffffafffffafffffafffffafffffafffffafffffafffff.lllll...............................................................................................", +".....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaa...............................................................................................", +".....fffffafffffafffffafffffafffffafffffafffffafffff.lllll...............................................................................................", +".....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaa...............................................................................................", +".....fffffafffffafffffafffffafffffafffffafffffafffff.lllll...............................................................................................", +".....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaa...............................................................................................", +".....fffffafffffafffffafffffafffffafffffafffffafffff.lllll...............................................................................................", +".....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaa...............................................................................................", +".....fffffafffffafffffafffffafffffafffffafffffafffff.lllll..amma.agga....................................................................................", +".....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaa..mrmm.grgg....................................................................................", +".....bbbbbabbbbbabbbbbabbbbbabbbbbabbbbbabbbbbabbbbb.nnnnn..mmmm.gggg....................................................................................", +".....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaa..amma.agga....................................................................................", +".....eeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeee.jjjjj..aaaa.aaaa....................................................................................", +".....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaa..aaaa.aaaa....................................................................................", +".....eeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeee.jjjjj..ahha.adda....................................................................................", +".....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaa..hrhh.drdd....................................................................................", +".....eeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeee.jjjjj..hhhh.dddd....................................................................................", +".....aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaa..ahha.adda....................................................................................", +".....eeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeeeaeeeee.jjjjj...............................................................................................", +".........................................................................................................................................................", +".........................................................................................................................................................", +".........................................................................................................................................................", +"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc............................................................................." +}; diff --git a/wmspaceweather/wmgeneral/wmgeneral.c b/wmspaceweather/wmgeneral/wmgeneral.c new file mode 100644 index 0000000..a4f13c1 --- /dev/null +++ b/wmspaceweather/wmgeneral/wmgeneral.c @@ -0,0 +1,366 @@ +/* + Best viewed with vim5, using ts=4 + + wmgeneral was taken from wmppp. + + It has a lot of routines which most of the wm* programs use. + + ------------------------------------------------------------ + + Author: Martijn Pieterse ([email protected]) + + --- + CHANGES: + --- + 02/05/1998 (Martijn Pieterse, [email protected]) + * changed the read_rc_file to parse_rcfile, as suggester by Marcelo E. Magallon + * debugged the parse_rc file. + 30/04/1998 (Martijn Pieterse, [email protected]) + * Ripped similar code from all the wm* programs, + and put them in a single file. + +*/ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <ctype.h> +#include <stdarg.h> + +#include <X11/Xlib.h> +#include <X11/xpm.h> +#include <X11/extensions/shape.h> + +#include "wmgeneral.h" + + /*****************/ + /* X11 Variables */ +/*****************/ + +Window Root; +int screen; +int x_fd; +int d_depth; +XSizeHints mysizehints; +XWMHints mywmhints; +Pixel back_pix, fore_pix; +char *Geometry = ""; +Window iconwin, win; +GC NormalGC; +XpmIcon wmgen; +Pixmap pixmask; + + /*****************/ + /* Mouse Regions */ +/*****************/ + +typedef struct { + int enable; + int top; + int bottom; + int left; + int right; +} MOUSE_REGION; + +#define MAX_MOUSE_REGION (8) +MOUSE_REGION mouse_region[MAX_MOUSE_REGION]; + + /***********************/ + /* Function Prototypes */ +/***********************/ + +static void GetXPM(XpmIcon *, char **); +static Pixel GetColor(char *); +void RedrawWindow(void); +void AddMouseRegion(int, int, int, int, int); +int CheckMouseRegion(int, int); + +/*******************************************************************************\ +|* read_rc_file *| +\*******************************************************************************/ + +void parse_rcfile(const char *filename, rckeys *keys) { + + char *p; + char temp[128]; + char *tokens = " :\t\n"; + FILE *fp; + int i,key; + + fp = fopen(filename, "r"); + if (fp) { + while (fgets(temp, 128, fp)) { + key = 0; + while (key >= 0 && keys[key].label) { + if ((p = strstr(temp, keys[key].label))) { + p += strlen(keys[key].label); + p += strspn(p, tokens); + if ((i = strcspn(p, "#\n"))) p[i] = 0; + free(*keys[key].var); + *keys[key].var = strdup(p); + key = -1; + } else key++; + } + } + fclose(fp); + } +} + + +/*******************************************************************************\ +|* GetXPM *| +\*******************************************************************************/ + +static void GetXPM(XpmIcon *wmgen, char *pixmap_bytes[]) { + + XWindowAttributes attributes; + int err; + + /* For the colormap */ + XGetWindowAttributes(display, Root, &attributes); + + wmgen->attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions); + + err = XpmCreatePixmapFromData(display, Root, pixmap_bytes, &(wmgen->pixmap), + &(wmgen->mask), &(wmgen->attributes)); + + if (err != XpmSuccess) { + fprintf(stderr, "Not enough free colorcells.\n"); + exit(1); + } +} + +/*******************************************************************************\ +|* GetColor *| +\*******************************************************************************/ + +static Pixel GetColor(char *name) { + + XColor color; + XWindowAttributes attributes; + + XGetWindowAttributes(display, Root, &attributes); + + color.pixel = 0; + if (!XParseColor(display, attributes.colormap, name, &color)) { + fprintf(stderr, "wm.app: can't parse %s.\n", name); + } else if (!XAllocColor(display, attributes.colormap, &color)) { + fprintf(stderr, "wm.app: can't allocate %s.\n", name); + } + return color.pixel; +} + +/*******************************************************************************\ +|* flush_expose *| +\*******************************************************************************/ + +static int flush_expose(Window w) { + + XEvent dummy; + int i=0; + + while (XCheckTypedWindowEvent(display, w, Expose, &dummy)) + i++; + + return i; +} + +/*******************************************************************************\ +|* RedrawWindow *| +\*******************************************************************************/ + +void RedrawWindow(void) { + + flush_expose(iconwin); + XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, + 0,0, wmgen.attributes.width, wmgen.attributes.height, 0,0); + flush_expose(win); + XCopyArea(display, wmgen.pixmap, win, NormalGC, + 0,0, wmgen.attributes.width, wmgen.attributes.height, 0,0); +} + +/*******************************************************************************\ +|* RedrawWindowXY *| +\*******************************************************************************/ + +void RedrawWindowXY(int x, int y) { + + flush_expose(iconwin); + XCopyArea(display, wmgen.pixmap, iconwin, NormalGC, + x,y, wmgen.attributes.width, wmgen.attributes.height, 0,0); + flush_expose(win); + XCopyArea(display, wmgen.pixmap, win, NormalGC, + x,y, wmgen.attributes.width, wmgen.attributes.height, 0,0); +} + +/*******************************************************************************\ +|* AddMouseRegion *| +\*******************************************************************************/ + +void AddMouseRegion(int index, int left, int top, int right, int bottom) { + + if (index < MAX_MOUSE_REGION) { + mouse_region[index].enable = 1; + mouse_region[index].top = top; + mouse_region[index].left = left; + mouse_region[index].bottom = bottom; + mouse_region[index].right = right; + } +} + +/*******************************************************************************\ +|* CheckMouseRegion *| +\*******************************************************************************/ + +int CheckMouseRegion(int x, int y) { + + int i; + int found; + + found = 0; + + for (i=0; i<MAX_MOUSE_REGION && !found; i++) { + if (mouse_region[i].enable && + x <= mouse_region[i].right && + x >= mouse_region[i].left && + y <= mouse_region[i].bottom && + y >= mouse_region[i].top) + found = 1; + } + if (!found) return -1; + return (i-1); +} + +/*******************************************************************************\ +|* copyXPMArea *| +\*******************************************************************************/ + +void copyXPMArea(int x, int y, int sx, int sy, int dx, int dy) { + + XCopyArea(display, wmgen.pixmap, wmgen.pixmap, NormalGC, x, y, sx, sy, dx, dy); + +} + +/*******************************************************************************\ +|* copyXBMArea *| +\*******************************************************************************/ + +void copyXBMArea(int x, int y, int sx, int sy, int dx, int dy) { + + XCopyArea(display, wmgen.mask, wmgen.pixmap, NormalGC, x, y, sx, sy, dx, dy); +} + + +/*******************************************************************************\ +|* setMaskXY *| +\*******************************************************************************/ + +void setMaskXY(int x, int y) { + + XShapeCombineMask(display, win, ShapeBounding, x, y, pixmask, ShapeSet); + XShapeCombineMask(display, iconwin, ShapeBounding, x, y, pixmask, ShapeSet); +} + +/*******************************************************************************\ +|* openXwindow *| +\*******************************************************************************/ +void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bits, int pixmask_width, int pixmask_height) { + + unsigned int borderwidth = 1; + XClassHint classHint; + char *display_name = NULL; + char *wname = argv[0]; + XTextProperty name; + + XGCValues gcv; + unsigned long gcm; + + + int dummy=0; + int i; + + for (i=1; argv[i]; i++) { + if (!strcmp(argv[i], "-display")) + display_name = argv[i+1]; + } + + if (!(display = XOpenDisplay(display_name))) { + fprintf(stderr, "%s: can't open display %s\n", + wname, XDisplayName(display_name)); + exit(1); + } + screen = DefaultScreen(display); + Root = RootWindow(display, screen); + d_depth = DefaultDepth(display, screen); + x_fd = XConnectionNumber(display); + + /* Convert XPM to XImage */ + GetXPM(&wmgen, pixmap_bytes); + + /* Create a window to hold the stuff */ + mysizehints.flags = USSize | USPosition; + mysizehints.x = 0; + mysizehints.y = 0; + + back_pix = GetColor("white"); + fore_pix = GetColor("black"); + + XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints, + &mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy); + + mysizehints.width = 64; + mysizehints.height = 64; + + win = XCreateSimpleWindow(display, Root, mysizehints.x, mysizehints.y, + mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix); + + iconwin = XCreateSimpleWindow(display, win, mysizehints.x, mysizehints.y, + mysizehints.width, mysizehints.height, borderwidth, fore_pix, back_pix); + + /* Activate hints */ + XSetWMNormalHints(display, win, &mysizehints); + classHint.res_name = wname; + classHint.res_class = wname; + XSetClassHint(display, win, &classHint); + + XSelectInput(display, win, ButtonPressMask | ExposureMask | ButtonReleaseMask | PointerMotionMask | StructureNotifyMask); + XSelectInput(display, iconwin, ButtonPressMask | ExposureMask | ButtonReleaseMask | PointerMotionMask | StructureNotifyMask); + + if (XStringListToTextProperty(&wname, 1, &name) == 0) { + fprintf(stderr, "%s: can't allocate window name\n", wname); + exit(1); + } + + XSetWMName(display, win, &name); + + /* Create GC for drawing */ + + gcm = GCForeground | GCBackground | GCGraphicsExposures; + gcv.foreground = fore_pix; + gcv.background = back_pix; + gcv.graphics_exposures = 0; + NormalGC = XCreateGC(display, Root, gcm, &gcv); + + /* ONLYSHAPE ON */ + + pixmask = XCreateBitmapFromData(display, win, pixmask_bits, pixmask_width, pixmask_height); + + XShapeCombineMask(display, win, ShapeBounding, 0, 0, pixmask, ShapeSet); + XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0, pixmask, ShapeSet); + + /* ONLYSHAPE OFF */ + + mywmhints.initial_state = WithdrawnState; + mywmhints.icon_window = iconwin; + mywmhints.icon_x = mysizehints.x; + mywmhints.icon_y = mysizehints.y; + mywmhints.window_group = win; + mywmhints.flags = StateHint | IconWindowHint | IconPositionHint | WindowGroupHint; + + XSetWMHints(display, win, &mywmhints); + + XSetCommand(display, win, argv, argc); + XMapWindow(display, win); + +} diff --git a/wmspaceweather/wmgeneral/wmgeneral.h b/wmspaceweather/wmgeneral/wmgeneral.h new file mode 100644 index 0000000..55b37dd --- /dev/null +++ b/wmspaceweather/wmgeneral/wmgeneral.h @@ -0,0 +1,50 @@ +#ifndef WMGENERAL_H_INCLUDED +#define WMGENERAL_H_INCLUDED + + /***********/ + /* Defines */ +/***********/ + +#define MAX_MOUSE_REGION (8) + + /************/ + /* Typedefs */ +/************/ + +typedef struct _rckeys rckeys; + +struct _rckeys { + const char *label; + char **var; +}; + +typedef struct { + Pixmap pixmap; + Pixmap mask; + XpmAttributes attributes; +} XpmIcon; + + /*******************/ + /* Global variable */ +/*******************/ + +Display *display; + + /***********************/ + /* Function Prototypes */ +/***********************/ + +void AddMouseRegion(int index, int left, int top, int right, int bottom); +int CheckMouseRegion(int x, int y); + +void openXwindow(int argc, char *argv[], char **, char *, int, int); +void RedrawWindow(void); +void RedrawWindowXY(int x, int y); + +void copyXPMArea(int, int, int, int, int, int); +void copyXBMArea(int, int, int, int, int, int); +void setMaskXY(int, int); + +void parse_rcfile(const char *, rckeys *); + +#endif diff --git a/wmspaceweather/wmgeneral/wmgeneral.o b/wmspaceweather/wmgeneral/wmgeneral.o new file mode 100644 index 0000000000000000000000000000000000000000..29502e5e850e67719a53b8e8fef54427c89bb4c1 GIT binary patch literal 7324 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 literal 0 HcmV?d00001 -- 2.7.4 -- To unsubscribe, send mail to [email protected].
