mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-29 20:10:28 -04:00 
			
		
		
		
	Major changes to the MAP65 branch. This branch is now a copy of
MAP65 v2.3.0, r631, as checked out from the SVN repository on pulsar.princeton.edu. If all goes well with this commit, subsequent MAP65 development will use the Berlios repository. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/map65@2461 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
		
							parent
							
								
									58ec81d9b5
								
							
						
					
					
						commit
						04dcf0a528
					
				
							
								
								
									
										87
									
								
								DFINC.MAK
									
									
									
									
									
								
							
							
						
						
									
										87
									
								
								DFINC.MAK
									
									
									
									
									
								
							| @ -1,87 +0,0 @@ | ||||
| #+ | ||||
| # DFINC.MAK - Visual Fortran application master NMAKE definitions file | ||||
| # | ||||
| # This software DFINC.MAK is part of the Visual Fortran kit. | ||||
| #  | ||||
| # This file should be included at the top of all MAKEFILEs as follows: | ||||
| #  !include <dfinc.mak> | ||||
| #  | ||||
| # NMAKE Options: | ||||
| # | ||||
| # Use the table below to determine the additional options for NMAKE | ||||
| # Application Information Type         Invoke NMAKE | ||||
| # ----------------------------         ------------ | ||||
| # For Debugging Info                   nmake debug=1 | ||||
| # For linker map                       nmake linkmap=1 | ||||
| # For linking with the DLLs            nmake linkdll=1 | ||||
| #- | ||||
| 
 | ||||
| # Set the defaults for all the MSVCxx versions | ||||
| 
 | ||||
| crtimplib=msvcrt.lib | ||||
| 
 | ||||
| !IFNDEF link | ||||
| link = link | ||||
| !ENDIF | ||||
| !IFNDEF libr | ||||
| libr = lib | ||||
| !ENDIF | ||||
| 
 | ||||
| # Define the compiler verbs. | ||||
| FOR = df | ||||
| 
 | ||||
| # Macros for the compiler | ||||
| !IFDEF DEBUG | ||||
| df_debug =  /debug:full | ||||
| lnk_debug = /debug:full /debugtype:both | ||||
| !ELSE | ||||
| df_debug = | ||||
| lnk_debug = /debug:none | ||||
| !ENDIF | ||||
| 
 | ||||
| !IFDEF LINKDLL | ||||
| df_dll   = /call_dll | ||||
| dflibs   = dfordll.lib $(crtimplib) kernel32.lib | ||||
| !ELSE | ||||
| df_dll   = | ||||
| dflibs   = dfor.lib libc.lib kernel32.lib | ||||
| !ENDIF | ||||
| 
 | ||||
| fflags    = $(df_debug) $(df_dll)  | ||||
| 
 | ||||
| # Macros for the FPP Preprocesor  | ||||
| fppflags = | ||||
| fpp = $(FOR) $(fflags) /fpp="$(fppflags)" | ||||
| 
 | ||||
| # Macros for the linker. | ||||
| !IFDEF LINKMAP | ||||
| lflags = /map:$(*B).map $(lflags) | ||||
| !ELSE | ||||
| lflags = $(lflags) | ||||
| !ENDIF | ||||
| 
 | ||||
| # SUFFIXES list | ||||
| .SUFFIXES: .exe .obj .asm .c .bas .cbl .fpp .for .f90 .pas .res .rc  | ||||
| 
 | ||||
| # Define the inference rules | ||||
| .obj.exe: | ||||
|    $(FOR) $(df_dll) $(df_debug) /link $(lflags) $(lnk_debug) $*.obj  | ||||
| 
 | ||||
| .for.exe: | ||||
|    $(FOR) $(fflags) $*.for /link $(lflags) | ||||
| 
 | ||||
| .f90.exe: | ||||
|    $(FOR) $(fflags) $*.f90 /link $(lflags) | ||||
| 
 | ||||
| .fpp.exe: | ||||
|    $(fpp) $*.fpp /link $(lflags) | ||||
| 
 | ||||
| .for.obj: | ||||
|    $(FOR) $(df_debug) $*.for /nolink /object:$@ | ||||
| 
 | ||||
| .f90.obj: | ||||
|    $(FOR) $(df_debug) $*.f90 /nolink /object:$@ | ||||
| 
 | ||||
| .fpp.obj: | ||||
|    $(FOR) $(df_debug) /nolink /object:$@ /fpp:"$(fppflags)" $*.fpp | ||||
| 
 | ||||
							
								
								
									
										102
									
								
								GeoDist.f
									
									
									
									
									
								
							
							
						
						
									
										102
									
								
								GeoDist.f
									
									
									
									
									
								
							| @ -1,102 +0,0 @@ | ||||
| 	subroutine geodist(Eplat, Eplon, Stlat, Stlon, | ||||
|      +	  Az, Baz, Dist) | ||||
| 	implicit none | ||||
| 	real eplat, eplon, stlat, stlon, az, baz, dist | ||||
| 
 | ||||
| C JHT: In actual fact, I use the first two arguments for "My Location", | ||||
| C      the second two for "His location"; West longitude is positive. | ||||
| 
 | ||||
| c | ||||
| c | ||||
| c	Taken directly from: | ||||
| c	Thomas, P.D., 1970, Spheroidal geodesics, reference systems, | ||||
| c	& local geometry, U.S. Naval Oceanographic Office SP-138, | ||||
| c	165 pp. | ||||
| c | ||||
| c	assumes North Latitude and East Longitude are positive | ||||
| c | ||||
| c	EpLat, EpLon = End point Lat/Long | ||||
| c	Stlat, Stlon = Start point lat/long | ||||
| c	Az, BAz = direct & reverse azimuith | ||||
| c	Dist = Dist (km); Deg = central angle, discarded | ||||
| c | ||||
| 
 | ||||
| 	real BOA, F, P1R, P2R, L1R, L2R, DLR, T1R, T2R, TM, | ||||
|      +    DTM, STM, CTM, SDTM,CDTM, KL, KK, SDLMR, L, | ||||
|      +    CD, DL, SD, T, U, V, D, X, E, Y, A, FF64, TDLPM, | ||||
|      +    HAPBR, HAMBR, A1M2, A2M1 | ||||
| 
 | ||||
| 	real AL,BL,D2R,Pi2 | ||||
| 
 | ||||
| 	data AL/6378206.4/		! Clarke 1866 ellipsoid | ||||
| 	data BL/6356583.8/ | ||||
| c	real pi /3.14159265359/ | ||||
| 	data D2R/0.01745329251994/	! degrees to radians conversion factor | ||||
| 	data Pi2/6.28318530718/ | ||||
| 
 | ||||
|         BOA = BL/AL | ||||
|         F = 1.0 - BOA | ||||
| c convert st/end pts to radians | ||||
|         P1R = Eplat * D2R | ||||
|         P2R = Stlat * D2R | ||||
|         L1R = Eplon * D2R | ||||
|         L2R = StLon * D2R | ||||
|         DLR = L2R - L1R			! DLR = Delta Long in Rads | ||||
|         T1R = ATan(BOA * Tan(P1R)) | ||||
|         T2R = ATan(BOA * Tan(P2R)) | ||||
|         TM = (T1R + T2R) / 2.0 | ||||
|         DTM = (T2R - T1R) / 2.0 | ||||
|         STM = Sin(TM) | ||||
|         CTM = Cos(TM) | ||||
|         SDTM = Sin(DTM) | ||||
|         CDTM = Cos(DTM) | ||||
|         KL = STM * CDTM | ||||
|         KK = SDTM * CTM | ||||
|         SDLMR = Sin(DLR/2.0) | ||||
|         L = SDTM * SDTM + SDLMR * SDLMR * (CDTM * CDTM - STM * STM) | ||||
|         CD = 1.0 - 2.0 * L | ||||
|         DL = ACos(CD) | ||||
|         SD = Sin(DL) | ||||
|         T = DL/SD | ||||
|         U = 2.0 * KL * KL / (1.0 - L) | ||||
|         V = 2.0 * KK * KK / L | ||||
|         D = 4.0 * T * T | ||||
|         X = U + V | ||||
|         E = -2.0 * CD | ||||
|         Y = U - V | ||||
|         A = -D * E | ||||
|         FF64 = F * F / 64.0 | ||||
|         Dist = AL*SD*(T -(F/4.0)*(T*X-Y)+FF64*(X*(A+(T-(A+E) | ||||
|      +    /2.0)*X)+Y*(-2.0*D+E*Y)+D*X*Y))/1000.0 | ||||
|         TDLPM = Tan((DLR+(-((E*(4.0-X)+2.0*Y)*((F/2.0)*T+FF64* | ||||
|      +    (32.0*T+(A-20.0*T)*X-2.0*(D+2.0)*Y))/4.0)*Tan(DLR)))/2.0) | ||||
|         HAPBR = ATan2(SDTM,(CTM*TDLPM)) | ||||
|         HAMBR = Atan2(CDTM,(STM*TDLPM)) | ||||
|         A1M2 = Pi2 + HAMBR - HAPBR | ||||
|         A2M1 = Pi2 - HAMBR - HAPBR | ||||
| 
 | ||||
| 1	If ((A1M2 .ge. 0.0) .AND. (A1M2 .lt. Pi2)) GOTO 5 | ||||
|  	If (A1M2 .lt. Pi2) GOTO 4 | ||||
|  	A1M2 = A1M2 - Pi2 | ||||
|         GOTO 1 | ||||
| 4	A1M2 = A1M2 + Pi2 | ||||
|         GOTO 1 | ||||
| c | ||||
| c all of this gens the proper az, baz (forward and back azimuth) | ||||
| c | ||||
| 
 | ||||
| 5	If ((A2M1 .ge. 0.0) .AND. (A2M1 .lt. Pi2)) GOTO 9 | ||||
|  	If (A2M1 .lt. Pi2) GOTO 8 | ||||
| 	A2M1 = A2M1 - Pi2 | ||||
|         GOTO 5 | ||||
| 8	A2M1 = A2M1 + Pi2 | ||||
|         GOTO 5 | ||||
| 
 | ||||
| 9	Az = A1M2 / D2R | ||||
| 	BAZ = A2M1 / D2R | ||||
| c | ||||
| c Fix the mirrored coords here. | ||||
| c | ||||
| 	az = 360.0 - az | ||||
| 	baz = 360.0 - baz | ||||
| 	end | ||||
							
								
								
									
										
											BIN
										
									
								
								KVASD_g95.EXE
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								KVASD_g95.EXE
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										344
									
								
								LICENSE.TXT
									
									
									
									
									
								
							
							
						
						
									
										344
									
								
								LICENSE.TXT
									
									
									
									
									
								
							| @ -1,344 +0,0 @@ | ||||
| The source code for WSJT is made available under the GNU General | ||||
| Public License. | ||||
| 
 | ||||
| ##################################################################### | ||||
| 		    GNU GENERAL PUBLIC LICENSE | ||||
| 		       Version 2, June 1991 | ||||
| 
 | ||||
|  Copyright (C) 1989, 1991 Free Software Foundation, Inc. | ||||
|                        51 Franklin St, Fifth Floor, Boston, MA  02110-1301  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 | ||||
|  | ||||
| 	    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) <year>  <name of author> | ||||
| 
 | ||||
|     This program is free software; you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation; either version 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  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) year 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. | ||||
							
								
								
									
										30
									
								
								LICENSE_WHEATLEY.TXT
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								LICENSE_WHEATLEY.TXT
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| + + + This Software is released under the "Simplified BSD License"  + + + | ||||
| Copyright 2010 Moe Wheatley. All rights reserved. | ||||
| 
 | ||||
| Redistribution and use in source and binary forms, with or without  | ||||
| modification, are permitted provided that the following conditions are  | ||||
| met: | ||||
| 
 | ||||
|   1. Redistributions of source code must retain the above copyright  | ||||
|      notice, this list of conditions and the following disclaimer. | ||||
| 
 | ||||
|   2. Redistributions in binary form must reproduce the above copyright  | ||||
|      notice, this list of conditions and the following disclaimer in  | ||||
|      the documentation and/or other materials provided with the  | ||||
|      distribution. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY Moe Wheatley ``AS IS'' AND ANY EXPRESS OR  | ||||
| IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED  | ||||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE  | ||||
| DISCLAIMED. IN NO EVENT SHALL Moe Wheatley OR CONTRIBUTORS BE LIABLE  | ||||
| FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR  | ||||
| CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF  | ||||
| SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR  | ||||
| BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,  | ||||
| WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE  | ||||
| OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,  | ||||
| EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
| 
 | ||||
| The views and conclusions contained in the software and documentation  | ||||
| are those of the authors and should not be interpreted as representing  | ||||
| official policies, either expressed or implied, of Moe Wheatley. | ||||
							
								
								
									
										
											BIN
										
									
								
								MAP65_Beta_Release.docx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								MAP65_Beta_Release.docx
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										96
									
								
								Makefile.CVF
									
									
									
									
									
								
							
							
						
						
									
										96
									
								
								Makefile.CVF
									
									
									
									
									
								
							| @ -1,96 +0,0 @@ | ||||
| #Makefile for Windows
 | ||||
| !include <dfinc.mak>   #Some definitions for Compaq Visual Fortran
 | ||||
| gcc = cl | ||||
| FC = df | ||||
| #To do bounds checking (with useless reports) put "/check:all" in the
 | ||||
| # --opt= line below (line 56, more or less ...)
 | ||||
| #FFLAGS = /traceback /check:all
 | ||||
| FFLAGS = /traceback /fast /nologo /check:all | ||||
| 
 | ||||
| all:    MAP65.EXE plrs.exe | ||||
| 
 | ||||
| OBJS2C   = init_rs.o encode_rs.o decode_rs.o jtaudio.o plrr_subs.o | ||||
| 
 | ||||
| F2PYONLY = ftn_init ftn_quit audio_init getfile azdist0 astro0 spec | ||||
| 
 | ||||
| SRCS2F90 = a2d.f90 astro0.f90 audio_init.f90 azdist0.f90 \
 | ||||
| 	decode1.f90 ftn_init.f90 ftn_quit.f90 wsjtgen.f90 \
 | ||||
| 	runqqq.f90 fivehz.f90 flushqqq.f90 \
 | ||||
| 	rfile.f90 rfile3a.f90 spec.f90 map65a.F90 display.F90 \
 | ||||
| 	getfile.f90 getfile2.f90 recvpkt.f90 savetf2.F90 \
 | ||||
| 	symspec.f90 sec_midn.F90 getdphi.f90 thcvf.f90 | ||||
| 
 | ||||
| SRCSCOM = datcom.f90 gcom1.f90 gcom2.f90 gcom3.f90 gcom4.f90 spcom.f90 | ||||
| 
 | ||||
| SRCS2F77 = indexx.f gen65.f chkmsg.f \
 | ||||
| 	gentone.f gencwid.f set.f db.f pctile.f sort.f ssort.f \
 | ||||
| 	avemsg65.f demod64a.f encode65.f extract.f four2a.f getpfx1.f \
 | ||||
| 	getpfx2.f graycode.f grid2k.f interleave63.f k2grid.f \
 | ||||
| 	deep65.f morse.f nchar.f packcall.f packgrid.f \
 | ||||
| 	packmsg.f packtext.f setup65.f unpackcall.f unpackgrid.f \
 | ||||
| 	unpackmsg.f unpacktext.f astro.f azdist.f coord.f dcoord.f \
 | ||||
| 	deg2grid.f dot.f ftsky.f geocentric.f GeoDist.f grid2deg.f \
 | ||||
| 	moon2.f MoonDop.f sun.f toxyz.f pfxdump.f \
 | ||||
| 	ccf65.f trimlist.f chkhist.f decode1a.f \
 | ||||
| 	filbig.f fil6521.f twkfreq.f decode65b.f \
 | ||||
| 	afc65b.f fchisq.f ccf2.f | ||||
| 
 | ||||
| SRCS2C   = ptt.c igray.c wrapkarn.c rfile3.c | ||||
| 
 | ||||
| MAP65.EXE: Audio.pyd map65.spec | ||||
| 	python c:\python23\installer\Build.py map65.spec | ||||
| 
 | ||||
| plrs.exe: plrs.f90 sec_midn.F90 plrs_subs_win.c | ||||
| 	cl /c /Foplrs_subs.obj plrs_subs_win.c | ||||
| 	df /fpp /define:CVF plrs.f90 sec_midn.F90 plrs_subs.obj  \
 | ||||
| 	  /link ws2_32.lib | ||||
| 
 | ||||
| Audio.pyd: $(OBJS2C) $(SRCS2F90) $(SRCS2F77) $(SRCS2C) $(SRCSCOM) | ||||
| 	python f2py.py -c \
 | ||||
| 	--quiet --"fcompiler=compaqv" \
 | ||||
| 	--opt="/nologo /traceback /warn:errors /fast /fpp /define:CVF \
 | ||||
| 	      /define:USE_PORTAUDIO" \
 | ||||
| 	$(OBJS2C) \
 | ||||
| 	-lwinmm -lws2_32 -lpa -lfftw3single \
 | ||||
| 	-m Audio \
 | ||||
| 	only: $(F2PYONLY) : \
 | ||||
| 	$(SRCS2F90) $(SRCS2F77) $(SRCS2C) | ||||
| 
 | ||||
| map65.spec: map65.py astro.py g.py options.py palettes.py smeter.py specjt.py | ||||
| 	python c:\python23\installer\makespec.py --icon wsjt.ico \
 | ||||
| 	--tk --onefile map65.py | ||||
| 
 | ||||
| jtaudio.o: jtaudio.c | ||||
| 	$(CC) /nologo /c /DWin32 /Fojtaudio.o jtaudio.c | ||||
| 
 | ||||
| init_rs.obj: init_rs.c | ||||
| 	$(CC) /nologo /c /DBIGSYM=1 init_rs.c | ||||
| 
 | ||||
| init_rs.o: init_rs.c | ||||
| 	$(CC) /nologo /c /DBIGSYM=1 /Foinit_rs.o init_rs.c | ||||
| 
 | ||||
| encode_rs.obj: encode_rs.c | ||||
| 	$(CC) /nologo /c /DBIGSYM=1 encode_rs.c | ||||
| 
 | ||||
| encode_rs.o: encode_rs.c | ||||
| 	$(CC) /nologo /c /DBIGSYM=1 /Foencode_rs.o encode_rs.c | ||||
| 
 | ||||
| decode_rs.obj: decode_rs.c | ||||
| 	$(CC) /nologo /c /DBIGSYM=1 decode_rs.c | ||||
| 
 | ||||
| decode_rs.o: decode_rs.c | ||||
| 	$(CC) /nologo /c /DBIGSYM=1 /Ox /Zd /Fodecode_rs.o decode_rs.c | ||||
| 
 | ||||
| wrapkarn.obj: wrapkarn.c | ||||
| 	$(CC) /nologo /c /DCVF=1 wrapkarn.c | ||||
| 
 | ||||
| igray.obj: igray.c | ||||
| 	$(CC) /nologo /c /DCVF=1 igray.c | ||||
| 
 | ||||
| plrr_subs.o: plrr_subs_win.c | ||||
| 	$(CC) /nologo /c plrr_subs_win.c /Foplrr_subs.o | ||||
| 
 | ||||
| .PHONY : clean | ||||
| 
 | ||||
| clean: | ||||
|     -del *.o *.obj MAP65.EXE Audio.pyd map65.spec | ||||
							
								
								
									
										100
									
								
								Makefile.MinGW
									
									
									
									
									
								
							
							
						
						
									
										100
									
								
								Makefile.MinGW
									
									
									
									
									
								
							| @ -1,100 +0,0 @@ | ||||
| #Makefile to compile MAP65.EXE for Windows.
 | ||||
| #!include <dfinc.mak>   #Some definitions for Compaq Visual Fortran
 | ||||
| CC = /mingw/bin/gcc | ||||
| FC = g95 | ||||
| CFLAGS = -I. -fPIC | ||||
| FFLAGS = -Wall -Wno-precision-loss -fbounds-check -fPIC -fno-second-underscore | ||||
| 
 | ||||
| .f.o: | ||||
| 	${FC} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.f=.o} $< | ||||
| 
 | ||||
| all:    MAP65.EXE | ||||
| 
 | ||||
| OBJC1 = init_rs.o encode_rs.o decode_rs.o jtaudio.o plrr_subs.o deep65.o | ||||
| 
 | ||||
| F2PYONLY = ftn_init ftn_quit audio_init getfile azdist0 astro0 spec | ||||
| 
 | ||||
| SRCF90 = a2d.f90 astro0.f90 audio_init.f90 azdist0.f90 \
 | ||||
| 	decode1.f90 ftn_init.f90 ftn_quit.f90 wsjtgen.f90 \
 | ||||
| 	runqqq.f90 fivehz.f90 flushqqq.f90 \
 | ||||
| 	rfile.f90 rfile3a.f90 spec.f90 map65a.f90 display.f90 \
 | ||||
| 	getfile.f90 getfile2.f90 recvpkt.f90 savetf2.f90 \
 | ||||
| 	symspec.f90 sec_midn.f90 getdphi.f90 thnix.f90 msgtrim.f90 | ||||
| 
 | ||||
| SRCCOM = datcom.f90 gcom1.f90 gcom2.f90 gcom3.f90 gcom4.f90 spcom.f90 | ||||
| 
 | ||||
| SRCF77 = indexx.f gen65.f chkmsg.f \
 | ||||
| 	gentone.f gencwid.f set.f db.f pctile.f sort.f ssort.f \
 | ||||
| 	avemsg65.f demod64a.f encode65.f extract.f getpfx1.f \
 | ||||
| 	getpfx2.f graycode.f grid2k.f interleave63.f k2grid.f \
 | ||||
| 	morse.f nchar.f packcall.f packgrid.f \
 | ||||
| 	packmsg.f packtext.f setup65.f unpackcall.f unpackgrid.f \
 | ||||
| 	unpackmsg.f unpacktext.f astro.f azdist.f coord.f dcoord.f \
 | ||||
| 	deg2grid.f dot.f ftsky.f geocentric.f GeoDist.f grid2deg.f \
 | ||||
| 	moon2.f MoonDop.f sun.f toxyz.f pfxdump.f \
 | ||||
| 	ccf65.f trimlist.f chkhist.f decode1a.f f77_wisdom.f \
 | ||||
| 	fil6521.f twkfreq.f decode65b.f afc65b.f fchisq.f ccf2.f  | ||||
| 
 | ||||
| SRC2F77 = four2a.f filbig.f | ||||
| 
 | ||||
| SRCS2C   = ptt.c igray.c wrapkarn.c cutil.c start_portaudio.c fthread.c | ||||
| 
 | ||||
| OBJF77 = ${SRCF77:.f=.o} | ||||
| 
 | ||||
| MAP65.EXE: Audio.pyd map65.spec | ||||
| 	c:/python25/python c:/python25/pyinstaller-1.3/Build.py map65.spec | ||||
| 
 | ||||
| Audio.pyd: $(OBJC1) $(OBJF77) $(SRCF90) $(SRC2F77) $(SRCS2C) $(SRCCOM) Makefile | ||||
| 	c:/Python25/python C:/python25/scripts/f2py.py -c -I. \
 | ||||
| 	--quiet --fcompiler=g95 \
 | ||||
| 	--opt="-fbounds-check -O0 -cpp" \
 | ||||
| 	--compiler=mingw32 \
 | ||||
| 	$(OBJC1) $(OBJF77) libfftw3f_win.a \
 | ||||
| 	libportaudio.a libpthreadGC2.a -lwinmm -lws2_32 \
 | ||||
| 	-m Audio \
 | ||||
| 	only: $(F2PYONLY) : \
 | ||||
| 	$(SRCF90) $(SRC2F77) $(SRCS2C) | ||||
| 
 | ||||
| map65.spec: map65.py astro.py g.py options.py palettes.py smeter.py specjt.py | ||||
| 	C:/Python25/python C:/Python25/pyinstaller-1.3/makespec.py \
 | ||||
| 	--icon wsjt.ico --tk --onefile map65.py | ||||
| 
 | ||||
| deep65.o: deep65.f | ||||
| 	$(FC) -c -O0 -Wall -fPIC -fno-second-underscore deep65.f | ||||
| 
 | ||||
| jtaudio.o: jtaudio.c | ||||
| 	$(CC) -c -DWin32 -o jtaudio.o jtaudio.c | ||||
| 
 | ||||
| init_rs.obj: init_rs.c | ||||
| 	$(CC) -c -DBIGSYM=1 init_rs.c | ||||
| 
 | ||||
| init_rs.o: init_rs.c | ||||
| 	$(CC) -c -DBIGSYM=1 -o init_rs.o init_rs.c | ||||
| 
 | ||||
| encode_rs.obj: encode_rs.c | ||||
| 	$(CC) -c -DBIGSYM=1 encode_rs.c | ||||
| 
 | ||||
| encode_rs.o: encode_rs.c | ||||
| 	$(CC) -c -DBIGSYM=1 -o encode_rs.o encode_rs.c | ||||
| 
 | ||||
| decode_rs.obj: decode_rs.c | ||||
| 	$(CC) -c -DBIGSYM=1 decode_rs.c | ||||
| 
 | ||||
| decode_rs.o: decode_rs.c | ||||
| 	$(CC) -c -DBIGSYM=1 -o decode_rs.o decode_rs.c | ||||
| 
 | ||||
| wrapkarn.obj: wrapkarn.c | ||||
| 	$(CC) -c -DWin32=1 wrapkarn.c | ||||
| 
 | ||||
| igray.obj: igray.c | ||||
| 	$(CC) -c -DWin32=1 igray.c | ||||
| 
 | ||||
| plrr_subs.o: plrr_subs_win.c | ||||
| 	$(CC) -c plrr_subs_win.c -o plrr_subs.o | ||||
| 
 | ||||
| .PHONY : clean | ||||
| 
 | ||||
| clean: | ||||
| 	rm -f *.o Audio.pyd map65.spec MAP65.EXE  | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										112
									
								
								Makefile.ifort
									
									
									
									
									
								
							
							
						
						
									
										112
									
								
								Makefile.ifort
									
									
									
									
									
								
							| @ -1,112 +0,0 @@ | ||||
| MV ?= mv | ||||
| CC ?= gcc | ||||
| MKDIR ?= mkdir | ||||
| INSTALL=	install | ||||
| FFLAGS	= -O2 -C -threads -reentrancy threaded -traceback -static  | ||||
| LDFLAGS	= -L/usr/lib -L/usr/local/lib  | ||||
| LIBS	=  -lpthread  -lportaudio -lsamplerate -lfftw3f | ||||
| CPPFLAGS = -I/usr/include -I/usr/local/include  | ||||
| CFLAGS	=  -Wall -O0 -g | ||||
| PREFIX	= /usr/local/ | ||||
| # Map65 specific C flags
 | ||||
| CFLAGS	+= -DBIGSYM=1 -fPIC | ||||
| DEFS = -DPACKAGE_NAME=\"map65\" -DPACKAGE_TARNAME=\"map65\" -DPACKAGE_VERSION=\"0.9\" -DPACKAGE_STRING=\"map65\ 0.9\" -DPACKAGE_BUGREPORT=\"\" -DFC_LIB_PATH=\"/opt/g95-install/bin/../lib/gcc-lib/i686-pc-linux-gnu/4.1.3//\" -DFC=\"g95\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_ERRNO_H=1 -DHAVE_SYS_SYSLOG_H=1 -DHAVE_STDDEF_H=1 -DHAVE_LIBGEN_H=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_WAIT_H=1 -DHAVE_STDIO_H=1 -DHAVE_TERMIOS_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_LINUX_PPDEV_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_FCNTL_H=1 -DHAVE_SYS_IOCTL_H=1 -DTIME_WITH_SYS_TIME=1 -DSTRING_WITH_STRINGS=1 -DNDEBUG=1 -DHAS_SAMPLERATE_H=1 -DHAS_PORTAUDIO=1 -DHAS_PORTAUDIO_H=1 -DHAS_PORTAUDIO_LIB=1 -DHAS_FFTW3_H=1 -DHAS_FFTW3FLIBS=1 | ||||
| CFLAGS += ${DEFS} | ||||
| CPPFLAGS += ${DEFS} -I. | ||||
| 
 | ||||
| # MAP65 specific Fortran flags
 | ||||
| # gfortran has no -Wno-precission-loss
 | ||||
| #FFLAGS += -Wall -fbounds-check -fno-second-underscore -fPIC#FFLAGS += -Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC
 | ||||
| #FFLAGS += -Wall -fbounds-check -fno-second-underscore -ffixed-line-length-none -fPIC
 | ||||
| #FFLAGS += -Wall -fbounds-check -fno-second-underscore -fPIC
 | ||||
| #FFLAGS += -cpp -fno-second-underscore
 | ||||
| 
 | ||||
| all:    Audio.so plrs plrr | ||||
| 
 | ||||
| # The default rules
 | ||||
| .c.o: | ||||
| 	${CC} ${CPPFLAGS} ${CFLAGS} -c -o ${<:.c=.o} $< | ||||
| 
 | ||||
| .f.o: | ||||
| 	${FC} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.f=.o} $< | ||||
| 
 | ||||
| .F90.o: | ||||
| 	${FC} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.F90=.o} $< | ||||
| 
 | ||||
| OS=Linux | ||||
| FC=ifort | ||||
| FCV=intel | ||||
| COMPILER += /opt/g95-install/bin/../lib/gcc-lib/i686-pc-linux-gnu/4.1.3// | ||||
| 
 | ||||
| LDFLAGS	+= -L${COMPILER} | ||||
| 
 | ||||
| PYTHON	?= /usr/bin/python | ||||
| RM	?= /bin/rm | ||||
| F2PY	= /usr/bin/f2py | ||||
| 
 | ||||
| ###
 | ||||
| 
 | ||||
| OBJS2C   = init_rs.o encode_rs.o decode_rs.o plrr_subs.o loc.o deep65.o | ||||
| 
 | ||||
| F2PYONLY = ftn_init ftn_quit audio_init getfile azdist0 astro0 spec | ||||
| 
 | ||||
| SRCS2F90 = astro0.F90 audio_init.F90 azdist0.f90 \
 | ||||
| 	decode1.F90 ftn_init.F90 ftn_quit.f90 wsjtgen.F90 \
 | ||||
| 	runqqq.F90 fivehz.F90 flushqqq.F90 \
 | ||||
| 	rfile.f90 rfile3a.F90 spec.f90 map65a.F90 display.F90 \
 | ||||
| 	getfile.F90 getfile2.F90 recvpkt.F90 savetf2.F90 \
 | ||||
| 	symspec.f90 sec_midn.F90 getdphi.f90 thnix.f90 | ||||
| 
 | ||||
| SRCS2F77 = indexx.f gen65.f chkmsg.f \
 | ||||
| 	gentone.f gencwid.f set.f db.f pctile.f sort.f ssort.f \
 | ||||
| 	avemsg65.f demod64a.f encode65.f extract.f four2a.f getpfx1.f \
 | ||||
| 	getpfx2.f graycode.f grid2k.f interleave63.f k2grid.f \
 | ||||
| 	morse.f nchar.f packcall.f packgrid.f \
 | ||||
| 	packmsg.f packtext.f setup65.f unpackcall.f unpackgrid.f \
 | ||||
| 	unpackmsg.f unpacktext.f astro.f azdist.f coord.f dcoord.f \
 | ||||
| 	deg2grid.f dot.f ftsky.f geocentric.f GeoDist.f grid2deg.f \
 | ||||
| 	moon2.f MoonDop.f sun.f toxyz.f pfxdump.f \
 | ||||
| 	ccf65.f trimlist.f chkhist.f decode1a.f \
 | ||||
| 	filbig.f fil6521.f twkfreq.f decode65b.f \
 | ||||
| 	afc65b.f fchisq.f ccf2.f rfile2.f | ||||
| 
 | ||||
| OBJS2F77 = ${SRCS2F77:.f=.o} | ||||
| 
 | ||||
| SRCS3C = ptt_unix.c igray.c wrapkarn.c cutil.c fthread.c | ||||
| OBJS3C = ${SRCS3C:.c=.o} | ||||
| 
 | ||||
| AUDIOSRCS = a2d.f90 jtaudio.c start_portaudio.c | ||||
| 
 | ||||
| deep65.o: deep65.F | ||||
| 	$(FC) -c -O0 -Wall -fno-second-underscore -fPIC deep65.F | ||||
| 
 | ||||
| Audio.so: $(OBJS2C) $(OBJS3C) $(OBJS2F77) $(SRCS2F90) $(AUDIOSRCS) | ||||
| 	 ${F2PY} -c --quiet --opt="-O ${CFLAGS} \
 | ||||
| 	${FFLAGS}"	$(OBJS2C) $(OBJS2F77) -m Audio \
 | ||||
| 	--f77exec=${FC} --f90exec=${FC} ${CPPFLAGS} ${LDFLAGS} ${LIBS} \
 | ||||
| 	only: $(F2PYONLY) \
 | ||||
| 	: $(SRCS2F90) \
 | ||||
| 	${SRCS3C} ${AUDIOSRCS} | ||||
| 
 | ||||
| 
 | ||||
| init_rs_int.o: init_rs.c | ||||
| 	$(CC) $(CFLAGS) -c -DBIGSYM=1 -o init_rs_int.o init_rs.c | ||||
| encode_rs_int.o: encode_rs.c | ||||
| 	$(CC) $(CFLAGS) -c -DBIGSYM=1 -o encode_rs_int.o encode_rs.c | ||||
| decode_rs_int.o: decode_rs.c | ||||
| 	$(CC) $(CFLAGS) -c -DBIGSYM=1 -o decode_rs_int.o decode_rs.c | ||||
| 
 | ||||
| plrr:   plrr.F90 sec_midn.F90 plrr_subs.c cutil.c | ||||
| 	$(CC) -c plrs_subs.c cutil.c | ||||
| 	$(FC) -o plrr -fno-second-underscore plrr.F90 sec_midn.F90 plrr_subs.o cutil.o | ||||
| 
 | ||||
| plrs:   plrs.F90 sec_midn.F90 plrs_subs.c cutil.c | ||||
| 	$(CC) -c plrs_subs.c cutil.c | ||||
| 	$(FC) -o plrs -fno-second-underscore plrs.F90 sec_midn.F90 plrs_subs.o cutil.o | ||||
| 
 | ||||
| .PHONY : clean | ||||
| clean: | ||||
| 	${RM} -f *.o *.pyc *.so *~ map65 map65.spec | ||||
| 
 | ||||
| distclean: clean | ||||
| 	${RM} -f config.log config.status Makefile | ||||
							
								
								
									
										112
									
								
								Makefile.in
									
									
									
									
									
								
							
							
						
						
									
										112
									
								
								Makefile.in
									
									
									
									
									
								
							| @ -1,112 +0,0 @@ | ||||
| MV ?= mv | ||||
| CC ?= @CC@ | ||||
| MKDIR ?= mkdir | ||||
| INSTALL=	install | ||||
| FFLAGS	= @FFLAGS@ | ||||
| LDFLAGS	= @LDFLAGS@ | ||||
| LIBS	= @LIBS@ | ||||
| CPPFLAGS = @CPPFLAGS@ | ||||
| CFLAGS	= @CFLAGS@ | ||||
| PREFIX	= @PREFIX@ | ||||
| # Map65 specific C flags
 | ||||
| CFLAGS	+= -DBIGSYM=1 -fPIC | ||||
| DEFS = @DEFS@ | ||||
| CFLAGS += ${DEFS} | ||||
| CPPFLAGS += ${DEFS} -I. | ||||
| 
 | ||||
| # MAP65 specific Fortran flags
 | ||||
| # gfortran has no -Wno-precission-loss
 | ||||
| #FFLAGS += -Wall -fbounds-check -fno-second-underscore -fPIC#FFLAGS += -Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC
 | ||||
| #FFLAGS += -Wall -fbounds-check -fno-second-underscore -ffixed-line-length-none -fPIC
 | ||||
| #FFLAGS += -Wall -fbounds-check -fno-second-underscore -fPIC
 | ||||
| #FFLAGS += -cpp -fno-second-underscore
 | ||||
| 
 | ||||
| all:    Audio.so plrs plrr | ||||
| 
 | ||||
| # The default rules
 | ||||
| .c.o: | ||||
| 	${CC} ${CPPFLAGS} ${CFLAGS} -c -o ${<:.c=.o} $< | ||||
| 
 | ||||
| .f.o: | ||||
| 	${FC} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.f=.o} $< | ||||
| 
 | ||||
| .F90.o: | ||||
| 	${FC} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.F90=.o} $< | ||||
| 
 | ||||
| OS=@OS@ | ||||
| FC=@FC@ | ||||
| FCV=@FCV@ | ||||
| COMPILER += @FC_LIB_PATH@ | ||||
| 
 | ||||
| LDFLAGS	+= -L${COMPILER} | ||||
| 
 | ||||
| PYTHON	?= @PYTHON@ | ||||
| RM	?= @RM@ | ||||
| F2PY	= @F2PY@ | ||||
| 
 | ||||
| ###
 | ||||
| 
 | ||||
| OBJS2C   = init_rs.o encode_rs.o decode_rs.o plrr_subs.o loc.o deep65.o | ||||
| 
 | ||||
| F2PYONLY = ftn_init ftn_quit audio_init getfile azdist0 astro0 spec | ||||
| 
 | ||||
| SRCS2F90 = astro0.F90 audio_init.F90 azdist0.f90 \
 | ||||
| 	decode1.F90 ftn_init.F90 ftn_quit.f90 wsjtgen.F90 \
 | ||||
| 	runqqq.F90 fivehz.F90 flushqqq.F90 \
 | ||||
| 	rfile.f90 rfile3a.F90 spec.f90 map65a.F90 display.F90 \
 | ||||
| 	getfile.F90 getfile2.F90 recvpkt.F90 savetf2.F90 \
 | ||||
| 	symspec.f90 sec_midn.F90 getdphi.f90 thnix.f90 | ||||
| 
 | ||||
| SRCS2F77 = indexx.f gen65.f chkmsg.f \
 | ||||
| 	gentone.f gencwid.f set.f db.f pctile.f sort.f ssort.f \
 | ||||
| 	avemsg65.f demod64a.f encode65.f extract.f four2a.f getpfx1.f \
 | ||||
| 	getpfx2.f graycode.f grid2k.f interleave63.f k2grid.f \
 | ||||
| 	morse.f nchar.f packcall.f packgrid.f \
 | ||||
| 	packmsg.f packtext.f setup65.f unpackcall.f unpackgrid.f \
 | ||||
| 	unpackmsg.f unpacktext.f astro.f azdist.f coord.f dcoord.f \
 | ||||
| 	deg2grid.f dot.f ftsky.f geocentric.f GeoDist.f grid2deg.f \
 | ||||
| 	moon2.f MoonDop.f sun.f toxyz.f pfxdump.f f77_wisdom.f \
 | ||||
| 	ccf65.f trimlist.f chkhist.f decode1a.f \
 | ||||
| 	filbig.f fil6521.f twkfreq.f decode65b.f \
 | ||||
| 	afc65b.f fchisq.f ccf2.f rfile2.f | ||||
| 
 | ||||
| OBJS2F77 = ${SRCS2F77:.f=.o} | ||||
| 
 | ||||
| SRCS3C = ptt_unix.c igray.c wrapkarn.c cutil.c fthread.c | ||||
| OBJS3C = ${SRCS3C:.c=.o} | ||||
| 
 | ||||
| AUDIOSRCS = a2d.f90 jtaudio.c start_portaudio.c | ||||
| 
 | ||||
| deep65.o: deep65.F | ||||
| 	$(FC) -c -O0 -Wall -fno-second-underscore -fPIC deep65.F | ||||
| 
 | ||||
| Audio.so: $(OBJS2C) $(OBJS3C) $(OBJS2F77) $(SRCS2F90) $(AUDIOSRCS) | ||||
| 	${F2PY} -c --quiet --noopt --debug \
 | ||||
| 	--f77flags="${FFLAGS}" --f90flags="${FFLAGS}" \
 | ||||
| 	$(OBJS2C) $(OBJS2F77) -m Audio \
 | ||||
| 	--fcompiler=${FCV} --f77exec=${FC} --f90exec=${FC} \
 | ||||
| 	${CPPFLAGS} ${LDFLAGS} ${LIBS} \
 | ||||
| 	only: $(F2PYONLY) : $(SRCS2F90) \
 | ||||
| 	${SRCS3C} ${AUDIOSRCS} | ||||
| 
 | ||||
| init_rs_int.o: init_rs.c | ||||
| 	$(CC) $(CFLAGS) -c -DBIGSYM=1 -o init_rs_int.o init_rs.c | ||||
| encode_rs_int.o: encode_rs.c | ||||
| 	$(CC) $(CFLAGS) -c -DBIGSYM=1 -o encode_rs_int.o encode_rs.c | ||||
| decode_rs_int.o: decode_rs.c | ||||
| 	$(CC) $(CFLAGS) -c -DBIGSYM=1 -o decode_rs_int.o decode_rs.c | ||||
| 
 | ||||
| plrr:   plrr.F90 sec_midn.F90 plrr_subs.c cutil.c | ||||
| 	$(CC) -c plrs_subs.c cutil.c | ||||
| 	$(FC) -o plrr -fno-second-underscore plrr.F90 sec_midn.F90 plrr_subs.o cutil.o | ||||
| 
 | ||||
| plrs:   plrs.F90 sec_midn.F90 plrs_subs.c cutil.c | ||||
| 	$(CC) -c plrs_subs.c cutil.c | ||||
| 	$(FC) -o plrs -fno-second-underscore plrs.F90 sec_midn.F90 plrs_subs.o cutil.o | ||||
| 
 | ||||
| .PHONY : clean | ||||
| clean: | ||||
| 	${RM} -f *.o *.pyc *.so *~ map65 map65.spec | ||||
| 
 | ||||
| distclean: clean | ||||
| 	${RM} -f config.log config.status Makefile | ||||
| @ -1,121 +0,0 @@ | ||||
| CC ?= gcc | ||||
| FFLAGS	= -g -O2 | ||||
| LDFLAGS	= -L/usr/local/lib -lpthread  -lasound | ||||
| CPPFLAGS = -I/usr/local/include -I/usr/include/alsa  | ||||
| CFLAGS	=  -Wall -O0 -g  -Wall -O0 -g | ||||
| # WSJT specific C flags
 | ||||
| CFLAGS	+= -DBIGSYM=1 | ||||
| DEFS = -DPACKAGE_NAME=\"wsjt\" -DPACKAGE_TARNAME=\"wsjt\" -DPACKAGE_VERSION=\"5.9.2\" -DPACKAGE_STRING=\"wsjt\ 5.9.2\" -DPACKAGE_BUGREPORT=\"\" -DG95_LIB_PATH=\"/u/g95/g95-install/bin/../lib/gcc-lib/i686-pc-linux-gnu/4.0.1//\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_ERRNO_H=1 -DHAVE_SYS_SYSLOG_H=1 -DHAVE_STDDEF_H=1 -DHAVE_LIBGEN_H=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_WAIT_H=1 -DHAVE_STDIO_H=1 -DHAVE_TERMIOS_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_LINUX_PPDEV_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_FCNTL_H=1 -DHAVE_SYS_IOCTL_H=1 -DTIME_WITH_SYS_TIME=1 -DSTRING_WITH_STRINGS=1 -DSIZEOF_INT64_T=8 -DSIZEOF_LONG_LONG=8 -DNDEBUG=1 -DPREFIX=\"/usr/local/\" -DUSE_SERIAL=1 -DUSE_ALSA=1 -DHAS_ASOUNDLIB_H=1 -DHAS_SOUNDCARD_H=1 -DHAS_SAMPLERATE_H=1  | ||||
| CFLAGS += ${DEFS} | ||||
| CPPFLAGS += ${DEFS} | ||||
| 
 | ||||
| # WSJT specific Fortran flags
 | ||||
| #FFLAGS += -Wall -fbounds-check -fno-second-underscore -ffixed-line-length-none
 | ||||
| FFLAGS += -Wall -fbounds-check -fno-second-underscore  | ||||
| #FFLAGS += -cpp -fno-second-underscore
 | ||||
| # The default rules
 | ||||
| .c.o: | ||||
| 	${CC} ${CPPFLAGS} ${CFLAGS} -c -o ${<:.c=.o} $< | ||||
| 
 | ||||
| .f.o: | ||||
| 	${G95} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.f=.o} $< | ||||
| 
 | ||||
| .F90.o: | ||||
| 	${G95} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.F90=.o} $< | ||||
| 
 | ||||
| OS=Linux | ||||
| G95=/usr/X11R6/bin/g95 | ||||
| COMPILER=/usr/lib/gcc/i686-pc-linux-gnu/3.4.6// | ||||
| #COMPILER=/u/g95/g95-install/bin/../lib/gcc-lib/i686-pc-linux-gnu/4.0.1//
 | ||||
| FC=/usr/X11R6/bin/g95 | ||||
| 
 | ||||
| LDFLAGS	+= -L${COMPILER} | ||||
| LDFLAGS	+= -lg2c | ||||
| 
 | ||||
| PYTHON	?= /usr/X11R6/bin/python | ||||
| RM	?= /usr/X11R6/bin/rm | ||||
| F2PY	= /usr/X11R6/bin/f2py | ||||
| 
 | ||||
| 
 | ||||
| OBJS1 = JT65code.o nchar.o grid2deg.o packmsg.o packtext.o \
 | ||||
| 	packcall.o packgrid.o unpackmsg.o unpacktext.o unpackcall.o \
 | ||||
| 	unpackgrid.o deg2grid.o packdxcc.o chkmsg.o getpfx1.o \
 | ||||
| 	getpfx2.o k2grid.o grid2k.o interleave63.o graycode.o set.o \
 | ||||
| 	igray.o init_rs_int.o encode_rs_int.o decode_rs_int.o \
 | ||||
| 	wrapkarn.o | ||||
| 
 | ||||
| F2PYONLY = ftn_init ftn_quit audio_init spec getfile azdist0 astro0 | ||||
| 
 | ||||
| SRCS2F90 = abc441.F90 astro0.F90 audio_init.F90 azdist0.f90 \
 | ||||
| 	blanker.f90 decode1.F90 decode2.f90 decode3.F90 ftn_init.F90 \
 | ||||
| 	ftn_quit.f90 get_fname.F90 getfile.F90 horizspec.f90 hscroll.f90 \
 | ||||
| 	i1tor4.f90 pix2d.f90 pix2d65.f90 rfile.f90 savedata.F90 spec.f90 \
 | ||||
| 	wsjtgen.F90 runqqq.F90 fivehz.F90 | ||||
| OBJS2F90 = ${SRCS2F90:.f90=.o} | ||||
| 
 | ||||
| SRCS2F77 = wsjt1.f astro.f azdist.f coord.f dcoord.f deg2grid.f \
 | ||||
| 	dot.f ftsky.f geocentric.f GeoDist.f grid2deg.f moon2.f \
 | ||||
| 	MoonDop.f sun.f toxyz.f pfxdump.f \
 | ||||
|         avesp2.f bzap.f spec441.f spec2d.f mtdecode.f stdecode.f \
 | ||||
|         indexx.f s2shape.f flat2.f gen65.f chkmsg.f gen6m.f gentone.f \
 | ||||
|         syncf0.f syncf1.f synct.f decode6m.f avemsg6m.f \
 | ||||
|         set.f flatten.f db.f pctile.f sort.f ssort.f ps.f smooth.f \
 | ||||
|         ping.f longx.f peakup.f sync.f detect.f avemsg65.f decode65.f \
 | ||||
|         demod64a.f encode65.f extract.f flat1.f four2.f rfile2.f \
 | ||||
|         gencw.f getpfx1.f getpfx2.f getsnr.f graycode.f grid2k.f \
 | ||||
|         interleave63.f k2grid.f limit.f lpf1.f deep65.f morse.f \
 | ||||
|         nchar.f packcall.f packgrid.f packmsg.f packtext.f setup65.f \
 | ||||
|         short65.f slope.f spec2d65.f sync65.f unpackcall.f \
 | ||||
|         unpackgrid.f unpackmsg.f unpacktext.f xcor.f xfft.f xfft2.f wsjt65.f | ||||
| OBJS2F77 = ${SRCS2F77:.f=.o} | ||||
| 
 | ||||
| SRCS2C	= init_rs.c encode_rs.c decode_rs.c | ||||
| OBJS2C  = ${SRCS2C:.c=.o} | ||||
| 
 | ||||
| # ok, so far for now
 | ||||
| # Windows start_alsa.c will be a2d.f90 jtaudio.c since it uses portaudio
 | ||||
| #            for *nix start_alsa.c will also be a2d.f90, jtaudio.c
 | ||||
| #               and start_portaudio.c for systems using portaudio
 | ||||
| #            for *nix start_alsa.c will be start_alsa.c for alsa
 | ||||
| #            for *nix start_alsa.c will be start_oss.c for oss
 | ||||
| #
 | ||||
| # ptt_unix.c vs. ptt.c I'll sort out later. 
 | ||||
| # ditto for cutil.c (only used on *nix)
 | ||||
| # --db
 | ||||
| # jtaudio.c/start_threads.c mess will have to be sorted out later
 | ||||
| # to minimise #ifdef's 
 | ||||
| # --db
 | ||||
| # and mostly sorted
 | ||||
| # --db
 | ||||
| #
 | ||||
| SRCS3C	= ptt_unix.c igray.c wrapkarn.c cutil.c | ||||
| OBJS3C  = ${SRCS3C:.c=.o} | ||||
| AUDIOSRCS = start_alsa.c | ||||
| 
 | ||||
| all:	wsjt6 | ||||
| JT65code: $(OBJS1) | ||||
| 	$(FC) -o JT65code $(OBJS1) | ||||
| 
 | ||||
| wsjt6:	Audio.so #wsjt.spec
 | ||||
| #	${PYTHON} c:\python23\installer\Build.py wsjt.spec
 | ||||
| #	${RM} wsjt6
 | ||||
| 
 | ||||
| # 
 | ||||
| #
 | ||||
| Audio.so: $(OBJS2C) $(OBJS3C) $(OBJS2F77) $(SRCS2F90) $(AUDIOSRCS) | ||||
| 	 ${F2PY} -c --quiet --opt="-O -D${CFLAGS} \
 | ||||
| 	-fno-second-underscore"	$(OBJS2C) $(OBJS2F77) -m Audio \
 | ||||
| 	--f77exec=${G95} --f90exec=${G95} ${CPPFLAGS} ${LDFLAGS} \
 | ||||
| 	only: $(F2PYONLY) \
 | ||||
| 	: $(SRCS2F90) \
 | ||||
| 	${SRCS3C} ${AUDIOSRCS} | ||||
| 
 | ||||
| wsjt.spec: wsjt.py astro.py g.py options.py palettes.py smeter.py specjt.py | ||||
| #	${PYTHON} c:\python23\installer\makespec.py --icon wsjt.ico \
 | ||||
| #	--tk --onefile wsjt.py
 | ||||
| 
 | ||||
| 
 | ||||
| .PHONY : clean | ||||
| clean: | ||||
| 	${RM} -f *.o *.so *~ JT65code wsjt6 | ||||
| 
 | ||||
| @ -1,120 +0,0 @@ | ||||
| CC ?= gcc | ||||
| FFLAGS	= -g -O2 -fPIC | ||||
| LDFLAGS	= -L/usr/local/lib -lpthread  -lasound | ||||
| CPPFLAGS = -I/usr/local/include -I/usr/include/alsa -I. | ||||
| CFLAGS	=  -Wall -O0 -g  -Wall -O0 -g -fPIC | ||||
| # WSJT specific C flags
 | ||||
| CFLAGS	+= -DBIGSYM=1 | ||||
| DEFS = -DPACKAGE_NAME=\"wsjt\" -DPACKAGE_TARNAME=\"wsjt\" -DPACKAGE_VERSION=\"5.9.2\" -DPACKAGE_STRING=\"wsjt\ 5.9.2\" -DPACKAGE_BUGREPORT=\"\" -DG95_LIB_PATH=\"/usr/lib/gcc/x86_64-linux-gnu/4.0.3/\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_ERRNO_H=1 -DHAVE_SYS_SYSLOG_H=1 -DHAVE_STDDEF_H=1 -DHAVE_LIBGEN_H=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_WAIT_H=1 -DHAVE_STDIO_H=1 -DHAVE_TERMIOS_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_LINUX_PPDEV_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_FCNTL_H=1 -DHAVE_SYS_IOCTL_H=1 -DTIME_WITH_SYS_TIME=1 -DSTRING_WITH_STRINGS=1 -DSIZEOF_INT64_T=8 -DSIZEOF_LONG_LONG=8 -DNDEBUG=1 -DPREFIX=\"/usr/local/\" -DUSE_SERIAL=1 -DUSE_ALSA=1 -DHAS_ASOUNDLIB_H=1 -DHAS_SOUNDCARD_H=1  | ||||
| CFLAGS += ${DEFS} | ||||
| CPPFLAGS += ${DEFS} | ||||
| 
 | ||||
| # WSJT specific Fortran flags
 | ||||
| FFLAGS += -Wall -fbounds-check -fno-second-underscore -ffixed-line-length-none | ||||
| #FFLAGS += -Wall -fbounds-check -fno-second-underscore 
 | ||||
| #FFLAGS += -cpp -fno-second-underscore
 | ||||
| # The default rules
 | ||||
| .c.o: | ||||
| 	${CC} ${CPPFLAGS} ${CFLAGS} -c -o ${<:.c=.o} $< | ||||
| 
 | ||||
| .f.o: | ||||
| 	${G95} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.f=.o} $< | ||||
| 
 | ||||
| .F90.o: | ||||
| 	${G95} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.F90=.o} $< | ||||
| 
 | ||||
| OS=Linux | ||||
| G95=/usr/bin/g95 | ||||
| COMPILER=/usr/lib/gcc/x86_64-linux-gnu/4.0.3/ | ||||
| FC=/usr/bin/g95 | ||||
| 
 | ||||
| LDFLAGS	+= -L${COMPILER} | ||||
| LDFLAGS	+= -lg2c | ||||
| 
 | ||||
| PYTHON	?= /usr/bin/python | ||||
| RM	?= /bin/rm | ||||
| F2PY	= /usr/bin/f2py | ||||
| 
 | ||||
| 
 | ||||
| OBJS1 = JT65code.o nchar.o grid2deg.o packmsg.o packtext.o \
 | ||||
| 	packcall.o packgrid.o unpackmsg.o unpacktext.o unpackcall.o \
 | ||||
| 	unpackgrid.o deg2grid.o packdxcc.o chkmsg.o getpfx1.o \
 | ||||
| 	getpfx2.o k2grid.o grid2k.o interleave63.o graycode.o set.o \
 | ||||
| 	igray.o init_rs_int.o encode_rs_int.o decode_rs_int.o \
 | ||||
| 	wrapkarn.o | ||||
| 
 | ||||
| F2PYONLY = ftn_init ftn_quit audio_init spec getfile azdist0 astro0 | ||||
| 
 | ||||
| SRCS2F90 = abc441.F90 astro0.F90 audio_init.F90 azdist0.f90 \
 | ||||
| 	blanker.f90 decode1.F90 decode2.f90 decode3.F90 ftn_init.F90 \
 | ||||
| 	ftn_quit.f90 get_fname.F90 getfile.F90 horizspec.f90 hscroll.f90 \
 | ||||
| 	i1tor4.f90 pix2d.f90 pix2d65.f90 rfile.f90 savedata.F90 spec.f90 \
 | ||||
| 	wsjtgen.F90 runqqq.F90 fivehz.F90 | ||||
| OBJS2F90 = ${SRCS2F90:.f90=.o} | ||||
| 
 | ||||
| SRCS2F77 = wsjt1.f astro.f azdist.f coord.f dcoord.f deg2grid.f \
 | ||||
| 	dot.f ftsky.f geocentric.f GeoDist.f grid2deg.f moon2.f \
 | ||||
| 	MoonDop.f sun.f toxyz.f pfxdump.f \
 | ||||
|         avesp2.f bzap.f spec441.f spec2d.f mtdecode.f stdecode.f \
 | ||||
|         indexx.f s2shape.f flat2.f gen65.f chkmsg.f gen6m.f gentone.f \
 | ||||
|         syncf0.f syncf1.f synct.f decode6m.f avemsg6m.f \
 | ||||
|         set.f flatten.f db.f pctile.f sort.f ssort.f ps.f smooth.f \
 | ||||
|         ping.f longx.f peakup.f sync.f detect.f avemsg65.f decode65.f \
 | ||||
|         demod64a.f encode65.f extract.f flat1.f four2.f rfile2.f \
 | ||||
|         gencw.f getpfx1.f getpfx2.f getsnr.f graycode.f grid2k.f \
 | ||||
|         interleave63.f k2grid.f limit.f lpf1.f deep65.f morse.f \
 | ||||
|         nchar.f packcall.f packgrid.f packmsg.f packtext.f setup65.f \
 | ||||
|         short65.f slope.f spec2d65.f sync65.f unpackcall.f \
 | ||||
|         unpackgrid.f unpackmsg.f unpacktext.f xcor.f xfft.f xfft2.f wsjt65.f | ||||
| OBJS2F77 = ${SRCS2F77:.f=.o} | ||||
| 
 | ||||
| SRCS2C	= init_rs.c encode_rs.c decode_rs.c | ||||
| OBJS2C  = ${SRCS2C:.c=.o} | ||||
| 
 | ||||
| # ok, so far for now
 | ||||
| # Windows start_alsa.c will be a2d.f90 jtaudio.c since it uses portaudio
 | ||||
| #            for *nix start_alsa.c will also be a2d.f90, jtaudio.c
 | ||||
| #               and start_portaudio.c for systems using portaudio
 | ||||
| #            for *nix start_alsa.c will be start_alsa.c for alsa
 | ||||
| #            for *nix start_alsa.c will be start_oss.c for oss
 | ||||
| #
 | ||||
| # ptt_unix.c vs. ptt.c I'll sort out later. 
 | ||||
| # ditto for cutil.c (only used on *nix)
 | ||||
| # --db
 | ||||
| # jtaudio.c/start_threads.c mess will have to be sorted out later
 | ||||
| # to minimise #ifdef's 
 | ||||
| # --db
 | ||||
| # and mostly sorted
 | ||||
| # --db
 | ||||
| #
 | ||||
| SRCS3C	= ptt_unix.c igray.c wrapkarn.c cutil.c | ||||
| OBJS3C  = ${SRCS3C:.c=.o} | ||||
| AUDIOSRCS = start_alsa.c | ||||
| 
 | ||||
| all:	wsjt6 | ||||
| JT65code: $(OBJS1) | ||||
| 	$(FC) -o JT65code $(OBJS1) | ||||
| 
 | ||||
| wsjt6:	Audio.so #wsjt.spec
 | ||||
| #	${PYTHON} c:\python23\installer\Build.py wsjt.spec
 | ||||
| #	${RM} wsjt6
 | ||||
| 
 | ||||
| # 
 | ||||
| #
 | ||||
| Audio.so: $(OBJS2C) $(OBJS3C) $(OBJS2F77) $(SRCS2F90) $(AUDIOSRCS) | ||||
| 	 ${F2PY} -c --opt="-O ${CFLAGS} -fPIC \
 | ||||
| 	-fno-second-underscore"	$(OBJS2C) $(OBJS2F77) -m Audio \
 | ||||
| 	--f77exec=${G95} --f90exec=${G95} ${CPPFLAGS} ${LDFLAGS} \
 | ||||
| 	only: $(F2PYONLY) \
 | ||||
| 	: $(SRCS2F90) \
 | ||||
| 	${SRCS3C} ${AUDIOSRCS} | ||||
| 
 | ||||
| wsjt.spec: wsjt.py astro.py g.py options.py palettes.py smeter.py specjt.py | ||||
| #	${PYTHON} c:\python23\installer\makespec.py --icon wsjt.ico \
 | ||||
| #	--tk --onefile wsjt.py
 | ||||
| 
 | ||||
| 
 | ||||
| .PHONY : clean | ||||
| clean: | ||||
| 	${RM} -f *.o *.so *~ JT65code wsjt6 | ||||
| 
 | ||||
							
								
								
									
										643
									
								
								PmwBlt.py
									
									
									
									
									
								
							
							
						
						
									
										643
									
								
								PmwBlt.py
									
									
									
									
									
								
							| @ -1,643 +0,0 @@ | ||||
| # Python interface to some of the commands of the 2.4 version of the | ||||
| # BLT extension to tcl. | ||||
| 
 | ||||
| import string | ||||
| import types | ||||
| import Tkinter | ||||
| 
 | ||||
| # Supported commands: | ||||
| _busyCommand = '::blt::busy' | ||||
| _vectorCommand = '::blt::vector' | ||||
| _graphCommand = '::blt::graph' | ||||
| _testCommand = '::blt::*' | ||||
| _chartCommand = '::blt::stripchart' | ||||
| _tabsetCommand = '::blt::tabset' | ||||
| 
 | ||||
| _haveBlt = None | ||||
| _haveBltBusy = None | ||||
| 
 | ||||
| def _checkForBlt(window): | ||||
|     global _haveBlt | ||||
|     global _haveBltBusy | ||||
| 
 | ||||
|     # Blt may be a package which has not yet been loaded. Try to load it. | ||||
|     try: | ||||
| 	window.tk.call('package', 'require', 'BLT') | ||||
|     except Tkinter.TclError: | ||||
| 	# Another way to try to dynamically load blt: | ||||
| 	try: | ||||
| 	    window.tk.call('load', '', 'Blt') | ||||
| 	except Tkinter.TclError: | ||||
| 	    pass | ||||
| 
 | ||||
|     _haveBlt= (window.tk.call('info', 'commands', _testCommand) != '') | ||||
|     _haveBltBusy = (window.tk.call('info', 'commands', _busyCommand) != '') | ||||
| 
 | ||||
| def haveblt(window): | ||||
|     if _haveBlt is None: | ||||
| 	_checkForBlt(window) | ||||
|     return _haveBlt | ||||
| 
 | ||||
| def havebltbusy(window): | ||||
|     if _haveBlt is None: | ||||
| 	_checkForBlt(window) | ||||
|     return _haveBltBusy | ||||
| 
 | ||||
| def _loadBlt(window): | ||||
|     if _haveBlt is None: | ||||
| 	if window is None: | ||||
| 	    window = Tkinter._default_root | ||||
| 	    if window is None: | ||||
| 	    	window = Tkinter.Tk() | ||||
| 	_checkForBlt(window) | ||||
| 
 | ||||
| def busy_hold(window, cursor = None): | ||||
|     _loadBlt(window) | ||||
|     if cursor is None: | ||||
|         window.tk.call(_busyCommand, 'hold', window._w) | ||||
|     else: | ||||
|         window.tk.call(_busyCommand, 'hold', window._w, '-cursor', cursor) | ||||
| 
 | ||||
| def busy_release(window): | ||||
|     _loadBlt(window) | ||||
|     window.tk.call(_busyCommand, 'release', window._w) | ||||
| 
 | ||||
| def busy_forget(window): | ||||
|     _loadBlt(window) | ||||
|     window.tk.call(_busyCommand, 'forget', window._w) | ||||
| 
 | ||||
| #============================================================================= | ||||
| # Interface to the blt vector command which makes it look like the | ||||
| # builtin python list type. | ||||
| # The -variable, -command, -watchunset creation options are not supported. | ||||
| # The dup, merge, notify, offset, populate, seq and variable methods | ||||
| # and the +, -, * and / operations are not supported. | ||||
| 
 | ||||
| # Blt vector functions: | ||||
| def vector_expr(expression): | ||||
|     tk = Tkinter._default_root.tk | ||||
|     strList = tk.splitlist(tk.call(_vectorCommand, 'expr', expression)) | ||||
|     return tuple(map(string.atof, strList)) | ||||
| 
 | ||||
| def vector_names(pattern = None): | ||||
|     tk = Tkinter._default_root.tk | ||||
|     return tk.splitlist(tk.call(_vectorCommand, 'names', pattern)) | ||||
| 
 | ||||
| class Vector: | ||||
|     _varnum = 0 | ||||
|     def __init__(self, size=None, master=None): | ||||
|         # <size> can be either an integer size, or a string "first:last". | ||||
| 	_loadBlt(master) | ||||
| 	if master: | ||||
| 	    self._master = master | ||||
| 	else: | ||||
| 	    self._master = Tkinter._default_root | ||||
| 	self.tk = self._master.tk | ||||
| 	self._name = 'PY_VEC' + str(Vector._varnum) | ||||
| 	Vector._varnum = Vector._varnum + 1 | ||||
| 	if size is None: | ||||
| 	    self.tk.call(_vectorCommand, 'create', self._name) | ||||
| 	else: | ||||
| 	  self.tk.call(_vectorCommand, 'create', '%s(%s)' % (self._name, size)) | ||||
|     def __del__(self): | ||||
| 	self.tk.call(_vectorCommand, 'destroy', self._name) | ||||
|     def __str__(self): | ||||
| 	return self._name | ||||
| 
 | ||||
|     def __repr__(self): | ||||
| 	return '[' + string.join(map(str, self), ', ') + ']' | ||||
|     def __cmp__(self, list): | ||||
| 	return cmp(self[:], list) | ||||
| 
 | ||||
|     def __len__(self):  | ||||
| 	return self.tk.getint(self.tk.call(self._name, 'length')) | ||||
|     def __getitem__(self, key):  | ||||
| 	oldkey = key | ||||
| 	if key < 0: | ||||
| 	    key = key + len(self) | ||||
| 	try: | ||||
| 	    return self.tk.getdouble(self.tk.globalgetvar(self._name, str(key))) | ||||
|         except Tkinter.TclError: | ||||
| 	    raise IndexError, oldkey | ||||
|     def __setitem__(self, key, value):  | ||||
| 	if key < 0: | ||||
| 	    key = key + len(self) | ||||
| 	return self.tk.globalsetvar(self._name, str(key), float(value)) | ||||
| 
 | ||||
|     def __delitem__(self, key): | ||||
| 	if key < 0: | ||||
| 	    key = key + len(self) | ||||
| 	return self.tk.globalunsetvar(self._name, str(key)) | ||||
| 
 | ||||
|     def __getslice__(self, start, end): | ||||
| 	length = len(self) | ||||
| 	if start < 0: | ||||
| 	    start = 0 | ||||
| 	if end > length: | ||||
| 	    end = length | ||||
| 	if start >= end: | ||||
| 	    return [] | ||||
| 	end = end - 1  # Blt vector slices include end point. | ||||
| 	text = self.tk.globalgetvar(self._name, str(start) + ':' + str(end)) | ||||
| 	return map(self.tk.getdouble, self.tk.splitlist(text)) | ||||
| 
 | ||||
|     def __setslice__(self, start, end, list): | ||||
| 	if start > end: | ||||
| 	    end = start | ||||
| 	self.set(self[:start] + list + self[end:]) | ||||
| 
 | ||||
|     def __delslice__(self, start, end): | ||||
| 	if start < end: | ||||
| 	    self.set(self[:start] + self[end:]) | ||||
| 
 | ||||
|     def __add__(self, list): | ||||
| 	return self[:] + list | ||||
|     def __radd__(self, list): | ||||
| 	return list + self[:] | ||||
|     def __mul__(self, n): | ||||
| 	return self[:] * n | ||||
|     __rmul__ = __mul__ | ||||
| 
 | ||||
|     # Python builtin list methods: | ||||
|     def append(self, *args): | ||||
| 	self.tk.call(self._name, 'append', args) | ||||
|     def count(self, obj): | ||||
| 	return self[:].count(obj) | ||||
|     def index(self, value): | ||||
| 	return self[:].index(value) | ||||
|     def insert(self, index, value): | ||||
| 	self[index:index] = [value] | ||||
|     def remove(self, value): | ||||
| 	del self[self.index(value)] | ||||
|     def reverse(self): | ||||
| 	s = self[:] | ||||
| 	s.reverse() | ||||
| 	self.set(s) | ||||
|     def sort(self, *args): | ||||
| 	s = self[:] | ||||
| 	s.sort() | ||||
| 	self.set(s) | ||||
| 
 | ||||
|     # Blt vector instance methods: | ||||
|     # append - same as list method above | ||||
|     def clear(self): | ||||
| 	self.tk.call(self._name, 'clear') | ||||
|     def delete(self, *args): | ||||
| 	self.tk.call((self._name, 'delete') + args) | ||||
|     def expr(self, expression): | ||||
| 	self.tk.call(self._name, 'expr', expression) | ||||
|     def length(self, newSize=None):  | ||||
| 	return self.tk.getint(self.tk.call(self._name, 'length', newSize)) | ||||
|     def range(self, first, last=None): | ||||
| 	# Note that, unlike self[first:last], this includes the last | ||||
| 	# item in the returned range. | ||||
| 	text = self.tk.call(self._name, 'range', first, last) | ||||
| 	return map(self.tk.getdouble, self.tk.splitlist(text)) | ||||
|     def search(self, start, end=None): | ||||
| 	return self._master._getints(self.tk.call( | ||||
| 		self._name, 'search', start, end)) | ||||
|     def set(self, list): | ||||
| 	if type(list) != types.TupleType: | ||||
| 	    list = tuple(list) | ||||
| 	self.tk.call(self._name, 'set', list) | ||||
| 
 | ||||
|     # The blt vector sort method has different semantics to the python | ||||
|     # list sort method.  Call these blt_sort: | ||||
|     def blt_sort(self, *args): | ||||
| 	self.tk.call((self._name, 'sort') + args) | ||||
|     def blt_sort_reverse(self, *args): | ||||
| 	self.tk.call((self._name, 'sort', '-reverse') + args) | ||||
| 
 | ||||
|     # Special blt vector indexes: | ||||
|     def min(self): | ||||
| 	return self.tk.getdouble(self.tk.globalgetvar(self._name, 'min')) | ||||
|     def max(self): | ||||
| 	return self.tk.getdouble(self.tk.globalgetvar(self._name, 'max')) | ||||
| 
 | ||||
|     # Method borrowed from Tkinter.Var class: | ||||
|     def get(self): | ||||
| 	return self[:] | ||||
| 
 | ||||
| #============================================================================= | ||||
| 
 | ||||
| # This is a general purpose configure routine which can handle the | ||||
| # configuration of widgets, items within widgets, etc.  Supports the | ||||
| # forms configure() and configure('font') for querying and | ||||
| # configure(font = 'fixed', text = 'hello') for setting. | ||||
| 
 | ||||
| def _doConfigure(widget, subcommand, option, kw): | ||||
| 
 | ||||
|     if not option and not kw: | ||||
|         # Return a description of all options. | ||||
|         ret = {} | ||||
|         options = widget.tk.splitlist(widget.tk.call(subcommand)) | ||||
|         for optionString in options: | ||||
|             optionInfo = widget.tk.splitlist(optionString) | ||||
|             option = optionInfo[0][1:] | ||||
|             ret[option] = (option,) + optionInfo[1:] | ||||
|         return ret | ||||
| 
 | ||||
|     if option: | ||||
|         # Return a description of the option given by <option>. | ||||
|         if kw: | ||||
|             # Having keywords implies setting configuration options. | ||||
|             # Can't set and get in one command! | ||||
|             raise ValueError, 'cannot have option argument with keywords' | ||||
|         option = '-' + option | ||||
|         optionInfo = widget.tk.splitlist(widget.tk.call(subcommand + (option,))) | ||||
|         return (optionInfo[0][1:],) + optionInfo[1:] | ||||
| 
 | ||||
|     # Otherwise, set the given configuration options. | ||||
|     widget.tk.call(subcommand + widget._options(kw)) | ||||
| 
 | ||||
| #============================================================================= | ||||
| 
 | ||||
| class Graph(Tkinter.Widget): | ||||
|     # Wrapper for the blt graph widget, version 2.4. | ||||
| 
 | ||||
|     def __init__(self, master=None, cnf={}, **kw): | ||||
| 	_loadBlt(master) | ||||
| 	Tkinter.Widget.__init__(self, master, _graphCommand, cnf, kw) | ||||
| 
 | ||||
|     def bar_create(self, name, **kw): | ||||
| 	self.tk.call((self._w, 'bar', 'create', name) + self._options(kw)) | ||||
| 
 | ||||
|     def line_create(self, name, **kw): | ||||
| 	self.tk.call((self._w, 'line', 'create', name) + self._options(kw)) | ||||
| 
 | ||||
|     def extents(self, item): | ||||
| 	return self.tk.getint(self.tk.call(self._w, 'extents', item)) | ||||
| 
 | ||||
|     def invtransform(self, winX, winY): | ||||
| 	return self._getdoubles( | ||||
| 		self.tk.call(self._w, 'invtransform', winX, winY)) | ||||
| 
 | ||||
|     def inside(self, x, y): | ||||
| 	return self.tk.getint(self.tk.call(self._w, 'inside', x, y)) | ||||
| 
 | ||||
|     def snap(self, photoName): | ||||
| 	self.tk.call(self._w, 'snap', photoName) | ||||
| 
 | ||||
|     def transform(self, x, y): | ||||
| 	return self._getdoubles(self.tk.call(self._w, 'transform', x, y)) | ||||
| 
 | ||||
|     def axis_cget(self, axisName, key): | ||||
| 	return self.tk.call(self._w, 'axis', 'cget', axisName, '-' + key) | ||||
|     def axis_configure(self, axes, option=None, **kw): | ||||
|         # <axes> may be a list of axisNames. | ||||
| 	if type(axes) == types.StringType: | ||||
|             axes = [axes] | ||||
| 	subcommand = (self._w, 'axis', 'configure') + tuple(axes) | ||||
| 	return _doConfigure(self, subcommand, option, kw) | ||||
|     def axis_create(self, axisName, **kw): | ||||
| 	self.tk.call((self._w, 'axis', 'create', axisName) + self._options(kw)) | ||||
|     def axis_delete(self, *args): | ||||
| 	self.tk.call((self._w, 'axis', 'delete') + args) | ||||
|     def axis_invtransform(self, axisName, value): | ||||
| 	return self.tk.getdouble(self.tk.call( | ||||
| 		self._w, 'axis', 'invtransform', axisName, value)) | ||||
|     def axis_limits(self, axisName): | ||||
| 	return self._getdoubles(self.tk.call( | ||||
| 		self._w, 'axis', 'limits', axisName)) | ||||
|     def axis_names(self, *args): | ||||
|         return self.tk.splitlist( | ||||
|                 self.tk.call((self._w, 'axis', 'names') + args)) | ||||
|     def axis_transform(self, axisName, value): | ||||
| 	return self.tk.getint(self.tk.call( | ||||
| 		self._w, 'axis', 'transform', axisName, value)) | ||||
| 
 | ||||
|     def xaxis_cget(self, key): | ||||
| 	return self.tk.call(self._w, 'xaxis', 'cget', '-' + key) | ||||
|     def xaxis_configure(self, option=None, **kw): | ||||
| 	subcommand = (self._w, 'xaxis', 'configure') | ||||
| 	return _doConfigure(self, subcommand, option, kw) | ||||
|     def xaxis_invtransform(self, value): | ||||
| 	return self.tk.getdouble(self.tk.call( | ||||
| 		self._w, 'xaxis', 'invtransform', value)) | ||||
|     def xaxis_limits(self): | ||||
| 	return self._getdoubles(self.tk.call(self._w, 'xaxis', 'limits')) | ||||
|     def xaxis_transform(self, value): | ||||
| 	return self.tk.getint(self.tk.call( | ||||
| 		self._w, 'xaxis', 'transform', value)) | ||||
|     def xaxis_use(self, axisName = None): | ||||
| 	return self.tk.call(self._w, 'xaxis', 'use', axisName) | ||||
| 
 | ||||
|     def x2axis_cget(self, key): | ||||
| 	return self.tk.call(self._w, 'x2axis', 'cget', '-' + key) | ||||
|     def x2axis_configure(self, option=None, **kw): | ||||
| 	subcommand = (self._w, 'x2axis', 'configure') | ||||
| 	return _doConfigure(self, subcommand, option, kw) | ||||
|     def x2axis_invtransform(self, value): | ||||
| 	return self.tk.getdouble(self.tk.call( | ||||
| 		self._w, 'x2axis', 'invtransform', value)) | ||||
|     def x2axis_limits(self): | ||||
| 	return self._getdoubles(self.tk.call(self._w, 'x2axis', 'limits')) | ||||
|     def x2axis_transform(self, value): | ||||
| 	return self.tk.getint(self.tk.call( | ||||
| 		self._w, 'x2axis', 'transform', value)) | ||||
|     def x2axis_use(self, axisName = None): | ||||
| 	return self.tk.call(self._w, 'x2axis', 'use', axisName) | ||||
| 
 | ||||
|     def yaxis_cget(self, key): | ||||
| 	return self.tk.call(self._w, 'yaxis', 'cget', '-' + key) | ||||
|     def yaxis_configure(self, option=None, **kw): | ||||
| 	subcommand = (self._w, 'yaxis', 'configure') | ||||
| 	return _doConfigure(self, subcommand, option, kw) | ||||
|     def yaxis_invtransform(self, value): | ||||
| 	return self.tk.getdouble(self.tk.call( | ||||
| 		self._w, 'yaxis', 'invtransform', value)) | ||||
|     def yaxis_limits(self): | ||||
| 	return self._getdoubles(self.tk.call(self._w, 'yaxis', 'limits')) | ||||
|     def yaxis_transform(self, value): | ||||
| 	return self.tk.getint(self.tk.call( | ||||
| 		self._w, 'yaxis', 'transform', value)) | ||||
|     def yaxis_use(self, axisName = None): | ||||
| 	return self.tk.call(self._w, 'yaxis', 'use', axisName) | ||||
| 
 | ||||
|     def y2axis_cget(self, key): | ||||
| 	return self.tk.call(self._w, 'y2axis', 'cget', '-' + key) | ||||
|     def y2axis_configure(self, option=None, **kw): | ||||
| 	subcommand = (self._w, 'y2axis', 'configure') | ||||
| 	return _doConfigure(self, subcommand, option, kw) | ||||
|     def y2axis_invtransform(self, value): | ||||
| 	return self.tk.getdouble(self.tk.call( | ||||
| 		self._w, 'y2axis', 'invtransform', value)) | ||||
|     def y2axis_limits(self): | ||||
| 	return self._getdoubles(self.tk.call(self._w, 'y2axis', 'limits')) | ||||
|     def y2axis_transform(self, value): | ||||
| 	return self.tk.getint(self.tk.call( | ||||
| 		self._w, 'y2axis', 'transform', value)) | ||||
|     def y2axis_use(self, axisName = None): | ||||
| 	return self.tk.call(self._w, 'y2axis', 'use', axisName) | ||||
| 
 | ||||
|     def crosshairs_cget(self, key): | ||||
| 	return self.tk.call(self._w, 'crosshairs', 'cget', '-' + key) | ||||
|     def crosshairs_configure(self, option=None, **kw): | ||||
| 	subcommand = (self._w, 'crosshairs', 'configure') | ||||
| 	return _doConfigure(self, subcommand, option, kw) | ||||
|     def crosshairs_off(self): | ||||
| 	self.tk.call(self._w, 'crosshairs', 'off') | ||||
|     def crosshairs_on(self): | ||||
| 	self.tk.call(self._w, 'crosshairs', 'on') | ||||
|     def crosshairs_toggle(self): | ||||
| 	self.tk.call(self._w, 'crosshairs', 'toggle') | ||||
| 
 | ||||
|     def element_activate(self, name, *args): | ||||
| 	self.tk.call((self._w, 'element', 'activate', name) + args) | ||||
|     def element_bind(self, tagName, sequence=None, func=None, add=None): | ||||
|         return self._bind((self._w, 'element', 'bind', tagName), | ||||
|                 sequence, func, add) | ||||
|     def element_unbind(self, tagName, sequence, funcid=None): | ||||
|         self.tk.call(self._w, 'element', 'bind', tagName, sequence, '') | ||||
|         if funcid: | ||||
|             self.deletecommand(funcid) | ||||
| 
 | ||||
|     def element_cget(self, name, key): | ||||
| 	return self.tk.call(self._w, 'element', 'cget', name, '-' + key) | ||||
| 
 | ||||
|     def element_closest(self, x, y, *args, **kw): | ||||
|         var = 'python_private_1' | ||||
| 	success = self.tk.getint(self.tk.call( | ||||
|                 (self._w, 'element', 'closest', x, y, var) + | ||||
|                         self._options(kw) + args)) | ||||
| 	if success: | ||||
| 	    rtn = {} | ||||
| 	    rtn['dist'] = self.tk.getdouble(self.tk.globalgetvar(var, 'dist')) | ||||
| 	    rtn['x'] = self.tk.getdouble(self.tk.globalgetvar(var, 'x')) | ||||
| 	    rtn['y'] = self.tk.getdouble(self.tk.globalgetvar(var, 'y')) | ||||
| 	    rtn['index'] = self.tk.getint(self.tk.globalgetvar(var, 'index')) | ||||
| 	    rtn['name'] = self.tk.globalgetvar(var, 'name') | ||||
| 	    return rtn | ||||
| 	else: | ||||
| 	    return None | ||||
| 
 | ||||
|     def element_configure(self, names, option=None, **kw): | ||||
|         # <names> may be a list of elemNames. | ||||
| 	if type(names) == types.StringType: | ||||
|             names = [names] | ||||
| 	subcommand = (self._w, 'element', 'configure') + tuple(names) | ||||
| 	return _doConfigure(self, subcommand, option, kw) | ||||
| 
 | ||||
|     def element_deactivate(self, *args): | ||||
| 	self.tk.call((self._w, 'element', 'deactivate') + args) | ||||
| 
 | ||||
|     def element_delete(self, *args): | ||||
| 	self.tk.call((self._w, 'element', 'delete') + args) | ||||
|     def element_exists(self, name): | ||||
| 	return self.tk.getboolean( | ||||
| 		self.tk.call(self._w, 'element', 'exists', name)) | ||||
| 
 | ||||
|     def element_names(self, *args): | ||||
|         return self.tk.splitlist( | ||||
|                 self.tk.call((self._w, 'element', 'names') + args)) | ||||
|     def element_show(self, nameList=None): | ||||
| 	if nameList is not None: | ||||
| 	    nameList = tuple(nameList) | ||||
| 	return self.tk.splitlist( | ||||
| 		self.tk.call(self._w, 'element', 'show', nameList)) | ||||
|     def element_type(self, name): | ||||
| 	return self.tk.call(self._w, 'element', 'type', name) | ||||
| 
 | ||||
|     def grid_cget(self, key): | ||||
| 	return self.tk.call(self._w, 'grid', 'cget', '-' + key) | ||||
|     def grid_configure(self, option=None, **kw): | ||||
| 	subcommand = (self._w, 'grid', 'configure') | ||||
| 	return _doConfigure(self, subcommand, option, kw) | ||||
| 
 | ||||
|     def grid_off(self): | ||||
| 	self.tk.call(self._w, 'grid', 'off') | ||||
|     def grid_on(self): | ||||
| 	self.tk.call(self._w, 'grid', 'on') | ||||
|     def grid_toggle(self): | ||||
| 	self.tk.call(self._w, 'grid', 'toggle') | ||||
| 
 | ||||
|     def legend_activate(self, *args): | ||||
| 	self.tk.call((self._w, 'legend', 'activate') + args) | ||||
|     def legend_bind(self, tagName, sequence=None, func=None, add=None): | ||||
|         return self._bind((self._w, 'legend', 'bind', tagName), | ||||
|                 sequence, func, add) | ||||
|     def legend_unbind(self, tagName, sequence, funcid=None): | ||||
|         self.tk.call(self._w, 'legend', 'bind', tagName, sequence, '') | ||||
|         if funcid: | ||||
|             self.deletecommand(funcid) | ||||
| 
 | ||||
|     def legend_cget(self, key): | ||||
| 	return self.tk.call(self._w, 'legend', 'cget', '-' + key) | ||||
|     def legend_configure(self, option=None, **kw): | ||||
| 	subcommand = (self._w, 'legend', 'configure') | ||||
| 	return _doConfigure(self, subcommand, option, kw) | ||||
|     def legend_deactivate(self, *args): | ||||
| 	self.tk.call((self._w, 'legend', 'deactivate') + args) | ||||
|     def legend_get(self, pos): | ||||
| 	return self.tk.call(self._w, 'legend', 'get', pos) | ||||
| 
 | ||||
|     def pen_cget(self, name, key): | ||||
| 	return self.tk.call(self._w, 'pen', 'cget', name, '-' + key) | ||||
|     def pen_configure(self, names, option=None, **kw): | ||||
|         # <names> may be a list of penNames. | ||||
| 	if type(names) == types.StringType: | ||||
|             names = [names] | ||||
| 	subcommand = (self._w, 'pen', 'configure') + tuple(names) | ||||
| 	return _doConfigure(self, subcommand, option, kw) | ||||
|     def pen_create(self, name, **kw): | ||||
| 	self.tk.call((self._w, 'pen', 'create', name) + self._options(kw)) | ||||
|     def pen_delete(self, *args): | ||||
| 	self.tk.call((self._w, 'pen', 'delete') + args) | ||||
|     def pen_names(self, *args): | ||||
|         return self.tk.splitlist(self.tk.call((self._w, 'pen', 'names') + args)) | ||||
| 
 | ||||
|     def postscript_cget(self, key): | ||||
| 	return self.tk.call(self._w, 'postscript', 'cget', '-' + key) | ||||
|     def postscript_configure(self, option=None, **kw): | ||||
| 	subcommand = (self._w, 'postscript', 'configure') | ||||
| 	return _doConfigure(self, subcommand, option, kw) | ||||
|     def postscript_output(self, fileName=None, **kw): | ||||
| 	prefix = (self._w, 'postscript', 'output') | ||||
| 	if fileName is None: | ||||
| 	    return self.tk.call(prefix + self._options(kw)) | ||||
| 	else: | ||||
| 	    self.tk.call(prefix + (fileName,) + self._options(kw)) | ||||
| 
 | ||||
|     def marker_after(self, first, second=None): | ||||
| 	self.tk.call(self._w, 'marker', 'after', first, second) | ||||
|     def marker_before(self, first, second=None): | ||||
| 	self.tk.call(self._w, 'marker', 'before', first, second) | ||||
|     def marker_bind(self, tagName, sequence=None, func=None, add=None): | ||||
|         return self._bind((self._w, 'marker', 'bind', tagName), | ||||
|                 sequence, func, add) | ||||
|     def marker_unbind(self, tagName, sequence, funcid=None): | ||||
|         self.tk.call(self._w, 'marker', 'bind', tagName, sequence, '') | ||||
|         if funcid: | ||||
|             self.deletecommand(funcid) | ||||
| 
 | ||||
|     def marker_cget(self, name, key): | ||||
| 	return self.tk.call(self._w, 'marker', 'cget', name, '-' + key) | ||||
|     def marker_configure(self, names, option=None, **kw): | ||||
|         # <names> may be a list of markerIds. | ||||
| 	if type(names) == types.StringType: | ||||
|             names = [names] | ||||
| 	subcommand = (self._w, 'marker', 'configure') + tuple(names) | ||||
| 	return _doConfigure(self, subcommand, option, kw) | ||||
|     def marker_create(self, type, **kw): | ||||
| 	return self.tk.call( | ||||
|                 (self._w, 'marker', 'create', type) + self._options(kw)) | ||||
| 
 | ||||
|     def marker_delete(self, *args): | ||||
| 	self.tk.call((self._w, 'marker', 'delete') + args) | ||||
|     def marker_exists(self, name): | ||||
| 	return self.tk.getboolean( | ||||
| 		self.tk.call(self._w, 'marker', 'exists', name)) | ||||
|     def marker_names(self, *args): | ||||
|         return self.tk.splitlist( | ||||
|                 self.tk.call((self._w, 'marker', 'names') + args)) | ||||
|     def marker_type(self, name): | ||||
| 	type = self.tk.call(self._w, 'marker', 'type', name) | ||||
| 	if type == '': | ||||
| 	    type = None | ||||
| 	return type | ||||
| 
 | ||||
| #============================================================================= | ||||
| class Stripchart(Graph): | ||||
|     # Wrapper for the blt stripchart widget, version 2.4. | ||||
| 
 | ||||
|     def __init__(self, master=None, cnf={}, **kw): | ||||
| 	_loadBlt(master) | ||||
| 	Tkinter.Widget.__init__(self, master, _chartCommand, cnf, kw) | ||||
| 
 | ||||
| #============================================================================= | ||||
| class Tabset(Tkinter.Widget):  | ||||
| 
 | ||||
|     # Wrapper for the blt TabSet widget, version 2.4. | ||||
| 
 | ||||
|     def __init__(self, master=None, cnf={}, **kw): | ||||
| 	_loadBlt(master) | ||||
| 	Tkinter.Widget.__init__(self, master, _tabsetCommand, cnf, kw) | ||||
| 
 | ||||
|     def activate(self, tabIndex): | ||||
|         self.tk.call(self._w, 'activate', tabIndex) | ||||
| 
 | ||||
|     # This is the 'bind' sub-command: | ||||
|     def tag_bind(self, tagName, sequence=None, func=None, add=None): | ||||
|         return self._bind((self._w, 'bind', tagName), sequence, func, add) | ||||
| 
 | ||||
|     def tag_unbind(self, tagName, sequence, funcid=None): | ||||
|         self.tk.call(self._w, 'bind', tagName, sequence, '') | ||||
|         if funcid: | ||||
|             self.deletecommand(funcid) | ||||
| 
 | ||||
|     def delete(self, first, last = None): | ||||
|     	self.tk.call(self._w, 'delete', first, last) | ||||
| 
 | ||||
|     # This is the 'focus' sub-command: | ||||
|     def tab_focus(self, tabIndex): | ||||
|     	self.tk.call(self._w, 'focus', tabIndex) | ||||
|     	 | ||||
|     def get(self, tabIndex): | ||||
| 	return self.tk.call(self._w, 'get', tabIndex) | ||||
| 
 | ||||
|     def index(self, tabIndex): | ||||
| 	index = self.tk.call(self._w, 'index', tabIndex) | ||||
|         if index == '': | ||||
|             return None | ||||
|         else: | ||||
|             return self.tk.getint(self.tk.call(self._w, 'index', tabIndex)) | ||||
| 
 | ||||
|     def insert(self, position, name1, *names, **kw): | ||||
| 	self.tk.call( | ||||
|             (self._w, 'insert', position, name1) + names + self._options(kw)) | ||||
| 
 | ||||
|     def invoke(self, tabIndex): | ||||
|     	return self.tk.call(self._w, 'invoke', tabIndex) | ||||
| 
 | ||||
|     def move(self, tabIndex1, beforeOrAfter, tabIndex2): | ||||
|     	self.tk.call(self._w, 'move', tabIndex1, beforeOrAfter, tabIndex2) | ||||
|     	 | ||||
|     def nearest(self, x, y): | ||||
|     	return self.tk.call(self._w, 'nearest', x, y) | ||||
| 
 | ||||
|     def scan_mark(self, x, y): | ||||
|         self.tk.call(self._w, 'scan', 'mark', x, y) | ||||
| 
 | ||||
|     def scan_dragto(self, x, y): | ||||
|         self.tk.call(self._w, 'scan', 'dragto', x, y) | ||||
| 
 | ||||
|     def see(self, index): | ||||
|         self.tk.call(self._w, 'see', index) | ||||
|     	 | ||||
|     def see(self, tabIndex): | ||||
|     	self.tk.call(self._w,'see',tabIndex) | ||||
|     	 | ||||
|     def size(self): | ||||
| 	return self.tk.getint(self.tk.call(self._w, 'size')) | ||||
| 
 | ||||
|     def tab_cget(self, tabIndex, option): | ||||
|         if option[:1] != '-': | ||||
|             option = '-' + option | ||||
|         if option[-1:] == '_': | ||||
|             option = option[:-1] | ||||
|         return self.tk.call(self._w, 'tab', 'cget', tabIndex, option) | ||||
| 
 | ||||
|     def tab_configure(self, tabIndexes, option=None, **kw): | ||||
|         # <tabIndexes> may be a list of tabs. | ||||
| 	if type(tabIndexes) in (types.StringType, types.IntType): | ||||
|             tabIndexes = [tabIndexes] | ||||
| 	subcommand = (self._w, 'tab', 'configure') + tuple(tabIndexes) | ||||
| 	return _doConfigure(self, subcommand, option, kw) | ||||
| 
 | ||||
|     def tab_names(self, *args): | ||||
|         return self.tk.splitlist(self.tk.call((self._w, 'tab', 'names') + args)) | ||||
| 
 | ||||
|     def tab_tearoff(self, tabIndex, newName = None): | ||||
|         if newName is None: | ||||
|             name = self.tk.call(self._w, 'tab', 'tearoff', tabIndex) | ||||
|             return self.nametowidget(name) | ||||
|         else: | ||||
|             self.tk.call(self._w, 'tab', 'tearoff', tabIndex, newName) | ||||
| 
 | ||||
|     def view(self): | ||||
|         s = self.tk.call(self._w, 'view') | ||||
|         return tuple(map(self.tk.getint, self.tk.splitlist(s))) | ||||
|     def view_moveto(self, fraction): | ||||
|         self.tk.call(self._w, 'view', 'moveto', fraction) | ||||
|     def view_scroll(self, number, what): | ||||
|         self.tk.call(self._w, 'view', 'scroll', number, what) | ||||
							
								
								
									
										361
									
								
								PmwColor.py
									
									
									
									
									
								
							
							
						
						
									
										361
									
								
								PmwColor.py
									
									
									
									
									
								
							| @ -1,361 +0,0 @@ | ||||
| # Functions for converting colors and modifying the color scheme of | ||||
| # an application. | ||||
| 
 | ||||
| import math | ||||
| import string | ||||
| import sys | ||||
| import Tkinter | ||||
| 
 | ||||
| _PI = math.pi | ||||
| _TWO_PI = _PI * 2 | ||||
| _THIRD_PI = _PI / 3 | ||||
| _SIXTH_PI = _PI / 6 | ||||
| _MAX_RGB = float(256 * 256 - 1) # max size of rgb values returned from Tk | ||||
| 
 | ||||
| def setscheme(root, background=None, **kw): | ||||
|     root = root._root() | ||||
|     palette = apply(_calcPalette, (root, background,), kw) | ||||
|     for option, value in palette.items(): | ||||
| 	root.option_add('*' + option, value, 'widgetDefault') | ||||
| 
 | ||||
| def getdefaultpalette(root): | ||||
|     # Return the default values of all options, using the defaults | ||||
|     # from a few widgets. | ||||
| 
 | ||||
|     ckbtn = Tkinter.Checkbutton(root) | ||||
|     entry = Tkinter.Entry(root) | ||||
|     scbar = Tkinter.Scrollbar(root) | ||||
| 
 | ||||
|     orig = {} | ||||
|     orig['activeBackground'] = str(ckbtn.configure('activebackground')[4]) | ||||
|     orig['activeForeground'] = str(ckbtn.configure('activeforeground')[4]) | ||||
|     orig['background'] = str(ckbtn.configure('background')[4]) | ||||
|     orig['disabledForeground'] = str(ckbtn.configure('disabledforeground')[4]) | ||||
|     orig['foreground'] = str(ckbtn.configure('foreground')[4]) | ||||
|     orig['highlightBackground'] = str(ckbtn.configure('highlightbackground')[4]) | ||||
|     orig['highlightColor'] = str(ckbtn.configure('highlightcolor')[4]) | ||||
|     orig['insertBackground'] = str(entry.configure('insertbackground')[4]) | ||||
|     orig['selectColor'] = str(ckbtn.configure('selectcolor')[4]) | ||||
|     orig['selectBackground'] = str(entry.configure('selectbackground')[4]) | ||||
|     orig['selectForeground'] = str(entry.configure('selectforeground')[4]) | ||||
|     orig['troughColor'] = str(scbar.configure('troughcolor')[4]) | ||||
| 
 | ||||
|     ckbtn.destroy() | ||||
|     entry.destroy() | ||||
|     scbar.destroy() | ||||
| 
 | ||||
|     return orig | ||||
| 
 | ||||
| #====================================================================== | ||||
| 
 | ||||
| # Functions dealing with brightness, hue, saturation and intensity of colors. | ||||
| 
 | ||||
| def changebrightness(root, colorName, brightness): | ||||
|     # Convert the color name into its hue and back into a color of the | ||||
|     # required brightness. | ||||
| 
 | ||||
|     rgb = name2rgb(root, colorName) | ||||
|     hue, saturation, intensity = rgb2hsi(rgb) | ||||
|     if saturation == 0.0: | ||||
|         hue = None | ||||
|     return hue2name(hue, brightness) | ||||
| 
 | ||||
| def hue2name(hue, brightness = None): | ||||
|     # Convert the requested hue and brightness into a color name.  If | ||||
|     # hue is None, return a grey of the requested brightness. | ||||
| 
 | ||||
|     if hue is None: | ||||
| 	rgb = hsi2rgb(0.0, 0.0, brightness) | ||||
|     else: | ||||
| 	while hue < 0: | ||||
| 	    hue = hue + _TWO_PI | ||||
| 	while hue >= _TWO_PI: | ||||
| 	    hue = hue - _TWO_PI | ||||
| 
 | ||||
| 	rgb = hsi2rgb(hue, 1.0, 1.0) | ||||
| 	if brightness is not None: | ||||
| 	    b = rgb2brightness(rgb) | ||||
| 	    i = 1.0 - (1.0 - brightness) * b | ||||
| 	    s = bhi2saturation(brightness, hue, i) | ||||
| 	    rgb = hsi2rgb(hue, s, i) | ||||
| 
 | ||||
|     return rgb2name(rgb) | ||||
| 
 | ||||
| def bhi2saturation(brightness, hue, intensity): | ||||
|     while hue < 0: | ||||
|         hue = hue + _TWO_PI | ||||
|     while hue >= _TWO_PI: | ||||
|         hue = hue - _TWO_PI | ||||
|     hue = hue / _THIRD_PI | ||||
|     f = hue - math.floor(hue) | ||||
| 
 | ||||
|     pp = intensity | ||||
|     pq = intensity * f | ||||
|     pt = intensity - intensity * f | ||||
|     pv = 0 | ||||
| 
 | ||||
|     hue = int(hue) | ||||
|     if   hue == 0: rgb = (pv, pt, pp) | ||||
|     elif hue == 1: rgb = (pq, pv, pp) | ||||
|     elif hue == 2: rgb = (pp, pv, pt) | ||||
|     elif hue == 3: rgb = (pp, pq, pv) | ||||
|     elif hue == 4: rgb = (pt, pp, pv) | ||||
|     elif hue == 5: rgb = (pv, pp, pq) | ||||
| 
 | ||||
|     return (intensity - brightness) / rgb2brightness(rgb) | ||||
| 
 | ||||
| def hsi2rgb(hue, saturation, intensity): | ||||
|     i = intensity | ||||
|     if saturation == 0: | ||||
| 	rgb = [i, i, i] | ||||
|     else: | ||||
| 	while hue < 0: | ||||
| 	    hue = hue + _TWO_PI | ||||
| 	while hue >= _TWO_PI: | ||||
| 	    hue = hue - _TWO_PI | ||||
| 	hue = hue / _THIRD_PI | ||||
| 	f = hue - math.floor(hue) | ||||
| 	p = i * (1.0 - saturation) | ||||
| 	q = i * (1.0 - saturation * f) | ||||
| 	t = i * (1.0 - saturation * (1.0 - f)) | ||||
| 
 | ||||
| 	hue = int(hue) | ||||
| 	if   hue == 0: rgb = [i, t, p] | ||||
| 	elif hue == 1: rgb = [q, i, p] | ||||
| 	elif hue == 2: rgb = [p, i, t] | ||||
| 	elif hue == 3: rgb = [p, q, i] | ||||
| 	elif hue == 4: rgb = [t, p, i] | ||||
| 	elif hue == 5: rgb = [i, p, q] | ||||
| 
 | ||||
|     for index in range(3): | ||||
| 	val = rgb[index] | ||||
| 	if val < 0.0: | ||||
| 	    val = 0.0 | ||||
| 	if val > 1.0: | ||||
| 	    val = 1.0 | ||||
| 	rgb[index] = val | ||||
| 
 | ||||
|     return rgb | ||||
| 
 | ||||
| def average(rgb1, rgb2, fraction): | ||||
|     return ( | ||||
| 	rgb2[0] * fraction + rgb1[0] * (1.0 - fraction), | ||||
| 	rgb2[1] * fraction + rgb1[1] * (1.0 - fraction), | ||||
| 	rgb2[2] * fraction + rgb1[2] * (1.0 - fraction) | ||||
|     ) | ||||
| 
 | ||||
| def rgb2name(rgb): | ||||
|     return '#%02x%02x%02x' % \ | ||||
|         (int(rgb[0] * 255), int(rgb[1] * 255), int(rgb[2] * 255)) | ||||
| 
 | ||||
| def rgb2brightness(rgb): | ||||
|     # Return the perceived grey level of the color | ||||
|     # (0.0 == black, 1.0 == white). | ||||
| 
 | ||||
|     rf = 0.299 | ||||
|     gf = 0.587 | ||||
|     bf = 0.114 | ||||
|     return rf * rgb[0] + gf * rgb[1] + bf * rgb[2] | ||||
| 
 | ||||
| def rgb2hsi(rgb): | ||||
|     maxc = max(rgb[0], rgb[1], rgb[2]) | ||||
|     minc = min(rgb[0], rgb[1], rgb[2]) | ||||
| 
 | ||||
|     intensity = maxc | ||||
|     if maxc != 0: | ||||
|       saturation  = (maxc - minc) / maxc | ||||
|     else: | ||||
|       saturation = 0.0 | ||||
| 
 | ||||
|     hue = 0.0 | ||||
|     if saturation != 0.0: | ||||
| 	c = [] | ||||
| 	for index in range(3): | ||||
| 	    c.append((maxc - rgb[index]) / (maxc - minc)) | ||||
| 
 | ||||
| 	if rgb[0] == maxc: | ||||
| 	    hue = c[2] - c[1] | ||||
| 	elif rgb[1] == maxc: | ||||
| 	    hue = 2 + c[0] - c[2] | ||||
| 	elif rgb[2] == maxc: | ||||
| 	    hue = 4 + c[1] - c[0] | ||||
| 
 | ||||
| 	hue = hue * _THIRD_PI | ||||
| 	if hue < 0.0: | ||||
| 	    hue = hue + _TWO_PI | ||||
| 
 | ||||
|     return (hue, saturation, intensity) | ||||
| 
 | ||||
| def name2rgb(root, colorName, asInt = 0): | ||||
|     if colorName[0] == '#': | ||||
| 	# Extract rgb information from the color name itself, assuming | ||||
| 	# it is either #rgb, #rrggbb, #rrrgggbbb, or #rrrrggggbbbb | ||||
| 	# This is useful, since tk may return incorrect rgb values if | ||||
| 	# the colormap is full - it will return the rbg values of the | ||||
| 	# closest color available. | ||||
|         colorName = colorName[1:] | ||||
|         digits = len(colorName) / 3 | ||||
|         factor = 16 ** (4 - digits) | ||||
|         rgb = ( | ||||
|             string.atoi(colorName[0:digits], 16) * factor, | ||||
|             string.atoi(colorName[digits:digits * 2], 16) * factor, | ||||
|             string.atoi(colorName[digits * 2:digits * 3], 16) * factor, | ||||
|         ) | ||||
|     else: | ||||
| 	# We have no choice but to ask Tk what the rgb values are. | ||||
| 	rgb = root.winfo_rgb(colorName) | ||||
| 
 | ||||
|     if not asInt: | ||||
|         rgb = (rgb[0] / _MAX_RGB, rgb[1] / _MAX_RGB, rgb[2] / _MAX_RGB) | ||||
|     return rgb | ||||
| 
 | ||||
| def _calcPalette(root, background=None, **kw): | ||||
|     # Create a map that has the complete new palette.  If some colors | ||||
|     # aren't specified, compute them from other colors that are specified. | ||||
|     new = {} | ||||
|     for key, value in kw.items(): | ||||
| 	new[key] = value | ||||
|     if background is not None: | ||||
| 	new['background'] = background | ||||
|     if not new.has_key('background'): | ||||
| 	raise ValueError, 'must specify a background color' | ||||
| 
 | ||||
|     if not new.has_key('foreground'): | ||||
| 	new['foreground'] = 'black' | ||||
| 
 | ||||
|     bg = name2rgb(root, new['background']) | ||||
|     fg = name2rgb(root, new['foreground']) | ||||
| 
 | ||||
|     for i in ('activeForeground', 'insertBackground', 'selectForeground', | ||||
| 	    'highlightColor'): | ||||
| 	if not new.has_key(i): | ||||
| 	    new[i] = new['foreground'] | ||||
| 
 | ||||
|     if not new.has_key('disabledForeground'): | ||||
| 	newCol = average(bg, fg, 0.3) | ||||
| 	new['disabledForeground'] = rgb2name(newCol) | ||||
| 
 | ||||
|     if not new.has_key('highlightBackground'): | ||||
| 	new['highlightBackground'] = new['background'] | ||||
| 
 | ||||
|     # Set <lighterBg> to a color that is a little lighter that the | ||||
|     # normal background.  To do this, round each color component up by | ||||
|     # 9% or 1/3 of the way to full white, whichever is greater. | ||||
|     lighterBg = [] | ||||
|     for i in range(3): | ||||
| 	lighterBg.append(bg[i]) | ||||
| 	inc1 = lighterBg[i] * 0.09 | ||||
| 	inc2 = (1.0 - lighterBg[i]) / 3 | ||||
| 	if inc1 > inc2: | ||||
| 	    lighterBg[i] = lighterBg[i] + inc1 | ||||
| 	else: | ||||
| 	    lighterBg[i] = lighterBg[i] + inc2 | ||||
| 	if lighterBg[i] > 1.0: | ||||
| 	    lighterBg[i] = 1.0 | ||||
| 
 | ||||
|     # Set <darkerBg> to a color that is a little darker that the | ||||
|     # normal background. | ||||
|     darkerBg = (bg[0] * 0.9, bg[1] * 0.9, bg[2] * 0.9) | ||||
| 
 | ||||
|     if not new.has_key('activeBackground'): | ||||
| 	# If the foreground is dark, pick a light active background. | ||||
| 	# If the foreground is light, pick a dark active background. | ||||
| 	# XXX This has been disabled, since it does not look very | ||||
| 	# good with dark backgrounds. If this is ever fixed, the | ||||
| 	# selectBackground and troughColor options should also be fixed. | ||||
| 
 | ||||
| 	if rgb2brightness(fg) < 0.5: | ||||
| 	    new['activeBackground'] = rgb2name(lighterBg) | ||||
| 	else: | ||||
| 	    new['activeBackground'] = rgb2name(lighterBg) | ||||
| 
 | ||||
|     if not new.has_key('selectBackground'): | ||||
| 	new['selectBackground'] = rgb2name(darkerBg) | ||||
|     if not new.has_key('troughColor'): | ||||
| 	new['troughColor'] = rgb2name(darkerBg) | ||||
|     if not new.has_key('selectColor'): | ||||
| 	new['selectColor'] = 'yellow' | ||||
| 
 | ||||
|     return new | ||||
| 
 | ||||
| def spectrum(numColors, correction = 1.0, saturation = 1.0, intensity = 1.0, | ||||
| 	extraOrange = 1, returnHues = 0): | ||||
|     colorList = [] | ||||
|     division = numColors / 7.0 | ||||
|     for index in range(numColors): | ||||
| 	if extraOrange: | ||||
| 	    if index < 2 * division: | ||||
| 		hue = index / division | ||||
| 	    else: | ||||
| 		hue = 2 + 2 * (index - 2 * division) / division | ||||
| 	    hue = hue * _SIXTH_PI | ||||
| 	else: | ||||
| 	    hue = index * _TWO_PI / numColors | ||||
| 	if returnHues: | ||||
| 	    colorList.append(hue) | ||||
| 	else: | ||||
| 	    rgb = hsi2rgb(hue, saturation, intensity) | ||||
| 	    if correction != 1.0: | ||||
| 		rgb = correct(rgb, correction) | ||||
| 	    name = rgb2name(rgb) | ||||
| 	    colorList.append(name) | ||||
|     return colorList | ||||
| 
 | ||||
| def correct(rgb, correction): | ||||
|     correction = float(correction) | ||||
|     rtn = [] | ||||
|     for index in range(3): | ||||
| 	rtn.append((1 - (1 - rgb[index]) ** correction) ** (1 / correction)) | ||||
|     return rtn | ||||
| 
 | ||||
| #============================================================================== | ||||
| 
 | ||||
| def _recolorTree(widget, oldpalette, newcolors): | ||||
|     # Change the colors in a widget and its descendants. | ||||
| 
 | ||||
|     # Change the colors in <widget> and all of its descendants, | ||||
|     # according to the <newcolors> dictionary.  It only modifies | ||||
|     # colors that have their default values as specified by the | ||||
|     # <oldpalette> variable.  The keys of the <newcolors> dictionary | ||||
|     # are named after widget configuration options and the values are | ||||
|     # the new value for that option. | ||||
| 
 | ||||
|     for dbOption in newcolors.keys(): | ||||
|         option = string.lower(dbOption) | ||||
|         try: | ||||
|             value = str(widget.cget(option)) | ||||
|         except: | ||||
|             continue | ||||
|         if oldpalette is None or value == oldpalette[dbOption]: | ||||
|             apply(widget.configure, (), {option : newcolors[dbOption]}) | ||||
| 
 | ||||
|     for child in widget.winfo_children(): | ||||
|        _recolorTree(child, oldpalette, newcolors) | ||||
| 
 | ||||
| def changecolor(widget, background=None, **kw): | ||||
|      root = widget._root() | ||||
|      if not hasattr(widget, '_Pmw_oldpalette'): | ||||
| 	 widget._Pmw_oldpalette = getdefaultpalette(root) | ||||
|      newpalette = apply(_calcPalette, (root, background,), kw) | ||||
|      _recolorTree(widget, widget._Pmw_oldpalette, newpalette) | ||||
|      widget._Pmw_oldpalette = newpalette | ||||
| 
 | ||||
| def bordercolors(root, colorName): | ||||
|     # This is the same method that Tk uses for shadows, in TkpGetShadows. | ||||
| 
 | ||||
|     lightRGB = [] | ||||
|     darkRGB = [] | ||||
|     for value in name2rgb(root, colorName, 1): | ||||
|         value40pc = (14 * value) / 10 | ||||
|         if value40pc > _MAX_RGB: | ||||
|             value40pc = _MAX_RGB | ||||
|         valueHalfWhite = (_MAX_RGB + value) / 2; | ||||
|         lightRGB.append(max(value40pc, valueHalfWhite)) | ||||
| 
 | ||||
|         darkValue = (60 * value) / 100 | ||||
|         darkRGB.append(darkValue) | ||||
| 
 | ||||
|     return ( | ||||
|         '#%04x%04x%04x' % (lightRGB[0], lightRGB[1], lightRGB[2]), | ||||
|         '#%04x%04x%04x' % (darkRGB[0], darkRGB[1], darkRGB[2]) | ||||
|     ) | ||||
							
								
								
									
										10
									
								
								QtSupport.iss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								QtSupport.iss
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| [Setup] | ||||
| AppName="QtSupport for MAP65" | ||||
| AppVerName=QtSupport | ||||
| DefaultDirName=C:\MAP65 | ||||
| 
 | ||||
| [Files] | ||||
| Source: "c:\Users\joe\map65\QtSupport\*.dll";           DestDir: "{app}";  Flags: onlyifdoesntexist | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										35
									
								
								a2d.f90
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								a2d.f90
									
									
									
									
									
								
							| @ -1,35 +0,0 @@ | ||||
| subroutine a2d(iarg) | ||||
| 
 | ||||
| ! Start the PortAudio streams for audio input and output. | ||||
|   integer nchin(0:20),nchout(0:20) | ||||
|   include 'gcom1.f90' | ||||
|   include 'gcom2.f90' | ||||
| 
 | ||||
| ! This call does not normally return, as the background portion of | ||||
| ! JTaudio goes into a test-and-sleep loop. | ||||
| 
 | ||||
|   call cs_lock('a2d') | ||||
|   write(*,1000) | ||||
| 1000 format('Using Linrad for input, PortAudio for output.') | ||||
|   idevout=ndevout | ||||
|   call padevsub(numdevs,ndefin,ndefout,nchin,nchout) | ||||
|    | ||||
|   write(*,1002) ndefout | ||||
| 1002 format(/'Default Output:',i3) | ||||
|   write(*,1004) idevout | ||||
| 1004 format('Requested Output:',i3) | ||||
|   if(idevout.lt.0 .or. idevout.ge.numdevs) idevout=ndefout | ||||
|   if(idevout.eq.0) idevout=ndefout | ||||
|   idevin=0 | ||||
|   call cs_unlock | ||||
|   ierr=jtaudio(idevin,idevout,y1,y2,NMAX,iwrite,iwave,nwave,    & | ||||
|        11025,NSPB,TRPeriod,TxOK,ndebug,Transmitting,            & | ||||
|        Tsec,ngo,nmode,tbuf,ibuf,ndsec) | ||||
|   if(ierr.ne.0) then | ||||
|      print*,'Error ',ierr,' in JTaudio, cannot continue.' | ||||
|   else | ||||
|      write(*,1006)  | ||||
| 1006 format('Audio output stream terminated normally.') | ||||
|   endif | ||||
|   return | ||||
| end subroutine a2d | ||||
							
								
								
									
										23
									
								
								about.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								about.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | ||||
| #include "about.h" | ||||
| #include "ui_about.h" | ||||
| 
 | ||||
| CAboutDlg::CAboutDlg(QWidget *parent, QString Revision) : | ||||
|   QDialog(parent), | ||||
|   m_Revision(Revision), | ||||
|   ui(new Ui::CAboutDlg) | ||||
| { | ||||
|   ui->setupUi(this); | ||||
|   ui->labelTxt->clear(); | ||||
|   m_Str  = "<html><h2>" + m_Revision + "</h2>\n\n"; | ||||
|   m_Str += "MAP65 implements a wideband polarization-matching receiver <br>"; | ||||
|   m_Str += "for the JT65 protocol, with a matching transmitting facility. <br>"; | ||||
|   m_Str += "It is primarily intended for amateur radio EME communication. <br><br>"; | ||||
|   m_Str += "Copyright 2001-2012 by Joe Taylor, K1JT.   Additional <br>"; | ||||
|   m_Str += "acknowledgments are contained in the source code. <br>"; | ||||
|   ui->labelTxt->setText(m_Str); | ||||
| } | ||||
| 
 | ||||
| CAboutDlg::~CAboutDlg() | ||||
| { | ||||
|   delete ui; | ||||
| } | ||||
							
								
								
									
										24
									
								
								about.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								about.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | ||||
| #ifndef ABOUTDLG_H | ||||
| #define ABOUTDLG_H | ||||
| 
 | ||||
| #include <QDialog> | ||||
| 
 | ||||
| namespace Ui { | ||||
|     class CAboutDlg; | ||||
| } | ||||
| 
 | ||||
| class CAboutDlg : public QDialog | ||||
| { | ||||
|     Q_OBJECT | ||||
| 
 | ||||
| public: | ||||
| 	explicit CAboutDlg(QWidget *parent=0, QString Revision=""); | ||||
|     ~CAboutDlg(); | ||||
| 
 | ||||
| private: | ||||
| 	QString m_Revision; | ||||
| 	Ui::CAboutDlg *ui; | ||||
| 	QString m_Str; | ||||
| }; | ||||
| 
 | ||||
| #endif // ABOUTDLG_H
 | ||||
							
								
								
									
										41
									
								
								about.ui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								about.ui
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <ui version="4.0"> | ||||
|  <class>CAboutDlg</class> | ||||
|  <widget class="QDialog" name="CAboutDlg"> | ||||
|   <property name="windowModality"> | ||||
|    <enum>Qt::NonModal</enum> | ||||
|   </property> | ||||
|   <property name="geometry"> | ||||
|    <rect> | ||||
|     <x>0</x> | ||||
|     <y>0</y> | ||||
|     <width>374</width> | ||||
|     <height>164</height> | ||||
|    </rect> | ||||
|   </property> | ||||
|   <property name="sizePolicy"> | ||||
|    <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> | ||||
|     <horstretch>0</horstretch> | ||||
|     <verstretch>0</verstretch> | ||||
|    </sizepolicy> | ||||
|   </property> | ||||
|   <property name="windowTitle"> | ||||
|    <string>About MAP65</string> | ||||
|   </property> | ||||
|   <widget class="QLabel" name="labelTxt"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>20</x> | ||||
|      <y>10</y> | ||||
|      <width>331</width> | ||||
|      <height>131</height> | ||||
|     </rect> | ||||
|    </property> | ||||
|    <property name="text"> | ||||
|     <string/> | ||||
|    </property> | ||||
|   </widget> | ||||
|  </widget> | ||||
|  <resources/> | ||||
|  <connections/> | ||||
| </ui> | ||||
							
								
								
									
										220
									
								
								aclocal.m4
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										220
									
								
								aclocal.m4
									
									
									
									
										vendored
									
									
								
							| @ -1,220 +0,0 @@ | ||||
| dnl {{{ ax_check_gfortran | ||||
| AC_DEFUN([AX_CHECK_GFORTRAN],[ | ||||
| 
 | ||||
| AC_ARG_ENABLE(g95, | ||||
| AC_HELP_STRING([--enable-g95],[Use G95 compiler if available.]), | ||||
| [g95=$enableval], [g95=no]) | ||||
| 
 | ||||
| AC_ARG_ENABLE(gfortran, | ||||
| AC_HELP_STRING([--enable-gfortran],[Use gfortran compiler if available.]), | ||||
| [gfortran=$enableval], [gfortran=no]) | ||||
| 
 | ||||
| dnl | ||||
| dnl Pick up FC from the environment if present | ||||
| dnl I'll add a test to confirm this is a gfortran later -db | ||||
| dnl | ||||
| 
 | ||||
| FCV="" | ||||
| 
 | ||||
| if test -n $[{FC}] ; then | ||||
| 	gfortran_name_part=`echo $[{FC}] | cut -c 1-8` | ||||
| 	if test $[{gfortran_name_part}] = "gfortran" ; then | ||||
| 		gfortran_name=$[{FC}] | ||||
|        		FC_LIB_PATH=`$[{FC}] -print-file-name=` | ||||
| 		g95=no | ||||
| 		gfortran=yes | ||||
| 		FFLAGS="$[{FFLAGS_GFORTRAN}]" | ||||
| 		FCV="gnu95" | ||||
| 	else | ||||
| 		unset $[{FC}] | ||||
| 	fi | ||||
| fi | ||||
| 
 | ||||
| dnl | ||||
| dnl Note regarding the apparent silliness with FCV. | ||||
| dnl The FCV value for g95 might be system dependent, this is | ||||
| dnl still to be fully explored. If not, then the FCV_G95 | ||||
| dnl stuff can go away. -db | ||||
| dnl | ||||
| 
 | ||||
| AC_MSG_CHECKING([uname -s]) | ||||
| case `uname -s` in | ||||
| 	CYGWIN*) | ||||
| 		AC_MSG_RESULT(Cygwin) | ||||
| 		CYGWIN=yes | ||||
| 	;; | ||||
| 	SunOS*) | ||||
| 		AC_MSG_RESULT(SunOS or Solaris) | ||||
| 		AC_DEFINE(__EXTENSIONS__, 1, [This is needed to use strtok_r on Solaris.]) | ||||
| 	;; | ||||
| dnl | ||||
| dnl Pick up current gfortran from ports infrastructure for fbsd | ||||
| dnl | ||||
|         FreeBSD*) | ||||
| 		if test -z $[{gfortran_name}] ; then | ||||
| 			gfortran_name=`grep FC: /usr/ports/Mk/bsd.gcc.mk | head -1 |awk '{print $[2]}'` | ||||
| 		fi | ||||
| 		FCV_G95="g95" | ||||
| 	;; | ||||
| 	*) | ||||
| 		FCV_G95="g95" | ||||
| 		AC_MSG_RESULT(no) | ||||
| 	;; | ||||
| esac | ||||
| 
 | ||||
| dnl | ||||
| dnl look for gfortran if nothing else was given | ||||
| dnl | ||||
| 
 | ||||
| if test -z $[gfortran_name] ; then | ||||
| 	gfortran_name="gfortran" | ||||
| fi | ||||
| 
 | ||||
| AC_PATH_PROG(G95, g95) | ||||
| AC_PATH_PROG(GFORTRAN, $[{gfortran_name}]) | ||||
| 
 | ||||
| if test ! -z $[{GFORTRAN}] ; then | ||||
| 	echo "*** gfortran compiler found at $[{GFORTRAN}]" | ||||
| 	if test "$[{gfortran}]" = yes; then | ||||
|        		FC_LIB_PATH=`$[{GFORTRAN}] -print-file-name=` | ||||
| 		FC=`basename $[{GFORTRAN}]` | ||||
| 		g95=no | ||||
| 		FFLAGS="$[{FFLAGS_GFORTRAN}]" | ||||
| 		FCV="gnu95" | ||||
| 	fi | ||||
| else | ||||
| 	echo "*** No gfortran compiler found" | ||||
| fi | ||||
| 
 | ||||
| if test ! -z $[{G95}] ; then | ||||
| 	echo "*** g95 compiler found at $[{G95}]" | ||||
| 	if test "$[{g95}]" = yes; then | ||||
|        		FC_LIB_PATH=`$[{G95}] -print-file-name=` | ||||
| 		FC=`basename $[{G95}]` | ||||
| 		gfortran=no | ||||
| 		FFLAGS="$[{FFLAGS_G95}]" | ||||
| 		FCV=$[{FCV_G95}] | ||||
| 	fi | ||||
| else | ||||
| 	echo "*** No g95 compiler found" | ||||
| fi | ||||
| 
 | ||||
| dnl | ||||
| dnl if FC is not set by now, pick a compiler for user | ||||
| dnl | ||||
| if test -z $[{FC}] ; then | ||||
| 	if test ! -z $[{GFORTRAN}] ; then | ||||
| 		if test "$[{g95}]" = yes; then | ||||
| 			echo "You enabled g95, but no g95 compiler found, defaulting to gfortran instead" | ||||
| 		fi | ||||
|        		FC_LIB_PATH=`$[{GFORTRAN}] -print-file-name=` | ||||
| 	        FC=`basename $[{GFORTRAN}]` | ||||
| 		g95=no | ||||
| 		gfortran=yes | ||||
| 		FFLAGS="$[{FFLAGS_GFORTRAN}]" | ||||
| 		FCV="gnu95" | ||||
| 	elif test ! -z $G95 ; then | ||||
| 		if test "$[{gfortran}]" = yes; then | ||||
| 			echo "You enabled gfortran, but no gfortran compiler found, defaulting to g95 instead" | ||||
| 		fi | ||||
|        		FC_LIB_PATH=`$[{G95}] -print-file-name=` | ||||
| 	        FC=`basename $[{G95}]` | ||||
| 		g95=yes | ||||
| 		gfortran=no | ||||
| 		FFLAGS="$[{FFLAGS_G95}]" | ||||
| 		FCV=$[{FCV_G95}] | ||||
| 	fi | ||||
| fi | ||||
| 
 | ||||
| AC_DEFINE_UNQUOTED(FC_LIB_PATH, "${FC_LIB_PATH}", [Path to fortran libs.]) | ||||
| AC_SUBST(FC_LIB_PATH, "${FC_LIB_PATH}") | ||||
| AC_DEFINE_UNQUOTED(FC, "${FC}", [Fortran compiler.]) | ||||
| AC_SUBST(FC, "${FC}") | ||||
| AC_SUBST(FCV, "${FCV}") | ||||
| 
 | ||||
| dnl ========================================= | ||||
| dnl pick gfortran or g95 | ||||
| 
 | ||||
| ])dnl }}} | ||||
| 
 | ||||
| 
 | ||||
| dnl {{{ ax_check_portaudio | ||||
| AC_DEFUN([AX_CHECK_PORTAUDIO],[ | ||||
| 
 | ||||
| HAS_PORTAUDIO_H=0 | ||||
| HAS_PORTAUDIO_LIB=0 | ||||
| HAS_PORTAUDIO=0 | ||||
| 
 | ||||
| AC_MSG_CHECKING([for a v19 portaudio ]) | ||||
| 
 | ||||
| portaudio_lib_dir="/usr/lib" | ||||
| portaudio_include_dir="/usr/include" | ||||
| 
 | ||||
| AC_ARG_WITH([portaudio-include-dir], | ||||
| AC_HELP_STRING([--with-portaudio-include-dir=<path>], | ||||
|     [path to portaudio include files]), | ||||
|     [portaudio_include_dir=$with_portaudio_include_dir]) | ||||
| 
 | ||||
| AC_ARG_WITH([portaudio-lib-dir], | ||||
| AC_HELP_STRING([--with-portaudio-lib-dir=<path>], | ||||
|     [path to portaudio lib files]), | ||||
|     [portaudio_lib_dir=$with_portaudio_lib_dir]) | ||||
| 
 | ||||
| if test -e $[{portaudio_include_dir}]/portaudio.h; then | ||||
| 	HAS_PORTAUDIO_H=1 | ||||
| fi | ||||
| 
 | ||||
| if test -e $[{portaudio_lib_dir}]/libportaudio.so \ | ||||
|     -o -e $[{portaudio_lib_dir}]/libportaudio.a;then | ||||
| 	HAS_PORTAUDIO_LIB=1 | ||||
| fi | ||||
| 
 | ||||
| if test $[{HAS_PORTAUDIO_H}] -eq 1 -a $[{HAS_PORTAUDIO_LIB}] -eq 1; then | ||||
| 	LDFLAGS="-L$[{portaudio_lib_dir}] $[{LDFLAGS}]" | ||||
| 	LIBS="$[{LIBS}] -lportaudio" | ||||
| 	CPPFLAGS="-I$[{portaudio_include_dir}] $[{CPPFLAGS}]" | ||||
| 	AC_CHECK_LIB(portaudio, Pa_GetVersion, \ | ||||
| 		[HAS_PORTAUDIO_VERSION=1], [HAS_PORTAUDIO_VERSION=0]) | ||||
| 	if test $[{HAS_PORTAUDIO_VERSION}] -eq 0; then | ||||
| 		AC_MSG_RESULT([This is likely portaudio v18; you need portaudio v19]) | ||||
| 	else | ||||
| 		HAS_PORTAUDIO=1 | ||||
| 	fi | ||||
| else | ||||
| 	AC_MSG_RESULT([portaudio not found trying FreeBSD paths ]) | ||||
| 	portaudio_lib_dir="/usr/local/lib/portaudio2" | ||||
| 	portaudio_include_dir="/usr/local/include/portaudio2" | ||||
| dnl | ||||
| dnl Try again to make sure portaudio dirs are valid | ||||
| dnl | ||||
| 	AC_MSG_CHECKING([for a v19 portaudio in FreeBSD paths.]) | ||||
| 	HAS_PORTAUDIO_H=0 | ||||
| 	HAS_PORTAUDIO_LIB=0 | ||||
| 
 | ||||
| 	if test -e $[{portaudio_include_dir}]/portaudio.h; then | ||||
| 		HAS_PORTAUDIO_H=1 | ||||
| 	fi | ||||
| 
 | ||||
| 	if test -e $[{portaudio_lib_dir}]/libportaudio.so \ | ||||
| 	    -o -e $[{portaudio_lib_dir}]/libportaudio.a;then | ||||
| 		HAS_PORTAUDIO_LIB=1 | ||||
| 	fi | ||||
| 
 | ||||
| 	if test $[{HAS_PORTAUDIO_H}] -eq 1 -a $[{HAS_PORTAUDIO_LIB}] -eq 1; then | ||||
| 		AC_MSG_RESULT([found portaudio in FreeBSD paths, double checking it is v19 ]) | ||||
| 		LDFLAGS="-L$[{portaudio_lib_dir}] $[{LDFLAGS}]" | ||||
| 		LIBS="$[{LIBS}] -lportaudio" | ||||
| 		CPPFLAGS="-I$[{portaudio_include_dir}] $[{CPPFLAGS}]" | ||||
| 		AC_CHECK_LIB(portaudio, Pa_GetVersion, \ | ||||
| 			[HAS_PORTAUDIO_VERSION=1], [HAS_PORTAUDIO_VERSION=0]) | ||||
| 		if test $[{HAS_PORTAUDIO_VERSION}] -eq 0; then | ||||
| 			AC_MSG_RESULT([How did you end up with a portaudio v18 here?]) | ||||
| 		else | ||||
| 			AC_MSG_RESULT([found v19]) | ||||
| 			HAS_PORTAUDIO=1 | ||||
| 			HAS_PORTAUDIO_H=1 | ||||
| 		fi | ||||
| 	fi | ||||
| fi | ||||
| 
 | ||||
| ])dnl }}} | ||||
							
								
								
									
										257
									
								
								afmhot.dat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										257
									
								
								afmhot.dat
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,257 @@ | ||||
|      0      0.0000    0.0000    0.0000 | ||||
|      1	    0.0000    0.0000    0.0000 | ||||
|      2	    0.0078    0.0000    0.0000 | ||||
|      3	    0.0157    0.0000    0.0000 | ||||
|      4	    0.0235    0.0000    0.0000 | ||||
|      5	    0.0314    0.0000    0.0000 | ||||
|      6	    0.0392    0.0000    0.0000 | ||||
|      7	    0.0471    0.0000    0.0000 | ||||
|      8	    0.0549    0.0000    0.0000 | ||||
|      9	    0.0627    0.0000    0.0000 | ||||
|     10	    0.0706    0.0000    0.0000 | ||||
|     11	    0.0784    0.0000    0.0000 | ||||
|     12	    0.0863    0.0000    0.0000 | ||||
|     13	    0.0941    0.0000    0.0000 | ||||
|     14	    0.1020    0.0000    0.0000 | ||||
|     15	    0.1098    0.0000    0.0000 | ||||
|     16	    0.1176    0.0000    0.0000 | ||||
|     17	    0.1255    0.0000    0.0000 | ||||
|     18	    0.1333    0.0000    0.0000 | ||||
|     19	    0.1412    0.0000    0.0000 | ||||
|     20	    0.1490    0.0000    0.0000 | ||||
|     21	    0.1569    0.0000    0.0000 | ||||
|     22	    0.1647    0.0000    0.0000 | ||||
|     23	    0.1725    0.0000    0.0000 | ||||
|     24	    0.1804    0.0000    0.0000 | ||||
|     25	    0.1882    0.0000    0.0000 | ||||
|     26	    0.1961    0.0000    0.0000 | ||||
|     27	    0.2039    0.0000    0.0000 | ||||
|     28	    0.2118    0.0000    0.0000 | ||||
|     29	    0.2196    0.0000    0.0000 | ||||
|     30	    0.2275    0.0000    0.0000 | ||||
|     31	    0.2353    0.0000    0.0000 | ||||
|     32	    0.2431    0.0000    0.0000 | ||||
|     33	    0.2510    0.0000    0.0000 | ||||
|     34	    0.2588    0.0000    0.0000 | ||||
|     35	    0.2667    0.0000    0.0000 | ||||
|     36	    0.2745    0.0000    0.0000 | ||||
|     37	    0.2824    0.0000    0.0000 | ||||
|     38	    0.2902    0.0000    0.0000 | ||||
|     39	    0.2980    0.0000    0.0000 | ||||
|     40	    0.3059    0.0000    0.0000 | ||||
|     41	    0.3137    0.0000    0.0000 | ||||
|     42	    0.3216    0.0000    0.0000 | ||||
|     43	    0.3294    0.0000    0.0000 | ||||
|     44	    0.3373    0.0000    0.0000 | ||||
|     45	    0.3451    0.0000    0.0000 | ||||
|     46	    0.3529    0.0000    0.0000 | ||||
|     47	    0.3608    0.0000    0.0000 | ||||
|     48	    0.3686    0.0000    0.0000 | ||||
|     49	    0.3765    0.0000    0.0000 | ||||
|     50	    0.3843    0.0000    0.0000 | ||||
|     51	    0.3922    0.0000    0.0000 | ||||
|     52	    0.4000    0.0000    0.0000 | ||||
|     53	    0.4078    0.0000    0.0000 | ||||
|     54	    0.4157    0.0000    0.0000 | ||||
|     55	    0.4235    0.0000    0.0000 | ||||
|     56	    0.4314    0.0000    0.0000 | ||||
|     57	    0.4392    0.0000    0.0000 | ||||
|     58	    0.4471    0.0000    0.0000 | ||||
|     59	    0.4549    0.0000    0.0000 | ||||
|     60	    0.4627    0.0000    0.0000 | ||||
|     61	    0.4706    0.0000    0.0000 | ||||
|     62	    0.4784    0.0000    0.0000 | ||||
|     63	    0.4863    0.0000    0.0000 | ||||
|     64	    0.4941    0.0000    0.0000 | ||||
|     65	    0.5020    0.0000    0.0000 | ||||
|     66	    0.5098    0.0098    0.0000 | ||||
|     67	    0.5176    0.0176    0.0000 | ||||
|     68	    0.5255    0.0255    0.0000 | ||||
|     69	    0.5333    0.0333    0.0000 | ||||
|     70	    0.5412    0.0412    0.0000 | ||||
|     71	    0.5490    0.0490    0.0000 | ||||
|     72	    0.5569    0.0569    0.0000 | ||||
|     73	    0.5647    0.0647    0.0000 | ||||
|     74	    0.5725    0.0725    0.0000 | ||||
|     75	    0.5804    0.0804    0.0000 | ||||
|     76	    0.5882    0.0882    0.0000 | ||||
|     77	    0.5961    0.0961    0.0000 | ||||
|     78	    0.6039    0.1039    0.0000 | ||||
|     79	    0.6118    0.1118    0.0000 | ||||
|     80	    0.6196    0.1196    0.0000 | ||||
|     81	    0.6275    0.1275    0.0000 | ||||
|     82	    0.6353    0.1353    0.0000 | ||||
|     83	    0.6431    0.1431    0.0000 | ||||
|     84	    0.6510    0.1510    0.0000 | ||||
|     85	    0.6588    0.1588    0.0000 | ||||
|     86	    0.6667    0.1667    0.0000 | ||||
|     87	    0.6745    0.1745    0.0000 | ||||
|     88	    0.6824    0.1824    0.0000 | ||||
|     89	    0.6902    0.1902    0.0000 | ||||
|     90	    0.6980    0.1980    0.0000 | ||||
|     91	    0.7059    0.2059    0.0000 | ||||
|     92	    0.7137    0.2137    0.0000 | ||||
|     93	    0.7216    0.2216    0.0000 | ||||
|     94	    0.7294    0.2294    0.0000 | ||||
|     95	    0.7373    0.2373    0.0000 | ||||
|     96	    0.7451    0.2451    0.0000 | ||||
|     97	    0.7529    0.2529    0.0000 | ||||
|     98	    0.7608    0.2608    0.0000 | ||||
|     99	    0.7686    0.2686    0.0000 | ||||
|    100	    0.7765    0.2765    0.0000 | ||||
|    101	    0.7843    0.2843    0.0000 | ||||
|    102	    0.7922    0.2922    0.0000 | ||||
|    103	    0.8000    0.3000    0.0000 | ||||
|    104	    0.8078    0.3078    0.0000 | ||||
|    105	    0.8157    0.3157    0.0000 | ||||
|    106	    0.8235    0.3235    0.0000 | ||||
|    107	    0.8314    0.3314    0.0000 | ||||
|    108	    0.8392    0.3392    0.0000 | ||||
|    109	    0.8471    0.3471    0.0000 | ||||
|    110	    0.8549    0.3549    0.0000 | ||||
|    111	    0.8627    0.3627    0.0000 | ||||
|    112	    0.8706    0.3706    0.0000 | ||||
|    113	    0.8784    0.3784    0.0000 | ||||
|    114	    0.8863    0.3863    0.0000 | ||||
|    115	    0.8941    0.3941    0.0000 | ||||
|    116	    0.9020    0.4020    0.0000 | ||||
|    117	    0.9098    0.4098    0.0000 | ||||
|    118	    0.9176    0.4176    0.0000 | ||||
|    119	    0.9255    0.4255    0.0000 | ||||
|    120	    0.9333    0.4333    0.0000 | ||||
|    121	    0.9412    0.4412    0.0000 | ||||
|    122	    0.9490    0.4490    0.0000 | ||||
|    123	    0.9569    0.4569    0.0000 | ||||
|    124	    0.9647    0.4647    0.0000 | ||||
|    125	    0.9725    0.4725    0.0000 | ||||
|    126	    0.9804    0.4804    0.0000 | ||||
|    127	    0.9882    0.4882    0.0000 | ||||
|    128	    0.9961    0.4961    0.0000 | ||||
|    129	    1.0000    0.5039    0.0000 | ||||
|    130	    1.0000    0.5118    0.0118 | ||||
|    131	    1.0000    0.5196    0.0196 | ||||
|    132	    1.0000    0.5275    0.0275 | ||||
|    133	    1.0000    0.5353    0.0353 | ||||
|    134	    1.0000    0.5431    0.0431 | ||||
|    135	    1.0000    0.5510    0.0510 | ||||
|    136	    1.0000    0.5588    0.0588 | ||||
|    137	    1.0000    0.5667    0.0667 | ||||
|    138	    1.0000    0.5745    0.0745 | ||||
|    139	    1.0000    0.5824    0.0824 | ||||
|    140	    1.0000    0.5902    0.0902 | ||||
|    141	    1.0000    0.5980    0.0980 | ||||
|    142	    1.0000    0.6059    0.1059 | ||||
|    143	    1.0000    0.6137    0.1137 | ||||
|    144	    1.0000    0.6216    0.1216 | ||||
|    145	    1.0000    0.6294    0.1294 | ||||
|    146	    1.0000    0.6373    0.1373 | ||||
|    147	    1.0000    0.6451    0.1451 | ||||
|    148	    1.0000    0.6529    0.1529 | ||||
|    149	    1.0000    0.6608    0.1608 | ||||
|    150	    1.0000    0.6686    0.1686 | ||||
|    151	    1.0000    0.6765    0.1765 | ||||
|    152	    1.0000    0.6843    0.1843 | ||||
|    153	    1.0000    0.6922    0.1922 | ||||
|    154	    1.0000    0.7000    0.2000 | ||||
|    155	    1.0000    0.7078    0.2078 | ||||
|    156	    1.0000    0.7157    0.2157 | ||||
|    157	    1.0000    0.7235    0.2235 | ||||
|    158	    1.0000    0.7314    0.2314 | ||||
|    159	    1.0000    0.7392    0.2392 | ||||
|    160	    1.0000    0.7471    0.2471 | ||||
|    161	    1.0000    0.7549    0.2549 | ||||
|    162	    1.0000    0.7627    0.2627 | ||||
|    163	    1.0000    0.7706    0.2706 | ||||
|    164	    1.0000    0.7784    0.2784 | ||||
|    165	    1.0000    0.7863    0.2863 | ||||
|    166	    1.0000    0.7941    0.2941 | ||||
|    167	    1.0000    0.8020    0.3020 | ||||
|    168	    1.0000    0.8098    0.3098 | ||||
|    169	    1.0000    0.8176    0.3176 | ||||
|    170	    1.0000    0.8255    0.3255 | ||||
|    171	    1.0000    0.8333    0.3333 | ||||
|    172	    1.0000    0.8412    0.3412 | ||||
|    173	    1.0000    0.8490    0.3490 | ||||
|    174	    1.0000    0.8569    0.3569 | ||||
|    175	    1.0000    0.8647    0.3647 | ||||
|    176	    1.0000    0.8725    0.3725 | ||||
|    177	    1.0000    0.8804    0.3804 | ||||
|    178	    1.0000    0.8882    0.3882 | ||||
|    179	    1.0000    0.8961    0.3961 | ||||
|    180	    1.0000    0.9039    0.4039 | ||||
|    181	    1.0000    0.9118    0.4118 | ||||
|    182	    1.0000    0.9196    0.4196 | ||||
|    183	    1.0000    0.9275    0.4275 | ||||
|    184	    1.0000    0.9353    0.4353 | ||||
|    185	    1.0000    0.9431    0.4431 | ||||
|    186	    1.0000    0.9510    0.4510 | ||||
|    187	    1.0000    0.9588    0.4588 | ||||
|    188	    1.0000    0.9667    0.4667 | ||||
|    189	    1.0000    0.9745    0.4745 | ||||
|    190	    1.0000    0.9824    0.4824 | ||||
|    191	    1.0000    0.9902    0.4902 | ||||
|    192	    1.0000    0.9980    0.4980 | ||||
|    193	    1.0000    1.0000    0.5059 | ||||
|    194	    1.0000    1.0000    0.5137 | ||||
|    195	    1.0000    1.0000    0.5216 | ||||
|    196	    1.0000    1.0000    0.5294 | ||||
|    197	    1.0000    1.0000    0.5373 | ||||
|    198	    1.0000    1.0000    0.5451 | ||||
|    199	    1.0000    1.0000    0.5529 | ||||
|    200	    1.0000    1.0000    0.5608 | ||||
|    201	    1.0000    1.0000    0.5686 | ||||
|    202	    1.0000    1.0000    0.5765 | ||||
|    203	    1.0000    1.0000    0.5843 | ||||
|    204	    1.0000    1.0000    0.5922 | ||||
|    205	    1.0000    1.0000    0.6000 | ||||
|    206	    1.0000    1.0000    0.6078 | ||||
|    207	    1.0000    1.0000    0.6157 | ||||
|    208	    1.0000    1.0000    0.6235 | ||||
|    209	    1.0000    1.0000    0.6314 | ||||
|    210	    1.0000    1.0000    0.6392 | ||||
|    211	    1.0000    1.0000    0.6471 | ||||
|    212	    1.0000    1.0000    0.6549 | ||||
|    213	    1.0000    1.0000    0.6627 | ||||
|    214	    1.0000    1.0000    0.6706 | ||||
|    215	    1.0000    1.0000    0.6784 | ||||
|    216	    1.0000    1.0000    0.6863 | ||||
|    217	    1.0000    1.0000    0.6941 | ||||
|    218	    1.0000    1.0000    0.7020 | ||||
|    219	    1.0000    1.0000    0.7098 | ||||
|    220	    1.0000    1.0000    0.7176 | ||||
|    221	    1.0000    1.0000    0.7255 | ||||
|    222	    1.0000    1.0000    0.7333 | ||||
|    223	    1.0000    1.0000    0.7412 | ||||
|    224	    1.0000    1.0000    0.7490 | ||||
|    225	    1.0000    1.0000    0.7569 | ||||
|    226	    1.0000    1.0000    0.7647 | ||||
|    227	    1.0000    1.0000    0.7725 | ||||
|    228	    1.0000    1.0000    0.7804 | ||||
|    229	    1.0000    1.0000    0.7882 | ||||
|    230	    1.0000    1.0000    0.7961 | ||||
|    231	    1.0000    1.0000    0.8039 | ||||
|    232	    1.0000    1.0000    0.8118 | ||||
|    233	    1.0000    1.0000    0.8196 | ||||
|    234	    1.0000    1.0000    0.8275 | ||||
|    235	    1.0000    1.0000    0.8353 | ||||
|    236	    1.0000    1.0000    0.8431 | ||||
|    237	    1.0000    1.0000    0.8510 | ||||
|    238	    1.0000    1.0000    0.8588 | ||||
|    239	    1.0000    1.0000    0.8667 | ||||
|    240	    1.0000    1.0000    0.8745 | ||||
|    241	    1.0000    1.0000    0.8824 | ||||
|    242	    1.0000    1.0000    0.8902 | ||||
|    243	    1.0000    1.0000    0.8980 | ||||
|    244	    1.0000    1.0000    0.9059 | ||||
|    245	    1.0000    1.0000    0.9137 | ||||
|    246	    1.0000    1.0000    0.9216 | ||||
|    247	    1.0000    1.0000    0.9294 | ||||
|    248	    1.0000    1.0000    0.9373 | ||||
|    249	    1.0000    1.0000    0.9451 | ||||
|    250	    1.0000    1.0000    0.9529 | ||||
|    251	    1.0000    1.0000    0.9608 | ||||
|    252	    1.0000    1.0000    0.9686 | ||||
|    253	    1.0000    1.0000    0.9765 | ||||
|    254	    1.0       0.0       0.0 | ||||
|    255	    1.0       1.0       0.0 | ||||
|    256	    0.0       1.000     0.0 | ||||
							
								
								
									
										102
									
								
								astro.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								astro.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,102 @@ | ||||
| #include "astro.h" | ||||
| #include "ui_astro.h" | ||||
| #include <QDebug> | ||||
| #include <QFile> | ||||
| #include <QMessageBox> | ||||
| #include <stdio.h> | ||||
| #include "commons.h" | ||||
| 
 | ||||
| Astro::Astro(QWidget *parent) : | ||||
|   QWidget(parent), | ||||
|   ui(new Ui::Astro) | ||||
| { | ||||
|   ui->setupUi(this); | ||||
|   ui->astroTextBrowser->setStyleSheet( | ||||
|         "QTextBrowser { background-color : cyan; color : black; }"); | ||||
|   ui->astroTextBrowser->clear(); | ||||
| } | ||||
| 
 | ||||
| Astro::~Astro() | ||||
| { | ||||
|     delete ui; | ||||
| } | ||||
| 
 | ||||
| void Astro::astroUpdate(QDateTime t, QString mygrid, QString hisgrid, | ||||
|                         int fQSO, int nsetftx, int ntxFreq, QString azelDir) | ||||
| { | ||||
|   static int ntxFreq0=-99; | ||||
|   static bool astroBusy=false; | ||||
|   char cc[300]; | ||||
|   double azsun,elsun,azmoon,elmoon,azmoondx,elmoondx; | ||||
|   double ramoon,decmoon,dgrd,poloffset,xnr; | ||||
|   int ntsky,ndop,ndop00; | ||||
|   QString date = t.date().toString("yyyy MMM dd"); | ||||
|   QString utc = t.time().toString(); | ||||
|   int nyear=t.date().year(); | ||||
|   int month=t.date().month(); | ||||
|   int nday=t.date().day(); | ||||
|   int nhr=t.time().hour(); | ||||
|   int nmin=t.time().minute(); | ||||
|   double sec=t.time().second() + 0.001*t.time().msec(); | ||||
|   int isec=sec; | ||||
|   double uth=nhr + nmin/60.0 + sec/3600.0; | ||||
|   int nfreq=(int)datcom_.fcenter; | ||||
|   if(nfreq<10 or nfreq > 50000) nfreq=144; | ||||
| 
 | ||||
|   if(!astroBusy) { | ||||
|     astroBusy=true; | ||||
|     astrosub_(&nyear, &month, &nday, &uth, &nfreq, mygrid.toAscii(), | ||||
|             hisgrid.toAscii(), &azsun, &elsun, &azmoon, &elmoon, | ||||
|             &azmoondx, &elmoondx, &ntsky, &ndop, &ndop00,&ramoon, &decmoon, | ||||
|             &dgrd, &poloffset, &xnr, 6, 6); | ||||
|     astroBusy=false; | ||||
|   } | ||||
| 
 | ||||
|   sprintf(cc,"Az:    %6.1f\n" | ||||
|           "El:    %6.1f\n" | ||||
|           "Dec:   %6.1f\n" | ||||
|           "DxAz:  %6.1f\n" | ||||
|           "DxEl:  %6.1f\n" | ||||
|           "SunAz: %6.1f\n" | ||||
|           "SunEl: %6.1f\n" | ||||
|           "Dop:   %6d\n" | ||||
|           "DXDop: %6d\n" | ||||
|           "Tsky:  %6d\n" | ||||
|           "MNR:   %6.1f\n" | ||||
|           "Dgrd:  %6.1f", | ||||
|           azmoon,elmoon,decmoon,azmoondx,elmoondx,azsun,elsun, | ||||
|           ndop,ndop00,ntsky,xnr,dgrd); | ||||
|   ui->astroTextBrowser->setText(" "+ date + "\nUTC: " + utc + "\n" + cc); | ||||
| 
 | ||||
|   QString fname=azelDir+"/azel.dat"; | ||||
|   QFile f(fname); | ||||
|   if(!f.open(QIODevice::WriteOnly | QIODevice::Text)) { | ||||
|     QMessageBox mb; | ||||
|     mb.setText("Cannot open " + fname); | ||||
|     mb.exec(); | ||||
|     return; | ||||
|   } | ||||
|   int ndiff=0; | ||||
|   if(ntxFreq != ntxFreq0) ndiff=1; | ||||
|   ntxFreq0=ntxFreq; | ||||
|   QTextStream out(&f); | ||||
|   sprintf(cc,"%2.2d:%2.2d:%2.2d,%5.1f,%5.1f,Moon\n" | ||||
|           "%2.2d:%2.2d:%2.2d,%5.1f,%5.1f,Sun\n" | ||||
|           "%2.2d:%2.2d:%2.2d,%5.1f,%5.1f,Source\n" | ||||
|           "%4d,%6d,Doppler\n" | ||||
|           "%3d,%1d,fQSO\n" | ||||
|           "%3d,%1d,fQSO2\n", | ||||
|           nhr,nmin,isec,azmoon,elmoon, | ||||
|           nhr,nmin,isec,azsun,elsun, | ||||
|           nhr,nmin,isec,0.0,0.0, | ||||
|           nfreq,ndop, | ||||
|           fQSO,nsetftx, | ||||
|           ntxFreq,ndiff); | ||||
|   out << cc; | ||||
|   f.close(); | ||||
| } | ||||
| 
 | ||||
| void Astro::setFontSize(int n) | ||||
| { | ||||
|   ui->astroTextBrowser->setFontPointSize(n); | ||||
| } | ||||
							
								
								
									
										115
									
								
								astro.f
									
									
									
									
									
								
							
							
						
						
									
										115
									
								
								astro.f
									
									
									
									
									
								
							| @ -1,115 +0,0 @@ | ||||
|       subroutine astro(AppDir,nyear,month,nday,uth,nfreq,Mygrid, | ||||
|      +     NStation,mode,MoonDX,AzSun,ElSun,AzMoon,ElMoon0, | ||||
|      +     ntsky,doppler00,doppler,dbMoon,RAMoon,DecMoon,HA,Dgrd,sd, | ||||
|      +     poloffset,xnr,auxra,auxdec,azaux,elaux) | ||||
| 
 | ||||
| C  Computes astronomical quantities for display in JT65, CW, and EME Echo mode. | ||||
| C  NB: may want to smooth the Tsky map to 10 degrees or so. | ||||
| 
 | ||||
|       character*80 AppDir,fname | ||||
|       character*6 MyGrid,HisGrid | ||||
|       logical first,ltsky | ||||
|       real LST | ||||
|       real lat,lon | ||||
|       real ldeg | ||||
|       integer*1 n1sky(129600) | ||||
|       integer*2 nsky | ||||
|       common/sky/ nsky(360,180) | ||||
|       common/echo/xdop(2),techo,ElMoon,mjd | ||||
|       equivalence (n1sky,nsky) | ||||
|       data first/.true./ | ||||
|       data rad/57.2957795/ | ||||
|       save | ||||
| 
 | ||||
|       if(first) then | ||||
| 	do i=80,1,-1 | ||||
| 	   if(ichar(AppDir(i:i)).ne.0 .and.  | ||||
|      +            ichar(AppDir(i:i)).ne.32) go to 1 | ||||
| 	enddo | ||||
|  1	lenappdir=i | ||||
|         call zero(nsky,180*180) | ||||
| 	fname=Appdir(1:lenappdir)//'/TSKY.DAT' | ||||
|         call cs_lock('astro') | ||||
| #ifdef CVF | ||||
|         open(13,file=fname,status='old',form='binary',err=10) | ||||
|         read(13) nsky | ||||
|         close(13) | ||||
| #else | ||||
|         open(13,file=fname,status='old',access='stream',err=10) | ||||
|         read(13) nsky | ||||
|         close(13) | ||||
| #endif | ||||
|         ltsky=.true. | ||||
|         first=.false. | ||||
|         call cs_unlock | ||||
|       endif | ||||
|       go to 20 | ||||
|  10   ltsky=.false. | ||||
|       call cs_unlock | ||||
| 
 | ||||
|  20   call grid2deg(MyGrid,elon,lat) | ||||
|       lon=-elon | ||||
|       call sun(nyear,month,nday,uth,lon,lat,RASun,DecSun,LST, | ||||
|      +    AzSun,ElSun,mjd) | ||||
| 
 | ||||
|       freq=nfreq*1.e6 | ||||
| 
 | ||||
|       call MoonDop(nyear,month,nday,uth,lon,lat,RAMoon,DecMoon, | ||||
|      +  LST,HA,AzMoon,ElMoon,ldeg,bdeg,vr,dist) | ||||
| 
 | ||||
| C  Compute spatial polarization offset | ||||
|       xx=sin(lat/rad)*cos(ElMoon/rad) - cos(lat/rad)* | ||||
|      +     cos(AzMoon/rad)*sin(ElMoon/rad) | ||||
|       yy=cos(lat/rad)*sin(AzMoon/rad) | ||||
|       if(NStation.eq.1) poloffset1=rad*atan2(yy,xx) | ||||
|       if(NStation.eq.2) poloffset2=rad*atan2(yy,xx) | ||||
| 
 | ||||
|       techo=2.0 * dist/2.99792458e5                 !Echo delay time | ||||
|       doppler=-freq*vr/2.99792458e5                 !One-way Doppler | ||||
|       t408=ftsky(ldeg,bdeg)                         !Read sky map | ||||
|       tsky=t408*(408.0/nfreq)**2.6                  !Tsky for obs freq | ||||
|       if(ltsky.and.(tsky.lt.3.0)) tsky=3.0          !Minimum = 3 Kelvin | ||||
| 
 | ||||
|       xdop(NStation)=doppler | ||||
|       if(NStation.eq.2) then | ||||
|          HisGrid=MyGrid | ||||
|          go to 900 | ||||
|       endif | ||||
| 
 | ||||
|       doppler00=2.0*xdop(1) | ||||
|       if(mode.eq.2 .or. mode.eq.5) doppler=xdop(1)+xdop(2) | ||||
|       if(mode.eq.3) doppler=2.0*xdop(1) | ||||
|       dBMoon=-40.0*log10(dist/356903.) | ||||
|       sd=16.23*370152.0/dist | ||||
| 
 | ||||
| !      if(NStation.eq.1 .and. MoonDX.ne.0 .and.  | ||||
| !     +    (mode.eq.2 .or. mode.eq.5)) then | ||||
|       if(NStation.eq.1 .and. MoonDX.ne.0) then | ||||
|          poloffset=mod(poloffset2-poloffset1+720.0,180.0) | ||||
|          if(poloffset.gt.90.0) poloffset=poloffset-180.0 | ||||
|          x1=abs(cos(2*poloffset/rad)) | ||||
|          if(x1.lt.0.056234) x1=0.056234 | ||||
|          xnr=-20.0*log10(x1) | ||||
|          if(HisGrid(1:1).lt.'A' .or. HisGrid(1:1).gt.'Z') xnr=0 | ||||
|       endif | ||||
| 
 | ||||
|       tr=80.0                              !Good preamp | ||||
|       tskymin=13.0*(408.0/nfreq)**2.6      !Cold sky temperature | ||||
|       tsysmin=tskymin+tr | ||||
|       tsys=tsky+tr | ||||
|       dgrd=-10.0*log10(tsys/tsysmin) + dbMoon | ||||
| 
 | ||||
|  900  ElMoon0=Elmoon | ||||
|       ntsky=nint(tsky) | ||||
| 
 | ||||
|       auxHA = 15.0*(LST-auxra)                       !HA in degrees | ||||
|       pi=3.14159265 | ||||
|       pio2=0.5*pi | ||||
|       call coord(pi,pio2-lat/rad,0.0,lat/rad,auxha*pi/180.0, | ||||
|      +  auxdec/rad,azaux,elaux) | ||||
|       AzAux=azaux*rad | ||||
|       ElAux=ElAux*rad | ||||
| 
 | ||||
|       return | ||||
| 
 | ||||
|       end | ||||
							
								
								
									
										35
									
								
								astro.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								astro.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | ||||
| #ifndef ASTRO_H | ||||
| #define ASTRO_H | ||||
| 
 | ||||
| #include <QWidget> | ||||
| #include <QDateTime> | ||||
| 
 | ||||
| namespace Ui { | ||||
|   class Astro; | ||||
| } | ||||
| 
 | ||||
| class Astro : public QWidget | ||||
| { | ||||
|   Q_OBJECT | ||||
| 
 | ||||
| public: | ||||
|   explicit Astro(QWidget *parent = 0); | ||||
|   void astroUpdate(QDateTime t, QString mygrid, QString hisgrid, | ||||
|                    int fQSO, int nsetftx, int ntxFreq, QString azelDir); | ||||
|   void setFontSize(int n); | ||||
|   ~Astro(); | ||||
| 
 | ||||
| private: | ||||
|     Ui::Astro *ui; | ||||
| }; | ||||
| 
 | ||||
| extern "C" { | ||||
|   void astrosub_(int* nyear, int* month, int* nday, double* uth, int* nfreq, | ||||
|      const char* mygrid, const char* hisgrid, double* azsun, | ||||
|      double* elsun, double* azmoon, double* elmoon, double* azmoondx, | ||||
|      double* elmoondx, int* ntsky, int* ndop, int* ndop00, | ||||
|      double* ramoon, double* decmoon, double* dgrd, double* poloffset, | ||||
|      double* xnr, int len1, int len2); | ||||
| } | ||||
| 
 | ||||
| #endif // ASTRO_H
 | ||||
							
								
								
									
										52
									
								
								astro.py
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								astro.py
									
									
									
									
									
								
							| @ -1,52 +0,0 @@ | ||||
| #------------------------------------------------------ astro | ||||
| from Tkinter import * | ||||
| import Pmw | ||||
| import g | ||||
| 
 | ||||
| def done(): | ||||
|     g.astro_geom0=root.geometry() | ||||
|     root.withdraw() | ||||
| 
 | ||||
| root=Toplevel() | ||||
| root.withdraw() | ||||
| root.protocol('WM_DELETE_WINDOW',done) | ||||
| if g.Win32: root.iconbitmap("wsjt.ico") | ||||
| root.title("AstroData") | ||||
| frame=Frame(root) | ||||
| frame.pack() | ||||
| 
 | ||||
| def astro2(t): | ||||
|     root.geometry(t) | ||||
|     root.deiconify() | ||||
|     root.focus_set() | ||||
| 
 | ||||
| def update(): | ||||
|     t1= "           Az      El\n"  | ||||
|     t2= "Moon:    %6.2f  %6.2f\n" % (g.AzMoon,g.ElMoon) | ||||
|     t3= "Moon/DX: %6.2f  %6.2f\n" % (g.AzMoonB,g.ElMoonB) | ||||
|     t4= "Sun:     %6.2f  %6.2f\n" % (g.AzSun,g.ElSun) | ||||
|     t4a="Source:  %6.2f  %6.2f\n\n" % (g.AzAux,g.ElAux) | ||||
|     t5= "        Doppler   df/dt\n" | ||||
|     t6= "DX:     %7d %7.2f\n" % (g.ndop,g.dfdt) | ||||
|     t7= "Self:   %7d %7.2f\n\n" % (g.ndop00,g.dfdt0) | ||||
|     t7a="            RA      DEC\n" | ||||
|     irah=int(g.RAMoon) | ||||
|     iram=int(60.0*(g.RAMoon-irah)) | ||||
|     t7b="Moon:     %2.2d:%2.2d  %6.2f\n" % (irah,iram,g.DecMoon) | ||||
|     irah=int(g.RaAux) | ||||
|     iram=int(60.0*(g.RaAux-irah)) | ||||
|     t7c="Source:   %2.2d:%2.2d  %6.2f\n\n" % (irah,iram,g.DecAux) | ||||
|     t8= "Freq: %4d  Tsky:%6d\n" % (g.nfreq,g.ntsky) | ||||
|     t9= "MNR: %5.1f  Dgrd:%6.1f\n" % (g.MaxNR,g.Dgrd) | ||||
|     t10="DPol: %4d  SD:%8.2f\n" % (g.poloffset,g.sd) | ||||
|     t=t1+t2+t3+t4+t4a+t5+t6+t7+t7a+t7b+t7c+t8+t9+t10 | ||||
|     lab1.configure(text=t) | ||||
|     g.astro_geom=root.geometry() | ||||
|     frame.after(1000,update) | ||||
| 
 | ||||
| g2font=g.g2font | ||||
| lab1=Label(frame,font=g2font,justify=LEFT,bg="#66FFFF", | ||||
|            relief=RIDGE,bd=4,anchor=N) | ||||
| lab1.pack(ipadx=4) | ||||
| 
 | ||||
| frame.after(1000,update) | ||||
							
								
								
									
										37
									
								
								astro.ui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								astro.ui
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <ui version="4.0"> | ||||
|  <class>Astro</class> | ||||
|  <widget class="QWidget" name="Astro"> | ||||
|   <property name="geometry"> | ||||
|    <rect> | ||||
|     <x>0</x> | ||||
|     <y>0</y> | ||||
|     <width>262</width> | ||||
|     <height>427</height> | ||||
|    </rect> | ||||
|   </property> | ||||
|   <property name="windowTitle"> | ||||
|    <string>Form</string> | ||||
|   </property> | ||||
|   <widget class="QTextBrowser" name="astroTextBrowser"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>0</x> | ||||
|      <y>10</y> | ||||
|      <width>256</width> | ||||
|      <height>411</height> | ||||
|     </rect> | ||||
|    </property> | ||||
|    <property name="font"> | ||||
|     <font> | ||||
|      <family>Courier New</family> | ||||
|      <pointsize>20</pointsize> | ||||
|      <weight>75</weight> | ||||
|      <bold>true</bold> | ||||
|     </font> | ||||
|    </property> | ||||
|   </widget> | ||||
|  </widget> | ||||
|  <resources/> | ||||
|  <connections/> | ||||
| </ui> | ||||
							
								
								
									
										123
									
								
								astro0.f90
									
									
									
									
									
								
							
							
						
						
									
										123
									
								
								astro0.f90
									
									
									
									
									
								
							| @ -1,123 +0,0 @@ | ||||
| subroutine astro0(nyear,month,nday,uth8,nfreq,grid,cauxra,cauxdec,       & | ||||
|      AzSun8,ElSun8,AzMoon8,ElMoon8,AzMoonB8,ElMoonB8,ntsky,ndop,ndop00,  & | ||||
|      dbMoon8,RAMoon8,DecMoon8,HA8,Dgrd8,sd8,poloffset8,xnr8,dfdt,dfdt0,  & | ||||
|      RaAux8,DecAux8,AzAux8,ElAux8) | ||||
| 
 | ||||
| !f2py intent(in) nyear,month,nday,uth8,nfreq,grid,cauxra,cauxdec | ||||
| !f2py intent(out) AzSun8,ElSun8,AzMoon8,ElMoon8,AzMoonB8,ElMoonB8,ntsky,ndop,ndop00,dbMoon8,RAMoon8,DecMoon8,HA8,Dgrd8,sd8,poloffset8,xnr8,dfdt,dfdt0,RaAux8,DecAux8,AzAux8,ElAux8 | ||||
| 
 | ||||
|   character grid*6 | ||||
|   character*9 cauxra,cauxdec | ||||
|   real*8 AzSun8,ElSun8,AzMoon8,ElMoon8,AzMoonB8,ElMoonB8,AzAux8,ElAux8 | ||||
|   real*8 dbMoon8,RAMoon8,DecMoon8,HA8,Dgrd8,xnr8,dfdt,dfdt0 | ||||
|   real*8 sd8,poloffset8 | ||||
|   include 'gcom2.f90' | ||||
|   data uth8z/0.d0/,imin0/-99/ | ||||
|   save | ||||
| 
 | ||||
|   call cs_lock('astro0a') | ||||
|   auxra=0. | ||||
|   i=index(cauxra,':') | ||||
|   if(i.eq.0) then | ||||
|      read(cauxra,*,err=1,end=1) auxra | ||||
|   else | ||||
|      read(cauxra(1:i-1),*,err=1,end=1) ih | ||||
|      read(cauxra(i+1:i+2),*,err=1,end=1) im | ||||
|      read(cauxra(i+4:i+5),*,err=1,end=1) is | ||||
|      auxra=ih + im/60.0 + is/3600.0 | ||||
|   endif | ||||
| 1 auxdec=0. | ||||
|   i=index(cauxdec,':') | ||||
|   if(i.eq.0) then | ||||
|      read(cauxdec,*,err=2,end=2) auxdec | ||||
|   else | ||||
|      read(cauxdec(1:i-1),*,err=2,end=2) id | ||||
|      read(cauxdec(i+1:i+2),*,err=2,end=2) im | ||||
|      read(cauxdec(i+4:i+5),*,err=2,end=2) is | ||||
|      auxdec=abs(id) + im/60.0 + is/3600.0 | ||||
|      if(cauxdec(1:1).eq.'-') auxdec=-auxdec | ||||
|   endif | ||||
| 
 | ||||
| 2 nmode=1 | ||||
|   if(mode(1:4).eq.'JT65') then | ||||
|      nmode=2 | ||||
|      if(mode(5:5).eq.'A') mode65=1 | ||||
|      if(mode(5:5).eq.'B') mode65=2 | ||||
|      if(mode(5:5).eq.'C') mode65=4 | ||||
|   endif | ||||
|   if(mode.eq.'Echo') nmode=3 | ||||
|   if(mode.eq.'JT6M') nmode=4 | ||||
|   uth=uth8 | ||||
| 
 | ||||
|   call cs_unlock | ||||
|   call astro(AppDir,nyear,month,nday,uth,nfreq,hisgrid,2,nmode,1,    & | ||||
|        AzSun,ElSun,AzMoon,ElMoon,ntsky,doppler00,doppler,            & | ||||
|        dbMoon,RAMoon,DecMoon,HA,Dgrd,sd,poloffset,xnr,auxra,auxdec,  & | ||||
|        AzAux,ElAux) | ||||
|   AzMoonB8=AzMoon | ||||
|   ElMoonB8=ElMoon | ||||
|   call astro(AppDir,nyear,month,nday,uth,nfreq,grid,1,nmode,1,       & | ||||
|        AzSun,ElSun,AzMoon,ElMoon,ntsky,doppler00,doppler,            & | ||||
|        dbMoon,RAMoon,DecMoon,HA,Dgrd,sd,poloffset,xnr,auxra,auxdec,  & | ||||
|        AzAux,ElAux) | ||||
| 
 | ||||
|   RaAux8=auxra | ||||
|   DecAux8=auxdec | ||||
|   AzSun8=AzSun | ||||
|   ElSun8=ElSun | ||||
|   AzMoon8=AzMoon | ||||
|   ElMoon8=ElMoon | ||||
|   dbMoon8=dbMoon | ||||
|   RAMoon8=RAMoon/15.0 | ||||
|   DecMoon8=DecMoon | ||||
|   HA8=HA | ||||
|   Dgrd8=Dgrd | ||||
|   sd8=sd | ||||
|   poloffset8=poloffset | ||||
|   xnr8=xnr | ||||
|   AzAux8=AzAux | ||||
|   ElAux8=ElAux | ||||
|   ndop=nint(doppler) | ||||
|   ndop00=nint(doppler00) | ||||
| 
 | ||||
|   if(uth8z.eq.0.d0) then | ||||
|      uth8z=uth8-1.d0/3600.d0 | ||||
|      dopplerz=doppler | ||||
|      doppler00z=doppler00 | ||||
|   endif | ||||
|       | ||||
|   dt=60.0*(uth8-uth8z) | ||||
|   if(dt.le.0) dt=1.d0/60.d0 | ||||
|   dfdt=(doppler-dopplerz)/dt | ||||
|   dfdt0=(doppler00-doppler00z)/dt | ||||
|   uth8z=uth8 | ||||
|   dopplerz=doppler | ||||
|   doppler00z=doppler00 | ||||
| 
 | ||||
|   imin=60*uth8 | ||||
|   isec=3600*uth8 | ||||
| 
 | ||||
|   if(isec.ne.isec0 .and. ndecoding.eq.0) then | ||||
|      call cs_lock('astro0b') | ||||
|      ih=uth8 | ||||
|      im=mod(imin,60) | ||||
|      is=mod(isec,60) | ||||
|      rewind 14 | ||||
|      write(14,1010) ih,im,is,AzMoon,ElMoon,                          & | ||||
|         ih,im,is,AzSun,ElSun,                                        & | ||||
|         ih,im,is,AzAux,ElAux,                                        & | ||||
|         nfreq,doppler,dfdt,doppler00,dfdt0,                          & | ||||
|         mousefqso,nsetftx | ||||
| 1010 format(i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Moon'/        & | ||||
|             i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Sun'/         & | ||||
|             i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Source'/      & | ||||
|             i4,',',f8.1,',',f8.2,',',f8.1,',',f8.2,',Doppler'/       & | ||||
|             i4,',',i1,',fQSO') | ||||
|      call flushqqq(14) | ||||
|      nsetftx=0 | ||||
|      isec0=isec | ||||
|      call cs_unlock | ||||
|   endif | ||||
| 
 | ||||
|   return | ||||
| end subroutine astro0 | ||||
							
								
								
									
										14
									
								
								astropak.f
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								astropak.f
									
									
									
									
									
								
							| @ -1,14 +0,0 @@ | ||||
| !      include 'astro.f' | ||||
|       include 'azdist.f' | ||||
|       include 'coord.f' | ||||
|       include 'dcoord.f' | ||||
|       include 'deg2grid.f' | ||||
|       include 'dot.f' | ||||
|       include 'ftsky.f' | ||||
|       include 'geocentric.f' | ||||
|       include 'GeoDist.f' | ||||
|       include 'grid2deg.f' | ||||
|       include 'moon2.f' | ||||
|       include 'MoonDop.f' | ||||
|       include 'sun.f' | ||||
|       include 'toxyz.f' | ||||
| @ -1,74 +0,0 @@ | ||||
| !------------------------------------------------ audio_init | ||||
| subroutine audio_init(ndin,ndout) | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   use dfmt | ||||
|   integer Thread1,Thread2,Thread3 | ||||
|   external a2d,decode1,recvpkt | ||||
| #endif | ||||
| 
 | ||||
|   include 'gcom1.f90' | ||||
|   include 'gcom2.f90' | ||||
| 
 | ||||
|   nmode=2 | ||||
|   if(mode(5:5).eq.'A') mode65=1 | ||||
|   if(mode(5:5).eq.'B') mode65=2 | ||||
|   if(mode(5:5).eq.'C') mode65=4 | ||||
|   ndevout=ndout | ||||
|   TxOK=0 | ||||
|   Transmitting=0 | ||||
|   nfsample=11025 | ||||
|   nspb=1024 | ||||
|   nbufs=2048 | ||||
|   nmax=nbufs*nspb | ||||
|   nwave=60*nfsample | ||||
|   ngo=1 | ||||
|   f0=800.0 | ||||
|   do i=1,nwave | ||||
|      iwave(i)=nint(32767.0*sin(6.283185307*i*f0/nfsample)) | ||||
|   enddo | ||||
| 
 | ||||
| #ifdef CVF | ||||
| !  Priority classes (for processes): | ||||
| !     IDLE_PRIORITY_CLASS               64 | ||||
| !     NORMAL_PRIORITY_CLASS             32 | ||||
| !     HIGH_PRIORITY_CLASS              128 | ||||
| 
 | ||||
| !  Priority definitions (for threads): | ||||
| !     THREAD_PRIORITY_IDLE             -15 | ||||
| !     THREAD_PRIORITY_LOWEST            -2 | ||||
| !     THREAD_PRIORITY_BELOW_NORMAL      -1 | ||||
| !     THREAD_PRIORITY_NORMAL             0 | ||||
| !     THREAD_PRIORITY_ABOVE_NORMAL       1 | ||||
| !     THREAD_PRIORITY_HIGHEST            2 | ||||
| !     THREAD_PRIORITY_TIME_CRITICAL     15 | ||||
|      | ||||
|   m0=SetPriorityClass(GetCurrentProcess(),NORMAL_PRIORITY_CLASS) | ||||
| !  m0=SetPriorityClass(GetCurrentProcess(),HIGH_PRIORITY_CLASS) | ||||
| 
 | ||||
| ! Start a thread for doing A/D and D/A with sound card. | ||||
| !  (actually, only D/A is used in MAP65) | ||||
|   Thread1=CreateThread(0,0,a2d,0,CREATE_SUSPENDED,id1) | ||||
|   m1=SetThreadPriority(Thread1,THREAD_PRIORITY_ABOVE_NORMAL) | ||||
|   m2=ResumeThread(Thread1) | ||||
| 
 | ||||
| ! Start a thread for background decoding. | ||||
|   Thread2=CreateThread(0,0,decode1,0,CREATE_SUSPENDED,id2) | ||||
|   m3=SetThreadPriority(Thread2,THREAD_PRIORITY_BELOW_NORMAL) | ||||
|   m4=ResumeThread(Thread2) | ||||
| 
 | ||||
| ! Start a thread to receive packets from Linrad | ||||
|   Thread3=CreateThread(0,0,recvpkt,0,CREATE_SUSPENDED,id3) | ||||
|   m5=SetThreadPriority(Thread3,THREAD_PRIORITY_ABOVE_NORMAL) | ||||
|   m6=ResumeThread(Thread3) | ||||
| 
 | ||||
| #else | ||||
| !  print*,'Audio INIT called.' | ||||
|   ierr=start_threads(ndevin,ndevout,y1,y2,nmax,iwrite,iwave,nwave,    & | ||||
|        11025,NSPB,TRPeriod,TxOK,ndebug,Transmitting,            & | ||||
|        Tsec,ngo,nmode,tbuf,ibuf,ndsec,PttPort,devin_name,devout_name) | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
|   return | ||||
| end subroutine audio_init | ||||
							
								
								
									
										4
									
								
								avecom.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								avecom.h
									
									
									
									
									
								
							| @ -1,4 +0,0 @@ | ||||
| 	parameter (MAXAVE=120) | ||||
| 	common/ave/ppsave(64,63,MAXAVE),nflag(MAXAVE),nsave, | ||||
|      +    iseg(MAXAVE) | ||||
| 
 | ||||
							
								
								
									
										64
									
								
								avemsg65.f
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								avemsg65.f
									
									
									
									
									
								
							| @ -1,64 +0,0 @@ | ||||
|       subroutine avemsg65(mseg,mode65,ndepth,decoded,nused, | ||||
|      +  nq1,nq2,neme,nsked,mycall,hiscall,hisgrid,qual, | ||||
|      +  ns,ncount) | ||||
| 
 | ||||
| C  Decodes averaged JT65 data for the specified segment (mseg=1 or 2). | ||||
| 
 | ||||
|       parameter (MAXAVE=120)                    !Max avg count is 120 | ||||
|       character decoded*22,deepmsg*22 | ||||
|       character mycall*12,hiscall*12,hisgrid*6 | ||||
|       real s3(64,63) | ||||
|       logical ltext | ||||
|       common/ave/ppsave(64,63,MAXAVE),nflag(MAXAVE),nsave,iseg(MAXAVE) | ||||
| 
 | ||||
| C  Count the available spectra for this Monitor segment (mseg=1 or 2), | ||||
| C  and the number of spectra flagged as good. | ||||
| 
 | ||||
|       nused=0 | ||||
|       ns=0 | ||||
|       nqual=0 | ||||
|       deepmsg='                      ' | ||||
|       do i=1,nsave | ||||
|          if(iseg(i).eq.mseg) then | ||||
|             ns=ns+1 | ||||
|             if(nflag(i).eq.1) nused=nused+1 | ||||
|          endif | ||||
|       enddo | ||||
|       if(nused.lt.1) go to 100 | ||||
| 
 | ||||
| C  Compute the average of all flagged spectra for this segment. | ||||
|       do j=1,63 | ||||
|          call zero(s3(1,j),64) | ||||
|          do n=1,nsave | ||||
|             if(nflag(n).eq.1 .and. iseg(n).eq.mseg) then | ||||
|                call add(s3(1,j),ppsave(1,j,n),s3(1,j),64) | ||||
|             endif | ||||
|          enddo | ||||
|       enddo | ||||
| 
 | ||||
|       nadd=nused*mode65 | ||||
|       call extract(s3,nadd,ncount,decoded,ltext)     !Extract the message | ||||
|       if(ncount.lt.0) decoded='                      ' | ||||
| 
 | ||||
|       nqual=0 | ||||
| C  Possibly should pass nadd=nused, also: | ||||
|       if(ndepth.ge.3) then | ||||
|          flipx=1.0                     !Normal flip not relevant for ave msg | ||||
|          call deep65(s3,mode65,neme,nsked,flipx,  | ||||
|      +   mycall,hiscall,hisgrid,deepmsg,qual) | ||||
|          nqual=qual | ||||
|          if(nqual.lt.nq1) deepmsg='                      ' | ||||
|          if(nqual.ge.nq1 .and. nqual.lt.nq2) deepmsg(19:19)='?' | ||||
|       else | ||||
|          deepmsg='                      ' | ||||
|          qual=0. | ||||
|       endif | ||||
|       if(ncount.lt.0) decoded=deepmsg | ||||
| 
 | ||||
| C  Suppress "birdie messages": | ||||
|       if(decoded(1:7).eq.'000AAA ') decoded='                      ' | ||||
|       if(decoded(1:7).eq.'0L6MWK ') decoded='                      ' | ||||
| 
 | ||||
|  100  if(nused.lt.1) decoded='                      ' | ||||
|       return | ||||
|       end | ||||
							
								
								
									
										108
									
								
								azdist.f
									
									
									
									
									
								
							
							
						
						
									
										108
									
								
								azdist.f
									
									
									
									
									
								
							| @ -1,108 +0,0 @@ | ||||
|       subroutine azdist(MyGrid,HisGrid,utch,nAz,nEl,nDmiles,nDkm, | ||||
|      +  nHotAz,nHotABetter) | ||||
| 
 | ||||
|       character*6 MyGrid,HisGrid,mygrid0,hisgrid0 | ||||
|       real*8 utch,utch0 | ||||
|       logical HotABetter,IamEast | ||||
|       real eltab(22),daztab(22) | ||||
|       data eltab/18.,15.,13.,11.,9.,8.,7.,6.,5.3,4.7,4.,3.3,2.7, | ||||
|      +  2.,1.5,1.,0.8,0.6,0.4,0.2,0.0,0.0/ | ||||
|       data daztab/21.,18.,16.,15.,14.,13.,12.,11.,10.7,10.3,10., | ||||
|      +  10.,10.,10.,10.,10.,10.,9.,9.,9.,8.,8./ | ||||
|       data mygrid0/"      "/,hisgrid0/"      "/,utch0/-999.d0/ | ||||
|       save | ||||
| 
 | ||||
|       if(MyGrid.eq.HisGrid) then | ||||
|          naz=0 | ||||
|          nel=0 | ||||
|          ndmiles=0 | ||||
|          ndkm=0 | ||||
|          nhotaz=0 | ||||
|          nhotabetter=1 | ||||
|          go to 999 | ||||
|       endif | ||||
| 
 | ||||
|       if(mygrid.eq.mygrid0 .and. hisgrid.eq.hisgrid0 .and. | ||||
|      +  abs(utch-utch0).lt.0.1666667d0) go to 900 | ||||
|       utch0=utch | ||||
|       mygrid0=mygrid | ||||
|       hisgrid0=hisgrid | ||||
|       utchours=utch | ||||
| 
 | ||||
|       if(MyGrid(5:5).eq.' ') MyGrid(5:5)='m' | ||||
|       if(MyGrid(6:6).eq.' ') MyGrid(6:6)='m' | ||||
|       if(HisGrid(5:5).eq.' ') HisGrid(5:5)='m' | ||||
|       if(HisGrid(6:6).eq.' ') HisGrid(6:6)='m' | ||||
| 
 | ||||
|       if(MyGrid.eq.HisGrid) then | ||||
|          Az=0. | ||||
|          Dmiles=0. | ||||
|          Dkm=0.0 | ||||
|          El=0. | ||||
|          HotA=0. | ||||
|          HotB=0. | ||||
|          HotABetter=.true. | ||||
|          go to 900 | ||||
|       endif | ||||
| 
 | ||||
|       call grid2deg(MyGrid,dlong1,dlat1) | ||||
|       call grid2deg(HisGrid,dlong2,dlat2) | ||||
|       call geodist(dlat1,dlong1,dlat2,dlong2,Az,Baz,Dkm) | ||||
| 
 | ||||
|       ndkm=Dkm/100 | ||||
|       j=ndkm-4 | ||||
|       if(j.lt.1) j=1 | ||||
|       if(j.gt.21)j=21 | ||||
|       if(Dkm.lt.500.0) then | ||||
|         El=18.0 | ||||
|       else | ||||
|         u=(Dkm-100.0*ndkm)/100.0 | ||||
|         El=(1.0-u)*eltab(j) + u*eltab(j+1) | ||||
|       endif | ||||
| 
 | ||||
|       daz=daztab(j) + u * (daztab(j+1)-daztab(j)) | ||||
|       Dmiles=Dkm/1.609344 | ||||
| 
 | ||||
|       tmid=mod(UTChours-0.5*(dlong1+dlong2)/15.0+48.0,24.0) | ||||
|       IamEast=.false. | ||||
|       if(dlong1.lt.dlong2) IamEast=.true. | ||||
|       if(dlong1.eq.dlong2 .and. dlat1.gt.dlat2) IamEast=.false. | ||||
|       azEast=baz | ||||
|       if(IamEast) azEast=az | ||||
|       if((azEast.ge.45.0 .and. azEast.lt.135.0) .or. | ||||
|      +    (azEast.ge.225.0 .and. azEast.lt.315.0)) then | ||||
| C  The path will be taken as "east-west". | ||||
|          HotABetter=.true. | ||||
|          if(abs(tmid-6.0).lt.6.0) HotABetter=.false. | ||||
|          if((dlat1+dlat2)/2.0 .lt. 0.0) HotABetter=.not.HotABetter | ||||
|       else | ||||
| C  The path will be taken as "north-south". | ||||
|          HotABetter=.false. | ||||
|          if(abs(tmid-12.0).lt.6.0) HotABetter=.true. | ||||
|       endif | ||||
|       if(IamEast) then | ||||
|          HotA = Az - daz | ||||
|          HotB = Az + daz | ||||
|       else | ||||
|          HotA = Az + daz | ||||
|          HotB = Az - daz | ||||
|       endif | ||||
|       if(HotA.lt.0.0)   HotA=HotA+360.0 | ||||
|       if(HotA.gt.360.0) HotA=HotA-360.0 | ||||
|       if(HotB.lt.0.0)   HotB=HotB+360.0 | ||||
|       if(HotB.gt.360.0) HotB=HotB-360.0 | ||||
| 
 | ||||
|  900  continue | ||||
|       naz=nint(Az) | ||||
|       nel=nint(el) | ||||
|       nDmiles=nint(Dmiles) | ||||
|       nDkm=nint(Dkm) | ||||
|       nHotAz=nint(HotB) | ||||
|       nHotABetter=0 | ||||
|       if(HotABetter) then | ||||
|          nHotAz=nint(HotA) | ||||
|          nHotABetter=1 | ||||
|       endif | ||||
| 
 | ||||
|  999  return | ||||
|       end | ||||
							
								
								
									
										14
									
								
								azdist0.f90
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								azdist0.f90
									
									
									
									
									
								
							| @ -1,14 +0,0 @@ | ||||
| 
 | ||||
| !---------------------------------------------------- azdist0 | ||||
| 
 | ||||
| subroutine azdist0(MyGrid,HisGrid,utch,nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter) | ||||
|   character*6 MyGrid,HisGrid | ||||
|   real*8 utch | ||||
| !f2py intent(in) MyGrid,HisGrid,utch | ||||
| !f2py intent(out) nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter | ||||
| 
 | ||||
|   if(hisgrid(5:5).eq.' ' .or. ichar(hisgrid(5:5)).eq.0) hisgrid(5:5)='m' | ||||
|   if(hisgrid(6:6).eq.' ' .or. ichar(hisgrid(6:6)).eq.0) hisgrid(6:6)='m' | ||||
|   call azdist(MyGrid,HisGrid,utch,nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter) | ||||
|   return | ||||
| end subroutine azdist0 | ||||
							
								
								
									
										89
									
								
								bandmap.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								bandmap.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,89 @@ | ||||
| #include "bandmap.h" | ||||
| #include "ui_bandmap.h" | ||||
| #include <QDebug> | ||||
| 
 | ||||
| BandMap::BandMap(QWidget *parent) : | ||||
|   QWidget(parent), | ||||
|   ui(new Ui::BandMap) | ||||
| { | ||||
|   ui->setupUi(this); | ||||
|   ui->bmTextBrowser->setStyleSheet( | ||||
|         "QTextBrowser { background-color : #000066; color : red; }"); | ||||
|   m_bandMapText=""; | ||||
|   ui->bmTextBrowser->clear(); | ||||
| } | ||||
| 
 | ||||
| BandMap::~BandMap() | ||||
| { | ||||
|   delete ui; | ||||
| } | ||||
| 
 | ||||
| void BandMap::setText(QString t) | ||||
| { | ||||
|   m_bandMapText=t; | ||||
|   int w=ui->bmTextBrowser->size().width(); | ||||
|   int ncols=1; | ||||
|   if(w>220) ncols=2; | ||||
|   QString s="QTextBrowser{background-color: "+m_colorBackground+"}"; | ||||
|   ui->bmTextBrowser->setStyleSheet(s); | ||||
|   QString t0="<html style=\" font-family:'Courier New';" | ||||
|       "font-size:9pt; background-color:#000066\">" | ||||
|       "<table border=0 cellspacing=7><tr><td>\n"; | ||||
|   QString tfreq,tspace,tcall; | ||||
|   QString s0,s1,s2,s3,bg; | ||||
|   bg="<span style=color:"+m_colorBackground+";>.</span>"; | ||||
|   s0="<span style=color:"+m_color0+";>"; | ||||
|   s1="<span style=color:"+m_color1+";>"; | ||||
|   s2="<span style=color:"+m_color2+";>"; | ||||
|   s3="<span style=color:"+m_color3+";>"; | ||||
| 
 | ||||
|   ui->bmTextBrowser->clear(); | ||||
|   QStringList lines = t.split( "\n", QString::SkipEmptyParts ); | ||||
|   int nrows=(lines.length()+ncols-1)/ncols; | ||||
| 
 | ||||
|   for(int i=0; i<nrows; i++) { | ||||
|     tfreq=lines[i].mid(0,3); | ||||
|     tspace=lines[i].mid(4,1); | ||||
|     if(tspace==" ") tspace=bg; | ||||
|     tcall=lines[i].mid(5,7); | ||||
|     int n=lines[i].mid(13,1).toInt(); | ||||
|     if(n==0) t0 += s0; | ||||
|     if(n==1) t0 += s1; | ||||
|     if(n==2) t0 += s2; | ||||
|     if(n>=3) t0 += s3; | ||||
|     t0 += (tfreq + tspace + tcall + "</span><br>\n"); | ||||
|   } | ||||
| 
 | ||||
|   if(ncols==2) {                                  //2-column display
 | ||||
|     t0 += "<td><br><td>\n"; | ||||
|     for(int i=nrows; i<lines.length(); i++) { | ||||
|       tfreq=lines[i].mid(0,3); | ||||
|       tspace=lines[i].mid(4,1); | ||||
|       if(tspace=="  ") tspace=bg; | ||||
|       tcall=lines[i].mid(5,7); | ||||
|       int n=lines[i].mid(13,1).toInt(); | ||||
|       if(n==0) t0 += s0; | ||||
|       if(n==1) t0 += s1; | ||||
|       if(n==2) t0 += s2; | ||||
|       if(n>=3) t0 += s3; | ||||
|       t0 += (tfreq + tspace + tcall + "</span><br>\n"); | ||||
|     } | ||||
|     if(2*nrows>lines.length()) t0 += (s0 + "</span><br>\n"); | ||||
|   } | ||||
|   ui->bmTextBrowser->setHtml(t0); | ||||
| } | ||||
| 
 | ||||
| void BandMap::resizeEvent(QResizeEvent* ) | ||||
| { | ||||
|   setText(m_bandMapText); | ||||
| } | ||||
| 
 | ||||
| void BandMap::setColors(QString t) | ||||
| { | ||||
|   m_colorBackground = "#"+t.mid(0,6); | ||||
|   m_color0 = "#"+t.mid(6,6); | ||||
|   m_color1 = "#"+t.mid(12,6); | ||||
|   m_color2 = "#"+t.mid(18,6); | ||||
|   m_color3 = "#"+t.mid(24,6); | ||||
|   setText(m_bandMapText); | ||||
| } | ||||
							
								
								
									
										34
									
								
								bandmap.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								bandmap.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | ||||
| #ifndef BANDMAP_H | ||||
| #define BANDMAP_H | ||||
| 
 | ||||
| #include <QWidget> | ||||
| 
 | ||||
| namespace Ui { | ||||
|     class BandMap; | ||||
| } | ||||
| 
 | ||||
| class BandMap : public QWidget | ||||
| { | ||||
|     Q_OBJECT | ||||
| 
 | ||||
| public: | ||||
|   explicit BandMap(QWidget *parent = 0); | ||||
|   void setText(QString t); | ||||
|   void setColors(QString t); | ||||
| 
 | ||||
|   ~BandMap(); | ||||
| 
 | ||||
| protected: | ||||
|   void resizeEvent(QResizeEvent* event); | ||||
| 
 | ||||
| private: | ||||
|     Ui::BandMap *ui; | ||||
|     QString m_bandMapText; | ||||
|     QString m_colorBackground; | ||||
|     QString m_color0; | ||||
|     QString m_color1; | ||||
|     QString m_color2; | ||||
|     QString m_color3; | ||||
| }; | ||||
| 
 | ||||
| #endif // BANDMAP_H
 | ||||
							
								
								
									
										43
									
								
								bandmap.ui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								bandmap.ui
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <ui version="4.0"> | ||||
|  <class>BandMap</class> | ||||
|  <widget class="QWidget" name="BandMap"> | ||||
|   <property name="geometry"> | ||||
|    <rect> | ||||
|     <x>0</x> | ||||
|     <y>0</y> | ||||
|     <width>329</width> | ||||
|     <height>379</height> | ||||
|    </rect> | ||||
|   </property> | ||||
|   <property name="minimumSize"> | ||||
|    <size> | ||||
|     <width>0</width> | ||||
|     <height>0</height> | ||||
|    </size> | ||||
|   </property> | ||||
|   <property name="windowTitle"> | ||||
|    <string>Form</string> | ||||
|   </property> | ||||
|   <layout class="QGridLayout" name="gridLayout"> | ||||
|    <item row="0" column="0"> | ||||
|     <widget class="QTextBrowser" name="bmTextBrowser"> | ||||
|      <property name="minimumSize"> | ||||
|       <size> | ||||
|        <width>107</width> | ||||
|        <height>0</height> | ||||
|       </size> | ||||
|      </property> | ||||
|      <property name="font"> | ||||
|       <font> | ||||
|        <family>Courier New</family> | ||||
|        <pointsize>9</pointsize> | ||||
|       </font> | ||||
|      </property> | ||||
|     </widget> | ||||
|    </item> | ||||
|   </layout> | ||||
|  </widget> | ||||
|  <resources/> | ||||
|  <connections/> | ||||
| </ui> | ||||
							
								
								
									
										256
									
								
								blue.dat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										256
									
								
								blue.dat
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,256 @@ | ||||
|      0      0.0000    0.0000    0.0000 | ||||
|      1	    0.0902    0.0902    0.2558 | ||||
|      2	    0.1176    0.1176    0.2694 | ||||
|      3	    0.1412    0.1412    0.2820 | ||||
|      4	    0.1569    0.1569    0.2938 | ||||
|      5	    0.1725    0.1725    0.3049 | ||||
|      6	    0.1843    0.1843    0.3154 | ||||
|      7	    0.1961    0.1961    0.3254 | ||||
|      8	    0.2039    0.2039    0.3349 | ||||
|      9	    0.2157    0.2157    0.3440 | ||||
|     10	    0.2235    0.2235    0.3528 | ||||
|     11	    0.2314    0.2314    0.3612 | ||||
|     12	    0.2392    0.2392    0.3693 | ||||
|     13	    0.2471    0.2471    0.3772 | ||||
|     14	    0.2549    0.2549    0.3848 | ||||
|     15	    0.2588    0.2588    0.3921 | ||||
|     16	    0.2667    0.2667    0.3992 | ||||
|     17	    0.2706    0.2706    0.4061 | ||||
|     18	    0.2784    0.2784    0.4129 | ||||
|     19	    0.2824    0.2824    0.4194 | ||||
|     20	    0.2902    0.2902    0.4258 | ||||
|     21	    0.2941    0.2941    0.4319 | ||||
|     22	    0.2980    0.2980    0.4380 | ||||
|     23	    0.3059    0.3059    0.4439 | ||||
|     24	    0.3098    0.3098    0.4496 | ||||
|     25	    0.3137    0.3137    0.4553 | ||||
|     26	    0.3176    0.3176    0.4608 | ||||
|     27	    0.3216    0.3216    0.4661 | ||||
|     28	    0.3294    0.3294    0.4714 | ||||
|     29	    0.3333    0.3333    0.4765 | ||||
|     30	    0.3373    0.3373    0.4815 | ||||
|     31	    0.3412    0.3412    0.4865 | ||||
|     32	    0.3451    0.3451    0.4913 | ||||
|     33	    0.3490    0.3490    0.4960 | ||||
|     34	    0.3529    0.3529    0.5006 | ||||
|     35	    0.3569    0.3569    0.5052 | ||||
|     36	    0.3608    0.3608    0.5096 | ||||
|     37	    0.3647    0.3647    0.5140 | ||||
|     38	    0.3686    0.3686    0.5183 | ||||
|     39	    0.3725    0.3725    0.5225 | ||||
|     40	    0.3765    0.3765    0.5266 | ||||
|     41	    0.3804    0.3804    0.5306 | ||||
|     42	    0.3843    0.3843    0.5346 | ||||
|     43	    0.3843    0.3843    0.5385 | ||||
|     44	    0.3882    0.3882    0.5423 | ||||
|     45	    0.3922    0.3922    0.5460 | ||||
|     46	    0.3961    0.3961    0.5497 | ||||
|     47	    0.4000    0.4000    0.5533 | ||||
|     48	    0.4039    0.4039    0.5569 | ||||
|     49	    0.4078    0.4078    0.5603 | ||||
|     50	    0.4118    0.4118    0.5638 | ||||
|     51	    0.4118    0.4118    0.5671 | ||||
|     52	    0.4157    0.4157    0.5704 | ||||
|     53	    0.4196    0.4196    0.5736 | ||||
|     54	    0.4235    0.4235    0.5768 | ||||
|     55	    0.4275    0.4275    0.5799 | ||||
|     56	    0.4314    0.4314    0.5829 | ||||
|     57	    0.4314    0.4314    0.5859 | ||||
|     58	    0.4353    0.4353    0.5889 | ||||
|     59	    0.4392    0.4392    0.5917 | ||||
|     60	    0.4431    0.4431    0.5946 | ||||
|     61	    0.4471    0.4471    0.5973 | ||||
|     62	    0.4471    0.4471    0.6001 | ||||
|     63	    0.4510    0.4510    0.6027 | ||||
|     64	    0.4549    0.4549    0.6053 | ||||
|     65	    0.4588    0.4588    0.6079 | ||||
|     66	    0.4627    0.4627    0.6104 | ||||
|     67	    0.4627    0.4627    0.6129 | ||||
|     68	    0.4667    0.4667    0.6153 | ||||
|     69	    0.4706    0.4706    0.6176 | ||||
|     70	    0.4745    0.4745    0.6199 | ||||
|     71	    0.4745    0.4745    0.6222 | ||||
|     72	    0.4784    0.4784    0.6244 | ||||
|     73	    0.4824    0.4824    0.6266 | ||||
|     74	    0.4863    0.4863    0.6287 | ||||
|     75	    0.4863    0.4863    0.6308 | ||||
|     76	    0.4902    0.4902    0.6328 | ||||
|     77	    0.4941    0.4941    0.6348 | ||||
|     78	    0.4980    0.4980    0.6367 | ||||
|     79	    0.5020    0.5020    0.6386 | ||||
|     80	    0.5020    0.5020    0.6404 | ||||
|     81	    0.5059    0.5059    0.6422 | ||||
|     82	    0.5098    0.5098    0.6440 | ||||
|     83	    0.5098    0.5098    0.6457 | ||||
|     84	    0.5137    0.5137    0.6474 | ||||
|     85	    0.5176    0.5176    0.6490 | ||||
|     86	    0.5216    0.5216    0.6506 | ||||
|     87	    0.5216    0.5216    0.6521 | ||||
|     88	    0.5255    0.5255    0.6536 | ||||
|     89	    0.5294    0.5294    0.6551 | ||||
|     90	    0.5333    0.5333    0.6565 | ||||
|     91	    0.5333    0.5333    0.6578 | ||||
|     92	    0.5373    0.5373    0.6591 | ||||
|     93	    0.5412    0.5412    0.6604 | ||||
|     94	    0.5451    0.5451    0.6617 | ||||
|     95	    0.5451    0.5451    0.6629 | ||||
|     96	    0.5490    0.5490    0.6640 | ||||
|     97	    0.5529    0.5529    0.6651 | ||||
|     98	    0.5569    0.5569    0.6662 | ||||
|     99	    0.5569    0.5569    0.6672 | ||||
|    100	    0.5608    0.5608    0.6682 | ||||
|    101	    0.5647    0.5647    0.6692 | ||||
|    102	    0.5647    0.5647    0.6701 | ||||
|    103	    0.5686    0.5686    0.6710 | ||||
|    104	    0.5725    0.5725    0.6718 | ||||
|    105	    0.5765    0.5765    0.6726 | ||||
|    106	    0.5765    0.5765    0.6733 | ||||
|    107	    0.5804    0.5804    0.6740 | ||||
|    108	    0.5843    0.5843    0.6747 | ||||
|    109	    0.5843    0.5843    0.6753 | ||||
|    110	    0.5882    0.5882    0.6759 | ||||
|    111	    0.5922    0.5922    0.6765 | ||||
|    112	    0.5961    0.5961    0.6770 | ||||
|    113	    0.5961    0.5961    0.6774 | ||||
|    114	    0.6000    0.6000    0.6779 | ||||
|    115	    0.6039    0.6039    0.6783 | ||||
|    116	    0.6039    0.6039    0.6786 | ||||
|    117	    0.6078    0.6078    0.6789 | ||||
|    118	    0.6118    0.6118    0.6792 | ||||
|    119	    0.6157    0.6157    0.6794 | ||||
|    120	    0.6157    0.6157    0.6796 | ||||
|    121	    0.6196    0.6196    0.6798 | ||||
|    122	    0.6235    0.6235    0.6799 | ||||
|    123	    0.6235    0.6235    0.6800 | ||||
|    124	    0.6275    0.6275    0.6800 | ||||
|    125	    0.6314    0.6314    0.6800 | ||||
|    126	    0.6353    0.6353    0.6799 | ||||
|    127	    0.6353    0.6353    0.6799 | ||||
|    128	    0.6392    0.6392    0.6797 | ||||
|    129	    0.6431    0.6431    0.6796 | ||||
|    130	    0.6431    0.6431    0.6794 | ||||
|    131	    0.6471    0.6471    0.6791 | ||||
|    132	    0.6510    0.6510    0.6789 | ||||
|    133	    0.6549    0.6549    0.6785 | ||||
|    134	    0.6549    0.6549    0.6782 | ||||
|    135	    0.6588    0.6588    0.6778 | ||||
|    136	    0.6627    0.6627    0.6773 | ||||
|    137	    0.6627    0.6627    0.6769 | ||||
|    138	    0.6667    0.6667    0.6763 | ||||
|    139	    0.6706    0.6706    0.6758 | ||||
|    140	    0.6745    0.6745    0.6752 | ||||
|    141	    0.6745    0.6745    0.6746 | ||||
|    142	    0.6784    0.6784    0.6739 | ||||
|    143	    0.6824    0.6824    0.6732 | ||||
|    144	    0.6824    0.6824    0.6724 | ||||
|    145	    0.6863    0.6863    0.6716 | ||||
|    146	    0.6902    0.6902    0.6708 | ||||
|    147	    0.6941    0.6941    0.6699 | ||||
|    148	    0.6941    0.6941    0.6690 | ||||
|    149	    0.6980    0.6980    0.6680 | ||||
|    150	    0.7020    0.7020    0.6670 | ||||
|    151	    0.7020    0.7020    0.6660 | ||||
|    152	    0.7059    0.7059    0.6649 | ||||
|    153	    0.7098    0.7098    0.6638 | ||||
|    154	    0.7098    0.7098    0.6626 | ||||
|    155	    0.7137    0.7137    0.6614 | ||||
|    156	    0.7176    0.7176    0.6601 | ||||
|    157	    0.7216    0.7216    0.6589 | ||||
|    158	    0.7216    0.7216    0.6575 | ||||
|    159	    0.7255    0.7255    0.6561 | ||||
|    160	    0.7294    0.7294    0.6547 | ||||
|    161	    0.7294    0.7294    0.6533 | ||||
|    162	    0.7333    0.7333    0.6518 | ||||
|    163	    0.7373    0.7373    0.6502 | ||||
|    164	    0.7412    0.7412    0.6486 | ||||
|    165	    0.7412    0.7412    0.6470 | ||||
|    166	    0.7451    0.7451    0.6453 | ||||
|    167	    0.7490    0.7490    0.6436 | ||||
|    168	    0.7490    0.7490    0.6418 | ||||
|    169	    0.7529    0.7529    0.6400 | ||||
|    170	    0.7569    0.7569    0.6382 | ||||
|    171	    0.7608    0.7608    0.6363 | ||||
|    172	    0.7608    0.7608    0.6343 | ||||
|    173	    0.7647    0.7647    0.6324 | ||||
|    174	    0.7686    0.7686    0.6303 | ||||
|    175	    0.7686    0.7686    0.6282 | ||||
|    176	    0.7725    0.7725    0.6261 | ||||
|    177	    0.7765    0.7765    0.6239 | ||||
|    178	    0.7804    0.7804    0.6217 | ||||
|    179	    0.7804    0.7804    0.6194 | ||||
|    180	    0.7843    0.7843    0.6171 | ||||
|    181	    0.7882    0.7882    0.6147 | ||||
|    182	    0.7882    0.7882    0.6123 | ||||
|    183	    0.7922    0.7922    0.6098 | ||||
|    184	    0.7961    0.7961    0.6073 | ||||
|    185	    0.8000    0.8000    0.6047 | ||||
|    186	    0.8000    0.8000    0.6021 | ||||
|    187	    0.8039    0.8039    0.5994 | ||||
|    188	    0.8078    0.8078    0.5967 | ||||
|    189	    0.8078    0.8078    0.5939 | ||||
|    190	    0.8118    0.8118    0.5911 | ||||
|    191	    0.8157    0.8157    0.5882 | ||||
|    192	    0.8196    0.8196    0.5853 | ||||
|    193	    0.8196    0.8196    0.5823 | ||||
|    194	    0.8235    0.8235    0.5792 | ||||
|    195	    0.8275    0.8275    0.5761 | ||||
|    196	    0.8275    0.8275    0.5729 | ||||
|    197	    0.8314    0.8314    0.5697 | ||||
|    198	    0.8353    0.8353    0.5664 | ||||
|    199	    0.8392    0.8392    0.5630 | ||||
|    200	    0.8392    0.8392    0.5596 | ||||
|    201	    0.8431    0.8431    0.5561 | ||||
|    202	    0.8471    0.8471    0.5525 | ||||
|    203	    0.8471    0.8471    0.5489 | ||||
|    204	    0.8510    0.8510    0.5452 | ||||
|    205	    0.8549    0.8549    0.5414 | ||||
|    206	    0.8588    0.8588    0.5376 | ||||
|    207	    0.8588    0.8588    0.5337 | ||||
|    208	    0.8627    0.8627    0.5297 | ||||
|    209	    0.8667    0.8667    0.5257 | ||||
|    210	    0.8667    0.8667    0.5215 | ||||
|    211	    0.8706    0.8706    0.5173 | ||||
|    212	    0.8745    0.8745    0.5130 | ||||
|    213	    0.8784    0.8784    0.5086 | ||||
|    214	    0.8784    0.8784    0.5042 | ||||
|    215	    0.8824    0.8824    0.4996 | ||||
|    216	    0.8863    0.8863    0.4950 | ||||
|    217	    0.8863    0.8863    0.4902 | ||||
|    218	    0.8902    0.8902    0.4854 | ||||
|    219	    0.8941    0.8941    0.4804 | ||||
|    220	    0.8980    0.8980    0.4754 | ||||
|    221	    0.8980    0.8980    0.4702 | ||||
|    222	    0.9020    0.9020    0.4649 | ||||
|    223	    0.9059    0.9059    0.4595 | ||||
|    224	    0.9098    0.9098    0.4540 | ||||
|    225	    0.9098    0.9098    0.4484 | ||||
|    226	    0.9137    0.9137    0.4426 | ||||
|    227	    0.9176    0.9176    0.4366 | ||||
|    228	    0.9176    0.9176    0.4306 | ||||
|    229	    0.9216    0.9216    0.4243 | ||||
|    230	    0.9255    0.9255    0.4179 | ||||
|    231	    0.9294    0.9294    0.4114 | ||||
|    232	    0.9294    0.9294    0.4046 | ||||
|    233	    0.9333    0.9333    0.3977 | ||||
|    234	    0.9373    0.9373    0.3905 | ||||
|    235	    0.9373    0.9373    0.3831 | ||||
|    236	    0.9412    0.9412    0.3754 | ||||
|    237	    0.9451    0.9451    0.3675 | ||||
|    238	    0.9490    0.9490    0.3594 | ||||
|    239	    0.9490    0.9490    0.3509 | ||||
|    240	    0.9529    0.9529    0.3420 | ||||
|    241	    0.9569    0.9569    0.3328 | ||||
|    242	    0.9608    0.9608    0.3232 | ||||
|    243	    0.9608    0.9608    0.3131 | ||||
|    244	    0.9647    0.9647    0.3024 | ||||
|    245	    0.9686    0.9686    0.2912 | ||||
|    246	    0.9686    0.9686    0.2792 | ||||
|    247	    0.9725    0.9725    0.2664 | ||||
|    248	    0.9765    0.9765    0.2526 | ||||
|    249	    0.9804    0.9804    0.2375 | ||||
|    250	    0.9804    0.9804    0.2208 | ||||
|    251	    0.9843    0.9843    0.2020 | ||||
|    252	    0.9882    0.9882    0.1800 | ||||
|    253	    1.0       0.0       0.0 | ||||
|    254	    1.0       1.0       0.0 | ||||
|    255	    0.0       1.000     0.0 | ||||
							
								
								
									
										115
									
								
								ccf65.f
									
									
									
									
									
								
							
							
						
						
									
										115
									
								
								ccf65.f
									
									
									
									
									
								
							| @ -1,115 +0,0 @@ | ||||
|       subroutine ccf65(ss,nhsym,sync1,ipol1,dt1,flipk,syncshort, | ||||
|      +     snr2,ipol2,dt2) | ||||
| 
 | ||||
|       parameter (NFFT=512,NH=NFFT/2) | ||||
|       real ss(4,322) | ||||
|                    !Input: half-symbol powers, 4 pol'ns | ||||
|       real s(NFFT)                     !CCF = ss*pr | ||||
|       complex cs(0:NH)                 !Complex FT of s | ||||
|       real s2(NFFT)                    !CCF = ss*pr2 | ||||
|       complex cs2(0:NH)                !Complex FT of s2 | ||||
|       real pr(NFFT)                    !JT65 pseudo-random sync pattern | ||||
|       complex cpr(0:NH)                !Complex FT of pr | ||||
|       real pr2(NFFT)                   !JT65 shorthand pattern | ||||
|       complex cpr2(0:NH)               !Complex FT of pr2 | ||||
|       real tmp1(322) | ||||
|       real tmp2(322) | ||||
|       real ccf(-27:27,4) | ||||
|       logical first | ||||
|       integer npr(126) | ||||
|       data first/.true./ | ||||
|       equivalence (s,cs),(pr,cpr),(s2,cs2),(pr2,cpr2) | ||||
|       save | ||||
| 
 | ||||
| C  The JT65 pseudo-random sync pattern: | ||||
|       data npr/ | ||||
|      + 1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0, | ||||
|      + 0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1, | ||||
|      + 0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1, | ||||
|      + 0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1, | ||||
|      + 1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1, | ||||
|      + 0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1, | ||||
|      + 1,1,1,1,1,1/ | ||||
| 
 | ||||
|       if(first) then | ||||
| C  Initialize pr, pr2; compute cpr, cpr2. | ||||
|          fac=1.0/NFFT | ||||
|          do i=1,NFFT | ||||
|             pr(i)=0. | ||||
|             k=2*mod((i-1)/8,2)-1 | ||||
|             pr2(i)=fac*k | ||||
|          enddo | ||||
|          do i=1,126 | ||||
|             j=2*i | ||||
|             pr(j)=fac*(2*npr(i)-1) | ||||
|          enddo | ||||
|          call four2a(pr,NFFT,1,-1,0) | ||||
|          call four2a(pr2,NFFT,1,-1,0) | ||||
|          first=.false. | ||||
|       endif | ||||
| 
 | ||||
| C  Look for JT65 sync pattern and shorthand square-wave pattern. | ||||
|       ccfbest=0. | ||||
|       ccfbest2=0. | ||||
|       do ip=1,4                                    !Do all four pol'ns | ||||
|          do i=1,nhsym                              ! ?? nhsym-1 ?? | ||||
|             s(i)=min(4.0,ss(ip,i)+ss(ip,i+1)) | ||||
|           enddo | ||||
|          do i=nhsym+1,NFFT                         ! ?? nhsym ?? | ||||
|             s(i)=0. | ||||
|          enddo | ||||
|          call four2a(s,NFFT,1,-1,0)                !Real-to-complex FFT | ||||
|          do i=0,NH | ||||
|             cs2(i)=cs(i)*conjg(cpr2(i))            !Mult by complex FFT of pr2 | ||||
|             cs(i)=cs(i)*conjg(cpr(i))              !Mult by complex FFT of pr | ||||
|          enddo | ||||
|          call four2a(cs,NFFT,1,1,-1)               !Complex-to-real inv-FFT | ||||
|          call four2a(cs2,NFFT,1,1,-1)              !Complex-to-real inv-FFT | ||||
| 
 | ||||
|          do lag=-27,27                             !Check for best JT65 sync | ||||
|             ccf(lag,ip)=s(lag+28)                   | ||||
|             if(abs(ccf(lag,ip)).gt.ccfbest) then | ||||
|                ccfbest=abs(ccf(lag,ip)) | ||||
|                lagpk=lag | ||||
|                ipol1=ip | ||||
|                flipk=1.0 | ||||
|                if(ccf(lag,ip).lt.0.0) flipk=-1.0 | ||||
|             endif | ||||
|          enddo | ||||
| 
 | ||||
|          do lag=-8,7                               !Check for best shorthand | ||||
|             ccf2=s2(lag+28) | ||||
|             if(ccf2.gt.ccfbest2) then | ||||
|                ccfbest2=ccf2 | ||||
|                lagpk2=lag | ||||
|                ipol2=ip | ||||
|             endif | ||||
|          enddo | ||||
| 
 | ||||
|       enddo | ||||
| 
 | ||||
| C  Find rms level on baseline of "ccfblue", for normalization. | ||||
|       sum=0. | ||||
|       do lag=-26,26 | ||||
|          if(abs(lag-lagpk).gt.1) sum=sum + ccf(lag,ipol1) | ||||
|       enddo | ||||
|       base=sum/50.0 | ||||
|       sq=0. | ||||
|       do lag=-26,26 | ||||
|          if(abs(lag-lagpk).gt.1) sq=sq + (ccf(lag,ipol1)-base)**2 | ||||
|       enddo | ||||
|       rms=sqrt(sq/49.0) | ||||
|       sync1=ccfbest/rms - 4.0 | ||||
|       dt1=2.5 + lagpk*(2048.0/11025.0) | ||||
| 
 | ||||
| C  Find base level for normalizing snr2. | ||||
|       do i=1,nhsym | ||||
|          tmp1(i)=ss(ipol2,i) | ||||
|       enddo | ||||
|       call pctile(tmp1,tmp2,nhsym,40,base) | ||||
|       snr2=0.398107*ccfbest2/base                !### empirical | ||||
|       syncshort=0.5*ccfbest2/rms - 4.0           !### better normalizer than rms? | ||||
|       dt2=2.5 + lagpk2*(2048.0/11025.0) | ||||
| 
 | ||||
|       return | ||||
|       end | ||||
							
								
								
									
										57
									
								
								char.h
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								char.h
									
									
									
									
									
								
							| @ -1,57 +0,0 @@ | ||||
| /* Include file to configure the RS codec for character symbols
 | ||||
|  * | ||||
|  * Copyright 2002, Phil Karn, KA9Q | ||||
|  * May be used under the terms of the GNU General Public License (GPL) | ||||
|  */ | ||||
| #define DTYPE unsigned char | ||||
| 
 | ||||
| /* Reed-Solomon codec control block */ | ||||
| struct rs { | ||||
|   int mm;              /* Bits per symbol */ | ||||
|   int nn;              /* Symbols per block (= (1<<mm)-1) */ | ||||
|   DTYPE *alpha_to;     /* log lookup table */ | ||||
|   DTYPE *index_of;     /* Antilog lookup table */ | ||||
|   DTYPE *genpoly;      /* Generator polynomial */ | ||||
|   int nroots;     /* Number of generator roots = number of parity symbols */ | ||||
|   int fcr;        /* First consecutive root, index form */ | ||||
|   int prim;       /* Primitive element, index form */ | ||||
|   int iprim;      /* prim-th root of 1, index form */ | ||||
|   int pad;        /* Padding bytes in shortened block */ | ||||
| }; | ||||
| 
 | ||||
| static inline int modnn(struct rs *rs,int x){ | ||||
|   while (x >= rs->nn) { | ||||
|     x -= rs->nn; | ||||
|     x = (x >> rs->mm) + (x & rs->nn); | ||||
|   } | ||||
|   return x; | ||||
| } | ||||
| #define MODNN(x) modnn(rs,x) | ||||
| 
 | ||||
| #define MM (rs->mm) | ||||
| #define NN (rs->nn) | ||||
| #define ALPHA_TO (rs->alpha_to)  | ||||
| #define INDEX_OF (rs->index_of) | ||||
| #define GENPOLY (rs->genpoly) | ||||
| #define NROOTS (rs->nroots) | ||||
| #define FCR (rs->fcr) | ||||
| #define PRIM (rs->prim) | ||||
| #define IPRIM (rs->iprim) | ||||
| #define PAD (rs->pad) | ||||
| #define A0 (NN) | ||||
| 
 | ||||
| #define ENCODE_RS encode_rs_char | ||||
| #define DECODE_RS decode_rs_char | ||||
| #define INIT_RS init_rs_char | ||||
| #define FREE_RS free_rs_char | ||||
| 
 | ||||
| void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity); | ||||
| int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras); | ||||
| void *INIT_RS(int symsize,int gfpoly,int fcr, | ||||
| 		    int prim,int nroots,int pad); | ||||
| void FREE_RS(void *p); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										31
									
								
								chkmsg.f
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								chkmsg.f
									
									
									
									
									
								
							| @ -1,31 +0,0 @@ | ||||
|       subroutine chkmsg(message,cok,nspecial,flip) | ||||
| 
 | ||||
|       character message*22,cok*3 | ||||
| 
 | ||||
|       nspecial=0 | ||||
|       flip=1.0 | ||||
|       cok="   " | ||||
| 
 | ||||
|       do i=22,1,-1 | ||||
|          if(message(i:i).ne.' ') go to 10 | ||||
|       enddo | ||||
|       i=22 | ||||
| 
 | ||||
|  10   if(i.ge.11 .and. (message(i-3:i).eq.' OOO') .or.  | ||||
|      +    (message(20:22).eq.' OO')) then | ||||
|          cok='OOO' | ||||
|          flip=-1.0 | ||||
|          if(message(20:22).eq.' OO') then | ||||
|             message=message(1:19) | ||||
|          else | ||||
|             message=message(1:i-4) | ||||
|          endif | ||||
|       endif | ||||
| 
 | ||||
| !      if(message(1:3).eq.'ATT') nspecial=1 | ||||
|       if(message(1:2).eq.'RO')  nspecial=2 | ||||
|       if(message(1:3).eq.'RRR') nspecial=3 | ||||
|       if(message(1:2).eq.'73')  nspecial=4 | ||||
| 
 | ||||
|       return | ||||
|       end | ||||
							
								
								
									
										42
									
								
								commons.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								commons.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | ||||
| #ifndef COMMONS_H | ||||
| #define COMMONS_H | ||||
| 
 | ||||
| #define NFFT 32768 | ||||
| 
 | ||||
| extern "C" { | ||||
| 
 | ||||
| extern struct {                     //This is "common/datcom/..." in Fortran
 | ||||
|   float d4[4*5760000];              //Raw I/Q data from Linrad
 | ||||
|   float ss[4*322*NFFT];             //Half-symbol spectra at 0,45,90,135 deg pol
 | ||||
|   float savg[4*NFFT];               //Avg spectra at 0,45,90,135 deg pol
 | ||||
|   double fcenter;                   //Center freq from Linrad (MHz)
 | ||||
|   int nutc;                         //UTC as integer, HHMM
 | ||||
|   int idphi;                        //Phase correction for Y pol'n, degrees
 | ||||
|   int mousedf;                      //User-selected DF
 | ||||
|   int mousefqso;                    //User-selected QSO freq (kHz)
 | ||||
|   int nagain;                       //1 ==> decode only at fQSO +/- Tol
 | ||||
|   int ndepth;                       //How much hinted decoding to do?
 | ||||
|   int ndiskdat;                     //1 ==> data read from *.tf2 or *.iq file
 | ||||
|   int neme;                         //Hinted decoding tries only for EME calls
 | ||||
|   int newdat;                       //1 ==> new data, must do long FFT
 | ||||
|   int nfa;                          //Low decode limit (kHz)
 | ||||
|   int nfb;                          //High decode limit (kHz)
 | ||||
|   int nfcal;                        //Frequency correction, for calibration (Hz)
 | ||||
|   int nfshift;                      //Shift of displayed center freq (kHz)
 | ||||
|   int mcall3;                       //1 ==> CALL3.TXT has been modified
 | ||||
|   int ntimeout;                     //Max for timeouts in Messages and BandMap
 | ||||
|   int ntol;                         //+/- decoding range around fQSO (Hz)
 | ||||
|   int nxant;                        //1 ==> add 45 deg to measured pol angle
 | ||||
|   int map65RxLog;                   //Flags to control log files
 | ||||
|   int nfsample;                     //Input sample rate
 | ||||
|   int nxpol;                        //1 if using xpol antennas, 0 otherwise
 | ||||
|   int mode65;                       //JT65 sub-mode: A=1, B=2, C=4
 | ||||
|   char mycall[12]; | ||||
|   char mygrid[6]; | ||||
|   char hiscall[12]; | ||||
|   char hisgrid[6]; | ||||
|   char datetime[20]; | ||||
| } datcom_; | ||||
| } | ||||
| 
 | ||||
| #endif // COMMONS_H
 | ||||
							
								
								
									
										220
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										220
									
								
								configure.ac
									
									
									
									
									
								
							| @ -1,220 +0,0 @@ | ||||
| dnl $Id$ | ||||
| dnl Process this file with autoconf to produce a configure script. | ||||
| 
 | ||||
| dnl AC_PREREQ(2.61) | ||||
| 
 | ||||
| dnl Sneaky way to get an Id tag into the configure script | ||||
| AC_COPYRIGHT([$Id$]) | ||||
| 
 | ||||
| AC_INIT([map65],[0.9]) | ||||
| 
 | ||||
| fail=0 | ||||
| 
 | ||||
| AC_PREFIX_DEFAULT(/usr/local/) | ||||
| 
 | ||||
| OLD_CFLAGS="$CFLAGS" | ||||
| dnl Checks for programs. | ||||
| AC_PROG_CC | ||||
| AC_LANG(C) | ||||
| AC_PROG_F77 | ||||
| 
 | ||||
| dnl Make sure autoconf doesn't interfere with cflags -jmallett | ||||
| CFLAGS="$OLD_CFLAGS" | ||||
| 
 | ||||
| dnl Lets guess at some likely places for extra libs/includes XXX -db | ||||
| CPPFLAGS="-I/usr/local/include ${CPPFLAGS}" | ||||
| LDFLAGS="-L/usr/local/lib ${LDFLAGS}" | ||||
| LIBS=" -lpthread ${LIBS}" | ||||
| FFLAGS_GFORTRAN="${FFLAGS} -fno-range-check -ffixed-line-length-none\ | ||||
| 			-Wall -fbounds-check -fno-second-underscore -fPIC" | ||||
| FFLAGS_G95="${FFLAGS} -Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC" | ||||
| #-Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC | ||||
| 
 | ||||
| AX_CHECK_GFORTRAN | ||||
| AX_CHECK_PORTAUDIO | ||||
| 
 | ||||
| dnl If we support -g, use it! | ||||
| if test "$ac_cv_prog_cc_g" = yes; then | ||||
| 		CFLAGS="$CFLAGS -g" | ||||
| fi | ||||
| 
 | ||||
| dnl jdc -- If CFLAGS is defined, best use it everywhere... | ||||
| dnl NOTE: jv says it must be added to the *END*, because things like | ||||
| dnl "gcc -O9 -O2" will result in -O2 getting preference.  How stupid. | ||||
| if test ! -z "$CFLAGS"; then | ||||
| 	CFLAGS="$CFLAGS $CFLAGS" | ||||
| fi | ||||
| 
 | ||||
| 
 | ||||
| AC_ISC_POSIX | ||||
| AC_C_INLINE | ||||
| AC_PROG_GCC_TRADITIONAL | ||||
| AC_PROG_MAKE_SET | ||||
| AC_PROG_INSTALL | ||||
| AC_PATH_PROG(RM, rm) | ||||
| AC_PATH_PROG(CP, cp) | ||||
| AC_PATH_PROG(MV, mv) | ||||
| AC_PATH_PROG(LN, ln) | ||||
| AC_PATH_PROG(SED, sed) | ||||
| AC_PATH_PROG(AR, ar) | ||||
| AC_PATH_PROG(LD, ld) | ||||
| AC_PATH_PROG(TEST, [test], [test]) | ||||
| AC_PATH_PROG(PYTHON, python) | ||||
| AC_PATH_PROG(F2PY, f2py) | ||||
| AC_MSG_CHECKING([OS]) | ||||
| OS=`uname` | ||||
| AC_SUBST(OS, "${OS}") | ||||
| 
 | ||||
| dnl Checks for header files. | ||||
| 
 | ||||
| AC_HEADER_STDC | ||||
| 
 | ||||
| AC_CHECK_HEADERS([inttypes.h stdint.h sys/resource.h sys/param.h errno.h \ | ||||
| sys/syslog.h stddef.h libgen.h sys/wait.h wait.h stdio.h termios.h \ | ||||
| sys/resource.h linux/ppdev.h dev/ppbus/ppi.h sys/stat.h fcntl.h sys/ioctl.h ]) | ||||
| 
 | ||||
| AC_HEADER_TIME | ||||
| 
 | ||||
| AC_CHECK_HEADER([fftw3.h], [HAS_FFTW3_H=1], [HAS_FFTW3_H=0]) | ||||
| AC_CHECK_HEADER([samplerate.h], [HAS_SAMPLERATE_H=1], [HAS_SAMPLERATE_H=0]) | ||||
| 
 | ||||
| dnl See whether we can include both string.h and strings.h. | ||||
| AC_CACHE_CHECK([whether string.h and strings.h may both be included], | ||||
| gcc_cv_header_string, | ||||
| [ | ||||
| 	AC_COMPILE_IFELSE( | ||||
| 	[#include <string.h> | ||||
| 	#include <strings.h>],  | ||||
| 	[gcc_cv_header_string=yes], | ||||
| 	[gcc_cv_header_string=no]) | ||||
| ]) | ||||
| 
 | ||||
| if test "$gcc_cv_header_string" = "yes"; then | ||||
| 	AC_DEFINE(STRING_WITH_STRINGS, 1, [Define to 1 if string.h may be included along with strings.h]) | ||||
| fi | ||||
| 
 | ||||
| dnl check for a fortran shim entry point | ||||
| AC_CHECK_LIB(fftw3f, sfftw_destroy_plan_, \ | ||||
| 	[HAS_FFTW3FLIBS=1], [HAS_FFTW3FLIBS=0]) | ||||
| 
 | ||||
| dnl Check for stdarg.h - if we can't find it, halt configure | ||||
| AC_CHECK_HEADER(stdarg.h, , [AC_MSG_ERROR([** stdarg.h could not be found - wsjt will not compile without it **])]) | ||||
| 
 | ||||
| dnl Debug-related options | ||||
| dnl ===================== | ||||
| 
 | ||||
| AC_ARG_ENABLE(clobber, | ||||
| AC_HELP_STRING([--enable-clobber], [Don't preserve old binaries on make install]), | ||||
| [clobber=$enableval], [clobber=no]) | ||||
| 
 | ||||
| if test "$clobber" = yes; then | ||||
| 	AC_SUBST(CLOBBER, yes) | ||||
| fi | ||||
| 
 | ||||
| AC_ARG_ENABLE(assert, | ||||
| AC_HELP_STRING([--enable-assert],[Enable assert().]), | ||||
| [assert=$enableval], [assert=no]) | ||||
| 
 | ||||
| if test "$assert" = no; then | ||||
| 	AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.]) | ||||
| fi | ||||
| 
 | ||||
| if test "$prefix" = "NONE"; then  | ||||
| 	prefix=${ac_default_prefix} | ||||
| else | ||||
| 
 | ||||
| dnl Don't get bitten by Cygwin's stupidity if the user specified | ||||
| dnl a custom prefix with a trailing slash | ||||
| 
 | ||||
| 	prefix=`echo ${ac_default_prefix} | sed 's/\/$//'` | ||||
| fi | ||||
| 
 | ||||
| dnl sanity tests. | ||||
| dnl ============= | ||||
| 
 | ||||
| if test -z $FC ; then | ||||
| 	fail=1 | ||||
| 	echo "You need g95 or gfortran to compile this program!" | ||||
| fi | ||||
| 
 | ||||
| if test $HAS_FFTW3_H -eq 0; then | ||||
| 	fail=1 | ||||
| 	echo "You need to install the fftw3 libraries" | ||||
| fi | ||||
| 
 | ||||
| if test $HAS_SAMPLERATE_H -eq 0; then | ||||
| 	fail=1 | ||||
| 	echo "You need to install the samplerate library" | ||||
| else | ||||
|         AC_DEFINE(HAS_SAMPLERATE_H, 1, ) | ||||
| 	LIBS="${LIBS} -lsamplerate" | ||||
| fi | ||||
| 
 | ||||
| if test $HAS_PORTAUDIO -eq 1; then | ||||
| 	AC_DEFINE(HAS_PORTAUDIO, 1, ) | ||||
| 	AC_DEFINE(HAS_PORTAUDIO_H, 1, ) | ||||
| 	AC_DEFINE(HAS_PORTAUDIO_LIB, 1, ) | ||||
| else | ||||
| 	fail=1 | ||||
| 	echo "This program needs portaudio v19 to compile." | ||||
| 	echo "Please use --with-portaudio-include-dir= and" | ||||
| 	echo " --with-portaudio-lib-dir= to set the paths." | ||||
| fi | ||||
| 
 | ||||
| if test $HAS_FFTW3_H -eq 1; then | ||||
| 	AC_DEFINE(HAS_FFTW3_H, 1, ) | ||||
| else | ||||
| 	fail=1 | ||||
| 	echo "You are missing the fftw3.h include file" | ||||
| fi | ||||
| 
 | ||||
| if test $HAS_FFTW3FLIBS -eq 1; then | ||||
| 	LIBS="${LIBS} -lfftw3f" | ||||
| 	AC_DEFINE(HAS_FFTW3FLIBS, 1, ) | ||||
| else | ||||
| 	fail=1 | ||||
| 	echo "You are missing the fortran shim in libfftw3." | ||||
| fi | ||||
| 
 | ||||
| if test "$F2PY" = ""; then | ||||
| 	echo "You are missing f2py, trying local copy." | ||||
| 	F2PY="python f2py.py";	 | ||||
| fi | ||||
| 
 | ||||
| dnl  | ||||
| dnl | ||||
| dnl If fail a pre-requisite then fail | ||||
| dnl | ||||
| 
 | ||||
| if test $fail -eq 1; then | ||||
| 	AC_MSG_ERROR([Please check error messages and install missing packages.]) | ||||
| fi | ||||
| 
 | ||||
| AC_SUBST(PREFIX, "${prefix}") | ||||
| AC_SUBST(CPPFLAGS, "${CPPFLAGS}") | ||||
| AC_SUBST(LDFLAGS, "${LDFLAGS}") | ||||
| AC_SUBST(LIBS, "${LIBS}") | ||||
| AC_SUBST(CFLAGS) | ||||
| AC_SUBST(FFLAGS) | ||||
| AC_SUBST(F2PY, "${F2PY}") | ||||
| AC_CONFIG_FILES(Makefile) | ||||
| AC_OUTPUT | ||||
| 
 | ||||
| dnl do summary | ||||
| 
 | ||||
| echo | ||||
| echo | ||||
| 
 | ||||
| if test $g95 = "yes"; then | ||||
| 	echo "Using g95 as fortran compiler."; | ||||
| elif test $gfortran = "yes"; then | ||||
| 	echo "Using gfortran as fortran compiler."; | ||||
| fi | ||||
| 
 | ||||
| echo | ||||
| echo "Compiling $PACKAGE_NAME $PACKAGE_VERSION" | ||||
| echo | ||||
| 
 | ||||
| echo "Installing into: $prefix" | ||||
| 
 | ||||
| echo | ||||
| @ -1,5 +0,0 @@ | ||||
| parameter (NSMAX=60*96000)          !Samples per 60 s file | ||||
| real*4 dd                           !92 MB: raw data from Linrad timf2 | ||||
| character*80 fname80 | ||||
| common/datcom/dd(4,NSMAX,2),nutc,newdat2,kbuf,kxp,kk,kkdone,nlost,   & | ||||
|      nlen,fname80 | ||||
							
								
								
									
										5
									
								
								db.f
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								db.f
									
									
									
									
									
								
							| @ -1,5 +0,0 @@ | ||||
| 	real function db(x) | ||||
| 	db=-99.0 | ||||
| 	if(x.gt.1.259e-10) db=10.0*log10(x) | ||||
| 	return | ||||
| 	end | ||||
							
								
								
									
										87
									
								
								decode1.f90
									
									
									
									
									
								
							
							
						
						
									
										87
									
								
								decode1.f90
									
									
									
									
									
								
							| @ -1,87 +0,0 @@ | ||||
| subroutine decode1(iarg) | ||||
| 
 | ||||
| ! Get data and parameters from gcom, then call the decoders when needed. | ||||
| ! This routine runs in a background thread and will never return. | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   use dflib | ||||
| #endif | ||||
| 
 | ||||
|   character sending0*28,mode0*6,cshort*11 | ||||
|   integer sendingsh0 | ||||
| 
 | ||||
|   include 'datcom.f90' | ||||
|   include 'gcom1.f90' | ||||
|   include 'gcom2.f90' | ||||
|   include 'gcom3.f90' | ||||
|   include 'gcom4.f90' | ||||
|   data kbuf0/0/,ns00/-999/ | ||||
|   data sending0/'                      '/ | ||||
|   save | ||||
| 
 | ||||
|   kkdone=-99 | ||||
|   ns0=999999 | ||||
|   newdat2=0 | ||||
|   kbuf=1 | ||||
| 
 | ||||
| 10 continue | ||||
|   if(newdat2.gt.0) then | ||||
|      call getfile2(fname80,nlen) | ||||
|      newdat2=0 | ||||
|      kbuf=1 | ||||
|      kk=NSMAX | ||||
|      kkdone=0 | ||||
|      newdat=1 | ||||
|   endif | ||||
| 
 | ||||
|   if(kbuf.ne.kbuf0) kkdone=0 | ||||
|   kbuf0=kbuf | ||||
|   kkk=kk | ||||
|   if(kbuf.eq.2) kkk=kk-5760000 | ||||
|   n=Tsec | ||||
| 
 | ||||
|   if((ndiskdat.eq.1 .or. ndecoding.eq.0) .and. ((kkk-kkdone).gt.32768)) then | ||||
|      call symspec(dd,kbuf,kk,kkdone,nutc,newdat) | ||||
|      call sleep_msec(10) | ||||
|   endif | ||||
| 
 | ||||
|   if(ndecoding.gt.0 .and. mode(1:4).eq.'JT65') then | ||||
|      ndecdone=0 | ||||
|      call map65a(newdat) | ||||
|      if(mousebutton.eq.0) ndecoding0=ndecoding | ||||
|      ndecoding=0 | ||||
|   endif | ||||
| 
 | ||||
|   if(ns0.lt.0) then | ||||
|      rewind 21 | ||||
|      ns0=999999 | ||||
|   endif | ||||
|   if(n.lt.ns0 .and. utcdate(1:1).eq.'2') then | ||||
|      call cs_lock('decode1a') | ||||
|      write(21,1001) utcdate(:11) | ||||
| 1001 format(/'UTC Date: ',a11/'---------------------') | ||||
|      ns0=n | ||||
|      call cs_unlock | ||||
|   endif | ||||
| 
 | ||||
|   if(transmitting.eq.1 .and. (sending.ne.sending0 .or.       & | ||||
|        sendingsh.ne.sendingsh0 .or. mode.ne.mode0)) then | ||||
|      ih=n/3600 | ||||
|      im=mod(n/60,60) | ||||
|      is=mod(n,60) | ||||
|      cshort='           ' | ||||
|      if(sendingsh.eq.1) cshort='(Shorthand)' | ||||
|      call cs_lock('decode1b') | ||||
|      write(21,1010) ih,im,is,mode,sending,cshort | ||||
| 1010 format(3i2.2,'  Transmitting: ',a6,2x,a28,2x,a11) | ||||
|      call flushqqq(21) | ||||
|      call cs_unlock | ||||
|      sending0=sending | ||||
|      sendingsh0=sendingsh | ||||
|      mode0=mode | ||||
|   endif | ||||
| 
 | ||||
|   call sleep_msec(100)                  !### was 100 | ||||
|   go to 10 | ||||
| 
 | ||||
| end subroutine decode1 | ||||
							
								
								
									
										110
									
								
								decode1a.f
									
									
									
									
									
								
							
							
						
						
									
										110
									
								
								decode1a.f
									
									
									
									
									
								
							| @ -1,110 +0,0 @@ | ||||
|       subroutine decode1a(dd,newdat,freq,nflip, | ||||
|      +         mycall,hiscall,hisgrid,neme,ndepth,nqd,dphi,ndphi, | ||||
|      +         ipol,sync2,a,dt,pol,nkv,nhist,qual,decoded) | ||||
| 
 | ||||
| C  Apply AFC corrections to a candidate JT65 signal, and then try | ||||
| C  to decode it. | ||||
| 
 | ||||
|       parameter (NFFT1=77760,NFFT2=2430) | ||||
|       parameter (NMAX=60*96000)          !Samples per 60 s | ||||
|       real*4  dd(4,NMAX)                 !92 MB: raw data from Linrad timf2 | ||||
|       complex c2x(NMAX/4), c2y(NMAX/4)   !After 1/4 filter and downsample | ||||
|       complex c3x(NMAX/16),c3y(NMAX/16)  !After 1/16 filter and downsample | ||||
|       complex c4x(NMAX/64),c4y(NMAX/64)  !After 1/64 filter and downsample | ||||
|       complex cx(NMAX/64), cy(NMAX/64)   !Data at 1378.125 samples/s | ||||
|       complex c5x(NMAX/256),c5y(NMAX/256),c5y0(NMAX/256) | ||||
|       complex c5a(256),    c5b(256) | ||||
|       complex z | ||||
| 
 | ||||
|       real s2(256,126) | ||||
|       real a(5) | ||||
|       real*8 samratio | ||||
|       logical first | ||||
|       character decoded*22 | ||||
|       character mycall*12,hiscall*12,hisgrid*6 | ||||
|       data first/.true./,jjjmin/1000/,jjjmax/-1000/ | ||||
|       save | ||||
| 
 | ||||
| C  Mix sync tone to baseband, low-pass filter, and decimate by 64 | ||||
|       dt00=dt | ||||
| C  If freq=125.0 kHz, f0=48000 Hz. | ||||
|       f0=1000*(freq-77.0)                  !Freq of sync tone (0-96000 Hz) | ||||
|       call filbig(dd,NMAX,f0,newdat,cx,cy,n5) | ||||
|       joff=0 | ||||
|       sqa=0. | ||||
|       sqb=0. | ||||
|       do i=1,n5 | ||||
|          sqa=sqa + real(cx(i))**2 + aimag(cx(i))**2 | ||||
|          sqb=sqb + real(cy(i))**2 + aimag(cy(i))**2 | ||||
|       enddo | ||||
|       sqa=sqa/n5 | ||||
|       sqb=sqb/n5 | ||||
| 
 | ||||
| C  Find best DF, f1, f2, DT, and pol | ||||
| 
 | ||||
| !      a(5)=dt00 | ||||
| !      fsample=1378.125 | ||||
| !      i0=nint((a(5)+0.5)*fsample) | ||||
| !      if(i0.lt.1) i0=1 | ||||
| !      nz=n5+1-i0 | ||||
| !      call afc65b(cx(i0),cy(i0),nz,fsample,nflip,ipol,a,dt, | ||||
| !     +    ccfbest,dtbest) | ||||
| 
 | ||||
|       call fil6521(cx,n5,c5x,n6) | ||||
|       call fil6521(cy,n5,c5y0,n6) | ||||
| 
 | ||||
| !  Adjust for cable length difference: | ||||
|       z=cmplx(cos(dphi),sin(dphi)) | ||||
|       do i=1,n6 | ||||
|          c5y(i)=z*c5y0(i) | ||||
|       enddo | ||||
| 
 | ||||
|       fsample=1378.125/4. | ||||
|       a(5)=dt00 | ||||
|       i0=nint((a(5)+0.5)*fsample) - 2 | ||||
|       if(i0.lt.1) i0=1 | ||||
|       nz=n6+1-i0 | ||||
| 
 | ||||
|       call afc65b(c5x(i0),c5y(i0),nz,fsample,nflip,ipol,a,dt, | ||||
|      +     ccfbest,dtbest) | ||||
| 
 | ||||
|       pol=a(4)/57.2957795 | ||||
|       aa=cos(pol) | ||||
|       bb=sin(pol) | ||||
|       sq0=aa*aa*sqa + bb*bb*sqb | ||||
|       sync2=3.7*ccfbest/sq0 | ||||
| 
 | ||||
| C  Apply AFC corrections to the time-domain signal | ||||
|       call twkfreq(cx,cy,n5,a) | ||||
| 
 | ||||
| C  Compute spectrum at best polarization for each half symbol. | ||||
| C  Adding or subtracting a small number (e.g., 5) to j may make it decode. | ||||
|       nsym=126 | ||||
|       nfft=256 | ||||
|       j=(dt00+dtbest+2.685)*1378.125 + joff | ||||
|       if(j.lt.0) j=0 | ||||
|       do k=1,nsym | ||||
|          do i=1,nfft | ||||
|             j=j+1 | ||||
|             c5a(i)=aa*cx(j) + bb*cy(j) | ||||
|          enddo | ||||
|          call four2a(c5a,nfft,1,1,1) | ||||
|          do i=1,nfft | ||||
|             j=j+1 | ||||
|             c5b(i)=aa*cx(j) + bb*cy(j) | ||||
|          enddo | ||||
|          call four2a(c5b,nfft,1,1,1) | ||||
| 
 | ||||
|          do i=1,256 | ||||
|             s2(i,k)=real(c5a(i))**2 + aimag(c5a(i))**2 + | ||||
|      +           real(c5b(i))**2 + aimag(c5b(i))**2 | ||||
|          enddo | ||||
|       enddo | ||||
| 
 | ||||
|       flip=nflip | ||||
|       call decode65b(s2,flip,mycall,hiscall,hisgrid,neme,ndepth, | ||||
|      +    nqd,nkv,nhist,qual,decoded) | ||||
|       dt=dt00 + dtbest | ||||
| 
 | ||||
|       return | ||||
|       end | ||||
							
								
								
									
										186
									
								
								deep65.f
									
									
									
									
									
								
							
							
						
						
									
										186
									
								
								deep65.f
									
									
									
									
									
								
							| @ -1,186 +0,0 @@ | ||||
|       subroutine deep65(s3,mode65,neme,flip,mycall,hiscall, | ||||
|      +  hisgrid,decoded,qual) | ||||
| 
 | ||||
|       parameter (MAXCALLS=7000,MAXRPT=63) | ||||
|       real s3(64,63) | ||||
|       character callsign*12,grid*4,message*22,hisgrid*6,c*1,ceme*3 | ||||
|       character*12 mycall,hiscall | ||||
|       character mycall0*12,hiscall0*12,hisgrid0*6 | ||||
|       character*22 decoded | ||||
|       character*22 testmsg(2*MAXCALLS + 2 + MAXRPT) | ||||
|       character*15 callgrid(MAXCALLS) | ||||
|       character*180 line | ||||
|       character*4 rpt(MAXRPT) | ||||
|       integer ncode(63,2*MAXCALLS + 2 + MAXRPT) | ||||
|       real pp(2*MAXCALLS + 2 + MAXRPT) | ||||
|       common/mrscom/ mrs(63),mrs2(63) | ||||
|       common/c3com/ mcall3a | ||||
| 
 | ||||
|       data neme0/-99/ | ||||
|       data rpt/'-01','-02','-03','-04','-05', | ||||
|      +         '-06','-07','-08','-09','-10', | ||||
|      +         '-11','-12','-13','-14','-15', | ||||
|      +         '-16','-17','-18','-19','-20', | ||||
|      +         '-21','-22','-23','-24','-25', | ||||
|      +         '-26','-27','-28','-29','-30', | ||||
|      +         'R-01','R-02','R-03','R-04','R-05', | ||||
|      +         'R-06','R-07','R-08','R-09','R-10', | ||||
|      +         'R-11','R-12','R-13','R-14','R-15', | ||||
|      +         'R-16','R-17','R-18','R-19','R-20', | ||||
|      +         'R-21','R-22','R-23','R-24','R-25', | ||||
|      +         'R-26','R-27','R-28','R-29','R-30', | ||||
|      +         'RO','RRR','73'/ | ||||
|       save | ||||
| 
 | ||||
|       if(mycall.eq.mycall0 .and. hiscall.eq.hiscall0 .and.  | ||||
|      +   hisgrid.eq.hisgrid0 .and. mcall3a.eq.0 .and. | ||||
|      +   neme.eq.neme0) go to 30 | ||||
| 
 | ||||
|       mcall3a=0 | ||||
|       call cs_lock('deep65a') | ||||
|       rewind 23 | ||||
|       k=0 | ||||
|       icall=0 | ||||
|       do n=1,MAXCALLS | ||||
|          if(n.eq.1) then | ||||
|             callsign=hiscall | ||||
|             do i=4,12 | ||||
|                if(ichar(callsign(i:i)).eq.0) callsign(i:i)=' ' | ||||
|             enddo | ||||
|             grid=hisgrid(1:4) | ||||
|             if(ichar(grid(3:3)).eq.0) grid(3:3)=' ' | ||||
|             if(ichar(grid(4:4)).eq.0) grid(4:4)=' ' | ||||
|          else | ||||
|             read(23,1002,end=20) line | ||||
|  1002       format (A80) | ||||
|             if(line(1:4).eq.'ZZZZ') go to 20 | ||||
|             if(line(1:2).eq.'//') go to 10 | ||||
|             i1=index(line,',') | ||||
|             if(i1.lt.4) go to 10 | ||||
|             i2=index(line(i1+1:),',') | ||||
|             if(i2.lt.5) go to 10 | ||||
|             i2=i2+i1 | ||||
|             i3=index(line(i2+1:),',') | ||||
|             if(i3.lt.1) i3=index(line(i2+1:),' ') | ||||
|             i3=i2+i3 | ||||
|             callsign=line(1:i1-1) | ||||
|             grid=line(i1+1:i2-1) | ||||
|             ceme=line(i2+1:i3-1) | ||||
|             if(neme.eq.1 .and. ceme.ne.'EME') go to 10 | ||||
|          endif | ||||
| 
 | ||||
|          icall=icall+1 | ||||
|          j1=index(mycall,' ') - 1 | ||||
|          if(j1.le.-1) j1=12 | ||||
|          if(j1.lt.3) j1=6 | ||||
|          j2=index(callsign,' ') - 1 | ||||
|          if(j2.le.-1) j2=12 | ||||
|          if(j2.lt.3) j2=6 | ||||
|          j3=index(mycall,'/')                 ! j3>0 means compound mycall | ||||
|          j4=index(callsign,'/')               ! j4>0 means compound hiscall | ||||
|          callgrid(icall)=callsign(1:j2) | ||||
| 
 | ||||
|          mz=1 | ||||
| ! Allow MyCall + HisCall + rpt (?) | ||||
|          if(n.eq.1 .and. j3.lt.1 .and. j4.lt.1 .and. | ||||
|      +     flip.gt.0.0 .and. callsign(1:6).ne.'      ') mz=MAXRPT+1 | ||||
|          do m=1,mz | ||||
|             if(m.gt.1) grid=rpt(m-1) | ||||
|             if(j3.lt.1 .and.j4.lt.1)  | ||||
|      +         callgrid(icall)=callsign(1:j2)//' '//grid | ||||
|             message=mycall(1:j1)//' '//callgrid(icall) | ||||
|             k=k+1 | ||||
|             testmsg(k)=message | ||||
|             call encode65(message,ncode(1,k)) | ||||
| 
 | ||||
|             if(n.ge.2) then | ||||
| C  Insert CQ message | ||||
|                if(j4.lt.1) callgrid(icall)=callsign(1:j2)//' '//grid | ||||
|                message='CQ '//callgrid(icall) | ||||
|                k=k+1 | ||||
|                testmsg(k)=message | ||||
|                call encode65(message,ncode(1,k)) | ||||
|             endif | ||||
|          enddo | ||||
|  10      continue | ||||
|       enddo | ||||
| 
 | ||||
|  20   continue | ||||
|       call cs_unlock | ||||
|       ntot=k | ||||
|       neme0=neme | ||||
| 
 | ||||
|  30   mycall0=mycall | ||||
|       hiscall0=hiscall | ||||
|       hisgrid0=hisgrid | ||||
|       modified0=modified | ||||
|       ref0=0. | ||||
|       do j=1,63 | ||||
|          ref0=ref0 + s3(mrs(j),j) | ||||
|       enddo | ||||
| 
 | ||||
|       p1=-1.e30 | ||||
|       p2=-1.e30 | ||||
|       do k=1,ntot | ||||
|          pp(k)=0. | ||||
| ! Test all messages if flip=+1; skip the CQ messages if flip=-1. | ||||
|          if(flip.gt.0.0 .or. testmsg(k)(1:3).ne.'CQ ') then | ||||
|             sum=0. | ||||
|             ref=ref0 | ||||
|             do j=1,63 | ||||
|                i=ncode(j,k)+1 | ||||
|                sum=sum + s3(i,j) | ||||
|                if(i.eq.mrs(j)) then | ||||
|                   ref=ref - s3(i,j) + s3(mrs2(j),j) | ||||
|                endif | ||||
|             enddo | ||||
|             p=sum/ref | ||||
|             pp(k)=p | ||||
|             if(p.gt.p1) then | ||||
|                p1=p | ||||
|                ip1=k | ||||
|             endif | ||||
|          endif | ||||
|       enddo | ||||
| 
 | ||||
|       do i=1,ntot | ||||
|          if(pp(i).gt.p2 .and. pp(i).ne.p1) p2=pp(i) | ||||
|       enddo | ||||
| 
 | ||||
| C  ### DO NOT REMOVE ###  | ||||
|       call cs_lock('deep65b') | ||||
|       rewind 77 | ||||
|       write(77,*) p1,p2 | ||||
|       call cs_unlock | ||||
| 
 | ||||
| C  ### Works OK without it (in both Windows and Linux) if compiled  | ||||
| C  ### without optimization.  However, in Windows this is a colossal  | ||||
| C  ### pain because of the way McMillan Installer wants to run the  | ||||
| C  ### compile step. | ||||
| 
 | ||||
|       if(mode65.eq.1) bias=max(1.12*p2,0.335) | ||||
|       if(mode65.eq.2) bias=max(1.08*p2,0.405) | ||||
|       if(mode65.ge.4) bias=max(1.04*p2,0.505) | ||||
| 
 | ||||
|       if(p2.eq.p1 .and. p1.ne.-1.e30) stop 'Error in deep65' | ||||
|       qual=100.0*(p1-bias) | ||||
| 
 | ||||
|       decoded='                      ' | ||||
|       c=' ' | ||||
| 
 | ||||
|       if(qual.gt.1.0) then | ||||
|          if(qual.lt.6.0) c='?' | ||||
|          decoded=testmsg(ip1) | ||||
|       else | ||||
|          qual=0. | ||||
|       endif | ||||
|       decoded(22:22)=c | ||||
| 
 | ||||
| C  Make sure everything is upper case. | ||||
|       do i=1,22 | ||||
|          if(decoded(i:i).ge.'a' .and. decoded(i:i).le.'z')  | ||||
|      +     decoded(i:i)=char(ichar(decoded(i:i))-32) | ||||
|       enddo | ||||
| 
 | ||||
|       return | ||||
|       end | ||||
							
								
								
									
										29
									
								
								detect.f
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								detect.f
									
									
									
									
									
								
							| @ -1,29 +0,0 @@ | ||||
|       subroutine detect(data,npts,f,y) | ||||
| 
 | ||||
| C  Compute powers at the tone frequencies using 1-sample steps. | ||||
| 
 | ||||
|       parameter (NZ=11025,NSPD=25) | ||||
|       real data(npts) | ||||
|       real y(npts) | ||||
|       complex c(NZ) | ||||
|       complex csum | ||||
|       data twopi/6.283185307/ | ||||
| 
 | ||||
|       dpha=twopi*f/11025.0 | ||||
|       do i=1,npts | ||||
|          c(i)=data(i)*cmplx(cos(dpha*i),-sin(dpha*i)) | ||||
|       enddo | ||||
| 
 | ||||
|       csum=0. | ||||
|       do i=1,NSPD | ||||
|          csum=csum+c(i) | ||||
|       enddo | ||||
|           | ||||
|       y(1)=real(csum)**2 + aimag(csum)**2 | ||||
|       do i=2,npts-(NSPD-1) | ||||
|          csum=csum-c(i-1)+c(i+NSPD-1) | ||||
|          y(i)=real(csum)**2 + aimag(csum)**2 | ||||
|       enddo | ||||
| 
 | ||||
|       return | ||||
|       end | ||||
							
								
								
									
										325
									
								
								devsetup.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										325
									
								
								devsetup.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,325 @@ | ||||
| #include "devsetup.h" | ||||
| #include "mainwindow.h" | ||||
| #include <QDebug> | ||||
| #include <portaudio.h> | ||||
| 
 | ||||
| #define MAXDEVICES 100 | ||||
| 
 | ||||
| //----------------------------------------------------------- DevSetup()
 | ||||
| DevSetup::DevSetup(QWidget *parent) :	QDialog(parent) | ||||
| { | ||||
|   ui.setupUi(this);	//setup the dialog form
 | ||||
|   m_restartSoundIn=false; | ||||
|   m_restartSoundOut=false; | ||||
| } | ||||
| 
 | ||||
| DevSetup::~DevSetup() | ||||
| { | ||||
| } | ||||
| 
 | ||||
| void DevSetup::initDlg() | ||||
| { | ||||
|   int k,id; | ||||
|   int valid_devices=0; | ||||
|   int minChan[MAXDEVICES]; | ||||
|   int maxChan[MAXDEVICES]; | ||||
|   int minSpeed[MAXDEVICES]; | ||||
|   int maxSpeed[MAXDEVICES]; | ||||
|   char hostAPI_DeviceName[MAXDEVICES][50]; | ||||
|   char s[60]; | ||||
|   int numDevices=Pa_GetDeviceCount(); | ||||
|   getDev(&numDevices,hostAPI_DeviceName,minChan,maxChan,minSpeed,maxSpeed); | ||||
|   k=0; | ||||
|   for(id=0; id<numDevices; id++)  { | ||||
|     if(96000 >= minSpeed[id] && 96000 <= maxSpeed[id]) { | ||||
|       m_inDevList[k]=id; | ||||
|       k++; | ||||
|       sprintf(s,"%2d   %d  %-49s",id,maxChan[id],hostAPI_DeviceName[id]); | ||||
|       QString t(s); | ||||
|       ui.comboBoxSndIn->addItem(t); | ||||
|       valid_devices++; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   const PaDeviceInfo *pdi; | ||||
|   int nchout; | ||||
|   char *p,*p1; | ||||
|   char p2[50]; | ||||
|   char pa_device_name[128]; | ||||
|   char pa_device_hostapi[128]; | ||||
| 
 | ||||
|   k=0; | ||||
|   for(id=0; id<numDevices; id++ )  { | ||||
|     pdi=Pa_GetDeviceInfo(id); | ||||
|     nchout=pdi->maxOutputChannels; | ||||
|     if(nchout>=2) { | ||||
|       m_outDevList[k]=id; | ||||
|       k++; | ||||
|       sprintf((char*)(pa_device_name),"%s",pdi->name); | ||||
|       sprintf((char*)(pa_device_hostapi),"%s", | ||||
|               Pa_GetHostApiInfo(pdi->hostApi)->name); | ||||
| 
 | ||||
|       p1=(char*)""; | ||||
|       p=strstr(pa_device_hostapi,"MME"); | ||||
|       if(p!=NULL) p1=(char*)"MME"; | ||||
|       p=strstr(pa_device_hostapi,"Direct"); | ||||
|       if(p!=NULL) p1=(char*)"DirectX"; | ||||
|       p=strstr(pa_device_hostapi,"WASAPI"); | ||||
|       if(p!=NULL) p1=(char*)"WASAPI"; | ||||
|       p=strstr(pa_device_hostapi,"ASIO"); | ||||
|       if(p!=NULL) p1=(char*)"ASIO"; | ||||
|       p=strstr(pa_device_hostapi,"WDM-KS"); | ||||
|       if(p!=NULL) p1=(char*)"WDM-KS"; | ||||
| 
 | ||||
|       sprintf(p2,"%2d   %-8s  %-39s",id,p1,pa_device_name); | ||||
|       QString t(p2); | ||||
|       ui.comboBoxSndOut->addItem(t); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   ui.myCallEntry->setText(m_myCall); | ||||
|   ui.myGridEntry->setText(m_myGrid); | ||||
|   ui.idIntSpinBox->setValue(m_idInt); | ||||
|   ui.pttComboBox->setCurrentIndex(m_pttPort); | ||||
|   ui.astroFont->setValue(m_astroFont); | ||||
|   ui.cbXpol->setChecked(m_xpol); | ||||
|   ui.rbAntennaX->setChecked(m_xpolx); | ||||
|   ui.saveDirEntry->setText(m_saveDir); | ||||
|   ui.azelDirEntry->setText(m_azelDir); | ||||
|   ui.dxccEntry->setText(m_dxccPfx); | ||||
|   ui.timeoutSpinBox->setValue(m_timeout); | ||||
|   ui.dPhiSpinBox->setValue(m_dPhi); | ||||
|   ui.fCalSpinBox->setValue(m_fCal); | ||||
|   ui.faddEntry->setText(QString::number(m_fAdd,'f',3)); | ||||
|   ui.networkRadioButton->setChecked(m_network); | ||||
|   ui.soundCardRadioButton->setChecked(!m_network); | ||||
|   ui.rb96000->setChecked(m_fs96000); | ||||
|   ui.rb95238->setChecked(!m_fs96000); | ||||
|   ui.comboBoxSndIn->setEnabled(!m_network); | ||||
|   ui.comboBoxSndIn->setCurrentIndex(m_nDevIn); | ||||
|   ui.comboBoxSndOut->setCurrentIndex(m_nDevOut); | ||||
|   ui.sbPort->setValue(m_udpPort); | ||||
|   ui.cbIQswap->setChecked(m_IQswap); | ||||
|   ui.cb10db->setChecked(m_10db); | ||||
|   ui.cbInitIQplus->setChecked(m_initIQplus); | ||||
|   ui.mult570SpinBox->setValue(m_mult570); | ||||
|   ui.cal570SpinBox->setValue(m_cal570); | ||||
|   sscanf(m_colors.toAscii(),"%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x", | ||||
|          &r,&g,&b,&r0,&g0,&b0,&r1,&g1,&b1,&r2,&g2,&b2,&r3,&g3,&b3); | ||||
|   updateColorLabels(); | ||||
|   ui.sbBackgroundRed->setValue(r); | ||||
|   ui.sbBackgroundGreen->setValue(g); | ||||
|   ui.sbBackgroundBlue->setValue(b); | ||||
|   ui.sbRed0->setValue(r0); | ||||
|   ui.sbRed1->setValue(r1); | ||||
|   ui.sbRed2->setValue(r2); | ||||
|   ui.sbRed3->setValue(r3); | ||||
|   ui.sbGreen0->setValue(g0); | ||||
|   ui.sbGreen1->setValue(g1); | ||||
|   ui.sbGreen2->setValue(g2); | ||||
|   ui.sbGreen3->setValue(g3); | ||||
|   ui.sbBlue0->setValue(b0); | ||||
|   ui.sbBlue1->setValue(b1); | ||||
|   ui.sbBlue2->setValue(b2); | ||||
|   ui.sbBlue3->setValue(b3); | ||||
| 
 | ||||
|   m_paInDevice=m_inDevList[m_nDevIn]; | ||||
|   m_paOutDevice=m_outDevList[m_nDevOut]; | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| //------------------------------------------------------- accept()
 | ||||
| void DevSetup::accept() | ||||
| { | ||||
|   // Called when OK button is clicked.
 | ||||
|   // Check to see whether SoundInThread must be restarted,
 | ||||
|   // and save user parameters.
 | ||||
| 
 | ||||
|   if(m_network!=ui.networkRadioButton->isChecked() or | ||||
|      m_nDevIn!=ui.comboBoxSndIn->currentIndex() or | ||||
|      m_paInDevice!=m_inDevList[m_nDevIn] or | ||||
|      m_xpol!=ui.cbXpol->isChecked() or | ||||
|      m_udpPort!=ui.sbPort->value()) m_restartSoundIn=true; | ||||
| 
 | ||||
|   if(m_nDevOut!=ui.comboBoxSndOut->currentIndex() or | ||||
|      m_paOutDevice!=m_outDevList[m_nDevOut]) m_restartSoundOut=true; | ||||
| 
 | ||||
|   m_myCall=ui.myCallEntry->text(); | ||||
|   m_myGrid=ui.myGridEntry->text(); | ||||
|   m_idInt=ui.idIntSpinBox->value(); | ||||
|   m_pttPort=ui.pttComboBox->currentIndex(); | ||||
|   m_astroFont=ui.astroFont->value(); | ||||
|   m_xpol=ui.cbXpol->isChecked(); | ||||
|   m_xpolx=ui.rbAntennaX->isChecked(); | ||||
|   m_saveDir=ui.saveDirEntry->text(); | ||||
|   m_azelDir=ui.azelDirEntry->text(); | ||||
|   m_dxccPfx=ui.dxccEntry->text(); | ||||
|   m_timeout=ui.timeoutSpinBox->value(); | ||||
|   m_dPhi=ui.dPhiSpinBox->value(); | ||||
|   m_fCal=ui.fCalSpinBox->value(); | ||||
|   m_fAdd=ui.faddEntry->text().toDouble(); | ||||
|   m_network=ui.networkRadioButton->isChecked(); | ||||
|   m_fs96000=ui.rb96000->isChecked(); | ||||
|   m_nDevIn=ui.comboBoxSndIn->currentIndex(); | ||||
|   m_paInDevice=m_inDevList[m_nDevIn]; | ||||
|   m_nDevOut=ui.comboBoxSndOut->currentIndex(); | ||||
|   m_paOutDevice=m_outDevList[m_nDevOut]; | ||||
|   m_udpPort=ui.sbPort->value(); | ||||
|   m_IQswap=ui.cbIQswap->isChecked(); | ||||
|   m_10db=ui.cb10db->isChecked(); | ||||
|   m_initIQplus=ui.cbInitIQplus->isChecked(); | ||||
|   m_mult570=ui.mult570SpinBox->value(); | ||||
|   m_cal570=ui.cal570SpinBox->value(); | ||||
| 
 | ||||
|   QDialog::accept(); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_soundCardRadioButton_toggled(bool checked) | ||||
| { | ||||
|   ui.comboBoxSndIn->setEnabled(ui.soundCardRadioButton->isChecked()); | ||||
|   ui.rb96000->setChecked(checked); | ||||
|   ui.rb95238->setEnabled(!checked); | ||||
|   ui.label_InputDev->setEnabled(checked); | ||||
|   ui.label_Port->setEnabled(!checked); | ||||
|   ui.sbPort->setEnabled(!checked); | ||||
|   ui.cbIQswap->setEnabled(checked); | ||||
|   ui.cb10db->setEnabled(checked); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_cbXpol_stateChanged(int n) | ||||
| { | ||||
|   m_xpol = (n!=0); | ||||
|   ui.rbAntenna->setEnabled(m_xpol); | ||||
|   ui.rbAntennaX->setEnabled(m_xpol); | ||||
|   ui.dPhiSpinBox->setEnabled(m_xpol); | ||||
|   ui.labelDphi->setEnabled(m_xpol); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_cal570SpinBox_valueChanged(double ppm) | ||||
| { | ||||
|   m_cal570=ppm; | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_mult570SpinBox_valueChanged(int mult) | ||||
| { | ||||
|   m_mult570=mult; | ||||
| } | ||||
| 
 | ||||
| void DevSetup::updateColorLabels() | ||||
| { | ||||
|   QString t; | ||||
|   int r=ui.sbBackgroundRed->value(); | ||||
|   int g=ui.sbBackgroundGreen->value(); | ||||
|   int b=ui.sbBackgroundBlue->value(); | ||||
|   int r0=ui.sbRed0->value(); | ||||
|   int r1=ui.sbRed1->value(); | ||||
|   int r2=ui.sbRed2->value(); | ||||
|   int r3=ui.sbRed3->value(); | ||||
|   int g0=ui.sbGreen0->value(); | ||||
|   int g1=ui.sbGreen1->value(); | ||||
|   int g2=ui.sbGreen2->value(); | ||||
|   int g3=ui.sbGreen3->value(); | ||||
|   int b0=ui.sbBlue0->value(); | ||||
|   int b1=ui.sbBlue1->value(); | ||||
|   int b2=ui.sbBlue2->value(); | ||||
|   int b3=ui.sbBlue3->value(); | ||||
| 
 | ||||
|   t.sprintf("QLabel{background-color: #%2.2x%2.2x%2.2x;" | ||||
|             "color: #%2.2x%2.2x%2.2x}",r,g,b,r0,g0,b0); | ||||
|   ui.lab0->setStyleSheet(t); | ||||
|   t.sprintf("QLabel{background-color: #%2.2x%2.2x%2.2x;" | ||||
|             "color: #%2.2x%2.2x%2.2x}",r,g,b,r1,g1,b1); | ||||
|   ui.lab1->setStyleSheet(t); | ||||
|   t.sprintf("QLabel{background-color: #%2.2x%2.2x%2.2x;" | ||||
|             "color: #%2.2x%2.2x%2.2x}",r,g,b,r2,g2,b2); | ||||
|   ui.lab2->setStyleSheet(t); | ||||
|   t.sprintf("QLabel{background-color: #%2.2x%2.2x%2.2x;" | ||||
|             "color: #%2.2x%2.2x%2.2x}",r,g,b,r3,g3,b3); | ||||
|   ui.lab3->setStyleSheet(t); | ||||
| 
 | ||||
|   m_colors.sprintf("%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x" | ||||
|             "%2.2x%2.2x%2.2x",r,g,b,r0,g0,b0,r1,g1,b1,r2,g2,b2,r3,g3,b3); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_sbBackgroundRed_valueChanged(int r) | ||||
| { | ||||
|   updateColorLabels(); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_sbBackgroundGreen_valueChanged(int g) | ||||
| { | ||||
|   updateColorLabels(); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_sbBackgroundBlue_valueChanged(int b) | ||||
| { | ||||
|   updateColorLabels(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void DevSetup::on_sbRed0_valueChanged(int arg1) | ||||
| { | ||||
|   updateColorLabels(); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_sbGreen0_valueChanged(int arg1) | ||||
| { | ||||
|   updateColorLabels(); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_sbBlue0_valueChanged(int arg1) | ||||
| { | ||||
|   updateColorLabels(); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_sbRed1_valueChanged(int arg1) | ||||
| { | ||||
|    updateColorLabels(); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_sbGreen1_valueChanged(int arg1) | ||||
| { | ||||
|   updateColorLabels(); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_sbBlue1_valueChanged(int arg1) | ||||
| { | ||||
|    updateColorLabels(); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_sbRed2_valueChanged(int arg1) | ||||
| { | ||||
|    updateColorLabels(); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_sbGreen2_valueChanged(int arg1) | ||||
| { | ||||
|    updateColorLabels(); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_sbBlue2_valueChanged(int arg1) | ||||
| { | ||||
|    updateColorLabels(); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_sbRed3_valueChanged(int arg1) | ||||
| { | ||||
|   updateColorLabels(); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_sbGreen3_valueChanged(int arg1) | ||||
| { | ||||
|   updateColorLabels(); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_sbBlue3_valueChanged(int arg1) | ||||
| { | ||||
|   updateColorLabels(); | ||||
| } | ||||
| 
 | ||||
| void DevSetup::on_pushButton_5_clicked() | ||||
| { | ||||
|   QColor color = QColorDialog::getColor(Qt::green, this); | ||||
|   if (color.isValid()) { | ||||
|   } | ||||
| } | ||||
							
								
								
									
										83
									
								
								devsetup.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								devsetup.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,83 @@ | ||||
| #ifndef DEVSETUP_H | ||||
| #define DEVSETUP_H | ||||
| 
 | ||||
| #include <QDialog> | ||||
| #include "ui_devsetup.h" | ||||
| 
 | ||||
| class DevSetup : public QDialog | ||||
| { | ||||
|   Q_OBJECT | ||||
| public: | ||||
|   DevSetup(QWidget *parent=0); | ||||
|   ~DevSetup(); | ||||
| 
 | ||||
|   void initDlg(); | ||||
|   qint32  m_idInt; | ||||
|   qint32  m_pttPort; | ||||
|   qint32  m_nDevIn; | ||||
|   qint32  m_nDevOut; | ||||
|   qint32  m_inDevList[100]; | ||||
|   qint32  m_outDevList[100]; | ||||
|   qint32  m_paInDevice; | ||||
|   qint32  m_paOutDevice; | ||||
|   qint32  m_timeout; | ||||
|   qint32  m_dPhi; | ||||
|   qint32  m_fCal; | ||||
|   qint32  m_udpPort; | ||||
|   qint32  m_astroFont; | ||||
|   qint32  m_mult570; | ||||
| 
 | ||||
|   double  m_fAdd; | ||||
|   double  m_cal570; | ||||
| 
 | ||||
|   bool    m_xpolx; | ||||
|   bool    m_network; | ||||
|   bool    m_fs96000; | ||||
|   bool    m_xpol; | ||||
|   bool    m_IQswap; | ||||
|   bool    m_restartSoundIn; | ||||
|   bool    m_restartSoundOut; | ||||
|   bool    m_10db; | ||||
|   bool    m_initIQplus; | ||||
| 
 | ||||
|   QString m_myCall; | ||||
|   QString m_myGrid; | ||||
|   QString m_saveDir; | ||||
|   QString m_azelDir; | ||||
|   QString m_dxccPfx; | ||||
|   QString m_colors; | ||||
| 
 | ||||
|   QColor  m_colorBackground; | ||||
| 
 | ||||
| public slots: | ||||
|   void accept(); | ||||
| 
 | ||||
| private slots: | ||||
|   void on_soundCardRadioButton_toggled(bool checked); | ||||
|   void on_cbXpol_stateChanged(int arg1); | ||||
|   void on_cal570SpinBox_valueChanged(double ppm); | ||||
|   void on_mult570SpinBox_valueChanged(int mult); | ||||
|   void on_sbBackgroundRed_valueChanged(int arg1); | ||||
|   void on_sbBackgroundGreen_valueChanged(int arg1); | ||||
|   void on_sbBackgroundBlue_valueChanged(int arg1); | ||||
|   void updateColorLabels(void); | ||||
|   void on_sbRed0_valueChanged(int arg1); | ||||
|   void on_sbGreen0_valueChanged(int arg1); | ||||
|   void on_sbBlue0_valueChanged(int arg1); | ||||
|   void on_sbRed1_valueChanged(int arg1); | ||||
|   void on_sbGreen1_valueChanged(int arg1); | ||||
|   void on_sbBlue1_valueChanged(int arg1); | ||||
|   void on_sbRed2_valueChanged(int arg1); | ||||
|   void on_sbGreen2_valueChanged(int arg1); | ||||
|   void on_sbBlue2_valueChanged(int arg1); | ||||
|   void on_sbRed3_valueChanged(int arg1); | ||||
|   void on_sbGreen3_valueChanged(int arg1); | ||||
|   void on_sbBlue3_valueChanged(int arg1); | ||||
|   void on_pushButton_5_clicked(); | ||||
| 
 | ||||
| private: | ||||
|   int r,g,b,r0,g0,b0,r1,g1,b1,r2,g2,b2,r3,g3,b3; | ||||
|   Ui::DialogSndCard ui; | ||||
| }; | ||||
| 
 | ||||
| #endif // DEVSETUP_H
 | ||||
							
								
								
									
										1583
									
								
								devsetup.ui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1583
									
								
								devsetup.ui
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										15
									
								
								displaytext.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								displaytext.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| #include "displaytext.h" | ||||
| #include <QDebug> | ||||
| #include <QMouseEvent> | ||||
| 
 | ||||
| DisplayText::DisplayText(QWidget *parent) : | ||||
|     QTextBrowser(parent) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| void DisplayText::mouseDoubleClickEvent(QMouseEvent *e) | ||||
| { | ||||
|   bool ctrl = (e->modifiers() & 0x4000000); | ||||
|   emit(selectCallsign(ctrl)); | ||||
|   QTextBrowser::mouseDoubleClickEvent(e); | ||||
| } | ||||
							
								
								
									
										22
									
								
								displaytext.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								displaytext.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| #ifndef DISPLAYTEXT_H | ||||
| #define DISPLAYTEXT_H | ||||
| 
 | ||||
| #include <QTextBrowser> | ||||
| 
 | ||||
| class DisplayText : public QTextBrowser | ||||
| { | ||||
|     Q_OBJECT | ||||
| public: | ||||
|     explicit DisplayText(QWidget *parent = 0); | ||||
| 
 | ||||
| signals: | ||||
|   void selectCallsign(bool ctrl); | ||||
| 
 | ||||
| public slots: | ||||
| 
 | ||||
| protected: | ||||
|   void mouseDoubleClickEvent(QMouseEvent *e); | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| #endif // DISPLAYTEXT_H
 | ||||
							
								
								
									
										4
									
								
								f2py.py
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								f2py.py
									
									
									
									
									
								
							| @ -1,4 +0,0 @@ | ||||
| #!/usr/bin/env python.exe | ||||
| # See http://cens.ioc.ee/projects/f2py2e/ | ||||
| import f2py2e | ||||
| f2py2e.main() | ||||
							
								
								
									
										69
									
								
								ffft.f
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								ffft.f
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,69 @@ | ||||
| 	subroutine ffft(d,npts,isign,ireal) | ||||
| 
 | ||||
| C  Fourier transform of length npts=2**k, performed in place. | ||||
| C  Input data in array d, treated as complex if ireal=0, and as real if ireal=1. | ||||
| C  In either case the transform values are returned in array d, treated as | ||||
| C  complex. The DC term is d(1), and d(npts/2+1) is the term at the Nyquist | ||||
| C  frequency.  The basic algorithm is the same as Norm Brenner's FOUR1, and | ||||
| C  uses radix-2 transforms. | ||||
| 
 | ||||
| C  J. H. Taylor, Princeton University. | ||||
| 
 | ||||
| 	complex d(npts),t,w,wstep,tt,uu | ||||
| 	data pi/3.14159265359/ | ||||
| 
 | ||||
| C  Shuffle the data to bit-reversed order. | ||||
| 
 | ||||
| 	imax=npts/(ireal+1) | ||||
| 	irev=1 | ||||
| 	do 5 i=1,imax | ||||
| 	if(i.ge.irev) go to 2 | ||||
| 	t=d(i) | ||||
| 	d(i)=d(irev) | ||||
| 	d(irev)=t | ||||
| 2	mmax=imax/2 | ||||
| 3	if(irev.le.mmax) go to 5 | ||||
| 	irev=irev-mmax | ||||
| 	mmax=mmax/2 | ||||
| 	if(mmax.ge.1) go to 3 | ||||
| 5	irev=irev+mmax | ||||
| 
 | ||||
| C  The radix-2 transform begins here. | ||||
| 
 | ||||
| 	api=isign*pi/2. | ||||
| 	mmax=1 | ||||
| 6	istep=2*mmax | ||||
| 	wstep=cmplx(-2.*sin(api/mmax)**2,sin(2.*api/mmax)) | ||||
| 	w=1. | ||||
| 	do 9 m=1,mmax | ||||
| 
 | ||||
| C  This in the inner-most loop -- optimization here is important! | ||||
| 	do 8 i=m,imax,istep | ||||
| 	t=w*d(i+mmax) | ||||
| 	d(i+mmax)=d(i)-t | ||||
| 8	d(i)=d(i)+t | ||||
| 
 | ||||
| 9	w=w*(1.+wstep) | ||||
| 	mmax=istep | ||||
| 	if(mmax.lt.imax) go to 6 | ||||
| 
 | ||||
| 	if(ireal.eq.0) return | ||||
| 
 | ||||
| C  Now complete the last stage of a doubled-up real transform. | ||||
| 
 | ||||
| 	jmax=imax/2 + 1 | ||||
| 	wstep=cmplx(-2.*sin(isign*pi/npts)**2,sin(isign*pi/imax)) | ||||
| 	w=1.0 | ||||
| 	d(imax+1)=d(1) | ||||
| 
 | ||||
| 	do 10 j=1,jmax | ||||
| 	uu=cmplx(real(d(j))+real(d(2+imax-j)),aimag(d(j)) -  | ||||
|      +    aimag(d(2+imax-j))) | ||||
| 	tt=w*cmplx(aimag(d(j))+aimag(d(2+imax-j)),-real(d(j)) + | ||||
|      +    real(d(2+imax-j))) | ||||
| 	d(j)=uu+tt | ||||
| 	d(2+imax-j)=conjg(uu-tt) | ||||
| 10	w=w*(1.+wstep) | ||||
| 
 | ||||
| 	return | ||||
| 	end | ||||
							
								
								
									
										
											BIN
										
									
								
								fftw3single.lib
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								fftw3single.lib
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										67
									
								
								fil651.f
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								fil651.f
									
									
									
									
									
								
							| @ -1,67 +0,0 @@ | ||||
|       subroutine fil651(d,n1,c,n2) | ||||
| 
 | ||||
| C  FIR lowpass mixing filter designed with ScopeFIR.  Real in, complex out. | ||||
| 
 | ||||
| C  fsample     = 5512.5   Hz | ||||
| C  Ntaps       = 31 | ||||
| C  fc          = 1000     Hz | ||||
| C  fstop       = 1378.125 Hz | ||||
| C  Ripple      = 0.5      dB | ||||
| C  Stop Atten  = 50       dB | ||||
| C  fmix        = 1378.125 Hz | ||||
| C  fout        = 2706.25  Hz | ||||
| 
 | ||||
|       parameter (NTAPS=31) | ||||
|       parameter (NH=NTAPS/2) | ||||
|       parameter (NDOWN=2)               !Downsample ratio | ||||
| 
 | ||||
|       real d(n1) | ||||
|       complex c(n2) | ||||
| 
 | ||||
|       complex ck(-NH:NH) | ||||
|       data ck/ | ||||
|      +  (-0.000000073578,-0.000859869243), | ||||
|      +  ( 0.008518289457,-0.000000680308), | ||||
|      +  ( 0.000000834309, 0.011250152594), | ||||
|      +  (-0.001061705254, 0.000000072679), | ||||
|      +  ( 0.000000875897, 0.013958392128), | ||||
|      +  (-0.010047338711, 0.000000573160), | ||||
|      +  ( 0.000000770320, 0.015003869984), | ||||
|      +  (-0.025027880956, 0.000001142192), | ||||
|      +  ( 0.000000285583, 0.007151700551), | ||||
|      +  (-0.043634723888, 0.000001493512), | ||||
|      +  (-0.000000478847,-0.016788108005), | ||||
|      +  (-0.061886192046, 0.000001412144), | ||||
|      +  (-0.000001258694,-0.073548459509), | ||||
|      +  (-0.075261027462, 0.000000858668), | ||||
|      +  (-0.000001749252,-0.306638863572), | ||||
|      +  ( 0.419826269508, 0.000000000000), | ||||
|      +  (-0.000001749252, 0.306638863572), | ||||
|      +  (-0.075261027462,-0.000000858668), | ||||
|      +  (-0.000001258694, 0.073548459509), | ||||
|      +  (-0.061886192046,-0.000001412144), | ||||
|      +  (-0.000000478847, 0.016788108005), | ||||
|      +  (-0.043634723888,-0.000001493512), | ||||
|      +  ( 0.000000285583,-0.007151700551), | ||||
|      +  (-0.025027880956,-0.000001142192), | ||||
|      +  ( 0.000000770320,-0.015003869984), | ||||
|      +  (-0.010047338711,-0.000000573160), | ||||
|      +  ( 0.000000875897,-0.013958392128), | ||||
|      +  (-0.001061705254,-0.000000072679), | ||||
|      +  ( 0.000000834309,-0.011250152594), | ||||
|      +  ( 0.008518289457, 0.000000680308), | ||||
|      +  (-0.000000073578, 0.000859869243)/ | ||||
| 
 | ||||
|       n2=(n1-NTAPS+NDOWN)/NDOWN | ||||
|       k0=NH-NDOWN+1 | ||||
| 
 | ||||
|       do i=1,n2 | ||||
|          c(i)=0. | ||||
|          k=k0 + NDOWN*i | ||||
|          do j=-NH,NH | ||||
|             c(i)=c(i) + d(j+k)*conjg(ck(j)) | ||||
|          enddo | ||||
|       enddo | ||||
| 
 | ||||
|       return | ||||
|       end | ||||
							
								
								
									
										44
									
								
								fil652.f
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								fil652.f
									
									
									
									
									
								
							| @ -1,44 +0,0 @@ | ||||
|       subroutine fil652(c1,n1,c2,n2) | ||||
| 
 | ||||
| C  FIR lowpass filter designed using ScopeFIR | ||||
| 
 | ||||
| C  fsample     = 2756.25  Hz | ||||
| C  Ntaps       = 31 | ||||
| C  fc          = 500      Hz | ||||
| C  fstop       = 689.0625 Hz | ||||
| C  Ripple      = 0.5      dB | ||||
| C  Stop Atten  = 50       dB | ||||
| C  fout        = 1378.125 Hz | ||||
| 
 | ||||
|       parameter (NTAPS=31) | ||||
|       parameter (NH=NTAPS/2) | ||||
|       parameter (NDOWN=2)                !Downsample ratio | ||||
|       complex c1(n1) | ||||
|       complex c2(n2) | ||||
| 
 | ||||
| C  Filter coefficients: | ||||
|       real a(-NH:NH) | ||||
|       data a/ | ||||
|      +  -0.000859869246,-0.008518289484,-0.011250152625,-0.001061705256, | ||||
|      +   0.013958392156, 0.010047338728,-0.015003870003,-0.025027880982, | ||||
|      +   0.007151700557, 0.043634723913, 0.016788108012,-0.061886192062, | ||||
|      +  -0.073548459520, 0.075261027466, 0.306638863577, 0.419826269508, | ||||
|      +   0.306638863577, 0.075261027466,-0.073548459520,-0.061886192062, | ||||
|      +   0.016788108012, 0.043634723913, 0.007151700557,-0.025027880982, | ||||
|      +  -0.015003870003, 0.010047338728, 0.013958392156,-0.001061705256, | ||||
|      +  -0.011250152625,-0.008518289484,-0.000859869246/ | ||||
| 
 | ||||
|       n2=(n1-NTAPS+NDOWN)/NDOWN | ||||
|       k0=NH-NDOWN+1 | ||||
| 
 | ||||
| C  Loop over all output samples | ||||
|       do i=1,n2 | ||||
|          c2(i)=0. | ||||
|          k=k0 + NDOWN*i | ||||
|          do j=-NH,NH | ||||
|             c2(i)=c2(i) + c1(j+k)*a(j) | ||||
|          enddo | ||||
|       enddo | ||||
| 
 | ||||
|       return | ||||
|       end | ||||
							
								
								
									
										49
									
								
								fil653.f
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								fil653.f
									
									
									
									
									
								
							| @ -1,49 +0,0 @@ | ||||
|       subroutine fil653(c1,n1,c2,n2) | ||||
| 
 | ||||
| C  FIR lowpass filter designed using ScopeFIR | ||||
| 
 | ||||
| C  fsample     = 1378.125   Hz | ||||
| C  Ntaps       = 45 | ||||
| C  fc          = 100        Hz | ||||
| C  fstop       = 172.265625 Hz | ||||
| C  Ripple      = 0.5        dB | ||||
| C  Stop Atten  = 50         dB | ||||
| C  fout        = 172.265625 Hz | ||||
| C  BW          = 200        Hz | ||||
| 
 | ||||
|       parameter (NTAPS=45) | ||||
|       parameter (NH=NTAPS/2) | ||||
|       parameter (NDOWN=4)                !Downsample ratio | ||||
|       complex c1(n1) | ||||
|       complex c2(n2) | ||||
| 
 | ||||
| C  Filter coefficients: | ||||
|       real a(-NH:NH) | ||||
|       data a/ | ||||
|      +  -0.000005569862,-0.002503777832,-0.004040335617,-0.005717910288, | ||||
|      +  -0.006153385485,-0.004446125293,-0.000305215272, 0.005557289511, | ||||
|      +   0.011329120672, 0.014496551280, 0.012703875898, 0.004837591829, | ||||
|      +  -0.008060363689,-0.022474422302,-0.032964876083,-0.033575486327, | ||||
|      +  -0.019743889907, 0.009895672340, 0.052467109908, 0.101031155027, | ||||
|      +   0.146073001698, 0.177927966814, 0.189427119395, 0.177927966814, | ||||
|      +   0.146073001698, 0.101031155027, 0.052467109908, 0.009895672340, | ||||
|      +  -0.019743889907,-0.033575486327,-0.032964876083,-0.022474422302, | ||||
|      +  -0.008060363689, 0.004837591829, 0.012703875898, 0.014496551280, | ||||
|      +   0.011329120672, 0.005557289511,-0.000305215272,-0.004446125293, | ||||
|      +  -0.006153385485,-0.005717910288,-0.004040335617,-0.002503777832, | ||||
|      +  -0.000005569862/ | ||||
| 
 | ||||
|       n2=(n1-NTAPS+NDOWN)/NDOWN | ||||
|       k0=NH-NDOWN+1 | ||||
| 
 | ||||
| C  Loop over all output samples | ||||
|       do i=1,n2 | ||||
|          c2(i)=0. | ||||
|          k=k0 + NDOWN*i | ||||
|          do j=-NH,NH | ||||
|             c2(i)=c2(i) + c1(j+k)*a(j) | ||||
|          enddo | ||||
|       enddo | ||||
| 
 | ||||
|       return | ||||
|       end | ||||
							
								
								
									
										119
									
								
								filbig.f
									
									
									
									
									
								
							
							
						
						
									
										119
									
								
								filbig.f
									
									
									
									
									
								
							| @ -1,119 +0,0 @@ | ||||
|       subroutine filbig(dd,nmax,f0,newdat,c4a,c4b,n4) | ||||
| 
 | ||||
| C  Filter and downsample complex data for X and Y polarizations, | ||||
| C  stored in array dd(4,nmax).  Output is downsampled from 96000 Hz | ||||
| C  to 1500 Hz, and the low-pass filter has f_cutoff = 375 Hz and  | ||||
| C  f_stop = 750 Hz. | ||||
| 
 | ||||
|       parameter (NFFT1=5376000,NFFT2=77175) | ||||
|       real*4  dd(4,nmax)                         !Input data | ||||
|       complex c4a(NFFT2),c4b(NFFT2)              !Output data | ||||
|       complex ca(NFFT1),cb(NFFT1)                !FFTs of input | ||||
|       real*8 df | ||||
| C Impulse response of filter (one side) | ||||
|       real halfpulse(8) | ||||
|       complex cfilt(NFFT2) | ||||
|                        !Filter (complex; imag = 0) | ||||
|       real rfilt(NFFT2)                          !Filter (real) | ||||
|       integer plan1,plan2,plan3,plan4,plan5 | ||||
|       logical first | ||||
|       include 'fftw3.f' | ||||
|       equivalence (rfilt,cfilt) | ||||
|       data first/.true./ | ||||
|       data halfpulse/114.97547150,36.57879257,-20.93789101, | ||||
|      +  5.89886379,1.59355187,-2.49138308,0.60910773,-0.04248129/ | ||||
|       save | ||||
| 
 | ||||
|       if(nmax.lt.0) go to 900 | ||||
|       if(first) then | ||||
|          npatience=1 | ||||
|          nflags=FFTW_ESTIMATE | ||||
|          if(npatience.eq.1) nflags=FFTW_ESTIMATE_PATIENT | ||||
|          if(npatience.eq.2) nflags=FFTW_MEASURE | ||||
|          if(npatience.eq.3) nflags=FFTW_PATIENT | ||||
|          if(npatience.eq.4) nflags=FFTW_EXHAUSTIVE | ||||
| C  Plan the FFTs just once | ||||
|          call sfftw_plan_dft_1d_(plan1,NFFT1,ca,ca, | ||||
|      +        FFTW_BACKWARD,nflags) | ||||
|          call sfftw_plan_dft_1d_(plan2,NFFT1,cb,cb, | ||||
|      +        FFTW_BACKWARD,nflags) | ||||
|          call sfftw_plan_dft_1d_(plan3,NFFT2,c4a,c4a, | ||||
|      +        FFTW_FORWARD,nflags) | ||||
|          call sfftw_plan_dft_1d_(plan4,NFFT2,c4b,c4b, | ||||
|      +        FFTW_FORWARD,nflags) | ||||
|          call sfftw_plan_dft_1d_(plan5,NFFT2,cfilt,cfilt, | ||||
|      +        FFTW_BACKWARD,nflags) | ||||
| 
 | ||||
| C  Convert impulse response to filter function | ||||
|          do i=1,NFFT2 | ||||
|             cfilt(i)=0. | ||||
|          enddo | ||||
|          fac=0.00625/NFFT1 | ||||
|          cfilt(1)=fac*halfpulse(1) | ||||
|          do i=2,8 | ||||
|             cfilt(i)=fac*halfpulse(i) | ||||
|             cfilt(NFFT2+2-i)=fac*halfpulse(i) | ||||
|          enddo | ||||
|          call sfftw_execute_(plan5) | ||||
| 
 | ||||
|          base=cfilt(NFFT2/2+1) | ||||
|          do i=1,NFFT2 | ||||
|             rfilt(i)=real(cfilt(i))-base | ||||
|          enddo | ||||
| 
 | ||||
|          df=96000.d0/NFFT1 | ||||
|          first=.false. | ||||
|       endif | ||||
| 
 | ||||
| C  When new data comes along, we need to compute a new "big FFT" | ||||
| C  If we just have a new f0, continue with the existing ca and cb. | ||||
| 
 | ||||
|       if(newdat.ne.0) then | ||||
|          nz=min(nmax,NFFT1) | ||||
|          do i=1,nz | ||||
|             ca(i)=cmplx(dd(1,i),dd(2,i)) | ||||
|             cb(i)=cmplx(dd(3,i),dd(4,i)) | ||||
|          enddo | ||||
| 
 | ||||
|          if(nmax.lt.NFFT1) then | ||||
|             do i=nmax+1,NFFT1 | ||||
|                ca(i)=0. | ||||
|                cb(i)=0. | ||||
|             enddo | ||||
|          endif | ||||
|          call sfftw_execute_(plan1) | ||||
|          call sfftw_execute_(plan2) | ||||
|          newdat=0 | ||||
|       endif | ||||
| 
 | ||||
| C  NB: f0 is the frequency at which we want our filter centered. | ||||
| C      i0 is the bin number in ca and cb closest to f0. | ||||
| 
 | ||||
|       i0=nint(f0/df) + 1 | ||||
|       nh=NFFT2/2 | ||||
|       do i=1,nh                                !Copy data into c4a and c4b, | ||||
|          j=i0+i-1                              !and apply the filter function | ||||
|          c4a(i)=rfilt(i)*ca(j) | ||||
|          c4b(i)=rfilt(i)*cb(j) | ||||
|       enddo | ||||
|       do i=nh+1,NFFT2 | ||||
|          j=i0+i-1-NFFT2 | ||||
|          if(j.lt.1) j=j+NFFT1                  !NFFT1 was NFFT2 | ||||
|          c4a(i)=rfilt(i)*ca(j) | ||||
|          c4b(i)=rfilt(i)*cb(j) | ||||
|       enddo | ||||
| 
 | ||||
| C  Do the short reverse transform, to go back to time domain. | ||||
|       call sfftw_execute_(plan3) | ||||
|       call sfftw_execute_(plan4) | ||||
|       n4=min(nmax/64,NFFT2) | ||||
|       go to 999 | ||||
| 
 | ||||
|  900  call sfftw_destroy_plan_(plan1) | ||||
|       call sfftw_destroy_plan_(plan2) | ||||
|       call sfftw_destroy_plan_(plan3) | ||||
|       call sfftw_destroy_plan_(plan4) | ||||
|       call sfftw_destroy_plan_(plan5) | ||||
| 
 | ||||
|  999  return | ||||
|       end | ||||
							
								
								
									
										36
									
								
								files.txt
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								files.txt
									
									
									
									
									
								
							| @ -1,36 +0,0 @@ | ||||
| LU  fname          write          read                write thread | ||||
| -------------------------------------------------------------------------- | ||||
| 10  *.tf2                         getfile2 | ||||
| 11  prefixes.txt   pfxdump        GUI                 GUI     (once only) | ||||
| 11  decoded.txt    map65a         GUI                 decoder (60 s) | ||||
| 12 | ||||
| 13  tsky.dat                      astro0.F | ||||
| 14  azel.dat       astro0.F                           GUI     (1 s) | ||||
| 15 | ||||
| 16 | ||||
| 17  *.tf2          savetf2                            decoder | ||||
| 18  TxData                        wsjtgen | ||||
| 19  messages.txt   display.txt    GUI                 decoder | ||||
| 20  bandmap.txt    display.txt    GUI                 decoder | ||||
| 21  ALL65.TXT      map65a                             decoder | ||||
| 22  kvasd.dat      extract        KVASD               decoder | ||||
| 23  CALL3.TXT                     deep65              decoder | ||||
| 24  meas24.txt     savetf2                            decoder | ||||
| 25  meas25.txt     savetf2                            decoder | ||||
| 26  tmp26.txt      map65a,display display             decoder | ||||
| 27  dphi.txt       map65a                             decoder | ||||
| 28 | ||||
| 29  debug.txt | ||||
| 77                 deep65                             decoder | ||||
| -------------------------------------------------------------------------- | ||||
| 
 | ||||
| So ... the problem may be writing to azel.dat from the GUI thread? | ||||
| (Could put astro data into a common, and write to file from decode1.F90.) | ||||
| 
 | ||||
| Also: look at write(line,...) forms ... | ||||
| 
 | ||||
|   unpackgrid unpackmsg symspec display savetf2 (all in decoder thread) | ||||
| 
 | ||||
| read(char,...)  | ||||
| 
 | ||||
|   packcall packgrid astro0 display getfile2 | ||||
							
								
								
									
										250
									
								
								fivehz.f90
									
									
									
									
									
								
							
							
						
						
									
										250
									
								
								fivehz.f90
									
									
									
									
									
								
							| @ -1,250 +0,0 @@ | ||||
| subroutine fivehz | ||||
| 
 | ||||
| !  Called at interrupt level from the PortAudio callback routine. | ||||
| !  For nspb=2048 the callback rate is nfsample/nspb = 5.38 Hz. | ||||
| !  Thus, we should be able to control the timing of T/R sequence events | ||||
| !  here to within about 0.2 s. | ||||
| 
 | ||||
| !  Do not do anything very time consuming in this routine!! | ||||
| !  Disk I/O is a bad idea.  Writing to stdout (for diagnostic purposes) | ||||
| !  seems to be OK. | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   use dflib | ||||
|   use dfport | ||||
| #endif | ||||
| 
 | ||||
|   parameter (NTRING=64) | ||||
|   real*8 tt1(0:NTRING-1) | ||||
|   logical first,txtime,filled | ||||
|   integer ptt | ||||
|   integer TxOKz | ||||
|   real*8 fs,fsample,tt,u | ||||
|   include 'gcom1.f90' | ||||
|   include 'gcom2.f90' | ||||
|   data first/.true./,nc0/1/,nc1/1/ | ||||
|   save | ||||
| 
 | ||||
|   n1=time() | ||||
|   n2=mod(n1,86400) | ||||
|   tt=n1-n2+tsec-0.1d0*ndsec | ||||
| 
 | ||||
|   if(first) then | ||||
|      rxdelay=0.2 | ||||
|      txdelay=0.4 | ||||
|      tlatency=1.0 | ||||
|      first=.false. | ||||
|      iptt=0 | ||||
|      ntr0=-99 | ||||
|      rxdone=.false. | ||||
|      ibuf00=-99 | ||||
|      ncall=-1 | ||||
|      u=0.05d0 | ||||
|      fsample=11025.d0 | ||||
|      mfsample=110250 | ||||
|      filled=.false. | ||||
|   endif | ||||
| 
 | ||||
|   if(txdelay.lt.0.2d0) txdelay=0.2d0 | ||||
| 
 | ||||
| ! Measure average sampling frequency over a recent interval | ||||
|   ncall=ncall+1 | ||||
|   if(ncall.eq.9) then | ||||
|      ntt0=0 | ||||
|      ntt1=0 | ||||
|      tt1(ntt1)=tt | ||||
|   endif | ||||
| !  if(ncall.ge.10 .and. mod(ncall,2).eq.1) then | ||||
|   if(ncall.ge.10) then | ||||
|      ntt1=iand(ntt1+1,NTRING-1) | ||||
|      tt1(ntt1)=tt | ||||
|      if(ntt1.eq.NTRING-1) filled=.true. | ||||
|      if(filled) ntt0=iand(ntt1+1,NTRING-1) | ||||
|      if(mod(ncall,2).eq.1) then | ||||
|         nd=ntt1-ntt0 | ||||
|         if(nd.lt.0) nd=nd+NTRING | ||||
|         fs=nd*2048.d0/(tt1(ntt1)-tt1(ntt0)) | ||||
|         fsample=u*fs + (1.d0-u)*fsample | ||||
|         mfsample=nint(10.d0*fsample) | ||||
|      endif | ||||
|   endif | ||||
| 
 | ||||
|   if(trperiod.le.0) trperiod=30 | ||||
|   tx1=0.0                              !Time to start a TX sequence | ||||
|   tx2=trperiod-(tlatency+txdelay)      !Time to turn TX off | ||||
|   if(mode(1:4).eq.'JT65') then | ||||
|      if(nwave.lt.126*4096) nwave=126*4096 | ||||
|      tx2=txdelay + nwave/11025.0 | ||||
|      if(tx2.gt.(trperiod-2.0)) tx2=trperiod-tlatency-1.0 | ||||
|   endif | ||||
| 
 | ||||
|   if(TxFirst.eq.0) then | ||||
|      tx1=tx1+trperiod | ||||
|      tx2=tx2+trperiod | ||||
|   endif | ||||
| 
 | ||||
|   t=mod(Tsec,2.d0*trperiod) | ||||
|   txtime = t.ge.tx1 .and. t.lt.tx2 | ||||
| 
 | ||||
| ! If we're transmitting, freeze the input buffer pointers where they were. | ||||
|   receiving=1 | ||||
|   if(((txtime .and. (lauto.eq.1)) .or. TxOK.eq.1 .or. transmitting.eq.1) &  | ||||
|        .and. (mute.eq.0)) then | ||||
|      receiving=0 | ||||
|      ibuf=ibuf000 | ||||
|      iwrite=iwrite000 | ||||
|   endif | ||||
|   ibuf000=ibuf | ||||
|   iwrite000=iwrite | ||||
|   nsec=Tsec | ||||
|   ntr=mod(nsec/trperiod,2)             !ntr=0 in 1st sequence, 1 in 2nd | ||||
| 
 | ||||
|   if(ntr.ne.ntr0) then | ||||
|      ibuf0=ibuf                        !Start of new sequence, save ibuf | ||||
| !     if(mode(1:4).ne.'JT65') then | ||||
| !        ibuf0=ibuf0+3                  !So we don't copy our own Tx | ||||
| !        if(ibuf0.gt.1024) ibuf0=ibuf0-1024 | ||||
| !     endif | ||||
|      ntime=time()                      !Save start time | ||||
|      if(mantx.eq.1 .and. iptt.eq.1) then | ||||
|         mantx=0 | ||||
|         TxOK=0 | ||||
|      endif | ||||
|   endif | ||||
| 
 | ||||
| ! Switch PTT line and TxOK appropriately | ||||
|   if(lauto.eq.1) then | ||||
|      if(txtime .and. iptt.eq.0 .and.          & | ||||
|           mute.eq.0) i1=ptt(nport,pttport,1,iptt)        !Raise PTT | ||||
|      if(.not.txtime .or. mute.eq.1) TxOK=0               !Lower TxOK | ||||
|   else | ||||
|      if(mantx.eq.1 .and. iptt.eq.0 .and.      & | ||||
|           mute.eq.0) i2=ptt(nport,pttport,1,iptt)        !Raise PTT | ||||
|      if(mantx.eq.0 .or. mute.eq.1) TxOK=0                !Lower TxOK | ||||
|   endif | ||||
| 
 | ||||
| ! Calculate Tx waveform as needed | ||||
|   if((iptt.eq.1 .and. iptt0.eq.0) .or. nrestart.eq.1) then | ||||
|      call wsjtgen | ||||
|      nrestart=0 | ||||
|   endif | ||||
| 
 | ||||
| ! If PTT was just raised, start a countdown for raising TxOK: | ||||
|   nc1a=txdelay/0.18576 | ||||
|   if(nc1a.lt.2) nc1a=2 | ||||
|   if(iptt.eq.1 .and. iptt0.eq.0) nc1=-nc1a-1 | ||||
|   if(nc1.le.0) nc1=nc1+1 | ||||
|   if(nc1.eq.0) TxOK=1                               ! We are transmitting | ||||
| 
 | ||||
| ! If TxOK was just lowered, start a countdown for lowering PTT: | ||||
|   nc0a=(tlatency+txdelay)/0.18576 | ||||
|   if(nc0a.lt.5) nc0a=5 | ||||
|   if(TxOK.eq.0 .and. TxOKz.eq.1 .and. iptt.eq.1) nc0=-nc0a-1 | ||||
|   if(nc0.le.0) nc0=nc0+1 | ||||
|   if(nc0.eq.0) i3=ptt(nport,pttport,0,iptt) | ||||
| 
 | ||||
|   if(iptt.eq.0 .and.TxOK.eq.0) then | ||||
|      sending="                      " | ||||
|      sendingsh=0 | ||||
|   endif | ||||
| 
 | ||||
|   nbufs=ibuf-ibuf0 | ||||
|   if(nbufs.lt.0) nbufs=nbufs+1024 | ||||
|   tdata=nbufs*2048.0/11025.0 | ||||
|   if(mode(1:4).eq.'JT65' .and. monitoring.eq.1 .and. tdata.gt.53.0    & | ||||
|        .and. ibuf0.ne.ibuf00) then | ||||
|      rxdone=.true. | ||||
|      ibuf00=ibuf0 | ||||
|   endif | ||||
|   iptt0=iptt | ||||
|   TxOKz=TxOK | ||||
|   ntr0=ntr | ||||
| 
 | ||||
|   return | ||||
| end subroutine fivehz | ||||
| 
 | ||||
| subroutine fivehztx | ||||
| 
 | ||||
| !  Called at interrupt level from the PortAudio output callback. | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   use dflib | ||||
|   use dfport | ||||
| #endif | ||||
| 
 | ||||
|   parameter (NTRING=64) | ||||
|   real*8 tt1(0:NTRING-1) | ||||
|   logical first,filled | ||||
|   real*8 fs,fsample,tt,u | ||||
|   include 'gcom1.f90' | ||||
|   data first/.true./ | ||||
|   save | ||||
| 
 | ||||
|   n1=time() | ||||
|   n2=mod(n1,86400) | ||||
|   tt=n1-n2+tsec-0.1d0*ndsec | ||||
| 
 | ||||
|   if(first) then | ||||
|      first=.false. | ||||
|      ncall=-1 | ||||
|      fsample=11025.d0 | ||||
|      u=0.05d0 | ||||
|      mfsample2=110250 | ||||
|      filled=.false. | ||||
|   endif | ||||
| 
 | ||||
| ! Measure average sampling frequency over a recent interval | ||||
|   ncall=ncall+1 | ||||
|   if(ncall.eq.9) then | ||||
|      ntt0=0 | ||||
|      ntt1=0 | ||||
|      tt1(ntt1)=tt | ||||
|   endif | ||||
|   if(ncall.ge.10) then | ||||
|      ntt1=iand(ntt1+1,NTRING-1) | ||||
|      tt1(ntt1)=tt | ||||
|      if(ntt1.eq.NTRING-1) filled=.true. | ||||
|      if(filled) ntt0=iand(ntt1+1,NTRING-1) | ||||
|      if(mod(ncall,2).eq.1) then | ||||
|         nd=ntt1-ntt0 | ||||
|         if(nd.lt.0) nd=nd+NTRING | ||||
|         fs=nd*2048.d0/(tt1(ntt1)-tt1(ntt0)) | ||||
|         fsample=u*fs + (1.d0-u)*fsample | ||||
|         mfsample2=nint(10.d0*fsample) | ||||
|      endif | ||||
|   endif | ||||
| 
 | ||||
|   return | ||||
| end subroutine fivehztx | ||||
| 
 | ||||
| subroutine addnoise(n) | ||||
|   integer*2 n | ||||
|   real*8 txsnrdb0 | ||||
|   include 'gcom1.f90' | ||||
|   data idum/0/ | ||||
|   save | ||||
| 
 | ||||
|   if(txsnrdb.gt.40.0) return | ||||
|   if(txsnrdb.ne.txsnrdb0) then | ||||
|      snr=10.0**(0.05*(txsnrdb-1)) | ||||
|      fac=3000.0 | ||||
|      if(snr.gt.1.0) fac=3000.0/snr | ||||
|      txsnrdb0=txsnrdb | ||||
|   endif | ||||
|   i=fac*(gran(idum) + n*snr/32768.0) | ||||
|   if(i>32767) i=32767; | ||||
|   if(i<-32767) i=-32767; | ||||
|   n=i | ||||
| 
 | ||||
|   return | ||||
| end subroutine addnoise | ||||
| 
 | ||||
| real function gran(idum) | ||||
|   real r(12) | ||||
|   if(idum.lt.0) then | ||||
|      call random_seed | ||||
|      idum=0 | ||||
|   endif | ||||
|   call random_number(r) | ||||
|   gran=sum(r)-6.0 | ||||
| end function gran | ||||
							
								
								
									
										5
									
								
								fivehz.h
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								fivehz.h
									
									
									
									
									
								
							| @ -1,5 +0,0 @@ | ||||
| #include <inttypes.h> | ||||
| 
 | ||||
| void addnoise_(int16_t *n2); | ||||
| void fivehztx_(void); | ||||
| void fivehz_(void); | ||||
							
								
								
									
										30
									
								
								flat1.f
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								flat1.f
									
									
									
									
									
								
							| @ -1,30 +0,0 @@ | ||||
|       subroutine flat1(psavg,s2,nh,nsteps,nhmax,nsmax) | ||||
| 
 | ||||
|       real psavg(nh) | ||||
|       real s2(nhmax,nsmax) | ||||
|       real x(8192),tmp(33) | ||||
| 
 | ||||
|       nsmo=33 | ||||
|       ia=nsmo/2 + 1 | ||||
|       ib=nh - nsmo/2 - 1 | ||||
|       do i=ia,ib | ||||
|          call pctile(psavg(i-nsmo/2),tmp,nsmo,50,x(i)) | ||||
|       enddo | ||||
|       do i=1,ia-1 | ||||
|          x(i)=x(ia) | ||||
|       enddo | ||||
|       do i=ib+1,nh | ||||
|          x(i)=x(ib) | ||||
|       enddo | ||||
| 
 | ||||
|       do i=1,nh | ||||
|          psavg(i)=psavg(i)/x(i) | ||||
|          do j=1,nsteps | ||||
|             s2(i,j)=s2(i,j)/x(i) | ||||
|          enddo | ||||
|       enddo | ||||
| 
 | ||||
|       return | ||||
|       end | ||||
| 
 | ||||
|        | ||||
							
								
								
									
										28
									
								
								flat2.f
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								flat2.f
									
									
									
									
									
								
							| @ -1,28 +0,0 @@ | ||||
|       subroutine flat2(ss,n,nsum) | ||||
| 
 | ||||
|       real ss(2048) | ||||
|       real ref(2048) | ||||
|       real tmp(2048) | ||||
| 
 | ||||
|       nsmo=20 | ||||
|       base=50*(float(nsum)**1.5) | ||||
|       ia=nsmo+1 | ||||
|       ib=n-nsmo-1 | ||||
|       do i=ia,ib | ||||
|          call pctile(ss(i-nsmo),tmp,2*nsmo+1,50,ref(i)) | ||||
|       enddo | ||||
|       call pctile(ref(ia),tmp,ib-ia+1,68,base2) | ||||
| 
 | ||||
| C  Don't flatten if signal is extremely low (e.g., RX is off). | ||||
|       if(base2.gt.0.05*base) then | ||||
|          do i=ia,ib | ||||
|             ss(i)=base*ss(i)/ref(i) | ||||
|          enddo | ||||
|       else | ||||
|          do i=1,n | ||||
|             ss(i)=0. | ||||
|          enddo | ||||
|       endif | ||||
| 
 | ||||
|       return | ||||
|       end | ||||
							
								
								
									
										105
									
								
								flatten.f
									
									
									
									
									
								
							
							
						
						
									
										105
									
								
								flatten.f
									
									
									
									
									
								
							| @ -1,105 +0,0 @@ | ||||
|       subroutine flatten(s2,nbins,jz,psa,ref,birdie,variance) | ||||
| 
 | ||||
| C  Examines the 2-d spectrum s2(nbins,jz) and makes a reference spectrum | ||||
| C  from the jz/2 spectra below the 50th percentile in total power.  Uses | ||||
| C  reference spectrum (with birdies removed) to flatten the passband. | ||||
| 
 | ||||
|       real s2(nbins,jz)               !2d spectrum | ||||
|       real psa(nbins)                 !Grand average spectrum | ||||
|       real ref(nbins)                 !Ref spect: smoothed ave of lower half | ||||
|       real birdie(nbins)              !Spec (with birdies) for plot, in dB | ||||
|       real variance(nbins) | ||||
|       real ref2(750)                  !Work array | ||||
|       real power(300) | ||||
|        | ||||
| C  Find power in each time block, then get median | ||||
|       do j=1,jz | ||||
|          s=0. | ||||
|          do i=1,nbins | ||||
|             s=s+s2(i,j) | ||||
|          enddo | ||||
|          power(j)=s | ||||
|       enddo | ||||
|       call pctile(power,ref2,jz,50,xmedian) | ||||
|       if(jz.lt.5) go to 900 | ||||
| 
 | ||||
| C  Get variance in each freq channel, using only those spectra with | ||||
| C  power below the median. | ||||
|       do i=1,nbins                         | ||||
|          s=0. | ||||
|          nsum=0 | ||||
|          do j=1,jz | ||||
|             if(power(j).le.xmedian) then | ||||
|                s=s+s2(i,j) | ||||
|                nsum=nsum+1 | ||||
|             endif | ||||
|          enddo | ||||
|          s=s/nsum | ||||
|          sq=0. | ||||
|          do j=1,jz | ||||
|             if(power(j).le.xmedian) sq=sq + (s2(i,j)/s-1.0)**2 | ||||
|          enddo | ||||
|          variance(i)=sq/nsum | ||||
|       enddo | ||||
| 
 | ||||
| C  Get grand average, and average of spectra with power below median. | ||||
|       call zero(psa,nbins) | ||||
|       call zero(ref,nbins) | ||||
|       nsum=0 | ||||
|       do j=1,jz | ||||
|          call add(psa,s2(1,j),psa,nbins) | ||||
|          if(power(j).le.xmedian) then | ||||
|             call add(ref,s2(1,j),ref,nbins) | ||||
|             nsum=nsum+1 | ||||
|          endif | ||||
|       enddo | ||||
|       do i=1,nbins                          !Normalize the averages | ||||
|          psa(i)=psa(i)/jz | ||||
|          ref(i)=ref(i)/nsum | ||||
|          birdie(i)=ref(i)                   !Copy ref into birdie | ||||
|       enddo | ||||
| 
 | ||||
| C  Compute smoothed reference spectrum with narrow lines (birdies) removed | ||||
|       do i=4,nbins-3 | ||||
|          rmax=-1.e10 | ||||
|          do k=i-3,i+3                  !Get highest point within +/- 3 bins | ||||
|             if(ref(k).gt.rmax) then | ||||
|                rmax=ref(k) | ||||
|                kpk=k | ||||
|             endif | ||||
|          enddo | ||||
|          sum=0. | ||||
|          nsum=0 | ||||
|          do k=i-3,i+3 | ||||
|             if(abs(k-kpk).gt.1) then | ||||
|                sum=sum+ref(k) | ||||
|                nsum=nsum+1 | ||||
|             endif | ||||
|          enddo | ||||
|          ref2(i)=sum/nsum | ||||
|       enddo | ||||
|       call move(ref2(4),ref(4),nbins-6)     !Copy smoothed ref back into ref | ||||
|        | ||||
|       call pctile(ref(4),ref2,nbins-6,50,xmedian)  !Get median in-band level | ||||
| 
 | ||||
| C  Fix ends of reference spectrum | ||||
|       do i=1,3 | ||||
|          ref(i)=ref(4) | ||||
|          ref(nbins+1-i)=ref(nbins-3) | ||||
|       enddo | ||||
| 
 | ||||
|       facmax=30.0/xmedian | ||||
|       do i=1,nbins                          !Flatten the 2d spectrum | ||||
|          fac=xmedian/ref(i) | ||||
|          fac=min(fac,facmax) | ||||
|          do j=1,jz | ||||
|             s2(i,j)=fac*s2(i,j) | ||||
|          enddo | ||||
|          psa(i)=dB(psa(i)) + 25. | ||||
|          ref(i)=dB(ref(i)) + 25. | ||||
|          birdie(i)=db(birdie(i)) + 25. | ||||
|       enddo | ||||
| 
 | ||||
| 900   continue | ||||
|       return | ||||
|       end | ||||
							
								
								
									
										10
									
								
								flushqqq.f90
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								flushqqq.f90
									
									
									
									
									
								
							| @ -1,10 +0,0 @@ | ||||
| subroutine flushqqq(lu) | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   use dfport | ||||
| #endif | ||||
| 
 | ||||
|   call flush(lu) | ||||
| 
 | ||||
|   return | ||||
| end subroutine flushqqq | ||||
							
								
								
									
										350
									
								
								four2.f
									
									
									
									
									
								
							
							
						
						
									
										350
									
								
								four2.f
									
									
									
									
									
								
							| @ -1,350 +0,0 @@ | ||||
|       SUBROUTINE FOUR2a (DATA,N,NDIM,ISIGN,IFORM) | ||||
| 
 | ||||
| C     Cooley-Tukey fast Fourier transform in USASI basic Fortran. | ||||
| C     multi-dimensional transform, each dimension a power of two, | ||||
| C     complex or real data. | ||||
| 
 | ||||
| C     TRANSFORM(K1,K2,...) = SUM(DATA(J1,J2,...)*EXP(ISIGN*2*PI*SQRT(-1) | ||||
| C     *((J1-1)*(K1-1)/N(1)+(J2-1)*(K2-1)/N(2)+...))), summed for all | ||||
| C     J1 and K1 from 1 to N(1), J2 and K2 from 1 TO N(2), | ||||
| C     etc, for all NDIM subscripts.  NDIM must be positive and | ||||
| C     each N(IDIM) must be a power of two.  ISIGN is +1 or -1. | ||||
| C     Let NTOT = N(1)*N(2)*...*N(NDIM).  Then a -1 transform | ||||
| C     followed by a +1 one (or vice versa) returns NTOT | ||||
| C     times the original data.   | ||||
| 
 | ||||
| C     IFORM = 1, 0 or -1, as data is | ||||
| C     complex, real, or the first half of a complex array.  Transform | ||||
| C     values are returned in array DATA.  They are complex, real, or | ||||
| C     the first half of a complex array, as IFORM = 1, -1 or 0. | ||||
| 
 | ||||
| C     The transform of a real array (IFORM = 0) dimensioned N(1) by N(2) | ||||
| C     by ... will be returned in the same array, now considered to | ||||
| C     be complex of dimensions N(1)/2+1 by N(2) by ....  Note that if | ||||
| C     IFORM = 0 or -1, N(1) must be even, and enough room must be | ||||
| C     reserved.  The missing values may be obtained by complex conjuga- | ||||
| C     tion.   | ||||
| 
 | ||||
| C     The reverse transformation of a half complex array dimensioned | ||||
| C     N(1)/2+1 by N(2) by ..., is accomplished by setting IFORM | ||||
| C     to -1.  In the N array, N(1) must be the true N(1), not N(1)/2+1. | ||||
| C     The transform will be real and returned to the input array. | ||||
| 
 | ||||
| C     Running time is proportional to NTOT*LOG2(NTOT), rather than | ||||
| C     the naive NTOT**2.  Furthermore, less error is built up. | ||||
| 
 | ||||
| C     Written by Norman Brenner of MIT Lincoln Laboratory, January 1969. | ||||
| C     See IEEE Audio Transactions (June 1967), Special issue on FFT. | ||||
| 
 | ||||
|       parameter(NMAX=2048*1024) | ||||
|       DIMENSION DATA(NMAX), N(1) | ||||
|       NTOT=1 | ||||
|       DO 10 IDIM=1,NDIM | ||||
|  10   NTOT=NTOT*N(IDIM) | ||||
|       IF (IFORM) 70,20,20 | ||||
|  20   NREM=NTOT | ||||
|       DO 60 IDIM=1,NDIM | ||||
|       NREM=NREM/N(IDIM) | ||||
|       NPREV=NTOT/(N(IDIM)*NREM) | ||||
|       NCURR=N(IDIM) | ||||
|       IF (IDIM-1+IFORM) 30,30,40 | ||||
|  30   NCURR=NCURR/2 | ||||
|  40   CALL BITRV (DATA,NPREV,NCURR,NREM) | ||||
|       CALL COOL2 (DATA,NPREV,NCURR,NREM,ISIGN) | ||||
|       IF (IDIM-1+IFORM) 50,50,60 | ||||
|  50   CALL FIXRL (DATA,N(1),NREM,ISIGN,IFORM) | ||||
|       NTOT=(NTOT/N(1))*(N(1)/2+1) | ||||
|  60   CONTINUE | ||||
|       RETURN | ||||
|  70   NTOT=(NTOT/N(1))*(N(1)/2+1) | ||||
|       NREM=1 | ||||
|       DO 100 JDIM=1,NDIM | ||||
|       IDIM=NDIM+1-JDIM | ||||
|       NCURR=N(IDIM) | ||||
|       IF (IDIM-1) 80,80,90 | ||||
|  80   NCURR=NCURR/2 | ||||
|       CALL FIXRL (DATA,N(1),NREM,ISIGN,IFORM) | ||||
|       NTOT=NTOT/(N(1)/2+1)*N(1) | ||||
|  90   NPREV=NTOT/(N(IDIM)*NREM) | ||||
|       CALL BITRV (DATA,NPREV,NCURR,NREM) | ||||
|       CALL COOL2 (DATA,NPREV,NCURR,NREM,ISIGN) | ||||
|  100  NREM=NREM*N(IDIM) | ||||
|       RETURN | ||||
|       END | ||||
|       SUBROUTINE BITRV (DATA,NPREV,N,NREM) | ||||
| C     SHUFFLE THE DATA BY BIT REVERSAL. | ||||
| C     DIMENSION DATA(NPREV,N,NREM) | ||||
| C     COMPLEX DATA | ||||
| C     EXCHANGE DATA(J1,J4REV,J5) WITH DATA(J1,J4,J5) FOR ALL J1 FROM 1 | ||||
| C     TO NPREV, ALL J4 FROM 1 TO N (WHICH MUST BE A POWER OF TWO), AND | ||||
| C     ALL J5 FROM 1 TO NREM.  J4REV-1 IS THE BIT REVERSAL OF J4-1.  E.G. | ||||
| C     SUPPOSE N = 32.  THEN FOR J4-1 = 10011, J4REV-1 = 11001, ETC. | ||||
|       parameter(NMAX=2048*1024) | ||||
|       DIMENSION DATA(NMAX) | ||||
|       IP0=2 | ||||
|       IP1=IP0*NPREV | ||||
|       IP4=IP1*N | ||||
|       IP5=IP4*NREM | ||||
|       I4REV=1 | ||||
| C     I4REV = 1+(J4REV-1)*IP1 | ||||
|       DO 60 I4=1,IP4,IP1 | ||||
| C     I4 = 1+(J4-1)*IP1 | ||||
|       IF (I4-I4REV) 10,30,30 | ||||
|  10   I1MAX=I4+IP1-IP0 | ||||
|       DO 20 I1=I4,I1MAX,IP0 | ||||
| C     I1 = 1+(J1-1)*IP0+(J4-1)*IP1 | ||||
|       DO 20 I5=I1,IP5,IP4 | ||||
| C     I5 = 1+(J1-1)*IP0+(J4-1)*IP1+(J5-1)*IP4 | ||||
|       I5REV=I4REV+I5-I4 | ||||
| C     I5REV = 1+(J1-1)*IP0+(J4REV-1)*IP1+(J5-1)*IP4 | ||||
|       TEMPR=DATA(I5) | ||||
|       TEMPI=DATA(I5+1) | ||||
|       DATA(I5)=DATA(I5REV) | ||||
|       DATA(I5+1)=DATA(I5REV+1) | ||||
|       DATA(I5REV)=TEMPR | ||||
|  20   DATA(I5REV+1)=TEMPI | ||||
| C     ADD ONE WITH DOWNWARD CARRY TO THE HIGH ORDER BIT OF J4REV-1. | ||||
|  30   IP2=IP4/2 | ||||
|  40   IF (I4REV-IP2) 60,60,50 | ||||
|  50   I4REV=I4REV-IP2 | ||||
|       IP2=IP2/2 | ||||
|       IF (IP2-IP1) 60,40,40 | ||||
|  60   I4REV=I4REV+IP2 | ||||
|       RETURN | ||||
|       END | ||||
|       SUBROUTINE COOL2 (DATA,NPREV,N,NREM,ISIGN) | ||||
| C     DISCRETE FOURIER TRANSFORM OF LENGTH N.  IN-PLACE COOLEY-TUKEY | ||||
| C     ALGORITHM, BIT-REVERSED TO NORMAL ORDER, SANDE-TUKEY PHASE SHIFTS. | ||||
| C     DIMENSION DATA(NPREV,N,NREM) | ||||
| C     COMPLEX DATA | ||||
| C     DATA(J1,K4,J5) = SUM(DATA(J1,J4,J5)*EXP(ISIGN*2*PI*I*(J4-1)* | ||||
| C     (K4-1)/N)), SUMMED OVER J4 = 1 TO N FOR ALL J1 FROM 1 TO NPREV, | ||||
| C     K4 FROM 1 TO N AND J5 FROM 1 TO NREM.  N MUST BE A POWER OF TWO. | ||||
| C     METHOD--LET IPREV TAKE THE VALUES 1, 2 OR 4, 4 OR 8, ..., N/16, | ||||
| C     N/4, N.  THE CHOICE BETWEEN 2 OR 4, ETC., DEPENDS ON WHETHER N IS | ||||
| C     A POWER OF FOUR.  DEFINE IFACT = 2 OR 4, THE NEXT FACTOR THAT | ||||
| C     IPREV MUST TAKE, AND IREM = N/(IFACT*IPREV).  THEN-- | ||||
| C     DIMENSION DATA(NPREV,IPREV,IFACT,IREM,NREM) | ||||
| C     COMPLEX DATA | ||||
| C     DATA(J1,J2,K3,J4,J5) = SUM(DATA(J1,J2,J3,J4,J5)*EXP(ISIGN*2*PI*I* | ||||
| C     (K3-1)*((J3-1)/IFACT+(J2-1)/(IFACT*IPREV)))), SUMMED OVER J3 = 1 | ||||
| C     TO IFACT FOR ALL J1 FROM 1 TO NPREV, J2 FROM 1 TO IPREV, K3 FROM | ||||
| C     1 TO IFACT, J4 FROM 1 TO IREM AND J5 FROM 1 TO NREM.  THIS IS | ||||
| C     A PHASE-SHIFTED DISCRETE FOURIER TRANSFORM OF LENGTH IFACT. | ||||
| C     FACTORING N BY FOURS SAVES ABOUT TWENTY FIVE PERCENT OVER FACTOR- | ||||
| C     ING BY TWOS.  DATA MUST BE BIT-REVERSED INITIALLY. | ||||
| C     IT IS NOT NECESSARY TO REWRITE THIS SUBROUTINE INTO COMPLEX | ||||
| C     NOTATION SO LONG AS THE FORTRAN COMPILER USED STORES REAL AND | ||||
| C     IMAGINARY PARTS IN ADJACENT STORAGE LOCATIONS.  IT MUST ALSO | ||||
| C     STORE ARRAYS WITH THE FIRST SUBSCRIPT INCREASING FASTEST. | ||||
|       parameter(NMAX=2048*1024) | ||||
|       DIMENSION DATA(NMAX) | ||||
| 
 | ||||
|       real*8 twopi,wstpr,wstpi,wr,wi,w2r,w2i,w3r,w3i,wtempr | ||||
| 
 | ||||
|       TWOPI=6.2831853072*FLOAT(ISIGN) | ||||
|       IP0=2 | ||||
|       IP1=IP0*NPREV | ||||
|       IP4=IP1*N | ||||
|       IP5=IP4*NREM | ||||
|       IP2=IP1 | ||||
| C     IP2=IP1*IPROD | ||||
|       NPART=N | ||||
|  10   IF (NPART-2) 60,30,20 | ||||
|  20   NPART=NPART/4 | ||||
|       GO TO 10 | ||||
| C     DO A FOURIER TRANSFORM OF LENGTH TWO | ||||
|  30   IF (IP2-IP4) 40,160,160 | ||||
|  40   IP3=IP2*2 | ||||
| C     IP3=IP2*IFACT | ||||
|       DO 50 I1=1,IP1,IP0 | ||||
| C     I1 = 1+(J1-1)*IP0 | ||||
|       DO 50 I5=I1,IP5,IP3 | ||||
| C     I5 = 1+(J1-1)*IP0+(J4-1)*IP3+(J5-1)*IP4 | ||||
|       I3A=I5 | ||||
|       I3B=I3A+IP2 | ||||
| C     I3 = 1+(J1-1)*IP0+(J2-1)*IP1+(J3-1)*IP2+(J4-1)*IP3+(J5-1)*IP4 | ||||
|       TEMPR=DATA(I3B) | ||||
|       TEMPI=DATA(I3B+1) | ||||
|       DATA(I3B)=DATA(I3A)-TEMPR | ||||
|       DATA(I3B+1)=DATA(I3A+1)-TEMPI | ||||
|       DATA(I3A)=DATA(I3A)+TEMPR | ||||
|  50   DATA(I3A+1)=DATA(I3A+1)+TEMPI | ||||
|       IP2=IP3 | ||||
| C     DO A FOURIER TRANSFORM OF LENGTH FOUR (FROM BIT REVERSED ORDER) | ||||
|  60   IF (IP2-IP4) 70,160,160 | ||||
|  70   IP3=IP2*4 | ||||
| C     IP3=IP2*IFACT | ||||
| C     COMPUTE TWOPI THRU WR AND WI IN DOUBLE PRECISION, IF AVAILABLE. | ||||
|       THETA=TWOPI/FLOAT(IP3/IP1) | ||||
|       SINTH=SIN(THETA/2) | ||||
|       WSTPR=-2*SINTH*SINTH | ||||
|       WSTPI=SIN(THETA) | ||||
|       WR=1. | ||||
|       WI=0. | ||||
|       DO 150 I2=1,IP2,IP1 | ||||
| C     I2 = 1+(J2-1)*IP1 | ||||
|       IF (I2-1) 90,90,80 | ||||
|  80   W2R=WR*WR-WI*WI | ||||
|       W2I=2*WR*WI | ||||
|       W3R=W2R*WR-W2I*WI | ||||
|       W3I=W2R*WI+W2I*WR | ||||
|  90   I1MAX=I2+IP1-IP0 | ||||
|       DO 140 I1=I2,I1MAX,IP0 | ||||
| C     I1 = 1+(J1-1)*IP0+(J2-1)*IP1 | ||||
|       DO 140 I5=I1,IP5,IP3 | ||||
| C     I5 = 1+(J1-1)*IP0+(J2-1)*IP1+(J4-1)*IP3+(J5-1)*IP4 | ||||
|       I3A=I5 | ||||
|       I3B=I3A+IP2 | ||||
|       I3C=I3B+IP2 | ||||
|       I3D=I3C+IP2 | ||||
| C     I3 = 1+(J1-1)*IP0+(J2-1)*IP1+(J3-1)*IP2+(J4-1)*IP3+(J5-1)*IP4 | ||||
|       IF (I2-1) 110,110,100 | ||||
| C     APPLY THE PHASE SHIFT FACTORS | ||||
|  100  TEMPR=DATA(I3B) | ||||
|       DATA(I3B)=W2R*DATA(I3B)-W2I*DATA(I3B+1) | ||||
|       DATA(I3B+1)=W2R*DATA(I3B+1)+W2I*TEMPR | ||||
|       TEMPR=DATA(I3C) | ||||
|       DATA(I3C)=WR*DATA(I3C)-WI*DATA(I3C+1) | ||||
|       DATA(I3C+1)=WR*DATA(I3C+1)+WI*TEMPR | ||||
|       TEMPR=DATA(I3D) | ||||
|       DATA(I3D)=W3R*DATA(I3D)-W3I*DATA(I3D+1) | ||||
|       DATA(I3D+1)=W3R*DATA(I3D+1)+W3I*TEMPR | ||||
|  110  T0R=DATA(I3A)+DATA(I3B) | ||||
|       T0I=DATA(I3A+1)+DATA(I3B+1) | ||||
|       T1R=DATA(I3A)-DATA(I3B) | ||||
|       T1I=DATA(I3A+1)-DATA(I3B+1) | ||||
|       T2R=DATA(I3C)+DATA(I3D) | ||||
|       T2I=DATA(I3C+1)+DATA(I3D+1) | ||||
|       T3R=DATA(I3C)-DATA(I3D) | ||||
|       T3I=DATA(I3C+1)-DATA(I3D+1) | ||||
|       DATA(I3A)=T0R+T2R | ||||
|       DATA(I3A+1)=T0I+T2I | ||||
|       DATA(I3C)=T0R-T2R | ||||
|       DATA(I3C+1)=T0I-T2I | ||||
|       IF (ISIGN) 120,120,130 | ||||
|  120  T3R=-T3R | ||||
|       T3I=-T3I | ||||
|  130  DATA(I3B)=T1R-T3I | ||||
|       DATA(I3B+1)=T1I+T3R | ||||
|       DATA(I3D)=T1R+T3I | ||||
|  140  DATA(I3D+1)=T1I-T3R | ||||
|       WTEMPR=WR | ||||
|       WR=WSTPR*WTEMPR-WSTPI*WI+WTEMPR | ||||
|  150  WI=WSTPR*WI+WSTPI*WTEMPR+WI | ||||
|       IP2=IP3 | ||||
|       GO TO 60 | ||||
|  160  RETURN | ||||
|       END | ||||
|       SUBROUTINE FIXRL (DATA,N,NREM,ISIGN,IFORM) | ||||
| C     FOR IFORM = 0, CONVERT THE TRANSFORM OF A DOUBLED-UP REAL ARRAY, | ||||
| C     CONSIDERED COMPLEX, INTO ITS TRUE TRANSFORM.  SUPPLY ONLY THE | ||||
| C     FIRST HALF OF THE COMPLEX TRANSFORM, AS THE SECOND HALF HAS | ||||
| C     CONJUGATE SYMMETRY.  FOR IFORM = -1, CONVERT THE FIRST HALF | ||||
| C     OF THE TRUE TRANSFORM INTO THE TRANSFORM OF A DOUBLED-UP REAL | ||||
| C     ARRAY.  N MUST BE EVEN. | ||||
| C     USING COMPLEX NOTATION AND SUBSCRIPTS STARTING AT ZERO, THE | ||||
| C     TRANSFORMATION IS-- | ||||
| C     DIMENSION DATA(N,NREM) | ||||
| C     ZSTP = EXP(ISIGN*2*PI*I/N) | ||||
| C     DO 10 I2=0,NREM-1 | ||||
| C     DATA(0,I2) = CONJ(DATA(0,I2))*(1+I) | ||||
| C     DO 10 I1=1,N/4 | ||||
| C     Z = (1+(2*IFORM+1)*I*ZSTP**I1)/2 | ||||
| C     I1CNJ = N/2-I1 | ||||
| C     DIF = DATA(I1,I2)-CONJ(DATA(I1CNJ,I2)) | ||||
| C     TEMP = Z*DIF | ||||
| C     DATA(I1,I2) = (DATA(I1,I2)-TEMP)*(1-IFORM) | ||||
| C 10  DATA(I1CNJ,I2) = (DATA(I1CNJ,I2)+CONJ(TEMP))*(1-IFORM) | ||||
| C     IF I1=I1CNJ, THE CALCULATION FOR THAT VALUE COLLAPSES INTO | ||||
| C     A SIMPLE CONJUGATION OF DATA(I1,I2). | ||||
|       parameter(NMAX=2048*1024) | ||||
|       DIMENSION DATA(NMAX) | ||||
|       TWOPI=6.283185307*FLOAT(ISIGN) | ||||
|       IP0=2 | ||||
|       IP1=IP0*(N/2) | ||||
|       IP2=IP1*NREM | ||||
|       IF (IFORM) 10,70,70 | ||||
| C     PACK THE REAL INPUT VALUES (TWO PER COLUMN) | ||||
|  10   J1=IP1+1 | ||||
|       DATA(2)=DATA(J1) | ||||
|       IF (NREM-1) 70,70,20 | ||||
|  20   J1=J1+IP0 | ||||
|       I2MIN=IP1+1 | ||||
|       DO 60 I2=I2MIN,IP2,IP1 | ||||
|       DATA(I2)=DATA(J1) | ||||
|       J1=J1+IP0 | ||||
|       IF (N-2) 50,50,30 | ||||
|  30   I1MIN=I2+IP0 | ||||
|       I1MAX=I2+IP1-IP0 | ||||
|       DO 40 I1=I1MIN,I1MAX,IP0 | ||||
|       DATA(I1)=DATA(J1) | ||||
|       DATA(I1+1)=DATA(J1+1) | ||||
|  40   J1=J1+IP0 | ||||
|  50   DATA(I2+1)=DATA(J1) | ||||
|  60   J1=J1+IP0 | ||||
|  70   DO 80 I2=1,IP2,IP1 | ||||
|       TEMPR=DATA(I2) | ||||
|       DATA(I2)=DATA(I2)+DATA(I2+1) | ||||
|  80   DATA(I2+1)=TEMPR-DATA(I2+1) | ||||
|       IF (N-2) 200,200,90 | ||||
|  90   THETA=TWOPI/FLOAT(N) | ||||
|       SINTH=SIN(THETA/2.) | ||||
|       ZSTPR=-2.*SINTH*SINTH | ||||
|       ZSTPI=SIN(THETA) | ||||
|       ZR=(1.-ZSTPI)/2. | ||||
|       ZI=(1.+ZSTPR)/2. | ||||
|       IF (IFORM) 100,110,110 | ||||
|  100  ZR=1.-ZR | ||||
|       ZI=-ZI | ||||
|  110  I1MIN=IP0+1 | ||||
|       I1MAX=IP0*(N/4)+1 | ||||
|       DO 190 I1=I1MIN,I1MAX,IP0 | ||||
|       DO 180 I2=I1,IP2,IP1 | ||||
|       I2CNJ=IP0*(N/2+1)-2*I1+I2 | ||||
|       IF (I2-I2CNJ) 150,120,120 | ||||
|  120  IF (ISIGN*(2*IFORM+1)) 130,140,140 | ||||
|  130  DATA(I2+1)=-DATA(I2+1) | ||||
|  140  IF (IFORM) 170,180,180 | ||||
|  150  DIFR=DATA(I2)-DATA(I2CNJ) | ||||
|       DIFI=DATA(I2+1)+DATA(I2CNJ+1) | ||||
|       TEMPR=DIFR*ZR-DIFI*ZI | ||||
|       TEMPI=DIFR*ZI+DIFI*ZR | ||||
|       DATA(I2)=DATA(I2)-TEMPR | ||||
|       DATA(I2+1)=DATA(I2+1)-TEMPI | ||||
|       DATA(I2CNJ)=DATA(I2CNJ)+TEMPR | ||||
|       DATA(I2CNJ+1)=DATA(I2CNJ+1)-TEMPI | ||||
|       IF (IFORM) 160,180,180 | ||||
|  160  DATA(I2CNJ)=DATA(I2CNJ)+DATA(I2CNJ) | ||||
|       DATA(I2CNJ+1)=DATA(I2CNJ+1)+DATA(I2CNJ+1) | ||||
|  170  DATA(I2)=DATA(I2)+DATA(I2) | ||||
|       DATA(I2+1)=DATA(I2+1)+DATA(I2+1) | ||||
|  180  CONTINUE | ||||
|       TEMPR=ZR-.5 | ||||
|       ZR=ZSTPR*TEMPR-ZSTPI*ZI+ZR | ||||
|  190  ZI=ZSTPR*ZI+ZSTPI*TEMPR+ZI | ||||
| C     RECURSION SAVES TIME, AT A SLIGHT LOSS IN ACCURACY.  IF AVAILABLE, | ||||
| C     USE DOUBLE PRECISION TO COMPUTE ZR AND ZI. | ||||
|  200  IF (IFORM) 270,210,210 | ||||
| C     UNPACK THE REAL TRANSFORM VALUES (TWO PER COLUMN) | ||||
|  210  I2=IP2+1 | ||||
|       I1=I2 | ||||
|       J1=IP0*(N/2+1)*NREM+1 | ||||
|       GO TO 250 | ||||
|  220  DATA(J1)=DATA(I1) | ||||
|       DATA(J1+1)=DATA(I1+1) | ||||
|       I1=I1-IP0 | ||||
|       J1=J1-IP0 | ||||
|  230  IF (I2-I1) 220,240,240 | ||||
|  240  DATA(J1)=DATA(I1) | ||||
|       DATA(J1+1)=0. | ||||
|  250  I2=I2-IP1 | ||||
|       J1=J1-IP0 | ||||
|       DATA(J1)=DATA(I2+1) | ||||
|       DATA(J1+1)=0. | ||||
|       I1=I1-IP0 | ||||
|       J1=J1-IP0 | ||||
|       IF (I2-1) 260,260,230 | ||||
|  260  DATA(2)=0. | ||||
|  270  RETURN | ||||
|       END | ||||
							
								
								
									
										111
									
								
								four2a.f
									
									
									
									
									
								
							
							
						
						
									
										111
									
								
								four2a.f
									
									
									
									
									
								
							| @ -1,111 +0,0 @@ | ||||
|       subroutine four2a(a,nfft,ndim,isign,iform) | ||||
| 
 | ||||
| C     IFORM = 1, 0 or -1, as data is | ||||
| C     complex, real, or the first half of a complex array.  Transform | ||||
| C     values are returned in array DATA.  They are complex, real, or | ||||
| C     the first half of a complex array, as IFORM = 1, -1 or 0. | ||||
| 
 | ||||
| C     The transform of a real array (IFORM = 0) dimensioned N(1) by N(2) | ||||
| C     by ... will be returned in the same array, now considered to | ||||
| C     be complex of dimensions N(1)/2+1 by N(2) by ....  Note that if | ||||
| C     IFORM = 0 or -1, N(1) must be even, and enough room must be | ||||
| C     reserved.  The missing values may be obtained by complex conjuga- | ||||
| C     tion.   | ||||
| 
 | ||||
| C     The reverse transformation of a half complex array dimensioned | ||||
| C     N(1)/2+1 by N(2) by ..., is accomplished by setting IFORM | ||||
| C     to -1.  In the N array, N(1) must be the true N(1), not N(1)/2+1. | ||||
| C     The transform will be real and returned to the input array. | ||||
| 
 | ||||
|       parameter (NPMAX=100) | ||||
|       parameter (NSMALL=16384) | ||||
|       complex a(nfft) | ||||
|       complex aa(NSMALL) | ||||
|       integer nn(NPMAX),ns(NPMAX),nf(NPMAX),nl(NPMAX) | ||||
|       real*8 plan(NPMAX)             !Actually should be i*8, but no matter | ||||
|       data nplan/0/ | ||||
|       include 'fftw3.f' | ||||
|       save plan,nplan,nn,ns,nf,nl | ||||
| 
 | ||||
|       if(nfft.lt.0 .or. ndim.lt.0) go to 999 | ||||
| 
 | ||||
|       nloc=loc(a) | ||||
|       do i=1,nplan | ||||
|          if(nfft.eq.nn(i) .and. isign.eq.ns(i) .and. | ||||
|      +      iform.eq.nf(i) .and. nloc.eq.nl(i)) go to 10 | ||||
|       enddo | ||||
|       if(nplan.ge.NPMAX) stop 'Too many FFTW plans requested.' | ||||
|       nplan=nplan+1 | ||||
|       i=nplan | ||||
|       nn(i)=nfft | ||||
|       ns(i)=isign | ||||
|       nf(i)=iform | ||||
|       nl(i)=nloc | ||||
| 
 | ||||
| C  Planning: FFTW_ESTIMATE, FFTW_ESTIMATE_PATIENT, FFTW_MEASURE,  | ||||
| C            FFTW_PATIENT,  FFTW_EXHAUSTIVE | ||||
|       npatience=1 | ||||
|       nflags=FFTW_ESTIMATE | ||||
|       if(npatience.eq.1) nflags=FFTW_ESTIMATE_PATIENT | ||||
|       if(npatience.eq.2) nflags=FFTW_MEASURE | ||||
|       if(npatience.eq.3) nflags=FFTW_PATIENT | ||||
|       if(npatience.eq.4) nflags=FFTW_EXHAUSTIVE | ||||
|       if(nfft.le.NSMALL) then | ||||
|          jz=nfft | ||||
|          if(iform.eq.0) jz=nfft/2 | ||||
|          do j=1,jz | ||||
|             aa(j)=a(j) | ||||
|          enddo | ||||
|       endif | ||||
|       call sleep_msec(0) | ||||
|       if(isign.eq.-1 .and. iform.eq.1) then | ||||
| #ifdef CVF | ||||
|          call sfftw_plan_dft_1d_(plan(i),nfft,a,a,FFTW_FORWARD,nflags) | ||||
|       else if(isign.eq.1 .and. iform.eq.1) then | ||||
|          call sfftw_plan_dft_1d_(plan(i),nfft,a,a,FFTW_BACKWARD,nflags) | ||||
|       else if(isign.eq.-1 .and. iform.eq.0) then | ||||
|          call sfftw_plan_dft_r2c_1d_(plan(i),nfft,a,a,nflags) | ||||
|       else if(isign.eq.1 .and. iform.eq.-1) then | ||||
|          call sfftw_plan_dft_c2r_1d_(plan(i),nfft,a,a,nflags) | ||||
| #else | ||||
|          call sfftw_plan_dft_1d(plan(i),nfft,a,a,FFTW_FORWARD,nflags) | ||||
|       else if(isign.eq.1 .and. iform.eq.1) then | ||||
|          call sfftw_plan_dft_1d(plan(i),nfft,a,a,FFTW_BACKWARD,nflags) | ||||
|       else if(isign.eq.-1 .and. iform.eq.0) then | ||||
|          call sfftw_plan_dft_r2c_1d(plan(i),nfft,a,a,nflags) | ||||
|       else if(isign.eq.1 .and. iform.eq.-1) then | ||||
|          call sfftw_plan_dft_c2r_1d(plan(i),nfft,a,a,nflags) | ||||
| #endif | ||||
|       else | ||||
|          stop 'Unsupported request in four2a' | ||||
|       endif | ||||
|       call sleep_msec(0) | ||||
|       i=nplan | ||||
|       if(nfft.le.NSMALL) then | ||||
|          jz=nfft | ||||
|          if(iform.eq.0) jz=nfft/2 | ||||
|          do j=1,jz | ||||
|             a(j)=aa(j) | ||||
|          enddo | ||||
|       endif | ||||
| 
 | ||||
|  10   continue | ||||
|       call sleep_msec(0) | ||||
| #ifdef CVF | ||||
|       call sfftw_execute_(plan(i)) | ||||
| #else | ||||
|       call sfftw_execute(plan(i)) | ||||
| #endif | ||||
|       call sleep_msec(0) | ||||
|       return | ||||
| 
 | ||||
|  999  do i=1,nplan | ||||
| #ifdef CVF | ||||
|          call sfftw_destroy_plan_(plan(i)) | ||||
| #else | ||||
|          call sfftw_destroy_plan(plan(i)) | ||||
| #endif | ||||
|       enddo | ||||
| 
 | ||||
|       return | ||||
|       end | ||||
							
								
								
									
										14
									
								
								fstatqqq.f90
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								fstatqqq.f90
									
									
									
									
									
								
							| @ -1,14 +0,0 @@ | ||||
| subroutine fstatqqq(lu,istat,ierr) | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   use dfport | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   ierr=fstat(lu,istat) | ||||
| #else | ||||
|   call fstat(lu,istat,ierr) | ||||
| #endif | ||||
| 
 | ||||
|   return | ||||
| end subroutine fstatqqq | ||||
							
								
								
									
										74
									
								
								fthread.c
									
									
									
									
									
								
							
							
						
						
									
										74
									
								
								fthread.c
									
									
									
									
									
								
							| @ -1,74 +0,0 @@ | ||||
| /*
 | ||||
| * fthread.c | ||||
| * | ||||
| * pthread library interface to Fortran, for OSs supporting pthreads | ||||
| * | ||||
| * Adapted from code by V. Ganesh | ||||
| */ | ||||
| #include <stdio.h> | ||||
| #include <pthread.h> | ||||
| 
 | ||||
| // Create a new fortran thread through a subroutine.
 | ||||
| void fthread_create_(void *(*thread_func)(void *), pthread_t *theThread)  | ||||
| { | ||||
|   pthread_create(theThread, NULL, thread_func, NULL); | ||||
| }  | ||||
| 
 | ||||
| /*
 | ||||
| // Yield control to other threads
 | ||||
| void fthread_yield_()  | ||||
| { | ||||
|   pthread_yield(); | ||||
| } | ||||
| */ | ||||
| 
 | ||||
| // Return my own thread ID
 | ||||
| pthread_t fthread_self_()  | ||||
| { | ||||
|   return pthread_self(); | ||||
| }  | ||||
| 
 | ||||
| // Lock the execution of all threads until we have the mutex
 | ||||
| int fthread_mutex_lock_(pthread_mutex_t **theMutex)  | ||||
| { | ||||
|   return(pthread_mutex_lock(*theMutex)); | ||||
| } | ||||
| 
 | ||||
| int fthread_mutex_trylock_(pthread_mutex_t **theMutex)  | ||||
| { | ||||
|   return(pthread_mutex_trylock(*theMutex)); | ||||
| } | ||||
| 
 | ||||
| // Unlock the execution of all threads that were stopped by this mutex
 | ||||
| void fthread_mutex_unlock_(pthread_mutex_t **theMutex)  | ||||
| { | ||||
|   pthread_mutex_unlock(*theMutex); | ||||
| } | ||||
| 
 | ||||
| // Get a new mutex object
 | ||||
| void fthread_mutex_init_(pthread_mutex_t **theMutex)  | ||||
| { | ||||
|   *theMutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); | ||||
|   pthread_mutex_init(*theMutex, NULL); | ||||
| } | ||||
| 
 | ||||
| // Release a mutex object
 | ||||
| void fthread_mutex_destroy_(pthread_mutex_t **theMutex)  | ||||
| { | ||||
|   pthread_mutex_destroy(*theMutex); | ||||
|   free(*theMutex); | ||||
| } | ||||
| 
 | ||||
| // Waits for thread ID to join
 | ||||
| void fthread_join(pthread_t *theThread)  | ||||
| { | ||||
|   int value = 0; | ||||
|   pthread_join(*theThread, (void **)&value); | ||||
| } | ||||
| 
 | ||||
| // Exit from a thread
 | ||||
| void fthread_exit_(void *status)  | ||||
| { | ||||
|   pthread_exit(status); | ||||
| } | ||||
| 
 | ||||
							
								
								
									
										171
									
								
								ftn_init.f90
									
									
									
									
									
								
							
							
						
						
									
										171
									
								
								ftn_init.f90
									
									
									
									
									
								
							| @ -1,171 +0,0 @@ | ||||
| ! Fortran logical units used in WSJT6 | ||||
| ! | ||||
| !   10  binary input data, *.tf2 files | ||||
| !   11  decoded.txt | ||||
| !   12  decoded.ave | ||||
| !   13  tsky.dat | ||||
| !   14  azel.dat | ||||
| !   15   | ||||
| !   16 | ||||
| !   17  saved *.tf2 files | ||||
| !   18  test file to be transmitted (wsjtgen.f90) | ||||
| !   19  messages.txt | ||||
| !   20  bandmap.txt | ||||
| !   21  ALL65.TXT | ||||
| !   22  kvasd.dat | ||||
| !   23  CALL3.TXT | ||||
| !   24  meas24.dat | ||||
| !   25  meas25.dat | ||||
| !   26  tmp26.txt | ||||
| !   27  dphi.txt | ||||
| !   28  fftw_wisdom.dat | ||||
| !   29  debug.txt | ||||
| !------------------------------------------------ ftn_init | ||||
| subroutine ftn_init | ||||
| 
 | ||||
|   character*1 cjunk | ||||
|   integer ptt | ||||
|   include 'gcom1.f90' | ||||
|   include 'gcom2.f90' | ||||
|   include 'gcom3.f90' | ||||
|   include 'gcom4.f90' | ||||
| 
 | ||||
|   call cs_init | ||||
|   call cs_lock('ftn_init') | ||||
|   i=ptt(nport,pttport,0,iptt)                       !Clear the PTT line | ||||
|   addpfx='    ' | ||||
|   nrw26=0 | ||||
| 
 | ||||
|   do i=80,1,-1 | ||||
|      if(AppDir(i:i).ne.' ') goto 1 | ||||
|   enddo | ||||
| 1 iz=i | ||||
|   lenappdir=iz | ||||
|   call pfxdump(appdir(:iz)//'/prefixes.txt') | ||||
| 
 | ||||
|   do i=80,1,-1 | ||||
|      if(AzElDir(i:i).ne.' ') goto 2 | ||||
|   enddo | ||||
| 2 iz2=i | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   open(11,file=appdir(:iz)//'/decoded.txt',status='unknown',               & | ||||
|        share='denynone',err=910) | ||||
| #else | ||||
|   open(11,file=appdir(:iz)//'/decoded.txt',status='unknown',               & | ||||
|        err=910) | ||||
| #endif | ||||
|   endfile 11 | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   open(12,file=appdir(:iz)//'/decoded.ave',status='unknown',               & | ||||
|        share='denynone',err=920) | ||||
| #else | ||||
|   open(12,file=appdir(:iz)//'/decoded.ave',status='unknown',               & | ||||
|        err=920) | ||||
| #endif | ||||
|   endfile 12 | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   open(14,file=azeldir(:iz2)//'/azel.dat',status='unknown',                  & | ||||
|        share='denynone',err=930) | ||||
| #else | ||||
|   open(14,file=azeldir(:iz2)//'/azel.dat',status='unknown',                  & | ||||
|        err=930) | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   open(19,file=appdir(:iz)//'/messages.txt',status='unknown',               & | ||||
|        share='denynone',err=911) | ||||
| #else | ||||
|   open(19,file=appdir(:iz)//'/messages.txt',status='unknown',               & | ||||
|        err=911) | ||||
| #endif | ||||
|   endfile 19 | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   open(20,file=appdir(:iz)//'/bandmap.txt',status='unknown',               & | ||||
|        share='denynone',err=912) | ||||
| #else | ||||
|   open(20,file=appdir(:iz)//'/bandmap.txt',status='unknown',               & | ||||
|        err=912) | ||||
| #endif | ||||
|   endfile 20 | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   open(21,file=appdir(:iz)//'/ALL65.TXT',status='unknown',                   & | ||||
|        access='append',share='denynone',err=950) | ||||
| #else | ||||
|   open(21,file=appdir(:iz)//'/ALL65.TXT',status='unknown',                   & | ||||
| 	access='append',err=950) | ||||
|   do i=1,9999999 | ||||
|      read(21,*,end=10) cjunk | ||||
|   enddo | ||||
| 10 continue | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   open(22,file=appdir(:iz)//'/kvasd.dat',access='direct',recl=1024,        & | ||||
|        status='unknown',share='denynone') | ||||
| #else | ||||
|   open(22,file=appdir(:iz)//'/kvasd.dat',access='direct',recl=1024,        & | ||||
|        status='unknown') | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   open(24,file=appdir(:iz)//'/meas24.txt',status='unknown',                 & | ||||
|        share='denynone') | ||||
| #else | ||||
|   open(24,file=appdir(:iz)//'/meas24.txt',status='unknown') | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   open(25,file=appdir(:iz)//'/meas25.txt',status='unknown',                 & | ||||
|        share='denynone') | ||||
| #else | ||||
|   open(25,file=appdir(:iz)//'/meas25.txt',status='unknown') | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   open(26,file=appdir(:iz)//'/tmp26.txt',status='unknown',                 & | ||||
|        share='denynone') | ||||
| #else | ||||
|   open(26,file=appdir(:iz)//'/tmp26.txt',status='unknown') | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   open(27,file=appdir(:iz)//'/dphi.txt',status='unknown',                 & | ||||
|        share='denynone') | ||||
| #else | ||||
|   open(27,file=appdir(:iz)//'/dphi.txt',status='unknown') | ||||
|   open(28,file='fftw_wisdom.dat',status='unknown') | ||||
|   call import_wisdom_from_file(isuccess,28) | ||||
|   close(28) | ||||
|   if(isuccess.ne.0) write(*,1000)  | ||||
| 1000 format('Using optimized FFTs.') | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   open(29,file=appdir(:iz)//'/debug.txt',status='unknown',                 & | ||||
|        share='denynone') | ||||
| #else | ||||
|   open(29,file=appdir(:iz)//'/debug.txt',status='unknown') | ||||
| #endif | ||||
| 
 | ||||
|   call cs_unlock | ||||
|   return | ||||
| 
 | ||||
| 910 print*,'Error opening DECODED.TXT' | ||||
|   stop | ||||
| 911 print*,'Error opening messages.txt' | ||||
|   stop | ||||
| 912 print*,'Error opening bandmap.txt' | ||||
|   stop | ||||
| 920 print*,'Error opening DECODED.AVE' | ||||
|   stop | ||||
| 930 print*,'Error opening AZEL.DAT' | ||||
|   stop | ||||
| 950 print*,'Error opening ALL65.TXT' | ||||
|   stop | ||||
| 
 | ||||
| end subroutine ftn_init | ||||
| @ -1,9 +0,0 @@ | ||||
| !------------------------------------------------ ftn_quit | ||||
| subroutine ftn_quit | ||||
|   include 'gcom1.f90' | ||||
|   ngo=0 | ||||
| ! Destroy the FFTW plans | ||||
|   call four2a(a,-1,1,1,1) | ||||
|   call filbig(id,-1,f0,newdat,c4a,c4b,n4) | ||||
|   return | ||||
| end subroutine ftn_quit | ||||
							
								
								
									
										24
									
								
								ftsky.f
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								ftsky.f
									
									
									
									
									
								
							| @ -1,24 +0,0 @@ | ||||
|       real function ftsky(l,b) | ||||
| 
 | ||||
| C  Returns 408 MHz sky temperature for l,b (in degrees), from  | ||||
| C  Haslam, et al. survey.  Must have already read the entire | ||||
| C  file tsky.dat into memory. | ||||
| 
 | ||||
|       real*4 l,b | ||||
|       integer*2 nsky | ||||
|       common/sky/ nsky(360,180) | ||||
|       save | ||||
| 
 | ||||
|       j=nint(b+91.0) | ||||
|       if(j.gt.180) j=180 | ||||
|       xl=l | ||||
|       if(xl.lt.0.0) xl=xl+360.0 | ||||
|       i=nint(xl+1.0) | ||||
|       if(i.gt.360) i=i-360 | ||||
|       ftsky=0.0 | ||||
|       if(i.ge.1 .and. i.le.360 .and. j.ge.1 .and. j.le.180) then | ||||
|          ftsky=0.1*nsky(i,j) | ||||
|       endif | ||||
| 
 | ||||
|       return | ||||
|       end | ||||
							
								
								
									
										32
									
								
								g.py
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								g.py
									
									
									
									
									
								
							| @ -1,32 +0,0 @@ | ||||
| DFreq=0.0 | ||||
| Freq=0.0 | ||||
| PingTime=0.0 | ||||
| PingFile="current" | ||||
| report="26" | ||||
| rms=1.0 | ||||
| mode_change=0 | ||||
| showspecjt=0 | ||||
| g2font='courier 16 bold' | ||||
| 
 | ||||
| #------------------------------------------------------ ftnstr | ||||
| def ftnstr(x): | ||||
|     y="" | ||||
|     xs=x.tostring() | ||||
|     for i in range(len(xs)): | ||||
|         y=y+xs[i] | ||||
|     return y | ||||
| 
 | ||||
| #------------------------------------------------------ filetime | ||||
| def filetime(t): | ||||
| #    i=t.rfind(".") | ||||
|     i=rfnd(t,".") | ||||
|     t=t[:i][-6:] | ||||
|     t=t[0:2]+":"+t[2:4]+":"+t[4:6] | ||||
|     return t | ||||
| 
 | ||||
| #------------------------------------------------------ rfnd | ||||
| #Temporary workaround to replace t.rfind(c) | ||||
| def rfnd(t,c): | ||||
|     for i in range(len(t)-1,0,-1): | ||||
|         if t[i:i+1]==c: return i | ||||
|     return -1 | ||||
							
								
								
									
										51
									
								
								gcom1.f90
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								gcom1.f90
									
									
									
									
									
								
							| @ -1,51 +0,0 @@ | ||||
| ! Variable             Purpose                               Set in Thread | ||||
| !--------------------------------------------------------------------------- | ||||
| integer NRXMAX         !Max length of Rx ring buffers | ||||
| integer NTXMAX         !Max length of Tx waveform in samples | ||||
| parameter(NRXMAX=2097152)  ! =2048*1024 | ||||
| parameter(NTXMAX=1653750)  ! =150*11025 | ||||
| real*8 tbuf            !Tsec at time of input callback          SoundIn | ||||
| integer ntrbuf         !(obsolete?) | ||||
| real*8 Tsec            !Present time                       SoundIn,SoundOut | ||||
| real*8 rxdelay         !Delay between PTT=1 and Tx audio        SoundIn | ||||
| real*8 txdelay         !Delay from end of Tx Audio and PTT=0    SoundOut | ||||
| real*8 samfacin        !(Input sample rate)/11025               GUI | ||||
| real*8 samfacout       !(Output sample rate)/11025              GUI | ||||
| real*8 txsnrdb         !SNR for simulations                     GUI | ||||
| integer*2 y1           !Ring buffer for audio channel 0         SoundIn | ||||
| integer*2 y2           !Ring buffer for audio channel 1         SoundIn | ||||
| integer nmax           !Actual length of Rx ring buffers        GUI | ||||
| integer iwrite         !Write pointer to Rx ring buffer         SoundIn | ||||
| integer iread          !Read pointer to Rx ring buffer          GUI | ||||
| integer*2 iwave        !Data for audio output                   SoundIn | ||||
| integer nwave          !Number of samples in iwave              SoundIn | ||||
| integer TxOK           !OK to transmit?                         SoundIn | ||||
| !                       NB: TxOK=1 only in SoundIn; TxOK=0 also in GUI | ||||
| integer Receiving      !Actually receiving?                     SoundIn | ||||
| integer Transmitting   !Actually transmitting?                  SoundOut | ||||
| integer TxFirst        !Transmit first?                         GUI | ||||
| integer TRPeriod       !Tx or Rx period in seconds              GUI | ||||
| integer ibuf           !Most recent input buffer#               SoundIn | ||||
| integer ibuf0          !Buffer# at start of Rx sequence         SoundIn | ||||
| real ave               !(why is this here?)                     GUI | ||||
| real rms               !(why is this here?)                     GUI | ||||
| integer ngo            !Set to 0 to terminate audio streams     GUI | ||||
| integer level          !S-meter level, 0-100                    GUI | ||||
| integer mute           !True means "don't transmit"             GUI | ||||
| integer newdat         !New data available for waterfall?       GUI | ||||
| integer ndsec          !Dsec in units of 0.1 s                  GUI | ||||
| integer ndevin         !Device# for audio input                 GUI | ||||
| integer ndevout        !Device# for audio output                GUI | ||||
| integer mfsample       !Measured sample rate, input             SoundIn | ||||
| integer mfsample2      !Measured sample rate, output            SoundOut | ||||
| integer ns0            !Time at last ALL.TXT date entry         Decoder | ||||
| character*12 devin_name,devout_name ! GUI | ||||
| 
 | ||||
| common/gcom1/Tbuf(1024),ntrbuf(1024),Tsec,rxdelay,txdelay,              & | ||||
|      samfacin,samfacout,txsnrdb,y1(NRXMAX),y2(NRXMAX),                  & | ||||
|      nmax,iwrite,iread,iwave(NTXMAX),nwave,TxOK,Receiving,Transmitting, & | ||||
|      TxFirst,TRPeriod,ibuf,ibuf0,ave,rms,ngo,level,mute,newdat,ndsec,   & | ||||
|      ndevin,ndevout,mfsample,mfsample2,ns0,devin_name,devout_name | ||||
| 
 | ||||
| !### volatile /gcom1/ | ||||
| 
 | ||||
							
								
								
									
										124
									
								
								gcom2.f90
									
									
									
									
									
								
							
							
						
						
									
										124
									
								
								gcom2.f90
									
									
									
									
									
								
							| @ -1,124 +0,0 @@ | ||||
| ! Variable             Purpose                              Set in Thread | ||||
| !------------------------------------------------------------------------- | ||||
| real*8 fcenter         !Linrad center freq, from pkt header   recvpkt | ||||
| real*8 forcefcenter    !Optional override of fcenter            GUI | ||||
| real ps0               !Spectrum of best ping, FSK441/JT6m      Decoder | ||||
| real psavg             !Average spectrum                        Decoder | ||||
| real s2                !2d spectrum for horizontal waterfall    GUI | ||||
| real ccf               !CCF in time (blue curve)                Decoder | ||||
| real green             !Data for green line                     GUI | ||||
| real fselect           !Specified QSO frequency                 GUI | ||||
| real pctlost           !Percent of lost packets                 Decoder | ||||
| real pctblank          !Percent of blanked blocks/packets       Decoder | ||||
| real rxnoise           !Rx noise in dB                        recvpkt | ||||
| real dphi              !Phase shift between pol'n channels   GUI,Decoder | ||||
| integer ngreen         !Length of green                         GUI | ||||
| real dgain             !Digital audio gain setting              GUI | ||||
| integer ndecoding      !Decoder status (see decode2.f90)     GUI,Decoder | ||||
| integer ndecoding0     !Status on previous decode            GUI,Decoder | ||||
| integer mcall3         !CALL3.TXT has been modified          GUI,Decoder | ||||
| integer mousebutton    !Which button was clicked?               GUI | ||||
| integer multicast      !1 for multicast data, 0 for unicast     GUI | ||||
| integer ndecdone       !Is decoder finished?                 GUI,Decoder | ||||
| integer nfloat         !Floating-point data from Linrad?      recvpkt | ||||
| integer ierr           !Error opening *.tf2 file                GUI | ||||
| integer lauto          !Are we in Auto mode?                    GUI | ||||
| integer mantx          !Manual transmission requested?       GUI,SoundIn | ||||
| integer nrestart       !True if transmission should restart  GUI,SoundIn | ||||
| integer ntr            !Are we in 2nd sequence?                 SoundIn | ||||
| integer nmsg           !Length of Tx message                    SoundIn | ||||
| integer nsave          !Which files to save?                    GUI | ||||
| integer nadd5          !Prepend 5 sec of 0's before decoding?   GUI  | ||||
| integer dftolerance    !DF tolerance (Hz)                       GUI | ||||
| logical LDecoded       !Was a message decoded?                  Decoder | ||||
| logical rxdone         !Has the Rx sequence finished?      SoundIn,Decoder | ||||
| integer monitoring     !Are we monitoring?                      GUI | ||||
| integer nzap           !Is Zap checked?                         GUI | ||||
| integer minsigdb       !Decoder threshold setting               GUI | ||||
| integer nclearave      !Set to 1 to clear JT65 avg         GUI,Decoder | ||||
| integer nfreeze        !Is Freeze checked?                      GUI | ||||
| integer nafc           !Is AFC checked?                         GUI | ||||
| integer newspec        !New spectra in ss(4,322,NSMAX)     GUI,Decoder | ||||
| integer nfa            !Low end of map65 search (def 100 kHz)   GUI | ||||
| integer nfb            !High end of map65 search (def 160 kHz)  GUI | ||||
| integer nfcal          !Calibration offset, Hz                  GUI | ||||
| integer idphi          !Phase offset in Y channel (deg)         GUI | ||||
| integer nkeep          !Timeout limit for band maps (min)       GUI | ||||
| integer nmode          !Which WSJT mode?                   GUI,Decoder | ||||
| integer mode65         !JT65 sub-mode (A/B/C ==> 1/2/4) GUI,SoundIn,Decoder | ||||
| integer nbpp           !# FFT Bins/pixel, wideband waterfall   Spec | ||||
| integer ndebug         !Write debugging info?                   GUI | ||||
| integer ndphi          !Set to 1 to compute dphi             GUI,Decoder | ||||
| integer nhispol        !Pol angle matching HisCall or HisGrid Decoder | ||||
| integer nt1            !Time to start FFTs                      GUI | ||||
| integer nxant          !Antenna configuration: 0='+', 1='x'     GUI | ||||
| integer nblank         !Is NB checked?                          GUI | ||||
| integer nfmid          !Center frequency of main display        GUI | ||||
| integer nfrange        !Frequency range of main display         GUI | ||||
| integer nport          !Requested COM port number               GUI | ||||
| integer mousedf        !Mouse-selected freq offset, DF          GUI | ||||
| integer mousefqso      !Mouse-selected QSO freq                 GUI | ||||
| integer neme           !EME calls only in deep search?          GUI | ||||
| integer nrw26          !Request to rewind lu 26 (tmp26.txt)  GUI,Decoder | ||||
| integer naggressive    !Is "Aggressive decoding" checked?       GUI | ||||
| integer ntx2           !Is "No shorthands if Tx1" checked?      GUI | ||||
| integer nagain         !Decode same file again?                 GUI | ||||
| integer shok           !Shorthand messages OK?                  GUI | ||||
| integer sendingsh      !Sending a shorthand message?            SoundIn | ||||
| integer*2 d2a          !Rx data, extracted from y1              Decoder | ||||
| integer*2 d2b          !Rx data, selected by mouse-pick         Decoder | ||||
| integer*2 b            !Pixel values for waterfall spectrum     GUI | ||||
| integer jza            !Length of data in d2a                GUI,Decoder | ||||
| integer jzb            !(why is this here?) | ||||
| integer ntime          !Integer Unix time (now)               SoundIn | ||||
| integer idinterval     !Interval between CWIDs, minutes         GUI | ||||
| integer msmax          !(why is this here?) | ||||
| integer lenappdir      !Length of Appdir string                 GUI | ||||
| integer idf            !Frequency offset in Hz                  Decoder | ||||
| integer ndiskdat       !1 if data read from disk, 0 otherwise   GUI | ||||
| integer nlines         !Available lines of waterfall data       GUI | ||||
| integer nflat          !Is waterfall to be flattened?           GUI | ||||
| integer ntxreq         !Tx msg# requested                       GUI | ||||
| integer ntxnow         !Tx msg# being sent now                  GUI | ||||
| integer ndepth         !Requested "depth" of JT65 decoding      GUI | ||||
| integer nspecial       !JT65 shorthand msg#: RO=2 RRR=3 73=4    Decoder | ||||
| integer ndf            !Measured DF in Hz                       Decoder | ||||
| real ss1               !Magenta curve for JT65 shorthand msg    Decoder | ||||
| real ss2               !Orange curve for JT65 shorthand msg     Decoder | ||||
| character mycall*12    !My call sign                            GUI | ||||
| character hiscall*12   !His call sign                           GUI | ||||
| character hisgrid*6    !His grid locator                        GUI | ||||
| character txmsg*28     !Message to be transmitted               GUI | ||||
| character sending*28   !Message being sent                      SoundIn | ||||
| character mode*6       !WSJT operating mode                     GUI | ||||
| character utcdate*12   !UTC date                                GUI | ||||
| character*24 fname0    !Filenames to be recorded, read, ...     Decoder | ||||
| character*24 fnamea | ||||
| character*24 fnameb | ||||
| character*6  fnamedate | ||||
| character*24 decodedfile | ||||
| character*80 AppDir      !WSJT installation directory           GUI | ||||
| character*80 AzElDir     !Directory for azel.dat                GUI | ||||
| character*80 SaveDir     !Directory for saved data files        GUI | ||||
| character*80 filetokilla !Filenames (full path)                 Decoder | ||||
| character*80 filetokillb | ||||
| character*12 pttport | ||||
| character*8 utcdata     !HHMM UTC for the processed data       Decoder | ||||
| 
 | ||||
| common/gcom2/fcenter,forcefcenter,ps0(431),psavg(450),s2(64,3100),ccf(-5:540), & | ||||
|      green(500),fselect,pctlost,pctblank,rxnoise,dphi,ngreen,dgain,         & | ||||
|      ndecoding,ndecoding0,mcall3,mousebutton,multicast,nsetftx,ierr,        & | ||||
|      ndecdone,nfloat,lauto,mantx,nrestart,ntr,nmsg,nsave,nadd5,             & | ||||
|      dftolerance,LDecoded,rxdone,monitoring,nzap,minsigdb,                  & | ||||
|      nclearave,nfreeze,nafc,newspec,nfa,nfb,nfcal,idphi,nkeep,              & | ||||
|      nmode,mode65,nbpp,ndebug,ndphi,nhispol,nt1,nxant,                      & | ||||
|      nblank,nport,mousedf,mousefqso,neme,nrw26,naggressive,ntx2,nagain,     & | ||||
|      shok,sendingsh,d2a(661500),d2b(661500),b(60000),jza,jzb,ntime,         & | ||||
|      idinterval,msmax,lenappdir,idf,ndiskdat,nlines,nflat,ntxreq,ntxnow,    & | ||||
|      ndepth,nspecial,ndf,nfmid,nfrange,ss1(-224:224),ss2(-224:224),         & | ||||
|      mycall,hiscall,hisgrid,txmsg,sending,mode,fname0,fnamea,               & | ||||
|      fnameb,fnamedate,decodedfile,AppDir,AzElDir,SaveDir,                   & | ||||
|      filetokilla,filetokillb,utcdate,pttport,utcdata | ||||
| 
 | ||||
| !### volatile /gcom2/ | ||||
| 
 | ||||
							
								
								
									
										20
									
								
								gcom3.f90
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								gcom3.f90
									
									
									
									
									
								
							| @ -1,20 +0,0 @@ | ||||
| ! Variable             Purpose                              Set in Thread | ||||
| !------------------------------------------------------------------------- | ||||
| integer*2 nfmt2        !Standard header for *.WAV file         Decoder | ||||
| integer*2 nchan2 | ||||
| integer*2 nbitsam2 | ||||
| integer*2 nbytesam2 | ||||
| integer*4 nchunk | ||||
| integer*4 lenfmt | ||||
| integer*4 nsamrate | ||||
| integer*4 nbytesec | ||||
| integer*4 ndata | ||||
| character*4 ariff | ||||
| character*4 awave | ||||
| character*4 afmt | ||||
| character*4 adata | ||||
| 
 | ||||
| common/gcom3/ariff,nchunk,awave,afmt,lenfmt,nfmt2,nchan2,nsamrate, & | ||||
|      nbytesec,nbytesam2,nbitsam2,adata,ndata | ||||
| 
 | ||||
| !### volatile /gcom3/ | ||||
							
								
								
									
										10
									
								
								gcom4.f90
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								gcom4.f90
									
									
									
									
									
								
							| @ -1,10 +0,0 @@ | ||||
| ! Variable             Purpose                              Set in Thread | ||||
| !------------------------------------------------------------------------- | ||||
| character addpfx*8     !Add-on prefix, as in ZA/PA2CHR           GUI | ||||
| integer*2 d2c          !Rx data recovered from recorded file     GUI | ||||
| integer jzc            !Length of data available in d2c          GUI | ||||
| character filename*24  !Name of wave file read from disk         GUI | ||||
| 
 | ||||
| common/gcom4/addpfx,d2c(661500),jzc,filename | ||||
| 
 | ||||
| !### volatile /gcom4/ | ||||
							
								
								
									
										82
									
								
								gen65.f
									
									
									
									
									
								
							
							
						
						
									
										82
									
								
								gen65.f
									
									
									
									
									
								
							| @ -1,82 +0,0 @@ | ||||
|       subroutine gen65(message,mode65,samfac,iwave,nwave,sendingsh, | ||||
|      +  msgsent) | ||||
| 
 | ||||
| C  Encodes a JT65 message into a wavefile. | ||||
| 
 | ||||
|       parameter (NMAX=60*11025)     !Max length of wave file | ||||
|       character*22 message          !Message to be generated | ||||
|       character*22 msgsent          !Message as it will be received | ||||
|       character*3 cok               !'   ' or 'OOO' | ||||
|       character*6 c1,c2 | ||||
|       real*8 t,dt,phi,f,f0,dfgen,dphi,twopi,samfac,tsymbol | ||||
| 
 | ||||
|       integer*2 iwave(NMAX)  !Generated wave file | ||||
|       integer dgen(12) | ||||
|       integer sent(63) | ||||
|       integer sendingsh | ||||
|       common/c1c2/c1,c2 | ||||
|       include 'prcom.h' | ||||
|       data twopi/6.283185307d0/ | ||||
|       save | ||||
| 
 | ||||
|       if(abs(pr(1)).ne.1.0) call setup65 | ||||
| 
 | ||||
|       call chkmsg(message,cok,nspecial,flip) | ||||
|       if(nspecial.eq.0) then | ||||
|          call packmsg(message,dgen)          !Pack message into 72 bits | ||||
|          sendingsh=0 | ||||
|          if(iand(dgen(10),8).ne.0) sendingsh=-1    !Plain text flag | ||||
|          call rs_encode(dgen,sent) | ||||
|          call interleave63(sent,1)           !Apply interleaving | ||||
|          call graycode(sent,63,1)            !Apply Gray code | ||||
|          tsymbol=4096.d0/11025.d0 | ||||
|          nsym=126                            !Symbols per transmission | ||||
|       else | ||||
|          tsymbol=16384.d0/11025.d0 | ||||
|          nsym=32 | ||||
|          sendingsh=1                         !Flag for shorthand message | ||||
|       endif | ||||
| 
 | ||||
| C  Set up necessary constants | ||||
|       dt=1.0/(samfac*11025.0) | ||||
|       f0=118*11025.d0/1024 | ||||
|       dfgen=mode65*11025.0/4096.0 | ||||
|       t=0.d0 | ||||
|       phi=0.d0 | ||||
|       k=0 | ||||
|       j0=0 | ||||
|       ndata=(nsym*11025.d0*samfac*tsymbol)/2 | ||||
|       ndata=2*ndata | ||||
|       do i=1,ndata | ||||
|          t=t+dt | ||||
|          j=int(t/tsymbol) + 1                    !Symbol number, 1-126 | ||||
|          if(j.ne.j0) then | ||||
|             f=f0 | ||||
|             if(nspecial.ne.0 .and. mod(j,2).eq.0) f=f0+10*nspecial*dfgen | ||||
|             if(nspecial.eq.0 .and. flip*pr(j).lt.0.0) then | ||||
|                k=k+1 | ||||
|                f=f0+(sent(k)+2)*dfgen | ||||
|             endif | ||||
|             dphi=twopi*dt*f | ||||
|             j0=j | ||||
|          endif | ||||
|          phi=phi+dphi | ||||
|          iwave(i)=32767.0*sin(phi) | ||||
|       enddo | ||||
| 
 | ||||
|       do j=1,5512                !Put another 0.5 sec of silence at end | ||||
|          i=i+1 | ||||
|          iwave(i)=0 | ||||
|       enddo | ||||
|       nwave=i | ||||
|       call unpackmsg(dgen,msgsent) | ||||
|       if(flip.lt.0.0) then | ||||
|          do i=22,1,-1 | ||||
|             if(msgsent(i:i).ne.' ') goto 10 | ||||
|          enddo | ||||
|  10      msgsent=msgsent(1:i)//' OOO' | ||||
|       endif | ||||
| 
 | ||||
|       return | ||||
|       end | ||||
| 
 | ||||
							
								
								
									
										36
									
								
								gencwid.f
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								gencwid.f
									
									
									
									
									
								
							| @ -1,36 +0,0 @@ | ||||
|       subroutine gencwid(msg,wpm,freqcw,samfac,iwave,nwave) | ||||
| 
 | ||||
|       parameter (NMAX=10*11025) | ||||
|       character msg*22,msg2*22 | ||||
|       integer*2 iwave(NMAX) | ||||
| 
 | ||||
|       integer*1 idat(460) | ||||
|       real*8 dt,t,twopi,pha,dpha,tdit,samfac | ||||
|       data twopi/6.283185307d0/ | ||||
| 
 | ||||
|       do i=1,22 | ||||
|          if(msg(i:i).eq.' ') go to 10 | ||||
|        enddo | ||||
|  10   iz=i-1 | ||||
|       msg2=msg(1:iz)//'                      ' | ||||
|       call morse(msg2,idat,ndits) !Encode part 1 of msg | ||||
| 
 | ||||
|       tdit=1.2d0/wpm                   !Key-down dit time, seconds | ||||
|       dt=1.d0/(11025.d0*samfac) | ||||
|       nwave=ndits*tdit/dt | ||||
|       pha=0. | ||||
|       dpha=twopi*freqcw*dt | ||||
|       t=0.d0 | ||||
|       s=0. | ||||
|       u=wpm/(11025*0.03) | ||||
|       do i=1,nwave | ||||
|          t=t+dt | ||||
|          pha=pha+dpha | ||||
|          j=t/tdit + 1 | ||||
|          s=s + u*(idat(j)-s) | ||||
|          iwave(i)=nint(s*32767.d0*sin(pha)) | ||||
|       enddo | ||||
| 
 | ||||
|       return | ||||
|       end | ||||
| 
 | ||||
							
								
								
									
										13
									
								
								gentone.f
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								gentone.f
									
									
									
									
									
								
							| @ -1,13 +0,0 @@ | ||||
|       subroutine gentone(x,n,k) | ||||
| 
 | ||||
|       real*4 x(512) | ||||
| 
 | ||||
|       dt=1.0/11025.0 | ||||
|       f=(n+51)*11025.0/512.0 | ||||
|       do i=1,512 | ||||
|          x(i)=sin(6.2831853*i*dt*f) | ||||
|       enddo | ||||
|       k=k+512 | ||||
| 
 | ||||
|       return | ||||
|       end | ||||
							
								
								
									
										259
									
								
								getdev.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										259
									
								
								getdev.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,259 @@ | ||||
| #include <stdio.h> | ||||
| #define MAXDEVICES 100 | ||||
| #include <string.h> | ||||
| #include <portaudio.h> | ||||
| #include <QDebug> | ||||
| 
 | ||||
| //------------------------------------------------------- pa_get_device_info
 | ||||
| int pa_get_device_info (int  n, | ||||
|                         void *pa_device_name, | ||||
|                         void *pa_device_hostapi, | ||||
|                         double *pa_device_max_speed, | ||||
|                         double *pa_device_min_speed, | ||||
|                         int *pa_device_max_bytes, | ||||
|                         int *pa_device_min_bytes, | ||||
|                         int *pa_device_max_channels, | ||||
|                         int *pa_device_min_channels ) | ||||
| { | ||||
| 
 | ||||
|   (void) n ; | ||||
|   (void) pa_device_name; | ||||
|   (void) pa_device_hostapi; | ||||
|   (void) pa_device_max_speed; | ||||
|   (void) pa_device_min_speed; | ||||
|   (void) pa_device_max_bytes; | ||||
|   (void) pa_device_min_bytes; | ||||
|   (void) pa_device_max_channels; | ||||
|   (void) pa_device_min_channels; | ||||
|   const PaDeviceInfo *deviceInfo; | ||||
|   PaError pa_err; | ||||
|   PaStreamParameters inputParameters; | ||||
|   int i,j, speed_warning; | ||||
|   int minBytes, maxBytes; | ||||
|   double maxStandardSampleRate; | ||||
|   double minStandardSampleRate; | ||||
|   int minInputChannels; | ||||
|   int maxInputChannels; | ||||
| 
 | ||||
| // negative terminated  list
 | ||||
|   static double standardSampleRates[] = {8000.0, 9600.0, | ||||
|         11025.0, 12000.0, 16000.0, 22050.0, 24000.0, 32000.0, | ||||
|         44100.0, 48000.0, 88200.0, 96000.0, 192000.0, -1}; | ||||
| // *******************************************************
 | ||||
| 
 | ||||
| 
 | ||||
|   *pa_device_max_speed=0; | ||||
|   *pa_device_min_speed=0; | ||||
|   *pa_device_max_bytes=0; | ||||
|   *pa_device_min_bytes=0; | ||||
|   *pa_device_max_channels=0; | ||||
|   *pa_device_min_channels=0; | ||||
|   minInputChannels=0; | ||||
|   if(n >= Pa_GetDeviceCount() ) return -1; | ||||
|   deviceInfo = Pa_GetDeviceInfo(n); | ||||
|   if (deviceInfo->maxInputChannels==0) return -1; | ||||
|   sprintf((char*)(pa_device_name),"%s",deviceInfo->name); | ||||
|   sprintf((char*)(pa_device_hostapi),"%s", | ||||
|           Pa_GetHostApiInfo( deviceInfo->hostApi )->name); | ||||
|   speed_warning=0; | ||||
| 
 | ||||
| // bypass bug in Juli@ ASIO driver:
 | ||||
| // this driver hangs after a Pa_IsFormatSupported call
 | ||||
|   i = strncmp(deviceInfo->name, "ASIO 2.0 - ESI Juli@", 19); | ||||
|   if (i == 0) { | ||||
|     minStandardSampleRate=44100; | ||||
|     maxStandardSampleRate=192000; | ||||
|     minBytes=1; | ||||
|     maxBytes=4; | ||||
|     maxInputChannels= deviceInfo->maxInputChannels; | ||||
|     minInputChannels= 1; | ||||
|     goto end_pa_get_device_info; | ||||
|   } | ||||
| 
 | ||||
| // Investigate device capabilities.
 | ||||
| // Check min and max samplerates  with 16 bit data.
 | ||||
|   maxStandardSampleRate=0; | ||||
|   minStandardSampleRate=0; | ||||
|   inputParameters.device = n; | ||||
|   inputParameters.channelCount = deviceInfo->maxInputChannels; | ||||
|   inputParameters.sampleFormat = paInt16; | ||||
|   inputParameters.suggestedLatency = 0; | ||||
|   inputParameters.hostApiSpecificStreamInfo = NULL; | ||||
| 
 | ||||
| // ************************************************************************
 | ||||
| //filter for portaudio Windows hostapi's with non experts.
 | ||||
| //only allow ASIO or WASAPI or WDM-KS
 | ||||
|   i = strncmp(Pa_GetHostApiInfo(deviceInfo->hostApi)->name, "ASIO", 4); | ||||
|   if (i==0 ) goto end_filter_hostapi; | ||||
|   i = strncmp(Pa_GetHostApiInfo(deviceInfo->hostApi)->name, | ||||
|               "Windows WASAPI", 14); | ||||
|   if (i==0 ) goto end_filter_hostapi; | ||||
|   i = strncmp(Pa_GetHostApiInfo(deviceInfo->hostApi)->name, | ||||
|               "Windows WDM-KS", 14); | ||||
|   if (i==0 ) goto end_filter_hostapi; | ||||
|   speed_warning=1; | ||||
| end_filter_hostapi:; | ||||
| 
 | ||||
| // ************************************************************************
 | ||||
|   i=0; | ||||
|   while(standardSampleRates[i] > 0 && minStandardSampleRate==0) { | ||||
|     pa_err=Pa_IsFormatSupported(&inputParameters, NULL, | ||||
|                                 standardSampleRates[i] ); | ||||
|     if(pa_err == paDeviceUnavailable) return -1; | ||||
|     if(pa_err == paInvalidDevice) return -1; | ||||
|     if(pa_err == paFormatIsSupported ) { | ||||
|       minStandardSampleRate=standardSampleRates[i]; | ||||
|     } | ||||
|     i++; | ||||
|   } | ||||
|   if(minStandardSampleRate == 0) return -1; | ||||
|   j=i; | ||||
|   while(standardSampleRates[i] > 0 ) i++; | ||||
|   i--; | ||||
| 
 | ||||
|   while(i >= j && maxStandardSampleRate==0) { | ||||
|     pa_err=Pa_IsFormatSupported(&inputParameters, NULL, | ||||
|                                   standardSampleRates[i] ); | ||||
|     if(pa_err == paDeviceUnavailable) return -1; | ||||
|     if(pa_err == paInvalidDevice) return -1; | ||||
|     if( pa_err == paFormatIsSupported ) { | ||||
|       maxStandardSampleRate=standardSampleRates[i]; | ||||
|     } | ||||
|     i--; | ||||
|   } | ||||
| 
 | ||||
| // check if min SampleRate  = max SampleRate
 | ||||
|   if(maxStandardSampleRate==0 && (minStandardSampleRate != 0)) { | ||||
|     maxStandardSampleRate= minStandardSampleRate; | ||||
|   } | ||||
| 
 | ||||
| // check min and max bytes
 | ||||
|   minBytes=2; | ||||
|   maxBytes=2; | ||||
|   inputParameters.sampleFormat = paUInt8; | ||||
|   pa_err=Pa_IsFormatSupported(&inputParameters, NULL, | ||||
|                                 maxStandardSampleRate ); | ||||
|   if( pa_err == paFormatIsSupported ) { | ||||
|     minBytes=1; | ||||
|   } | ||||
|     inputParameters.sampleFormat = paInt32; | ||||
|     pa_err=Pa_IsFormatSupported(&inputParameters, NULL, | ||||
|                                 maxStandardSampleRate ); | ||||
|   if( pa_err == paFormatIsSupported ) { | ||||
|     maxBytes=4; | ||||
|   } | ||||
| 
 | ||||
| // check min channel count
 | ||||
|   maxInputChannels= deviceInfo->maxInputChannels; | ||||
|   inputParameters.channelCount = 1; | ||||
|   inputParameters.sampleFormat = paInt16; | ||||
|   pa_err=paFormatIsSupported+32000; | ||||
|   while(pa_err != paFormatIsSupported && | ||||
|           ( inputParameters.channelCount < (maxInputChannels+1)) ) { | ||||
|     pa_err=Pa_IsFormatSupported(&inputParameters, NULL, | ||||
|                                 maxStandardSampleRate ); | ||||
|     inputParameters.channelCount++; | ||||
|   } | ||||
|   if( pa_err == paFormatIsSupported ) { | ||||
|     minInputChannels=inputParameters.channelCount-1; | ||||
|   } else { | ||||
|     return -1; | ||||
|   } | ||||
| 
 | ||||
| end_pa_get_device_info:; | ||||
| 
 | ||||
|   *pa_device_max_speed=maxStandardSampleRate; | ||||
|   *pa_device_min_speed=minStandardSampleRate; | ||||
|   *pa_device_max_bytes=maxBytes; | ||||
|   *pa_device_min_bytes=minBytes; | ||||
|   *pa_device_max_channels= maxInputChannels; | ||||
|   *pa_device_min_channels= minInputChannels; | ||||
| 
 | ||||
|   return speed_warning; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void paInputDevice(int id, char* hostAPI_DeviceName, int* minChan, | ||||
|                    int* maxChan, int* minSpeed, int* maxSpeed) | ||||
| { | ||||
|   int i; | ||||
|   char pa_device_name[128]; | ||||
|   char pa_device_hostapi[128]; | ||||
|   double pa_device_max_speed; | ||||
|   double pa_device_min_speed; | ||||
|   int pa_device_max_bytes; | ||||
|   int pa_device_min_bytes; | ||||
|   int pa_device_max_channels; | ||||
|   int pa_device_min_channels; | ||||
|   char p2[50]; | ||||
|   char *p,*p1; | ||||
|   static int iret, valid_dev_cnt; | ||||
| 
 | ||||
|   iret=pa_get_device_info (id, | ||||
|                           &pa_device_name, | ||||
|                           &pa_device_hostapi, | ||||
|                           &pa_device_max_speed, | ||||
|                           &pa_device_min_speed, | ||||
|                           &pa_device_max_bytes, | ||||
|                           &pa_device_min_bytes, | ||||
|                           &pa_device_max_channels, | ||||
|                           &pa_device_min_channels); | ||||
| 
 | ||||
|   if (iret >= 0 ) { | ||||
|     valid_dev_cnt++; | ||||
| 
 | ||||
|     p1=(char*)""; | ||||
|     p=strstr(pa_device_hostapi,"MME"); | ||||
|     if(p!=NULL) p1=(char*)"MME"; | ||||
|     p=strstr(pa_device_hostapi,"Direct"); | ||||
|     if(p!=NULL) p1=(char*)"DirectX"; | ||||
|     p=strstr(pa_device_hostapi,"WASAPI"); | ||||
|     if(p!=NULL) p1=(char*)"WASAPI"; | ||||
|     p=strstr(pa_device_hostapi,"ASIO"); | ||||
|     if(p!=NULL) p1=(char*)"ASIO"; | ||||
|     p=strstr(pa_device_hostapi,"WDM-KS"); | ||||
|     if(p!=NULL) p1=(char*)"WDM-KS"; | ||||
| 
 | ||||
|     sprintf(p2,"%-8s %-39s",p1,pa_device_name); | ||||
|     for(i=0; i<50; i++) { | ||||
|       hostAPI_DeviceName[i]=p2[i]; | ||||
|       if(p2[i]==0) break; | ||||
|     } | ||||
|     *minChan=pa_device_min_channels; | ||||
|     *maxChan=pa_device_max_channels; | ||||
|     *minSpeed=(int)pa_device_min_speed; | ||||
|     *maxSpeed=(int)pa_device_max_speed; | ||||
|   } else { | ||||
|     for(i=0; i<50; i++) { | ||||
|       hostAPI_DeviceName[i]=0; | ||||
|     } | ||||
|     *minChan=0; | ||||
|     *maxChan=0; | ||||
|     *minSpeed=0; | ||||
|     *maxSpeed=0; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void getDev(int* numDevices0, char hostAPI_DeviceName[][50], | ||||
|             int minChan[], int maxChan[], | ||||
|             int minSpeed[], int maxSpeed[]) | ||||
| { | ||||
|   int i,id,numDevices; | ||||
|   int minch,maxch,minsp,maxsp; | ||||
|   char apidev[256]; | ||||
| 
 | ||||
|   numDevices=Pa_GetDeviceCount(); | ||||
|   *numDevices0=numDevices; | ||||
| 
 | ||||
|   for(id=0; id<numDevices; id++)  { | ||||
|     paInputDevice(id,apidev,&minch,&maxch,&minsp,&maxsp); | ||||
|     for(i=0; i<50; i++) { | ||||
|       hostAPI_DeviceName[id][i]=apidev[i]; | ||||
|     } | ||||
|     hostAPI_DeviceName[id][49]=0; | ||||
|     minChan[id]=minch; | ||||
|     maxChan[id]=maxch; | ||||
|     minSpeed[id]=minsp; | ||||
|     maxSpeed[id]=maxsp; | ||||
|   } | ||||
| } | ||||
							
								
								
									
										105
									
								
								getfile.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								getfile.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,105 @@ | ||||
| #include "getfile.h" | ||||
| #include <QDir> | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <math.h> | ||||
| 
 | ||||
| extern qint16 id[4*60*96000]; | ||||
| 
 | ||||
| void getfile(QString fname, bool xpol, int dbDgrd) | ||||
| { | ||||
|   int npts=2*52*96000; | ||||
|   if(xpol) npts=2*npts; | ||||
| 
 | ||||
| // Degrade S/N by dbDgrd dB -- for tests only!!
 | ||||
|   float dgrd=0.0; | ||||
|   if(dbDgrd<0) dgrd = 23.0*sqrt(pow(10.0,-0.1*(double)dbDgrd) - 1.0); | ||||
|   float fac=23.0/sqrt(dgrd*dgrd + 23.0*23.0); | ||||
| 
 | ||||
|   memset(id,0,2*npts); | ||||
|   char name[80]; | ||||
|   strcpy(name,fname.toAscii()); | ||||
|   FILE* fp=fopen(name,"rb"); | ||||
| 
 | ||||
|   if(fp != NULL) { | ||||
|     fread(&datcom_.fcenter,sizeof(datcom_.fcenter),1,fp); | ||||
|     fread(id,2,npts,fp); | ||||
|     int j=0; | ||||
| 
 | ||||
|     if(dbDgrd<0) { | ||||
|       for(int i=0; i<npts; i+=2) { | ||||
|         datcom_.d4[j++]=fac*((float)id[i] + dgrd*gran()); | ||||
|         datcom_.d4[j++]=fac*((float)id[i+1] + dgrd*gran()); | ||||
|         if(!xpol) j+=2;               //Skip over d4(3,x) and d4(4,x)
 | ||||
|       } | ||||
|     } else { | ||||
|       for(int i=0; i<npts; i+=2) { | ||||
|         datcom_.d4[j++]=(float)id[i]; | ||||
|         datcom_.d4[j++]=(float)id[i+1]; | ||||
|         if(!xpol) j+=2;               //Skip over d4(3,x) and d4(4,x)
 | ||||
|       } | ||||
|     } | ||||
|     fclose(fp); | ||||
| 
 | ||||
|     datcom_.ndiskdat=1; | ||||
|     int nfreq=(int)datcom_.fcenter; | ||||
|     if(nfreq!=144 and nfreq != 432 and nfreq != 1296) datcom_.fcenter=144.125; | ||||
|     int i0=fname.indexOf(".tf2"); | ||||
|     if(i0<0) i0=fname.indexOf(".iq"); | ||||
|     datcom_.nutc=0; | ||||
|     if(i0>0) datcom_.nutc=100*fname.mid(i0-4,2).toInt() + | ||||
|         fname.mid(i0-2,2).toInt(); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| void savetf2(QString fname, bool xpol) | ||||
| { | ||||
|   int npts=2*52*96000; | ||||
|   if(xpol) npts=2*npts; | ||||
| 
 | ||||
|   qint16* buf=(qint16*)malloc(2*npts); | ||||
|   char name[80]; | ||||
|   strcpy(name,fname.toAscii()); | ||||
|   FILE* fp=fopen(name,"wb"); | ||||
| 
 | ||||
|   if(fp != NULL) { | ||||
|     fwrite(&datcom_.fcenter,sizeof(datcom_.fcenter),1,fp); | ||||
|     int j=0; | ||||
|     for(int i=0; i<npts; i+=2) { | ||||
|       buf[i]=(qint16)datcom_.d4[j++]; | ||||
|       buf[i+1]=(qint16)datcom_.d4[j++]; | ||||
|       if(!xpol) j+=2;               //Skip over d4(3,x) and d4(4,x)
 | ||||
|     } | ||||
|     fwrite(buf,2,npts,fp); | ||||
|     fclose(fp); | ||||
|   } | ||||
|   free(buf); | ||||
| } | ||||
| 
 | ||||
| //#define	MAX_RANDOM	0x7fffffff
 | ||||
| 
 | ||||
| /* Generate gaussian random float with mean=0 and std_dev=1 */ | ||||
| float gran() | ||||
| { | ||||
|   float fac,rsq,v1,v2; | ||||
|   static float gset; | ||||
|   static int iset; | ||||
| 
 | ||||
|   if(iset){ | ||||
|     /* Already got one */ | ||||
|     iset = 0; | ||||
|     return gset; | ||||
|   } | ||||
|   /* Generate two evenly distributed numbers between -1 and +1
 | ||||
|    * that are inside the unit circle | ||||
|    */ | ||||
|   do { | ||||
|     v1 = 2.0 * (float)rand() / RAND_MAX - 1; | ||||
|     v2 = 2.0 * (float)rand() / RAND_MAX - 1; | ||||
|     rsq = v1*v1 + v2*v2; | ||||
|   } while(rsq >= 1.0 || rsq == 0.0); | ||||
|   fac = sqrt(-2.0*log(rsq)/rsq); | ||||
|   gset = v1*fac; | ||||
|   iset++; | ||||
|   return v2*fac; | ||||
| } | ||||
							
								
								
									
										14
									
								
								getfile.f90
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								getfile.f90
									
									
									
									
									
								
							| @ -1,14 +0,0 @@ | ||||
| !----------------------------------------------------- getfile | ||||
| subroutine getfile(fname,len) | ||||
|   character*(*) fname | ||||
| 
 | ||||
|   include 'datcom.f90' | ||||
|   include 'gcom2.f90' | ||||
| 
 | ||||
|   fname80=fname | ||||
|   nlen=len | ||||
|   newdat2=1 | ||||
|   ierr=0 | ||||
| 
 | ||||
|   return | ||||
| end subroutine getfile | ||||
							
								
								
									
										12
									
								
								getfile.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								getfile.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| #ifndef GETFILE_H | ||||
| #define GETFILE_H | ||||
| #include <QString> | ||||
| #include <QFile> | ||||
| #include <QDebug> | ||||
| #include "commons.h" | ||||
| 
 | ||||
| void getfile(QString fname, bool xpol, int dbDgrd); | ||||
| void savetf2(QString fname, bool xpol); | ||||
| float gran(); | ||||
| 
 | ||||
| #endif // GETFILE_H
 | ||||
							
								
								
									
										71
									
								
								getfile2.f90
									
									
									
									
									
								
							
							
						
						
									
										71
									
								
								getfile2.f90
									
									
									
									
									
								
							| @ -1,71 +0,0 @@ | ||||
| subroutine getfile2(fname,len) | ||||
| 
 | ||||
| #ifdef CVF | ||||
|   use dflib | ||||
| #endif | ||||
| 
 | ||||
|   character*(*) fname | ||||
|   real*8 sq | ||||
| 
 | ||||
|   include 'datcom.f90' | ||||
|   include 'gcom1.f90' | ||||
|   include 'gcom2.f90' | ||||
|   include 'gcom4.f90' | ||||
|   integer*2 id(4,NSMAX) | ||||
| 
 | ||||
| 1 if(ndecoding.eq.0) go to 2 | ||||
| #ifdef CVF | ||||
|   call sleepqq(100) | ||||
| #else | ||||
|   call usleep(100*1000) | ||||
| #endif | ||||
| 
 | ||||
|   go to 1 | ||||
| 
 | ||||
| 2 do i=len,1,-1 | ||||
|      if(fname(i:i).eq.'/' .or. fname(i:i).eq.'\\') go to 10 | ||||
|   enddo | ||||
|   i=0 | ||||
| 10 filename=fname(i+1:) | ||||
|   ierr=0 | ||||
| 
 | ||||
|   n=8*NSMAX | ||||
|   ndecoding=4 | ||||
|   monitoring=0 | ||||
|   kbuf=1 | ||||
| 
 | ||||
|   call cs_lock('getfile2a') | ||||
| !### | ||||
| ! NB: not really necessary to read whole file at once.  Save memory! | ||||
|   call rfile3a(fname,id,n,ierr) | ||||
|   do i=1,NSMAX | ||||
|      dd(1,i,1)=id(1,i) | ||||
|      dd(2,i,1)=id(2,i) | ||||
|   enddo | ||||
| !### | ||||
| 
 | ||||
|   call cs_unlock | ||||
|   if(ierr.ne.0) then | ||||
|      print*,'Error opening or reading file: ',fname,ierr | ||||
|      go to 999 | ||||
|   endif | ||||
| 
 | ||||
|   sq=0. | ||||
|   ka=0.1*NSMAX | ||||
|   kb=0.8*NSMAX | ||||
|   do k=ka,kb | ||||
|      sq=sq + dd(1,k,1)**2 + dd(2,k,1)**2 + dd(3,k,1)**2 + dd(4,k,1)**2 | ||||
|   enddo | ||||
|   sqave=174*sq/(kb-ka+1) | ||||
|   rxnoise=10.0*log10(sqave) - 48.0 | ||||
|   call cs_lock('getfile2b') | ||||
|   read(filename(8:11),*,err=20,end=20) nutc | ||||
|   call cs_unlock | ||||
|   go to 30 | ||||
| 20 nutc=0 | ||||
| 
 | ||||
| 30 ndiskdat=1 | ||||
|   mousebutton=0 | ||||
| 
 | ||||
| 999 return | ||||
| end subroutine getfile2 | ||||
							
								
								
									
										45
									
								
								getpfx1.f
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								getpfx1.f
									
									
									
									
									
								
							| @ -1,45 +0,0 @@ | ||||
|       subroutine getpfx1(callsign,k) | ||||
| 
 | ||||
|       character callsign*12 | ||||
|       character*8 c | ||||
|       character addpfx*8 | ||||
| C  Can't 'include' *.f90 in *.f  | ||||
|       common/gcom4/addpfx | ||||
|       include 'pfx.f' | ||||
| 
 | ||||
|       iz=index(callsign,' ') - 1 | ||||
|       if(iz.lt.0) iz=12 | ||||
|       islash=index(callsign(1:iz),'/') | ||||
|       k=0 | ||||
|       c='   ' | ||||
|       if(islash.gt.0 .and. islash.le.(iz-4)) then | ||||
| !  Add-on prefix | ||||
|          c=callsign(1:islash-1) | ||||
|          callsign=callsign(islash+1:iz) | ||||
|          do i=1,NZ | ||||
|             if(pfx(i)(1:4).eq.c) then | ||||
|                k=i | ||||
|                go to 10 | ||||
|             endif | ||||
|          enddo | ||||
|          if(addpfx.eq.c) then | ||||
|             k=449 | ||||
|             go to 10 | ||||
|          endif | ||||
| 
 | ||||
|       else if(islash.eq.(iz-1)) then | ||||
| !  Add-on suffix | ||||
|          c=callsign(islash+1:iz) | ||||
|          callsign=callsign(1:islash-1) | ||||
|          do i=1,NZ2 | ||||
|             if(sfx(i).eq.c(1:1)) then | ||||
|                k=400+i | ||||
|                go to 10 | ||||
|             endif | ||||
|          enddo | ||||
|       endif | ||||
| 
 | ||||
|  10   if(islash.ne.0 .and.k.eq.0) k=-1 | ||||
|       return | ||||
|       end | ||||
| 
 | ||||
							
								
								
									
										35
									
								
								getsnr.f
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								getsnr.f
									
									
									
									
									
								
							| @ -1,35 +0,0 @@ | ||||
|       subroutine getsnr(x,nz,snr) | ||||
| 
 | ||||
|       real x(nz) | ||||
| 
 | ||||
|       smax=-1.e30 | ||||
|       do i=1,nz | ||||
|          if(x(i).gt.smax) then | ||||
|             ipk=i | ||||
|             smax=x(i) | ||||
|          endif | ||||
|          s=s+x(i) | ||||
|       enddo | ||||
| 
 | ||||
|       s=0. | ||||
|       ns=0 | ||||
|       do i=1,nz | ||||
|          if(abs(i-ipk).ge.3) then | ||||
|             s=s+x(i) | ||||
|             ns=ns+1 | ||||
|          endif | ||||
|       enddo | ||||
|       ave=s/ns | ||||
| 
 | ||||
|       sq=0. | ||||
|       do i=1,nz | ||||
|          if(abs(i-ipk).ge.3) then | ||||
|             sq=sq+(x(i)-ave)**2 | ||||
|             ns=ns+1 | ||||
|          endif | ||||
|       enddo | ||||
|       rms=sqrt(sq/(nz-2)) | ||||
|       snr=(smax-ave)/rms | ||||
| 
 | ||||
|       return | ||||
|       end | ||||
							
								
								
									
										2
									
								
								gp.bat
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								gp.bat
									
									
									
									
									
								
							| @ -1,2 +0,0 @@ | ||||
| gcc -c plrr_subs_win.c | ||||
| g95 -o pulsar -fno-second-underscore -fbounds-check -ftrace=full pulsar.f90 plrr_subs_win.o | ||||
							
								
								
									
										19
									
								
								i1tor4.f90
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								i1tor4.f90
									
									
									
									
									
								
							| @ -1,19 +0,0 @@ | ||||
| 
 | ||||
| !--------------------------------------------------- i1tor4 | ||||
| subroutine i1tor4(d,jz,data) | ||||
| 
 | ||||
| !  Convert wavefile byte data from to real*4. | ||||
| 
 | ||||
|   integer*1 d(jz) | ||||
|   real data(jz) | ||||
|   integer*1 i1 | ||||
|   equivalence(i1,i4) | ||||
| 
 | ||||
|   do i=1,jz | ||||
|      n=d(i) | ||||
|      i4=n-128 | ||||
|      data(i)=i1 | ||||
|   enddo | ||||
| 
 | ||||
|   return | ||||
| end subroutine i1tor4 | ||||
							
								
								
									
										16
									
								
								in.dat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								in.dat
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
|   35  36  22   8  31  11  14  55  20  36  55  13  24  15  56  38  16  28  61  58 | ||||
|   15  26  45   8  41  53  37  57  59  60  29  29  41  46  44  35  52  61  24  26 | ||||
|   16  20  53  35   2   6   9  27  47  28  57   6  15   9  16  10  56   9  63  46 | ||||
|    9  15   3 | ||||
|   74  61  44 233  29 245 254  64 119  64 250 111  38 145  53  29 140 194 119  99 | ||||
|   55  86  48 110 142  95  48 120  61  66 252 252 245  88  62  41 124 249 246  68 | ||||
|  250 249  65  64 140 142  88 190 237  90 240  52  79 216  55  31 112 135  66  44 | ||||
|   99  57  68 | ||||
|   54  61  26   5  13  60   3  56  30  58  57   4  16  43  28  43   6  61  13  19 | ||||
|   56   8   4   9  45  32   9   7  14  52   4  38  40  27   3  26  51  54  40  29 | ||||
|   36  63  34  43   3  48  36  49  46  30   8  20  40  59  29  28  17  11   8  19 | ||||
|   11  63   5 | ||||
|   38  25  35   8  28   0   0  60  60  25   0  31  28  52  14  24   9  30  18  54 | ||||
|   49  55  48  15  27  54  26  22  30  27   1   1   4  31  35  29  23   2   2  27 | ||||
|    0   1  25  32  21  84  28  19   5  60   2  27  15   9  39  23  42  12  29  17 | ||||
|   16  50  49 | ||||
							
								
								
									
										323
									
								
								install-sh
									
									
									
									
									
								
							
							
						
						
									
										323
									
								
								install-sh
									
									
									
									
									
								
							| @ -1,323 +0,0 @@ | ||||
| #!/bin/sh | ||||
| # install - install a program, script, or datafile | ||||
| 
 | ||||
| scriptversion=2005-05-14.22 | ||||
| 
 | ||||
| # This originates from X11R5 (mit/util/scripts/install.sh), which was | ||||
| # later released in X11R6 (xc/config/util/install.sh) with the | ||||
| # following copyright and license. | ||||
| # | ||||
| # Copyright (C) 1994 X Consortium | ||||
| # | ||||
| # Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
| # of this software and associated documentation files (the "Software"), to | ||||
| # deal in the Software without restriction, including without limitation the | ||||
| # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or | ||||
| # sell copies of the Software, and to permit persons to whom the Software is | ||||
| # furnished to do so, subject to the following conditions: | ||||
| # | ||||
| # The above copyright notice and this permission notice shall be included in | ||||
| # all copies or substantial portions of the Software. | ||||
| # | ||||
| # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
| # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE | ||||
| # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | ||||
| # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- | ||||
| # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| # | ||||
| # Except as contained in this notice, the name of the X Consortium shall not | ||||
| # be used in advertising or otherwise to promote the sale, use or other deal- | ||||
| # ings in this Software without prior written authorization from the X Consor- | ||||
| # tium. | ||||
| # | ||||
| # | ||||
| # FSF changes to this file are in the public domain. | ||||
| # | ||||
| # Calling this script install-sh is preferred over install.sh, to prevent | ||||
| # `make' implicit rules from creating a file called install from it | ||||
| # when there is no Makefile. | ||||
| # | ||||
| # This script is compatible with the BSD install script, but was written | ||||
| # from scratch.  It can only install one file at a time, a restriction | ||||
| # shared with many OS's install programs. | ||||
| 
 | ||||
| # set DOITPROG to echo to test this script | ||||
| 
 | ||||
| # Don't use :- since 4.3BSD and earlier shells don't like it. | ||||
| doit="${DOITPROG-}" | ||||
| 
 | ||||
| # put in absolute paths if you don't have them in your path; or use env. vars. | ||||
| 
 | ||||
| mvprog="${MVPROG-mv}" | ||||
| cpprog="${CPPROG-cp}" | ||||
| chmodprog="${CHMODPROG-chmod}" | ||||
| chownprog="${CHOWNPROG-chown}" | ||||
| chgrpprog="${CHGRPPROG-chgrp}" | ||||
| stripprog="${STRIPPROG-strip}" | ||||
| rmprog="${RMPROG-rm}" | ||||
| mkdirprog="${MKDIRPROG-mkdir}" | ||||
| 
 | ||||
| chmodcmd="$chmodprog 0755" | ||||
| chowncmd= | ||||
| chgrpcmd= | ||||
| stripcmd= | ||||
| rmcmd="$rmprog -f" | ||||
| mvcmd="$mvprog" | ||||
| src= | ||||
| dst= | ||||
| dir_arg= | ||||
| dstarg= | ||||
| no_target_directory= | ||||
| 
 | ||||
| usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE | ||||
|    or: $0 [OPTION]... SRCFILES... DIRECTORY | ||||
|    or: $0 [OPTION]... -t DIRECTORY SRCFILES... | ||||
|    or: $0 [OPTION]... -d DIRECTORIES... | ||||
| 
 | ||||
| In the 1st form, copy SRCFILE to DSTFILE. | ||||
| In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. | ||||
| In the 4th, create DIRECTORIES. | ||||
| 
 | ||||
| Options: | ||||
| -c         (ignored) | ||||
| -d         create directories instead of installing files. | ||||
| -g GROUP   $chgrpprog installed files to GROUP. | ||||
| -m MODE    $chmodprog installed files to MODE. | ||||
| -o USER    $chownprog installed files to USER. | ||||
| -s         $stripprog installed files. | ||||
| -t DIRECTORY  install into DIRECTORY. | ||||
| -T         report an error if DSTFILE is a directory. | ||||
| --help     display this help and exit. | ||||
| --version  display version info and exit. | ||||
| 
 | ||||
| Environment variables override the default commands: | ||||
|   CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG | ||||
| " | ||||
| 
 | ||||
| while test -n "$1"; do | ||||
|   case $1 in | ||||
|     -c) shift | ||||
|         continue;; | ||||
| 
 | ||||
|     -d) dir_arg=true | ||||
|         shift | ||||
|         continue;; | ||||
| 
 | ||||
|     -g) chgrpcmd="$chgrpprog $2" | ||||
|         shift | ||||
|         shift | ||||
|         continue;; | ||||
| 
 | ||||
|     --help) echo "$usage"; exit $?;; | ||||
| 
 | ||||
|     -m) chmodcmd="$chmodprog $2" | ||||
|         shift | ||||
|         shift | ||||
|         continue;; | ||||
| 
 | ||||
|     -o) chowncmd="$chownprog $2" | ||||
|         shift | ||||
|         shift | ||||
|         continue;; | ||||
| 
 | ||||
|     -s) stripcmd=$stripprog | ||||
|         shift | ||||
|         continue;; | ||||
| 
 | ||||
|     -t) dstarg=$2 | ||||
| 	shift | ||||
| 	shift | ||||
| 	continue;; | ||||
| 
 | ||||
|     -T) no_target_directory=true | ||||
| 	shift | ||||
| 	continue;; | ||||
| 
 | ||||
|     --version) echo "$0 $scriptversion"; exit $?;; | ||||
| 
 | ||||
|     *)  # When -d is used, all remaining arguments are directories to create. | ||||
| 	# When -t is used, the destination is already specified. | ||||
| 	test -n "$dir_arg$dstarg" && break | ||||
|         # Otherwise, the last argument is the destination.  Remove it from $@. | ||||
| 	for arg | ||||
| 	do | ||||
|           if test -n "$dstarg"; then | ||||
| 	    # $@ is not empty: it contains at least $arg. | ||||
| 	    set fnord "$@" "$dstarg" | ||||
| 	    shift # fnord | ||||
| 	  fi | ||||
| 	  shift # arg | ||||
| 	  dstarg=$arg | ||||
| 	done | ||||
| 	break;; | ||||
|   esac | ||||
| done | ||||
| 
 | ||||
| if test -z "$1"; then | ||||
|   if test -z "$dir_arg"; then | ||||
|     echo "$0: no input file specified." >&2 | ||||
|     exit 1 | ||||
|   fi | ||||
|   # It's OK to call `install-sh -d' without argument. | ||||
|   # This can happen when creating conditional directories. | ||||
|   exit 0 | ||||
| fi | ||||
| 
 | ||||
| for src | ||||
| do | ||||
|   # Protect names starting with `-'. | ||||
|   case $src in | ||||
|     -*) src=./$src ;; | ||||
|   esac | ||||
| 
 | ||||
|   if test -n "$dir_arg"; then | ||||
|     dst=$src | ||||
|     src= | ||||
| 
 | ||||
|     if test -d "$dst"; then | ||||
|       mkdircmd=: | ||||
|       chmodcmd= | ||||
|     else | ||||
|       mkdircmd=$mkdirprog | ||||
|     fi | ||||
|   else | ||||
|     # Waiting for this to be detected by the "$cpprog $src $dsttmp" command | ||||
|     # might cause directories to be created, which would be especially bad | ||||
|     # if $src (and thus $dsttmp) contains '*'. | ||||
|     if test ! -f "$src" && test ! -d "$src"; then | ||||
|       echo "$0: $src does not exist." >&2 | ||||
|       exit 1 | ||||
|     fi | ||||
| 
 | ||||
|     if test -z "$dstarg"; then | ||||
|       echo "$0: no destination specified." >&2 | ||||
|       exit 1 | ||||
|     fi | ||||
| 
 | ||||
|     dst=$dstarg | ||||
|     # Protect names starting with `-'. | ||||
|     case $dst in | ||||
|       -*) dst=./$dst ;; | ||||
|     esac | ||||
| 
 | ||||
|     # If destination is a directory, append the input filename; won't work | ||||
|     # if double slashes aren't ignored. | ||||
|     if test -d "$dst"; then | ||||
|       if test -n "$no_target_directory"; then | ||||
| 	echo "$0: $dstarg: Is a directory" >&2 | ||||
| 	exit 1 | ||||
|       fi | ||||
|       dst=$dst/`basename "$src"` | ||||
|     fi | ||||
|   fi | ||||
| 
 | ||||
|   # This sed command emulates the dirname command. | ||||
|   dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` | ||||
| 
 | ||||
|   # Make sure that the destination directory exists. | ||||
| 
 | ||||
|   # Skip lots of stat calls in the usual case. | ||||
|   if test ! -d "$dstdir"; then | ||||
|     defaultIFS=' | ||||
| 	 ' | ||||
|     IFS="${IFS-$defaultIFS}" | ||||
| 
 | ||||
|     oIFS=$IFS | ||||
|     # Some sh's can't handle IFS=/ for some reason. | ||||
|     IFS='%' | ||||
|     set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` | ||||
|     shift | ||||
|     IFS=$oIFS | ||||
| 
 | ||||
|     pathcomp= | ||||
| 
 | ||||
|     while test $# -ne 0 ; do | ||||
|       pathcomp=$pathcomp$1 | ||||
|       shift | ||||
|       if test ! -d "$pathcomp"; then | ||||
|         $mkdirprog "$pathcomp" | ||||
| 	# mkdir can fail with a `File exist' error in case several | ||||
| 	# install-sh are creating the directory concurrently.  This | ||||
| 	# is OK. | ||||
| 	test -d "$pathcomp" || exit | ||||
|       fi | ||||
|       pathcomp=$pathcomp/ | ||||
|     done | ||||
|   fi | ||||
| 
 | ||||
|   if test -n "$dir_arg"; then | ||||
|     $doit $mkdircmd "$dst" \ | ||||
|       && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ | ||||
|       && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ | ||||
|       && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ | ||||
|       && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } | ||||
| 
 | ||||
|   else | ||||
|     dstfile=`basename "$dst"` | ||||
| 
 | ||||
|     # Make a couple of temp file names in the proper directory. | ||||
|     dsttmp=$dstdir/_inst.$$_ | ||||
|     rmtmp=$dstdir/_rm.$$_ | ||||
| 
 | ||||
|     # Trap to clean up those temp files at exit. | ||||
|     trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 | ||||
|     trap '(exit $?); exit' 1 2 13 15 | ||||
| 
 | ||||
|     # Copy the file name to the temp name. | ||||
|     $doit $cpprog "$src" "$dsttmp" && | ||||
| 
 | ||||
|     # and set any options; do chmod last to preserve setuid bits. | ||||
|     # | ||||
|     # If any of these fail, we abort the whole thing.  If we want to | ||||
|     # ignore errors from any of these, just make sure not to ignore | ||||
|     # errors from the above "$doit $cpprog $src $dsttmp" command. | ||||
|     # | ||||
|     { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ | ||||
|       && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ | ||||
|       && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ | ||||
|       && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && | ||||
| 
 | ||||
|     # Now rename the file to the real destination. | ||||
|     { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ | ||||
|       || { | ||||
| 	   # The rename failed, perhaps because mv can't rename something else | ||||
| 	   # to itself, or perhaps because mv is so ancient that it does not | ||||
| 	   # support -f. | ||||
| 
 | ||||
| 	   # Now remove or move aside any old file at destination location. | ||||
| 	   # We try this two ways since rm can't unlink itself on some | ||||
| 	   # systems and the destination file might be busy for other | ||||
| 	   # reasons.  In this case, the final cleanup might fail but the new | ||||
| 	   # file should still install successfully. | ||||
| 	   { | ||||
| 	     if test -f "$dstdir/$dstfile"; then | ||||
| 	       $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ | ||||
| 	       || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ | ||||
| 	       || { | ||||
| 		 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 | ||||
| 		 (exit 1); exit 1 | ||||
| 	       } | ||||
| 	     else | ||||
| 	       : | ||||
| 	     fi | ||||
| 	   } && | ||||
| 
 | ||||
| 	   # Now rename the file to the real destination. | ||||
| 	   $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" | ||||
| 	 } | ||||
|     } | ||||
|   fi || { (exit 1); exit 1; } | ||||
| done | ||||
| 
 | ||||
| # The final little trick to "correctly" pass the exit status to the exit trap. | ||||
| { | ||||
|   (exit 0); exit 0 | ||||
| } | ||||
| 
 | ||||
| # Local variables: | ||||
| # eval: (add-hook 'write-file-hooks 'time-stamp) | ||||
| # time-stamp-start: "scriptversion=" | ||||
| # time-stamp-format: "%:y-%02m-%02d.%02H" | ||||
| # time-stamp-end: "$" | ||||
| # End: | ||||
							
								
								
									
										263
									
								
								jtaudio.c
									
									
									
									
									
								
							
							
						
						
									
										263
									
								
								jtaudio.c
									
									
									
									
									
								
							| @ -1,263 +0,0 @@ | ||||
| #include <stdio.h> | ||||
| #include <portaudio.h> | ||||
| #include <string.h> | ||||
| 
 | ||||
| void fivehz_(); | ||||
| void fivehztx_(); | ||||
| void addnoise_(short int *n); | ||||
| 
 | ||||
| //  Definition of structure pointing to the audio data
 | ||||
| typedef struct | ||||
| { | ||||
|   double *Tsec; | ||||
|   double *tbuf; | ||||
|   int    *iwrite; | ||||
|   int    *ibuf; | ||||
|   int    *TxOK; | ||||
|   int    *ndebug; | ||||
|   int    *ndsec; | ||||
|   int    *Transmitting; | ||||
|   int    *nwave; | ||||
|   int    *nmode; | ||||
|   int    *trperiod; | ||||
|   int     nbuflen; | ||||
|   int     nfs; | ||||
|   short  *y1; | ||||
|   short  *y2; | ||||
|   short  *iwave; | ||||
| } | ||||
| paTestData; | ||||
| 
 | ||||
| typedef struct _SYSTEMTIME | ||||
| { | ||||
|   short   Year; | ||||
|   short   Month; | ||||
|   short   DayOfWeek; | ||||
|   short   Day; | ||||
|   short   Hour; | ||||
|   short   Minute; | ||||
|   short   Second; | ||||
|   short   Millisecond; | ||||
| } SYSTEMTIME; | ||||
| 
 | ||||
| #ifdef Win32 | ||||
| extern void __stdcall GetSystemTime(SYSTEMTIME *st); | ||||
| #else | ||||
| #include <sys/time.h> | ||||
| #include <time.h> | ||||
| 
 | ||||
| void GetSystemTime(SYSTEMTIME *st){ | ||||
|   struct timeval tmptimeofday; | ||||
|   struct tm tmptmtime; | ||||
|   gettimeofday(&tmptimeofday,NULL); | ||||
|   gmtime_r((const time_t *)&tmptimeofday.tv_sec,&tmptmtime); | ||||
|   st->Year = (short)tmptmtime.tm_year; | ||||
|   st->Month = (short)tmptmtime.tm_year; | ||||
|   st->DayOfWeek = (short)tmptmtime.tm_wday; | ||||
|   st->Day = (short)tmptmtime.tm_mday; | ||||
|   st->Hour = (short)tmptmtime.tm_hour; | ||||
|   st->Minute = (short)tmptmtime.tm_min; | ||||
|   st->Second = (short)tmptmtime.tm_sec; | ||||
|   st->Millisecond = (short)(tmptimeofday.tv_usec/1000); | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| //  Output callback routine:
 | ||||
| static int SoundOut( void *inputBuffer, void *outputBuffer, | ||||
| 		       unsigned long framesPerBuffer, | ||||
| 		       const PaStreamCallbackTimeInfo* timeInfo,  | ||||
| 		       PaStreamCallbackFlags statusFlags, | ||||
| 		       void *userData ) | ||||
| { | ||||
|   paTestData *data = (paTestData*)userData; | ||||
|   short *wptr = (short*)outputBuffer; | ||||
|   unsigned int i,n; | ||||
|   static short int n2; | ||||
|   static int n0; | ||||
|   static int ia=0; | ||||
|   static int ib=0; | ||||
|   static int ic=0; | ||||
|   static int TxOKz=0; | ||||
|   static double stime0=86400.0; | ||||
|   int nsec; | ||||
|   double stime; | ||||
|   SYSTEMTIME st; | ||||
| 
 | ||||
|   // Get System time
 | ||||
|   GetSystemTime(&st); | ||||
|   nsec = (int) (st.Hour*3600.0 + st.Minute*60.0 + st.Second); | ||||
|   stime = nsec + st.Millisecond*0.001 + *data->ndsec*0.1; | ||||
|   *data->Tsec = stime; | ||||
|   nsec=(int)stime; | ||||
| 
 | ||||
|   if(*data->TxOK && (!TxOKz))  { | ||||
|     n=nsec/(*data->trperiod); | ||||
|     //    ic = (int)(stime - *data->trperiod*n) * data->nfs/framesPerBuffer;
 | ||||
|     //    ic = framesPerBuffer*ic;
 | ||||
|     ic = (int)(stime - *data->trperiod*n) * data->nfs; | ||||
|     ic = ic % *data->nwave; | ||||
|   } | ||||
| 
 | ||||
|   TxOKz=*data->TxOK; | ||||
|   *data->Transmitting=*data->TxOK; | ||||
| 
 | ||||
|   if(*data->TxOK)  { | ||||
|     for(i=0 ; i<framesPerBuffer; i++ )  { | ||||
|       n2=data->iwave[ic]; | ||||
|       addnoise_(&n2); | ||||
|       *wptr++ = n2;                   //left
 | ||||
|       *wptr++ = n2;                   //right
 | ||||
|       ic++; | ||||
|       if(ic>=*data->nwave) { | ||||
| 	if(*data->nmode==2) { | ||||
| 	  *data->TxOK=0; | ||||
| 	  ic--; | ||||
| 	} | ||||
| 	else | ||||
| 	  ic = ic % *data->nwave;       //Wrap buffer pointer if necessary
 | ||||
|       } | ||||
|     } | ||||
|   } else { | ||||
|     memset((void*)outputBuffer, 0, 2*sizeof(short)*framesPerBuffer); | ||||
|   } | ||||
|   fivehz_();                               //Call fortran routine
 | ||||
|   fivehztx_();                             //Call fortran routine
 | ||||
|   return 0; | ||||
| } | ||||
| 
 | ||||
| /*******************************************************************/ | ||||
| int jtaudio_(int *ndevin, int *ndevout, short y1[], short y2[],  | ||||
| 	     int *nbuflen, int *iwrite, short iwave[],  | ||||
| 	     int *nwave, int *nfsample, int *nsamperbuf, | ||||
| 	     int *TRPeriod, int *TxOK, int *ndebug, | ||||
|  	     int *Transmitting, double *Tsec, int *ngo, int *nmode, | ||||
| 	     double tbuf[], int *ibuf, int *ndsec) | ||||
| { | ||||
|   paTestData data; | ||||
|   PaStream *outstream; | ||||
|   PaStreamParameters outputParameters; | ||||
| 
 | ||||
|   int nfs,ndin,ndout; | ||||
|   PaError err1,err2,err2a,err3,err3a; | ||||
|   double dnfs; | ||||
| 
 | ||||
|   data.Tsec = Tsec; | ||||
|   data.tbuf = tbuf; | ||||
|   data.iwrite = iwrite; | ||||
|   data.ibuf = ibuf; | ||||
|   data.TxOK = TxOK; | ||||
|   data.ndebug = ndebug; | ||||
|   data.ndsec = ndsec; | ||||
|   data.Transmitting = Transmitting; | ||||
|   data.y1 = y1; | ||||
|   data.y2 = y2; | ||||
|   data.nbuflen = *nbuflen; | ||||
|   data.nmode = nmode; | ||||
|   data.nwave = nwave; | ||||
|   data.iwave = iwave; | ||||
|   data.nfs = *nfsample; | ||||
|   data.trperiod = TRPeriod; | ||||
| 
 | ||||
|   nfs=*nfsample; | ||||
|   err1=Pa_Initialize();                      // Initialize PortAudio
 | ||||
|   if(err1) { | ||||
|     printf("Error initializing PortAudio.\n"); | ||||
|     printf("%s\n",Pa_GetErrorText(err1)); | ||||
|     goto error; | ||||
|   } | ||||
| 
 | ||||
|   ndin=*ndevin; | ||||
|   ndout=*ndevout; | ||||
|   dnfs=(double)nfs; | ||||
|   printf("Opening device %d for output.\n",ndout); | ||||
| 
 | ||||
|   outputParameters.device=*ndevout; | ||||
|   outputParameters.channelCount=2; | ||||
|   outputParameters.sampleFormat=paInt16; | ||||
|   outputParameters.suggestedLatency=1.0; | ||||
|   outputParameters.hostApiSpecificStreamInfo=NULL; | ||||
|   err2a=Pa_OpenStream( | ||||
| 		       &outstream,      //address of stream
 | ||||
| 		       NULL, | ||||
| 		       &outputParameters, | ||||
| 		       dnfs,            //Sample rate
 | ||||
| 		       2048,            //Frames per buffer
 | ||||
| 		       paNoFlag, | ||||
| 		       (PaStreamCallback *)SoundOut, //Callback routine
 | ||||
| 		       (void *)&data);               //address of data structure
 | ||||
|   if(err2a) { | ||||
|     printf("Error opening Audio stream for output.\n"); | ||||
|     printf("%s\n",Pa_GetErrorText(err2a)); | ||||
|     goto error; | ||||
|   } | ||||
| 
 | ||||
|   err3a=Pa_StartStream(outstream);             //Start output stream
 | ||||
|   if(err3a) { | ||||
|     printf("Error starting output Audio stream\n"); | ||||
|     printf("%s\n",Pa_GetErrorText(err3a)); | ||||
|     goto error; | ||||
|   } | ||||
| 
 | ||||
|   printf("Audio output stream running normally.\n******************************************************************\n"); | ||||
| 
 | ||||
|   while(Pa_IsStreamActive(outstream))  { | ||||
|     if(*ngo==0) goto StopStream; | ||||
|     Pa_Sleep(200); | ||||
|   } | ||||
| 
 | ||||
|  StopStream: | ||||
|   Pa_AbortStream(outstream);              // Abort stream
 | ||||
|   Pa_CloseStream(outstream);             // Close stream, we're done.
 | ||||
|   Pa_Terminate(); | ||||
|   return(0); | ||||
| 
 | ||||
| error: | ||||
|   printf("%d  %f  %d  %d  %d\n",ndout,dnfs,err1,err2a,err3a); | ||||
|   Pa_Terminate(); | ||||
|   return(1); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int padevsub_(int *numdev, int *ndefin, int *ndefout,  | ||||
| 	      int nchin[], int nchout[]) | ||||
| { | ||||
|   int      i; | ||||
|   int      numDevices; | ||||
|   const    PaDeviceInfo *pdi; | ||||
|   PaError  err; | ||||
|   //  PaHostApiInfo *hostapi;
 | ||||
|    | ||||
|   Pa_Initialize(); | ||||
| 
 | ||||
|   //  numDevices = Pa_CountDevices();
 | ||||
|   numDevices = Pa_GetDeviceCount(); | ||||
|   | ||||
|   *numdev=numDevices; | ||||
|   if( numDevices < 0 )  { | ||||
|     err = numDevices; | ||||
|     goto error; | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|   printf("\nAudio    Output    Device Name\n"); | ||||
|   printf("Device  Channels\n"); | ||||
|   printf("----------------------------------------------------------\n"); | ||||
| 
 | ||||
|   for( i=0; i<numDevices; i++ )  { | ||||
|     pdi = Pa_GetDeviceInfo( i ); | ||||
|     if(i == Pa_GetDefaultInputDevice()) *ndefin=i; | ||||
|     if(i == Pa_GetDefaultOutputDevice()) *ndefout=i; | ||||
|     nchin[i]=pdi->maxInputChannels; | ||||
|     nchout[i]=pdi->maxOutputChannels; | ||||
|     if(nchout[i]>0)  | ||||
|       printf("  %2d      %2d       %s\n",i,nchout[i],pdi->name); | ||||
|   } | ||||
| 
 | ||||
|   Pa_Terminate(); | ||||
|   return 0; | ||||
| 
 | ||||
|  error: | ||||
|   Pa_Terminate(); | ||||
|   return err; | ||||
| } | ||||
| 
 | ||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user