mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05: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
							
								
									412e7cf4af
								
							
						
					
					
						commit
						9e73f87218
					
				
							
								
								
									
										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