mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-04 05:50:31 -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
							
								
									58ec81d9b5
								
							
						
					
					
						commit
						04dcf0a528
					
				
							
								
								
									
										87
									
								
								DFINC.MAK
									
									
									
									
									
								
							
							
						
						
									
										87
									
								
								DFINC.MAK
									
									
									
									
									
								
							@ -1,87 +0,0 @@
 | 
			
		||||
#+
 | 
			
		||||
# DFINC.MAK - Visual Fortran application master NMAKE definitions file
 | 
			
		||||
#
 | 
			
		||||
# This software DFINC.MAK is part of the Visual Fortran kit.
 | 
			
		||||
# 
 | 
			
		||||
# This file should be included at the top of all MAKEFILEs as follows:
 | 
			
		||||
#  !include <dfinc.mak>
 | 
			
		||||
# 
 | 
			
		||||
# NMAKE Options:
 | 
			
		||||
#
 | 
			
		||||
# Use the table below to determine the additional options for NMAKE
 | 
			
		||||
# Application Information Type         Invoke NMAKE
 | 
			
		||||
# ----------------------------         ------------
 | 
			
		||||
# For Debugging Info                   nmake debug=1
 | 
			
		||||
# For linker map                       nmake linkmap=1
 | 
			
		||||
# For linking with the DLLs            nmake linkdll=1
 | 
			
		||||
#-
 | 
			
		||||
 | 
			
		||||
# Set the defaults for all the MSVCxx versions
 | 
			
		||||
 | 
			
		||||
crtimplib=msvcrt.lib
 | 
			
		||||
 | 
			
		||||
!IFNDEF link
 | 
			
		||||
link = link
 | 
			
		||||
!ENDIF
 | 
			
		||||
!IFNDEF libr
 | 
			
		||||
libr = lib
 | 
			
		||||
!ENDIF
 | 
			
		||||
 | 
			
		||||
# Define the compiler verbs.
 | 
			
		||||
FOR = df
 | 
			
		||||
 | 
			
		||||
# Macros for the compiler
 | 
			
		||||
!IFDEF DEBUG
 | 
			
		||||
df_debug =  /debug:full
 | 
			
		||||
lnk_debug = /debug:full /debugtype:both
 | 
			
		||||
!ELSE
 | 
			
		||||
df_debug =
 | 
			
		||||
lnk_debug = /debug:none
 | 
			
		||||
!ENDIF
 | 
			
		||||
 | 
			
		||||
!IFDEF LINKDLL
 | 
			
		||||
df_dll   = /call_dll
 | 
			
		||||
dflibs   = dfordll.lib $(crtimplib) kernel32.lib
 | 
			
		||||
!ELSE
 | 
			
		||||
df_dll   =
 | 
			
		||||
dflibs   = dfor.lib libc.lib kernel32.lib
 | 
			
		||||
!ENDIF
 | 
			
		||||
 | 
			
		||||
fflags    = $(df_debug) $(df_dll) 
 | 
			
		||||
 | 
			
		||||
# Macros for the FPP Preprocesor 
 | 
			
		||||
fppflags =
 | 
			
		||||
fpp = $(FOR) $(fflags) /fpp="$(fppflags)"
 | 
			
		||||
 | 
			
		||||
# Macros for the linker.
 | 
			
		||||
!IFDEF LINKMAP
 | 
			
		||||
lflags = /map:$(*B).map $(lflags)
 | 
			
		||||
!ELSE
 | 
			
		||||
lflags = $(lflags)
 | 
			
		||||
!ENDIF
 | 
			
		||||
 | 
			
		||||
# SUFFIXES list
 | 
			
		||||
.SUFFIXES: .exe .obj .asm .c .bas .cbl .fpp .for .f90 .pas .res .rc 
 | 
			
		||||
 | 
			
		||||
# Define the inference rules
 | 
			
		||||
.obj.exe:
 | 
			
		||||
   $(FOR) $(df_dll) $(df_debug) /link $(lflags) $(lnk_debug) $*.obj 
 | 
			
		||||
 | 
			
		||||
.for.exe:
 | 
			
		||||
   $(FOR) $(fflags) $*.for /link $(lflags)
 | 
			
		||||
 | 
			
		||||
.f90.exe:
 | 
			
		||||
   $(FOR) $(fflags) $*.f90 /link $(lflags)
 | 
			
		||||
 | 
			
		||||
.fpp.exe:
 | 
			
		||||
   $(fpp) $*.fpp /link $(lflags)
 | 
			
		||||
 | 
			
		||||
.for.obj:
 | 
			
		||||
   $(FOR) $(df_debug) $*.for /nolink /object:$@
 | 
			
		||||
 | 
			
		||||
.f90.obj:
 | 
			
		||||
   $(FOR) $(df_debug) $*.f90 /nolink /object:$@
 | 
			
		||||
 | 
			
		||||
.fpp.obj:
 | 
			
		||||
   $(FOR) $(df_debug) /nolink /object:$@ /fpp:"$(fppflags)" $*.fpp
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										102
									
								
								GeoDist.f
									
									
									
									
									
								
							
							
						
						
									
										102
									
								
								GeoDist.f
									
									
									
									
									
								
							@ -1,102 +0,0 @@
 | 
			
		||||
	subroutine geodist(Eplat, Eplon, Stlat, Stlon,
 | 
			
		||||
     +	  Az, Baz, Dist)
 | 
			
		||||
	implicit none
 | 
			
		||||
	real eplat, eplon, stlat, stlon, az, baz, dist
 | 
			
		||||
 | 
			
		||||
C JHT: In actual fact, I use the first two arguments for "My Location",
 | 
			
		||||
C      the second two for "His location"; West longitude is positive.
 | 
			
		||||
 | 
			
		||||
c
 | 
			
		||||
c
 | 
			
		||||
c	Taken directly from:
 | 
			
		||||
c	Thomas, P.D., 1970, Spheroidal geodesics, reference systems,
 | 
			
		||||
c	& local geometry, U.S. Naval Oceanographic Office SP-138,
 | 
			
		||||
c	165 pp.
 | 
			
		||||
c
 | 
			
		||||
c	assumes North Latitude and East Longitude are positive
 | 
			
		||||
c
 | 
			
		||||
c	EpLat, EpLon = End point Lat/Long
 | 
			
		||||
c	Stlat, Stlon = Start point lat/long
 | 
			
		||||
c	Az, BAz = direct & reverse azimuith
 | 
			
		||||
c	Dist = Dist (km); Deg = central angle, discarded
 | 
			
		||||
c
 | 
			
		||||
 | 
			
		||||
	real BOA, F, P1R, P2R, L1R, L2R, DLR, T1R, T2R, TM,
 | 
			
		||||
     +    DTM, STM, CTM, SDTM,CDTM, KL, KK, SDLMR, L,
 | 
			
		||||
     +    CD, DL, SD, T, U, V, D, X, E, Y, A, FF64, TDLPM,
 | 
			
		||||
     +    HAPBR, HAMBR, A1M2, A2M1
 | 
			
		||||
 | 
			
		||||
	real AL,BL,D2R,Pi2
 | 
			
		||||
 | 
			
		||||
	data AL/6378206.4/		! Clarke 1866 ellipsoid
 | 
			
		||||
	data BL/6356583.8/
 | 
			
		||||
c	real pi /3.14159265359/
 | 
			
		||||
	data D2R/0.01745329251994/	! degrees to radians conversion factor
 | 
			
		||||
	data Pi2/6.28318530718/
 | 
			
		||||
 | 
			
		||||
        BOA = BL/AL
 | 
			
		||||
        F = 1.0 - BOA
 | 
			
		||||
c convert st/end pts to radians
 | 
			
		||||
        P1R = Eplat * D2R
 | 
			
		||||
        P2R = Stlat * D2R
 | 
			
		||||
        L1R = Eplon * D2R
 | 
			
		||||
        L2R = StLon * D2R
 | 
			
		||||
        DLR = L2R - L1R			! DLR = Delta Long in Rads
 | 
			
		||||
        T1R = ATan(BOA * Tan(P1R))
 | 
			
		||||
        T2R = ATan(BOA * Tan(P2R))
 | 
			
		||||
        TM = (T1R + T2R) / 2.0
 | 
			
		||||
        DTM = (T2R - T1R) / 2.0
 | 
			
		||||
        STM = Sin(TM)
 | 
			
		||||
        CTM = Cos(TM)
 | 
			
		||||
        SDTM = Sin(DTM)
 | 
			
		||||
        CDTM = Cos(DTM)
 | 
			
		||||
        KL = STM * CDTM
 | 
			
		||||
        KK = SDTM * CTM
 | 
			
		||||
        SDLMR = Sin(DLR/2.0)
 | 
			
		||||
        L = SDTM * SDTM + SDLMR * SDLMR * (CDTM * CDTM - STM * STM)
 | 
			
		||||
        CD = 1.0 - 2.0 * L
 | 
			
		||||
        DL = ACos(CD)
 | 
			
		||||
        SD = Sin(DL)
 | 
			
		||||
        T = DL/SD
 | 
			
		||||
        U = 2.0 * KL * KL / (1.0 - L)
 | 
			
		||||
        V = 2.0 * KK * KK / L
 | 
			
		||||
        D = 4.0 * T * T
 | 
			
		||||
        X = U + V
 | 
			
		||||
        E = -2.0 * CD
 | 
			
		||||
        Y = U - V
 | 
			
		||||
        A = -D * E
 | 
			
		||||
        FF64 = F * F / 64.0
 | 
			
		||||
        Dist = AL*SD*(T -(F/4.0)*(T*X-Y)+FF64*(X*(A+(T-(A+E)
 | 
			
		||||
     +    /2.0)*X)+Y*(-2.0*D+E*Y)+D*X*Y))/1000.0
 | 
			
		||||
        TDLPM = Tan((DLR+(-((E*(4.0-X)+2.0*Y)*((F/2.0)*T+FF64*
 | 
			
		||||
     +    (32.0*T+(A-20.0*T)*X-2.0*(D+2.0)*Y))/4.0)*Tan(DLR)))/2.0)
 | 
			
		||||
        HAPBR = ATan2(SDTM,(CTM*TDLPM))
 | 
			
		||||
        HAMBR = Atan2(CDTM,(STM*TDLPM))
 | 
			
		||||
        A1M2 = Pi2 + HAMBR - HAPBR
 | 
			
		||||
        A2M1 = Pi2 - HAMBR - HAPBR
 | 
			
		||||
 | 
			
		||||
1	If ((A1M2 .ge. 0.0) .AND. (A1M2 .lt. Pi2)) GOTO 5
 | 
			
		||||
 	If (A1M2 .lt. Pi2) GOTO 4
 | 
			
		||||
 	A1M2 = A1M2 - Pi2
 | 
			
		||||
        GOTO 1
 | 
			
		||||
4	A1M2 = A1M2 + Pi2
 | 
			
		||||
        GOTO 1
 | 
			
		||||
c
 | 
			
		||||
c all of this gens the proper az, baz (forward and back azimuth)
 | 
			
		||||
c
 | 
			
		||||
 | 
			
		||||
5	If ((A2M1 .ge. 0.0) .AND. (A2M1 .lt. Pi2)) GOTO 9
 | 
			
		||||
 	If (A2M1 .lt. Pi2) GOTO 8
 | 
			
		||||
	A2M1 = A2M1 - Pi2
 | 
			
		||||
        GOTO 5
 | 
			
		||||
8	A2M1 = A2M1 + Pi2
 | 
			
		||||
        GOTO 5
 | 
			
		||||
 | 
			
		||||
9	Az = A1M2 / D2R
 | 
			
		||||
	BAZ = A2M1 / D2R
 | 
			
		||||
c
 | 
			
		||||
c Fix the mirrored coords here.
 | 
			
		||||
c
 | 
			
		||||
	az = 360.0 - az
 | 
			
		||||
	baz = 360.0 - baz
 | 
			
		||||
	end
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								KVASD_g95.EXE
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								KVASD_g95.EXE
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										344
									
								
								LICENSE.TXT
									
									
									
									
									
								
							
							
						
						
									
										344
									
								
								LICENSE.TXT
									
									
									
									
									
								
							@ -1,344 +0,0 @@
 | 
			
		||||
The source code for WSJT is made available under the GNU General
 | 
			
		||||
Public License.
 | 
			
		||||
 | 
			
		||||
#####################################################################
 | 
			
		||||
		    GNU GENERAL PUBLIC LICENSE
 | 
			
		||||
		       Version 2, June 1991
 | 
			
		||||
 | 
			
		||||
 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
 | 
			
		||||
                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 Everyone is permitted to copy and distribute verbatim copies
 | 
			
		||||
 of this license document, but changing it is not allowed.
 | 
			
		||||
 | 
			
		||||
			    Preamble
 | 
			
		||||
 | 
			
		||||
  The licenses for most software are designed to take away your
 | 
			
		||||
freedom to share and change it.  By contrast, the GNU General Public
 | 
			
		||||
License is intended to guarantee your freedom to share and change free
 | 
			
		||||
software--to make sure the software is free for all its users.  This
 | 
			
		||||
General Public License applies to most of the Free Software
 | 
			
		||||
Foundation's software and to any other program whose authors commit to
 | 
			
		||||
using it.  (Some other Free Software Foundation software is covered by
 | 
			
		||||
the GNU Library General Public License instead.)  You can apply it to
 | 
			
		||||
your programs, too.
 | 
			
		||||
 | 
			
		||||
  When we speak of free software, we are referring to freedom, not
 | 
			
		||||
price.  Our General Public Licenses are designed to make sure that you
 | 
			
		||||
have the freedom to distribute copies of free software (and charge for
 | 
			
		||||
this service if you wish), that you receive source code or can get it
 | 
			
		||||
if you want it, that you can change the software or use pieces of it
 | 
			
		||||
in new free programs; and that you know you can do these things.
 | 
			
		||||
 | 
			
		||||
  To protect your rights, we need to make restrictions that forbid
 | 
			
		||||
anyone to deny you these rights or to ask you to surrender the rights.
 | 
			
		||||
These restrictions translate to certain responsibilities for you if you
 | 
			
		||||
distribute copies of the software, or if you modify it.
 | 
			
		||||
 | 
			
		||||
  For example, if you distribute copies of such a program, whether
 | 
			
		||||
gratis or for a fee, you must give the recipients all the rights that
 | 
			
		||||
you have.  You must make sure that they, too, receive or can get the
 | 
			
		||||
source code.  And you must show them these terms so they know their
 | 
			
		||||
rights.
 | 
			
		||||
 | 
			
		||||
  We protect your rights with two steps: (1) copyright the software, and
 | 
			
		||||
(2) offer you this license which gives you legal permission to copy,
 | 
			
		||||
distribute and/or modify the software.
 | 
			
		||||
 | 
			
		||||
  Also, for each author's protection and ours, we want to make certain
 | 
			
		||||
that everyone understands that there is no warranty for this free
 | 
			
		||||
software.  If the software is modified by someone else and passed on, we
 | 
			
		||||
want its recipients to know that what they have is not the original, so
 | 
			
		||||
that any problems introduced by others will not reflect on the original
 | 
			
		||||
authors' reputations.
 | 
			
		||||
 | 
			
		||||
  Finally, any free program is threatened constantly by software
 | 
			
		||||
patents.  We wish to avoid the danger that redistributors of a free
 | 
			
		||||
program will individually obtain patent licenses, in effect making the
 | 
			
		||||
program proprietary.  To prevent this, we have made it clear that any
 | 
			
		||||
patent must be licensed for everyone's free use or not licensed at all.
 | 
			
		||||
 | 
			
		||||
  The precise terms and conditions for copying, distribution and
 | 
			
		||||
modification follow.
 | 
			
		||||
 | 
			
		||||
		    GNU GENERAL PUBLIC LICENSE
 | 
			
		||||
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 | 
			
		||||
 | 
			
		||||
  0. This License applies to any program or other work which contains
 | 
			
		||||
a notice placed by the copyright holder saying it may be distributed
 | 
			
		||||
under the terms of this General Public License.  The "Program", below,
 | 
			
		||||
refers to any such program or work, and a "work based on the Program"
 | 
			
		||||
means either the Program or any derivative work under copyright law:
 | 
			
		||||
that is to say, a work containing the Program or a portion of it,
 | 
			
		||||
either verbatim or with modifications and/or translated into another
 | 
			
		||||
language.  (Hereinafter, translation is included without limitation in
 | 
			
		||||
the term "modification".)  Each licensee is addressed as "you".
 | 
			
		||||
 | 
			
		||||
Activities other than copying, distribution and modification are not
 | 
			
		||||
covered by this License; they are outside its scope.  The act of
 | 
			
		||||
running the Program is not restricted, and the output from the Program
 | 
			
		||||
is covered only if its contents constitute a work based on the
 | 
			
		||||
Program (independent of having been made by running the Program).
 | 
			
		||||
Whether that is true depends on what the Program does.
 | 
			
		||||
 | 
			
		||||
  1. You may copy and distribute verbatim copies of the Program's
 | 
			
		||||
source code as you receive it, in any medium, provided that you
 | 
			
		||||
conspicuously and appropriately publish on each copy an appropriate
 | 
			
		||||
copyright notice and disclaimer of warranty; keep intact all the
 | 
			
		||||
notices that refer to this License and to the absence of any warranty;
 | 
			
		||||
and give any other recipients of the Program a copy of this License
 | 
			
		||||
along with the Program.
 | 
			
		||||
 | 
			
		||||
You may charge a fee for the physical act of transferring a copy, and
 | 
			
		||||
you may at your option offer warranty protection in exchange for a fee.
 | 
			
		||||
 | 
			
		||||
  2. You may modify your copy or copies of the Program or any portion
 | 
			
		||||
of it, thus forming a work based on the Program, and copy and
 | 
			
		||||
distribute such modifications or work under the terms of Section 1
 | 
			
		||||
above, provided that you also meet all of these conditions:
 | 
			
		||||
 | 
			
		||||
    a) You must cause the modified files to carry prominent notices
 | 
			
		||||
    stating that you changed the files and the date of any change.
 | 
			
		||||
 | 
			
		||||
    b) You must cause any work that you distribute or publish, that in
 | 
			
		||||
    whole or in part contains or is derived from the Program or any
 | 
			
		||||
    part thereof, to be licensed as a whole at no charge to all third
 | 
			
		||||
    parties under the terms of this License.
 | 
			
		||||
 | 
			
		||||
    c) If the modified program normally reads commands interactively
 | 
			
		||||
    when run, you must cause it, when started running for such
 | 
			
		||||
    interactive use in the most ordinary way, to print or display an
 | 
			
		||||
    announcement including an appropriate copyright notice and a
 | 
			
		||||
    notice that there is no warranty (or else, saying that you provide
 | 
			
		||||
    a warranty) and that users may redistribute the program under
 | 
			
		||||
    these conditions, and telling the user how to view a copy of this
 | 
			
		||||
    License.  (Exception: if the Program itself is interactive but
 | 
			
		||||
    does not normally print such an announcement, your work based on
 | 
			
		||||
    the Program is not required to print an announcement.)
 | 
			
		||||
 | 
			
		||||
These requirements apply to the modified work as a whole.  If
 | 
			
		||||
identifiable sections of that work are not derived from the Program,
 | 
			
		||||
and can be reasonably considered independent and separate works in
 | 
			
		||||
themselves, then this License, and its terms, do not apply to those
 | 
			
		||||
sections when you distribute them as separate works.  But when you
 | 
			
		||||
distribute the same sections as part of a whole which is a work based
 | 
			
		||||
on the Program, the distribution of the whole must be on the terms of
 | 
			
		||||
this License, whose permissions for other licensees extend to the
 | 
			
		||||
entire whole, and thus to each and every part regardless of who wrote it.
 | 
			
		||||
 | 
			
		||||
Thus, it is not the intent of this section to claim rights or contest
 | 
			
		||||
your rights to work written entirely by you; rather, the intent is to
 | 
			
		||||
exercise the right to control the distribution of derivative or
 | 
			
		||||
collective works based on the Program.
 | 
			
		||||
 | 
			
		||||
In addition, mere aggregation of another work not based on the Program
 | 
			
		||||
with the Program (or with a work based on the Program) on a volume of
 | 
			
		||||
a storage or distribution medium does not bring the other work under
 | 
			
		||||
the scope of this License.
 | 
			
		||||
 | 
			
		||||
  3. You may copy and distribute the Program (or a work based on it,
 | 
			
		||||
under Section 2) in object code or executable form under the terms of
 | 
			
		||||
Sections 1 and 2 above provided that you also do one of the following:
 | 
			
		||||
 | 
			
		||||
    a) Accompany it with the complete corresponding machine-readable
 | 
			
		||||
    source code, which must be distributed under the terms of Sections
 | 
			
		||||
    1 and 2 above on a medium customarily used for software interchange; or,
 | 
			
		||||
 | 
			
		||||
    b) Accompany it with a written offer, valid for at least three
 | 
			
		||||
    years, to give any third party, for a charge no more than your
 | 
			
		||||
    cost of physically performing source distribution, a complete
 | 
			
		||||
    machine-readable copy of the corresponding source code, to be
 | 
			
		||||
    distributed under the terms of Sections 1 and 2 above on a medium
 | 
			
		||||
    customarily used for software interchange; or,
 | 
			
		||||
 | 
			
		||||
    c) Accompany it with the information you received as to the offer
 | 
			
		||||
    to distribute corresponding source code.  (This alternative is
 | 
			
		||||
    allowed only for noncommercial distribution and only if you
 | 
			
		||||
    received the program in object code or executable form with such
 | 
			
		||||
    an offer, in accord with Subsection b above.)
 | 
			
		||||
 | 
			
		||||
The source code for a work means the preferred form of the work for
 | 
			
		||||
making modifications to it.  For an executable work, complete source
 | 
			
		||||
code means all the source code for all modules it contains, plus any
 | 
			
		||||
associated interface definition files, plus the scripts used to
 | 
			
		||||
control compilation and installation of the executable.  However, as a
 | 
			
		||||
special exception, the source code distributed need not include
 | 
			
		||||
anything that is normally distributed (in either source or binary
 | 
			
		||||
form) with the major components (compiler, kernel, and so on) of the
 | 
			
		||||
operating system on which the executable runs, unless that component
 | 
			
		||||
itself accompanies the executable.
 | 
			
		||||
 | 
			
		||||
If distribution of executable or object code is made by offering
 | 
			
		||||
access to copy from a designated place, then offering equivalent
 | 
			
		||||
access to copy the source code from the same place counts as
 | 
			
		||||
distribution of the source code, even though third parties are not
 | 
			
		||||
compelled to copy the source along with the object code.
 | 
			
		||||
 | 
			
		||||
  4. You may not copy, modify, sublicense, or distribute the Program
 | 
			
		||||
except as expressly provided under this License.  Any attempt
 | 
			
		||||
otherwise to copy, modify, sublicense or distribute the Program is
 | 
			
		||||
void, and will automatically terminate your rights under this License.
 | 
			
		||||
However, parties who have received copies, or rights, from you under
 | 
			
		||||
this License will not have their licenses terminated so long as such
 | 
			
		||||
parties remain in full compliance.
 | 
			
		||||
 | 
			
		||||
  5. You are not required to accept this License, since you have not
 | 
			
		||||
signed it.  However, nothing else grants you permission to modify or
 | 
			
		||||
distribute the Program or its derivative works.  These actions are
 | 
			
		||||
prohibited by law if you do not accept this License.  Therefore, by
 | 
			
		||||
modifying or distributing the Program (or any work based on the
 | 
			
		||||
Program), you indicate your acceptance of this License to do so, and
 | 
			
		||||
all its terms and conditions for copying, distributing or modifying
 | 
			
		||||
the Program or works based on it.
 | 
			
		||||
 | 
			
		||||
  6. Each time you redistribute the Program (or any work based on the
 | 
			
		||||
Program), the recipient automatically receives a license from the
 | 
			
		||||
original licensor to copy, distribute or modify the Program subject to
 | 
			
		||||
these terms and conditions.  You may not impose any further
 | 
			
		||||
restrictions on the recipients' exercise of the rights granted herein.
 | 
			
		||||
You are not responsible for enforcing compliance by third parties to
 | 
			
		||||
this License.
 | 
			
		||||
 | 
			
		||||
  7. If, as a consequence of a court judgment or allegation of patent
 | 
			
		||||
infringement or for any other reason (not limited to patent issues),
 | 
			
		||||
conditions are imposed on you (whether by court order, agreement or
 | 
			
		||||
otherwise) that contradict the conditions of this License, they do not
 | 
			
		||||
excuse you from the conditions of this License.  If you cannot
 | 
			
		||||
distribute so as to satisfy simultaneously your obligations under this
 | 
			
		||||
License and any other pertinent obligations, then as a consequence you
 | 
			
		||||
may not distribute the Program at all.  For example, if a patent
 | 
			
		||||
license would not permit royalty-free redistribution of the Program by
 | 
			
		||||
all those who receive copies directly or indirectly through you, then
 | 
			
		||||
the only way you could satisfy both it and this License would be to
 | 
			
		||||
refrain entirely from distribution of the Program.
 | 
			
		||||
 | 
			
		||||
If any portion of this section is held invalid or unenforceable under
 | 
			
		||||
any particular circumstance, the balance of the section is intended to
 | 
			
		||||
apply and the section as a whole is intended to apply in other
 | 
			
		||||
circumstances.
 | 
			
		||||
 | 
			
		||||
It is not the purpose of this section to induce you to infringe any
 | 
			
		||||
patents or other property right claims or to contest validity of any
 | 
			
		||||
such claims; this section has the sole purpose of protecting the
 | 
			
		||||
integrity of the free software distribution system, which is
 | 
			
		||||
implemented by public license practices.  Many people have made
 | 
			
		||||
generous contributions to the wide range of software distributed
 | 
			
		||||
through that system in reliance on consistent application of that
 | 
			
		||||
system; it is up to the author/donor to decide if he or she is willing
 | 
			
		||||
to distribute software through any other system and a licensee cannot
 | 
			
		||||
impose that choice.
 | 
			
		||||
 | 
			
		||||
This section is intended to make thoroughly clear what is believed to
 | 
			
		||||
be a consequence of the rest of this License.
 | 
			
		||||
 | 
			
		||||
  8. If the distribution and/or use of the Program is restricted in
 | 
			
		||||
certain countries either by patents or by copyrighted interfaces, the
 | 
			
		||||
original copyright holder who places the Program under this License
 | 
			
		||||
may add an explicit geographical distribution limitation excluding
 | 
			
		||||
those countries, so that distribution is permitted only in or among
 | 
			
		||||
countries not thus excluded.  In such case, this License incorporates
 | 
			
		||||
the limitation as if written in the body of this License.
 | 
			
		||||
 | 
			
		||||
  9. The Free Software Foundation may publish revised and/or new versions
 | 
			
		||||
of the General Public License from time to time.  Such new versions will
 | 
			
		||||
be similar in spirit to the present version, but may differ in detail to
 | 
			
		||||
address new problems or concerns.
 | 
			
		||||
 | 
			
		||||
Each version is given a distinguishing version number.  If the Program
 | 
			
		||||
specifies a version number of this License which applies to it and "any
 | 
			
		||||
later version", you have the option of following the terms and conditions
 | 
			
		||||
either of that version or of any later version published by the Free
 | 
			
		||||
Software Foundation.  If the Program does not specify a version number of
 | 
			
		||||
this License, you may choose any version ever published by the Free Software
 | 
			
		||||
Foundation.
 | 
			
		||||
 | 
			
		||||
  10. If you wish to incorporate parts of the Program into other free
 | 
			
		||||
programs whose distribution conditions are different, write to the author
 | 
			
		||||
to ask for permission.  For software which is copyrighted by the Free
 | 
			
		||||
Software Foundation, write to the Free Software Foundation; we sometimes
 | 
			
		||||
make exceptions for this.  Our decision will be guided by the two goals
 | 
			
		||||
of preserving the free status of all derivatives of our free software and
 | 
			
		||||
of promoting the sharing and reuse of software generally.
 | 
			
		||||
 | 
			
		||||
			    NO WARRANTY
 | 
			
		||||
 | 
			
		||||
  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
 | 
			
		||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
 | 
			
		||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
 | 
			
		||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
 | 
			
		||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 | 
			
		||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
 | 
			
		||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
 | 
			
		||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
 | 
			
		||||
REPAIR OR CORRECTION.
 | 
			
		||||
 | 
			
		||||
  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
 | 
			
		||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
 | 
			
		||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
 | 
			
		||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
 | 
			
		||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
 | 
			
		||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
 | 
			
		||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
 | 
			
		||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
 | 
			
		||||
POSSIBILITY OF SUCH DAMAGES.
 | 
			
		||||
 | 
			
		||||
		     END OF TERMS AND CONDITIONS
 | 
			
		||||
 | 
			
		||||
	    How to Apply These Terms to Your New Programs
 | 
			
		||||
 | 
			
		||||
  If you develop a new program, and you want it to be of the greatest
 | 
			
		||||
possible use to the public, the best way to achieve this is to make it
 | 
			
		||||
free software which everyone can redistribute and change under these terms.
 | 
			
		||||
 | 
			
		||||
  To do so, attach the following notices to the program.  It is safest
 | 
			
		||||
to attach them to the start of each source file to most effectively
 | 
			
		||||
convey the exclusion of warranty; and each file should have at least
 | 
			
		||||
the "copyright" line and a pointer to where the full notice is found.
 | 
			
		||||
 | 
			
		||||
    <one line to give the program's name and a brief idea of what it does.>
 | 
			
		||||
    Copyright (C) <year>  <name of author>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License
 | 
			
		||||
    along with this program; if not, write to the Free Software
 | 
			
		||||
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Also add information on how to contact you by electronic and paper mail.
 | 
			
		||||
 | 
			
		||||
If the program is interactive, make it output a short notice like this
 | 
			
		||||
when it starts in an interactive mode:
 | 
			
		||||
 | 
			
		||||
    Gnomovision version 69, Copyright (C) year name of author
 | 
			
		||||
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
 | 
			
		||||
    This is free software, and you are welcome to redistribute it
 | 
			
		||||
    under certain conditions; type `show c' for details.
 | 
			
		||||
 | 
			
		||||
The hypothetical commands `show w' and `show c' should show the appropriate
 | 
			
		||||
parts of the General Public License.  Of course, the commands you use may
 | 
			
		||||
be called something other than `show w' and `show c'; they could even be
 | 
			
		||||
mouse-clicks or menu items--whatever suits your program.
 | 
			
		||||
 | 
			
		||||
You should also get your employer (if you work as a programmer) or your
 | 
			
		||||
school, if any, to sign a "copyright disclaimer" for the program, if
 | 
			
		||||
necessary.  Here is a sample; alter the names:
 | 
			
		||||
 | 
			
		||||
  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
 | 
			
		||||
  `Gnomovision' (which makes passes at compilers) written by James Hacker.
 | 
			
		||||
 | 
			
		||||
  <signature of Ty Coon>, 1 April 1989
 | 
			
		||||
  Ty Coon, President of Vice
 | 
			
		||||
 | 
			
		||||
This General Public License does not permit incorporating your program into
 | 
			
		||||
proprietary programs.  If your program is a subroutine library, you may
 | 
			
		||||
consider it more useful to permit linking proprietary applications with the
 | 
			
		||||
library.  If this is what you want to do, use the GNU Library General
 | 
			
		||||
Public License instead of this License.
 | 
			
		||||
							
								
								
									
										30
									
								
								LICENSE_WHEATLEY.TXT
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								LICENSE_WHEATLEY.TXT
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
+ + + This Software is released under the "Simplified BSD License"  + + +
 | 
			
		||||
Copyright 2010 Moe Wheatley. All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use in source and binary forms, with or without 
 | 
			
		||||
modification, are permitted provided that the following conditions are 
 | 
			
		||||
met:
 | 
			
		||||
 | 
			
		||||
  1. Redistributions of source code must retain the above copyright 
 | 
			
		||||
     notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 | 
			
		||||
  2. Redistributions in binary form must reproduce the above copyright 
 | 
			
		||||
     notice, this list of conditions and the following disclaimer in 
 | 
			
		||||
     the documentation and/or other materials provided with the 
 | 
			
		||||
     distribution.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY Moe Wheatley ``AS IS'' AND ANY EXPRESS OR 
 | 
			
		||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
 | 
			
		||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
 | 
			
		||||
DISCLAIMED. IN NO EVENT SHALL Moe Wheatley OR CONTRIBUTORS BE LIABLE 
 | 
			
		||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
 | 
			
		||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
 | 
			
		||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
 | 
			
		||||
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
 | 
			
		||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
 | 
			
		||||
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
 | 
			
		||||
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
The views and conclusions contained in the software and documentation 
 | 
			
		||||
are those of the authors and should not be interpreted as representing 
 | 
			
		||||
official policies, either expressed or implied, of Moe Wheatley.
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								MAP65_Beta_Release.docx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								MAP65_Beta_Release.docx
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										96
									
								
								Makefile.CVF
									
									
									
									
									
								
							
							
						
						
									
										96
									
								
								Makefile.CVF
									
									
									
									
									
								
							@ -1,96 +0,0 @@
 | 
			
		||||
#Makefile for Windows
 | 
			
		||||
!include <dfinc.mak>   #Some definitions for Compaq Visual Fortran
 | 
			
		||||
gcc = cl
 | 
			
		||||
FC = df
 | 
			
		||||
#To do bounds checking (with useless reports) put "/check:all" in the
 | 
			
		||||
# --opt= line below (line 56, more or less ...)
 | 
			
		||||
#FFLAGS = /traceback /check:all
 | 
			
		||||
FFLAGS = /traceback /fast /nologo /check:all
 | 
			
		||||
 | 
			
		||||
all:    MAP65.EXE plrs.exe
 | 
			
		||||
 | 
			
		||||
OBJS2C   = init_rs.o encode_rs.o decode_rs.o jtaudio.o plrr_subs.o
 | 
			
		||||
 | 
			
		||||
F2PYONLY = ftn_init ftn_quit audio_init getfile azdist0 astro0 spec
 | 
			
		||||
 | 
			
		||||
SRCS2F90 = a2d.f90 astro0.f90 audio_init.f90 azdist0.f90 \
 | 
			
		||||
	decode1.f90 ftn_init.f90 ftn_quit.f90 wsjtgen.f90 \
 | 
			
		||||
	runqqq.f90 fivehz.f90 flushqqq.f90 \
 | 
			
		||||
	rfile.f90 rfile3a.f90 spec.f90 map65a.F90 display.F90 \
 | 
			
		||||
	getfile.f90 getfile2.f90 recvpkt.f90 savetf2.F90 \
 | 
			
		||||
	symspec.f90 sec_midn.F90 getdphi.f90 thcvf.f90
 | 
			
		||||
 | 
			
		||||
SRCSCOM = datcom.f90 gcom1.f90 gcom2.f90 gcom3.f90 gcom4.f90 spcom.f90
 | 
			
		||||
 | 
			
		||||
SRCS2F77 = indexx.f gen65.f chkmsg.f \
 | 
			
		||||
	gentone.f gencwid.f set.f db.f pctile.f sort.f ssort.f \
 | 
			
		||||
	avemsg65.f demod64a.f encode65.f extract.f four2a.f getpfx1.f \
 | 
			
		||||
	getpfx2.f graycode.f grid2k.f interleave63.f k2grid.f \
 | 
			
		||||
	deep65.f morse.f nchar.f packcall.f packgrid.f \
 | 
			
		||||
	packmsg.f packtext.f setup65.f unpackcall.f unpackgrid.f \
 | 
			
		||||
	unpackmsg.f unpacktext.f astro.f azdist.f coord.f dcoord.f \
 | 
			
		||||
	deg2grid.f dot.f ftsky.f geocentric.f GeoDist.f grid2deg.f \
 | 
			
		||||
	moon2.f MoonDop.f sun.f toxyz.f pfxdump.f \
 | 
			
		||||
	ccf65.f trimlist.f chkhist.f decode1a.f \
 | 
			
		||||
	filbig.f fil6521.f twkfreq.f decode65b.f \
 | 
			
		||||
	afc65b.f fchisq.f ccf2.f
 | 
			
		||||
 | 
			
		||||
SRCS2C   = ptt.c igray.c wrapkarn.c rfile3.c
 | 
			
		||||
 | 
			
		||||
MAP65.EXE: Audio.pyd map65.spec
 | 
			
		||||
	python c:\python23\installer\Build.py map65.spec
 | 
			
		||||
 | 
			
		||||
plrs.exe: plrs.f90 sec_midn.F90 plrs_subs_win.c
 | 
			
		||||
	cl /c /Foplrs_subs.obj plrs_subs_win.c
 | 
			
		||||
	df /fpp /define:CVF plrs.f90 sec_midn.F90 plrs_subs.obj  \
 | 
			
		||||
	  /link ws2_32.lib
 | 
			
		||||
 | 
			
		||||
Audio.pyd: $(OBJS2C) $(SRCS2F90) $(SRCS2F77) $(SRCS2C) $(SRCSCOM)
 | 
			
		||||
	python f2py.py -c \
 | 
			
		||||
	--quiet --"fcompiler=compaqv" \
 | 
			
		||||
	--opt="/nologo /traceback /warn:errors /fast /fpp /define:CVF \
 | 
			
		||||
	      /define:USE_PORTAUDIO" \
 | 
			
		||||
	$(OBJS2C) \
 | 
			
		||||
	-lwinmm -lws2_32 -lpa -lfftw3single \
 | 
			
		||||
	-m Audio \
 | 
			
		||||
	only: $(F2PYONLY) : \
 | 
			
		||||
	$(SRCS2F90) $(SRCS2F77) $(SRCS2C)
 | 
			
		||||
 | 
			
		||||
map65.spec: map65.py astro.py g.py options.py palettes.py smeter.py specjt.py
 | 
			
		||||
	python c:\python23\installer\makespec.py --icon wsjt.ico \
 | 
			
		||||
	--tk --onefile map65.py
 | 
			
		||||
 | 
			
		||||
jtaudio.o: jtaudio.c
 | 
			
		||||
	$(CC) /nologo /c /DWin32 /Fojtaudio.o jtaudio.c
 | 
			
		||||
 | 
			
		||||
init_rs.obj: init_rs.c
 | 
			
		||||
	$(CC) /nologo /c /DBIGSYM=1 init_rs.c
 | 
			
		||||
 | 
			
		||||
init_rs.o: init_rs.c
 | 
			
		||||
	$(CC) /nologo /c /DBIGSYM=1 /Foinit_rs.o init_rs.c
 | 
			
		||||
 | 
			
		||||
encode_rs.obj: encode_rs.c
 | 
			
		||||
	$(CC) /nologo /c /DBIGSYM=1 encode_rs.c
 | 
			
		||||
 | 
			
		||||
encode_rs.o: encode_rs.c
 | 
			
		||||
	$(CC) /nologo /c /DBIGSYM=1 /Foencode_rs.o encode_rs.c
 | 
			
		||||
 | 
			
		||||
decode_rs.obj: decode_rs.c
 | 
			
		||||
	$(CC) /nologo /c /DBIGSYM=1 decode_rs.c
 | 
			
		||||
 | 
			
		||||
decode_rs.o: decode_rs.c
 | 
			
		||||
	$(CC) /nologo /c /DBIGSYM=1 /Ox /Zd /Fodecode_rs.o decode_rs.c
 | 
			
		||||
 | 
			
		||||
wrapkarn.obj: wrapkarn.c
 | 
			
		||||
	$(CC) /nologo /c /DCVF=1 wrapkarn.c
 | 
			
		||||
 | 
			
		||||
igray.obj: igray.c
 | 
			
		||||
	$(CC) /nologo /c /DCVF=1 igray.c
 | 
			
		||||
 | 
			
		||||
plrr_subs.o: plrr_subs_win.c
 | 
			
		||||
	$(CC) /nologo /c plrr_subs_win.c /Foplrr_subs.o
 | 
			
		||||
 | 
			
		||||
.PHONY : clean
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
    -del *.o *.obj MAP65.EXE Audio.pyd map65.spec
 | 
			
		||||
							
								
								
									
										100
									
								
								Makefile.MinGW
									
									
									
									
									
								
							
							
						
						
									
										100
									
								
								Makefile.MinGW
									
									
									
									
									
								
							@ -1,100 +0,0 @@
 | 
			
		||||
#Makefile to compile MAP65.EXE for Windows.
 | 
			
		||||
#!include <dfinc.mak>   #Some definitions for Compaq Visual Fortran
 | 
			
		||||
CC = /mingw/bin/gcc
 | 
			
		||||
FC = g95
 | 
			
		||||
CFLAGS = -I. -fPIC
 | 
			
		||||
FFLAGS = -Wall -Wno-precision-loss -fbounds-check -fPIC -fno-second-underscore
 | 
			
		||||
 | 
			
		||||
.f.o:
 | 
			
		||||
	${FC} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.f=.o} $<
 | 
			
		||||
 | 
			
		||||
all:    MAP65.EXE
 | 
			
		||||
 | 
			
		||||
OBJC1 = init_rs.o encode_rs.o decode_rs.o jtaudio.o plrr_subs.o deep65.o
 | 
			
		||||
 | 
			
		||||
F2PYONLY = ftn_init ftn_quit audio_init getfile azdist0 astro0 spec
 | 
			
		||||
 | 
			
		||||
SRCF90 = a2d.f90 astro0.f90 audio_init.f90 azdist0.f90 \
 | 
			
		||||
	decode1.f90 ftn_init.f90 ftn_quit.f90 wsjtgen.f90 \
 | 
			
		||||
	runqqq.f90 fivehz.f90 flushqqq.f90 \
 | 
			
		||||
	rfile.f90 rfile3a.f90 spec.f90 map65a.f90 display.f90 \
 | 
			
		||||
	getfile.f90 getfile2.f90 recvpkt.f90 savetf2.f90 \
 | 
			
		||||
	symspec.f90 sec_midn.f90 getdphi.f90 thnix.f90 msgtrim.f90
 | 
			
		||||
 | 
			
		||||
SRCCOM = datcom.f90 gcom1.f90 gcom2.f90 gcom3.f90 gcom4.f90 spcom.f90
 | 
			
		||||
 | 
			
		||||
SRCF77 = indexx.f gen65.f chkmsg.f \
 | 
			
		||||
	gentone.f gencwid.f set.f db.f pctile.f sort.f ssort.f \
 | 
			
		||||
	avemsg65.f demod64a.f encode65.f extract.f getpfx1.f \
 | 
			
		||||
	getpfx2.f graycode.f grid2k.f interleave63.f k2grid.f \
 | 
			
		||||
	morse.f nchar.f packcall.f packgrid.f \
 | 
			
		||||
	packmsg.f packtext.f setup65.f unpackcall.f unpackgrid.f \
 | 
			
		||||
	unpackmsg.f unpacktext.f astro.f azdist.f coord.f dcoord.f \
 | 
			
		||||
	deg2grid.f dot.f ftsky.f geocentric.f GeoDist.f grid2deg.f \
 | 
			
		||||
	moon2.f MoonDop.f sun.f toxyz.f pfxdump.f \
 | 
			
		||||
	ccf65.f trimlist.f chkhist.f decode1a.f f77_wisdom.f \
 | 
			
		||||
	fil6521.f twkfreq.f decode65b.f afc65b.f fchisq.f ccf2.f 
 | 
			
		||||
 | 
			
		||||
SRC2F77 = four2a.f filbig.f
 | 
			
		||||
 | 
			
		||||
SRCS2C   = ptt.c igray.c wrapkarn.c cutil.c start_portaudio.c fthread.c
 | 
			
		||||
 | 
			
		||||
OBJF77 = ${SRCF77:.f=.o}
 | 
			
		||||
 | 
			
		||||
MAP65.EXE: Audio.pyd map65.spec
 | 
			
		||||
	c:/python25/python c:/python25/pyinstaller-1.3/Build.py map65.spec
 | 
			
		||||
 | 
			
		||||
Audio.pyd: $(OBJC1) $(OBJF77) $(SRCF90) $(SRC2F77) $(SRCS2C) $(SRCCOM) Makefile
 | 
			
		||||
	c:/Python25/python C:/python25/scripts/f2py.py -c -I. \
 | 
			
		||||
	--quiet --fcompiler=g95 \
 | 
			
		||||
	--opt="-fbounds-check -O0 -cpp" \
 | 
			
		||||
	--compiler=mingw32 \
 | 
			
		||||
	$(OBJC1) $(OBJF77) libfftw3f_win.a \
 | 
			
		||||
	libportaudio.a libpthreadGC2.a -lwinmm -lws2_32 \
 | 
			
		||||
	-m Audio \
 | 
			
		||||
	only: $(F2PYONLY) : \
 | 
			
		||||
	$(SRCF90) $(SRC2F77) $(SRCS2C)
 | 
			
		||||
 | 
			
		||||
map65.spec: map65.py astro.py g.py options.py palettes.py smeter.py specjt.py
 | 
			
		||||
	C:/Python25/python C:/Python25/pyinstaller-1.3/makespec.py \
 | 
			
		||||
	--icon wsjt.ico --tk --onefile map65.py
 | 
			
		||||
 | 
			
		||||
deep65.o: deep65.f
 | 
			
		||||
	$(FC) -c -O0 -Wall -fPIC -fno-second-underscore deep65.f
 | 
			
		||||
 | 
			
		||||
jtaudio.o: jtaudio.c
 | 
			
		||||
	$(CC) -c -DWin32 -o jtaudio.o jtaudio.c
 | 
			
		||||
 | 
			
		||||
init_rs.obj: init_rs.c
 | 
			
		||||
	$(CC) -c -DBIGSYM=1 init_rs.c
 | 
			
		||||
 | 
			
		||||
init_rs.o: init_rs.c
 | 
			
		||||
	$(CC) -c -DBIGSYM=1 -o init_rs.o init_rs.c
 | 
			
		||||
 | 
			
		||||
encode_rs.obj: encode_rs.c
 | 
			
		||||
	$(CC) -c -DBIGSYM=1 encode_rs.c
 | 
			
		||||
 | 
			
		||||
encode_rs.o: encode_rs.c
 | 
			
		||||
	$(CC) -c -DBIGSYM=1 -o encode_rs.o encode_rs.c
 | 
			
		||||
 | 
			
		||||
decode_rs.obj: decode_rs.c
 | 
			
		||||
	$(CC) -c -DBIGSYM=1 decode_rs.c
 | 
			
		||||
 | 
			
		||||
decode_rs.o: decode_rs.c
 | 
			
		||||
	$(CC) -c -DBIGSYM=1 -o decode_rs.o decode_rs.c
 | 
			
		||||
 | 
			
		||||
wrapkarn.obj: wrapkarn.c
 | 
			
		||||
	$(CC) -c -DWin32=1 wrapkarn.c
 | 
			
		||||
 | 
			
		||||
igray.obj: igray.c
 | 
			
		||||
	$(CC) -c -DWin32=1 igray.c
 | 
			
		||||
 | 
			
		||||
plrr_subs.o: plrr_subs_win.c
 | 
			
		||||
	$(CC) -c plrr_subs_win.c -o plrr_subs.o
 | 
			
		||||
 | 
			
		||||
.PHONY : clean
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f *.o Audio.pyd map65.spec MAP65.EXE 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										112
									
								
								Makefile.ifort
									
									
									
									
									
								
							
							
						
						
									
										112
									
								
								Makefile.ifort
									
									
									
									
									
								
							@ -1,112 +0,0 @@
 | 
			
		||||
MV ?= mv
 | 
			
		||||
CC ?= gcc
 | 
			
		||||
MKDIR ?= mkdir
 | 
			
		||||
INSTALL=	install
 | 
			
		||||
FFLAGS	= -O2 -C -threads -reentrancy threaded -traceback -static 
 | 
			
		||||
LDFLAGS	= -L/usr/lib -L/usr/local/lib 
 | 
			
		||||
LIBS	=  -lpthread  -lportaudio -lsamplerate -lfftw3f
 | 
			
		||||
CPPFLAGS = -I/usr/include -I/usr/local/include 
 | 
			
		||||
CFLAGS	=  -Wall -O0 -g
 | 
			
		||||
PREFIX	= /usr/local/
 | 
			
		||||
# Map65 specific C flags
 | 
			
		||||
CFLAGS	+= -DBIGSYM=1 -fPIC
 | 
			
		||||
DEFS = -DPACKAGE_NAME=\"map65\" -DPACKAGE_TARNAME=\"map65\" -DPACKAGE_VERSION=\"0.9\" -DPACKAGE_STRING=\"map65\ 0.9\" -DPACKAGE_BUGREPORT=\"\" -DFC_LIB_PATH=\"/opt/g95-install/bin/../lib/gcc-lib/i686-pc-linux-gnu/4.1.3//\" -DFC=\"g95\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_ERRNO_H=1 -DHAVE_SYS_SYSLOG_H=1 -DHAVE_STDDEF_H=1 -DHAVE_LIBGEN_H=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_WAIT_H=1 -DHAVE_STDIO_H=1 -DHAVE_TERMIOS_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_LINUX_PPDEV_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_FCNTL_H=1 -DHAVE_SYS_IOCTL_H=1 -DTIME_WITH_SYS_TIME=1 -DSTRING_WITH_STRINGS=1 -DNDEBUG=1 -DHAS_SAMPLERATE_H=1 -DHAS_PORTAUDIO=1 -DHAS_PORTAUDIO_H=1 -DHAS_PORTAUDIO_LIB=1 -DHAS_FFTW3_H=1 -DHAS_FFTW3FLIBS=1
 | 
			
		||||
CFLAGS += ${DEFS}
 | 
			
		||||
CPPFLAGS += ${DEFS} -I.
 | 
			
		||||
 | 
			
		||||
# MAP65 specific Fortran flags
 | 
			
		||||
# gfortran has no -Wno-precission-loss
 | 
			
		||||
#FFLAGS += -Wall -fbounds-check -fno-second-underscore -fPIC#FFLAGS += -Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC
 | 
			
		||||
#FFLAGS += -Wall -fbounds-check -fno-second-underscore -ffixed-line-length-none -fPIC
 | 
			
		||||
#FFLAGS += -Wall -fbounds-check -fno-second-underscore -fPIC
 | 
			
		||||
#FFLAGS += -cpp -fno-second-underscore
 | 
			
		||||
 | 
			
		||||
all:    Audio.so plrs plrr
 | 
			
		||||
 | 
			
		||||
# The default rules
 | 
			
		||||
.c.o:
 | 
			
		||||
	${CC} ${CPPFLAGS} ${CFLAGS} -c -o ${<:.c=.o} $<
 | 
			
		||||
 | 
			
		||||
.f.o:
 | 
			
		||||
	${FC} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.f=.o} $<
 | 
			
		||||
 | 
			
		||||
.F90.o:
 | 
			
		||||
	${FC} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.F90=.o} $<
 | 
			
		||||
 | 
			
		||||
OS=Linux
 | 
			
		||||
FC=ifort
 | 
			
		||||
FCV=intel
 | 
			
		||||
COMPILER += /opt/g95-install/bin/../lib/gcc-lib/i686-pc-linux-gnu/4.1.3//
 | 
			
		||||
 | 
			
		||||
LDFLAGS	+= -L${COMPILER}
 | 
			
		||||
 | 
			
		||||
PYTHON	?= /usr/bin/python
 | 
			
		||||
RM	?= /bin/rm
 | 
			
		||||
F2PY	= /usr/bin/f2py
 | 
			
		||||
 | 
			
		||||
###
 | 
			
		||||
 | 
			
		||||
OBJS2C   = init_rs.o encode_rs.o decode_rs.o plrr_subs.o loc.o deep65.o
 | 
			
		||||
 | 
			
		||||
F2PYONLY = ftn_init ftn_quit audio_init getfile azdist0 astro0 spec
 | 
			
		||||
 | 
			
		||||
SRCS2F90 = astro0.F90 audio_init.F90 azdist0.f90 \
 | 
			
		||||
	decode1.F90 ftn_init.F90 ftn_quit.f90 wsjtgen.F90 \
 | 
			
		||||
	runqqq.F90 fivehz.F90 flushqqq.F90 \
 | 
			
		||||
	rfile.f90 rfile3a.F90 spec.f90 map65a.F90 display.F90 \
 | 
			
		||||
	getfile.F90 getfile2.F90 recvpkt.F90 savetf2.F90 \
 | 
			
		||||
	symspec.f90 sec_midn.F90 getdphi.f90 thnix.f90
 | 
			
		||||
 | 
			
		||||
SRCS2F77 = indexx.f gen65.f chkmsg.f \
 | 
			
		||||
	gentone.f gencwid.f set.f db.f pctile.f sort.f ssort.f \
 | 
			
		||||
	avemsg65.f demod64a.f encode65.f extract.f four2a.f getpfx1.f \
 | 
			
		||||
	getpfx2.f graycode.f grid2k.f interleave63.f k2grid.f \
 | 
			
		||||
	morse.f nchar.f packcall.f packgrid.f \
 | 
			
		||||
	packmsg.f packtext.f setup65.f unpackcall.f unpackgrid.f \
 | 
			
		||||
	unpackmsg.f unpacktext.f astro.f azdist.f coord.f dcoord.f \
 | 
			
		||||
	deg2grid.f dot.f ftsky.f geocentric.f GeoDist.f grid2deg.f \
 | 
			
		||||
	moon2.f MoonDop.f sun.f toxyz.f pfxdump.f \
 | 
			
		||||
	ccf65.f trimlist.f chkhist.f decode1a.f \
 | 
			
		||||
	filbig.f fil6521.f twkfreq.f decode65b.f \
 | 
			
		||||
	afc65b.f fchisq.f ccf2.f rfile2.f
 | 
			
		||||
 | 
			
		||||
OBJS2F77 = ${SRCS2F77:.f=.o}
 | 
			
		||||
 | 
			
		||||
SRCS3C = ptt_unix.c igray.c wrapkarn.c cutil.c fthread.c
 | 
			
		||||
OBJS3C = ${SRCS3C:.c=.o}
 | 
			
		||||
 | 
			
		||||
AUDIOSRCS = a2d.f90 jtaudio.c start_portaudio.c
 | 
			
		||||
 | 
			
		||||
deep65.o: deep65.F
 | 
			
		||||
	$(FC) -c -O0 -Wall -fno-second-underscore -fPIC deep65.F
 | 
			
		||||
 | 
			
		||||
Audio.so: $(OBJS2C) $(OBJS3C) $(OBJS2F77) $(SRCS2F90) $(AUDIOSRCS)
 | 
			
		||||
	 ${F2PY} -c --quiet --opt="-O ${CFLAGS} \
 | 
			
		||||
	${FFLAGS}"	$(OBJS2C) $(OBJS2F77) -m Audio \
 | 
			
		||||
	--f77exec=${FC} --f90exec=${FC} ${CPPFLAGS} ${LDFLAGS} ${LIBS} \
 | 
			
		||||
	only: $(F2PYONLY) \
 | 
			
		||||
	: $(SRCS2F90) \
 | 
			
		||||
	${SRCS3C} ${AUDIOSRCS}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
init_rs_int.o: init_rs.c
 | 
			
		||||
	$(CC) $(CFLAGS) -c -DBIGSYM=1 -o init_rs_int.o init_rs.c
 | 
			
		||||
encode_rs_int.o: encode_rs.c
 | 
			
		||||
	$(CC) $(CFLAGS) -c -DBIGSYM=1 -o encode_rs_int.o encode_rs.c
 | 
			
		||||
decode_rs_int.o: decode_rs.c
 | 
			
		||||
	$(CC) $(CFLAGS) -c -DBIGSYM=1 -o decode_rs_int.o decode_rs.c
 | 
			
		||||
 | 
			
		||||
plrr:   plrr.F90 sec_midn.F90 plrr_subs.c cutil.c
 | 
			
		||||
	$(CC) -c plrs_subs.c cutil.c
 | 
			
		||||
	$(FC) -o plrr -fno-second-underscore plrr.F90 sec_midn.F90 plrr_subs.o cutil.o
 | 
			
		||||
 | 
			
		||||
plrs:   plrs.F90 sec_midn.F90 plrs_subs.c cutil.c
 | 
			
		||||
	$(CC) -c plrs_subs.c cutil.c
 | 
			
		||||
	$(FC) -o plrs -fno-second-underscore plrs.F90 sec_midn.F90 plrs_subs.o cutil.o
 | 
			
		||||
 | 
			
		||||
.PHONY : clean
 | 
			
		||||
clean:
 | 
			
		||||
	${RM} -f *.o *.pyc *.so *~ map65 map65.spec
 | 
			
		||||
 | 
			
		||||
distclean: clean
 | 
			
		||||
	${RM} -f config.log config.status Makefile
 | 
			
		||||
							
								
								
									
										112
									
								
								Makefile.in
									
									
									
									
									
								
							
							
						
						
									
										112
									
								
								Makefile.in
									
									
									
									
									
								
							@ -1,112 +0,0 @@
 | 
			
		||||
MV ?= mv
 | 
			
		||||
CC ?= @CC@
 | 
			
		||||
MKDIR ?= mkdir
 | 
			
		||||
INSTALL=	install
 | 
			
		||||
FFLAGS	= @FFLAGS@
 | 
			
		||||
LDFLAGS	= @LDFLAGS@
 | 
			
		||||
LIBS	= @LIBS@
 | 
			
		||||
CPPFLAGS = @CPPFLAGS@
 | 
			
		||||
CFLAGS	= @CFLAGS@
 | 
			
		||||
PREFIX	= @PREFIX@
 | 
			
		||||
# Map65 specific C flags
 | 
			
		||||
CFLAGS	+= -DBIGSYM=1 -fPIC
 | 
			
		||||
DEFS = @DEFS@
 | 
			
		||||
CFLAGS += ${DEFS}
 | 
			
		||||
CPPFLAGS += ${DEFS} -I.
 | 
			
		||||
 | 
			
		||||
# MAP65 specific Fortran flags
 | 
			
		||||
# gfortran has no -Wno-precission-loss
 | 
			
		||||
#FFLAGS += -Wall -fbounds-check -fno-second-underscore -fPIC#FFLAGS += -Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC
 | 
			
		||||
#FFLAGS += -Wall -fbounds-check -fno-second-underscore -ffixed-line-length-none -fPIC
 | 
			
		||||
#FFLAGS += -Wall -fbounds-check -fno-second-underscore -fPIC
 | 
			
		||||
#FFLAGS += -cpp -fno-second-underscore
 | 
			
		||||
 | 
			
		||||
all:    Audio.so plrs plrr
 | 
			
		||||
 | 
			
		||||
# The default rules
 | 
			
		||||
.c.o:
 | 
			
		||||
	${CC} ${CPPFLAGS} ${CFLAGS} -c -o ${<:.c=.o} $<
 | 
			
		||||
 | 
			
		||||
.f.o:
 | 
			
		||||
	${FC} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.f=.o} $<
 | 
			
		||||
 | 
			
		||||
.F90.o:
 | 
			
		||||
	${FC} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.F90=.o} $<
 | 
			
		||||
 | 
			
		||||
OS=@OS@
 | 
			
		||||
FC=@FC@
 | 
			
		||||
FCV=@FCV@
 | 
			
		||||
COMPILER += @FC_LIB_PATH@
 | 
			
		||||
 | 
			
		||||
LDFLAGS	+= -L${COMPILER}
 | 
			
		||||
 | 
			
		||||
PYTHON	?= @PYTHON@
 | 
			
		||||
RM	?= @RM@
 | 
			
		||||
F2PY	= @F2PY@
 | 
			
		||||
 | 
			
		||||
###
 | 
			
		||||
 | 
			
		||||
OBJS2C   = init_rs.o encode_rs.o decode_rs.o plrr_subs.o loc.o deep65.o
 | 
			
		||||
 | 
			
		||||
F2PYONLY = ftn_init ftn_quit audio_init getfile azdist0 astro0 spec
 | 
			
		||||
 | 
			
		||||
SRCS2F90 = astro0.F90 audio_init.F90 azdist0.f90 \
 | 
			
		||||
	decode1.F90 ftn_init.F90 ftn_quit.f90 wsjtgen.F90 \
 | 
			
		||||
	runqqq.F90 fivehz.F90 flushqqq.F90 \
 | 
			
		||||
	rfile.f90 rfile3a.F90 spec.f90 map65a.F90 display.F90 \
 | 
			
		||||
	getfile.F90 getfile2.F90 recvpkt.F90 savetf2.F90 \
 | 
			
		||||
	symspec.f90 sec_midn.F90 getdphi.f90 thnix.f90
 | 
			
		||||
 | 
			
		||||
SRCS2F77 = indexx.f gen65.f chkmsg.f \
 | 
			
		||||
	gentone.f gencwid.f set.f db.f pctile.f sort.f ssort.f \
 | 
			
		||||
	avemsg65.f demod64a.f encode65.f extract.f four2a.f getpfx1.f \
 | 
			
		||||
	getpfx2.f graycode.f grid2k.f interleave63.f k2grid.f \
 | 
			
		||||
	morse.f nchar.f packcall.f packgrid.f \
 | 
			
		||||
	packmsg.f packtext.f setup65.f unpackcall.f unpackgrid.f \
 | 
			
		||||
	unpackmsg.f unpacktext.f astro.f azdist.f coord.f dcoord.f \
 | 
			
		||||
	deg2grid.f dot.f ftsky.f geocentric.f GeoDist.f grid2deg.f \
 | 
			
		||||
	moon2.f MoonDop.f sun.f toxyz.f pfxdump.f f77_wisdom.f \
 | 
			
		||||
	ccf65.f trimlist.f chkhist.f decode1a.f \
 | 
			
		||||
	filbig.f fil6521.f twkfreq.f decode65b.f \
 | 
			
		||||
	afc65b.f fchisq.f ccf2.f rfile2.f
 | 
			
		||||
 | 
			
		||||
OBJS2F77 = ${SRCS2F77:.f=.o}
 | 
			
		||||
 | 
			
		||||
SRCS3C = ptt_unix.c igray.c wrapkarn.c cutil.c fthread.c
 | 
			
		||||
OBJS3C = ${SRCS3C:.c=.o}
 | 
			
		||||
 | 
			
		||||
AUDIOSRCS = a2d.f90 jtaudio.c start_portaudio.c
 | 
			
		||||
 | 
			
		||||
deep65.o: deep65.F
 | 
			
		||||
	$(FC) -c -O0 -Wall -fno-second-underscore -fPIC deep65.F
 | 
			
		||||
 | 
			
		||||
Audio.so: $(OBJS2C) $(OBJS3C) $(OBJS2F77) $(SRCS2F90) $(AUDIOSRCS)
 | 
			
		||||
	${F2PY} -c --quiet --noopt --debug \
 | 
			
		||||
	--f77flags="${FFLAGS}" --f90flags="${FFLAGS}" \
 | 
			
		||||
	$(OBJS2C) $(OBJS2F77) -m Audio \
 | 
			
		||||
	--fcompiler=${FCV} --f77exec=${FC} --f90exec=${FC} \
 | 
			
		||||
	${CPPFLAGS} ${LDFLAGS} ${LIBS} \
 | 
			
		||||
	only: $(F2PYONLY) : $(SRCS2F90) \
 | 
			
		||||
	${SRCS3C} ${AUDIOSRCS}
 | 
			
		||||
 | 
			
		||||
init_rs_int.o: init_rs.c
 | 
			
		||||
	$(CC) $(CFLAGS) -c -DBIGSYM=1 -o init_rs_int.o init_rs.c
 | 
			
		||||
encode_rs_int.o: encode_rs.c
 | 
			
		||||
	$(CC) $(CFLAGS) -c -DBIGSYM=1 -o encode_rs_int.o encode_rs.c
 | 
			
		||||
decode_rs_int.o: decode_rs.c
 | 
			
		||||
	$(CC) $(CFLAGS) -c -DBIGSYM=1 -o decode_rs_int.o decode_rs.c
 | 
			
		||||
 | 
			
		||||
plrr:   plrr.F90 sec_midn.F90 plrr_subs.c cutil.c
 | 
			
		||||
	$(CC) -c plrs_subs.c cutil.c
 | 
			
		||||
	$(FC) -o plrr -fno-second-underscore plrr.F90 sec_midn.F90 plrr_subs.o cutil.o
 | 
			
		||||
 | 
			
		||||
plrs:   plrs.F90 sec_midn.F90 plrs_subs.c cutil.c
 | 
			
		||||
	$(CC) -c plrs_subs.c cutil.c
 | 
			
		||||
	$(FC) -o plrs -fno-second-underscore plrs.F90 sec_midn.F90 plrs_subs.o cutil.o
 | 
			
		||||
 | 
			
		||||
.PHONY : clean
 | 
			
		||||
clean:
 | 
			
		||||
	${RM} -f *.o *.pyc *.so *~ map65 map65.spec
 | 
			
		||||
 | 
			
		||||
distclean: clean
 | 
			
		||||
	${RM} -f config.log config.status Makefile
 | 
			
		||||
@ -1,121 +0,0 @@
 | 
			
		||||
CC ?= gcc
 | 
			
		||||
FFLAGS	= -g -O2
 | 
			
		||||
LDFLAGS	= -L/usr/local/lib -lpthread  -lasound
 | 
			
		||||
CPPFLAGS = -I/usr/local/include -I/usr/include/alsa 
 | 
			
		||||
CFLAGS	=  -Wall -O0 -g  -Wall -O0 -g
 | 
			
		||||
# WSJT specific C flags
 | 
			
		||||
CFLAGS	+= -DBIGSYM=1
 | 
			
		||||
DEFS = -DPACKAGE_NAME=\"wsjt\" -DPACKAGE_TARNAME=\"wsjt\" -DPACKAGE_VERSION=\"5.9.2\" -DPACKAGE_STRING=\"wsjt\ 5.9.2\" -DPACKAGE_BUGREPORT=\"\" -DG95_LIB_PATH=\"/u/g95/g95-install/bin/../lib/gcc-lib/i686-pc-linux-gnu/4.0.1//\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_ERRNO_H=1 -DHAVE_SYS_SYSLOG_H=1 -DHAVE_STDDEF_H=1 -DHAVE_LIBGEN_H=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_WAIT_H=1 -DHAVE_STDIO_H=1 -DHAVE_TERMIOS_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_LINUX_PPDEV_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_FCNTL_H=1 -DHAVE_SYS_IOCTL_H=1 -DTIME_WITH_SYS_TIME=1 -DSTRING_WITH_STRINGS=1 -DSIZEOF_INT64_T=8 -DSIZEOF_LONG_LONG=8 -DNDEBUG=1 -DPREFIX=\"/usr/local/\" -DUSE_SERIAL=1 -DUSE_ALSA=1 -DHAS_ASOUNDLIB_H=1 -DHAS_SOUNDCARD_H=1 -DHAS_SAMPLERATE_H=1 
 | 
			
		||||
CFLAGS += ${DEFS}
 | 
			
		||||
CPPFLAGS += ${DEFS}
 | 
			
		||||
 | 
			
		||||
# WSJT specific Fortran flags
 | 
			
		||||
#FFLAGS += -Wall -fbounds-check -fno-second-underscore -ffixed-line-length-none
 | 
			
		||||
FFLAGS += -Wall -fbounds-check -fno-second-underscore 
 | 
			
		||||
#FFLAGS += -cpp -fno-second-underscore
 | 
			
		||||
# The default rules
 | 
			
		||||
.c.o:
 | 
			
		||||
	${CC} ${CPPFLAGS} ${CFLAGS} -c -o ${<:.c=.o} $<
 | 
			
		||||
 | 
			
		||||
.f.o:
 | 
			
		||||
	${G95} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.f=.o} $<
 | 
			
		||||
 | 
			
		||||
.F90.o:
 | 
			
		||||
	${G95} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.F90=.o} $<
 | 
			
		||||
 | 
			
		||||
OS=Linux
 | 
			
		||||
G95=/usr/X11R6/bin/g95
 | 
			
		||||
COMPILER=/usr/lib/gcc/i686-pc-linux-gnu/3.4.6//
 | 
			
		||||
#COMPILER=/u/g95/g95-install/bin/../lib/gcc-lib/i686-pc-linux-gnu/4.0.1//
 | 
			
		||||
FC=/usr/X11R6/bin/g95
 | 
			
		||||
 | 
			
		||||
LDFLAGS	+= -L${COMPILER}
 | 
			
		||||
LDFLAGS	+= -lg2c
 | 
			
		||||
 | 
			
		||||
PYTHON	?= /usr/X11R6/bin/python
 | 
			
		||||
RM	?= /usr/X11R6/bin/rm
 | 
			
		||||
F2PY	= /usr/X11R6/bin/f2py
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OBJS1 = JT65code.o nchar.o grid2deg.o packmsg.o packtext.o \
 | 
			
		||||
	packcall.o packgrid.o unpackmsg.o unpacktext.o unpackcall.o \
 | 
			
		||||
	unpackgrid.o deg2grid.o packdxcc.o chkmsg.o getpfx1.o \
 | 
			
		||||
	getpfx2.o k2grid.o grid2k.o interleave63.o graycode.o set.o \
 | 
			
		||||
	igray.o init_rs_int.o encode_rs_int.o decode_rs_int.o \
 | 
			
		||||
	wrapkarn.o
 | 
			
		||||
 | 
			
		||||
F2PYONLY = ftn_init ftn_quit audio_init spec getfile azdist0 astro0
 | 
			
		||||
 | 
			
		||||
SRCS2F90 = abc441.F90 astro0.F90 audio_init.F90 azdist0.f90 \
 | 
			
		||||
	blanker.f90 decode1.F90 decode2.f90 decode3.F90 ftn_init.F90 \
 | 
			
		||||
	ftn_quit.f90 get_fname.F90 getfile.F90 horizspec.f90 hscroll.f90 \
 | 
			
		||||
	i1tor4.f90 pix2d.f90 pix2d65.f90 rfile.f90 savedata.F90 spec.f90 \
 | 
			
		||||
	wsjtgen.F90 runqqq.F90 fivehz.F90
 | 
			
		||||
OBJS2F90 = ${SRCS2F90:.f90=.o}
 | 
			
		||||
 | 
			
		||||
SRCS2F77 = wsjt1.f astro.f azdist.f coord.f dcoord.f deg2grid.f \
 | 
			
		||||
	dot.f ftsky.f geocentric.f GeoDist.f grid2deg.f moon2.f \
 | 
			
		||||
	MoonDop.f sun.f toxyz.f pfxdump.f \
 | 
			
		||||
        avesp2.f bzap.f spec441.f spec2d.f mtdecode.f stdecode.f \
 | 
			
		||||
        indexx.f s2shape.f flat2.f gen65.f chkmsg.f gen6m.f gentone.f \
 | 
			
		||||
        syncf0.f syncf1.f synct.f decode6m.f avemsg6m.f \
 | 
			
		||||
        set.f flatten.f db.f pctile.f sort.f ssort.f ps.f smooth.f \
 | 
			
		||||
        ping.f longx.f peakup.f sync.f detect.f avemsg65.f decode65.f \
 | 
			
		||||
        demod64a.f encode65.f extract.f flat1.f four2.f rfile2.f \
 | 
			
		||||
        gencw.f getpfx1.f getpfx2.f getsnr.f graycode.f grid2k.f \
 | 
			
		||||
        interleave63.f k2grid.f limit.f lpf1.f deep65.f morse.f \
 | 
			
		||||
        nchar.f packcall.f packgrid.f packmsg.f packtext.f setup65.f \
 | 
			
		||||
        short65.f slope.f spec2d65.f sync65.f unpackcall.f \
 | 
			
		||||
        unpackgrid.f unpackmsg.f unpacktext.f xcor.f xfft.f xfft2.f wsjt65.f
 | 
			
		||||
OBJS2F77 = ${SRCS2F77:.f=.o}
 | 
			
		||||
 | 
			
		||||
SRCS2C	= init_rs.c encode_rs.c decode_rs.c
 | 
			
		||||
OBJS2C  = ${SRCS2C:.c=.o}
 | 
			
		||||
 | 
			
		||||
# ok, so far for now
 | 
			
		||||
# Windows start_alsa.c will be a2d.f90 jtaudio.c since it uses portaudio
 | 
			
		||||
#            for *nix start_alsa.c will also be a2d.f90, jtaudio.c
 | 
			
		||||
#               and start_portaudio.c for systems using portaudio
 | 
			
		||||
#            for *nix start_alsa.c will be start_alsa.c for alsa
 | 
			
		||||
#            for *nix start_alsa.c will be start_oss.c for oss
 | 
			
		||||
#
 | 
			
		||||
# ptt_unix.c vs. ptt.c I'll sort out later. 
 | 
			
		||||
# ditto for cutil.c (only used on *nix)
 | 
			
		||||
# --db
 | 
			
		||||
# jtaudio.c/start_threads.c mess will have to be sorted out later
 | 
			
		||||
# to minimise #ifdef's 
 | 
			
		||||
# --db
 | 
			
		||||
# and mostly sorted
 | 
			
		||||
# --db
 | 
			
		||||
#
 | 
			
		||||
SRCS3C	= ptt_unix.c igray.c wrapkarn.c cutil.c
 | 
			
		||||
OBJS3C  = ${SRCS3C:.c=.o}
 | 
			
		||||
AUDIOSRCS = start_alsa.c
 | 
			
		||||
 | 
			
		||||
all:	wsjt6
 | 
			
		||||
JT65code: $(OBJS1)
 | 
			
		||||
	$(FC) -o JT65code $(OBJS1)
 | 
			
		||||
 | 
			
		||||
wsjt6:	Audio.so #wsjt.spec
 | 
			
		||||
#	${PYTHON} c:\python23\installer\Build.py wsjt.spec
 | 
			
		||||
#	${RM} wsjt6
 | 
			
		||||
 | 
			
		||||
# 
 | 
			
		||||
#
 | 
			
		||||
Audio.so: $(OBJS2C) $(OBJS3C) $(OBJS2F77) $(SRCS2F90) $(AUDIOSRCS)
 | 
			
		||||
	 ${F2PY} -c --quiet --opt="-O -D${CFLAGS} \
 | 
			
		||||
	-fno-second-underscore"	$(OBJS2C) $(OBJS2F77) -m Audio \
 | 
			
		||||
	--f77exec=${G95} --f90exec=${G95} ${CPPFLAGS} ${LDFLAGS} \
 | 
			
		||||
	only: $(F2PYONLY) \
 | 
			
		||||
	: $(SRCS2F90) \
 | 
			
		||||
	${SRCS3C} ${AUDIOSRCS}
 | 
			
		||||
 | 
			
		||||
wsjt.spec: wsjt.py astro.py g.py options.py palettes.py smeter.py specjt.py
 | 
			
		||||
#	${PYTHON} c:\python23\installer\makespec.py --icon wsjt.ico \
 | 
			
		||||
#	--tk --onefile wsjt.py
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.PHONY : clean
 | 
			
		||||
clean:
 | 
			
		||||
	${RM} -f *.o *.so *~ JT65code wsjt6
 | 
			
		||||
 | 
			
		||||
@ -1,120 +0,0 @@
 | 
			
		||||
CC ?= gcc
 | 
			
		||||
FFLAGS	= -g -O2 -fPIC
 | 
			
		||||
LDFLAGS	= -L/usr/local/lib -lpthread  -lasound
 | 
			
		||||
CPPFLAGS = -I/usr/local/include -I/usr/include/alsa -I.
 | 
			
		||||
CFLAGS	=  -Wall -O0 -g  -Wall -O0 -g -fPIC
 | 
			
		||||
# WSJT specific C flags
 | 
			
		||||
CFLAGS	+= -DBIGSYM=1
 | 
			
		||||
DEFS = -DPACKAGE_NAME=\"wsjt\" -DPACKAGE_TARNAME=\"wsjt\" -DPACKAGE_VERSION=\"5.9.2\" -DPACKAGE_STRING=\"wsjt\ 5.9.2\" -DPACKAGE_BUGREPORT=\"\" -DG95_LIB_PATH=\"/usr/lib/gcc/x86_64-linux-gnu/4.0.3/\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_ERRNO_H=1 -DHAVE_SYS_SYSLOG_H=1 -DHAVE_STDDEF_H=1 -DHAVE_LIBGEN_H=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_WAIT_H=1 -DHAVE_STDIO_H=1 -DHAVE_TERMIOS_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_LINUX_PPDEV_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_FCNTL_H=1 -DHAVE_SYS_IOCTL_H=1 -DTIME_WITH_SYS_TIME=1 -DSTRING_WITH_STRINGS=1 -DSIZEOF_INT64_T=8 -DSIZEOF_LONG_LONG=8 -DNDEBUG=1 -DPREFIX=\"/usr/local/\" -DUSE_SERIAL=1 -DUSE_ALSA=1 -DHAS_ASOUNDLIB_H=1 -DHAS_SOUNDCARD_H=1 
 | 
			
		||||
CFLAGS += ${DEFS}
 | 
			
		||||
CPPFLAGS += ${DEFS}
 | 
			
		||||
 | 
			
		||||
# WSJT specific Fortran flags
 | 
			
		||||
FFLAGS += -Wall -fbounds-check -fno-second-underscore -ffixed-line-length-none
 | 
			
		||||
#FFLAGS += -Wall -fbounds-check -fno-second-underscore 
 | 
			
		||||
#FFLAGS += -cpp -fno-second-underscore
 | 
			
		||||
# The default rules
 | 
			
		||||
.c.o:
 | 
			
		||||
	${CC} ${CPPFLAGS} ${CFLAGS} -c -o ${<:.c=.o} $<
 | 
			
		||||
 | 
			
		||||
.f.o:
 | 
			
		||||
	${G95} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.f=.o} $<
 | 
			
		||||
 | 
			
		||||
.F90.o:
 | 
			
		||||
	${G95} ${CPPFLAGS} ${FFLAGS} -c -o ${<:.F90=.o} $<
 | 
			
		||||
 | 
			
		||||
OS=Linux
 | 
			
		||||
G95=/usr/bin/g95
 | 
			
		||||
COMPILER=/usr/lib/gcc/x86_64-linux-gnu/4.0.3/
 | 
			
		||||
FC=/usr/bin/g95
 | 
			
		||||
 | 
			
		||||
LDFLAGS	+= -L${COMPILER}
 | 
			
		||||
LDFLAGS	+= -lg2c
 | 
			
		||||
 | 
			
		||||
PYTHON	?= /usr/bin/python
 | 
			
		||||
RM	?= /bin/rm
 | 
			
		||||
F2PY	= /usr/bin/f2py
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OBJS1 = JT65code.o nchar.o grid2deg.o packmsg.o packtext.o \
 | 
			
		||||
	packcall.o packgrid.o unpackmsg.o unpacktext.o unpackcall.o \
 | 
			
		||||
	unpackgrid.o deg2grid.o packdxcc.o chkmsg.o getpfx1.o \
 | 
			
		||||
	getpfx2.o k2grid.o grid2k.o interleave63.o graycode.o set.o \
 | 
			
		||||
	igray.o init_rs_int.o encode_rs_int.o decode_rs_int.o \
 | 
			
		||||
	wrapkarn.o
 | 
			
		||||
 | 
			
		||||
F2PYONLY = ftn_init ftn_quit audio_init spec getfile azdist0 astro0
 | 
			
		||||
 | 
			
		||||
SRCS2F90 = abc441.F90 astro0.F90 audio_init.F90 azdist0.f90 \
 | 
			
		||||
	blanker.f90 decode1.F90 decode2.f90 decode3.F90 ftn_init.F90 \
 | 
			
		||||
	ftn_quit.f90 get_fname.F90 getfile.F90 horizspec.f90 hscroll.f90 \
 | 
			
		||||
	i1tor4.f90 pix2d.f90 pix2d65.f90 rfile.f90 savedata.F90 spec.f90 \
 | 
			
		||||
	wsjtgen.F90 runqqq.F90 fivehz.F90
 | 
			
		||||
OBJS2F90 = ${SRCS2F90:.f90=.o}
 | 
			
		||||
 | 
			
		||||
SRCS2F77 = wsjt1.f astro.f azdist.f coord.f dcoord.f deg2grid.f \
 | 
			
		||||
	dot.f ftsky.f geocentric.f GeoDist.f grid2deg.f moon2.f \
 | 
			
		||||
	MoonDop.f sun.f toxyz.f pfxdump.f \
 | 
			
		||||
        avesp2.f bzap.f spec441.f spec2d.f mtdecode.f stdecode.f \
 | 
			
		||||
        indexx.f s2shape.f flat2.f gen65.f chkmsg.f gen6m.f gentone.f \
 | 
			
		||||
        syncf0.f syncf1.f synct.f decode6m.f avemsg6m.f \
 | 
			
		||||
        set.f flatten.f db.f pctile.f sort.f ssort.f ps.f smooth.f \
 | 
			
		||||
        ping.f longx.f peakup.f sync.f detect.f avemsg65.f decode65.f \
 | 
			
		||||
        demod64a.f encode65.f extract.f flat1.f four2.f rfile2.f \
 | 
			
		||||
        gencw.f getpfx1.f getpfx2.f getsnr.f graycode.f grid2k.f \
 | 
			
		||||
        interleave63.f k2grid.f limit.f lpf1.f deep65.f morse.f \
 | 
			
		||||
        nchar.f packcall.f packgrid.f packmsg.f packtext.f setup65.f \
 | 
			
		||||
        short65.f slope.f spec2d65.f sync65.f unpackcall.f \
 | 
			
		||||
        unpackgrid.f unpackmsg.f unpacktext.f xcor.f xfft.f xfft2.f wsjt65.f
 | 
			
		||||
OBJS2F77 = ${SRCS2F77:.f=.o}
 | 
			
		||||
 | 
			
		||||
SRCS2C	= init_rs.c encode_rs.c decode_rs.c
 | 
			
		||||
OBJS2C  = ${SRCS2C:.c=.o}
 | 
			
		||||
 | 
			
		||||
# ok, so far for now
 | 
			
		||||
# Windows start_alsa.c will be a2d.f90 jtaudio.c since it uses portaudio
 | 
			
		||||
#            for *nix start_alsa.c will also be a2d.f90, jtaudio.c
 | 
			
		||||
#               and start_portaudio.c for systems using portaudio
 | 
			
		||||
#            for *nix start_alsa.c will be start_alsa.c for alsa
 | 
			
		||||
#            for *nix start_alsa.c will be start_oss.c for oss
 | 
			
		||||
#
 | 
			
		||||
# ptt_unix.c vs. ptt.c I'll sort out later. 
 | 
			
		||||
# ditto for cutil.c (only used on *nix)
 | 
			
		||||
# --db
 | 
			
		||||
# jtaudio.c/start_threads.c mess will have to be sorted out later
 | 
			
		||||
# to minimise #ifdef's 
 | 
			
		||||
# --db
 | 
			
		||||
# and mostly sorted
 | 
			
		||||
# --db
 | 
			
		||||
#
 | 
			
		||||
SRCS3C	= ptt_unix.c igray.c wrapkarn.c cutil.c
 | 
			
		||||
OBJS3C  = ${SRCS3C:.c=.o}
 | 
			
		||||
AUDIOSRCS = start_alsa.c
 | 
			
		||||
 | 
			
		||||
all:	wsjt6
 | 
			
		||||
JT65code: $(OBJS1)
 | 
			
		||||
	$(FC) -o JT65code $(OBJS1)
 | 
			
		||||
 | 
			
		||||
wsjt6:	Audio.so #wsjt.spec
 | 
			
		||||
#	${PYTHON} c:\python23\installer\Build.py wsjt.spec
 | 
			
		||||
#	${RM} wsjt6
 | 
			
		||||
 | 
			
		||||
# 
 | 
			
		||||
#
 | 
			
		||||
Audio.so: $(OBJS2C) $(OBJS3C) $(OBJS2F77) $(SRCS2F90) $(AUDIOSRCS)
 | 
			
		||||
	 ${F2PY} -c --opt="-O ${CFLAGS} -fPIC \
 | 
			
		||||
	-fno-second-underscore"	$(OBJS2C) $(OBJS2F77) -m Audio \
 | 
			
		||||
	--f77exec=${G95} --f90exec=${G95} ${CPPFLAGS} ${LDFLAGS} \
 | 
			
		||||
	only: $(F2PYONLY) \
 | 
			
		||||
	: $(SRCS2F90) \
 | 
			
		||||
	${SRCS3C} ${AUDIOSRCS}
 | 
			
		||||
 | 
			
		||||
wsjt.spec: wsjt.py astro.py g.py options.py palettes.py smeter.py specjt.py
 | 
			
		||||
#	${PYTHON} c:\python23\installer\makespec.py --icon wsjt.ico \
 | 
			
		||||
#	--tk --onefile wsjt.py
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.PHONY : clean
 | 
			
		||||
clean:
 | 
			
		||||
	${RM} -f *.o *.so *~ JT65code wsjt6
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										643
									
								
								PmwBlt.py
									
									
									
									
									
								
							
							
						
						
									
										643
									
								
								PmwBlt.py
									
									
									
									
									
								
							@ -1,643 +0,0 @@
 | 
			
		||||
# Python interface to some of the commands of the 2.4 version of the
 | 
			
		||||
# BLT extension to tcl.
 | 
			
		||||
 | 
			
		||||
import string
 | 
			
		||||
import types
 | 
			
		||||
import Tkinter
 | 
			
		||||
 | 
			
		||||
# Supported commands:
 | 
			
		||||
_busyCommand = '::blt::busy'
 | 
			
		||||
_vectorCommand = '::blt::vector'
 | 
			
		||||
_graphCommand = '::blt::graph'
 | 
			
		||||
_testCommand = '::blt::*'
 | 
			
		||||
_chartCommand = '::blt::stripchart'
 | 
			
		||||
_tabsetCommand = '::blt::tabset'
 | 
			
		||||
 | 
			
		||||
_haveBlt = None
 | 
			
		||||
_haveBltBusy = None
 | 
			
		||||
 | 
			
		||||
def _checkForBlt(window):
 | 
			
		||||
    global _haveBlt
 | 
			
		||||
    global _haveBltBusy
 | 
			
		||||
 | 
			
		||||
    # Blt may be a package which has not yet been loaded. Try to load it.
 | 
			
		||||
    try:
 | 
			
		||||
	window.tk.call('package', 'require', 'BLT')
 | 
			
		||||
    except Tkinter.TclError:
 | 
			
		||||
	# Another way to try to dynamically load blt:
 | 
			
		||||
	try:
 | 
			
		||||
	    window.tk.call('load', '', 'Blt')
 | 
			
		||||
	except Tkinter.TclError:
 | 
			
		||||
	    pass
 | 
			
		||||
 | 
			
		||||
    _haveBlt= (window.tk.call('info', 'commands', _testCommand) != '')
 | 
			
		||||
    _haveBltBusy = (window.tk.call('info', 'commands', _busyCommand) != '')
 | 
			
		||||
 | 
			
		||||
def haveblt(window):
 | 
			
		||||
    if _haveBlt is None:
 | 
			
		||||
	_checkForBlt(window)
 | 
			
		||||
    return _haveBlt
 | 
			
		||||
 | 
			
		||||
def havebltbusy(window):
 | 
			
		||||
    if _haveBlt is None:
 | 
			
		||||
	_checkForBlt(window)
 | 
			
		||||
    return _haveBltBusy
 | 
			
		||||
 | 
			
		||||
def _loadBlt(window):
 | 
			
		||||
    if _haveBlt is None:
 | 
			
		||||
	if window is None:
 | 
			
		||||
	    window = Tkinter._default_root
 | 
			
		||||
	    if window is None:
 | 
			
		||||
	    	window = Tkinter.Tk()
 | 
			
		||||
	_checkForBlt(window)
 | 
			
		||||
 | 
			
		||||
def busy_hold(window, cursor = None):
 | 
			
		||||
    _loadBlt(window)
 | 
			
		||||
    if cursor is None:
 | 
			
		||||
        window.tk.call(_busyCommand, 'hold', window._w)
 | 
			
		||||
    else:
 | 
			
		||||
        window.tk.call(_busyCommand, 'hold', window._w, '-cursor', cursor)
 | 
			
		||||
 | 
			
		||||
def busy_release(window):
 | 
			
		||||
    _loadBlt(window)
 | 
			
		||||
    window.tk.call(_busyCommand, 'release', window._w)
 | 
			
		||||
 | 
			
		||||
def busy_forget(window):
 | 
			
		||||
    _loadBlt(window)
 | 
			
		||||
    window.tk.call(_busyCommand, 'forget', window._w)
 | 
			
		||||
 | 
			
		||||
#=============================================================================
 | 
			
		||||
# Interface to the blt vector command which makes it look like the
 | 
			
		||||
# builtin python list type.
 | 
			
		||||
# The -variable, -command, -watchunset creation options are not supported.
 | 
			
		||||
# The dup, merge, notify, offset, populate, seq and variable methods
 | 
			
		||||
# and the +, -, * and / operations are not supported.
 | 
			
		||||
 | 
			
		||||
# Blt vector functions:
 | 
			
		||||
def vector_expr(expression):
 | 
			
		||||
    tk = Tkinter._default_root.tk
 | 
			
		||||
    strList = tk.splitlist(tk.call(_vectorCommand, 'expr', expression))
 | 
			
		||||
    return tuple(map(string.atof, strList))
 | 
			
		||||
 | 
			
		||||
def vector_names(pattern = None):
 | 
			
		||||
    tk = Tkinter._default_root.tk
 | 
			
		||||
    return tk.splitlist(tk.call(_vectorCommand, 'names', pattern))
 | 
			
		||||
 | 
			
		||||
class Vector:
 | 
			
		||||
    _varnum = 0
 | 
			
		||||
    def __init__(self, size=None, master=None):
 | 
			
		||||
        # <size> can be either an integer size, or a string "first:last".
 | 
			
		||||
	_loadBlt(master)
 | 
			
		||||
	if master:
 | 
			
		||||
	    self._master = master
 | 
			
		||||
	else:
 | 
			
		||||
	    self._master = Tkinter._default_root
 | 
			
		||||
	self.tk = self._master.tk
 | 
			
		||||
	self._name = 'PY_VEC' + str(Vector._varnum)
 | 
			
		||||
	Vector._varnum = Vector._varnum + 1
 | 
			
		||||
	if size is None:
 | 
			
		||||
	    self.tk.call(_vectorCommand, 'create', self._name)
 | 
			
		||||
	else:
 | 
			
		||||
	  self.tk.call(_vectorCommand, 'create', '%s(%s)' % (self._name, size))
 | 
			
		||||
    def __del__(self):
 | 
			
		||||
	self.tk.call(_vectorCommand, 'destroy', self._name)
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
	return self._name
 | 
			
		||||
 | 
			
		||||
    def __repr__(self):
 | 
			
		||||
	return '[' + string.join(map(str, self), ', ') + ']'
 | 
			
		||||
    def __cmp__(self, list):
 | 
			
		||||
	return cmp(self[:], list)
 | 
			
		||||
 | 
			
		||||
    def __len__(self): 
 | 
			
		||||
	return self.tk.getint(self.tk.call(self._name, 'length'))
 | 
			
		||||
    def __getitem__(self, key): 
 | 
			
		||||
	oldkey = key
 | 
			
		||||
	if key < 0:
 | 
			
		||||
	    key = key + len(self)
 | 
			
		||||
	try:
 | 
			
		||||
	    return self.tk.getdouble(self.tk.globalgetvar(self._name, str(key)))
 | 
			
		||||
        except Tkinter.TclError:
 | 
			
		||||
	    raise IndexError, oldkey
 | 
			
		||||
    def __setitem__(self, key, value): 
 | 
			
		||||
	if key < 0:
 | 
			
		||||
	    key = key + len(self)
 | 
			
		||||
	return self.tk.globalsetvar(self._name, str(key), float(value))
 | 
			
		||||
 | 
			
		||||
    def __delitem__(self, key):
 | 
			
		||||
	if key < 0:
 | 
			
		||||
	    key = key + len(self)
 | 
			
		||||
	return self.tk.globalunsetvar(self._name, str(key))
 | 
			
		||||
 | 
			
		||||
    def __getslice__(self, start, end):
 | 
			
		||||
	length = len(self)
 | 
			
		||||
	if start < 0:
 | 
			
		||||
	    start = 0
 | 
			
		||||
	if end > length:
 | 
			
		||||
	    end = length
 | 
			
		||||
	if start >= end:
 | 
			
		||||
	    return []
 | 
			
		||||
	end = end - 1  # Blt vector slices include end point.
 | 
			
		||||
	text = self.tk.globalgetvar(self._name, str(start) + ':' + str(end))
 | 
			
		||||
	return map(self.tk.getdouble, self.tk.splitlist(text))
 | 
			
		||||
 | 
			
		||||
    def __setslice__(self, start, end, list):
 | 
			
		||||
	if start > end:
 | 
			
		||||
	    end = start
 | 
			
		||||
	self.set(self[:start] + list + self[end:])
 | 
			
		||||
 | 
			
		||||
    def __delslice__(self, start, end):
 | 
			
		||||
	if start < end:
 | 
			
		||||
	    self.set(self[:start] + self[end:])
 | 
			
		||||
 | 
			
		||||
    def __add__(self, list):
 | 
			
		||||
	return self[:] + list
 | 
			
		||||
    def __radd__(self, list):
 | 
			
		||||
	return list + self[:]
 | 
			
		||||
    def __mul__(self, n):
 | 
			
		||||
	return self[:] * n
 | 
			
		||||
    __rmul__ = __mul__
 | 
			
		||||
 | 
			
		||||
    # Python builtin list methods:
 | 
			
		||||
    def append(self, *args):
 | 
			
		||||
	self.tk.call(self._name, 'append', args)
 | 
			
		||||
    def count(self, obj):
 | 
			
		||||
	return self[:].count(obj)
 | 
			
		||||
    def index(self, value):
 | 
			
		||||
	return self[:].index(value)
 | 
			
		||||
    def insert(self, index, value):
 | 
			
		||||
	self[index:index] = [value]
 | 
			
		||||
    def remove(self, value):
 | 
			
		||||
	del self[self.index(value)]
 | 
			
		||||
    def reverse(self):
 | 
			
		||||
	s = self[:]
 | 
			
		||||
	s.reverse()
 | 
			
		||||
	self.set(s)
 | 
			
		||||
    def sort(self, *args):
 | 
			
		||||
	s = self[:]
 | 
			
		||||
	s.sort()
 | 
			
		||||
	self.set(s)
 | 
			
		||||
 | 
			
		||||
    # Blt vector instance methods:
 | 
			
		||||
    # append - same as list method above
 | 
			
		||||
    def clear(self):
 | 
			
		||||
	self.tk.call(self._name, 'clear')
 | 
			
		||||
    def delete(self, *args):
 | 
			
		||||
	self.tk.call((self._name, 'delete') + args)
 | 
			
		||||
    def expr(self, expression):
 | 
			
		||||
	self.tk.call(self._name, 'expr', expression)
 | 
			
		||||
    def length(self, newSize=None): 
 | 
			
		||||
	return self.tk.getint(self.tk.call(self._name, 'length', newSize))
 | 
			
		||||
    def range(self, first, last=None):
 | 
			
		||||
	# Note that, unlike self[first:last], this includes the last
 | 
			
		||||
	# item in the returned range.
 | 
			
		||||
	text = self.tk.call(self._name, 'range', first, last)
 | 
			
		||||
	return map(self.tk.getdouble, self.tk.splitlist(text))
 | 
			
		||||
    def search(self, start, end=None):
 | 
			
		||||
	return self._master._getints(self.tk.call(
 | 
			
		||||
		self._name, 'search', start, end))
 | 
			
		||||
    def set(self, list):
 | 
			
		||||
	if type(list) != types.TupleType:
 | 
			
		||||
	    list = tuple(list)
 | 
			
		||||
	self.tk.call(self._name, 'set', list)
 | 
			
		||||
 | 
			
		||||
    # The blt vector sort method has different semantics to the python
 | 
			
		||||
    # list sort method.  Call these blt_sort:
 | 
			
		||||
    def blt_sort(self, *args):
 | 
			
		||||
	self.tk.call((self._name, 'sort') + args)
 | 
			
		||||
    def blt_sort_reverse(self, *args):
 | 
			
		||||
	self.tk.call((self._name, 'sort', '-reverse') + args)
 | 
			
		||||
 | 
			
		||||
    # Special blt vector indexes:
 | 
			
		||||
    def min(self):
 | 
			
		||||
	return self.tk.getdouble(self.tk.globalgetvar(self._name, 'min'))
 | 
			
		||||
    def max(self):
 | 
			
		||||
	return self.tk.getdouble(self.tk.globalgetvar(self._name, 'max'))
 | 
			
		||||
 | 
			
		||||
    # Method borrowed from Tkinter.Var class:
 | 
			
		||||
    def get(self):
 | 
			
		||||
	return self[:]
 | 
			
		||||
 | 
			
		||||
#=============================================================================
 | 
			
		||||
 | 
			
		||||
# This is a general purpose configure routine which can handle the
 | 
			
		||||
# configuration of widgets, items within widgets, etc.  Supports the
 | 
			
		||||
# forms configure() and configure('font') for querying and
 | 
			
		||||
# configure(font = 'fixed', text = 'hello') for setting.
 | 
			
		||||
 | 
			
		||||
def _doConfigure(widget, subcommand, option, kw):
 | 
			
		||||
 | 
			
		||||
    if not option and not kw:
 | 
			
		||||
        # Return a description of all options.
 | 
			
		||||
        ret = {}
 | 
			
		||||
        options = widget.tk.splitlist(widget.tk.call(subcommand))
 | 
			
		||||
        for optionString in options:
 | 
			
		||||
            optionInfo = widget.tk.splitlist(optionString)
 | 
			
		||||
            option = optionInfo[0][1:]
 | 
			
		||||
            ret[option] = (option,) + optionInfo[1:]
 | 
			
		||||
        return ret
 | 
			
		||||
 | 
			
		||||
    if option:
 | 
			
		||||
        # Return a description of the option given by <option>.
 | 
			
		||||
        if kw:
 | 
			
		||||
            # Having keywords implies setting configuration options.
 | 
			
		||||
            # Can't set and get in one command!
 | 
			
		||||
            raise ValueError, 'cannot have option argument with keywords'
 | 
			
		||||
        option = '-' + option
 | 
			
		||||
        optionInfo = widget.tk.splitlist(widget.tk.call(subcommand + (option,)))
 | 
			
		||||
        return (optionInfo[0][1:],) + optionInfo[1:]
 | 
			
		||||
 | 
			
		||||
    # Otherwise, set the given configuration options.
 | 
			
		||||
    widget.tk.call(subcommand + widget._options(kw))
 | 
			
		||||
 | 
			
		||||
#=============================================================================
 | 
			
		||||
 | 
			
		||||
class Graph(Tkinter.Widget):
 | 
			
		||||
    # Wrapper for the blt graph widget, version 2.4.
 | 
			
		||||
 | 
			
		||||
    def __init__(self, master=None, cnf={}, **kw):
 | 
			
		||||
	_loadBlt(master)
 | 
			
		||||
	Tkinter.Widget.__init__(self, master, _graphCommand, cnf, kw)
 | 
			
		||||
 | 
			
		||||
    def bar_create(self, name, **kw):
 | 
			
		||||
	self.tk.call((self._w, 'bar', 'create', name) + self._options(kw))
 | 
			
		||||
 | 
			
		||||
    def line_create(self, name, **kw):
 | 
			
		||||
	self.tk.call((self._w, 'line', 'create', name) + self._options(kw))
 | 
			
		||||
 | 
			
		||||
    def extents(self, item):
 | 
			
		||||
	return self.tk.getint(self.tk.call(self._w, 'extents', item))
 | 
			
		||||
 | 
			
		||||
    def invtransform(self, winX, winY):
 | 
			
		||||
	return self._getdoubles(
 | 
			
		||||
		self.tk.call(self._w, 'invtransform', winX, winY))
 | 
			
		||||
 | 
			
		||||
    def inside(self, x, y):
 | 
			
		||||
	return self.tk.getint(self.tk.call(self._w, 'inside', x, y))
 | 
			
		||||
 | 
			
		||||
    def snap(self, photoName):
 | 
			
		||||
	self.tk.call(self._w, 'snap', photoName)
 | 
			
		||||
 | 
			
		||||
    def transform(self, x, y):
 | 
			
		||||
	return self._getdoubles(self.tk.call(self._w, 'transform', x, y))
 | 
			
		||||
 | 
			
		||||
    def axis_cget(self, axisName, key):
 | 
			
		||||
	return self.tk.call(self._w, 'axis', 'cget', axisName, '-' + key)
 | 
			
		||||
    def axis_configure(self, axes, option=None, **kw):
 | 
			
		||||
        # <axes> may be a list of axisNames.
 | 
			
		||||
	if type(axes) == types.StringType:
 | 
			
		||||
            axes = [axes]
 | 
			
		||||
	subcommand = (self._w, 'axis', 'configure') + tuple(axes)
 | 
			
		||||
	return _doConfigure(self, subcommand, option, kw)
 | 
			
		||||
    def axis_create(self, axisName, **kw):
 | 
			
		||||
	self.tk.call((self._w, 'axis', 'create', axisName) + self._options(kw))
 | 
			
		||||
    def axis_delete(self, *args):
 | 
			
		||||
	self.tk.call((self._w, 'axis', 'delete') + args)
 | 
			
		||||
    def axis_invtransform(self, axisName, value):
 | 
			
		||||
	return self.tk.getdouble(self.tk.call(
 | 
			
		||||
		self._w, 'axis', 'invtransform', axisName, value))
 | 
			
		||||
    def axis_limits(self, axisName):
 | 
			
		||||
	return self._getdoubles(self.tk.call(
 | 
			
		||||
		self._w, 'axis', 'limits', axisName))
 | 
			
		||||
    def axis_names(self, *args):
 | 
			
		||||
        return self.tk.splitlist(
 | 
			
		||||
                self.tk.call((self._w, 'axis', 'names') + args))
 | 
			
		||||
    def axis_transform(self, axisName, value):
 | 
			
		||||
	return self.tk.getint(self.tk.call(
 | 
			
		||||
		self._w, 'axis', 'transform', axisName, value))
 | 
			
		||||
 | 
			
		||||
    def xaxis_cget(self, key):
 | 
			
		||||
	return self.tk.call(self._w, 'xaxis', 'cget', '-' + key)
 | 
			
		||||
    def xaxis_configure(self, option=None, **kw):
 | 
			
		||||
	subcommand = (self._w, 'xaxis', 'configure')
 | 
			
		||||
	return _doConfigure(self, subcommand, option, kw)
 | 
			
		||||
    def xaxis_invtransform(self, value):
 | 
			
		||||
	return self.tk.getdouble(self.tk.call(
 | 
			
		||||
		self._w, 'xaxis', 'invtransform', value))
 | 
			
		||||
    def xaxis_limits(self):
 | 
			
		||||
	return self._getdoubles(self.tk.call(self._w, 'xaxis', 'limits'))
 | 
			
		||||
    def xaxis_transform(self, value):
 | 
			
		||||
	return self.tk.getint(self.tk.call(
 | 
			
		||||
		self._w, 'xaxis', 'transform', value))
 | 
			
		||||
    def xaxis_use(self, axisName = None):
 | 
			
		||||
	return self.tk.call(self._w, 'xaxis', 'use', axisName)
 | 
			
		||||
 | 
			
		||||
    def x2axis_cget(self, key):
 | 
			
		||||
	return self.tk.call(self._w, 'x2axis', 'cget', '-' + key)
 | 
			
		||||
    def x2axis_configure(self, option=None, **kw):
 | 
			
		||||
	subcommand = (self._w, 'x2axis', 'configure')
 | 
			
		||||
	return _doConfigure(self, subcommand, option, kw)
 | 
			
		||||
    def x2axis_invtransform(self, value):
 | 
			
		||||
	return self.tk.getdouble(self.tk.call(
 | 
			
		||||
		self._w, 'x2axis', 'invtransform', value))
 | 
			
		||||
    def x2axis_limits(self):
 | 
			
		||||
	return self._getdoubles(self.tk.call(self._w, 'x2axis', 'limits'))
 | 
			
		||||
    def x2axis_transform(self, value):
 | 
			
		||||
	return self.tk.getint(self.tk.call(
 | 
			
		||||
		self._w, 'x2axis', 'transform', value))
 | 
			
		||||
    def x2axis_use(self, axisName = None):
 | 
			
		||||
	return self.tk.call(self._w, 'x2axis', 'use', axisName)
 | 
			
		||||
 | 
			
		||||
    def yaxis_cget(self, key):
 | 
			
		||||
	return self.tk.call(self._w, 'yaxis', 'cget', '-' + key)
 | 
			
		||||
    def yaxis_configure(self, option=None, **kw):
 | 
			
		||||
	subcommand = (self._w, 'yaxis', 'configure')
 | 
			
		||||
	return _doConfigure(self, subcommand, option, kw)
 | 
			
		||||
    def yaxis_invtransform(self, value):
 | 
			
		||||
	return self.tk.getdouble(self.tk.call(
 | 
			
		||||
		self._w, 'yaxis', 'invtransform', value))
 | 
			
		||||
    def yaxis_limits(self):
 | 
			
		||||
	return self._getdoubles(self.tk.call(self._w, 'yaxis', 'limits'))
 | 
			
		||||
    def yaxis_transform(self, value):
 | 
			
		||||
	return self.tk.getint(self.tk.call(
 | 
			
		||||
		self._w, 'yaxis', 'transform', value))
 | 
			
		||||
    def yaxis_use(self, axisName = None):
 | 
			
		||||
	return self.tk.call(self._w, 'yaxis', 'use', axisName)
 | 
			
		||||
 | 
			
		||||
    def y2axis_cget(self, key):
 | 
			
		||||
	return self.tk.call(self._w, 'y2axis', 'cget', '-' + key)
 | 
			
		||||
    def y2axis_configure(self, option=None, **kw):
 | 
			
		||||
	subcommand = (self._w, 'y2axis', 'configure')
 | 
			
		||||
	return _doConfigure(self, subcommand, option, kw)
 | 
			
		||||
    def y2axis_invtransform(self, value):
 | 
			
		||||
	return self.tk.getdouble(self.tk.call(
 | 
			
		||||
		self._w, 'y2axis', 'invtransform', value))
 | 
			
		||||
    def y2axis_limits(self):
 | 
			
		||||
	return self._getdoubles(self.tk.call(self._w, 'y2axis', 'limits'))
 | 
			
		||||
    def y2axis_transform(self, value):
 | 
			
		||||
	return self.tk.getint(self.tk.call(
 | 
			
		||||
		self._w, 'y2axis', 'transform', value))
 | 
			
		||||
    def y2axis_use(self, axisName = None):
 | 
			
		||||
	return self.tk.call(self._w, 'y2axis', 'use', axisName)
 | 
			
		||||
 | 
			
		||||
    def crosshairs_cget(self, key):
 | 
			
		||||
	return self.tk.call(self._w, 'crosshairs', 'cget', '-' + key)
 | 
			
		||||
    def crosshairs_configure(self, option=None, **kw):
 | 
			
		||||
	subcommand = (self._w, 'crosshairs', 'configure')
 | 
			
		||||
	return _doConfigure(self, subcommand, option, kw)
 | 
			
		||||
    def crosshairs_off(self):
 | 
			
		||||
	self.tk.call(self._w, 'crosshairs', 'off')
 | 
			
		||||
    def crosshairs_on(self):
 | 
			
		||||
	self.tk.call(self._w, 'crosshairs', 'on')
 | 
			
		||||
    def crosshairs_toggle(self):
 | 
			
		||||
	self.tk.call(self._w, 'crosshairs', 'toggle')
 | 
			
		||||
 | 
			
		||||
    def element_activate(self, name, *args):
 | 
			
		||||
	self.tk.call((self._w, 'element', 'activate', name) + args)
 | 
			
		||||
    def element_bind(self, tagName, sequence=None, func=None, add=None):
 | 
			
		||||
        return self._bind((self._w, 'element', 'bind', tagName),
 | 
			
		||||
                sequence, func, add)
 | 
			
		||||
    def element_unbind(self, tagName, sequence, funcid=None):
 | 
			
		||||
        self.tk.call(self._w, 'element', 'bind', tagName, sequence, '')
 | 
			
		||||
        if funcid:
 | 
			
		||||
            self.deletecommand(funcid)
 | 
			
		||||
 | 
			
		||||
    def element_cget(self, name, key):
 | 
			
		||||
	return self.tk.call(self._w, 'element', 'cget', name, '-' + key)
 | 
			
		||||
 | 
			
		||||
    def element_closest(self, x, y, *args, **kw):
 | 
			
		||||
        var = 'python_private_1'
 | 
			
		||||
	success = self.tk.getint(self.tk.call(
 | 
			
		||||
                (self._w, 'element', 'closest', x, y, var) +
 | 
			
		||||
                        self._options(kw) + args))
 | 
			
		||||
	if success:
 | 
			
		||||
	    rtn = {}
 | 
			
		||||
	    rtn['dist'] = self.tk.getdouble(self.tk.globalgetvar(var, 'dist'))
 | 
			
		||||
	    rtn['x'] = self.tk.getdouble(self.tk.globalgetvar(var, 'x'))
 | 
			
		||||
	    rtn['y'] = self.tk.getdouble(self.tk.globalgetvar(var, 'y'))
 | 
			
		||||
	    rtn['index'] = self.tk.getint(self.tk.globalgetvar(var, 'index'))
 | 
			
		||||
	    rtn['name'] = self.tk.globalgetvar(var, 'name')
 | 
			
		||||
	    return rtn
 | 
			
		||||
	else:
 | 
			
		||||
	    return None
 | 
			
		||||
 | 
			
		||||
    def element_configure(self, names, option=None, **kw):
 | 
			
		||||
        # <names> may be a list of elemNames.
 | 
			
		||||
	if type(names) == types.StringType:
 | 
			
		||||
            names = [names]
 | 
			
		||||
	subcommand = (self._w, 'element', 'configure') + tuple(names)
 | 
			
		||||
	return _doConfigure(self, subcommand, option, kw)
 | 
			
		||||
 | 
			
		||||
    def element_deactivate(self, *args):
 | 
			
		||||
	self.tk.call((self._w, 'element', 'deactivate') + args)
 | 
			
		||||
 | 
			
		||||
    def element_delete(self, *args):
 | 
			
		||||
	self.tk.call((self._w, 'element', 'delete') + args)
 | 
			
		||||
    def element_exists(self, name):
 | 
			
		||||
	return self.tk.getboolean(
 | 
			
		||||
		self.tk.call(self._w, 'element', 'exists', name))
 | 
			
		||||
 | 
			
		||||
    def element_names(self, *args):
 | 
			
		||||
        return self.tk.splitlist(
 | 
			
		||||
                self.tk.call((self._w, 'element', 'names') + args))
 | 
			
		||||
    def element_show(self, nameList=None):
 | 
			
		||||
	if nameList is not None:
 | 
			
		||||
	    nameList = tuple(nameList)
 | 
			
		||||
	return self.tk.splitlist(
 | 
			
		||||
		self.tk.call(self._w, 'element', 'show', nameList))
 | 
			
		||||
    def element_type(self, name):
 | 
			
		||||
	return self.tk.call(self._w, 'element', 'type', name)
 | 
			
		||||
 | 
			
		||||
    def grid_cget(self, key):
 | 
			
		||||
	return self.tk.call(self._w, 'grid', 'cget', '-' + key)
 | 
			
		||||
    def grid_configure(self, option=None, **kw):
 | 
			
		||||
	subcommand = (self._w, 'grid', 'configure')
 | 
			
		||||
	return _doConfigure(self, subcommand, option, kw)
 | 
			
		||||
 | 
			
		||||
    def grid_off(self):
 | 
			
		||||
	self.tk.call(self._w, 'grid', 'off')
 | 
			
		||||
    def grid_on(self):
 | 
			
		||||
	self.tk.call(self._w, 'grid', 'on')
 | 
			
		||||
    def grid_toggle(self):
 | 
			
		||||
	self.tk.call(self._w, 'grid', 'toggle')
 | 
			
		||||
 | 
			
		||||
    def legend_activate(self, *args):
 | 
			
		||||
	self.tk.call((self._w, 'legend', 'activate') + args)
 | 
			
		||||
    def legend_bind(self, tagName, sequence=None, func=None, add=None):
 | 
			
		||||
        return self._bind((self._w, 'legend', 'bind', tagName),
 | 
			
		||||
                sequence, func, add)
 | 
			
		||||
    def legend_unbind(self, tagName, sequence, funcid=None):
 | 
			
		||||
        self.tk.call(self._w, 'legend', 'bind', tagName, sequence, '')
 | 
			
		||||
        if funcid:
 | 
			
		||||
            self.deletecommand(funcid)
 | 
			
		||||
 | 
			
		||||
    def legend_cget(self, key):
 | 
			
		||||
	return self.tk.call(self._w, 'legend', 'cget', '-' + key)
 | 
			
		||||
    def legend_configure(self, option=None, **kw):
 | 
			
		||||
	subcommand = (self._w, 'legend', 'configure')
 | 
			
		||||
	return _doConfigure(self, subcommand, option, kw)
 | 
			
		||||
    def legend_deactivate(self, *args):
 | 
			
		||||
	self.tk.call((self._w, 'legend', 'deactivate') + args)
 | 
			
		||||
    def legend_get(self, pos):
 | 
			
		||||
	return self.tk.call(self._w, 'legend', 'get', pos)
 | 
			
		||||
 | 
			
		||||
    def pen_cget(self, name, key):
 | 
			
		||||
	return self.tk.call(self._w, 'pen', 'cget', name, '-' + key)
 | 
			
		||||
    def pen_configure(self, names, option=None, **kw):
 | 
			
		||||
        # <names> may be a list of penNames.
 | 
			
		||||
	if type(names) == types.StringType:
 | 
			
		||||
            names = [names]
 | 
			
		||||
	subcommand = (self._w, 'pen', 'configure') + tuple(names)
 | 
			
		||||
	return _doConfigure(self, subcommand, option, kw)
 | 
			
		||||
    def pen_create(self, name, **kw):
 | 
			
		||||
	self.tk.call((self._w, 'pen', 'create', name) + self._options(kw))
 | 
			
		||||
    def pen_delete(self, *args):
 | 
			
		||||
	self.tk.call((self._w, 'pen', 'delete') + args)
 | 
			
		||||
    def pen_names(self, *args):
 | 
			
		||||
        return self.tk.splitlist(self.tk.call((self._w, 'pen', 'names') + args))
 | 
			
		||||
 | 
			
		||||
    def postscript_cget(self, key):
 | 
			
		||||
	return self.tk.call(self._w, 'postscript', 'cget', '-' + key)
 | 
			
		||||
    def postscript_configure(self, option=None, **kw):
 | 
			
		||||
	subcommand = (self._w, 'postscript', 'configure')
 | 
			
		||||
	return _doConfigure(self, subcommand, option, kw)
 | 
			
		||||
    def postscript_output(self, fileName=None, **kw):
 | 
			
		||||
	prefix = (self._w, 'postscript', 'output')
 | 
			
		||||
	if fileName is None:
 | 
			
		||||
	    return self.tk.call(prefix + self._options(kw))
 | 
			
		||||
	else:
 | 
			
		||||
	    self.tk.call(prefix + (fileName,) + self._options(kw))
 | 
			
		||||
 | 
			
		||||
    def marker_after(self, first, second=None):
 | 
			
		||||
	self.tk.call(self._w, 'marker', 'after', first, second)
 | 
			
		||||
    def marker_before(self, first, second=None):
 | 
			
		||||
	self.tk.call(self._w, 'marker', 'before', first, second)
 | 
			
		||||
    def marker_bind(self, tagName, sequence=None, func=None, add=None):
 | 
			
		||||
        return self._bind((self._w, 'marker', 'bind', tagName),
 | 
			
		||||
                sequence, func, add)
 | 
			
		||||
    def marker_unbind(self, tagName, sequence, funcid=None):
 | 
			
		||||
        self.tk.call(self._w, 'marker', 'bind', tagName, sequence, '')
 | 
			
		||||
        if funcid:
 | 
			
		||||
            self.deletecommand(funcid)
 | 
			
		||||
 | 
			
		||||
    def marker_cget(self, name, key):
 | 
			
		||||
	return self.tk.call(self._w, 'marker', 'cget', name, '-' + key)
 | 
			
		||||
    def marker_configure(self, names, option=None, **kw):
 | 
			
		||||
        # <names> may be a list of markerIds.
 | 
			
		||||
	if type(names) == types.StringType:
 | 
			
		||||
            names = [names]
 | 
			
		||||
	subcommand = (self._w, 'marker', 'configure') + tuple(names)
 | 
			
		||||
	return _doConfigure(self, subcommand, option, kw)
 | 
			
		||||
    def marker_create(self, type, **kw):
 | 
			
		||||
	return self.tk.call(
 | 
			
		||||
                (self._w, 'marker', 'create', type) + self._options(kw))
 | 
			
		||||
 | 
			
		||||
    def marker_delete(self, *args):
 | 
			
		||||
	self.tk.call((self._w, 'marker', 'delete') + args)
 | 
			
		||||
    def marker_exists(self, name):
 | 
			
		||||
	return self.tk.getboolean(
 | 
			
		||||
		self.tk.call(self._w, 'marker', 'exists', name))
 | 
			
		||||
    def marker_names(self, *args):
 | 
			
		||||
        return self.tk.splitlist(
 | 
			
		||||
                self.tk.call((self._w, 'marker', 'names') + args))
 | 
			
		||||
    def marker_type(self, name):
 | 
			
		||||
	type = self.tk.call(self._w, 'marker', 'type', name)
 | 
			
		||||
	if type == '':
 | 
			
		||||
	    type = None
 | 
			
		||||
	return type
 | 
			
		||||
 | 
			
		||||
#=============================================================================
 | 
			
		||||
class Stripchart(Graph):
 | 
			
		||||
    # Wrapper for the blt stripchart widget, version 2.4.
 | 
			
		||||
 | 
			
		||||
    def __init__(self, master=None, cnf={}, **kw):
 | 
			
		||||
	_loadBlt(master)
 | 
			
		||||
	Tkinter.Widget.__init__(self, master, _chartCommand, cnf, kw)
 | 
			
		||||
 | 
			
		||||
#=============================================================================
 | 
			
		||||
class Tabset(Tkinter.Widget): 
 | 
			
		||||
 | 
			
		||||
    # Wrapper for the blt TabSet widget, version 2.4.
 | 
			
		||||
 | 
			
		||||
    def __init__(self, master=None, cnf={}, **kw):
 | 
			
		||||
	_loadBlt(master)
 | 
			
		||||
	Tkinter.Widget.__init__(self, master, _tabsetCommand, cnf, kw)
 | 
			
		||||
 | 
			
		||||
    def activate(self, tabIndex):
 | 
			
		||||
        self.tk.call(self._w, 'activate', tabIndex)
 | 
			
		||||
 | 
			
		||||
    # This is the 'bind' sub-command:
 | 
			
		||||
    def tag_bind(self, tagName, sequence=None, func=None, add=None):
 | 
			
		||||
        return self._bind((self._w, 'bind', tagName), sequence, func, add)
 | 
			
		||||
 | 
			
		||||
    def tag_unbind(self, tagName, sequence, funcid=None):
 | 
			
		||||
        self.tk.call(self._w, 'bind', tagName, sequence, '')
 | 
			
		||||
        if funcid:
 | 
			
		||||
            self.deletecommand(funcid)
 | 
			
		||||
 | 
			
		||||
    def delete(self, first, last = None):
 | 
			
		||||
    	self.tk.call(self._w, 'delete', first, last)
 | 
			
		||||
 | 
			
		||||
    # This is the 'focus' sub-command:
 | 
			
		||||
    def tab_focus(self, tabIndex):
 | 
			
		||||
    	self.tk.call(self._w, 'focus', tabIndex)
 | 
			
		||||
    	
 | 
			
		||||
    def get(self, tabIndex):
 | 
			
		||||
	return self.tk.call(self._w, 'get', tabIndex)
 | 
			
		||||
 | 
			
		||||
    def index(self, tabIndex):
 | 
			
		||||
	index = self.tk.call(self._w, 'index', tabIndex)
 | 
			
		||||
        if index == '':
 | 
			
		||||
            return None
 | 
			
		||||
        else:
 | 
			
		||||
            return self.tk.getint(self.tk.call(self._w, 'index', tabIndex))
 | 
			
		||||
 | 
			
		||||
    def insert(self, position, name1, *names, **kw):
 | 
			
		||||
	self.tk.call(
 | 
			
		||||
            (self._w, 'insert', position, name1) + names + self._options(kw))
 | 
			
		||||
 | 
			
		||||
    def invoke(self, tabIndex):
 | 
			
		||||
    	return self.tk.call(self._w, 'invoke', tabIndex)
 | 
			
		||||
 | 
			
		||||
    def move(self, tabIndex1, beforeOrAfter, tabIndex2):
 | 
			
		||||
    	self.tk.call(self._w, 'move', tabIndex1, beforeOrAfter, tabIndex2)
 | 
			
		||||
    	
 | 
			
		||||
    def nearest(self, x, y):
 | 
			
		||||
    	return self.tk.call(self._w, 'nearest', x, y)
 | 
			
		||||
 | 
			
		||||
    def scan_mark(self, x, y):
 | 
			
		||||
        self.tk.call(self._w, 'scan', 'mark', x, y)
 | 
			
		||||
 | 
			
		||||
    def scan_dragto(self, x, y):
 | 
			
		||||
        self.tk.call(self._w, 'scan', 'dragto', x, y)
 | 
			
		||||
 | 
			
		||||
    def see(self, index):
 | 
			
		||||
        self.tk.call(self._w, 'see', index)
 | 
			
		||||
    	
 | 
			
		||||
    def see(self, tabIndex):
 | 
			
		||||
    	self.tk.call(self._w,'see',tabIndex)
 | 
			
		||||
    	
 | 
			
		||||
    def size(self):
 | 
			
		||||
	return self.tk.getint(self.tk.call(self._w, 'size'))
 | 
			
		||||
 | 
			
		||||
    def tab_cget(self, tabIndex, option):
 | 
			
		||||
        if option[:1] != '-':
 | 
			
		||||
            option = '-' + option
 | 
			
		||||
        if option[-1:] == '_':
 | 
			
		||||
            option = option[:-1]
 | 
			
		||||
        return self.tk.call(self._w, 'tab', 'cget', tabIndex, option)
 | 
			
		||||
 | 
			
		||||
    def tab_configure(self, tabIndexes, option=None, **kw):
 | 
			
		||||
        # <tabIndexes> may be a list of tabs.
 | 
			
		||||
	if type(tabIndexes) in (types.StringType, types.IntType):
 | 
			
		||||
            tabIndexes = [tabIndexes]
 | 
			
		||||
	subcommand = (self._w, 'tab', 'configure') + tuple(tabIndexes)
 | 
			
		||||
	return _doConfigure(self, subcommand, option, kw)
 | 
			
		||||
 | 
			
		||||
    def tab_names(self, *args):
 | 
			
		||||
        return self.tk.splitlist(self.tk.call((self._w, 'tab', 'names') + args))
 | 
			
		||||
 | 
			
		||||
    def tab_tearoff(self, tabIndex, newName = None):
 | 
			
		||||
        if newName is None:
 | 
			
		||||
            name = self.tk.call(self._w, 'tab', 'tearoff', tabIndex)
 | 
			
		||||
            return self.nametowidget(name)
 | 
			
		||||
        else:
 | 
			
		||||
            self.tk.call(self._w, 'tab', 'tearoff', tabIndex, newName)
 | 
			
		||||
 | 
			
		||||
    def view(self):
 | 
			
		||||
        s = self.tk.call(self._w, 'view')
 | 
			
		||||
        return tuple(map(self.tk.getint, self.tk.splitlist(s)))
 | 
			
		||||
    def view_moveto(self, fraction):
 | 
			
		||||
        self.tk.call(self._w, 'view', 'moveto', fraction)
 | 
			
		||||
    def view_scroll(self, number, what):
 | 
			
		||||
        self.tk.call(self._w, 'view', 'scroll', number, what)
 | 
			
		||||
							
								
								
									
										361
									
								
								PmwColor.py
									
									
									
									
									
								
							
							
						
						
									
										361
									
								
								PmwColor.py
									
									
									
									
									
								
							@ -1,361 +0,0 @@
 | 
			
		||||
# Functions for converting colors and modifying the color scheme of
 | 
			
		||||
# an application.
 | 
			
		||||
 | 
			
		||||
import math
 | 
			
		||||
import string
 | 
			
		||||
import sys
 | 
			
		||||
import Tkinter
 | 
			
		||||
 | 
			
		||||
_PI = math.pi
 | 
			
		||||
_TWO_PI = _PI * 2
 | 
			
		||||
_THIRD_PI = _PI / 3
 | 
			
		||||
_SIXTH_PI = _PI / 6
 | 
			
		||||
_MAX_RGB = float(256 * 256 - 1) # max size of rgb values returned from Tk
 | 
			
		||||
 | 
			
		||||
def setscheme(root, background=None, **kw):
 | 
			
		||||
    root = root._root()
 | 
			
		||||
    palette = apply(_calcPalette, (root, background,), kw)
 | 
			
		||||
    for option, value in palette.items():
 | 
			
		||||
	root.option_add('*' + option, value, 'widgetDefault')
 | 
			
		||||
 | 
			
		||||
def getdefaultpalette(root):
 | 
			
		||||
    # Return the default values of all options, using the defaults
 | 
			
		||||
    # from a few widgets.
 | 
			
		||||
 | 
			
		||||
    ckbtn = Tkinter.Checkbutton(root)
 | 
			
		||||
    entry = Tkinter.Entry(root)
 | 
			
		||||
    scbar = Tkinter.Scrollbar(root)
 | 
			
		||||
 | 
			
		||||
    orig = {}
 | 
			
		||||
    orig['activeBackground'] = str(ckbtn.configure('activebackground')[4])
 | 
			
		||||
    orig['activeForeground'] = str(ckbtn.configure('activeforeground')[4])
 | 
			
		||||
    orig['background'] = str(ckbtn.configure('background')[4])
 | 
			
		||||
    orig['disabledForeground'] = str(ckbtn.configure('disabledforeground')[4])
 | 
			
		||||
    orig['foreground'] = str(ckbtn.configure('foreground')[4])
 | 
			
		||||
    orig['highlightBackground'] = str(ckbtn.configure('highlightbackground')[4])
 | 
			
		||||
    orig['highlightColor'] = str(ckbtn.configure('highlightcolor')[4])
 | 
			
		||||
    orig['insertBackground'] = str(entry.configure('insertbackground')[4])
 | 
			
		||||
    orig['selectColor'] = str(ckbtn.configure('selectcolor')[4])
 | 
			
		||||
    orig['selectBackground'] = str(entry.configure('selectbackground')[4])
 | 
			
		||||
    orig['selectForeground'] = str(entry.configure('selectforeground')[4])
 | 
			
		||||
    orig['troughColor'] = str(scbar.configure('troughcolor')[4])
 | 
			
		||||
 | 
			
		||||
    ckbtn.destroy()
 | 
			
		||||
    entry.destroy()
 | 
			
		||||
    scbar.destroy()
 | 
			
		||||
 | 
			
		||||
    return orig
 | 
			
		||||
 | 
			
		||||
#======================================================================
 | 
			
		||||
 | 
			
		||||
# Functions dealing with brightness, hue, saturation and intensity of colors.
 | 
			
		||||
 | 
			
		||||
def changebrightness(root, colorName, brightness):
 | 
			
		||||
    # Convert the color name into its hue and back into a color of the
 | 
			
		||||
    # required brightness.
 | 
			
		||||
 | 
			
		||||
    rgb = name2rgb(root, colorName)
 | 
			
		||||
    hue, saturation, intensity = rgb2hsi(rgb)
 | 
			
		||||
    if saturation == 0.0:
 | 
			
		||||
        hue = None
 | 
			
		||||
    return hue2name(hue, brightness)
 | 
			
		||||
 | 
			
		||||
def hue2name(hue, brightness = None):
 | 
			
		||||
    # Convert the requested hue and brightness into a color name.  If
 | 
			
		||||
    # hue is None, return a grey of the requested brightness.
 | 
			
		||||
 | 
			
		||||
    if hue is None:
 | 
			
		||||
	rgb = hsi2rgb(0.0, 0.0, brightness)
 | 
			
		||||
    else:
 | 
			
		||||
	while hue < 0:
 | 
			
		||||
	    hue = hue + _TWO_PI
 | 
			
		||||
	while hue >= _TWO_PI:
 | 
			
		||||
	    hue = hue - _TWO_PI
 | 
			
		||||
 | 
			
		||||
	rgb = hsi2rgb(hue, 1.0, 1.0)
 | 
			
		||||
	if brightness is not None:
 | 
			
		||||
	    b = rgb2brightness(rgb)
 | 
			
		||||
	    i = 1.0 - (1.0 - brightness) * b
 | 
			
		||||
	    s = bhi2saturation(brightness, hue, i)
 | 
			
		||||
	    rgb = hsi2rgb(hue, s, i)
 | 
			
		||||
 | 
			
		||||
    return rgb2name(rgb)
 | 
			
		||||
 | 
			
		||||
def bhi2saturation(brightness, hue, intensity):
 | 
			
		||||
    while hue < 0:
 | 
			
		||||
        hue = hue + _TWO_PI
 | 
			
		||||
    while hue >= _TWO_PI:
 | 
			
		||||
        hue = hue - _TWO_PI
 | 
			
		||||
    hue = hue / _THIRD_PI
 | 
			
		||||
    f = hue - math.floor(hue)
 | 
			
		||||
 | 
			
		||||
    pp = intensity
 | 
			
		||||
    pq = intensity * f
 | 
			
		||||
    pt = intensity - intensity * f
 | 
			
		||||
    pv = 0
 | 
			
		||||
 | 
			
		||||
    hue = int(hue)
 | 
			
		||||
    if   hue == 0: rgb = (pv, pt, pp)
 | 
			
		||||
    elif hue == 1: rgb = (pq, pv, pp)
 | 
			
		||||
    elif hue == 2: rgb = (pp, pv, pt)
 | 
			
		||||
    elif hue == 3: rgb = (pp, pq, pv)
 | 
			
		||||
    elif hue == 4: rgb = (pt, pp, pv)
 | 
			
		||||
    elif hue == 5: rgb = (pv, pp, pq)
 | 
			
		||||
 | 
			
		||||
    return (intensity - brightness) / rgb2brightness(rgb)
 | 
			
		||||
 | 
			
		||||
def hsi2rgb(hue, saturation, intensity):
 | 
			
		||||
    i = intensity
 | 
			
		||||
    if saturation == 0:
 | 
			
		||||
	rgb = [i, i, i]
 | 
			
		||||
    else:
 | 
			
		||||
	while hue < 0:
 | 
			
		||||
	    hue = hue + _TWO_PI
 | 
			
		||||
	while hue >= _TWO_PI:
 | 
			
		||||
	    hue = hue - _TWO_PI
 | 
			
		||||
	hue = hue / _THIRD_PI
 | 
			
		||||
	f = hue - math.floor(hue)
 | 
			
		||||
	p = i * (1.0 - saturation)
 | 
			
		||||
	q = i * (1.0 - saturation * f)
 | 
			
		||||
	t = i * (1.0 - saturation * (1.0 - f))
 | 
			
		||||
 | 
			
		||||
	hue = int(hue)
 | 
			
		||||
	if   hue == 0: rgb = [i, t, p]
 | 
			
		||||
	elif hue == 1: rgb = [q, i, p]
 | 
			
		||||
	elif hue == 2: rgb = [p, i, t]
 | 
			
		||||
	elif hue == 3: rgb = [p, q, i]
 | 
			
		||||
	elif hue == 4: rgb = [t, p, i]
 | 
			
		||||
	elif hue == 5: rgb = [i, p, q]
 | 
			
		||||
 | 
			
		||||
    for index in range(3):
 | 
			
		||||
	val = rgb[index]
 | 
			
		||||
	if val < 0.0:
 | 
			
		||||
	    val = 0.0
 | 
			
		||||
	if val > 1.0:
 | 
			
		||||
	    val = 1.0
 | 
			
		||||
	rgb[index] = val
 | 
			
		||||
 | 
			
		||||
    return rgb
 | 
			
		||||
 | 
			
		||||
def average(rgb1, rgb2, fraction):
 | 
			
		||||
    return (
 | 
			
		||||
	rgb2[0] * fraction + rgb1[0] * (1.0 - fraction),
 | 
			
		||||
	rgb2[1] * fraction + rgb1[1] * (1.0 - fraction),
 | 
			
		||||
	rgb2[2] * fraction + rgb1[2] * (1.0 - fraction)
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
def rgb2name(rgb):
 | 
			
		||||
    return '#%02x%02x%02x' % \
 | 
			
		||||
        (int(rgb[0] * 255), int(rgb[1] * 255), int(rgb[2] * 255))
 | 
			
		||||
 | 
			
		||||
def rgb2brightness(rgb):
 | 
			
		||||
    # Return the perceived grey level of the color
 | 
			
		||||
    # (0.0 == black, 1.0 == white).
 | 
			
		||||
 | 
			
		||||
    rf = 0.299
 | 
			
		||||
    gf = 0.587
 | 
			
		||||
    bf = 0.114
 | 
			
		||||
    return rf * rgb[0] + gf * rgb[1] + bf * rgb[2]
 | 
			
		||||
 | 
			
		||||
def rgb2hsi(rgb):
 | 
			
		||||
    maxc = max(rgb[0], rgb[1], rgb[2])
 | 
			
		||||
    minc = min(rgb[0], rgb[1], rgb[2])
 | 
			
		||||
 | 
			
		||||
    intensity = maxc
 | 
			
		||||
    if maxc != 0:
 | 
			
		||||
      saturation  = (maxc - minc) / maxc
 | 
			
		||||
    else:
 | 
			
		||||
      saturation = 0.0
 | 
			
		||||
 | 
			
		||||
    hue = 0.0
 | 
			
		||||
    if saturation != 0.0:
 | 
			
		||||
	c = []
 | 
			
		||||
	for index in range(3):
 | 
			
		||||
	    c.append((maxc - rgb[index]) / (maxc - minc))
 | 
			
		||||
 | 
			
		||||
	if rgb[0] == maxc:
 | 
			
		||||
	    hue = c[2] - c[1]
 | 
			
		||||
	elif rgb[1] == maxc:
 | 
			
		||||
	    hue = 2 + c[0] - c[2]
 | 
			
		||||
	elif rgb[2] == maxc:
 | 
			
		||||
	    hue = 4 + c[1] - c[0]
 | 
			
		||||
 | 
			
		||||
	hue = hue * _THIRD_PI
 | 
			
		||||
	if hue < 0.0:
 | 
			
		||||
	    hue = hue + _TWO_PI
 | 
			
		||||
 | 
			
		||||
    return (hue, saturation, intensity)
 | 
			
		||||
 | 
			
		||||
def name2rgb(root, colorName, asInt = 0):
 | 
			
		||||
    if colorName[0] == '#':
 | 
			
		||||
	# Extract rgb information from the color name itself, assuming
 | 
			
		||||
	# it is either #rgb, #rrggbb, #rrrgggbbb, or #rrrrggggbbbb
 | 
			
		||||
	# This is useful, since tk may return incorrect rgb values if
 | 
			
		||||
	# the colormap is full - it will return the rbg values of the
 | 
			
		||||
	# closest color available.
 | 
			
		||||
        colorName = colorName[1:]
 | 
			
		||||
        digits = len(colorName) / 3
 | 
			
		||||
        factor = 16 ** (4 - digits)
 | 
			
		||||
        rgb = (
 | 
			
		||||
            string.atoi(colorName[0:digits], 16) * factor,
 | 
			
		||||
            string.atoi(colorName[digits:digits * 2], 16) * factor,
 | 
			
		||||
            string.atoi(colorName[digits * 2:digits * 3], 16) * factor,
 | 
			
		||||
        )
 | 
			
		||||
    else:
 | 
			
		||||
	# We have no choice but to ask Tk what the rgb values are.
 | 
			
		||||
	rgb = root.winfo_rgb(colorName)
 | 
			
		||||
 | 
			
		||||
    if not asInt:
 | 
			
		||||
        rgb = (rgb[0] / _MAX_RGB, rgb[1] / _MAX_RGB, rgb[2] / _MAX_RGB)
 | 
			
		||||
    return rgb
 | 
			
		||||
 | 
			
		||||
def _calcPalette(root, background=None, **kw):
 | 
			
		||||
    # Create a map that has the complete new palette.  If some colors
 | 
			
		||||
    # aren't specified, compute them from other colors that are specified.
 | 
			
		||||
    new = {}
 | 
			
		||||
    for key, value in kw.items():
 | 
			
		||||
	new[key] = value
 | 
			
		||||
    if background is not None:
 | 
			
		||||
	new['background'] = background
 | 
			
		||||
    if not new.has_key('background'):
 | 
			
		||||
	raise ValueError, 'must specify a background color'
 | 
			
		||||
 | 
			
		||||
    if not new.has_key('foreground'):
 | 
			
		||||
	new['foreground'] = 'black'
 | 
			
		||||
 | 
			
		||||
    bg = name2rgb(root, new['background'])
 | 
			
		||||
    fg = name2rgb(root, new['foreground'])
 | 
			
		||||
 | 
			
		||||
    for i in ('activeForeground', 'insertBackground', 'selectForeground',
 | 
			
		||||
	    'highlightColor'):
 | 
			
		||||
	if not new.has_key(i):
 | 
			
		||||
	    new[i] = new['foreground']
 | 
			
		||||
 | 
			
		||||
    if not new.has_key('disabledForeground'):
 | 
			
		||||
	newCol = average(bg, fg, 0.3)
 | 
			
		||||
	new['disabledForeground'] = rgb2name(newCol)
 | 
			
		||||
 | 
			
		||||
    if not new.has_key('highlightBackground'):
 | 
			
		||||
	new['highlightBackground'] = new['background']
 | 
			
		||||
 | 
			
		||||
    # Set <lighterBg> to a color that is a little lighter that the
 | 
			
		||||
    # normal background.  To do this, round each color component up by
 | 
			
		||||
    # 9% or 1/3 of the way to full white, whichever is greater.
 | 
			
		||||
    lighterBg = []
 | 
			
		||||
    for i in range(3):
 | 
			
		||||
	lighterBg.append(bg[i])
 | 
			
		||||
	inc1 = lighterBg[i] * 0.09
 | 
			
		||||
	inc2 = (1.0 - lighterBg[i]) / 3
 | 
			
		||||
	if inc1 > inc2:
 | 
			
		||||
	    lighterBg[i] = lighterBg[i] + inc1
 | 
			
		||||
	else:
 | 
			
		||||
	    lighterBg[i] = lighterBg[i] + inc2
 | 
			
		||||
	if lighterBg[i] > 1.0:
 | 
			
		||||
	    lighterBg[i] = 1.0
 | 
			
		||||
 | 
			
		||||
    # Set <darkerBg> to a color that is a little darker that the
 | 
			
		||||
    # normal background.
 | 
			
		||||
    darkerBg = (bg[0] * 0.9, bg[1] * 0.9, bg[2] * 0.9)
 | 
			
		||||
 | 
			
		||||
    if not new.has_key('activeBackground'):
 | 
			
		||||
	# If the foreground is dark, pick a light active background.
 | 
			
		||||
	# If the foreground is light, pick a dark active background.
 | 
			
		||||
	# XXX This has been disabled, since it does not look very
 | 
			
		||||
	# good with dark backgrounds. If this is ever fixed, the
 | 
			
		||||
	# selectBackground and troughColor options should also be fixed.
 | 
			
		||||
 | 
			
		||||
	if rgb2brightness(fg) < 0.5:
 | 
			
		||||
	    new['activeBackground'] = rgb2name(lighterBg)
 | 
			
		||||
	else:
 | 
			
		||||
	    new['activeBackground'] = rgb2name(lighterBg)
 | 
			
		||||
 | 
			
		||||
    if not new.has_key('selectBackground'):
 | 
			
		||||
	new['selectBackground'] = rgb2name(darkerBg)
 | 
			
		||||
    if not new.has_key('troughColor'):
 | 
			
		||||
	new['troughColor'] = rgb2name(darkerBg)
 | 
			
		||||
    if not new.has_key('selectColor'):
 | 
			
		||||
	new['selectColor'] = 'yellow'
 | 
			
		||||
 | 
			
		||||
    return new
 | 
			
		||||
 | 
			
		||||
def spectrum(numColors, correction = 1.0, saturation = 1.0, intensity = 1.0,
 | 
			
		||||
	extraOrange = 1, returnHues = 0):
 | 
			
		||||
    colorList = []
 | 
			
		||||
    division = numColors / 7.0
 | 
			
		||||
    for index in range(numColors):
 | 
			
		||||
	if extraOrange:
 | 
			
		||||
	    if index < 2 * division:
 | 
			
		||||
		hue = index / division
 | 
			
		||||
	    else:
 | 
			
		||||
		hue = 2 + 2 * (index - 2 * division) / division
 | 
			
		||||
	    hue = hue * _SIXTH_PI
 | 
			
		||||
	else:
 | 
			
		||||
	    hue = index * _TWO_PI / numColors
 | 
			
		||||
	if returnHues:
 | 
			
		||||
	    colorList.append(hue)
 | 
			
		||||
	else:
 | 
			
		||||
	    rgb = hsi2rgb(hue, saturation, intensity)
 | 
			
		||||
	    if correction != 1.0:
 | 
			
		||||
		rgb = correct(rgb, correction)
 | 
			
		||||
	    name = rgb2name(rgb)
 | 
			
		||||
	    colorList.append(name)
 | 
			
		||||
    return colorList
 | 
			
		||||
 | 
			
		||||
def correct(rgb, correction):
 | 
			
		||||
    correction = float(correction)
 | 
			
		||||
    rtn = []
 | 
			
		||||
    for index in range(3):
 | 
			
		||||
	rtn.append((1 - (1 - rgb[index]) ** correction) ** (1 / correction))
 | 
			
		||||
    return rtn
 | 
			
		||||
 | 
			
		||||
#==============================================================================
 | 
			
		||||
 | 
			
		||||
def _recolorTree(widget, oldpalette, newcolors):
 | 
			
		||||
    # Change the colors in a widget and its descendants.
 | 
			
		||||
 | 
			
		||||
    # Change the colors in <widget> and all of its descendants,
 | 
			
		||||
    # according to the <newcolors> dictionary.  It only modifies
 | 
			
		||||
    # colors that have their default values as specified by the
 | 
			
		||||
    # <oldpalette> variable.  The keys of the <newcolors> dictionary
 | 
			
		||||
    # are named after widget configuration options and the values are
 | 
			
		||||
    # the new value for that option.
 | 
			
		||||
 | 
			
		||||
    for dbOption in newcolors.keys():
 | 
			
		||||
        option = string.lower(dbOption)
 | 
			
		||||
        try:
 | 
			
		||||
            value = str(widget.cget(option))
 | 
			
		||||
        except:
 | 
			
		||||
            continue
 | 
			
		||||
        if oldpalette is None or value == oldpalette[dbOption]:
 | 
			
		||||
            apply(widget.configure, (), {option : newcolors[dbOption]})
 | 
			
		||||
 | 
			
		||||
    for child in widget.winfo_children():
 | 
			
		||||
       _recolorTree(child, oldpalette, newcolors)
 | 
			
		||||
 | 
			
		||||
def changecolor(widget, background=None, **kw):
 | 
			
		||||
     root = widget._root()
 | 
			
		||||
     if not hasattr(widget, '_Pmw_oldpalette'):
 | 
			
		||||
	 widget._Pmw_oldpalette = getdefaultpalette(root)
 | 
			
		||||
     newpalette = apply(_calcPalette, (root, background,), kw)
 | 
			
		||||
     _recolorTree(widget, widget._Pmw_oldpalette, newpalette)
 | 
			
		||||
     widget._Pmw_oldpalette = newpalette
 | 
			
		||||
 | 
			
		||||
def bordercolors(root, colorName):
 | 
			
		||||
    # This is the same method that Tk uses for shadows, in TkpGetShadows.
 | 
			
		||||
 | 
			
		||||
    lightRGB = []
 | 
			
		||||
    darkRGB = []
 | 
			
		||||
    for value in name2rgb(root, colorName, 1):
 | 
			
		||||
        value40pc = (14 * value) / 10
 | 
			
		||||
        if value40pc > _MAX_RGB:
 | 
			
		||||
            value40pc = _MAX_RGB
 | 
			
		||||
        valueHalfWhite = (_MAX_RGB + value) / 2;
 | 
			
		||||
        lightRGB.append(max(value40pc, valueHalfWhite))
 | 
			
		||||
 | 
			
		||||
        darkValue = (60 * value) / 100
 | 
			
		||||
        darkRGB.append(darkValue)
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
        '#%04x%04x%04x' % (lightRGB[0], lightRGB[1], lightRGB[2]),
 | 
			
		||||
        '#%04x%04x%04x' % (darkRGB[0], darkRGB[1], darkRGB[2])
 | 
			
		||||
    )
 | 
			
		||||
							
								
								
									
										10
									
								
								QtSupport.iss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								QtSupport.iss
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
[Setup]
 | 
			
		||||
AppName="QtSupport for MAP65"
 | 
			
		||||
AppVerName=QtSupport
 | 
			
		||||
DefaultDirName=C:\MAP65
 | 
			
		||||
 | 
			
		||||
[Files]
 | 
			
		||||
Source: "c:\Users\joe\map65\QtSupport\*.dll";           DestDir: "{app}";  Flags: onlyifdoesntexist
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										35
									
								
								a2d.f90
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								a2d.f90
									
									
									
									
									
								
							@ -1,35 +0,0 @@
 | 
			
		||||
subroutine a2d(iarg)
 | 
			
		||||
 | 
			
		||||
! Start the PortAudio streams for audio input and output.
 | 
			
		||||
  integer nchin(0:20),nchout(0:20)
 | 
			
		||||
  include 'gcom1.f90'
 | 
			
		||||
  include 'gcom2.f90'
 | 
			
		||||
 | 
			
		||||
! This call does not normally return, as the background portion of
 | 
			
		||||
! JTaudio goes into a test-and-sleep loop.
 | 
			
		||||
 | 
			
		||||
  call cs_lock('a2d')
 | 
			
		||||
  write(*,1000)
 | 
			
		||||
1000 format('Using Linrad for input, PortAudio for output.')
 | 
			
		||||
  idevout=ndevout
 | 
			
		||||
  call padevsub(numdevs,ndefin,ndefout,nchin,nchout)
 | 
			
		||||
  
 | 
			
		||||
  write(*,1002) ndefout
 | 
			
		||||
1002 format(/'Default Output:',i3)
 | 
			
		||||
  write(*,1004) idevout
 | 
			
		||||
1004 format('Requested Output:',i3)
 | 
			
		||||
  if(idevout.lt.0 .or. idevout.ge.numdevs) idevout=ndefout
 | 
			
		||||
  if(idevout.eq.0) idevout=ndefout
 | 
			
		||||
  idevin=0
 | 
			
		||||
  call cs_unlock
 | 
			
		||||
  ierr=jtaudio(idevin,idevout,y1,y2,NMAX,iwrite,iwave,nwave,    &
 | 
			
		||||
       11025,NSPB,TRPeriod,TxOK,ndebug,Transmitting,            &
 | 
			
		||||
       Tsec,ngo,nmode,tbuf,ibuf,ndsec)
 | 
			
		||||
  if(ierr.ne.0) then
 | 
			
		||||
     print*,'Error ',ierr,' in JTaudio, cannot continue.'
 | 
			
		||||
  else
 | 
			
		||||
     write(*,1006) 
 | 
			
		||||
1006 format('Audio output stream terminated normally.')
 | 
			
		||||
  endif
 | 
			
		||||
  return
 | 
			
		||||
end subroutine a2d
 | 
			
		||||
							
								
								
									
										23
									
								
								about.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								about.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
			
		||||
#include "about.h"
 | 
			
		||||
#include "ui_about.h"
 | 
			
		||||
 | 
			
		||||
CAboutDlg::CAboutDlg(QWidget *parent, QString Revision) :
 | 
			
		||||
  QDialog(parent),
 | 
			
		||||
  m_Revision(Revision),
 | 
			
		||||
  ui(new Ui::CAboutDlg)
 | 
			
		||||
{
 | 
			
		||||
  ui->setupUi(this);
 | 
			
		||||
  ui->labelTxt->clear();
 | 
			
		||||
  m_Str  = "<html><h2>" + m_Revision + "</h2>\n\n";
 | 
			
		||||
  m_Str += "MAP65 implements a wideband polarization-matching receiver <br>";
 | 
			
		||||
  m_Str += "for the JT65 protocol, with a matching transmitting facility. <br>";
 | 
			
		||||
  m_Str += "It is primarily intended for amateur radio EME communication. <br><br>";
 | 
			
		||||
  m_Str += "Copyright 2001-2012 by Joe Taylor, K1JT.   Additional <br>";
 | 
			
		||||
  m_Str += "acknowledgments are contained in the source code. <br>";
 | 
			
		||||
  ui->labelTxt->setText(m_Str);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
CAboutDlg::~CAboutDlg()
 | 
			
		||||
{
 | 
			
		||||
  delete ui;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										24
									
								
								about.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								about.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
			
		||||
#ifndef ABOUTDLG_H
 | 
			
		||||
#define ABOUTDLG_H
 | 
			
		||||
 | 
			
		||||
#include <QDialog>
 | 
			
		||||
 | 
			
		||||
namespace Ui {
 | 
			
		||||
    class CAboutDlg;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class CAboutDlg : public QDialog
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	explicit CAboutDlg(QWidget *parent=0, QString Revision="");
 | 
			
		||||
    ~CAboutDlg();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	QString m_Revision;
 | 
			
		||||
	Ui::CAboutDlg *ui;
 | 
			
		||||
	QString m_Str;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // ABOUTDLG_H
 | 
			
		||||
							
								
								
									
										41
									
								
								about.ui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								about.ui
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,41 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<ui version="4.0">
 | 
			
		||||
 <class>CAboutDlg</class>
 | 
			
		||||
 <widget class="QDialog" name="CAboutDlg">
 | 
			
		||||
  <property name="windowModality">
 | 
			
		||||
   <enum>Qt::NonModal</enum>
 | 
			
		||||
  </property>
 | 
			
		||||
  <property name="geometry">
 | 
			
		||||
   <rect>
 | 
			
		||||
    <x>0</x>
 | 
			
		||||
    <y>0</y>
 | 
			
		||||
    <width>374</width>
 | 
			
		||||
    <height>164</height>
 | 
			
		||||
   </rect>
 | 
			
		||||
  </property>
 | 
			
		||||
  <property name="sizePolicy">
 | 
			
		||||
   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
 | 
			
		||||
    <horstretch>0</horstretch>
 | 
			
		||||
    <verstretch>0</verstretch>
 | 
			
		||||
   </sizepolicy>
 | 
			
		||||
  </property>
 | 
			
		||||
  <property name="windowTitle">
 | 
			
		||||
   <string>About MAP65</string>
 | 
			
		||||
  </property>
 | 
			
		||||
  <widget class="QLabel" name="labelTxt">
 | 
			
		||||
   <property name="geometry">
 | 
			
		||||
    <rect>
 | 
			
		||||
     <x>20</x>
 | 
			
		||||
     <y>10</y>
 | 
			
		||||
     <width>331</width>
 | 
			
		||||
     <height>131</height>
 | 
			
		||||
    </rect>
 | 
			
		||||
   </property>
 | 
			
		||||
   <property name="text">
 | 
			
		||||
    <string/>
 | 
			
		||||
   </property>
 | 
			
		||||
  </widget>
 | 
			
		||||
 </widget>
 | 
			
		||||
 <resources/>
 | 
			
		||||
 <connections/>
 | 
			
		||||
</ui>
 | 
			
		||||
							
								
								
									
										220
									
								
								aclocal.m4
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										220
									
								
								aclocal.m4
									
									
									
									
										vendored
									
									
								
							@ -1,220 +0,0 @@
 | 
			
		||||
dnl {{{ ax_check_gfortran
 | 
			
		||||
AC_DEFUN([AX_CHECK_GFORTRAN],[
 | 
			
		||||
 | 
			
		||||
AC_ARG_ENABLE(g95,
 | 
			
		||||
AC_HELP_STRING([--enable-g95],[Use G95 compiler if available.]),
 | 
			
		||||
[g95=$enableval], [g95=no])
 | 
			
		||||
 | 
			
		||||
AC_ARG_ENABLE(gfortran,
 | 
			
		||||
AC_HELP_STRING([--enable-gfortran],[Use gfortran compiler if available.]),
 | 
			
		||||
[gfortran=$enableval], [gfortran=no])
 | 
			
		||||
 | 
			
		||||
dnl
 | 
			
		||||
dnl Pick up FC from the environment if present
 | 
			
		||||
dnl I'll add a test to confirm this is a gfortran later -db
 | 
			
		||||
dnl
 | 
			
		||||
 | 
			
		||||
FCV=""
 | 
			
		||||
 | 
			
		||||
if test -n $[{FC}] ; then
 | 
			
		||||
	gfortran_name_part=`echo $[{FC}] | cut -c 1-8`
 | 
			
		||||
	if test $[{gfortran_name_part}] = "gfortran" ; then
 | 
			
		||||
		gfortran_name=$[{FC}]
 | 
			
		||||
       		FC_LIB_PATH=`$[{FC}] -print-file-name=`
 | 
			
		||||
		g95=no
 | 
			
		||||
		gfortran=yes
 | 
			
		||||
		FFLAGS="$[{FFLAGS_GFORTRAN}]"
 | 
			
		||||
		FCV="gnu95"
 | 
			
		||||
	else
 | 
			
		||||
		unset $[{FC}]
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
dnl
 | 
			
		||||
dnl Note regarding the apparent silliness with FCV.
 | 
			
		||||
dnl The FCV value for g95 might be system dependent, this is
 | 
			
		||||
dnl still to be fully explored. If not, then the FCV_G95
 | 
			
		||||
dnl stuff can go away. -db
 | 
			
		||||
dnl
 | 
			
		||||
 | 
			
		||||
AC_MSG_CHECKING([uname -s])
 | 
			
		||||
case `uname -s` in
 | 
			
		||||
	CYGWIN*)
 | 
			
		||||
		AC_MSG_RESULT(Cygwin)
 | 
			
		||||
		CYGWIN=yes
 | 
			
		||||
	;;
 | 
			
		||||
	SunOS*)
 | 
			
		||||
		AC_MSG_RESULT(SunOS or Solaris)
 | 
			
		||||
		AC_DEFINE(__EXTENSIONS__, 1, [This is needed to use strtok_r on Solaris.])
 | 
			
		||||
	;;
 | 
			
		||||
dnl
 | 
			
		||||
dnl Pick up current gfortran from ports infrastructure for fbsd
 | 
			
		||||
dnl
 | 
			
		||||
        FreeBSD*)
 | 
			
		||||
		if test -z $[{gfortran_name}] ; then
 | 
			
		||||
			gfortran_name=`grep FC: /usr/ports/Mk/bsd.gcc.mk | head -1 |awk '{print $[2]}'`
 | 
			
		||||
		fi
 | 
			
		||||
		FCV_G95="g95"
 | 
			
		||||
	;;
 | 
			
		||||
	*)
 | 
			
		||||
		FCV_G95="g95"
 | 
			
		||||
		AC_MSG_RESULT(no)
 | 
			
		||||
	;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
dnl
 | 
			
		||||
dnl look for gfortran if nothing else was given
 | 
			
		||||
dnl
 | 
			
		||||
 | 
			
		||||
if test -z $[gfortran_name] ; then
 | 
			
		||||
	gfortran_name="gfortran"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AC_PATH_PROG(G95, g95)
 | 
			
		||||
AC_PATH_PROG(GFORTRAN, $[{gfortran_name}])
 | 
			
		||||
 | 
			
		||||
if test ! -z $[{GFORTRAN}] ; then
 | 
			
		||||
	echo "*** gfortran compiler found at $[{GFORTRAN}]"
 | 
			
		||||
	if test "$[{gfortran}]" = yes; then
 | 
			
		||||
       		FC_LIB_PATH=`$[{GFORTRAN}] -print-file-name=`
 | 
			
		||||
		FC=`basename $[{GFORTRAN}]`
 | 
			
		||||
		g95=no
 | 
			
		||||
		FFLAGS="$[{FFLAGS_GFORTRAN}]"
 | 
			
		||||
		FCV="gnu95"
 | 
			
		||||
	fi
 | 
			
		||||
else
 | 
			
		||||
	echo "*** No gfortran compiler found"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test ! -z $[{G95}] ; then
 | 
			
		||||
	echo "*** g95 compiler found at $[{G95}]"
 | 
			
		||||
	if test "$[{g95}]" = yes; then
 | 
			
		||||
       		FC_LIB_PATH=`$[{G95}] -print-file-name=`
 | 
			
		||||
		FC=`basename $[{G95}]`
 | 
			
		||||
		gfortran=no
 | 
			
		||||
		FFLAGS="$[{FFLAGS_G95}]"
 | 
			
		||||
		FCV=$[{FCV_G95}]
 | 
			
		||||
	fi
 | 
			
		||||
else
 | 
			
		||||
	echo "*** No g95 compiler found"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
dnl
 | 
			
		||||
dnl if FC is not set by now, pick a compiler for user
 | 
			
		||||
dnl
 | 
			
		||||
if test -z $[{FC}] ; then
 | 
			
		||||
	if test ! -z $[{GFORTRAN}] ; then
 | 
			
		||||
		if test "$[{g95}]" = yes; then
 | 
			
		||||
			echo "You enabled g95, but no g95 compiler found, defaulting to gfortran instead"
 | 
			
		||||
		fi
 | 
			
		||||
       		FC_LIB_PATH=`$[{GFORTRAN}] -print-file-name=`
 | 
			
		||||
	        FC=`basename $[{GFORTRAN}]`
 | 
			
		||||
		g95=no
 | 
			
		||||
		gfortran=yes
 | 
			
		||||
		FFLAGS="$[{FFLAGS_GFORTRAN}]"
 | 
			
		||||
		FCV="gnu95"
 | 
			
		||||
	elif test ! -z $G95 ; then
 | 
			
		||||
		if test "$[{gfortran}]" = yes; then
 | 
			
		||||
			echo "You enabled gfortran, but no gfortran compiler found, defaulting to g95 instead"
 | 
			
		||||
		fi
 | 
			
		||||
       		FC_LIB_PATH=`$[{G95}] -print-file-name=`
 | 
			
		||||
	        FC=`basename $[{G95}]`
 | 
			
		||||
		g95=yes
 | 
			
		||||
		gfortran=no
 | 
			
		||||
		FFLAGS="$[{FFLAGS_G95}]"
 | 
			
		||||
		FCV=$[{FCV_G95}]
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AC_DEFINE_UNQUOTED(FC_LIB_PATH, "${FC_LIB_PATH}", [Path to fortran libs.])
 | 
			
		||||
AC_SUBST(FC_LIB_PATH, "${FC_LIB_PATH}")
 | 
			
		||||
AC_DEFINE_UNQUOTED(FC, "${FC}", [Fortran compiler.])
 | 
			
		||||
AC_SUBST(FC, "${FC}")
 | 
			
		||||
AC_SUBST(FCV, "${FCV}")
 | 
			
		||||
 | 
			
		||||
dnl =========================================
 | 
			
		||||
dnl pick gfortran or g95
 | 
			
		||||
 | 
			
		||||
])dnl }}}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
dnl {{{ ax_check_portaudio
 | 
			
		||||
AC_DEFUN([AX_CHECK_PORTAUDIO],[
 | 
			
		||||
 | 
			
		||||
HAS_PORTAUDIO_H=0
 | 
			
		||||
HAS_PORTAUDIO_LIB=0
 | 
			
		||||
HAS_PORTAUDIO=0
 | 
			
		||||
 | 
			
		||||
AC_MSG_CHECKING([for a v19 portaudio ])
 | 
			
		||||
 | 
			
		||||
portaudio_lib_dir="/usr/lib"
 | 
			
		||||
portaudio_include_dir="/usr/include"
 | 
			
		||||
 | 
			
		||||
AC_ARG_WITH([portaudio-include-dir],
 | 
			
		||||
AC_HELP_STRING([--with-portaudio-include-dir=<path>],
 | 
			
		||||
    [path to portaudio include files]),
 | 
			
		||||
    [portaudio_include_dir=$with_portaudio_include_dir])
 | 
			
		||||
 | 
			
		||||
AC_ARG_WITH([portaudio-lib-dir],
 | 
			
		||||
AC_HELP_STRING([--with-portaudio-lib-dir=<path>],
 | 
			
		||||
    [path to portaudio lib files]),
 | 
			
		||||
    [portaudio_lib_dir=$with_portaudio_lib_dir])
 | 
			
		||||
 | 
			
		||||
if test -e $[{portaudio_include_dir}]/portaudio.h; then
 | 
			
		||||
	HAS_PORTAUDIO_H=1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test -e $[{portaudio_lib_dir}]/libportaudio.so \
 | 
			
		||||
    -o -e $[{portaudio_lib_dir}]/libportaudio.a;then
 | 
			
		||||
	HAS_PORTAUDIO_LIB=1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test $[{HAS_PORTAUDIO_H}] -eq 1 -a $[{HAS_PORTAUDIO_LIB}] -eq 1; then
 | 
			
		||||
	LDFLAGS="-L$[{portaudio_lib_dir}] $[{LDFLAGS}]"
 | 
			
		||||
	LIBS="$[{LIBS}] -lportaudio"
 | 
			
		||||
	CPPFLAGS="-I$[{portaudio_include_dir}] $[{CPPFLAGS}]"
 | 
			
		||||
	AC_CHECK_LIB(portaudio, Pa_GetVersion, \
 | 
			
		||||
		[HAS_PORTAUDIO_VERSION=1], [HAS_PORTAUDIO_VERSION=0])
 | 
			
		||||
	if test $[{HAS_PORTAUDIO_VERSION}] -eq 0; then
 | 
			
		||||
		AC_MSG_RESULT([This is likely portaudio v18; you need portaudio v19])
 | 
			
		||||
	else
 | 
			
		||||
		HAS_PORTAUDIO=1
 | 
			
		||||
	fi
 | 
			
		||||
else
 | 
			
		||||
	AC_MSG_RESULT([portaudio not found trying FreeBSD paths ])
 | 
			
		||||
	portaudio_lib_dir="/usr/local/lib/portaudio2"
 | 
			
		||||
	portaudio_include_dir="/usr/local/include/portaudio2"
 | 
			
		||||
dnl
 | 
			
		||||
dnl Try again to make sure portaudio dirs are valid
 | 
			
		||||
dnl
 | 
			
		||||
	AC_MSG_CHECKING([for a v19 portaudio in FreeBSD paths.])
 | 
			
		||||
	HAS_PORTAUDIO_H=0
 | 
			
		||||
	HAS_PORTAUDIO_LIB=0
 | 
			
		||||
 | 
			
		||||
	if test -e $[{portaudio_include_dir}]/portaudio.h; then
 | 
			
		||||
		HAS_PORTAUDIO_H=1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if test -e $[{portaudio_lib_dir}]/libportaudio.so \
 | 
			
		||||
	    -o -e $[{portaudio_lib_dir}]/libportaudio.a;then
 | 
			
		||||
		HAS_PORTAUDIO_LIB=1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if test $[{HAS_PORTAUDIO_H}] -eq 1 -a $[{HAS_PORTAUDIO_LIB}] -eq 1; then
 | 
			
		||||
		AC_MSG_RESULT([found portaudio in FreeBSD paths, double checking it is v19 ])
 | 
			
		||||
		LDFLAGS="-L$[{portaudio_lib_dir}] $[{LDFLAGS}]"
 | 
			
		||||
		LIBS="$[{LIBS}] -lportaudio"
 | 
			
		||||
		CPPFLAGS="-I$[{portaudio_include_dir}] $[{CPPFLAGS}]"
 | 
			
		||||
		AC_CHECK_LIB(portaudio, Pa_GetVersion, \
 | 
			
		||||
			[HAS_PORTAUDIO_VERSION=1], [HAS_PORTAUDIO_VERSION=0])
 | 
			
		||||
		if test $[{HAS_PORTAUDIO_VERSION}] -eq 0; then
 | 
			
		||||
			AC_MSG_RESULT([How did you end up with a portaudio v18 here?])
 | 
			
		||||
		else
 | 
			
		||||
			AC_MSG_RESULT([found v19])
 | 
			
		||||
			HAS_PORTAUDIO=1
 | 
			
		||||
			HAS_PORTAUDIO_H=1
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
])dnl }}}
 | 
			
		||||
							
								
								
									
										257
									
								
								afmhot.dat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										257
									
								
								afmhot.dat
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,257 @@
 | 
			
		||||
     0      0.0000    0.0000    0.0000
 | 
			
		||||
     1	    0.0000    0.0000    0.0000
 | 
			
		||||
     2	    0.0078    0.0000    0.0000
 | 
			
		||||
     3	    0.0157    0.0000    0.0000
 | 
			
		||||
     4	    0.0235    0.0000    0.0000
 | 
			
		||||
     5	    0.0314    0.0000    0.0000
 | 
			
		||||
     6	    0.0392    0.0000    0.0000
 | 
			
		||||
     7	    0.0471    0.0000    0.0000
 | 
			
		||||
     8	    0.0549    0.0000    0.0000
 | 
			
		||||
     9	    0.0627    0.0000    0.0000
 | 
			
		||||
    10	    0.0706    0.0000    0.0000
 | 
			
		||||
    11	    0.0784    0.0000    0.0000
 | 
			
		||||
    12	    0.0863    0.0000    0.0000
 | 
			
		||||
    13	    0.0941    0.0000    0.0000
 | 
			
		||||
    14	    0.1020    0.0000    0.0000
 | 
			
		||||
    15	    0.1098    0.0000    0.0000
 | 
			
		||||
    16	    0.1176    0.0000    0.0000
 | 
			
		||||
    17	    0.1255    0.0000    0.0000
 | 
			
		||||
    18	    0.1333    0.0000    0.0000
 | 
			
		||||
    19	    0.1412    0.0000    0.0000
 | 
			
		||||
    20	    0.1490    0.0000    0.0000
 | 
			
		||||
    21	    0.1569    0.0000    0.0000
 | 
			
		||||
    22	    0.1647    0.0000    0.0000
 | 
			
		||||
    23	    0.1725    0.0000    0.0000
 | 
			
		||||
    24	    0.1804    0.0000    0.0000
 | 
			
		||||
    25	    0.1882    0.0000    0.0000
 | 
			
		||||
    26	    0.1961    0.0000    0.0000
 | 
			
		||||
    27	    0.2039    0.0000    0.0000
 | 
			
		||||
    28	    0.2118    0.0000    0.0000
 | 
			
		||||
    29	    0.2196    0.0000    0.0000
 | 
			
		||||
    30	    0.2275    0.0000    0.0000
 | 
			
		||||
    31	    0.2353    0.0000    0.0000
 | 
			
		||||
    32	    0.2431    0.0000    0.0000
 | 
			
		||||
    33	    0.2510    0.0000    0.0000
 | 
			
		||||
    34	    0.2588    0.0000    0.0000
 | 
			
		||||
    35	    0.2667    0.0000    0.0000
 | 
			
		||||
    36	    0.2745    0.0000    0.0000
 | 
			
		||||
    37	    0.2824    0.0000    0.0000
 | 
			
		||||
    38	    0.2902    0.0000    0.0000
 | 
			
		||||
    39	    0.2980    0.0000    0.0000
 | 
			
		||||
    40	    0.3059    0.0000    0.0000
 | 
			
		||||
    41	    0.3137    0.0000    0.0000
 | 
			
		||||
    42	    0.3216    0.0000    0.0000
 | 
			
		||||
    43	    0.3294    0.0000    0.0000
 | 
			
		||||
    44	    0.3373    0.0000    0.0000
 | 
			
		||||
    45	    0.3451    0.0000    0.0000
 | 
			
		||||
    46	    0.3529    0.0000    0.0000
 | 
			
		||||
    47	    0.3608    0.0000    0.0000
 | 
			
		||||
    48	    0.3686    0.0000    0.0000
 | 
			
		||||
    49	    0.3765    0.0000    0.0000
 | 
			
		||||
    50	    0.3843    0.0000    0.0000
 | 
			
		||||
    51	    0.3922    0.0000    0.0000
 | 
			
		||||
    52	    0.4000    0.0000    0.0000
 | 
			
		||||
    53	    0.4078    0.0000    0.0000
 | 
			
		||||
    54	    0.4157    0.0000    0.0000
 | 
			
		||||
    55	    0.4235    0.0000    0.0000
 | 
			
		||||
    56	    0.4314    0.0000    0.0000
 | 
			
		||||
    57	    0.4392    0.0000    0.0000
 | 
			
		||||
    58	    0.4471    0.0000    0.0000
 | 
			
		||||
    59	    0.4549    0.0000    0.0000
 | 
			
		||||
    60	    0.4627    0.0000    0.0000
 | 
			
		||||
    61	    0.4706    0.0000    0.0000
 | 
			
		||||
    62	    0.4784    0.0000    0.0000
 | 
			
		||||
    63	    0.4863    0.0000    0.0000
 | 
			
		||||
    64	    0.4941    0.0000    0.0000
 | 
			
		||||
    65	    0.5020    0.0000    0.0000
 | 
			
		||||
    66	    0.5098    0.0098    0.0000
 | 
			
		||||
    67	    0.5176    0.0176    0.0000
 | 
			
		||||
    68	    0.5255    0.0255    0.0000
 | 
			
		||||
    69	    0.5333    0.0333    0.0000
 | 
			
		||||
    70	    0.5412    0.0412    0.0000
 | 
			
		||||
    71	    0.5490    0.0490    0.0000
 | 
			
		||||
    72	    0.5569    0.0569    0.0000
 | 
			
		||||
    73	    0.5647    0.0647    0.0000
 | 
			
		||||
    74	    0.5725    0.0725    0.0000
 | 
			
		||||
    75	    0.5804    0.0804    0.0000
 | 
			
		||||
    76	    0.5882    0.0882    0.0000
 | 
			
		||||
    77	    0.5961    0.0961    0.0000
 | 
			
		||||
    78	    0.6039    0.1039    0.0000
 | 
			
		||||
    79	    0.6118    0.1118    0.0000
 | 
			
		||||
    80	    0.6196    0.1196    0.0000
 | 
			
		||||
    81	    0.6275    0.1275    0.0000
 | 
			
		||||
    82	    0.6353    0.1353    0.0000
 | 
			
		||||
    83	    0.6431    0.1431    0.0000
 | 
			
		||||
    84	    0.6510    0.1510    0.0000
 | 
			
		||||
    85	    0.6588    0.1588    0.0000
 | 
			
		||||
    86	    0.6667    0.1667    0.0000
 | 
			
		||||
    87	    0.6745    0.1745    0.0000
 | 
			
		||||
    88	    0.6824    0.1824    0.0000
 | 
			
		||||
    89	    0.6902    0.1902    0.0000
 | 
			
		||||
    90	    0.6980    0.1980    0.0000
 | 
			
		||||
    91	    0.7059    0.2059    0.0000
 | 
			
		||||
    92	    0.7137    0.2137    0.0000
 | 
			
		||||
    93	    0.7216    0.2216    0.0000
 | 
			
		||||
    94	    0.7294    0.2294    0.0000
 | 
			
		||||
    95	    0.7373    0.2373    0.0000
 | 
			
		||||
    96	    0.7451    0.2451    0.0000
 | 
			
		||||
    97	    0.7529    0.2529    0.0000
 | 
			
		||||
    98	    0.7608    0.2608    0.0000
 | 
			
		||||
    99	    0.7686    0.2686    0.0000
 | 
			
		||||
   100	    0.7765    0.2765    0.0000
 | 
			
		||||
   101	    0.7843    0.2843    0.0000
 | 
			
		||||
   102	    0.7922    0.2922    0.0000
 | 
			
		||||
   103	    0.8000    0.3000    0.0000
 | 
			
		||||
   104	    0.8078    0.3078    0.0000
 | 
			
		||||
   105	    0.8157    0.3157    0.0000
 | 
			
		||||
   106	    0.8235    0.3235    0.0000
 | 
			
		||||
   107	    0.8314    0.3314    0.0000
 | 
			
		||||
   108	    0.8392    0.3392    0.0000
 | 
			
		||||
   109	    0.8471    0.3471    0.0000
 | 
			
		||||
   110	    0.8549    0.3549    0.0000
 | 
			
		||||
   111	    0.8627    0.3627    0.0000
 | 
			
		||||
   112	    0.8706    0.3706    0.0000
 | 
			
		||||
   113	    0.8784    0.3784    0.0000
 | 
			
		||||
   114	    0.8863    0.3863    0.0000
 | 
			
		||||
   115	    0.8941    0.3941    0.0000
 | 
			
		||||
   116	    0.9020    0.4020    0.0000
 | 
			
		||||
   117	    0.9098    0.4098    0.0000
 | 
			
		||||
   118	    0.9176    0.4176    0.0000
 | 
			
		||||
   119	    0.9255    0.4255    0.0000
 | 
			
		||||
   120	    0.9333    0.4333    0.0000
 | 
			
		||||
   121	    0.9412    0.4412    0.0000
 | 
			
		||||
   122	    0.9490    0.4490    0.0000
 | 
			
		||||
   123	    0.9569    0.4569    0.0000
 | 
			
		||||
   124	    0.9647    0.4647    0.0000
 | 
			
		||||
   125	    0.9725    0.4725    0.0000
 | 
			
		||||
   126	    0.9804    0.4804    0.0000
 | 
			
		||||
   127	    0.9882    0.4882    0.0000
 | 
			
		||||
   128	    0.9961    0.4961    0.0000
 | 
			
		||||
   129	    1.0000    0.5039    0.0000
 | 
			
		||||
   130	    1.0000    0.5118    0.0118
 | 
			
		||||
   131	    1.0000    0.5196    0.0196
 | 
			
		||||
   132	    1.0000    0.5275    0.0275
 | 
			
		||||
   133	    1.0000    0.5353    0.0353
 | 
			
		||||
   134	    1.0000    0.5431    0.0431
 | 
			
		||||
   135	    1.0000    0.5510    0.0510
 | 
			
		||||
   136	    1.0000    0.5588    0.0588
 | 
			
		||||
   137	    1.0000    0.5667    0.0667
 | 
			
		||||
   138	    1.0000    0.5745    0.0745
 | 
			
		||||
   139	    1.0000    0.5824    0.0824
 | 
			
		||||
   140	    1.0000    0.5902    0.0902
 | 
			
		||||
   141	    1.0000    0.5980    0.0980
 | 
			
		||||
   142	    1.0000    0.6059    0.1059
 | 
			
		||||
   143	    1.0000    0.6137    0.1137
 | 
			
		||||
   144	    1.0000    0.6216    0.1216
 | 
			
		||||
   145	    1.0000    0.6294    0.1294
 | 
			
		||||
   146	    1.0000    0.6373    0.1373
 | 
			
		||||
   147	    1.0000    0.6451    0.1451
 | 
			
		||||
   148	    1.0000    0.6529    0.1529
 | 
			
		||||
   149	    1.0000    0.6608    0.1608
 | 
			
		||||
   150	    1.0000    0.6686    0.1686
 | 
			
		||||
   151	    1.0000    0.6765    0.1765
 | 
			
		||||
   152	    1.0000    0.6843    0.1843
 | 
			
		||||
   153	    1.0000    0.6922    0.1922
 | 
			
		||||
   154	    1.0000    0.7000    0.2000
 | 
			
		||||
   155	    1.0000    0.7078    0.2078
 | 
			
		||||
   156	    1.0000    0.7157    0.2157
 | 
			
		||||
   157	    1.0000    0.7235    0.2235
 | 
			
		||||
   158	    1.0000    0.7314    0.2314
 | 
			
		||||
   159	    1.0000    0.7392    0.2392
 | 
			
		||||
   160	    1.0000    0.7471    0.2471
 | 
			
		||||
   161	    1.0000    0.7549    0.2549
 | 
			
		||||
   162	    1.0000    0.7627    0.2627
 | 
			
		||||
   163	    1.0000    0.7706    0.2706
 | 
			
		||||
   164	    1.0000    0.7784    0.2784
 | 
			
		||||
   165	    1.0000    0.7863    0.2863
 | 
			
		||||
   166	    1.0000    0.7941    0.2941
 | 
			
		||||
   167	    1.0000    0.8020    0.3020
 | 
			
		||||
   168	    1.0000    0.8098    0.3098
 | 
			
		||||
   169	    1.0000    0.8176    0.3176
 | 
			
		||||
   170	    1.0000    0.8255    0.3255
 | 
			
		||||
   171	    1.0000    0.8333    0.3333
 | 
			
		||||
   172	    1.0000    0.8412    0.3412
 | 
			
		||||
   173	    1.0000    0.8490    0.3490
 | 
			
		||||
   174	    1.0000    0.8569    0.3569
 | 
			
		||||
   175	    1.0000    0.8647    0.3647
 | 
			
		||||
   176	    1.0000    0.8725    0.3725
 | 
			
		||||
   177	    1.0000    0.8804    0.3804
 | 
			
		||||
   178	    1.0000    0.8882    0.3882
 | 
			
		||||
   179	    1.0000    0.8961    0.3961
 | 
			
		||||
   180	    1.0000    0.9039    0.4039
 | 
			
		||||
   181	    1.0000    0.9118    0.4118
 | 
			
		||||
   182	    1.0000    0.9196    0.4196
 | 
			
		||||
   183	    1.0000    0.9275    0.4275
 | 
			
		||||
   184	    1.0000    0.9353    0.4353
 | 
			
		||||
   185	    1.0000    0.9431    0.4431
 | 
			
		||||
   186	    1.0000    0.9510    0.4510
 | 
			
		||||
   187	    1.0000    0.9588    0.4588
 | 
			
		||||
   188	    1.0000    0.9667    0.4667
 | 
			
		||||
   189	    1.0000    0.9745    0.4745
 | 
			
		||||
   190	    1.0000    0.9824    0.4824
 | 
			
		||||
   191	    1.0000    0.9902    0.4902
 | 
			
		||||
   192	    1.0000    0.9980    0.4980
 | 
			
		||||
   193	    1.0000    1.0000    0.5059
 | 
			
		||||
   194	    1.0000    1.0000    0.5137
 | 
			
		||||
   195	    1.0000    1.0000    0.5216
 | 
			
		||||
   196	    1.0000    1.0000    0.5294
 | 
			
		||||
   197	    1.0000    1.0000    0.5373
 | 
			
		||||
   198	    1.0000    1.0000    0.5451
 | 
			
		||||
   199	    1.0000    1.0000    0.5529
 | 
			
		||||
   200	    1.0000    1.0000    0.5608
 | 
			
		||||
   201	    1.0000    1.0000    0.5686
 | 
			
		||||
   202	    1.0000    1.0000    0.5765
 | 
			
		||||
   203	    1.0000    1.0000    0.5843
 | 
			
		||||
   204	    1.0000    1.0000    0.5922
 | 
			
		||||
   205	    1.0000    1.0000    0.6000
 | 
			
		||||
   206	    1.0000    1.0000    0.6078
 | 
			
		||||
   207	    1.0000    1.0000    0.6157
 | 
			
		||||
   208	    1.0000    1.0000    0.6235
 | 
			
		||||
   209	    1.0000    1.0000    0.6314
 | 
			
		||||
   210	    1.0000    1.0000    0.6392
 | 
			
		||||
   211	    1.0000    1.0000    0.6471
 | 
			
		||||
   212	    1.0000    1.0000    0.6549
 | 
			
		||||
   213	    1.0000    1.0000    0.6627
 | 
			
		||||
   214	    1.0000    1.0000    0.6706
 | 
			
		||||
   215	    1.0000    1.0000    0.6784
 | 
			
		||||
   216	    1.0000    1.0000    0.6863
 | 
			
		||||
   217	    1.0000    1.0000    0.6941
 | 
			
		||||
   218	    1.0000    1.0000    0.7020
 | 
			
		||||
   219	    1.0000    1.0000    0.7098
 | 
			
		||||
   220	    1.0000    1.0000    0.7176
 | 
			
		||||
   221	    1.0000    1.0000    0.7255
 | 
			
		||||
   222	    1.0000    1.0000    0.7333
 | 
			
		||||
   223	    1.0000    1.0000    0.7412
 | 
			
		||||
   224	    1.0000    1.0000    0.7490
 | 
			
		||||
   225	    1.0000    1.0000    0.7569
 | 
			
		||||
   226	    1.0000    1.0000    0.7647
 | 
			
		||||
   227	    1.0000    1.0000    0.7725
 | 
			
		||||
   228	    1.0000    1.0000    0.7804
 | 
			
		||||
   229	    1.0000    1.0000    0.7882
 | 
			
		||||
   230	    1.0000    1.0000    0.7961
 | 
			
		||||
   231	    1.0000    1.0000    0.8039
 | 
			
		||||
   232	    1.0000    1.0000    0.8118
 | 
			
		||||
   233	    1.0000    1.0000    0.8196
 | 
			
		||||
   234	    1.0000    1.0000    0.8275
 | 
			
		||||
   235	    1.0000    1.0000    0.8353
 | 
			
		||||
   236	    1.0000    1.0000    0.8431
 | 
			
		||||
   237	    1.0000    1.0000    0.8510
 | 
			
		||||
   238	    1.0000    1.0000    0.8588
 | 
			
		||||
   239	    1.0000    1.0000    0.8667
 | 
			
		||||
   240	    1.0000    1.0000    0.8745
 | 
			
		||||
   241	    1.0000    1.0000    0.8824
 | 
			
		||||
   242	    1.0000    1.0000    0.8902
 | 
			
		||||
   243	    1.0000    1.0000    0.8980
 | 
			
		||||
   244	    1.0000    1.0000    0.9059
 | 
			
		||||
   245	    1.0000    1.0000    0.9137
 | 
			
		||||
   246	    1.0000    1.0000    0.9216
 | 
			
		||||
   247	    1.0000    1.0000    0.9294
 | 
			
		||||
   248	    1.0000    1.0000    0.9373
 | 
			
		||||
   249	    1.0000    1.0000    0.9451
 | 
			
		||||
   250	    1.0000    1.0000    0.9529
 | 
			
		||||
   251	    1.0000    1.0000    0.9608
 | 
			
		||||
   252	    1.0000    1.0000    0.9686
 | 
			
		||||
   253	    1.0000    1.0000    0.9765
 | 
			
		||||
   254	    1.0       0.0       0.0
 | 
			
		||||
   255	    1.0       1.0       0.0
 | 
			
		||||
   256	    0.0       1.000     0.0
 | 
			
		||||
							
								
								
									
										102
									
								
								astro.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								astro.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,102 @@
 | 
			
		||||
#include "astro.h"
 | 
			
		||||
#include "ui_astro.h"
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
#include <QFile>
 | 
			
		||||
#include <QMessageBox>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "commons.h"
 | 
			
		||||
 | 
			
		||||
Astro::Astro(QWidget *parent) :
 | 
			
		||||
  QWidget(parent),
 | 
			
		||||
  ui(new Ui::Astro)
 | 
			
		||||
{
 | 
			
		||||
  ui->setupUi(this);
 | 
			
		||||
  ui->astroTextBrowser->setStyleSheet(
 | 
			
		||||
        "QTextBrowser { background-color : cyan; color : black; }");
 | 
			
		||||
  ui->astroTextBrowser->clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Astro::~Astro()
 | 
			
		||||
{
 | 
			
		||||
    delete ui;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Astro::astroUpdate(QDateTime t, QString mygrid, QString hisgrid,
 | 
			
		||||
                        int fQSO, int nsetftx, int ntxFreq, QString azelDir)
 | 
			
		||||
{
 | 
			
		||||
  static int ntxFreq0=-99;
 | 
			
		||||
  static bool astroBusy=false;
 | 
			
		||||
  char cc[300];
 | 
			
		||||
  double azsun,elsun,azmoon,elmoon,azmoondx,elmoondx;
 | 
			
		||||
  double ramoon,decmoon,dgrd,poloffset,xnr;
 | 
			
		||||
  int ntsky,ndop,ndop00;
 | 
			
		||||
  QString date = t.date().toString("yyyy MMM dd");
 | 
			
		||||
  QString utc = t.time().toString();
 | 
			
		||||
  int nyear=t.date().year();
 | 
			
		||||
  int month=t.date().month();
 | 
			
		||||
  int nday=t.date().day();
 | 
			
		||||
  int nhr=t.time().hour();
 | 
			
		||||
  int nmin=t.time().minute();
 | 
			
		||||
  double sec=t.time().second() + 0.001*t.time().msec();
 | 
			
		||||
  int isec=sec;
 | 
			
		||||
  double uth=nhr + nmin/60.0 + sec/3600.0;
 | 
			
		||||
  int nfreq=(int)datcom_.fcenter;
 | 
			
		||||
  if(nfreq<10 or nfreq > 50000) nfreq=144;
 | 
			
		||||
 | 
			
		||||
  if(!astroBusy) {
 | 
			
		||||
    astroBusy=true;
 | 
			
		||||
    astrosub_(&nyear, &month, &nday, &uth, &nfreq, mygrid.toAscii(),
 | 
			
		||||
            hisgrid.toAscii(), &azsun, &elsun, &azmoon, &elmoon,
 | 
			
		||||
            &azmoondx, &elmoondx, &ntsky, &ndop, &ndop00,&ramoon, &decmoon,
 | 
			
		||||
            &dgrd, &poloffset, &xnr, 6, 6);
 | 
			
		||||
    astroBusy=false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  sprintf(cc,"Az:    %6.1f\n"
 | 
			
		||||
          "El:    %6.1f\n"
 | 
			
		||||
          "Dec:   %6.1f\n"
 | 
			
		||||
          "DxAz:  %6.1f\n"
 | 
			
		||||
          "DxEl:  %6.1f\n"
 | 
			
		||||
          "SunAz: %6.1f\n"
 | 
			
		||||
          "SunEl: %6.1f\n"
 | 
			
		||||
          "Dop:   %6d\n"
 | 
			
		||||
          "DXDop: %6d\n"
 | 
			
		||||
          "Tsky:  %6d\n"
 | 
			
		||||
          "MNR:   %6.1f\n"
 | 
			
		||||
          "Dgrd:  %6.1f",
 | 
			
		||||
          azmoon,elmoon,decmoon,azmoondx,elmoondx,azsun,elsun,
 | 
			
		||||
          ndop,ndop00,ntsky,xnr,dgrd);
 | 
			
		||||
  ui->astroTextBrowser->setText(" "+ date + "\nUTC: " + utc + "\n" + cc);
 | 
			
		||||
 | 
			
		||||
  QString fname=azelDir+"/azel.dat";
 | 
			
		||||
  QFile f(fname);
 | 
			
		||||
  if(!f.open(QIODevice::WriteOnly | QIODevice::Text)) {
 | 
			
		||||
    QMessageBox mb;
 | 
			
		||||
    mb.setText("Cannot open " + fname);
 | 
			
		||||
    mb.exec();
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  int ndiff=0;
 | 
			
		||||
  if(ntxFreq != ntxFreq0) ndiff=1;
 | 
			
		||||
  ntxFreq0=ntxFreq;
 | 
			
		||||
  QTextStream out(&f);
 | 
			
		||||
  sprintf(cc,"%2.2d:%2.2d:%2.2d,%5.1f,%5.1f,Moon\n"
 | 
			
		||||
          "%2.2d:%2.2d:%2.2d,%5.1f,%5.1f,Sun\n"
 | 
			
		||||
          "%2.2d:%2.2d:%2.2d,%5.1f,%5.1f,Source\n"
 | 
			
		||||
          "%4d,%6d,Doppler\n"
 | 
			
		||||
          "%3d,%1d,fQSO\n"
 | 
			
		||||
          "%3d,%1d,fQSO2\n",
 | 
			
		||||
          nhr,nmin,isec,azmoon,elmoon,
 | 
			
		||||
          nhr,nmin,isec,azsun,elsun,
 | 
			
		||||
          nhr,nmin,isec,0.0,0.0,
 | 
			
		||||
          nfreq,ndop,
 | 
			
		||||
          fQSO,nsetftx,
 | 
			
		||||
          ntxFreq,ndiff);
 | 
			
		||||
  out << cc;
 | 
			
		||||
  f.close();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Astro::setFontSize(int n)
 | 
			
		||||
{
 | 
			
		||||
  ui->astroTextBrowser->setFontPointSize(n);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										115
									
								
								astro.f
									
									
									
									
									
								
							
							
						
						
									
										115
									
								
								astro.f
									
									
									
									
									
								
							@ -1,115 +0,0 @@
 | 
			
		||||
      subroutine astro(AppDir,nyear,month,nday,uth,nfreq,Mygrid,
 | 
			
		||||
     +     NStation,mode,MoonDX,AzSun,ElSun,AzMoon,ElMoon0,
 | 
			
		||||
     +     ntsky,doppler00,doppler,dbMoon,RAMoon,DecMoon,HA,Dgrd,sd,
 | 
			
		||||
     +     poloffset,xnr,auxra,auxdec,azaux,elaux)
 | 
			
		||||
 | 
			
		||||
C  Computes astronomical quantities for display in JT65, CW, and EME Echo mode.
 | 
			
		||||
C  NB: may want to smooth the Tsky map to 10 degrees or so.
 | 
			
		||||
 | 
			
		||||
      character*80 AppDir,fname
 | 
			
		||||
      character*6 MyGrid,HisGrid
 | 
			
		||||
      logical first,ltsky
 | 
			
		||||
      real LST
 | 
			
		||||
      real lat,lon
 | 
			
		||||
      real ldeg
 | 
			
		||||
      integer*1 n1sky(129600)
 | 
			
		||||
      integer*2 nsky
 | 
			
		||||
      common/sky/ nsky(360,180)
 | 
			
		||||
      common/echo/xdop(2),techo,ElMoon,mjd
 | 
			
		||||
      equivalence (n1sky,nsky)
 | 
			
		||||
      data first/.true./
 | 
			
		||||
      data rad/57.2957795/
 | 
			
		||||
      save
 | 
			
		||||
 | 
			
		||||
      if(first) then
 | 
			
		||||
	do i=80,1,-1
 | 
			
		||||
	   if(ichar(AppDir(i:i)).ne.0 .and. 
 | 
			
		||||
     +            ichar(AppDir(i:i)).ne.32) go to 1
 | 
			
		||||
	enddo
 | 
			
		||||
 1	lenappdir=i
 | 
			
		||||
        call zero(nsky,180*180)
 | 
			
		||||
	fname=Appdir(1:lenappdir)//'/TSKY.DAT'
 | 
			
		||||
        call cs_lock('astro')
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
        open(13,file=fname,status='old',form='binary',err=10)
 | 
			
		||||
        read(13) nsky
 | 
			
		||||
        close(13)
 | 
			
		||||
#else
 | 
			
		||||
        open(13,file=fname,status='old',access='stream',err=10)
 | 
			
		||||
        read(13) nsky
 | 
			
		||||
        close(13)
 | 
			
		||||
#endif
 | 
			
		||||
        ltsky=.true.
 | 
			
		||||
        first=.false.
 | 
			
		||||
        call cs_unlock
 | 
			
		||||
      endif
 | 
			
		||||
      go to 20
 | 
			
		||||
 10   ltsky=.false.
 | 
			
		||||
      call cs_unlock
 | 
			
		||||
 | 
			
		||||
 20   call grid2deg(MyGrid,elon,lat)
 | 
			
		||||
      lon=-elon
 | 
			
		||||
      call sun(nyear,month,nday,uth,lon,lat,RASun,DecSun,LST,
 | 
			
		||||
     +    AzSun,ElSun,mjd)
 | 
			
		||||
 | 
			
		||||
      freq=nfreq*1.e6
 | 
			
		||||
 | 
			
		||||
      call MoonDop(nyear,month,nday,uth,lon,lat,RAMoon,DecMoon,
 | 
			
		||||
     +  LST,HA,AzMoon,ElMoon,ldeg,bdeg,vr,dist)
 | 
			
		||||
 | 
			
		||||
C  Compute spatial polarization offset
 | 
			
		||||
      xx=sin(lat/rad)*cos(ElMoon/rad) - cos(lat/rad)*
 | 
			
		||||
     +     cos(AzMoon/rad)*sin(ElMoon/rad)
 | 
			
		||||
      yy=cos(lat/rad)*sin(AzMoon/rad)
 | 
			
		||||
      if(NStation.eq.1) poloffset1=rad*atan2(yy,xx)
 | 
			
		||||
      if(NStation.eq.2) poloffset2=rad*atan2(yy,xx)
 | 
			
		||||
 | 
			
		||||
      techo=2.0 * dist/2.99792458e5                 !Echo delay time
 | 
			
		||||
      doppler=-freq*vr/2.99792458e5                 !One-way Doppler
 | 
			
		||||
      t408=ftsky(ldeg,bdeg)                         !Read sky map
 | 
			
		||||
      tsky=t408*(408.0/nfreq)**2.6                  !Tsky for obs freq
 | 
			
		||||
      if(ltsky.and.(tsky.lt.3.0)) tsky=3.0          !Minimum = 3 Kelvin
 | 
			
		||||
 | 
			
		||||
      xdop(NStation)=doppler
 | 
			
		||||
      if(NStation.eq.2) then
 | 
			
		||||
         HisGrid=MyGrid
 | 
			
		||||
         go to 900
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
      doppler00=2.0*xdop(1)
 | 
			
		||||
      if(mode.eq.2 .or. mode.eq.5) doppler=xdop(1)+xdop(2)
 | 
			
		||||
      if(mode.eq.3) doppler=2.0*xdop(1)
 | 
			
		||||
      dBMoon=-40.0*log10(dist/356903.)
 | 
			
		||||
      sd=16.23*370152.0/dist
 | 
			
		||||
 | 
			
		||||
!      if(NStation.eq.1 .and. MoonDX.ne.0 .and. 
 | 
			
		||||
!     +    (mode.eq.2 .or. mode.eq.5)) then
 | 
			
		||||
      if(NStation.eq.1 .and. MoonDX.ne.0) then
 | 
			
		||||
         poloffset=mod(poloffset2-poloffset1+720.0,180.0)
 | 
			
		||||
         if(poloffset.gt.90.0) poloffset=poloffset-180.0
 | 
			
		||||
         x1=abs(cos(2*poloffset/rad))
 | 
			
		||||
         if(x1.lt.0.056234) x1=0.056234
 | 
			
		||||
         xnr=-20.0*log10(x1)
 | 
			
		||||
         if(HisGrid(1:1).lt.'A' .or. HisGrid(1:1).gt.'Z') xnr=0
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
      tr=80.0                              !Good preamp
 | 
			
		||||
      tskymin=13.0*(408.0/nfreq)**2.6      !Cold sky temperature
 | 
			
		||||
      tsysmin=tskymin+tr
 | 
			
		||||
      tsys=tsky+tr
 | 
			
		||||
      dgrd=-10.0*log10(tsys/tsysmin) + dbMoon
 | 
			
		||||
 | 
			
		||||
 900  ElMoon0=Elmoon
 | 
			
		||||
      ntsky=nint(tsky)
 | 
			
		||||
 | 
			
		||||
      auxHA = 15.0*(LST-auxra)                       !HA in degrees
 | 
			
		||||
      pi=3.14159265
 | 
			
		||||
      pio2=0.5*pi
 | 
			
		||||
      call coord(pi,pio2-lat/rad,0.0,lat/rad,auxha*pi/180.0,
 | 
			
		||||
     +  auxdec/rad,azaux,elaux)
 | 
			
		||||
      AzAux=azaux*rad
 | 
			
		||||
      ElAux=ElAux*rad
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										35
									
								
								astro.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								astro.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,35 @@
 | 
			
		||||
#ifndef ASTRO_H
 | 
			
		||||
#define ASTRO_H
 | 
			
		||||
 | 
			
		||||
#include <QWidget>
 | 
			
		||||
#include <QDateTime>
 | 
			
		||||
 | 
			
		||||
namespace Ui {
 | 
			
		||||
  class Astro;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class Astro : public QWidget
 | 
			
		||||
{
 | 
			
		||||
  Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  explicit Astro(QWidget *parent = 0);
 | 
			
		||||
  void astroUpdate(QDateTime t, QString mygrid, QString hisgrid,
 | 
			
		||||
                   int fQSO, int nsetftx, int ntxFreq, QString azelDir);
 | 
			
		||||
  void setFontSize(int n);
 | 
			
		||||
  ~Astro();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    Ui::Astro *ui;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern "C" {
 | 
			
		||||
  void astrosub_(int* nyear, int* month, int* nday, double* uth, int* nfreq,
 | 
			
		||||
     const char* mygrid, const char* hisgrid, double* azsun,
 | 
			
		||||
     double* elsun, double* azmoon, double* elmoon, double* azmoondx,
 | 
			
		||||
     double* elmoondx, int* ntsky, int* ndop, int* ndop00,
 | 
			
		||||
     double* ramoon, double* decmoon, double* dgrd, double* poloffset,
 | 
			
		||||
     double* xnr, int len1, int len2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // ASTRO_H
 | 
			
		||||
							
								
								
									
										52
									
								
								astro.py
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								astro.py
									
									
									
									
									
								
							@ -1,52 +0,0 @@
 | 
			
		||||
#------------------------------------------------------ astro
 | 
			
		||||
from Tkinter import *
 | 
			
		||||
import Pmw
 | 
			
		||||
import g
 | 
			
		||||
 | 
			
		||||
def done():
 | 
			
		||||
    g.astro_geom0=root.geometry()
 | 
			
		||||
    root.withdraw()
 | 
			
		||||
 | 
			
		||||
root=Toplevel()
 | 
			
		||||
root.withdraw()
 | 
			
		||||
root.protocol('WM_DELETE_WINDOW',done)
 | 
			
		||||
if g.Win32: root.iconbitmap("wsjt.ico")
 | 
			
		||||
root.title("AstroData")
 | 
			
		||||
frame=Frame(root)
 | 
			
		||||
frame.pack()
 | 
			
		||||
 | 
			
		||||
def astro2(t):
 | 
			
		||||
    root.geometry(t)
 | 
			
		||||
    root.deiconify()
 | 
			
		||||
    root.focus_set()
 | 
			
		||||
 | 
			
		||||
def update():
 | 
			
		||||
    t1= "           Az      El\n" 
 | 
			
		||||
    t2= "Moon:    %6.2f  %6.2f\n" % (g.AzMoon,g.ElMoon)
 | 
			
		||||
    t3= "Moon/DX: %6.2f  %6.2f\n" % (g.AzMoonB,g.ElMoonB)
 | 
			
		||||
    t4= "Sun:     %6.2f  %6.2f\n" % (g.AzSun,g.ElSun)
 | 
			
		||||
    t4a="Source:  %6.2f  %6.2f\n\n" % (g.AzAux,g.ElAux)
 | 
			
		||||
    t5= "        Doppler   df/dt\n"
 | 
			
		||||
    t6= "DX:     %7d %7.2f\n" % (g.ndop,g.dfdt)
 | 
			
		||||
    t7= "Self:   %7d %7.2f\n\n" % (g.ndop00,g.dfdt0)
 | 
			
		||||
    t7a="            RA      DEC\n"
 | 
			
		||||
    irah=int(g.RAMoon)
 | 
			
		||||
    iram=int(60.0*(g.RAMoon-irah))
 | 
			
		||||
    t7b="Moon:     %2.2d:%2.2d  %6.2f\n" % (irah,iram,g.DecMoon)
 | 
			
		||||
    irah=int(g.RaAux)
 | 
			
		||||
    iram=int(60.0*(g.RaAux-irah))
 | 
			
		||||
    t7c="Source:   %2.2d:%2.2d  %6.2f\n\n" % (irah,iram,g.DecAux)
 | 
			
		||||
    t8= "Freq: %4d  Tsky:%6d\n" % (g.nfreq,g.ntsky)
 | 
			
		||||
    t9= "MNR: %5.1f  Dgrd:%6.1f\n" % (g.MaxNR,g.Dgrd)
 | 
			
		||||
    t10="DPol: %4d  SD:%8.2f\n" % (g.poloffset,g.sd)
 | 
			
		||||
    t=t1+t2+t3+t4+t4a+t5+t6+t7+t7a+t7b+t7c+t8+t9+t10
 | 
			
		||||
    lab1.configure(text=t)
 | 
			
		||||
    g.astro_geom=root.geometry()
 | 
			
		||||
    frame.after(1000,update)
 | 
			
		||||
 | 
			
		||||
g2font=g.g2font
 | 
			
		||||
lab1=Label(frame,font=g2font,justify=LEFT,bg="#66FFFF",
 | 
			
		||||
           relief=RIDGE,bd=4,anchor=N)
 | 
			
		||||
lab1.pack(ipadx=4)
 | 
			
		||||
 | 
			
		||||
frame.after(1000,update)
 | 
			
		||||
							
								
								
									
										37
									
								
								astro.ui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								astro.ui
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,37 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<ui version="4.0">
 | 
			
		||||
 <class>Astro</class>
 | 
			
		||||
 <widget class="QWidget" name="Astro">
 | 
			
		||||
  <property name="geometry">
 | 
			
		||||
   <rect>
 | 
			
		||||
    <x>0</x>
 | 
			
		||||
    <y>0</y>
 | 
			
		||||
    <width>262</width>
 | 
			
		||||
    <height>427</height>
 | 
			
		||||
   </rect>
 | 
			
		||||
  </property>
 | 
			
		||||
  <property name="windowTitle">
 | 
			
		||||
   <string>Form</string>
 | 
			
		||||
  </property>
 | 
			
		||||
  <widget class="QTextBrowser" name="astroTextBrowser">
 | 
			
		||||
   <property name="geometry">
 | 
			
		||||
    <rect>
 | 
			
		||||
     <x>0</x>
 | 
			
		||||
     <y>10</y>
 | 
			
		||||
     <width>256</width>
 | 
			
		||||
     <height>411</height>
 | 
			
		||||
    </rect>
 | 
			
		||||
   </property>
 | 
			
		||||
   <property name="font">
 | 
			
		||||
    <font>
 | 
			
		||||
     <family>Courier New</family>
 | 
			
		||||
     <pointsize>20</pointsize>
 | 
			
		||||
     <weight>75</weight>
 | 
			
		||||
     <bold>true</bold>
 | 
			
		||||
    </font>
 | 
			
		||||
   </property>
 | 
			
		||||
  </widget>
 | 
			
		||||
 </widget>
 | 
			
		||||
 <resources/>
 | 
			
		||||
 <connections/>
 | 
			
		||||
</ui>
 | 
			
		||||
							
								
								
									
										123
									
								
								astro0.f90
									
									
									
									
									
								
							
							
						
						
									
										123
									
								
								astro0.f90
									
									
									
									
									
								
							@ -1,123 +0,0 @@
 | 
			
		||||
subroutine astro0(nyear,month,nday,uth8,nfreq,grid,cauxra,cauxdec,       &
 | 
			
		||||
     AzSun8,ElSun8,AzMoon8,ElMoon8,AzMoonB8,ElMoonB8,ntsky,ndop,ndop00,  &
 | 
			
		||||
     dbMoon8,RAMoon8,DecMoon8,HA8,Dgrd8,sd8,poloffset8,xnr8,dfdt,dfdt0,  &
 | 
			
		||||
     RaAux8,DecAux8,AzAux8,ElAux8)
 | 
			
		||||
 | 
			
		||||
!f2py intent(in) nyear,month,nday,uth8,nfreq,grid,cauxra,cauxdec
 | 
			
		||||
!f2py intent(out) AzSun8,ElSun8,AzMoon8,ElMoon8,AzMoonB8,ElMoonB8,ntsky,ndop,ndop00,dbMoon8,RAMoon8,DecMoon8,HA8,Dgrd8,sd8,poloffset8,xnr8,dfdt,dfdt0,RaAux8,DecAux8,AzAux8,ElAux8
 | 
			
		||||
 | 
			
		||||
  character grid*6
 | 
			
		||||
  character*9 cauxra,cauxdec
 | 
			
		||||
  real*8 AzSun8,ElSun8,AzMoon8,ElMoon8,AzMoonB8,ElMoonB8,AzAux8,ElAux8
 | 
			
		||||
  real*8 dbMoon8,RAMoon8,DecMoon8,HA8,Dgrd8,xnr8,dfdt,dfdt0
 | 
			
		||||
  real*8 sd8,poloffset8
 | 
			
		||||
  include 'gcom2.f90'
 | 
			
		||||
  data uth8z/0.d0/,imin0/-99/
 | 
			
		||||
  save
 | 
			
		||||
 | 
			
		||||
  call cs_lock('astro0a')
 | 
			
		||||
  auxra=0.
 | 
			
		||||
  i=index(cauxra,':')
 | 
			
		||||
  if(i.eq.0) then
 | 
			
		||||
     read(cauxra,*,err=1,end=1) auxra
 | 
			
		||||
  else
 | 
			
		||||
     read(cauxra(1:i-1),*,err=1,end=1) ih
 | 
			
		||||
     read(cauxra(i+1:i+2),*,err=1,end=1) im
 | 
			
		||||
     read(cauxra(i+4:i+5),*,err=1,end=1) is
 | 
			
		||||
     auxra=ih + im/60.0 + is/3600.0
 | 
			
		||||
  endif
 | 
			
		||||
1 auxdec=0.
 | 
			
		||||
  i=index(cauxdec,':')
 | 
			
		||||
  if(i.eq.0) then
 | 
			
		||||
     read(cauxdec,*,err=2,end=2) auxdec
 | 
			
		||||
  else
 | 
			
		||||
     read(cauxdec(1:i-1),*,err=2,end=2) id
 | 
			
		||||
     read(cauxdec(i+1:i+2),*,err=2,end=2) im
 | 
			
		||||
     read(cauxdec(i+4:i+5),*,err=2,end=2) is
 | 
			
		||||
     auxdec=abs(id) + im/60.0 + is/3600.0
 | 
			
		||||
     if(cauxdec(1:1).eq.'-') auxdec=-auxdec
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
2 nmode=1
 | 
			
		||||
  if(mode(1:4).eq.'JT65') then
 | 
			
		||||
     nmode=2
 | 
			
		||||
     if(mode(5:5).eq.'A') mode65=1
 | 
			
		||||
     if(mode(5:5).eq.'B') mode65=2
 | 
			
		||||
     if(mode(5:5).eq.'C') mode65=4
 | 
			
		||||
  endif
 | 
			
		||||
  if(mode.eq.'Echo') nmode=3
 | 
			
		||||
  if(mode.eq.'JT6M') nmode=4
 | 
			
		||||
  uth=uth8
 | 
			
		||||
 | 
			
		||||
  call cs_unlock
 | 
			
		||||
  call astro(AppDir,nyear,month,nday,uth,nfreq,hisgrid,2,nmode,1,    &
 | 
			
		||||
       AzSun,ElSun,AzMoon,ElMoon,ntsky,doppler00,doppler,            &
 | 
			
		||||
       dbMoon,RAMoon,DecMoon,HA,Dgrd,sd,poloffset,xnr,auxra,auxdec,  &
 | 
			
		||||
       AzAux,ElAux)
 | 
			
		||||
  AzMoonB8=AzMoon
 | 
			
		||||
  ElMoonB8=ElMoon
 | 
			
		||||
  call astro(AppDir,nyear,month,nday,uth,nfreq,grid,1,nmode,1,       &
 | 
			
		||||
       AzSun,ElSun,AzMoon,ElMoon,ntsky,doppler00,doppler,            &
 | 
			
		||||
       dbMoon,RAMoon,DecMoon,HA,Dgrd,sd,poloffset,xnr,auxra,auxdec,  &
 | 
			
		||||
       AzAux,ElAux)
 | 
			
		||||
 | 
			
		||||
  RaAux8=auxra
 | 
			
		||||
  DecAux8=auxdec
 | 
			
		||||
  AzSun8=AzSun
 | 
			
		||||
  ElSun8=ElSun
 | 
			
		||||
  AzMoon8=AzMoon
 | 
			
		||||
  ElMoon8=ElMoon
 | 
			
		||||
  dbMoon8=dbMoon
 | 
			
		||||
  RAMoon8=RAMoon/15.0
 | 
			
		||||
  DecMoon8=DecMoon
 | 
			
		||||
  HA8=HA
 | 
			
		||||
  Dgrd8=Dgrd
 | 
			
		||||
  sd8=sd
 | 
			
		||||
  poloffset8=poloffset
 | 
			
		||||
  xnr8=xnr
 | 
			
		||||
  AzAux8=AzAux
 | 
			
		||||
  ElAux8=ElAux
 | 
			
		||||
  ndop=nint(doppler)
 | 
			
		||||
  ndop00=nint(doppler00)
 | 
			
		||||
 | 
			
		||||
  if(uth8z.eq.0.d0) then
 | 
			
		||||
     uth8z=uth8-1.d0/3600.d0
 | 
			
		||||
     dopplerz=doppler
 | 
			
		||||
     doppler00z=doppler00
 | 
			
		||||
  endif
 | 
			
		||||
     
 | 
			
		||||
  dt=60.0*(uth8-uth8z)
 | 
			
		||||
  if(dt.le.0) dt=1.d0/60.d0
 | 
			
		||||
  dfdt=(doppler-dopplerz)/dt
 | 
			
		||||
  dfdt0=(doppler00-doppler00z)/dt
 | 
			
		||||
  uth8z=uth8
 | 
			
		||||
  dopplerz=doppler
 | 
			
		||||
  doppler00z=doppler00
 | 
			
		||||
 | 
			
		||||
  imin=60*uth8
 | 
			
		||||
  isec=3600*uth8
 | 
			
		||||
 | 
			
		||||
  if(isec.ne.isec0 .and. ndecoding.eq.0) then
 | 
			
		||||
     call cs_lock('astro0b')
 | 
			
		||||
     ih=uth8
 | 
			
		||||
     im=mod(imin,60)
 | 
			
		||||
     is=mod(isec,60)
 | 
			
		||||
     rewind 14
 | 
			
		||||
     write(14,1010) ih,im,is,AzMoon,ElMoon,                          &
 | 
			
		||||
        ih,im,is,AzSun,ElSun,                                        &
 | 
			
		||||
        ih,im,is,AzAux,ElAux,                                        &
 | 
			
		||||
        nfreq,doppler,dfdt,doppler00,dfdt0,                          &
 | 
			
		||||
        mousefqso,nsetftx
 | 
			
		||||
1010 format(i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Moon'/        &
 | 
			
		||||
            i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Sun'/         &
 | 
			
		||||
            i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Source'/      &
 | 
			
		||||
            i4,',',f8.1,',',f8.2,',',f8.1,',',f8.2,',Doppler'/       &
 | 
			
		||||
            i4,',',i1,',fQSO')
 | 
			
		||||
     call flushqqq(14)
 | 
			
		||||
     nsetftx=0
 | 
			
		||||
     isec0=isec
 | 
			
		||||
     call cs_unlock
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  return
 | 
			
		||||
end subroutine astro0
 | 
			
		||||
							
								
								
									
										14
									
								
								astropak.f
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								astropak.f
									
									
									
									
									
								
							@ -1,14 +0,0 @@
 | 
			
		||||
!      include 'astro.f'
 | 
			
		||||
      include 'azdist.f'
 | 
			
		||||
      include 'coord.f'
 | 
			
		||||
      include 'dcoord.f'
 | 
			
		||||
      include 'deg2grid.f'
 | 
			
		||||
      include 'dot.f'
 | 
			
		||||
      include 'ftsky.f'
 | 
			
		||||
      include 'geocentric.f'
 | 
			
		||||
      include 'GeoDist.f'
 | 
			
		||||
      include 'grid2deg.f'
 | 
			
		||||
      include 'moon2.f'
 | 
			
		||||
      include 'MoonDop.f'
 | 
			
		||||
      include 'sun.f'
 | 
			
		||||
      include 'toxyz.f'
 | 
			
		||||
@ -1,74 +0,0 @@
 | 
			
		||||
!------------------------------------------------ audio_init
 | 
			
		||||
subroutine audio_init(ndin,ndout)
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  use dfmt
 | 
			
		||||
  integer Thread1,Thread2,Thread3
 | 
			
		||||
  external a2d,decode1,recvpkt
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  include 'gcom1.f90'
 | 
			
		||||
  include 'gcom2.f90'
 | 
			
		||||
 | 
			
		||||
  nmode=2
 | 
			
		||||
  if(mode(5:5).eq.'A') mode65=1
 | 
			
		||||
  if(mode(5:5).eq.'B') mode65=2
 | 
			
		||||
  if(mode(5:5).eq.'C') mode65=4
 | 
			
		||||
  ndevout=ndout
 | 
			
		||||
  TxOK=0
 | 
			
		||||
  Transmitting=0
 | 
			
		||||
  nfsample=11025
 | 
			
		||||
  nspb=1024
 | 
			
		||||
  nbufs=2048
 | 
			
		||||
  nmax=nbufs*nspb
 | 
			
		||||
  nwave=60*nfsample
 | 
			
		||||
  ngo=1
 | 
			
		||||
  f0=800.0
 | 
			
		||||
  do i=1,nwave
 | 
			
		||||
     iwave(i)=nint(32767.0*sin(6.283185307*i*f0/nfsample))
 | 
			
		||||
  enddo
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
!  Priority classes (for processes):
 | 
			
		||||
!     IDLE_PRIORITY_CLASS               64
 | 
			
		||||
!     NORMAL_PRIORITY_CLASS             32
 | 
			
		||||
!     HIGH_PRIORITY_CLASS              128
 | 
			
		||||
 | 
			
		||||
!  Priority definitions (for threads):
 | 
			
		||||
!     THREAD_PRIORITY_IDLE             -15
 | 
			
		||||
!     THREAD_PRIORITY_LOWEST            -2
 | 
			
		||||
!     THREAD_PRIORITY_BELOW_NORMAL      -1
 | 
			
		||||
!     THREAD_PRIORITY_NORMAL             0
 | 
			
		||||
!     THREAD_PRIORITY_ABOVE_NORMAL       1
 | 
			
		||||
!     THREAD_PRIORITY_HIGHEST            2
 | 
			
		||||
!     THREAD_PRIORITY_TIME_CRITICAL     15
 | 
			
		||||
    
 | 
			
		||||
  m0=SetPriorityClass(GetCurrentProcess(),NORMAL_PRIORITY_CLASS)
 | 
			
		||||
!  m0=SetPriorityClass(GetCurrentProcess(),HIGH_PRIORITY_CLASS)
 | 
			
		||||
 | 
			
		||||
! Start a thread for doing A/D and D/A with sound card.
 | 
			
		||||
!  (actually, only D/A is used in MAP65)
 | 
			
		||||
  Thread1=CreateThread(0,0,a2d,0,CREATE_SUSPENDED,id1)
 | 
			
		||||
  m1=SetThreadPriority(Thread1,THREAD_PRIORITY_ABOVE_NORMAL)
 | 
			
		||||
  m2=ResumeThread(Thread1)
 | 
			
		||||
 | 
			
		||||
! Start a thread for background decoding.
 | 
			
		||||
  Thread2=CreateThread(0,0,decode1,0,CREATE_SUSPENDED,id2)
 | 
			
		||||
  m3=SetThreadPriority(Thread2,THREAD_PRIORITY_BELOW_NORMAL)
 | 
			
		||||
  m4=ResumeThread(Thread2)
 | 
			
		||||
 | 
			
		||||
! Start a thread to receive packets from Linrad
 | 
			
		||||
  Thread3=CreateThread(0,0,recvpkt,0,CREATE_SUSPENDED,id3)
 | 
			
		||||
  m5=SetThreadPriority(Thread3,THREAD_PRIORITY_ABOVE_NORMAL)
 | 
			
		||||
  m6=ResumeThread(Thread3)
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
!  print*,'Audio INIT called.'
 | 
			
		||||
  ierr=start_threads(ndevin,ndevout,y1,y2,nmax,iwrite,iwave,nwave,    &
 | 
			
		||||
       11025,NSPB,TRPeriod,TxOK,ndebug,Transmitting,            &
 | 
			
		||||
       Tsec,ngo,nmode,tbuf,ibuf,ndsec,PttPort,devin_name,devout_name)
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  return
 | 
			
		||||
end subroutine audio_init
 | 
			
		||||
							
								
								
									
										4
									
								
								avecom.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								avecom.h
									
									
									
									
									
								
							@ -1,4 +0,0 @@
 | 
			
		||||
	parameter (MAXAVE=120)
 | 
			
		||||
	common/ave/ppsave(64,63,MAXAVE),nflag(MAXAVE),nsave,
 | 
			
		||||
     +    iseg(MAXAVE)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										64
									
								
								avemsg65.f
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								avemsg65.f
									
									
									
									
									
								
							@ -1,64 +0,0 @@
 | 
			
		||||
      subroutine avemsg65(mseg,mode65,ndepth,decoded,nused,
 | 
			
		||||
     +  nq1,nq2,neme,nsked,mycall,hiscall,hisgrid,qual,
 | 
			
		||||
     +  ns,ncount)
 | 
			
		||||
 | 
			
		||||
C  Decodes averaged JT65 data for the specified segment (mseg=1 or 2).
 | 
			
		||||
 | 
			
		||||
      parameter (MAXAVE=120)                    !Max avg count is 120
 | 
			
		||||
      character decoded*22,deepmsg*22
 | 
			
		||||
      character mycall*12,hiscall*12,hisgrid*6
 | 
			
		||||
      real s3(64,63)
 | 
			
		||||
      logical ltext
 | 
			
		||||
      common/ave/ppsave(64,63,MAXAVE),nflag(MAXAVE),nsave,iseg(MAXAVE)
 | 
			
		||||
 | 
			
		||||
C  Count the available spectra for this Monitor segment (mseg=1 or 2),
 | 
			
		||||
C  and the number of spectra flagged as good.
 | 
			
		||||
 | 
			
		||||
      nused=0
 | 
			
		||||
      ns=0
 | 
			
		||||
      nqual=0
 | 
			
		||||
      deepmsg='                      '
 | 
			
		||||
      do i=1,nsave
 | 
			
		||||
         if(iseg(i).eq.mseg) then
 | 
			
		||||
            ns=ns+1
 | 
			
		||||
            if(nflag(i).eq.1) nused=nused+1
 | 
			
		||||
         endif
 | 
			
		||||
      enddo
 | 
			
		||||
      if(nused.lt.1) go to 100
 | 
			
		||||
 | 
			
		||||
C  Compute the average of all flagged spectra for this segment.
 | 
			
		||||
      do j=1,63
 | 
			
		||||
         call zero(s3(1,j),64)
 | 
			
		||||
         do n=1,nsave
 | 
			
		||||
            if(nflag(n).eq.1 .and. iseg(n).eq.mseg) then
 | 
			
		||||
               call add(s3(1,j),ppsave(1,j,n),s3(1,j),64)
 | 
			
		||||
            endif
 | 
			
		||||
         enddo
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      nadd=nused*mode65
 | 
			
		||||
      call extract(s3,nadd,ncount,decoded,ltext)     !Extract the message
 | 
			
		||||
      if(ncount.lt.0) decoded='                      '
 | 
			
		||||
 | 
			
		||||
      nqual=0
 | 
			
		||||
C  Possibly should pass nadd=nused, also:
 | 
			
		||||
      if(ndepth.ge.3) then
 | 
			
		||||
         flipx=1.0                     !Normal flip not relevant for ave msg
 | 
			
		||||
         call deep65(s3,mode65,neme,nsked,flipx, 
 | 
			
		||||
     +   mycall,hiscall,hisgrid,deepmsg,qual)
 | 
			
		||||
         nqual=qual
 | 
			
		||||
         if(nqual.lt.nq1) deepmsg='                      '
 | 
			
		||||
         if(nqual.ge.nq1 .and. nqual.lt.nq2) deepmsg(19:19)='?'
 | 
			
		||||
      else
 | 
			
		||||
         deepmsg='                      '
 | 
			
		||||
         qual=0.
 | 
			
		||||
      endif
 | 
			
		||||
      if(ncount.lt.0) decoded=deepmsg
 | 
			
		||||
 | 
			
		||||
C  Suppress "birdie messages":
 | 
			
		||||
      if(decoded(1:7).eq.'000AAA ') decoded='                      '
 | 
			
		||||
      if(decoded(1:7).eq.'0L6MWK ') decoded='                      '
 | 
			
		||||
 | 
			
		||||
 100  if(nused.lt.1) decoded='                      '
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										108
									
								
								azdist.f
									
									
									
									
									
								
							
							
						
						
									
										108
									
								
								azdist.f
									
									
									
									
									
								
							@ -1,108 +0,0 @@
 | 
			
		||||
      subroutine azdist(MyGrid,HisGrid,utch,nAz,nEl,nDmiles,nDkm,
 | 
			
		||||
     +  nHotAz,nHotABetter)
 | 
			
		||||
 | 
			
		||||
      character*6 MyGrid,HisGrid,mygrid0,hisgrid0
 | 
			
		||||
      real*8 utch,utch0
 | 
			
		||||
      logical HotABetter,IamEast
 | 
			
		||||
      real eltab(22),daztab(22)
 | 
			
		||||
      data eltab/18.,15.,13.,11.,9.,8.,7.,6.,5.3,4.7,4.,3.3,2.7,
 | 
			
		||||
     +  2.,1.5,1.,0.8,0.6,0.4,0.2,0.0,0.0/
 | 
			
		||||
      data daztab/21.,18.,16.,15.,14.,13.,12.,11.,10.7,10.3,10.,
 | 
			
		||||
     +  10.,10.,10.,10.,10.,10.,9.,9.,9.,8.,8./
 | 
			
		||||
      data mygrid0/"      "/,hisgrid0/"      "/,utch0/-999.d0/
 | 
			
		||||
      save
 | 
			
		||||
 | 
			
		||||
      if(MyGrid.eq.HisGrid) then
 | 
			
		||||
         naz=0
 | 
			
		||||
         nel=0
 | 
			
		||||
         ndmiles=0
 | 
			
		||||
         ndkm=0
 | 
			
		||||
         nhotaz=0
 | 
			
		||||
         nhotabetter=1
 | 
			
		||||
         go to 999
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
      if(mygrid.eq.mygrid0 .and. hisgrid.eq.hisgrid0 .and.
 | 
			
		||||
     +  abs(utch-utch0).lt.0.1666667d0) go to 900
 | 
			
		||||
      utch0=utch
 | 
			
		||||
      mygrid0=mygrid
 | 
			
		||||
      hisgrid0=hisgrid
 | 
			
		||||
      utchours=utch
 | 
			
		||||
 | 
			
		||||
      if(MyGrid(5:5).eq.' ') MyGrid(5:5)='m'
 | 
			
		||||
      if(MyGrid(6:6).eq.' ') MyGrid(6:6)='m'
 | 
			
		||||
      if(HisGrid(5:5).eq.' ') HisGrid(5:5)='m'
 | 
			
		||||
      if(HisGrid(6:6).eq.' ') HisGrid(6:6)='m'
 | 
			
		||||
 | 
			
		||||
      if(MyGrid.eq.HisGrid) then
 | 
			
		||||
         Az=0.
 | 
			
		||||
         Dmiles=0.
 | 
			
		||||
         Dkm=0.0
 | 
			
		||||
         El=0.
 | 
			
		||||
         HotA=0.
 | 
			
		||||
         HotB=0.
 | 
			
		||||
         HotABetter=.true.
 | 
			
		||||
         go to 900
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
      call grid2deg(MyGrid,dlong1,dlat1)
 | 
			
		||||
      call grid2deg(HisGrid,dlong2,dlat2)
 | 
			
		||||
      call geodist(dlat1,dlong1,dlat2,dlong2,Az,Baz,Dkm)
 | 
			
		||||
 | 
			
		||||
      ndkm=Dkm/100
 | 
			
		||||
      j=ndkm-4
 | 
			
		||||
      if(j.lt.1) j=1
 | 
			
		||||
      if(j.gt.21)j=21
 | 
			
		||||
      if(Dkm.lt.500.0) then
 | 
			
		||||
        El=18.0
 | 
			
		||||
      else
 | 
			
		||||
        u=(Dkm-100.0*ndkm)/100.0
 | 
			
		||||
        El=(1.0-u)*eltab(j) + u*eltab(j+1)
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
      daz=daztab(j) + u * (daztab(j+1)-daztab(j))
 | 
			
		||||
      Dmiles=Dkm/1.609344
 | 
			
		||||
 | 
			
		||||
      tmid=mod(UTChours-0.5*(dlong1+dlong2)/15.0+48.0,24.0)
 | 
			
		||||
      IamEast=.false.
 | 
			
		||||
      if(dlong1.lt.dlong2) IamEast=.true.
 | 
			
		||||
      if(dlong1.eq.dlong2 .and. dlat1.gt.dlat2) IamEast=.false.
 | 
			
		||||
      azEast=baz
 | 
			
		||||
      if(IamEast) azEast=az
 | 
			
		||||
      if((azEast.ge.45.0 .and. azEast.lt.135.0) .or.
 | 
			
		||||
     +    (azEast.ge.225.0 .and. azEast.lt.315.0)) then
 | 
			
		||||
C  The path will be taken as "east-west".
 | 
			
		||||
         HotABetter=.true.
 | 
			
		||||
         if(abs(tmid-6.0).lt.6.0) HotABetter=.false.
 | 
			
		||||
         if((dlat1+dlat2)/2.0 .lt. 0.0) HotABetter=.not.HotABetter
 | 
			
		||||
      else
 | 
			
		||||
C  The path will be taken as "north-south".
 | 
			
		||||
         HotABetter=.false.
 | 
			
		||||
         if(abs(tmid-12.0).lt.6.0) HotABetter=.true.
 | 
			
		||||
      endif
 | 
			
		||||
      if(IamEast) then
 | 
			
		||||
         HotA = Az - daz
 | 
			
		||||
         HotB = Az + daz
 | 
			
		||||
      else
 | 
			
		||||
         HotA = Az + daz
 | 
			
		||||
         HotB = Az - daz
 | 
			
		||||
      endif
 | 
			
		||||
      if(HotA.lt.0.0)   HotA=HotA+360.0
 | 
			
		||||
      if(HotA.gt.360.0) HotA=HotA-360.0
 | 
			
		||||
      if(HotB.lt.0.0)   HotB=HotB+360.0
 | 
			
		||||
      if(HotB.gt.360.0) HotB=HotB-360.0
 | 
			
		||||
 | 
			
		||||
 900  continue
 | 
			
		||||
      naz=nint(Az)
 | 
			
		||||
      nel=nint(el)
 | 
			
		||||
      nDmiles=nint(Dmiles)
 | 
			
		||||
      nDkm=nint(Dkm)
 | 
			
		||||
      nHotAz=nint(HotB)
 | 
			
		||||
      nHotABetter=0
 | 
			
		||||
      if(HotABetter) then
 | 
			
		||||
         nHotAz=nint(HotA)
 | 
			
		||||
         nHotABetter=1
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
 999  return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										14
									
								
								azdist0.f90
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								azdist0.f90
									
									
									
									
									
								
							@ -1,14 +0,0 @@
 | 
			
		||||
 | 
			
		||||
!---------------------------------------------------- azdist0
 | 
			
		||||
 | 
			
		||||
subroutine azdist0(MyGrid,HisGrid,utch,nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter)
 | 
			
		||||
  character*6 MyGrid,HisGrid
 | 
			
		||||
  real*8 utch
 | 
			
		||||
!f2py intent(in) MyGrid,HisGrid,utch
 | 
			
		||||
!f2py intent(out) nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter
 | 
			
		||||
 | 
			
		||||
  if(hisgrid(5:5).eq.' ' .or. ichar(hisgrid(5:5)).eq.0) hisgrid(5:5)='m'
 | 
			
		||||
  if(hisgrid(6:6).eq.' ' .or. ichar(hisgrid(6:6)).eq.0) hisgrid(6:6)='m'
 | 
			
		||||
  call azdist(MyGrid,HisGrid,utch,nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter)
 | 
			
		||||
  return
 | 
			
		||||
end subroutine azdist0
 | 
			
		||||
							
								
								
									
										89
									
								
								bandmap.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								bandmap.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,89 @@
 | 
			
		||||
#include "bandmap.h"
 | 
			
		||||
#include "ui_bandmap.h"
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
 | 
			
		||||
BandMap::BandMap(QWidget *parent) :
 | 
			
		||||
  QWidget(parent),
 | 
			
		||||
  ui(new Ui::BandMap)
 | 
			
		||||
{
 | 
			
		||||
  ui->setupUi(this);
 | 
			
		||||
  ui->bmTextBrowser->setStyleSheet(
 | 
			
		||||
        "QTextBrowser { background-color : #000066; color : red; }");
 | 
			
		||||
  m_bandMapText="";
 | 
			
		||||
  ui->bmTextBrowser->clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BandMap::~BandMap()
 | 
			
		||||
{
 | 
			
		||||
  delete ui;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BandMap::setText(QString t)
 | 
			
		||||
{
 | 
			
		||||
  m_bandMapText=t;
 | 
			
		||||
  int w=ui->bmTextBrowser->size().width();
 | 
			
		||||
  int ncols=1;
 | 
			
		||||
  if(w>220) ncols=2;
 | 
			
		||||
  QString s="QTextBrowser{background-color: "+m_colorBackground+"}";
 | 
			
		||||
  ui->bmTextBrowser->setStyleSheet(s);
 | 
			
		||||
  QString t0="<html style=\" font-family:'Courier New';"
 | 
			
		||||
      "font-size:9pt; background-color:#000066\">"
 | 
			
		||||
      "<table border=0 cellspacing=7><tr><td>\n";
 | 
			
		||||
  QString tfreq,tspace,tcall;
 | 
			
		||||
  QString s0,s1,s2,s3,bg;
 | 
			
		||||
  bg="<span style=color:"+m_colorBackground+";>.</span>";
 | 
			
		||||
  s0="<span style=color:"+m_color0+";>";
 | 
			
		||||
  s1="<span style=color:"+m_color1+";>";
 | 
			
		||||
  s2="<span style=color:"+m_color2+";>";
 | 
			
		||||
  s3="<span style=color:"+m_color3+";>";
 | 
			
		||||
 | 
			
		||||
  ui->bmTextBrowser->clear();
 | 
			
		||||
  QStringList lines = t.split( "\n", QString::SkipEmptyParts );
 | 
			
		||||
  int nrows=(lines.length()+ncols-1)/ncols;
 | 
			
		||||
 | 
			
		||||
  for(int i=0; i<nrows; i++) {
 | 
			
		||||
    tfreq=lines[i].mid(0,3);
 | 
			
		||||
    tspace=lines[i].mid(4,1);
 | 
			
		||||
    if(tspace==" ") tspace=bg;
 | 
			
		||||
    tcall=lines[i].mid(5,7);
 | 
			
		||||
    int n=lines[i].mid(13,1).toInt();
 | 
			
		||||
    if(n==0) t0 += s0;
 | 
			
		||||
    if(n==1) t0 += s1;
 | 
			
		||||
    if(n==2) t0 += s2;
 | 
			
		||||
    if(n>=3) t0 += s3;
 | 
			
		||||
    t0 += (tfreq + tspace + tcall + "</span><br>\n");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if(ncols==2) {                                  //2-column display
 | 
			
		||||
    t0 += "<td><br><td>\n";
 | 
			
		||||
    for(int i=nrows; i<lines.length(); i++) {
 | 
			
		||||
      tfreq=lines[i].mid(0,3);
 | 
			
		||||
      tspace=lines[i].mid(4,1);
 | 
			
		||||
      if(tspace=="  ") tspace=bg;
 | 
			
		||||
      tcall=lines[i].mid(5,7);
 | 
			
		||||
      int n=lines[i].mid(13,1).toInt();
 | 
			
		||||
      if(n==0) t0 += s0;
 | 
			
		||||
      if(n==1) t0 += s1;
 | 
			
		||||
      if(n==2) t0 += s2;
 | 
			
		||||
      if(n>=3) t0 += s3;
 | 
			
		||||
      t0 += (tfreq + tspace + tcall + "</span><br>\n");
 | 
			
		||||
    }
 | 
			
		||||
    if(2*nrows>lines.length()) t0 += (s0 + "</span><br>\n");
 | 
			
		||||
  }
 | 
			
		||||
  ui->bmTextBrowser->setHtml(t0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BandMap::resizeEvent(QResizeEvent* )
 | 
			
		||||
{
 | 
			
		||||
  setText(m_bandMapText);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BandMap::setColors(QString t)
 | 
			
		||||
{
 | 
			
		||||
  m_colorBackground = "#"+t.mid(0,6);
 | 
			
		||||
  m_color0 = "#"+t.mid(6,6);
 | 
			
		||||
  m_color1 = "#"+t.mid(12,6);
 | 
			
		||||
  m_color2 = "#"+t.mid(18,6);
 | 
			
		||||
  m_color3 = "#"+t.mid(24,6);
 | 
			
		||||
  setText(m_bandMapText);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										34
									
								
								bandmap.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								bandmap.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,34 @@
 | 
			
		||||
#ifndef BANDMAP_H
 | 
			
		||||
#define BANDMAP_H
 | 
			
		||||
 | 
			
		||||
#include <QWidget>
 | 
			
		||||
 | 
			
		||||
namespace Ui {
 | 
			
		||||
    class BandMap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class BandMap : public QWidget
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  explicit BandMap(QWidget *parent = 0);
 | 
			
		||||
  void setText(QString t);
 | 
			
		||||
  void setColors(QString t);
 | 
			
		||||
 | 
			
		||||
  ~BandMap();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
  void resizeEvent(QResizeEvent* event);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    Ui::BandMap *ui;
 | 
			
		||||
    QString m_bandMapText;
 | 
			
		||||
    QString m_colorBackground;
 | 
			
		||||
    QString m_color0;
 | 
			
		||||
    QString m_color1;
 | 
			
		||||
    QString m_color2;
 | 
			
		||||
    QString m_color3;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // BANDMAP_H
 | 
			
		||||
							
								
								
									
										43
									
								
								bandmap.ui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								bandmap.ui
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,43 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<ui version="4.0">
 | 
			
		||||
 <class>BandMap</class>
 | 
			
		||||
 <widget class="QWidget" name="BandMap">
 | 
			
		||||
  <property name="geometry">
 | 
			
		||||
   <rect>
 | 
			
		||||
    <x>0</x>
 | 
			
		||||
    <y>0</y>
 | 
			
		||||
    <width>329</width>
 | 
			
		||||
    <height>379</height>
 | 
			
		||||
   </rect>
 | 
			
		||||
  </property>
 | 
			
		||||
  <property name="minimumSize">
 | 
			
		||||
   <size>
 | 
			
		||||
    <width>0</width>
 | 
			
		||||
    <height>0</height>
 | 
			
		||||
   </size>
 | 
			
		||||
  </property>
 | 
			
		||||
  <property name="windowTitle">
 | 
			
		||||
   <string>Form</string>
 | 
			
		||||
  </property>
 | 
			
		||||
  <layout class="QGridLayout" name="gridLayout">
 | 
			
		||||
   <item row="0" column="0">
 | 
			
		||||
    <widget class="QTextBrowser" name="bmTextBrowser">
 | 
			
		||||
     <property name="minimumSize">
 | 
			
		||||
      <size>
 | 
			
		||||
       <width>107</width>
 | 
			
		||||
       <height>0</height>
 | 
			
		||||
      </size>
 | 
			
		||||
     </property>
 | 
			
		||||
     <property name="font">
 | 
			
		||||
      <font>
 | 
			
		||||
       <family>Courier New</family>
 | 
			
		||||
       <pointsize>9</pointsize>
 | 
			
		||||
      </font>
 | 
			
		||||
     </property>
 | 
			
		||||
    </widget>
 | 
			
		||||
   </item>
 | 
			
		||||
  </layout>
 | 
			
		||||
 </widget>
 | 
			
		||||
 <resources/>
 | 
			
		||||
 <connections/>
 | 
			
		||||
</ui>
 | 
			
		||||
							
								
								
									
										256
									
								
								blue.dat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										256
									
								
								blue.dat
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,256 @@
 | 
			
		||||
     0      0.0000    0.0000    0.0000
 | 
			
		||||
     1	    0.0902    0.0902    0.2558
 | 
			
		||||
     2	    0.1176    0.1176    0.2694
 | 
			
		||||
     3	    0.1412    0.1412    0.2820
 | 
			
		||||
     4	    0.1569    0.1569    0.2938
 | 
			
		||||
     5	    0.1725    0.1725    0.3049
 | 
			
		||||
     6	    0.1843    0.1843    0.3154
 | 
			
		||||
     7	    0.1961    0.1961    0.3254
 | 
			
		||||
     8	    0.2039    0.2039    0.3349
 | 
			
		||||
     9	    0.2157    0.2157    0.3440
 | 
			
		||||
    10	    0.2235    0.2235    0.3528
 | 
			
		||||
    11	    0.2314    0.2314    0.3612
 | 
			
		||||
    12	    0.2392    0.2392    0.3693
 | 
			
		||||
    13	    0.2471    0.2471    0.3772
 | 
			
		||||
    14	    0.2549    0.2549    0.3848
 | 
			
		||||
    15	    0.2588    0.2588    0.3921
 | 
			
		||||
    16	    0.2667    0.2667    0.3992
 | 
			
		||||
    17	    0.2706    0.2706    0.4061
 | 
			
		||||
    18	    0.2784    0.2784    0.4129
 | 
			
		||||
    19	    0.2824    0.2824    0.4194
 | 
			
		||||
    20	    0.2902    0.2902    0.4258
 | 
			
		||||
    21	    0.2941    0.2941    0.4319
 | 
			
		||||
    22	    0.2980    0.2980    0.4380
 | 
			
		||||
    23	    0.3059    0.3059    0.4439
 | 
			
		||||
    24	    0.3098    0.3098    0.4496
 | 
			
		||||
    25	    0.3137    0.3137    0.4553
 | 
			
		||||
    26	    0.3176    0.3176    0.4608
 | 
			
		||||
    27	    0.3216    0.3216    0.4661
 | 
			
		||||
    28	    0.3294    0.3294    0.4714
 | 
			
		||||
    29	    0.3333    0.3333    0.4765
 | 
			
		||||
    30	    0.3373    0.3373    0.4815
 | 
			
		||||
    31	    0.3412    0.3412    0.4865
 | 
			
		||||
    32	    0.3451    0.3451    0.4913
 | 
			
		||||
    33	    0.3490    0.3490    0.4960
 | 
			
		||||
    34	    0.3529    0.3529    0.5006
 | 
			
		||||
    35	    0.3569    0.3569    0.5052
 | 
			
		||||
    36	    0.3608    0.3608    0.5096
 | 
			
		||||
    37	    0.3647    0.3647    0.5140
 | 
			
		||||
    38	    0.3686    0.3686    0.5183
 | 
			
		||||
    39	    0.3725    0.3725    0.5225
 | 
			
		||||
    40	    0.3765    0.3765    0.5266
 | 
			
		||||
    41	    0.3804    0.3804    0.5306
 | 
			
		||||
    42	    0.3843    0.3843    0.5346
 | 
			
		||||
    43	    0.3843    0.3843    0.5385
 | 
			
		||||
    44	    0.3882    0.3882    0.5423
 | 
			
		||||
    45	    0.3922    0.3922    0.5460
 | 
			
		||||
    46	    0.3961    0.3961    0.5497
 | 
			
		||||
    47	    0.4000    0.4000    0.5533
 | 
			
		||||
    48	    0.4039    0.4039    0.5569
 | 
			
		||||
    49	    0.4078    0.4078    0.5603
 | 
			
		||||
    50	    0.4118    0.4118    0.5638
 | 
			
		||||
    51	    0.4118    0.4118    0.5671
 | 
			
		||||
    52	    0.4157    0.4157    0.5704
 | 
			
		||||
    53	    0.4196    0.4196    0.5736
 | 
			
		||||
    54	    0.4235    0.4235    0.5768
 | 
			
		||||
    55	    0.4275    0.4275    0.5799
 | 
			
		||||
    56	    0.4314    0.4314    0.5829
 | 
			
		||||
    57	    0.4314    0.4314    0.5859
 | 
			
		||||
    58	    0.4353    0.4353    0.5889
 | 
			
		||||
    59	    0.4392    0.4392    0.5917
 | 
			
		||||
    60	    0.4431    0.4431    0.5946
 | 
			
		||||
    61	    0.4471    0.4471    0.5973
 | 
			
		||||
    62	    0.4471    0.4471    0.6001
 | 
			
		||||
    63	    0.4510    0.4510    0.6027
 | 
			
		||||
    64	    0.4549    0.4549    0.6053
 | 
			
		||||
    65	    0.4588    0.4588    0.6079
 | 
			
		||||
    66	    0.4627    0.4627    0.6104
 | 
			
		||||
    67	    0.4627    0.4627    0.6129
 | 
			
		||||
    68	    0.4667    0.4667    0.6153
 | 
			
		||||
    69	    0.4706    0.4706    0.6176
 | 
			
		||||
    70	    0.4745    0.4745    0.6199
 | 
			
		||||
    71	    0.4745    0.4745    0.6222
 | 
			
		||||
    72	    0.4784    0.4784    0.6244
 | 
			
		||||
    73	    0.4824    0.4824    0.6266
 | 
			
		||||
    74	    0.4863    0.4863    0.6287
 | 
			
		||||
    75	    0.4863    0.4863    0.6308
 | 
			
		||||
    76	    0.4902    0.4902    0.6328
 | 
			
		||||
    77	    0.4941    0.4941    0.6348
 | 
			
		||||
    78	    0.4980    0.4980    0.6367
 | 
			
		||||
    79	    0.5020    0.5020    0.6386
 | 
			
		||||
    80	    0.5020    0.5020    0.6404
 | 
			
		||||
    81	    0.5059    0.5059    0.6422
 | 
			
		||||
    82	    0.5098    0.5098    0.6440
 | 
			
		||||
    83	    0.5098    0.5098    0.6457
 | 
			
		||||
    84	    0.5137    0.5137    0.6474
 | 
			
		||||
    85	    0.5176    0.5176    0.6490
 | 
			
		||||
    86	    0.5216    0.5216    0.6506
 | 
			
		||||
    87	    0.5216    0.5216    0.6521
 | 
			
		||||
    88	    0.5255    0.5255    0.6536
 | 
			
		||||
    89	    0.5294    0.5294    0.6551
 | 
			
		||||
    90	    0.5333    0.5333    0.6565
 | 
			
		||||
    91	    0.5333    0.5333    0.6578
 | 
			
		||||
    92	    0.5373    0.5373    0.6591
 | 
			
		||||
    93	    0.5412    0.5412    0.6604
 | 
			
		||||
    94	    0.5451    0.5451    0.6617
 | 
			
		||||
    95	    0.5451    0.5451    0.6629
 | 
			
		||||
    96	    0.5490    0.5490    0.6640
 | 
			
		||||
    97	    0.5529    0.5529    0.6651
 | 
			
		||||
    98	    0.5569    0.5569    0.6662
 | 
			
		||||
    99	    0.5569    0.5569    0.6672
 | 
			
		||||
   100	    0.5608    0.5608    0.6682
 | 
			
		||||
   101	    0.5647    0.5647    0.6692
 | 
			
		||||
   102	    0.5647    0.5647    0.6701
 | 
			
		||||
   103	    0.5686    0.5686    0.6710
 | 
			
		||||
   104	    0.5725    0.5725    0.6718
 | 
			
		||||
   105	    0.5765    0.5765    0.6726
 | 
			
		||||
   106	    0.5765    0.5765    0.6733
 | 
			
		||||
   107	    0.5804    0.5804    0.6740
 | 
			
		||||
   108	    0.5843    0.5843    0.6747
 | 
			
		||||
   109	    0.5843    0.5843    0.6753
 | 
			
		||||
   110	    0.5882    0.5882    0.6759
 | 
			
		||||
   111	    0.5922    0.5922    0.6765
 | 
			
		||||
   112	    0.5961    0.5961    0.6770
 | 
			
		||||
   113	    0.5961    0.5961    0.6774
 | 
			
		||||
   114	    0.6000    0.6000    0.6779
 | 
			
		||||
   115	    0.6039    0.6039    0.6783
 | 
			
		||||
   116	    0.6039    0.6039    0.6786
 | 
			
		||||
   117	    0.6078    0.6078    0.6789
 | 
			
		||||
   118	    0.6118    0.6118    0.6792
 | 
			
		||||
   119	    0.6157    0.6157    0.6794
 | 
			
		||||
   120	    0.6157    0.6157    0.6796
 | 
			
		||||
   121	    0.6196    0.6196    0.6798
 | 
			
		||||
   122	    0.6235    0.6235    0.6799
 | 
			
		||||
   123	    0.6235    0.6235    0.6800
 | 
			
		||||
   124	    0.6275    0.6275    0.6800
 | 
			
		||||
   125	    0.6314    0.6314    0.6800
 | 
			
		||||
   126	    0.6353    0.6353    0.6799
 | 
			
		||||
   127	    0.6353    0.6353    0.6799
 | 
			
		||||
   128	    0.6392    0.6392    0.6797
 | 
			
		||||
   129	    0.6431    0.6431    0.6796
 | 
			
		||||
   130	    0.6431    0.6431    0.6794
 | 
			
		||||
   131	    0.6471    0.6471    0.6791
 | 
			
		||||
   132	    0.6510    0.6510    0.6789
 | 
			
		||||
   133	    0.6549    0.6549    0.6785
 | 
			
		||||
   134	    0.6549    0.6549    0.6782
 | 
			
		||||
   135	    0.6588    0.6588    0.6778
 | 
			
		||||
   136	    0.6627    0.6627    0.6773
 | 
			
		||||
   137	    0.6627    0.6627    0.6769
 | 
			
		||||
   138	    0.6667    0.6667    0.6763
 | 
			
		||||
   139	    0.6706    0.6706    0.6758
 | 
			
		||||
   140	    0.6745    0.6745    0.6752
 | 
			
		||||
   141	    0.6745    0.6745    0.6746
 | 
			
		||||
   142	    0.6784    0.6784    0.6739
 | 
			
		||||
   143	    0.6824    0.6824    0.6732
 | 
			
		||||
   144	    0.6824    0.6824    0.6724
 | 
			
		||||
   145	    0.6863    0.6863    0.6716
 | 
			
		||||
   146	    0.6902    0.6902    0.6708
 | 
			
		||||
   147	    0.6941    0.6941    0.6699
 | 
			
		||||
   148	    0.6941    0.6941    0.6690
 | 
			
		||||
   149	    0.6980    0.6980    0.6680
 | 
			
		||||
   150	    0.7020    0.7020    0.6670
 | 
			
		||||
   151	    0.7020    0.7020    0.6660
 | 
			
		||||
   152	    0.7059    0.7059    0.6649
 | 
			
		||||
   153	    0.7098    0.7098    0.6638
 | 
			
		||||
   154	    0.7098    0.7098    0.6626
 | 
			
		||||
   155	    0.7137    0.7137    0.6614
 | 
			
		||||
   156	    0.7176    0.7176    0.6601
 | 
			
		||||
   157	    0.7216    0.7216    0.6589
 | 
			
		||||
   158	    0.7216    0.7216    0.6575
 | 
			
		||||
   159	    0.7255    0.7255    0.6561
 | 
			
		||||
   160	    0.7294    0.7294    0.6547
 | 
			
		||||
   161	    0.7294    0.7294    0.6533
 | 
			
		||||
   162	    0.7333    0.7333    0.6518
 | 
			
		||||
   163	    0.7373    0.7373    0.6502
 | 
			
		||||
   164	    0.7412    0.7412    0.6486
 | 
			
		||||
   165	    0.7412    0.7412    0.6470
 | 
			
		||||
   166	    0.7451    0.7451    0.6453
 | 
			
		||||
   167	    0.7490    0.7490    0.6436
 | 
			
		||||
   168	    0.7490    0.7490    0.6418
 | 
			
		||||
   169	    0.7529    0.7529    0.6400
 | 
			
		||||
   170	    0.7569    0.7569    0.6382
 | 
			
		||||
   171	    0.7608    0.7608    0.6363
 | 
			
		||||
   172	    0.7608    0.7608    0.6343
 | 
			
		||||
   173	    0.7647    0.7647    0.6324
 | 
			
		||||
   174	    0.7686    0.7686    0.6303
 | 
			
		||||
   175	    0.7686    0.7686    0.6282
 | 
			
		||||
   176	    0.7725    0.7725    0.6261
 | 
			
		||||
   177	    0.7765    0.7765    0.6239
 | 
			
		||||
   178	    0.7804    0.7804    0.6217
 | 
			
		||||
   179	    0.7804    0.7804    0.6194
 | 
			
		||||
   180	    0.7843    0.7843    0.6171
 | 
			
		||||
   181	    0.7882    0.7882    0.6147
 | 
			
		||||
   182	    0.7882    0.7882    0.6123
 | 
			
		||||
   183	    0.7922    0.7922    0.6098
 | 
			
		||||
   184	    0.7961    0.7961    0.6073
 | 
			
		||||
   185	    0.8000    0.8000    0.6047
 | 
			
		||||
   186	    0.8000    0.8000    0.6021
 | 
			
		||||
   187	    0.8039    0.8039    0.5994
 | 
			
		||||
   188	    0.8078    0.8078    0.5967
 | 
			
		||||
   189	    0.8078    0.8078    0.5939
 | 
			
		||||
   190	    0.8118    0.8118    0.5911
 | 
			
		||||
   191	    0.8157    0.8157    0.5882
 | 
			
		||||
   192	    0.8196    0.8196    0.5853
 | 
			
		||||
   193	    0.8196    0.8196    0.5823
 | 
			
		||||
   194	    0.8235    0.8235    0.5792
 | 
			
		||||
   195	    0.8275    0.8275    0.5761
 | 
			
		||||
   196	    0.8275    0.8275    0.5729
 | 
			
		||||
   197	    0.8314    0.8314    0.5697
 | 
			
		||||
   198	    0.8353    0.8353    0.5664
 | 
			
		||||
   199	    0.8392    0.8392    0.5630
 | 
			
		||||
   200	    0.8392    0.8392    0.5596
 | 
			
		||||
   201	    0.8431    0.8431    0.5561
 | 
			
		||||
   202	    0.8471    0.8471    0.5525
 | 
			
		||||
   203	    0.8471    0.8471    0.5489
 | 
			
		||||
   204	    0.8510    0.8510    0.5452
 | 
			
		||||
   205	    0.8549    0.8549    0.5414
 | 
			
		||||
   206	    0.8588    0.8588    0.5376
 | 
			
		||||
   207	    0.8588    0.8588    0.5337
 | 
			
		||||
   208	    0.8627    0.8627    0.5297
 | 
			
		||||
   209	    0.8667    0.8667    0.5257
 | 
			
		||||
   210	    0.8667    0.8667    0.5215
 | 
			
		||||
   211	    0.8706    0.8706    0.5173
 | 
			
		||||
   212	    0.8745    0.8745    0.5130
 | 
			
		||||
   213	    0.8784    0.8784    0.5086
 | 
			
		||||
   214	    0.8784    0.8784    0.5042
 | 
			
		||||
   215	    0.8824    0.8824    0.4996
 | 
			
		||||
   216	    0.8863    0.8863    0.4950
 | 
			
		||||
   217	    0.8863    0.8863    0.4902
 | 
			
		||||
   218	    0.8902    0.8902    0.4854
 | 
			
		||||
   219	    0.8941    0.8941    0.4804
 | 
			
		||||
   220	    0.8980    0.8980    0.4754
 | 
			
		||||
   221	    0.8980    0.8980    0.4702
 | 
			
		||||
   222	    0.9020    0.9020    0.4649
 | 
			
		||||
   223	    0.9059    0.9059    0.4595
 | 
			
		||||
   224	    0.9098    0.9098    0.4540
 | 
			
		||||
   225	    0.9098    0.9098    0.4484
 | 
			
		||||
   226	    0.9137    0.9137    0.4426
 | 
			
		||||
   227	    0.9176    0.9176    0.4366
 | 
			
		||||
   228	    0.9176    0.9176    0.4306
 | 
			
		||||
   229	    0.9216    0.9216    0.4243
 | 
			
		||||
   230	    0.9255    0.9255    0.4179
 | 
			
		||||
   231	    0.9294    0.9294    0.4114
 | 
			
		||||
   232	    0.9294    0.9294    0.4046
 | 
			
		||||
   233	    0.9333    0.9333    0.3977
 | 
			
		||||
   234	    0.9373    0.9373    0.3905
 | 
			
		||||
   235	    0.9373    0.9373    0.3831
 | 
			
		||||
   236	    0.9412    0.9412    0.3754
 | 
			
		||||
   237	    0.9451    0.9451    0.3675
 | 
			
		||||
   238	    0.9490    0.9490    0.3594
 | 
			
		||||
   239	    0.9490    0.9490    0.3509
 | 
			
		||||
   240	    0.9529    0.9529    0.3420
 | 
			
		||||
   241	    0.9569    0.9569    0.3328
 | 
			
		||||
   242	    0.9608    0.9608    0.3232
 | 
			
		||||
   243	    0.9608    0.9608    0.3131
 | 
			
		||||
   244	    0.9647    0.9647    0.3024
 | 
			
		||||
   245	    0.9686    0.9686    0.2912
 | 
			
		||||
   246	    0.9686    0.9686    0.2792
 | 
			
		||||
   247	    0.9725    0.9725    0.2664
 | 
			
		||||
   248	    0.9765    0.9765    0.2526
 | 
			
		||||
   249	    0.9804    0.9804    0.2375
 | 
			
		||||
   250	    0.9804    0.9804    0.2208
 | 
			
		||||
   251	    0.9843    0.9843    0.2020
 | 
			
		||||
   252	    0.9882    0.9882    0.1800
 | 
			
		||||
   253	    1.0       0.0       0.0
 | 
			
		||||
   254	    1.0       1.0       0.0
 | 
			
		||||
   255	    0.0       1.000     0.0
 | 
			
		||||
							
								
								
									
										115
									
								
								ccf65.f
									
									
									
									
									
								
							
							
						
						
									
										115
									
								
								ccf65.f
									
									
									
									
									
								
							@ -1,115 +0,0 @@
 | 
			
		||||
      subroutine ccf65(ss,nhsym,sync1,ipol1,dt1,flipk,syncshort,
 | 
			
		||||
     +     snr2,ipol2,dt2)
 | 
			
		||||
 | 
			
		||||
      parameter (NFFT=512,NH=NFFT/2)
 | 
			
		||||
      real ss(4,322)
 | 
			
		||||
                   !Input: half-symbol powers, 4 pol'ns
 | 
			
		||||
      real s(NFFT)                     !CCF = ss*pr
 | 
			
		||||
      complex cs(0:NH)                 !Complex FT of s
 | 
			
		||||
      real s2(NFFT)                    !CCF = ss*pr2
 | 
			
		||||
      complex cs2(0:NH)                !Complex FT of s2
 | 
			
		||||
      real pr(NFFT)                    !JT65 pseudo-random sync pattern
 | 
			
		||||
      complex cpr(0:NH)                !Complex FT of pr
 | 
			
		||||
      real pr2(NFFT)                   !JT65 shorthand pattern
 | 
			
		||||
      complex cpr2(0:NH)               !Complex FT of pr2
 | 
			
		||||
      real tmp1(322)
 | 
			
		||||
      real tmp2(322)
 | 
			
		||||
      real ccf(-27:27,4)
 | 
			
		||||
      logical first
 | 
			
		||||
      integer npr(126)
 | 
			
		||||
      data first/.true./
 | 
			
		||||
      equivalence (s,cs),(pr,cpr),(s2,cs2),(pr2,cpr2)
 | 
			
		||||
      save
 | 
			
		||||
 | 
			
		||||
C  The JT65 pseudo-random sync pattern:
 | 
			
		||||
      data npr/
 | 
			
		||||
     + 1,0,0,1,1,0,0,0,1,1,1,1,1,1,0,1,0,1,0,0,
 | 
			
		||||
     + 0,1,0,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1,
 | 
			
		||||
     + 0,1,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,1,1,
 | 
			
		||||
     + 0,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,0,0,1,
 | 
			
		||||
     + 1,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,0,1,
 | 
			
		||||
     + 0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1,
 | 
			
		||||
     + 1,1,1,1,1,1/
 | 
			
		||||
 | 
			
		||||
      if(first) then
 | 
			
		||||
C  Initialize pr, pr2; compute cpr, cpr2.
 | 
			
		||||
         fac=1.0/NFFT
 | 
			
		||||
         do i=1,NFFT
 | 
			
		||||
            pr(i)=0.
 | 
			
		||||
            k=2*mod((i-1)/8,2)-1
 | 
			
		||||
            pr2(i)=fac*k
 | 
			
		||||
         enddo
 | 
			
		||||
         do i=1,126
 | 
			
		||||
            j=2*i
 | 
			
		||||
            pr(j)=fac*(2*npr(i)-1)
 | 
			
		||||
         enddo
 | 
			
		||||
         call four2a(pr,NFFT,1,-1,0)
 | 
			
		||||
         call four2a(pr2,NFFT,1,-1,0)
 | 
			
		||||
         first=.false.
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
C  Look for JT65 sync pattern and shorthand square-wave pattern.
 | 
			
		||||
      ccfbest=0.
 | 
			
		||||
      ccfbest2=0.
 | 
			
		||||
      do ip=1,4                                    !Do all four pol'ns
 | 
			
		||||
         do i=1,nhsym                              ! ?? nhsym-1 ??
 | 
			
		||||
            s(i)=min(4.0,ss(ip,i)+ss(ip,i+1))
 | 
			
		||||
          enddo
 | 
			
		||||
         do i=nhsym+1,NFFT                         ! ?? nhsym ??
 | 
			
		||||
            s(i)=0.
 | 
			
		||||
         enddo
 | 
			
		||||
         call four2a(s,NFFT,1,-1,0)                !Real-to-complex FFT
 | 
			
		||||
         do i=0,NH
 | 
			
		||||
            cs2(i)=cs(i)*conjg(cpr2(i))            !Mult by complex FFT of pr2
 | 
			
		||||
            cs(i)=cs(i)*conjg(cpr(i))              !Mult by complex FFT of pr
 | 
			
		||||
         enddo
 | 
			
		||||
         call four2a(cs,NFFT,1,1,-1)               !Complex-to-real inv-FFT
 | 
			
		||||
         call four2a(cs2,NFFT,1,1,-1)              !Complex-to-real inv-FFT
 | 
			
		||||
 | 
			
		||||
         do lag=-27,27                             !Check for best JT65 sync
 | 
			
		||||
            ccf(lag,ip)=s(lag+28)                  
 | 
			
		||||
            if(abs(ccf(lag,ip)).gt.ccfbest) then
 | 
			
		||||
               ccfbest=abs(ccf(lag,ip))
 | 
			
		||||
               lagpk=lag
 | 
			
		||||
               ipol1=ip
 | 
			
		||||
               flipk=1.0
 | 
			
		||||
               if(ccf(lag,ip).lt.0.0) flipk=-1.0
 | 
			
		||||
            endif
 | 
			
		||||
         enddo
 | 
			
		||||
 | 
			
		||||
         do lag=-8,7                               !Check for best shorthand
 | 
			
		||||
            ccf2=s2(lag+28)
 | 
			
		||||
            if(ccf2.gt.ccfbest2) then
 | 
			
		||||
               ccfbest2=ccf2
 | 
			
		||||
               lagpk2=lag
 | 
			
		||||
               ipol2=ip
 | 
			
		||||
            endif
 | 
			
		||||
         enddo
 | 
			
		||||
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
C  Find rms level on baseline of "ccfblue", for normalization.
 | 
			
		||||
      sum=0.
 | 
			
		||||
      do lag=-26,26
 | 
			
		||||
         if(abs(lag-lagpk).gt.1) sum=sum + ccf(lag,ipol1)
 | 
			
		||||
      enddo
 | 
			
		||||
      base=sum/50.0
 | 
			
		||||
      sq=0.
 | 
			
		||||
      do lag=-26,26
 | 
			
		||||
         if(abs(lag-lagpk).gt.1) sq=sq + (ccf(lag,ipol1)-base)**2
 | 
			
		||||
      enddo
 | 
			
		||||
      rms=sqrt(sq/49.0)
 | 
			
		||||
      sync1=ccfbest/rms - 4.0
 | 
			
		||||
      dt1=2.5 + lagpk*(2048.0/11025.0)
 | 
			
		||||
 | 
			
		||||
C  Find base level for normalizing snr2.
 | 
			
		||||
      do i=1,nhsym
 | 
			
		||||
         tmp1(i)=ss(ipol2,i)
 | 
			
		||||
      enddo
 | 
			
		||||
      call pctile(tmp1,tmp2,nhsym,40,base)
 | 
			
		||||
      snr2=0.398107*ccfbest2/base                !### empirical
 | 
			
		||||
      syncshort=0.5*ccfbest2/rms - 4.0           !### better normalizer than rms?
 | 
			
		||||
      dt2=2.5 + lagpk2*(2048.0/11025.0)
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										57
									
								
								char.h
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								char.h
									
									
									
									
									
								
							@ -1,57 +0,0 @@
 | 
			
		||||
/* Include file to configure the RS codec for character symbols
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright 2002, Phil Karn, KA9Q
 | 
			
		||||
 * May be used under the terms of the GNU General Public License (GPL)
 | 
			
		||||
 */
 | 
			
		||||
#define DTYPE unsigned char
 | 
			
		||||
 | 
			
		||||
/* Reed-Solomon codec control block */
 | 
			
		||||
struct rs {
 | 
			
		||||
  int mm;              /* Bits per symbol */
 | 
			
		||||
  int nn;              /* Symbols per block (= (1<<mm)-1) */
 | 
			
		||||
  DTYPE *alpha_to;     /* log lookup table */
 | 
			
		||||
  DTYPE *index_of;     /* Antilog lookup table */
 | 
			
		||||
  DTYPE *genpoly;      /* Generator polynomial */
 | 
			
		||||
  int nroots;     /* Number of generator roots = number of parity symbols */
 | 
			
		||||
  int fcr;        /* First consecutive root, index form */
 | 
			
		||||
  int prim;       /* Primitive element, index form */
 | 
			
		||||
  int iprim;      /* prim-th root of 1, index form */
 | 
			
		||||
  int pad;        /* Padding bytes in shortened block */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static inline int modnn(struct rs *rs,int x){
 | 
			
		||||
  while (x >= rs->nn) {
 | 
			
		||||
    x -= rs->nn;
 | 
			
		||||
    x = (x >> rs->mm) + (x & rs->nn);
 | 
			
		||||
  }
 | 
			
		||||
  return x;
 | 
			
		||||
}
 | 
			
		||||
#define MODNN(x) modnn(rs,x)
 | 
			
		||||
 | 
			
		||||
#define MM (rs->mm)
 | 
			
		||||
#define NN (rs->nn)
 | 
			
		||||
#define ALPHA_TO (rs->alpha_to) 
 | 
			
		||||
#define INDEX_OF (rs->index_of)
 | 
			
		||||
#define GENPOLY (rs->genpoly)
 | 
			
		||||
#define NROOTS (rs->nroots)
 | 
			
		||||
#define FCR (rs->fcr)
 | 
			
		||||
#define PRIM (rs->prim)
 | 
			
		||||
#define IPRIM (rs->iprim)
 | 
			
		||||
#define PAD (rs->pad)
 | 
			
		||||
#define A0 (NN)
 | 
			
		||||
 | 
			
		||||
#define ENCODE_RS encode_rs_char
 | 
			
		||||
#define DECODE_RS decode_rs_char
 | 
			
		||||
#define INIT_RS init_rs_char
 | 
			
		||||
#define FREE_RS free_rs_char
 | 
			
		||||
 | 
			
		||||
void ENCODE_RS(void *p,DTYPE *data,DTYPE *parity);
 | 
			
		||||
int DECODE_RS(void *p,DTYPE *data,int *eras_pos,int no_eras);
 | 
			
		||||
void *INIT_RS(int symsize,int gfpoly,int fcr,
 | 
			
		||||
		    int prim,int nroots,int pad);
 | 
			
		||||
void FREE_RS(void *p);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										31
									
								
								chkmsg.f
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								chkmsg.f
									
									
									
									
									
								
							@ -1,31 +0,0 @@
 | 
			
		||||
      subroutine chkmsg(message,cok,nspecial,flip)
 | 
			
		||||
 | 
			
		||||
      character message*22,cok*3
 | 
			
		||||
 | 
			
		||||
      nspecial=0
 | 
			
		||||
      flip=1.0
 | 
			
		||||
      cok="   "
 | 
			
		||||
 | 
			
		||||
      do i=22,1,-1
 | 
			
		||||
         if(message(i:i).ne.' ') go to 10
 | 
			
		||||
      enddo
 | 
			
		||||
      i=22
 | 
			
		||||
 | 
			
		||||
 10   if(i.ge.11 .and. (message(i-3:i).eq.' OOO') .or. 
 | 
			
		||||
     +    (message(20:22).eq.' OO')) then
 | 
			
		||||
         cok='OOO'
 | 
			
		||||
         flip=-1.0
 | 
			
		||||
         if(message(20:22).eq.' OO') then
 | 
			
		||||
            message=message(1:19)
 | 
			
		||||
         else
 | 
			
		||||
            message=message(1:i-4)
 | 
			
		||||
         endif
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
!      if(message(1:3).eq.'ATT') nspecial=1
 | 
			
		||||
      if(message(1:2).eq.'RO')  nspecial=2
 | 
			
		||||
      if(message(1:3).eq.'RRR') nspecial=3
 | 
			
		||||
      if(message(1:2).eq.'73')  nspecial=4
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										42
									
								
								commons.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								commons.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
			
		||||
#ifndef COMMONS_H
 | 
			
		||||
#define COMMONS_H
 | 
			
		||||
 | 
			
		||||
#define NFFT 32768
 | 
			
		||||
 | 
			
		||||
extern "C" {
 | 
			
		||||
 | 
			
		||||
extern struct {                     //This is "common/datcom/..." in Fortran
 | 
			
		||||
  float d4[4*5760000];              //Raw I/Q data from Linrad
 | 
			
		||||
  float ss[4*322*NFFT];             //Half-symbol spectra at 0,45,90,135 deg pol
 | 
			
		||||
  float savg[4*NFFT];               //Avg spectra at 0,45,90,135 deg pol
 | 
			
		||||
  double fcenter;                   //Center freq from Linrad (MHz)
 | 
			
		||||
  int nutc;                         //UTC as integer, HHMM
 | 
			
		||||
  int idphi;                        //Phase correction for Y pol'n, degrees
 | 
			
		||||
  int mousedf;                      //User-selected DF
 | 
			
		||||
  int mousefqso;                    //User-selected QSO freq (kHz)
 | 
			
		||||
  int nagain;                       //1 ==> decode only at fQSO +/- Tol
 | 
			
		||||
  int ndepth;                       //How much hinted decoding to do?
 | 
			
		||||
  int ndiskdat;                     //1 ==> data read from *.tf2 or *.iq file
 | 
			
		||||
  int neme;                         //Hinted decoding tries only for EME calls
 | 
			
		||||
  int newdat;                       //1 ==> new data, must do long FFT
 | 
			
		||||
  int nfa;                          //Low decode limit (kHz)
 | 
			
		||||
  int nfb;                          //High decode limit (kHz)
 | 
			
		||||
  int nfcal;                        //Frequency correction, for calibration (Hz)
 | 
			
		||||
  int nfshift;                      //Shift of displayed center freq (kHz)
 | 
			
		||||
  int mcall3;                       //1 ==> CALL3.TXT has been modified
 | 
			
		||||
  int ntimeout;                     //Max for timeouts in Messages and BandMap
 | 
			
		||||
  int ntol;                         //+/- decoding range around fQSO (Hz)
 | 
			
		||||
  int nxant;                        //1 ==> add 45 deg to measured pol angle
 | 
			
		||||
  int map65RxLog;                   //Flags to control log files
 | 
			
		||||
  int nfsample;                     //Input sample rate
 | 
			
		||||
  int nxpol;                        //1 if using xpol antennas, 0 otherwise
 | 
			
		||||
  int mode65;                       //JT65 sub-mode: A=1, B=2, C=4
 | 
			
		||||
  char mycall[12];
 | 
			
		||||
  char mygrid[6];
 | 
			
		||||
  char hiscall[12];
 | 
			
		||||
  char hisgrid[6];
 | 
			
		||||
  char datetime[20];
 | 
			
		||||
} datcom_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // COMMONS_H
 | 
			
		||||
							
								
								
									
										220
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										220
									
								
								configure.ac
									
									
									
									
									
								
							@ -1,220 +0,0 @@
 | 
			
		||||
dnl $Id$
 | 
			
		||||
dnl Process this file with autoconf to produce a configure script.
 | 
			
		||||
 | 
			
		||||
dnl AC_PREREQ(2.61)
 | 
			
		||||
 | 
			
		||||
dnl Sneaky way to get an Id tag into the configure script
 | 
			
		||||
AC_COPYRIGHT([$Id$])
 | 
			
		||||
 | 
			
		||||
AC_INIT([map65],[0.9])
 | 
			
		||||
 | 
			
		||||
fail=0
 | 
			
		||||
 | 
			
		||||
AC_PREFIX_DEFAULT(/usr/local/)
 | 
			
		||||
 | 
			
		||||
OLD_CFLAGS="$CFLAGS"
 | 
			
		||||
dnl Checks for programs.
 | 
			
		||||
AC_PROG_CC
 | 
			
		||||
AC_LANG(C)
 | 
			
		||||
AC_PROG_F77
 | 
			
		||||
 | 
			
		||||
dnl Make sure autoconf doesn't interfere with cflags -jmallett
 | 
			
		||||
CFLAGS="$OLD_CFLAGS"
 | 
			
		||||
 | 
			
		||||
dnl Lets guess at some likely places for extra libs/includes XXX -db
 | 
			
		||||
CPPFLAGS="-I/usr/local/include ${CPPFLAGS}"
 | 
			
		||||
LDFLAGS="-L/usr/local/lib ${LDFLAGS}"
 | 
			
		||||
LIBS=" -lpthread ${LIBS}"
 | 
			
		||||
FFLAGS_GFORTRAN="${FFLAGS} -fno-range-check -ffixed-line-length-none\
 | 
			
		||||
			-Wall -fbounds-check -fno-second-underscore -fPIC"
 | 
			
		||||
FFLAGS_G95="${FFLAGS} -Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC"
 | 
			
		||||
#-Wall -Wno-precision-loss -fbounds-check -fno-second-underscore -fPIC
 | 
			
		||||
 | 
			
		||||
AX_CHECK_GFORTRAN
 | 
			
		||||
AX_CHECK_PORTAUDIO
 | 
			
		||||
 | 
			
		||||
dnl If we support -g, use it!
 | 
			
		||||
if test "$ac_cv_prog_cc_g" = yes; then
 | 
			
		||||
		CFLAGS="$CFLAGS -g"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
dnl jdc -- If CFLAGS is defined, best use it everywhere...
 | 
			
		||||
dnl NOTE: jv says it must be added to the *END*, because things like
 | 
			
		||||
dnl "gcc -O9 -O2" will result in -O2 getting preference.  How stupid.
 | 
			
		||||
if test ! -z "$CFLAGS"; then
 | 
			
		||||
	CFLAGS="$CFLAGS $CFLAGS"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AC_ISC_POSIX
 | 
			
		||||
AC_C_INLINE
 | 
			
		||||
AC_PROG_GCC_TRADITIONAL
 | 
			
		||||
AC_PROG_MAKE_SET
 | 
			
		||||
AC_PROG_INSTALL
 | 
			
		||||
AC_PATH_PROG(RM, rm)
 | 
			
		||||
AC_PATH_PROG(CP, cp)
 | 
			
		||||
AC_PATH_PROG(MV, mv)
 | 
			
		||||
AC_PATH_PROG(LN, ln)
 | 
			
		||||
AC_PATH_PROG(SED, sed)
 | 
			
		||||
AC_PATH_PROG(AR, ar)
 | 
			
		||||
AC_PATH_PROG(LD, ld)
 | 
			
		||||
AC_PATH_PROG(TEST, [test], [test])
 | 
			
		||||
AC_PATH_PROG(PYTHON, python)
 | 
			
		||||
AC_PATH_PROG(F2PY, f2py)
 | 
			
		||||
AC_MSG_CHECKING([OS])
 | 
			
		||||
OS=`uname`
 | 
			
		||||
AC_SUBST(OS, "${OS}")
 | 
			
		||||
 | 
			
		||||
dnl Checks for header files.
 | 
			
		||||
 | 
			
		||||
AC_HEADER_STDC
 | 
			
		||||
 | 
			
		||||
AC_CHECK_HEADERS([inttypes.h stdint.h sys/resource.h sys/param.h errno.h \
 | 
			
		||||
sys/syslog.h stddef.h libgen.h sys/wait.h wait.h stdio.h termios.h \
 | 
			
		||||
sys/resource.h linux/ppdev.h dev/ppbus/ppi.h sys/stat.h fcntl.h sys/ioctl.h ])
 | 
			
		||||
 | 
			
		||||
AC_HEADER_TIME
 | 
			
		||||
 | 
			
		||||
AC_CHECK_HEADER([fftw3.h], [HAS_FFTW3_H=1], [HAS_FFTW3_H=0])
 | 
			
		||||
AC_CHECK_HEADER([samplerate.h], [HAS_SAMPLERATE_H=1], [HAS_SAMPLERATE_H=0])
 | 
			
		||||
 | 
			
		||||
dnl See whether we can include both string.h and strings.h.
 | 
			
		||||
AC_CACHE_CHECK([whether string.h and strings.h may both be included],
 | 
			
		||||
gcc_cv_header_string,
 | 
			
		||||
[
 | 
			
		||||
	AC_COMPILE_IFELSE(
 | 
			
		||||
	[#include <string.h>
 | 
			
		||||
	#include <strings.h>], 
 | 
			
		||||
	[gcc_cv_header_string=yes],
 | 
			
		||||
	[gcc_cv_header_string=no])
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
if test "$gcc_cv_header_string" = "yes"; then
 | 
			
		||||
	AC_DEFINE(STRING_WITH_STRINGS, 1, [Define to 1 if string.h may be included along with strings.h])
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
dnl check for a fortran shim entry point
 | 
			
		||||
AC_CHECK_LIB(fftw3f, sfftw_destroy_plan_, \
 | 
			
		||||
	[HAS_FFTW3FLIBS=1], [HAS_FFTW3FLIBS=0])
 | 
			
		||||
 | 
			
		||||
dnl Check for stdarg.h - if we can't find it, halt configure
 | 
			
		||||
AC_CHECK_HEADER(stdarg.h, , [AC_MSG_ERROR([** stdarg.h could not be found - wsjt will not compile without it **])])
 | 
			
		||||
 | 
			
		||||
dnl Debug-related options
 | 
			
		||||
dnl =====================
 | 
			
		||||
 | 
			
		||||
AC_ARG_ENABLE(clobber,
 | 
			
		||||
AC_HELP_STRING([--enable-clobber], [Don't preserve old binaries on make install]),
 | 
			
		||||
[clobber=$enableval], [clobber=no])
 | 
			
		||||
 | 
			
		||||
if test "$clobber" = yes; then
 | 
			
		||||
	AC_SUBST(CLOBBER, yes)
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AC_ARG_ENABLE(assert,
 | 
			
		||||
AC_HELP_STRING([--enable-assert],[Enable assert().]),
 | 
			
		||||
[assert=$enableval], [assert=no])
 | 
			
		||||
 | 
			
		||||
if test "$assert" = no; then
 | 
			
		||||
	AC_DEFINE(NDEBUG, 1, [Define this to disable debugging support.])
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test "$prefix" = "NONE"; then 
 | 
			
		||||
	prefix=${ac_default_prefix}
 | 
			
		||||
else
 | 
			
		||||
 | 
			
		||||
dnl Don't get bitten by Cygwin's stupidity if the user specified
 | 
			
		||||
dnl a custom prefix with a trailing slash
 | 
			
		||||
 | 
			
		||||
	prefix=`echo ${ac_default_prefix} | sed 's/\/$//'`
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
dnl sanity tests.
 | 
			
		||||
dnl =============
 | 
			
		||||
 | 
			
		||||
if test -z $FC ; then
 | 
			
		||||
	fail=1
 | 
			
		||||
	echo "You need g95 or gfortran to compile this program!"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test $HAS_FFTW3_H -eq 0; then
 | 
			
		||||
	fail=1
 | 
			
		||||
	echo "You need to install the fftw3 libraries"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test $HAS_SAMPLERATE_H -eq 0; then
 | 
			
		||||
	fail=1
 | 
			
		||||
	echo "You need to install the samplerate library"
 | 
			
		||||
else
 | 
			
		||||
        AC_DEFINE(HAS_SAMPLERATE_H, 1, )
 | 
			
		||||
	LIBS="${LIBS} -lsamplerate"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test $HAS_PORTAUDIO -eq 1; then
 | 
			
		||||
	AC_DEFINE(HAS_PORTAUDIO, 1, )
 | 
			
		||||
	AC_DEFINE(HAS_PORTAUDIO_H, 1, )
 | 
			
		||||
	AC_DEFINE(HAS_PORTAUDIO_LIB, 1, )
 | 
			
		||||
else
 | 
			
		||||
	fail=1
 | 
			
		||||
	echo "This program needs portaudio v19 to compile."
 | 
			
		||||
	echo "Please use --with-portaudio-include-dir= and"
 | 
			
		||||
	echo " --with-portaudio-lib-dir= to set the paths."
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test $HAS_FFTW3_H -eq 1; then
 | 
			
		||||
	AC_DEFINE(HAS_FFTW3_H, 1, )
 | 
			
		||||
else
 | 
			
		||||
	fail=1
 | 
			
		||||
	echo "You are missing the fftw3.h include file"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test $HAS_FFTW3FLIBS -eq 1; then
 | 
			
		||||
	LIBS="${LIBS} -lfftw3f"
 | 
			
		||||
	AC_DEFINE(HAS_FFTW3FLIBS, 1, )
 | 
			
		||||
else
 | 
			
		||||
	fail=1
 | 
			
		||||
	echo "You are missing the fortran shim in libfftw3."
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if test "$F2PY" = ""; then
 | 
			
		||||
	echo "You are missing f2py, trying local copy."
 | 
			
		||||
	F2PY="python f2py.py";	
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
dnl 
 | 
			
		||||
dnl
 | 
			
		||||
dnl If fail a pre-requisite then fail
 | 
			
		||||
dnl
 | 
			
		||||
 | 
			
		||||
if test $fail -eq 1; then
 | 
			
		||||
	AC_MSG_ERROR([Please check error messages and install missing packages.])
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AC_SUBST(PREFIX, "${prefix}")
 | 
			
		||||
AC_SUBST(CPPFLAGS, "${CPPFLAGS}")
 | 
			
		||||
AC_SUBST(LDFLAGS, "${LDFLAGS}")
 | 
			
		||||
AC_SUBST(LIBS, "${LIBS}")
 | 
			
		||||
AC_SUBST(CFLAGS)
 | 
			
		||||
AC_SUBST(FFLAGS)
 | 
			
		||||
AC_SUBST(F2PY, "${F2PY}")
 | 
			
		||||
AC_CONFIG_FILES(Makefile)
 | 
			
		||||
AC_OUTPUT
 | 
			
		||||
 | 
			
		||||
dnl do summary
 | 
			
		||||
 | 
			
		||||
echo
 | 
			
		||||
echo
 | 
			
		||||
 | 
			
		||||
if test $g95 = "yes"; then
 | 
			
		||||
	echo "Using g95 as fortran compiler.";
 | 
			
		||||
elif test $gfortran = "yes"; then
 | 
			
		||||
	echo "Using gfortran as fortran compiler.";
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo
 | 
			
		||||
echo "Compiling $PACKAGE_NAME $PACKAGE_VERSION"
 | 
			
		||||
echo
 | 
			
		||||
 | 
			
		||||
echo "Installing into: $prefix"
 | 
			
		||||
 | 
			
		||||
echo
 | 
			
		||||
@ -1,5 +0,0 @@
 | 
			
		||||
parameter (NSMAX=60*96000)          !Samples per 60 s file
 | 
			
		||||
real*4 dd                           !92 MB: raw data from Linrad timf2
 | 
			
		||||
character*80 fname80
 | 
			
		||||
common/datcom/dd(4,NSMAX,2),nutc,newdat2,kbuf,kxp,kk,kkdone,nlost,   &
 | 
			
		||||
     nlen,fname80
 | 
			
		||||
							
								
								
									
										5
									
								
								db.f
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								db.f
									
									
									
									
									
								
							@ -1,5 +0,0 @@
 | 
			
		||||
	real function db(x)
 | 
			
		||||
	db=-99.0
 | 
			
		||||
	if(x.gt.1.259e-10) db=10.0*log10(x)
 | 
			
		||||
	return
 | 
			
		||||
	end
 | 
			
		||||
							
								
								
									
										87
									
								
								decode1.f90
									
									
									
									
									
								
							
							
						
						
									
										87
									
								
								decode1.f90
									
									
									
									
									
								
							@ -1,87 +0,0 @@
 | 
			
		||||
subroutine decode1(iarg)
 | 
			
		||||
 | 
			
		||||
! Get data and parameters from gcom, then call the decoders when needed.
 | 
			
		||||
! This routine runs in a background thread and will never return.
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  use dflib
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  character sending0*28,mode0*6,cshort*11
 | 
			
		||||
  integer sendingsh0
 | 
			
		||||
 | 
			
		||||
  include 'datcom.f90'
 | 
			
		||||
  include 'gcom1.f90'
 | 
			
		||||
  include 'gcom2.f90'
 | 
			
		||||
  include 'gcom3.f90'
 | 
			
		||||
  include 'gcom4.f90'
 | 
			
		||||
  data kbuf0/0/,ns00/-999/
 | 
			
		||||
  data sending0/'                      '/
 | 
			
		||||
  save
 | 
			
		||||
 | 
			
		||||
  kkdone=-99
 | 
			
		||||
  ns0=999999
 | 
			
		||||
  newdat2=0
 | 
			
		||||
  kbuf=1
 | 
			
		||||
 | 
			
		||||
10 continue
 | 
			
		||||
  if(newdat2.gt.0) then
 | 
			
		||||
     call getfile2(fname80,nlen)
 | 
			
		||||
     newdat2=0
 | 
			
		||||
     kbuf=1
 | 
			
		||||
     kk=NSMAX
 | 
			
		||||
     kkdone=0
 | 
			
		||||
     newdat=1
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  if(kbuf.ne.kbuf0) kkdone=0
 | 
			
		||||
  kbuf0=kbuf
 | 
			
		||||
  kkk=kk
 | 
			
		||||
  if(kbuf.eq.2) kkk=kk-5760000
 | 
			
		||||
  n=Tsec
 | 
			
		||||
 | 
			
		||||
  if((ndiskdat.eq.1 .or. ndecoding.eq.0) .and. ((kkk-kkdone).gt.32768)) then
 | 
			
		||||
     call symspec(dd,kbuf,kk,kkdone,nutc,newdat)
 | 
			
		||||
     call sleep_msec(10)
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  if(ndecoding.gt.0 .and. mode(1:4).eq.'JT65') then
 | 
			
		||||
     ndecdone=0
 | 
			
		||||
     call map65a(newdat)
 | 
			
		||||
     if(mousebutton.eq.0) ndecoding0=ndecoding
 | 
			
		||||
     ndecoding=0
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  if(ns0.lt.0) then
 | 
			
		||||
     rewind 21
 | 
			
		||||
     ns0=999999
 | 
			
		||||
  endif
 | 
			
		||||
  if(n.lt.ns0 .and. utcdate(1:1).eq.'2') then
 | 
			
		||||
     call cs_lock('decode1a')
 | 
			
		||||
     write(21,1001) utcdate(:11)
 | 
			
		||||
1001 format(/'UTC Date: ',a11/'---------------------')
 | 
			
		||||
     ns0=n
 | 
			
		||||
     call cs_unlock
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  if(transmitting.eq.1 .and. (sending.ne.sending0 .or.       &
 | 
			
		||||
       sendingsh.ne.sendingsh0 .or. mode.ne.mode0)) then
 | 
			
		||||
     ih=n/3600
 | 
			
		||||
     im=mod(n/60,60)
 | 
			
		||||
     is=mod(n,60)
 | 
			
		||||
     cshort='           '
 | 
			
		||||
     if(sendingsh.eq.1) cshort='(Shorthand)'
 | 
			
		||||
     call cs_lock('decode1b')
 | 
			
		||||
     write(21,1010) ih,im,is,mode,sending,cshort
 | 
			
		||||
1010 format(3i2.2,'  Transmitting: ',a6,2x,a28,2x,a11)
 | 
			
		||||
     call flushqqq(21)
 | 
			
		||||
     call cs_unlock
 | 
			
		||||
     sending0=sending
 | 
			
		||||
     sendingsh0=sendingsh
 | 
			
		||||
     mode0=mode
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  call sleep_msec(100)                  !### was 100
 | 
			
		||||
  go to 10
 | 
			
		||||
 | 
			
		||||
end subroutine decode1
 | 
			
		||||
							
								
								
									
										110
									
								
								decode1a.f
									
									
									
									
									
								
							
							
						
						
									
										110
									
								
								decode1a.f
									
									
									
									
									
								
							@ -1,110 +0,0 @@
 | 
			
		||||
      subroutine decode1a(dd,newdat,freq,nflip,
 | 
			
		||||
     +         mycall,hiscall,hisgrid,neme,ndepth,nqd,dphi,ndphi,
 | 
			
		||||
     +         ipol,sync2,a,dt,pol,nkv,nhist,qual,decoded)
 | 
			
		||||
 | 
			
		||||
C  Apply AFC corrections to a candidate JT65 signal, and then try
 | 
			
		||||
C  to decode it.
 | 
			
		||||
 | 
			
		||||
      parameter (NFFT1=77760,NFFT2=2430)
 | 
			
		||||
      parameter (NMAX=60*96000)          !Samples per 60 s
 | 
			
		||||
      real*4  dd(4,NMAX)                 !92 MB: raw data from Linrad timf2
 | 
			
		||||
      complex c2x(NMAX/4), c2y(NMAX/4)   !After 1/4 filter and downsample
 | 
			
		||||
      complex c3x(NMAX/16),c3y(NMAX/16)  !After 1/16 filter and downsample
 | 
			
		||||
      complex c4x(NMAX/64),c4y(NMAX/64)  !After 1/64 filter and downsample
 | 
			
		||||
      complex cx(NMAX/64), cy(NMAX/64)   !Data at 1378.125 samples/s
 | 
			
		||||
      complex c5x(NMAX/256),c5y(NMAX/256),c5y0(NMAX/256)
 | 
			
		||||
      complex c5a(256),    c5b(256)
 | 
			
		||||
      complex z
 | 
			
		||||
 | 
			
		||||
      real s2(256,126)
 | 
			
		||||
      real a(5)
 | 
			
		||||
      real*8 samratio
 | 
			
		||||
      logical first
 | 
			
		||||
      character decoded*22
 | 
			
		||||
      character mycall*12,hiscall*12,hisgrid*6
 | 
			
		||||
      data first/.true./,jjjmin/1000/,jjjmax/-1000/
 | 
			
		||||
      save
 | 
			
		||||
 | 
			
		||||
C  Mix sync tone to baseband, low-pass filter, and decimate by 64
 | 
			
		||||
      dt00=dt
 | 
			
		||||
C  If freq=125.0 kHz, f0=48000 Hz.
 | 
			
		||||
      f0=1000*(freq-77.0)                  !Freq of sync tone (0-96000 Hz)
 | 
			
		||||
      call filbig(dd,NMAX,f0,newdat,cx,cy,n5)
 | 
			
		||||
      joff=0
 | 
			
		||||
      sqa=0.
 | 
			
		||||
      sqb=0.
 | 
			
		||||
      do i=1,n5
 | 
			
		||||
         sqa=sqa + real(cx(i))**2 + aimag(cx(i))**2
 | 
			
		||||
         sqb=sqb + real(cy(i))**2 + aimag(cy(i))**2
 | 
			
		||||
      enddo
 | 
			
		||||
      sqa=sqa/n5
 | 
			
		||||
      sqb=sqb/n5
 | 
			
		||||
 | 
			
		||||
C  Find best DF, f1, f2, DT, and pol
 | 
			
		||||
 | 
			
		||||
!      a(5)=dt00
 | 
			
		||||
!      fsample=1378.125
 | 
			
		||||
!      i0=nint((a(5)+0.5)*fsample)
 | 
			
		||||
!      if(i0.lt.1) i0=1
 | 
			
		||||
!      nz=n5+1-i0
 | 
			
		||||
!      call afc65b(cx(i0),cy(i0),nz,fsample,nflip,ipol,a,dt,
 | 
			
		||||
!     +    ccfbest,dtbest)
 | 
			
		||||
 | 
			
		||||
      call fil6521(cx,n5,c5x,n6)
 | 
			
		||||
      call fil6521(cy,n5,c5y0,n6)
 | 
			
		||||
 | 
			
		||||
!  Adjust for cable length difference:
 | 
			
		||||
      z=cmplx(cos(dphi),sin(dphi))
 | 
			
		||||
      do i=1,n6
 | 
			
		||||
         c5y(i)=z*c5y0(i)
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      fsample=1378.125/4.
 | 
			
		||||
      a(5)=dt00
 | 
			
		||||
      i0=nint((a(5)+0.5)*fsample) - 2
 | 
			
		||||
      if(i0.lt.1) i0=1
 | 
			
		||||
      nz=n6+1-i0
 | 
			
		||||
 | 
			
		||||
      call afc65b(c5x(i0),c5y(i0),nz,fsample,nflip,ipol,a,dt,
 | 
			
		||||
     +     ccfbest,dtbest)
 | 
			
		||||
 | 
			
		||||
      pol=a(4)/57.2957795
 | 
			
		||||
      aa=cos(pol)
 | 
			
		||||
      bb=sin(pol)
 | 
			
		||||
      sq0=aa*aa*sqa + bb*bb*sqb
 | 
			
		||||
      sync2=3.7*ccfbest/sq0
 | 
			
		||||
 | 
			
		||||
C  Apply AFC corrections to the time-domain signal
 | 
			
		||||
      call twkfreq(cx,cy,n5,a)
 | 
			
		||||
 | 
			
		||||
C  Compute spectrum at best polarization for each half symbol.
 | 
			
		||||
C  Adding or subtracting a small number (e.g., 5) to j may make it decode.
 | 
			
		||||
      nsym=126
 | 
			
		||||
      nfft=256
 | 
			
		||||
      j=(dt00+dtbest+2.685)*1378.125 + joff
 | 
			
		||||
      if(j.lt.0) j=0
 | 
			
		||||
      do k=1,nsym
 | 
			
		||||
         do i=1,nfft
 | 
			
		||||
            j=j+1
 | 
			
		||||
            c5a(i)=aa*cx(j) + bb*cy(j)
 | 
			
		||||
         enddo
 | 
			
		||||
         call four2a(c5a,nfft,1,1,1)
 | 
			
		||||
         do i=1,nfft
 | 
			
		||||
            j=j+1
 | 
			
		||||
            c5b(i)=aa*cx(j) + bb*cy(j)
 | 
			
		||||
         enddo
 | 
			
		||||
         call four2a(c5b,nfft,1,1,1)
 | 
			
		||||
 | 
			
		||||
         do i=1,256
 | 
			
		||||
            s2(i,k)=real(c5a(i))**2 + aimag(c5a(i))**2 +
 | 
			
		||||
     +           real(c5b(i))**2 + aimag(c5b(i))**2
 | 
			
		||||
         enddo
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      flip=nflip
 | 
			
		||||
      call decode65b(s2,flip,mycall,hiscall,hisgrid,neme,ndepth,
 | 
			
		||||
     +    nqd,nkv,nhist,qual,decoded)
 | 
			
		||||
      dt=dt00 + dtbest
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										186
									
								
								deep65.f
									
									
									
									
									
								
							
							
						
						
									
										186
									
								
								deep65.f
									
									
									
									
									
								
							@ -1,186 +0,0 @@
 | 
			
		||||
      subroutine deep65(s3,mode65,neme,flip,mycall,hiscall,
 | 
			
		||||
     +  hisgrid,decoded,qual)
 | 
			
		||||
 | 
			
		||||
      parameter (MAXCALLS=7000,MAXRPT=63)
 | 
			
		||||
      real s3(64,63)
 | 
			
		||||
      character callsign*12,grid*4,message*22,hisgrid*6,c*1,ceme*3
 | 
			
		||||
      character*12 mycall,hiscall
 | 
			
		||||
      character mycall0*12,hiscall0*12,hisgrid0*6
 | 
			
		||||
      character*22 decoded
 | 
			
		||||
      character*22 testmsg(2*MAXCALLS + 2 + MAXRPT)
 | 
			
		||||
      character*15 callgrid(MAXCALLS)
 | 
			
		||||
      character*180 line
 | 
			
		||||
      character*4 rpt(MAXRPT)
 | 
			
		||||
      integer ncode(63,2*MAXCALLS + 2 + MAXRPT)
 | 
			
		||||
      real pp(2*MAXCALLS + 2 + MAXRPT)
 | 
			
		||||
      common/mrscom/ mrs(63),mrs2(63)
 | 
			
		||||
      common/c3com/ mcall3a
 | 
			
		||||
 | 
			
		||||
      data neme0/-99/
 | 
			
		||||
      data rpt/'-01','-02','-03','-04','-05',
 | 
			
		||||
     +         '-06','-07','-08','-09','-10',
 | 
			
		||||
     +         '-11','-12','-13','-14','-15',
 | 
			
		||||
     +         '-16','-17','-18','-19','-20',
 | 
			
		||||
     +         '-21','-22','-23','-24','-25',
 | 
			
		||||
     +         '-26','-27','-28','-29','-30',
 | 
			
		||||
     +         'R-01','R-02','R-03','R-04','R-05',
 | 
			
		||||
     +         'R-06','R-07','R-08','R-09','R-10',
 | 
			
		||||
     +         'R-11','R-12','R-13','R-14','R-15',
 | 
			
		||||
     +         'R-16','R-17','R-18','R-19','R-20',
 | 
			
		||||
     +         'R-21','R-22','R-23','R-24','R-25',
 | 
			
		||||
     +         'R-26','R-27','R-28','R-29','R-30',
 | 
			
		||||
     +         'RO','RRR','73'/
 | 
			
		||||
      save
 | 
			
		||||
 | 
			
		||||
      if(mycall.eq.mycall0 .and. hiscall.eq.hiscall0 .and. 
 | 
			
		||||
     +   hisgrid.eq.hisgrid0 .and. mcall3a.eq.0 .and.
 | 
			
		||||
     +   neme.eq.neme0) go to 30
 | 
			
		||||
 | 
			
		||||
      mcall3a=0
 | 
			
		||||
      call cs_lock('deep65a')
 | 
			
		||||
      rewind 23
 | 
			
		||||
      k=0
 | 
			
		||||
      icall=0
 | 
			
		||||
      do n=1,MAXCALLS
 | 
			
		||||
         if(n.eq.1) then
 | 
			
		||||
            callsign=hiscall
 | 
			
		||||
            do i=4,12
 | 
			
		||||
               if(ichar(callsign(i:i)).eq.0) callsign(i:i)=' '
 | 
			
		||||
            enddo
 | 
			
		||||
            grid=hisgrid(1:4)
 | 
			
		||||
            if(ichar(grid(3:3)).eq.0) grid(3:3)=' '
 | 
			
		||||
            if(ichar(grid(4:4)).eq.0) grid(4:4)=' '
 | 
			
		||||
         else
 | 
			
		||||
            read(23,1002,end=20) line
 | 
			
		||||
 1002       format (A80)
 | 
			
		||||
            if(line(1:4).eq.'ZZZZ') go to 20
 | 
			
		||||
            if(line(1:2).eq.'//') go to 10
 | 
			
		||||
            i1=index(line,',')
 | 
			
		||||
            if(i1.lt.4) go to 10
 | 
			
		||||
            i2=index(line(i1+1:),',')
 | 
			
		||||
            if(i2.lt.5) go to 10
 | 
			
		||||
            i2=i2+i1
 | 
			
		||||
            i3=index(line(i2+1:),',')
 | 
			
		||||
            if(i3.lt.1) i3=index(line(i2+1:),' ')
 | 
			
		||||
            i3=i2+i3
 | 
			
		||||
            callsign=line(1:i1-1)
 | 
			
		||||
            grid=line(i1+1:i2-1)
 | 
			
		||||
            ceme=line(i2+1:i3-1)
 | 
			
		||||
            if(neme.eq.1 .and. ceme.ne.'EME') go to 10
 | 
			
		||||
         endif
 | 
			
		||||
 | 
			
		||||
         icall=icall+1
 | 
			
		||||
         j1=index(mycall,' ') - 1
 | 
			
		||||
         if(j1.le.-1) j1=12
 | 
			
		||||
         if(j1.lt.3) j1=6
 | 
			
		||||
         j2=index(callsign,' ') - 1
 | 
			
		||||
         if(j2.le.-1) j2=12
 | 
			
		||||
         if(j2.lt.3) j2=6
 | 
			
		||||
         j3=index(mycall,'/')                 ! j3>0 means compound mycall
 | 
			
		||||
         j4=index(callsign,'/')               ! j4>0 means compound hiscall
 | 
			
		||||
         callgrid(icall)=callsign(1:j2)
 | 
			
		||||
 | 
			
		||||
         mz=1
 | 
			
		||||
! Allow MyCall + HisCall + rpt (?)
 | 
			
		||||
         if(n.eq.1 .and. j3.lt.1 .and. j4.lt.1 .and.
 | 
			
		||||
     +     flip.gt.0.0 .and. callsign(1:6).ne.'      ') mz=MAXRPT+1
 | 
			
		||||
         do m=1,mz
 | 
			
		||||
            if(m.gt.1) grid=rpt(m-1)
 | 
			
		||||
            if(j3.lt.1 .and.j4.lt.1) 
 | 
			
		||||
     +         callgrid(icall)=callsign(1:j2)//' '//grid
 | 
			
		||||
            message=mycall(1:j1)//' '//callgrid(icall)
 | 
			
		||||
            k=k+1
 | 
			
		||||
            testmsg(k)=message
 | 
			
		||||
            call encode65(message,ncode(1,k))
 | 
			
		||||
 | 
			
		||||
            if(n.ge.2) then
 | 
			
		||||
C  Insert CQ message
 | 
			
		||||
               if(j4.lt.1) callgrid(icall)=callsign(1:j2)//' '//grid
 | 
			
		||||
               message='CQ '//callgrid(icall)
 | 
			
		||||
               k=k+1
 | 
			
		||||
               testmsg(k)=message
 | 
			
		||||
               call encode65(message,ncode(1,k))
 | 
			
		||||
            endif
 | 
			
		||||
         enddo
 | 
			
		||||
 10      continue
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
 20   continue
 | 
			
		||||
      call cs_unlock
 | 
			
		||||
      ntot=k
 | 
			
		||||
      neme0=neme
 | 
			
		||||
 | 
			
		||||
 30   mycall0=mycall
 | 
			
		||||
      hiscall0=hiscall
 | 
			
		||||
      hisgrid0=hisgrid
 | 
			
		||||
      modified0=modified
 | 
			
		||||
      ref0=0.
 | 
			
		||||
      do j=1,63
 | 
			
		||||
         ref0=ref0 + s3(mrs(j),j)
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      p1=-1.e30
 | 
			
		||||
      p2=-1.e30
 | 
			
		||||
      do k=1,ntot
 | 
			
		||||
         pp(k)=0.
 | 
			
		||||
! Test all messages if flip=+1; skip the CQ messages if flip=-1.
 | 
			
		||||
         if(flip.gt.0.0 .or. testmsg(k)(1:3).ne.'CQ ') then
 | 
			
		||||
            sum=0.
 | 
			
		||||
            ref=ref0
 | 
			
		||||
            do j=1,63
 | 
			
		||||
               i=ncode(j,k)+1
 | 
			
		||||
               sum=sum + s3(i,j)
 | 
			
		||||
               if(i.eq.mrs(j)) then
 | 
			
		||||
                  ref=ref - s3(i,j) + s3(mrs2(j),j)
 | 
			
		||||
               endif
 | 
			
		||||
            enddo
 | 
			
		||||
            p=sum/ref
 | 
			
		||||
            pp(k)=p
 | 
			
		||||
            if(p.gt.p1) then
 | 
			
		||||
               p1=p
 | 
			
		||||
               ip1=k
 | 
			
		||||
            endif
 | 
			
		||||
         endif
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      do i=1,ntot
 | 
			
		||||
         if(pp(i).gt.p2 .and. pp(i).ne.p1) p2=pp(i)
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
C  ### DO NOT REMOVE ### 
 | 
			
		||||
      call cs_lock('deep65b')
 | 
			
		||||
      rewind 77
 | 
			
		||||
      write(77,*) p1,p2
 | 
			
		||||
      call cs_unlock
 | 
			
		||||
 | 
			
		||||
C  ### Works OK without it (in both Windows and Linux) if compiled 
 | 
			
		||||
C  ### without optimization.  However, in Windows this is a colossal 
 | 
			
		||||
C  ### pain because of the way McMillan Installer wants to run the 
 | 
			
		||||
C  ### compile step.
 | 
			
		||||
 | 
			
		||||
      if(mode65.eq.1) bias=max(1.12*p2,0.335)
 | 
			
		||||
      if(mode65.eq.2) bias=max(1.08*p2,0.405)
 | 
			
		||||
      if(mode65.ge.4) bias=max(1.04*p2,0.505)
 | 
			
		||||
 | 
			
		||||
      if(p2.eq.p1 .and. p1.ne.-1.e30) stop 'Error in deep65'
 | 
			
		||||
      qual=100.0*(p1-bias)
 | 
			
		||||
 | 
			
		||||
      decoded='                      '
 | 
			
		||||
      c=' '
 | 
			
		||||
 | 
			
		||||
      if(qual.gt.1.0) then
 | 
			
		||||
         if(qual.lt.6.0) c='?'
 | 
			
		||||
         decoded=testmsg(ip1)
 | 
			
		||||
      else
 | 
			
		||||
         qual=0.
 | 
			
		||||
      endif
 | 
			
		||||
      decoded(22:22)=c
 | 
			
		||||
 | 
			
		||||
C  Make sure everything is upper case.
 | 
			
		||||
      do i=1,22
 | 
			
		||||
         if(decoded(i:i).ge.'a' .and. decoded(i:i).le.'z') 
 | 
			
		||||
     +     decoded(i:i)=char(ichar(decoded(i:i))-32)
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										29
									
								
								detect.f
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								detect.f
									
									
									
									
									
								
							@ -1,29 +0,0 @@
 | 
			
		||||
      subroutine detect(data,npts,f,y)
 | 
			
		||||
 | 
			
		||||
C  Compute powers at the tone frequencies using 1-sample steps.
 | 
			
		||||
 | 
			
		||||
      parameter (NZ=11025,NSPD=25)
 | 
			
		||||
      real data(npts)
 | 
			
		||||
      real y(npts)
 | 
			
		||||
      complex c(NZ)
 | 
			
		||||
      complex csum
 | 
			
		||||
      data twopi/6.283185307/
 | 
			
		||||
 | 
			
		||||
      dpha=twopi*f/11025.0
 | 
			
		||||
      do i=1,npts
 | 
			
		||||
         c(i)=data(i)*cmplx(cos(dpha*i),-sin(dpha*i))
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      csum=0.
 | 
			
		||||
      do i=1,NSPD
 | 
			
		||||
         csum=csum+c(i)
 | 
			
		||||
      enddo
 | 
			
		||||
         
 | 
			
		||||
      y(1)=real(csum)**2 + aimag(csum)**2
 | 
			
		||||
      do i=2,npts-(NSPD-1)
 | 
			
		||||
         csum=csum-c(i-1)+c(i+NSPD-1)
 | 
			
		||||
         y(i)=real(csum)**2 + aimag(csum)**2
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										325
									
								
								devsetup.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										325
									
								
								devsetup.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,325 @@
 | 
			
		||||
#include "devsetup.h"
 | 
			
		||||
#include "mainwindow.h"
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
#include <portaudio.h>
 | 
			
		||||
 | 
			
		||||
#define MAXDEVICES 100
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------- DevSetup()
 | 
			
		||||
DevSetup::DevSetup(QWidget *parent) :	QDialog(parent)
 | 
			
		||||
{
 | 
			
		||||
  ui.setupUi(this);	//setup the dialog form
 | 
			
		||||
  m_restartSoundIn=false;
 | 
			
		||||
  m_restartSoundOut=false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DevSetup::~DevSetup()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::initDlg()
 | 
			
		||||
{
 | 
			
		||||
  int k,id;
 | 
			
		||||
  int valid_devices=0;
 | 
			
		||||
  int minChan[MAXDEVICES];
 | 
			
		||||
  int maxChan[MAXDEVICES];
 | 
			
		||||
  int minSpeed[MAXDEVICES];
 | 
			
		||||
  int maxSpeed[MAXDEVICES];
 | 
			
		||||
  char hostAPI_DeviceName[MAXDEVICES][50];
 | 
			
		||||
  char s[60];
 | 
			
		||||
  int numDevices=Pa_GetDeviceCount();
 | 
			
		||||
  getDev(&numDevices,hostAPI_DeviceName,minChan,maxChan,minSpeed,maxSpeed);
 | 
			
		||||
  k=0;
 | 
			
		||||
  for(id=0; id<numDevices; id++)  {
 | 
			
		||||
    if(96000 >= minSpeed[id] && 96000 <= maxSpeed[id]) {
 | 
			
		||||
      m_inDevList[k]=id;
 | 
			
		||||
      k++;
 | 
			
		||||
      sprintf(s,"%2d   %d  %-49s",id,maxChan[id],hostAPI_DeviceName[id]);
 | 
			
		||||
      QString t(s);
 | 
			
		||||
      ui.comboBoxSndIn->addItem(t);
 | 
			
		||||
      valid_devices++;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const PaDeviceInfo *pdi;
 | 
			
		||||
  int nchout;
 | 
			
		||||
  char *p,*p1;
 | 
			
		||||
  char p2[50];
 | 
			
		||||
  char pa_device_name[128];
 | 
			
		||||
  char pa_device_hostapi[128];
 | 
			
		||||
 | 
			
		||||
  k=0;
 | 
			
		||||
  for(id=0; id<numDevices; id++ )  {
 | 
			
		||||
    pdi=Pa_GetDeviceInfo(id);
 | 
			
		||||
    nchout=pdi->maxOutputChannels;
 | 
			
		||||
    if(nchout>=2) {
 | 
			
		||||
      m_outDevList[k]=id;
 | 
			
		||||
      k++;
 | 
			
		||||
      sprintf((char*)(pa_device_name),"%s",pdi->name);
 | 
			
		||||
      sprintf((char*)(pa_device_hostapi),"%s",
 | 
			
		||||
              Pa_GetHostApiInfo(pdi->hostApi)->name);
 | 
			
		||||
 | 
			
		||||
      p1=(char*)"";
 | 
			
		||||
      p=strstr(pa_device_hostapi,"MME");
 | 
			
		||||
      if(p!=NULL) p1=(char*)"MME";
 | 
			
		||||
      p=strstr(pa_device_hostapi,"Direct");
 | 
			
		||||
      if(p!=NULL) p1=(char*)"DirectX";
 | 
			
		||||
      p=strstr(pa_device_hostapi,"WASAPI");
 | 
			
		||||
      if(p!=NULL) p1=(char*)"WASAPI";
 | 
			
		||||
      p=strstr(pa_device_hostapi,"ASIO");
 | 
			
		||||
      if(p!=NULL) p1=(char*)"ASIO";
 | 
			
		||||
      p=strstr(pa_device_hostapi,"WDM-KS");
 | 
			
		||||
      if(p!=NULL) p1=(char*)"WDM-KS";
 | 
			
		||||
 | 
			
		||||
      sprintf(p2,"%2d   %-8s  %-39s",id,p1,pa_device_name);
 | 
			
		||||
      QString t(p2);
 | 
			
		||||
      ui.comboBoxSndOut->addItem(t);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ui.myCallEntry->setText(m_myCall);
 | 
			
		||||
  ui.myGridEntry->setText(m_myGrid);
 | 
			
		||||
  ui.idIntSpinBox->setValue(m_idInt);
 | 
			
		||||
  ui.pttComboBox->setCurrentIndex(m_pttPort);
 | 
			
		||||
  ui.astroFont->setValue(m_astroFont);
 | 
			
		||||
  ui.cbXpol->setChecked(m_xpol);
 | 
			
		||||
  ui.rbAntennaX->setChecked(m_xpolx);
 | 
			
		||||
  ui.saveDirEntry->setText(m_saveDir);
 | 
			
		||||
  ui.azelDirEntry->setText(m_azelDir);
 | 
			
		||||
  ui.dxccEntry->setText(m_dxccPfx);
 | 
			
		||||
  ui.timeoutSpinBox->setValue(m_timeout);
 | 
			
		||||
  ui.dPhiSpinBox->setValue(m_dPhi);
 | 
			
		||||
  ui.fCalSpinBox->setValue(m_fCal);
 | 
			
		||||
  ui.faddEntry->setText(QString::number(m_fAdd,'f',3));
 | 
			
		||||
  ui.networkRadioButton->setChecked(m_network);
 | 
			
		||||
  ui.soundCardRadioButton->setChecked(!m_network);
 | 
			
		||||
  ui.rb96000->setChecked(m_fs96000);
 | 
			
		||||
  ui.rb95238->setChecked(!m_fs96000);
 | 
			
		||||
  ui.comboBoxSndIn->setEnabled(!m_network);
 | 
			
		||||
  ui.comboBoxSndIn->setCurrentIndex(m_nDevIn);
 | 
			
		||||
  ui.comboBoxSndOut->setCurrentIndex(m_nDevOut);
 | 
			
		||||
  ui.sbPort->setValue(m_udpPort);
 | 
			
		||||
  ui.cbIQswap->setChecked(m_IQswap);
 | 
			
		||||
  ui.cb10db->setChecked(m_10db);
 | 
			
		||||
  ui.cbInitIQplus->setChecked(m_initIQplus);
 | 
			
		||||
  ui.mult570SpinBox->setValue(m_mult570);
 | 
			
		||||
  ui.cal570SpinBox->setValue(m_cal570);
 | 
			
		||||
  sscanf(m_colors.toAscii(),"%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x",
 | 
			
		||||
         &r,&g,&b,&r0,&g0,&b0,&r1,&g1,&b1,&r2,&g2,&b2,&r3,&g3,&b3);
 | 
			
		||||
  updateColorLabels();
 | 
			
		||||
  ui.sbBackgroundRed->setValue(r);
 | 
			
		||||
  ui.sbBackgroundGreen->setValue(g);
 | 
			
		||||
  ui.sbBackgroundBlue->setValue(b);
 | 
			
		||||
  ui.sbRed0->setValue(r0);
 | 
			
		||||
  ui.sbRed1->setValue(r1);
 | 
			
		||||
  ui.sbRed2->setValue(r2);
 | 
			
		||||
  ui.sbRed3->setValue(r3);
 | 
			
		||||
  ui.sbGreen0->setValue(g0);
 | 
			
		||||
  ui.sbGreen1->setValue(g1);
 | 
			
		||||
  ui.sbGreen2->setValue(g2);
 | 
			
		||||
  ui.sbGreen3->setValue(g3);
 | 
			
		||||
  ui.sbBlue0->setValue(b0);
 | 
			
		||||
  ui.sbBlue1->setValue(b1);
 | 
			
		||||
  ui.sbBlue2->setValue(b2);
 | 
			
		||||
  ui.sbBlue3->setValue(b3);
 | 
			
		||||
 | 
			
		||||
  m_paInDevice=m_inDevList[m_nDevIn];
 | 
			
		||||
  m_paOutDevice=m_outDevList[m_nDevOut];
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------- accept()
 | 
			
		||||
void DevSetup::accept()
 | 
			
		||||
{
 | 
			
		||||
  // Called when OK button is clicked.
 | 
			
		||||
  // Check to see whether SoundInThread must be restarted,
 | 
			
		||||
  // and save user parameters.
 | 
			
		||||
 | 
			
		||||
  if(m_network!=ui.networkRadioButton->isChecked() or
 | 
			
		||||
     m_nDevIn!=ui.comboBoxSndIn->currentIndex() or
 | 
			
		||||
     m_paInDevice!=m_inDevList[m_nDevIn] or
 | 
			
		||||
     m_xpol!=ui.cbXpol->isChecked() or
 | 
			
		||||
     m_udpPort!=ui.sbPort->value()) m_restartSoundIn=true;
 | 
			
		||||
 | 
			
		||||
  if(m_nDevOut!=ui.comboBoxSndOut->currentIndex() or
 | 
			
		||||
     m_paOutDevice!=m_outDevList[m_nDevOut]) m_restartSoundOut=true;
 | 
			
		||||
 | 
			
		||||
  m_myCall=ui.myCallEntry->text();
 | 
			
		||||
  m_myGrid=ui.myGridEntry->text();
 | 
			
		||||
  m_idInt=ui.idIntSpinBox->value();
 | 
			
		||||
  m_pttPort=ui.pttComboBox->currentIndex();
 | 
			
		||||
  m_astroFont=ui.astroFont->value();
 | 
			
		||||
  m_xpol=ui.cbXpol->isChecked();
 | 
			
		||||
  m_xpolx=ui.rbAntennaX->isChecked();
 | 
			
		||||
  m_saveDir=ui.saveDirEntry->text();
 | 
			
		||||
  m_azelDir=ui.azelDirEntry->text();
 | 
			
		||||
  m_dxccPfx=ui.dxccEntry->text();
 | 
			
		||||
  m_timeout=ui.timeoutSpinBox->value();
 | 
			
		||||
  m_dPhi=ui.dPhiSpinBox->value();
 | 
			
		||||
  m_fCal=ui.fCalSpinBox->value();
 | 
			
		||||
  m_fAdd=ui.faddEntry->text().toDouble();
 | 
			
		||||
  m_network=ui.networkRadioButton->isChecked();
 | 
			
		||||
  m_fs96000=ui.rb96000->isChecked();
 | 
			
		||||
  m_nDevIn=ui.comboBoxSndIn->currentIndex();
 | 
			
		||||
  m_paInDevice=m_inDevList[m_nDevIn];
 | 
			
		||||
  m_nDevOut=ui.comboBoxSndOut->currentIndex();
 | 
			
		||||
  m_paOutDevice=m_outDevList[m_nDevOut];
 | 
			
		||||
  m_udpPort=ui.sbPort->value();
 | 
			
		||||
  m_IQswap=ui.cbIQswap->isChecked();
 | 
			
		||||
  m_10db=ui.cb10db->isChecked();
 | 
			
		||||
  m_initIQplus=ui.cbInitIQplus->isChecked();
 | 
			
		||||
  m_mult570=ui.mult570SpinBox->value();
 | 
			
		||||
  m_cal570=ui.cal570SpinBox->value();
 | 
			
		||||
 | 
			
		||||
  QDialog::accept();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_soundCardRadioButton_toggled(bool checked)
 | 
			
		||||
{
 | 
			
		||||
  ui.comboBoxSndIn->setEnabled(ui.soundCardRadioButton->isChecked());
 | 
			
		||||
  ui.rb96000->setChecked(checked);
 | 
			
		||||
  ui.rb95238->setEnabled(!checked);
 | 
			
		||||
  ui.label_InputDev->setEnabled(checked);
 | 
			
		||||
  ui.label_Port->setEnabled(!checked);
 | 
			
		||||
  ui.sbPort->setEnabled(!checked);
 | 
			
		||||
  ui.cbIQswap->setEnabled(checked);
 | 
			
		||||
  ui.cb10db->setEnabled(checked);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_cbXpol_stateChanged(int n)
 | 
			
		||||
{
 | 
			
		||||
  m_xpol = (n!=0);
 | 
			
		||||
  ui.rbAntenna->setEnabled(m_xpol);
 | 
			
		||||
  ui.rbAntennaX->setEnabled(m_xpol);
 | 
			
		||||
  ui.dPhiSpinBox->setEnabled(m_xpol);
 | 
			
		||||
  ui.labelDphi->setEnabled(m_xpol);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_cal570SpinBox_valueChanged(double ppm)
 | 
			
		||||
{
 | 
			
		||||
  m_cal570=ppm;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_mult570SpinBox_valueChanged(int mult)
 | 
			
		||||
{
 | 
			
		||||
  m_mult570=mult;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::updateColorLabels()
 | 
			
		||||
{
 | 
			
		||||
  QString t;
 | 
			
		||||
  int r=ui.sbBackgroundRed->value();
 | 
			
		||||
  int g=ui.sbBackgroundGreen->value();
 | 
			
		||||
  int b=ui.sbBackgroundBlue->value();
 | 
			
		||||
  int r0=ui.sbRed0->value();
 | 
			
		||||
  int r1=ui.sbRed1->value();
 | 
			
		||||
  int r2=ui.sbRed2->value();
 | 
			
		||||
  int r3=ui.sbRed3->value();
 | 
			
		||||
  int g0=ui.sbGreen0->value();
 | 
			
		||||
  int g1=ui.sbGreen1->value();
 | 
			
		||||
  int g2=ui.sbGreen2->value();
 | 
			
		||||
  int g3=ui.sbGreen3->value();
 | 
			
		||||
  int b0=ui.sbBlue0->value();
 | 
			
		||||
  int b1=ui.sbBlue1->value();
 | 
			
		||||
  int b2=ui.sbBlue2->value();
 | 
			
		||||
  int b3=ui.sbBlue3->value();
 | 
			
		||||
 | 
			
		||||
  t.sprintf("QLabel{background-color: #%2.2x%2.2x%2.2x;"
 | 
			
		||||
            "color: #%2.2x%2.2x%2.2x}",r,g,b,r0,g0,b0);
 | 
			
		||||
  ui.lab0->setStyleSheet(t);
 | 
			
		||||
  t.sprintf("QLabel{background-color: #%2.2x%2.2x%2.2x;"
 | 
			
		||||
            "color: #%2.2x%2.2x%2.2x}",r,g,b,r1,g1,b1);
 | 
			
		||||
  ui.lab1->setStyleSheet(t);
 | 
			
		||||
  t.sprintf("QLabel{background-color: #%2.2x%2.2x%2.2x;"
 | 
			
		||||
            "color: #%2.2x%2.2x%2.2x}",r,g,b,r2,g2,b2);
 | 
			
		||||
  ui.lab2->setStyleSheet(t);
 | 
			
		||||
  t.sprintf("QLabel{background-color: #%2.2x%2.2x%2.2x;"
 | 
			
		||||
            "color: #%2.2x%2.2x%2.2x}",r,g,b,r3,g3,b3);
 | 
			
		||||
  ui.lab3->setStyleSheet(t);
 | 
			
		||||
 | 
			
		||||
  m_colors.sprintf("%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x"
 | 
			
		||||
            "%2.2x%2.2x%2.2x",r,g,b,r0,g0,b0,r1,g1,b1,r2,g2,b2,r3,g3,b3);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_sbBackgroundRed_valueChanged(int r)
 | 
			
		||||
{
 | 
			
		||||
  updateColorLabels();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_sbBackgroundGreen_valueChanged(int g)
 | 
			
		||||
{
 | 
			
		||||
  updateColorLabels();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_sbBackgroundBlue_valueChanged(int b)
 | 
			
		||||
{
 | 
			
		||||
  updateColorLabels();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_sbRed0_valueChanged(int arg1)
 | 
			
		||||
{
 | 
			
		||||
  updateColorLabels();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_sbGreen0_valueChanged(int arg1)
 | 
			
		||||
{
 | 
			
		||||
  updateColorLabels();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_sbBlue0_valueChanged(int arg1)
 | 
			
		||||
{
 | 
			
		||||
  updateColorLabels();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_sbRed1_valueChanged(int arg1)
 | 
			
		||||
{
 | 
			
		||||
   updateColorLabels();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_sbGreen1_valueChanged(int arg1)
 | 
			
		||||
{
 | 
			
		||||
  updateColorLabels();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_sbBlue1_valueChanged(int arg1)
 | 
			
		||||
{
 | 
			
		||||
   updateColorLabels();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_sbRed2_valueChanged(int arg1)
 | 
			
		||||
{
 | 
			
		||||
   updateColorLabels();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_sbGreen2_valueChanged(int arg1)
 | 
			
		||||
{
 | 
			
		||||
   updateColorLabels();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_sbBlue2_valueChanged(int arg1)
 | 
			
		||||
{
 | 
			
		||||
   updateColorLabels();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_sbRed3_valueChanged(int arg1)
 | 
			
		||||
{
 | 
			
		||||
  updateColorLabels();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_sbGreen3_valueChanged(int arg1)
 | 
			
		||||
{
 | 
			
		||||
  updateColorLabels();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_sbBlue3_valueChanged(int arg1)
 | 
			
		||||
{
 | 
			
		||||
  updateColorLabels();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DevSetup::on_pushButton_5_clicked()
 | 
			
		||||
{
 | 
			
		||||
  QColor color = QColorDialog::getColor(Qt::green, this);
 | 
			
		||||
  if (color.isValid()) {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										83
									
								
								devsetup.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								devsetup.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,83 @@
 | 
			
		||||
#ifndef DEVSETUP_H
 | 
			
		||||
#define DEVSETUP_H
 | 
			
		||||
 | 
			
		||||
#include <QDialog>
 | 
			
		||||
#include "ui_devsetup.h"
 | 
			
		||||
 | 
			
		||||
class DevSetup : public QDialog
 | 
			
		||||
{
 | 
			
		||||
  Q_OBJECT
 | 
			
		||||
public:
 | 
			
		||||
  DevSetup(QWidget *parent=0);
 | 
			
		||||
  ~DevSetup();
 | 
			
		||||
 | 
			
		||||
  void initDlg();
 | 
			
		||||
  qint32  m_idInt;
 | 
			
		||||
  qint32  m_pttPort;
 | 
			
		||||
  qint32  m_nDevIn;
 | 
			
		||||
  qint32  m_nDevOut;
 | 
			
		||||
  qint32  m_inDevList[100];
 | 
			
		||||
  qint32  m_outDevList[100];
 | 
			
		||||
  qint32  m_paInDevice;
 | 
			
		||||
  qint32  m_paOutDevice;
 | 
			
		||||
  qint32  m_timeout;
 | 
			
		||||
  qint32  m_dPhi;
 | 
			
		||||
  qint32  m_fCal;
 | 
			
		||||
  qint32  m_udpPort;
 | 
			
		||||
  qint32  m_astroFont;
 | 
			
		||||
  qint32  m_mult570;
 | 
			
		||||
 | 
			
		||||
  double  m_fAdd;
 | 
			
		||||
  double  m_cal570;
 | 
			
		||||
 | 
			
		||||
  bool    m_xpolx;
 | 
			
		||||
  bool    m_network;
 | 
			
		||||
  bool    m_fs96000;
 | 
			
		||||
  bool    m_xpol;
 | 
			
		||||
  bool    m_IQswap;
 | 
			
		||||
  bool    m_restartSoundIn;
 | 
			
		||||
  bool    m_restartSoundOut;
 | 
			
		||||
  bool    m_10db;
 | 
			
		||||
  bool    m_initIQplus;
 | 
			
		||||
 | 
			
		||||
  QString m_myCall;
 | 
			
		||||
  QString m_myGrid;
 | 
			
		||||
  QString m_saveDir;
 | 
			
		||||
  QString m_azelDir;
 | 
			
		||||
  QString m_dxccPfx;
 | 
			
		||||
  QString m_colors;
 | 
			
		||||
 | 
			
		||||
  QColor  m_colorBackground;
 | 
			
		||||
 | 
			
		||||
public slots:
 | 
			
		||||
  void accept();
 | 
			
		||||
 | 
			
		||||
private slots:
 | 
			
		||||
  void on_soundCardRadioButton_toggled(bool checked);
 | 
			
		||||
  void on_cbXpol_stateChanged(int arg1);
 | 
			
		||||
  void on_cal570SpinBox_valueChanged(double ppm);
 | 
			
		||||
  void on_mult570SpinBox_valueChanged(int mult);
 | 
			
		||||
  void on_sbBackgroundRed_valueChanged(int arg1);
 | 
			
		||||
  void on_sbBackgroundGreen_valueChanged(int arg1);
 | 
			
		||||
  void on_sbBackgroundBlue_valueChanged(int arg1);
 | 
			
		||||
  void updateColorLabels(void);
 | 
			
		||||
  void on_sbRed0_valueChanged(int arg1);
 | 
			
		||||
  void on_sbGreen0_valueChanged(int arg1);
 | 
			
		||||
  void on_sbBlue0_valueChanged(int arg1);
 | 
			
		||||
  void on_sbRed1_valueChanged(int arg1);
 | 
			
		||||
  void on_sbGreen1_valueChanged(int arg1);
 | 
			
		||||
  void on_sbBlue1_valueChanged(int arg1);
 | 
			
		||||
  void on_sbRed2_valueChanged(int arg1);
 | 
			
		||||
  void on_sbGreen2_valueChanged(int arg1);
 | 
			
		||||
  void on_sbBlue2_valueChanged(int arg1);
 | 
			
		||||
  void on_sbRed3_valueChanged(int arg1);
 | 
			
		||||
  void on_sbGreen3_valueChanged(int arg1);
 | 
			
		||||
  void on_sbBlue3_valueChanged(int arg1);
 | 
			
		||||
  void on_pushButton_5_clicked();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
  int r,g,b,r0,g0,b0,r1,g1,b1,r2,g2,b2,r3,g3,b3;
 | 
			
		||||
  Ui::DialogSndCard ui;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // DEVSETUP_H
 | 
			
		||||
							
								
								
									
										1583
									
								
								devsetup.ui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1583
									
								
								devsetup.ui
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										15
									
								
								displaytext.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								displaytext.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
			
		||||
#include "displaytext.h"
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
#include <QMouseEvent>
 | 
			
		||||
 | 
			
		||||
DisplayText::DisplayText(QWidget *parent) :
 | 
			
		||||
    QTextBrowser(parent)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DisplayText::mouseDoubleClickEvent(QMouseEvent *e)
 | 
			
		||||
{
 | 
			
		||||
  bool ctrl = (e->modifiers() & 0x4000000);
 | 
			
		||||
  emit(selectCallsign(ctrl));
 | 
			
		||||
  QTextBrowser::mouseDoubleClickEvent(e);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										22
									
								
								displaytext.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								displaytext.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
			
		||||
#ifndef DISPLAYTEXT_H
 | 
			
		||||
#define DISPLAYTEXT_H
 | 
			
		||||
 | 
			
		||||
#include <QTextBrowser>
 | 
			
		||||
 | 
			
		||||
class DisplayText : public QTextBrowser
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
public:
 | 
			
		||||
    explicit DisplayText(QWidget *parent = 0);
 | 
			
		||||
 | 
			
		||||
signals:
 | 
			
		||||
  void selectCallsign(bool ctrl);
 | 
			
		||||
 | 
			
		||||
public slots:
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
  void mouseDoubleClickEvent(QMouseEvent *e);
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // DISPLAYTEXT_H
 | 
			
		||||
							
								
								
									
										4
									
								
								f2py.py
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								f2py.py
									
									
									
									
									
								
							@ -1,4 +0,0 @@
 | 
			
		||||
#!/usr/bin/env python.exe
 | 
			
		||||
# See http://cens.ioc.ee/projects/f2py2e/
 | 
			
		||||
import f2py2e
 | 
			
		||||
f2py2e.main()
 | 
			
		||||
							
								
								
									
										69
									
								
								ffft.f
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								ffft.f
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,69 @@
 | 
			
		||||
	subroutine ffft(d,npts,isign,ireal)
 | 
			
		||||
 | 
			
		||||
C  Fourier transform of length npts=2**k, performed in place.
 | 
			
		||||
C  Input data in array d, treated as complex if ireal=0, and as real if ireal=1.
 | 
			
		||||
C  In either case the transform values are returned in array d, treated as
 | 
			
		||||
C  complex. The DC term is d(1), and d(npts/2+1) is the term at the Nyquist
 | 
			
		||||
C  frequency.  The basic algorithm is the same as Norm Brenner's FOUR1, and
 | 
			
		||||
C  uses radix-2 transforms.
 | 
			
		||||
 | 
			
		||||
C  J. H. Taylor, Princeton University.
 | 
			
		||||
 | 
			
		||||
	complex d(npts),t,w,wstep,tt,uu
 | 
			
		||||
	data pi/3.14159265359/
 | 
			
		||||
 | 
			
		||||
C  Shuffle the data to bit-reversed order.
 | 
			
		||||
 | 
			
		||||
	imax=npts/(ireal+1)
 | 
			
		||||
	irev=1
 | 
			
		||||
	do 5 i=1,imax
 | 
			
		||||
	if(i.ge.irev) go to 2
 | 
			
		||||
	t=d(i)
 | 
			
		||||
	d(i)=d(irev)
 | 
			
		||||
	d(irev)=t
 | 
			
		||||
2	mmax=imax/2
 | 
			
		||||
3	if(irev.le.mmax) go to 5
 | 
			
		||||
	irev=irev-mmax
 | 
			
		||||
	mmax=mmax/2
 | 
			
		||||
	if(mmax.ge.1) go to 3
 | 
			
		||||
5	irev=irev+mmax
 | 
			
		||||
 | 
			
		||||
C  The radix-2 transform begins here.
 | 
			
		||||
 | 
			
		||||
	api=isign*pi/2.
 | 
			
		||||
	mmax=1
 | 
			
		||||
6	istep=2*mmax
 | 
			
		||||
	wstep=cmplx(-2.*sin(api/mmax)**2,sin(2.*api/mmax))
 | 
			
		||||
	w=1.
 | 
			
		||||
	do 9 m=1,mmax
 | 
			
		||||
 | 
			
		||||
C  This in the inner-most loop -- optimization here is important!
 | 
			
		||||
	do 8 i=m,imax,istep
 | 
			
		||||
	t=w*d(i+mmax)
 | 
			
		||||
	d(i+mmax)=d(i)-t
 | 
			
		||||
8	d(i)=d(i)+t
 | 
			
		||||
 | 
			
		||||
9	w=w*(1.+wstep)
 | 
			
		||||
	mmax=istep
 | 
			
		||||
	if(mmax.lt.imax) go to 6
 | 
			
		||||
 | 
			
		||||
	if(ireal.eq.0) return
 | 
			
		||||
 | 
			
		||||
C  Now complete the last stage of a doubled-up real transform.
 | 
			
		||||
 | 
			
		||||
	jmax=imax/2 + 1
 | 
			
		||||
	wstep=cmplx(-2.*sin(isign*pi/npts)**2,sin(isign*pi/imax))
 | 
			
		||||
	w=1.0
 | 
			
		||||
	d(imax+1)=d(1)
 | 
			
		||||
 | 
			
		||||
	do 10 j=1,jmax
 | 
			
		||||
	uu=cmplx(real(d(j))+real(d(2+imax-j)),aimag(d(j)) - 
 | 
			
		||||
     +    aimag(d(2+imax-j)))
 | 
			
		||||
	tt=w*cmplx(aimag(d(j))+aimag(d(2+imax-j)),-real(d(j)) +
 | 
			
		||||
     +    real(d(2+imax-j)))
 | 
			
		||||
	d(j)=uu+tt
 | 
			
		||||
	d(2+imax-j)=conjg(uu-tt)
 | 
			
		||||
10	w=w*(1.+wstep)
 | 
			
		||||
 | 
			
		||||
	return
 | 
			
		||||
	end
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								fftw3single.lib
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								fftw3single.lib
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										67
									
								
								fil651.f
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								fil651.f
									
									
									
									
									
								
							@ -1,67 +0,0 @@
 | 
			
		||||
      subroutine fil651(d,n1,c,n2)
 | 
			
		||||
 | 
			
		||||
C  FIR lowpass mixing filter designed with ScopeFIR.  Real in, complex out.
 | 
			
		||||
 | 
			
		||||
C  fsample     = 5512.5   Hz
 | 
			
		||||
C  Ntaps       = 31
 | 
			
		||||
C  fc          = 1000     Hz
 | 
			
		||||
C  fstop       = 1378.125 Hz
 | 
			
		||||
C  Ripple      = 0.5      dB
 | 
			
		||||
C  Stop Atten  = 50       dB
 | 
			
		||||
C  fmix        = 1378.125 Hz
 | 
			
		||||
C  fout        = 2706.25  Hz
 | 
			
		||||
 | 
			
		||||
      parameter (NTAPS=31)
 | 
			
		||||
      parameter (NH=NTAPS/2)
 | 
			
		||||
      parameter (NDOWN=2)               !Downsample ratio
 | 
			
		||||
 | 
			
		||||
      real d(n1)
 | 
			
		||||
      complex c(n2)
 | 
			
		||||
 | 
			
		||||
      complex ck(-NH:NH)
 | 
			
		||||
      data ck/
 | 
			
		||||
     +  (-0.000000073578,-0.000859869243),
 | 
			
		||||
     +  ( 0.008518289457,-0.000000680308),
 | 
			
		||||
     +  ( 0.000000834309, 0.011250152594),
 | 
			
		||||
     +  (-0.001061705254, 0.000000072679),
 | 
			
		||||
     +  ( 0.000000875897, 0.013958392128),
 | 
			
		||||
     +  (-0.010047338711, 0.000000573160),
 | 
			
		||||
     +  ( 0.000000770320, 0.015003869984),
 | 
			
		||||
     +  (-0.025027880956, 0.000001142192),
 | 
			
		||||
     +  ( 0.000000285583, 0.007151700551),
 | 
			
		||||
     +  (-0.043634723888, 0.000001493512),
 | 
			
		||||
     +  (-0.000000478847,-0.016788108005),
 | 
			
		||||
     +  (-0.061886192046, 0.000001412144),
 | 
			
		||||
     +  (-0.000001258694,-0.073548459509),
 | 
			
		||||
     +  (-0.075261027462, 0.000000858668),
 | 
			
		||||
     +  (-0.000001749252,-0.306638863572),
 | 
			
		||||
     +  ( 0.419826269508, 0.000000000000),
 | 
			
		||||
     +  (-0.000001749252, 0.306638863572),
 | 
			
		||||
     +  (-0.075261027462,-0.000000858668),
 | 
			
		||||
     +  (-0.000001258694, 0.073548459509),
 | 
			
		||||
     +  (-0.061886192046,-0.000001412144),
 | 
			
		||||
     +  (-0.000000478847, 0.016788108005),
 | 
			
		||||
     +  (-0.043634723888,-0.000001493512),
 | 
			
		||||
     +  ( 0.000000285583,-0.007151700551),
 | 
			
		||||
     +  (-0.025027880956,-0.000001142192),
 | 
			
		||||
     +  ( 0.000000770320,-0.015003869984),
 | 
			
		||||
     +  (-0.010047338711,-0.000000573160),
 | 
			
		||||
     +  ( 0.000000875897,-0.013958392128),
 | 
			
		||||
     +  (-0.001061705254,-0.000000072679),
 | 
			
		||||
     +  ( 0.000000834309,-0.011250152594),
 | 
			
		||||
     +  ( 0.008518289457, 0.000000680308),
 | 
			
		||||
     +  (-0.000000073578, 0.000859869243)/
 | 
			
		||||
 | 
			
		||||
      n2=(n1-NTAPS+NDOWN)/NDOWN
 | 
			
		||||
      k0=NH-NDOWN+1
 | 
			
		||||
 | 
			
		||||
      do i=1,n2
 | 
			
		||||
         c(i)=0.
 | 
			
		||||
         k=k0 + NDOWN*i
 | 
			
		||||
         do j=-NH,NH
 | 
			
		||||
            c(i)=c(i) + d(j+k)*conjg(ck(j))
 | 
			
		||||
         enddo
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										44
									
								
								fil652.f
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								fil652.f
									
									
									
									
									
								
							@ -1,44 +0,0 @@
 | 
			
		||||
      subroutine fil652(c1,n1,c2,n2)
 | 
			
		||||
 | 
			
		||||
C  FIR lowpass filter designed using ScopeFIR
 | 
			
		||||
 | 
			
		||||
C  fsample     = 2756.25  Hz
 | 
			
		||||
C  Ntaps       = 31
 | 
			
		||||
C  fc          = 500      Hz
 | 
			
		||||
C  fstop       = 689.0625 Hz
 | 
			
		||||
C  Ripple      = 0.5      dB
 | 
			
		||||
C  Stop Atten  = 50       dB
 | 
			
		||||
C  fout        = 1378.125 Hz
 | 
			
		||||
 | 
			
		||||
      parameter (NTAPS=31)
 | 
			
		||||
      parameter (NH=NTAPS/2)
 | 
			
		||||
      parameter (NDOWN=2)                !Downsample ratio
 | 
			
		||||
      complex c1(n1)
 | 
			
		||||
      complex c2(n2)
 | 
			
		||||
 | 
			
		||||
C  Filter coefficients:
 | 
			
		||||
      real a(-NH:NH)
 | 
			
		||||
      data a/
 | 
			
		||||
     +  -0.000859869246,-0.008518289484,-0.011250152625,-0.001061705256,
 | 
			
		||||
     +   0.013958392156, 0.010047338728,-0.015003870003,-0.025027880982,
 | 
			
		||||
     +   0.007151700557, 0.043634723913, 0.016788108012,-0.061886192062,
 | 
			
		||||
     +  -0.073548459520, 0.075261027466, 0.306638863577, 0.419826269508,
 | 
			
		||||
     +   0.306638863577, 0.075261027466,-0.073548459520,-0.061886192062,
 | 
			
		||||
     +   0.016788108012, 0.043634723913, 0.007151700557,-0.025027880982,
 | 
			
		||||
     +  -0.015003870003, 0.010047338728, 0.013958392156,-0.001061705256,
 | 
			
		||||
     +  -0.011250152625,-0.008518289484,-0.000859869246/
 | 
			
		||||
 | 
			
		||||
      n2=(n1-NTAPS+NDOWN)/NDOWN
 | 
			
		||||
      k0=NH-NDOWN+1
 | 
			
		||||
 | 
			
		||||
C  Loop over all output samples
 | 
			
		||||
      do i=1,n2
 | 
			
		||||
         c2(i)=0.
 | 
			
		||||
         k=k0 + NDOWN*i
 | 
			
		||||
         do j=-NH,NH
 | 
			
		||||
            c2(i)=c2(i) + c1(j+k)*a(j)
 | 
			
		||||
         enddo
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										49
									
								
								fil653.f
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								fil653.f
									
									
									
									
									
								
							@ -1,49 +0,0 @@
 | 
			
		||||
      subroutine fil653(c1,n1,c2,n2)
 | 
			
		||||
 | 
			
		||||
C  FIR lowpass filter designed using ScopeFIR
 | 
			
		||||
 | 
			
		||||
C  fsample     = 1378.125   Hz
 | 
			
		||||
C  Ntaps       = 45
 | 
			
		||||
C  fc          = 100        Hz
 | 
			
		||||
C  fstop       = 172.265625 Hz
 | 
			
		||||
C  Ripple      = 0.5        dB
 | 
			
		||||
C  Stop Atten  = 50         dB
 | 
			
		||||
C  fout        = 172.265625 Hz
 | 
			
		||||
C  BW          = 200        Hz
 | 
			
		||||
 | 
			
		||||
      parameter (NTAPS=45)
 | 
			
		||||
      parameter (NH=NTAPS/2)
 | 
			
		||||
      parameter (NDOWN=4)                !Downsample ratio
 | 
			
		||||
      complex c1(n1)
 | 
			
		||||
      complex c2(n2)
 | 
			
		||||
 | 
			
		||||
C  Filter coefficients:
 | 
			
		||||
      real a(-NH:NH)
 | 
			
		||||
      data a/
 | 
			
		||||
     +  -0.000005569862,-0.002503777832,-0.004040335617,-0.005717910288,
 | 
			
		||||
     +  -0.006153385485,-0.004446125293,-0.000305215272, 0.005557289511,
 | 
			
		||||
     +   0.011329120672, 0.014496551280, 0.012703875898, 0.004837591829,
 | 
			
		||||
     +  -0.008060363689,-0.022474422302,-0.032964876083,-0.033575486327,
 | 
			
		||||
     +  -0.019743889907, 0.009895672340, 0.052467109908, 0.101031155027,
 | 
			
		||||
     +   0.146073001698, 0.177927966814, 0.189427119395, 0.177927966814,
 | 
			
		||||
     +   0.146073001698, 0.101031155027, 0.052467109908, 0.009895672340,
 | 
			
		||||
     +  -0.019743889907,-0.033575486327,-0.032964876083,-0.022474422302,
 | 
			
		||||
     +  -0.008060363689, 0.004837591829, 0.012703875898, 0.014496551280,
 | 
			
		||||
     +   0.011329120672, 0.005557289511,-0.000305215272,-0.004446125293,
 | 
			
		||||
     +  -0.006153385485,-0.005717910288,-0.004040335617,-0.002503777832,
 | 
			
		||||
     +  -0.000005569862/
 | 
			
		||||
 | 
			
		||||
      n2=(n1-NTAPS+NDOWN)/NDOWN
 | 
			
		||||
      k0=NH-NDOWN+1
 | 
			
		||||
 | 
			
		||||
C  Loop over all output samples
 | 
			
		||||
      do i=1,n2
 | 
			
		||||
         c2(i)=0.
 | 
			
		||||
         k=k0 + NDOWN*i
 | 
			
		||||
         do j=-NH,NH
 | 
			
		||||
            c2(i)=c2(i) + c1(j+k)*a(j)
 | 
			
		||||
         enddo
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										119
									
								
								filbig.f
									
									
									
									
									
								
							
							
						
						
									
										119
									
								
								filbig.f
									
									
									
									
									
								
							@ -1,119 +0,0 @@
 | 
			
		||||
      subroutine filbig(dd,nmax,f0,newdat,c4a,c4b,n4)
 | 
			
		||||
 | 
			
		||||
C  Filter and downsample complex data for X and Y polarizations,
 | 
			
		||||
C  stored in array dd(4,nmax).  Output is downsampled from 96000 Hz
 | 
			
		||||
C  to 1500 Hz, and the low-pass filter has f_cutoff = 375 Hz and 
 | 
			
		||||
C  f_stop = 750 Hz.
 | 
			
		||||
 | 
			
		||||
      parameter (NFFT1=5376000,NFFT2=77175)
 | 
			
		||||
      real*4  dd(4,nmax)                         !Input data
 | 
			
		||||
      complex c4a(NFFT2),c4b(NFFT2)              !Output data
 | 
			
		||||
      complex ca(NFFT1),cb(NFFT1)                !FFTs of input
 | 
			
		||||
      real*8 df
 | 
			
		||||
C Impulse response of filter (one side)
 | 
			
		||||
      real halfpulse(8)
 | 
			
		||||
      complex cfilt(NFFT2)
 | 
			
		||||
                       !Filter (complex; imag = 0)
 | 
			
		||||
      real rfilt(NFFT2)                          !Filter (real)
 | 
			
		||||
      integer plan1,plan2,plan3,plan4,plan5
 | 
			
		||||
      logical first
 | 
			
		||||
      include 'fftw3.f'
 | 
			
		||||
      equivalence (rfilt,cfilt)
 | 
			
		||||
      data first/.true./
 | 
			
		||||
      data halfpulse/114.97547150,36.57879257,-20.93789101,
 | 
			
		||||
     +  5.89886379,1.59355187,-2.49138308,0.60910773,-0.04248129/
 | 
			
		||||
      save
 | 
			
		||||
 | 
			
		||||
      if(nmax.lt.0) go to 900
 | 
			
		||||
      if(first) then
 | 
			
		||||
         npatience=1
 | 
			
		||||
         nflags=FFTW_ESTIMATE
 | 
			
		||||
         if(npatience.eq.1) nflags=FFTW_ESTIMATE_PATIENT
 | 
			
		||||
         if(npatience.eq.2) nflags=FFTW_MEASURE
 | 
			
		||||
         if(npatience.eq.3) nflags=FFTW_PATIENT
 | 
			
		||||
         if(npatience.eq.4) nflags=FFTW_EXHAUSTIVE
 | 
			
		||||
C  Plan the FFTs just once
 | 
			
		||||
         call sfftw_plan_dft_1d_(plan1,NFFT1,ca,ca,
 | 
			
		||||
     +        FFTW_BACKWARD,nflags)
 | 
			
		||||
         call sfftw_plan_dft_1d_(plan2,NFFT1,cb,cb,
 | 
			
		||||
     +        FFTW_BACKWARD,nflags)
 | 
			
		||||
         call sfftw_plan_dft_1d_(plan3,NFFT2,c4a,c4a,
 | 
			
		||||
     +        FFTW_FORWARD,nflags)
 | 
			
		||||
         call sfftw_plan_dft_1d_(plan4,NFFT2,c4b,c4b,
 | 
			
		||||
     +        FFTW_FORWARD,nflags)
 | 
			
		||||
         call sfftw_plan_dft_1d_(plan5,NFFT2,cfilt,cfilt,
 | 
			
		||||
     +        FFTW_BACKWARD,nflags)
 | 
			
		||||
 | 
			
		||||
C  Convert impulse response to filter function
 | 
			
		||||
         do i=1,NFFT2
 | 
			
		||||
            cfilt(i)=0.
 | 
			
		||||
         enddo
 | 
			
		||||
         fac=0.00625/NFFT1
 | 
			
		||||
         cfilt(1)=fac*halfpulse(1)
 | 
			
		||||
         do i=2,8
 | 
			
		||||
            cfilt(i)=fac*halfpulse(i)
 | 
			
		||||
            cfilt(NFFT2+2-i)=fac*halfpulse(i)
 | 
			
		||||
         enddo
 | 
			
		||||
         call sfftw_execute_(plan5)
 | 
			
		||||
 | 
			
		||||
         base=cfilt(NFFT2/2+1)
 | 
			
		||||
         do i=1,NFFT2
 | 
			
		||||
            rfilt(i)=real(cfilt(i))-base
 | 
			
		||||
         enddo
 | 
			
		||||
 | 
			
		||||
         df=96000.d0/NFFT1
 | 
			
		||||
         first=.false.
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
C  When new data comes along, we need to compute a new "big FFT"
 | 
			
		||||
C  If we just have a new f0, continue with the existing ca and cb.
 | 
			
		||||
 | 
			
		||||
      if(newdat.ne.0) then
 | 
			
		||||
         nz=min(nmax,NFFT1)
 | 
			
		||||
         do i=1,nz
 | 
			
		||||
            ca(i)=cmplx(dd(1,i),dd(2,i))
 | 
			
		||||
            cb(i)=cmplx(dd(3,i),dd(4,i))
 | 
			
		||||
         enddo
 | 
			
		||||
 | 
			
		||||
         if(nmax.lt.NFFT1) then
 | 
			
		||||
            do i=nmax+1,NFFT1
 | 
			
		||||
               ca(i)=0.
 | 
			
		||||
               cb(i)=0.
 | 
			
		||||
            enddo
 | 
			
		||||
         endif
 | 
			
		||||
         call sfftw_execute_(plan1)
 | 
			
		||||
         call sfftw_execute_(plan2)
 | 
			
		||||
         newdat=0
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
C  NB: f0 is the frequency at which we want our filter centered.
 | 
			
		||||
C      i0 is the bin number in ca and cb closest to f0.
 | 
			
		||||
 | 
			
		||||
      i0=nint(f0/df) + 1
 | 
			
		||||
      nh=NFFT2/2
 | 
			
		||||
      do i=1,nh                                !Copy data into c4a and c4b,
 | 
			
		||||
         j=i0+i-1                              !and apply the filter function
 | 
			
		||||
         c4a(i)=rfilt(i)*ca(j)
 | 
			
		||||
         c4b(i)=rfilt(i)*cb(j)
 | 
			
		||||
      enddo
 | 
			
		||||
      do i=nh+1,NFFT2
 | 
			
		||||
         j=i0+i-1-NFFT2
 | 
			
		||||
         if(j.lt.1) j=j+NFFT1                  !NFFT1 was NFFT2
 | 
			
		||||
         c4a(i)=rfilt(i)*ca(j)
 | 
			
		||||
         c4b(i)=rfilt(i)*cb(j)
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
C  Do the short reverse transform, to go back to time domain.
 | 
			
		||||
      call sfftw_execute_(plan3)
 | 
			
		||||
      call sfftw_execute_(plan4)
 | 
			
		||||
      n4=min(nmax/64,NFFT2)
 | 
			
		||||
      go to 999
 | 
			
		||||
 | 
			
		||||
 900  call sfftw_destroy_plan_(plan1)
 | 
			
		||||
      call sfftw_destroy_plan_(plan2)
 | 
			
		||||
      call sfftw_destroy_plan_(plan3)
 | 
			
		||||
      call sfftw_destroy_plan_(plan4)
 | 
			
		||||
      call sfftw_destroy_plan_(plan5)
 | 
			
		||||
 | 
			
		||||
 999  return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										36
									
								
								files.txt
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								files.txt
									
									
									
									
									
								
							@ -1,36 +0,0 @@
 | 
			
		||||
LU  fname          write          read                write thread
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
10  *.tf2                         getfile2
 | 
			
		||||
11  prefixes.txt   pfxdump        GUI                 GUI     (once only)
 | 
			
		||||
11  decoded.txt    map65a         GUI                 decoder (60 s)
 | 
			
		||||
12
 | 
			
		||||
13  tsky.dat                      astro0.F
 | 
			
		||||
14  azel.dat       astro0.F                           GUI     (1 s)
 | 
			
		||||
15
 | 
			
		||||
16
 | 
			
		||||
17  *.tf2          savetf2                            decoder
 | 
			
		||||
18  TxData                        wsjtgen
 | 
			
		||||
19  messages.txt   display.txt    GUI                 decoder
 | 
			
		||||
20  bandmap.txt    display.txt    GUI                 decoder
 | 
			
		||||
21  ALL65.TXT      map65a                             decoder
 | 
			
		||||
22  kvasd.dat      extract        KVASD               decoder
 | 
			
		||||
23  CALL3.TXT                     deep65              decoder
 | 
			
		||||
24  meas24.txt     savetf2                            decoder
 | 
			
		||||
25  meas25.txt     savetf2                            decoder
 | 
			
		||||
26  tmp26.txt      map65a,display display             decoder
 | 
			
		||||
27  dphi.txt       map65a                             decoder
 | 
			
		||||
28
 | 
			
		||||
29  debug.txt
 | 
			
		||||
77                 deep65                             decoder
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
So ... the problem may be writing to azel.dat from the GUI thread?
 | 
			
		||||
(Could put astro data into a common, and write to file from decode1.F90.)
 | 
			
		||||
 | 
			
		||||
Also: look at write(line,...) forms ...
 | 
			
		||||
 | 
			
		||||
  unpackgrid unpackmsg symspec display savetf2 (all in decoder thread)
 | 
			
		||||
 | 
			
		||||
read(char,...) 
 | 
			
		||||
 | 
			
		||||
  packcall packgrid astro0 display getfile2
 | 
			
		||||
							
								
								
									
										250
									
								
								fivehz.f90
									
									
									
									
									
								
							
							
						
						
									
										250
									
								
								fivehz.f90
									
									
									
									
									
								
							@ -1,250 +0,0 @@
 | 
			
		||||
subroutine fivehz
 | 
			
		||||
 | 
			
		||||
!  Called at interrupt level from the PortAudio callback routine.
 | 
			
		||||
!  For nspb=2048 the callback rate is nfsample/nspb = 5.38 Hz.
 | 
			
		||||
!  Thus, we should be able to control the timing of T/R sequence events
 | 
			
		||||
!  here to within about 0.2 s.
 | 
			
		||||
 | 
			
		||||
!  Do not do anything very time consuming in this routine!!
 | 
			
		||||
!  Disk I/O is a bad idea.  Writing to stdout (for diagnostic purposes)
 | 
			
		||||
!  seems to be OK.
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  use dflib
 | 
			
		||||
  use dfport
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  parameter (NTRING=64)
 | 
			
		||||
  real*8 tt1(0:NTRING-1)
 | 
			
		||||
  logical first,txtime,filled
 | 
			
		||||
  integer ptt
 | 
			
		||||
  integer TxOKz
 | 
			
		||||
  real*8 fs,fsample,tt,u
 | 
			
		||||
  include 'gcom1.f90'
 | 
			
		||||
  include 'gcom2.f90'
 | 
			
		||||
  data first/.true./,nc0/1/,nc1/1/
 | 
			
		||||
  save
 | 
			
		||||
 | 
			
		||||
  n1=time()
 | 
			
		||||
  n2=mod(n1,86400)
 | 
			
		||||
  tt=n1-n2+tsec-0.1d0*ndsec
 | 
			
		||||
 | 
			
		||||
  if(first) then
 | 
			
		||||
     rxdelay=0.2
 | 
			
		||||
     txdelay=0.4
 | 
			
		||||
     tlatency=1.0
 | 
			
		||||
     first=.false.
 | 
			
		||||
     iptt=0
 | 
			
		||||
     ntr0=-99
 | 
			
		||||
     rxdone=.false.
 | 
			
		||||
     ibuf00=-99
 | 
			
		||||
     ncall=-1
 | 
			
		||||
     u=0.05d0
 | 
			
		||||
     fsample=11025.d0
 | 
			
		||||
     mfsample=110250
 | 
			
		||||
     filled=.false.
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  if(txdelay.lt.0.2d0) txdelay=0.2d0
 | 
			
		||||
 | 
			
		||||
! Measure average sampling frequency over a recent interval
 | 
			
		||||
  ncall=ncall+1
 | 
			
		||||
  if(ncall.eq.9) then
 | 
			
		||||
     ntt0=0
 | 
			
		||||
     ntt1=0
 | 
			
		||||
     tt1(ntt1)=tt
 | 
			
		||||
  endif
 | 
			
		||||
!  if(ncall.ge.10 .and. mod(ncall,2).eq.1) then
 | 
			
		||||
  if(ncall.ge.10) then
 | 
			
		||||
     ntt1=iand(ntt1+1,NTRING-1)
 | 
			
		||||
     tt1(ntt1)=tt
 | 
			
		||||
     if(ntt1.eq.NTRING-1) filled=.true.
 | 
			
		||||
     if(filled) ntt0=iand(ntt1+1,NTRING-1)
 | 
			
		||||
     if(mod(ncall,2).eq.1) then
 | 
			
		||||
        nd=ntt1-ntt0
 | 
			
		||||
        if(nd.lt.0) nd=nd+NTRING
 | 
			
		||||
        fs=nd*2048.d0/(tt1(ntt1)-tt1(ntt0))
 | 
			
		||||
        fsample=u*fs + (1.d0-u)*fsample
 | 
			
		||||
        mfsample=nint(10.d0*fsample)
 | 
			
		||||
     endif
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  if(trperiod.le.0) trperiod=30
 | 
			
		||||
  tx1=0.0                              !Time to start a TX sequence
 | 
			
		||||
  tx2=trperiod-(tlatency+txdelay)      !Time to turn TX off
 | 
			
		||||
  if(mode(1:4).eq.'JT65') then
 | 
			
		||||
     if(nwave.lt.126*4096) nwave=126*4096
 | 
			
		||||
     tx2=txdelay + nwave/11025.0
 | 
			
		||||
     if(tx2.gt.(trperiod-2.0)) tx2=trperiod-tlatency-1.0
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  if(TxFirst.eq.0) then
 | 
			
		||||
     tx1=tx1+trperiod
 | 
			
		||||
     tx2=tx2+trperiod
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  t=mod(Tsec,2.d0*trperiod)
 | 
			
		||||
  txtime = t.ge.tx1 .and. t.lt.tx2
 | 
			
		||||
 | 
			
		||||
! If we're transmitting, freeze the input buffer pointers where they were.
 | 
			
		||||
  receiving=1
 | 
			
		||||
  if(((txtime .and. (lauto.eq.1)) .or. TxOK.eq.1 .or. transmitting.eq.1) & 
 | 
			
		||||
       .and. (mute.eq.0)) then
 | 
			
		||||
     receiving=0
 | 
			
		||||
     ibuf=ibuf000
 | 
			
		||||
     iwrite=iwrite000
 | 
			
		||||
  endif
 | 
			
		||||
  ibuf000=ibuf
 | 
			
		||||
  iwrite000=iwrite
 | 
			
		||||
  nsec=Tsec
 | 
			
		||||
  ntr=mod(nsec/trperiod,2)             !ntr=0 in 1st sequence, 1 in 2nd
 | 
			
		||||
 | 
			
		||||
  if(ntr.ne.ntr0) then
 | 
			
		||||
     ibuf0=ibuf                        !Start of new sequence, save ibuf
 | 
			
		||||
!     if(mode(1:4).ne.'JT65') then
 | 
			
		||||
!        ibuf0=ibuf0+3                  !So we don't copy our own Tx
 | 
			
		||||
!        if(ibuf0.gt.1024) ibuf0=ibuf0-1024
 | 
			
		||||
!     endif
 | 
			
		||||
     ntime=time()                      !Save start time
 | 
			
		||||
     if(mantx.eq.1 .and. iptt.eq.1) then
 | 
			
		||||
        mantx=0
 | 
			
		||||
        TxOK=0
 | 
			
		||||
     endif
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
! Switch PTT line and TxOK appropriately
 | 
			
		||||
  if(lauto.eq.1) then
 | 
			
		||||
     if(txtime .and. iptt.eq.0 .and.          &
 | 
			
		||||
          mute.eq.0) i1=ptt(nport,pttport,1,iptt)        !Raise PTT
 | 
			
		||||
     if(.not.txtime .or. mute.eq.1) TxOK=0               !Lower TxOK
 | 
			
		||||
  else
 | 
			
		||||
     if(mantx.eq.1 .and. iptt.eq.0 .and.      &
 | 
			
		||||
          mute.eq.0) i2=ptt(nport,pttport,1,iptt)        !Raise PTT
 | 
			
		||||
     if(mantx.eq.0 .or. mute.eq.1) TxOK=0                !Lower TxOK
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
! Calculate Tx waveform as needed
 | 
			
		||||
  if((iptt.eq.1 .and. iptt0.eq.0) .or. nrestart.eq.1) then
 | 
			
		||||
     call wsjtgen
 | 
			
		||||
     nrestart=0
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
! If PTT was just raised, start a countdown for raising TxOK:
 | 
			
		||||
  nc1a=txdelay/0.18576
 | 
			
		||||
  if(nc1a.lt.2) nc1a=2
 | 
			
		||||
  if(iptt.eq.1 .and. iptt0.eq.0) nc1=-nc1a-1
 | 
			
		||||
  if(nc1.le.0) nc1=nc1+1
 | 
			
		||||
  if(nc1.eq.0) TxOK=1                               ! We are transmitting
 | 
			
		||||
 | 
			
		||||
! If TxOK was just lowered, start a countdown for lowering PTT:
 | 
			
		||||
  nc0a=(tlatency+txdelay)/0.18576
 | 
			
		||||
  if(nc0a.lt.5) nc0a=5
 | 
			
		||||
  if(TxOK.eq.0 .and. TxOKz.eq.1 .and. iptt.eq.1) nc0=-nc0a-1
 | 
			
		||||
  if(nc0.le.0) nc0=nc0+1
 | 
			
		||||
  if(nc0.eq.0) i3=ptt(nport,pttport,0,iptt)
 | 
			
		||||
 | 
			
		||||
  if(iptt.eq.0 .and.TxOK.eq.0) then
 | 
			
		||||
     sending="                      "
 | 
			
		||||
     sendingsh=0
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  nbufs=ibuf-ibuf0
 | 
			
		||||
  if(nbufs.lt.0) nbufs=nbufs+1024
 | 
			
		||||
  tdata=nbufs*2048.0/11025.0
 | 
			
		||||
  if(mode(1:4).eq.'JT65' .and. monitoring.eq.1 .and. tdata.gt.53.0    &
 | 
			
		||||
       .and. ibuf0.ne.ibuf00) then
 | 
			
		||||
     rxdone=.true.
 | 
			
		||||
     ibuf00=ibuf0
 | 
			
		||||
  endif
 | 
			
		||||
  iptt0=iptt
 | 
			
		||||
  TxOKz=TxOK
 | 
			
		||||
  ntr0=ntr
 | 
			
		||||
 | 
			
		||||
  return
 | 
			
		||||
end subroutine fivehz
 | 
			
		||||
 | 
			
		||||
subroutine fivehztx
 | 
			
		||||
 | 
			
		||||
!  Called at interrupt level from the PortAudio output callback.
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  use dflib
 | 
			
		||||
  use dfport
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  parameter (NTRING=64)
 | 
			
		||||
  real*8 tt1(0:NTRING-1)
 | 
			
		||||
  logical first,filled
 | 
			
		||||
  real*8 fs,fsample,tt,u
 | 
			
		||||
  include 'gcom1.f90'
 | 
			
		||||
  data first/.true./
 | 
			
		||||
  save
 | 
			
		||||
 | 
			
		||||
  n1=time()
 | 
			
		||||
  n2=mod(n1,86400)
 | 
			
		||||
  tt=n1-n2+tsec-0.1d0*ndsec
 | 
			
		||||
 | 
			
		||||
  if(first) then
 | 
			
		||||
     first=.false.
 | 
			
		||||
     ncall=-1
 | 
			
		||||
     fsample=11025.d0
 | 
			
		||||
     u=0.05d0
 | 
			
		||||
     mfsample2=110250
 | 
			
		||||
     filled=.false.
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
! Measure average sampling frequency over a recent interval
 | 
			
		||||
  ncall=ncall+1
 | 
			
		||||
  if(ncall.eq.9) then
 | 
			
		||||
     ntt0=0
 | 
			
		||||
     ntt1=0
 | 
			
		||||
     tt1(ntt1)=tt
 | 
			
		||||
  endif
 | 
			
		||||
  if(ncall.ge.10) then
 | 
			
		||||
     ntt1=iand(ntt1+1,NTRING-1)
 | 
			
		||||
     tt1(ntt1)=tt
 | 
			
		||||
     if(ntt1.eq.NTRING-1) filled=.true.
 | 
			
		||||
     if(filled) ntt0=iand(ntt1+1,NTRING-1)
 | 
			
		||||
     if(mod(ncall,2).eq.1) then
 | 
			
		||||
        nd=ntt1-ntt0
 | 
			
		||||
        if(nd.lt.0) nd=nd+NTRING
 | 
			
		||||
        fs=nd*2048.d0/(tt1(ntt1)-tt1(ntt0))
 | 
			
		||||
        fsample=u*fs + (1.d0-u)*fsample
 | 
			
		||||
        mfsample2=nint(10.d0*fsample)
 | 
			
		||||
     endif
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  return
 | 
			
		||||
end subroutine fivehztx
 | 
			
		||||
 | 
			
		||||
subroutine addnoise(n)
 | 
			
		||||
  integer*2 n
 | 
			
		||||
  real*8 txsnrdb0
 | 
			
		||||
  include 'gcom1.f90'
 | 
			
		||||
  data idum/0/
 | 
			
		||||
  save
 | 
			
		||||
 | 
			
		||||
  if(txsnrdb.gt.40.0) return
 | 
			
		||||
  if(txsnrdb.ne.txsnrdb0) then
 | 
			
		||||
     snr=10.0**(0.05*(txsnrdb-1))
 | 
			
		||||
     fac=3000.0
 | 
			
		||||
     if(snr.gt.1.0) fac=3000.0/snr
 | 
			
		||||
     txsnrdb0=txsnrdb
 | 
			
		||||
  endif
 | 
			
		||||
  i=fac*(gran(idum) + n*snr/32768.0)
 | 
			
		||||
  if(i>32767) i=32767;
 | 
			
		||||
  if(i<-32767) i=-32767;
 | 
			
		||||
  n=i
 | 
			
		||||
 | 
			
		||||
  return
 | 
			
		||||
end subroutine addnoise
 | 
			
		||||
 | 
			
		||||
real function gran(idum)
 | 
			
		||||
  real r(12)
 | 
			
		||||
  if(idum.lt.0) then
 | 
			
		||||
     call random_seed
 | 
			
		||||
     idum=0
 | 
			
		||||
  endif
 | 
			
		||||
  call random_number(r)
 | 
			
		||||
  gran=sum(r)-6.0
 | 
			
		||||
end function gran
 | 
			
		||||
							
								
								
									
										5
									
								
								fivehz.h
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								fivehz.h
									
									
									
									
									
								
							@ -1,5 +0,0 @@
 | 
			
		||||
#include <inttypes.h>
 | 
			
		||||
 | 
			
		||||
void addnoise_(int16_t *n2);
 | 
			
		||||
void fivehztx_(void);
 | 
			
		||||
void fivehz_(void);
 | 
			
		||||
							
								
								
									
										30
									
								
								flat1.f
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								flat1.f
									
									
									
									
									
								
							@ -1,30 +0,0 @@
 | 
			
		||||
      subroutine flat1(psavg,s2,nh,nsteps,nhmax,nsmax)
 | 
			
		||||
 | 
			
		||||
      real psavg(nh)
 | 
			
		||||
      real s2(nhmax,nsmax)
 | 
			
		||||
      real x(8192),tmp(33)
 | 
			
		||||
 | 
			
		||||
      nsmo=33
 | 
			
		||||
      ia=nsmo/2 + 1
 | 
			
		||||
      ib=nh - nsmo/2 - 1
 | 
			
		||||
      do i=ia,ib
 | 
			
		||||
         call pctile(psavg(i-nsmo/2),tmp,nsmo,50,x(i))
 | 
			
		||||
      enddo
 | 
			
		||||
      do i=1,ia-1
 | 
			
		||||
         x(i)=x(ia)
 | 
			
		||||
      enddo
 | 
			
		||||
      do i=ib+1,nh
 | 
			
		||||
         x(i)=x(ib)
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      do i=1,nh
 | 
			
		||||
         psavg(i)=psavg(i)/x(i)
 | 
			
		||||
         do j=1,nsteps
 | 
			
		||||
            s2(i,j)=s2(i,j)/x(i)
 | 
			
		||||
         enddo
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
							
								
								
									
										28
									
								
								flat2.f
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								flat2.f
									
									
									
									
									
								
							@ -1,28 +0,0 @@
 | 
			
		||||
      subroutine flat2(ss,n,nsum)
 | 
			
		||||
 | 
			
		||||
      real ss(2048)
 | 
			
		||||
      real ref(2048)
 | 
			
		||||
      real tmp(2048)
 | 
			
		||||
 | 
			
		||||
      nsmo=20
 | 
			
		||||
      base=50*(float(nsum)**1.5)
 | 
			
		||||
      ia=nsmo+1
 | 
			
		||||
      ib=n-nsmo-1
 | 
			
		||||
      do i=ia,ib
 | 
			
		||||
         call pctile(ss(i-nsmo),tmp,2*nsmo+1,50,ref(i))
 | 
			
		||||
      enddo
 | 
			
		||||
      call pctile(ref(ia),tmp,ib-ia+1,68,base2)
 | 
			
		||||
 | 
			
		||||
C  Don't flatten if signal is extremely low (e.g., RX is off).
 | 
			
		||||
      if(base2.gt.0.05*base) then
 | 
			
		||||
         do i=ia,ib
 | 
			
		||||
            ss(i)=base*ss(i)/ref(i)
 | 
			
		||||
         enddo
 | 
			
		||||
      else
 | 
			
		||||
         do i=1,n
 | 
			
		||||
            ss(i)=0.
 | 
			
		||||
         enddo
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										105
									
								
								flatten.f
									
									
									
									
									
								
							
							
						
						
									
										105
									
								
								flatten.f
									
									
									
									
									
								
							@ -1,105 +0,0 @@
 | 
			
		||||
      subroutine flatten(s2,nbins,jz,psa,ref,birdie,variance)
 | 
			
		||||
 | 
			
		||||
C  Examines the 2-d spectrum s2(nbins,jz) and makes a reference spectrum
 | 
			
		||||
C  from the jz/2 spectra below the 50th percentile in total power.  Uses
 | 
			
		||||
C  reference spectrum (with birdies removed) to flatten the passband.
 | 
			
		||||
 | 
			
		||||
      real s2(nbins,jz)               !2d spectrum
 | 
			
		||||
      real psa(nbins)                 !Grand average spectrum
 | 
			
		||||
      real ref(nbins)                 !Ref spect: smoothed ave of lower half
 | 
			
		||||
      real birdie(nbins)              !Spec (with birdies) for plot, in dB
 | 
			
		||||
      real variance(nbins)
 | 
			
		||||
      real ref2(750)                  !Work array
 | 
			
		||||
      real power(300)
 | 
			
		||||
      
 | 
			
		||||
C  Find power in each time block, then get median
 | 
			
		||||
      do j=1,jz
 | 
			
		||||
         s=0.
 | 
			
		||||
         do i=1,nbins
 | 
			
		||||
            s=s+s2(i,j)
 | 
			
		||||
         enddo
 | 
			
		||||
         power(j)=s
 | 
			
		||||
      enddo
 | 
			
		||||
      call pctile(power,ref2,jz,50,xmedian)
 | 
			
		||||
      if(jz.lt.5) go to 900
 | 
			
		||||
 | 
			
		||||
C  Get variance in each freq channel, using only those spectra with
 | 
			
		||||
C  power below the median.
 | 
			
		||||
      do i=1,nbins                        
 | 
			
		||||
         s=0.
 | 
			
		||||
         nsum=0
 | 
			
		||||
         do j=1,jz
 | 
			
		||||
            if(power(j).le.xmedian) then
 | 
			
		||||
               s=s+s2(i,j)
 | 
			
		||||
               nsum=nsum+1
 | 
			
		||||
            endif
 | 
			
		||||
         enddo
 | 
			
		||||
         s=s/nsum
 | 
			
		||||
         sq=0.
 | 
			
		||||
         do j=1,jz
 | 
			
		||||
            if(power(j).le.xmedian) sq=sq + (s2(i,j)/s-1.0)**2
 | 
			
		||||
         enddo
 | 
			
		||||
         variance(i)=sq/nsum
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
C  Get grand average, and average of spectra with power below median.
 | 
			
		||||
      call zero(psa,nbins)
 | 
			
		||||
      call zero(ref,nbins)
 | 
			
		||||
      nsum=0
 | 
			
		||||
      do j=1,jz
 | 
			
		||||
         call add(psa,s2(1,j),psa,nbins)
 | 
			
		||||
         if(power(j).le.xmedian) then
 | 
			
		||||
            call add(ref,s2(1,j),ref,nbins)
 | 
			
		||||
            nsum=nsum+1
 | 
			
		||||
         endif
 | 
			
		||||
      enddo
 | 
			
		||||
      do i=1,nbins                          !Normalize the averages
 | 
			
		||||
         psa(i)=psa(i)/jz
 | 
			
		||||
         ref(i)=ref(i)/nsum
 | 
			
		||||
         birdie(i)=ref(i)                   !Copy ref into birdie
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
C  Compute smoothed reference spectrum with narrow lines (birdies) removed
 | 
			
		||||
      do i=4,nbins-3
 | 
			
		||||
         rmax=-1.e10
 | 
			
		||||
         do k=i-3,i+3                  !Get highest point within +/- 3 bins
 | 
			
		||||
            if(ref(k).gt.rmax) then
 | 
			
		||||
               rmax=ref(k)
 | 
			
		||||
               kpk=k
 | 
			
		||||
            endif
 | 
			
		||||
         enddo
 | 
			
		||||
         sum=0.
 | 
			
		||||
         nsum=0
 | 
			
		||||
         do k=i-3,i+3
 | 
			
		||||
            if(abs(k-kpk).gt.1) then
 | 
			
		||||
               sum=sum+ref(k)
 | 
			
		||||
               nsum=nsum+1
 | 
			
		||||
            endif
 | 
			
		||||
         enddo
 | 
			
		||||
         ref2(i)=sum/nsum
 | 
			
		||||
      enddo
 | 
			
		||||
      call move(ref2(4),ref(4),nbins-6)     !Copy smoothed ref back into ref
 | 
			
		||||
      
 | 
			
		||||
      call pctile(ref(4),ref2,nbins-6,50,xmedian)  !Get median in-band level
 | 
			
		||||
 | 
			
		||||
C  Fix ends of reference spectrum
 | 
			
		||||
      do i=1,3
 | 
			
		||||
         ref(i)=ref(4)
 | 
			
		||||
         ref(nbins+1-i)=ref(nbins-3)
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      facmax=30.0/xmedian
 | 
			
		||||
      do i=1,nbins                          !Flatten the 2d spectrum
 | 
			
		||||
         fac=xmedian/ref(i)
 | 
			
		||||
         fac=min(fac,facmax)
 | 
			
		||||
         do j=1,jz
 | 
			
		||||
            s2(i,j)=fac*s2(i,j)
 | 
			
		||||
         enddo
 | 
			
		||||
         psa(i)=dB(psa(i)) + 25.
 | 
			
		||||
         ref(i)=dB(ref(i)) + 25.
 | 
			
		||||
         birdie(i)=db(birdie(i)) + 25.
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
900   continue
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										10
									
								
								flushqqq.f90
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								flushqqq.f90
									
									
									
									
									
								
							@ -1,10 +0,0 @@
 | 
			
		||||
subroutine flushqqq(lu)
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  use dfport
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  call flush(lu)
 | 
			
		||||
 | 
			
		||||
  return
 | 
			
		||||
end subroutine flushqqq
 | 
			
		||||
							
								
								
									
										350
									
								
								four2.f
									
									
									
									
									
								
							
							
						
						
									
										350
									
								
								four2.f
									
									
									
									
									
								
							@ -1,350 +0,0 @@
 | 
			
		||||
      SUBROUTINE FOUR2a (DATA,N,NDIM,ISIGN,IFORM)
 | 
			
		||||
 | 
			
		||||
C     Cooley-Tukey fast Fourier transform in USASI basic Fortran.
 | 
			
		||||
C     multi-dimensional transform, each dimension a power of two,
 | 
			
		||||
C     complex or real data.
 | 
			
		||||
 | 
			
		||||
C     TRANSFORM(K1,K2,...) = SUM(DATA(J1,J2,...)*EXP(ISIGN*2*PI*SQRT(-1)
 | 
			
		||||
C     *((J1-1)*(K1-1)/N(1)+(J2-1)*(K2-1)/N(2)+...))), summed for all
 | 
			
		||||
C     J1 and K1 from 1 to N(1), J2 and K2 from 1 TO N(2),
 | 
			
		||||
C     etc, for all NDIM subscripts.  NDIM must be positive and
 | 
			
		||||
C     each N(IDIM) must be a power of two.  ISIGN is +1 or -1.
 | 
			
		||||
C     Let NTOT = N(1)*N(2)*...*N(NDIM).  Then a -1 transform
 | 
			
		||||
C     followed by a +1 one (or vice versa) returns NTOT
 | 
			
		||||
C     times the original data.  
 | 
			
		||||
 | 
			
		||||
C     IFORM = 1, 0 or -1, as data is
 | 
			
		||||
C     complex, real, or the first half of a complex array.  Transform
 | 
			
		||||
C     values are returned in array DATA.  They are complex, real, or
 | 
			
		||||
C     the first half of a complex array, as IFORM = 1, -1 or 0.
 | 
			
		||||
 | 
			
		||||
C     The transform of a real array (IFORM = 0) dimensioned N(1) by N(2)
 | 
			
		||||
C     by ... will be returned in the same array, now considered to
 | 
			
		||||
C     be complex of dimensions N(1)/2+1 by N(2) by ....  Note that if
 | 
			
		||||
C     IFORM = 0 or -1, N(1) must be even, and enough room must be
 | 
			
		||||
C     reserved.  The missing values may be obtained by complex conjuga-
 | 
			
		||||
C     tion.  
 | 
			
		||||
 | 
			
		||||
C     The reverse transformation of a half complex array dimensioned
 | 
			
		||||
C     N(1)/2+1 by N(2) by ..., is accomplished by setting IFORM
 | 
			
		||||
C     to -1.  In the N array, N(1) must be the true N(1), not N(1)/2+1.
 | 
			
		||||
C     The transform will be real and returned to the input array.
 | 
			
		||||
 | 
			
		||||
C     Running time is proportional to NTOT*LOG2(NTOT), rather than
 | 
			
		||||
C     the naive NTOT**2.  Furthermore, less error is built up.
 | 
			
		||||
 | 
			
		||||
C     Written by Norman Brenner of MIT Lincoln Laboratory, January 1969.
 | 
			
		||||
C     See IEEE Audio Transactions (June 1967), Special issue on FFT.
 | 
			
		||||
 | 
			
		||||
      parameter(NMAX=2048*1024)
 | 
			
		||||
      DIMENSION DATA(NMAX), N(1)
 | 
			
		||||
      NTOT=1
 | 
			
		||||
      DO 10 IDIM=1,NDIM
 | 
			
		||||
 10   NTOT=NTOT*N(IDIM)
 | 
			
		||||
      IF (IFORM) 70,20,20
 | 
			
		||||
 20   NREM=NTOT
 | 
			
		||||
      DO 60 IDIM=1,NDIM
 | 
			
		||||
      NREM=NREM/N(IDIM)
 | 
			
		||||
      NPREV=NTOT/(N(IDIM)*NREM)
 | 
			
		||||
      NCURR=N(IDIM)
 | 
			
		||||
      IF (IDIM-1+IFORM) 30,30,40
 | 
			
		||||
 30   NCURR=NCURR/2
 | 
			
		||||
 40   CALL BITRV (DATA,NPREV,NCURR,NREM)
 | 
			
		||||
      CALL COOL2 (DATA,NPREV,NCURR,NREM,ISIGN)
 | 
			
		||||
      IF (IDIM-1+IFORM) 50,50,60
 | 
			
		||||
 50   CALL FIXRL (DATA,N(1),NREM,ISIGN,IFORM)
 | 
			
		||||
      NTOT=(NTOT/N(1))*(N(1)/2+1)
 | 
			
		||||
 60   CONTINUE
 | 
			
		||||
      RETURN
 | 
			
		||||
 70   NTOT=(NTOT/N(1))*(N(1)/2+1)
 | 
			
		||||
      NREM=1
 | 
			
		||||
      DO 100 JDIM=1,NDIM
 | 
			
		||||
      IDIM=NDIM+1-JDIM
 | 
			
		||||
      NCURR=N(IDIM)
 | 
			
		||||
      IF (IDIM-1) 80,80,90
 | 
			
		||||
 80   NCURR=NCURR/2
 | 
			
		||||
      CALL FIXRL (DATA,N(1),NREM,ISIGN,IFORM)
 | 
			
		||||
      NTOT=NTOT/(N(1)/2+1)*N(1)
 | 
			
		||||
 90   NPREV=NTOT/(N(IDIM)*NREM)
 | 
			
		||||
      CALL BITRV (DATA,NPREV,NCURR,NREM)
 | 
			
		||||
      CALL COOL2 (DATA,NPREV,NCURR,NREM,ISIGN)
 | 
			
		||||
 100  NREM=NREM*N(IDIM)
 | 
			
		||||
      RETURN
 | 
			
		||||
      END
 | 
			
		||||
      SUBROUTINE BITRV (DATA,NPREV,N,NREM)
 | 
			
		||||
C     SHUFFLE THE DATA BY BIT REVERSAL.
 | 
			
		||||
C     DIMENSION DATA(NPREV,N,NREM)
 | 
			
		||||
C     COMPLEX DATA
 | 
			
		||||
C     EXCHANGE DATA(J1,J4REV,J5) WITH DATA(J1,J4,J5) FOR ALL J1 FROM 1
 | 
			
		||||
C     TO NPREV, ALL J4 FROM 1 TO N (WHICH MUST BE A POWER OF TWO), AND
 | 
			
		||||
C     ALL J5 FROM 1 TO NREM.  J4REV-1 IS THE BIT REVERSAL OF J4-1.  E.G.
 | 
			
		||||
C     SUPPOSE N = 32.  THEN FOR J4-1 = 10011, J4REV-1 = 11001, ETC.
 | 
			
		||||
      parameter(NMAX=2048*1024)
 | 
			
		||||
      DIMENSION DATA(NMAX)
 | 
			
		||||
      IP0=2
 | 
			
		||||
      IP1=IP0*NPREV
 | 
			
		||||
      IP4=IP1*N
 | 
			
		||||
      IP5=IP4*NREM
 | 
			
		||||
      I4REV=1
 | 
			
		||||
C     I4REV = 1+(J4REV-1)*IP1
 | 
			
		||||
      DO 60 I4=1,IP4,IP1
 | 
			
		||||
C     I4 = 1+(J4-1)*IP1
 | 
			
		||||
      IF (I4-I4REV) 10,30,30
 | 
			
		||||
 10   I1MAX=I4+IP1-IP0
 | 
			
		||||
      DO 20 I1=I4,I1MAX,IP0
 | 
			
		||||
C     I1 = 1+(J1-1)*IP0+(J4-1)*IP1
 | 
			
		||||
      DO 20 I5=I1,IP5,IP4
 | 
			
		||||
C     I5 = 1+(J1-1)*IP0+(J4-1)*IP1+(J5-1)*IP4
 | 
			
		||||
      I5REV=I4REV+I5-I4
 | 
			
		||||
C     I5REV = 1+(J1-1)*IP0+(J4REV-1)*IP1+(J5-1)*IP4
 | 
			
		||||
      TEMPR=DATA(I5)
 | 
			
		||||
      TEMPI=DATA(I5+1)
 | 
			
		||||
      DATA(I5)=DATA(I5REV)
 | 
			
		||||
      DATA(I5+1)=DATA(I5REV+1)
 | 
			
		||||
      DATA(I5REV)=TEMPR
 | 
			
		||||
 20   DATA(I5REV+1)=TEMPI
 | 
			
		||||
C     ADD ONE WITH DOWNWARD CARRY TO THE HIGH ORDER BIT OF J4REV-1.
 | 
			
		||||
 30   IP2=IP4/2
 | 
			
		||||
 40   IF (I4REV-IP2) 60,60,50
 | 
			
		||||
 50   I4REV=I4REV-IP2
 | 
			
		||||
      IP2=IP2/2
 | 
			
		||||
      IF (IP2-IP1) 60,40,40
 | 
			
		||||
 60   I4REV=I4REV+IP2
 | 
			
		||||
      RETURN
 | 
			
		||||
      END
 | 
			
		||||
      SUBROUTINE COOL2 (DATA,NPREV,N,NREM,ISIGN)
 | 
			
		||||
C     DISCRETE FOURIER TRANSFORM OF LENGTH N.  IN-PLACE COOLEY-TUKEY
 | 
			
		||||
C     ALGORITHM, BIT-REVERSED TO NORMAL ORDER, SANDE-TUKEY PHASE SHIFTS.
 | 
			
		||||
C     DIMENSION DATA(NPREV,N,NREM)
 | 
			
		||||
C     COMPLEX DATA
 | 
			
		||||
C     DATA(J1,K4,J5) = SUM(DATA(J1,J4,J5)*EXP(ISIGN*2*PI*I*(J4-1)*
 | 
			
		||||
C     (K4-1)/N)), SUMMED OVER J4 = 1 TO N FOR ALL J1 FROM 1 TO NPREV,
 | 
			
		||||
C     K4 FROM 1 TO N AND J5 FROM 1 TO NREM.  N MUST BE A POWER OF TWO.
 | 
			
		||||
C     METHOD--LET IPREV TAKE THE VALUES 1, 2 OR 4, 4 OR 8, ..., N/16,
 | 
			
		||||
C     N/4, N.  THE CHOICE BETWEEN 2 OR 4, ETC., DEPENDS ON WHETHER N IS
 | 
			
		||||
C     A POWER OF FOUR.  DEFINE IFACT = 2 OR 4, THE NEXT FACTOR THAT
 | 
			
		||||
C     IPREV MUST TAKE, AND IREM = N/(IFACT*IPREV).  THEN--
 | 
			
		||||
C     DIMENSION DATA(NPREV,IPREV,IFACT,IREM,NREM)
 | 
			
		||||
C     COMPLEX DATA
 | 
			
		||||
C     DATA(J1,J2,K3,J4,J5) = SUM(DATA(J1,J2,J3,J4,J5)*EXP(ISIGN*2*PI*I*
 | 
			
		||||
C     (K3-1)*((J3-1)/IFACT+(J2-1)/(IFACT*IPREV)))), SUMMED OVER J3 = 1
 | 
			
		||||
C     TO IFACT FOR ALL J1 FROM 1 TO NPREV, J2 FROM 1 TO IPREV, K3 FROM
 | 
			
		||||
C     1 TO IFACT, J4 FROM 1 TO IREM AND J5 FROM 1 TO NREM.  THIS IS
 | 
			
		||||
C     A PHASE-SHIFTED DISCRETE FOURIER TRANSFORM OF LENGTH IFACT.
 | 
			
		||||
C     FACTORING N BY FOURS SAVES ABOUT TWENTY FIVE PERCENT OVER FACTOR-
 | 
			
		||||
C     ING BY TWOS.  DATA MUST BE BIT-REVERSED INITIALLY.
 | 
			
		||||
C     IT IS NOT NECESSARY TO REWRITE THIS SUBROUTINE INTO COMPLEX
 | 
			
		||||
C     NOTATION SO LONG AS THE FORTRAN COMPILER USED STORES REAL AND
 | 
			
		||||
C     IMAGINARY PARTS IN ADJACENT STORAGE LOCATIONS.  IT MUST ALSO
 | 
			
		||||
C     STORE ARRAYS WITH THE FIRST SUBSCRIPT INCREASING FASTEST.
 | 
			
		||||
      parameter(NMAX=2048*1024)
 | 
			
		||||
      DIMENSION DATA(NMAX)
 | 
			
		||||
 | 
			
		||||
      real*8 twopi,wstpr,wstpi,wr,wi,w2r,w2i,w3r,w3i,wtempr
 | 
			
		||||
 | 
			
		||||
      TWOPI=6.2831853072*FLOAT(ISIGN)
 | 
			
		||||
      IP0=2
 | 
			
		||||
      IP1=IP0*NPREV
 | 
			
		||||
      IP4=IP1*N
 | 
			
		||||
      IP5=IP4*NREM
 | 
			
		||||
      IP2=IP1
 | 
			
		||||
C     IP2=IP1*IPROD
 | 
			
		||||
      NPART=N
 | 
			
		||||
 10   IF (NPART-2) 60,30,20
 | 
			
		||||
 20   NPART=NPART/4
 | 
			
		||||
      GO TO 10
 | 
			
		||||
C     DO A FOURIER TRANSFORM OF LENGTH TWO
 | 
			
		||||
 30   IF (IP2-IP4) 40,160,160
 | 
			
		||||
 40   IP3=IP2*2
 | 
			
		||||
C     IP3=IP2*IFACT
 | 
			
		||||
      DO 50 I1=1,IP1,IP0
 | 
			
		||||
C     I1 = 1+(J1-1)*IP0
 | 
			
		||||
      DO 50 I5=I1,IP5,IP3
 | 
			
		||||
C     I5 = 1+(J1-1)*IP0+(J4-1)*IP3+(J5-1)*IP4
 | 
			
		||||
      I3A=I5
 | 
			
		||||
      I3B=I3A+IP2
 | 
			
		||||
C     I3 = 1+(J1-1)*IP0+(J2-1)*IP1+(J3-1)*IP2+(J4-1)*IP3+(J5-1)*IP4
 | 
			
		||||
      TEMPR=DATA(I3B)
 | 
			
		||||
      TEMPI=DATA(I3B+1)
 | 
			
		||||
      DATA(I3B)=DATA(I3A)-TEMPR
 | 
			
		||||
      DATA(I3B+1)=DATA(I3A+1)-TEMPI
 | 
			
		||||
      DATA(I3A)=DATA(I3A)+TEMPR
 | 
			
		||||
 50   DATA(I3A+1)=DATA(I3A+1)+TEMPI
 | 
			
		||||
      IP2=IP3
 | 
			
		||||
C     DO A FOURIER TRANSFORM OF LENGTH FOUR (FROM BIT REVERSED ORDER)
 | 
			
		||||
 60   IF (IP2-IP4) 70,160,160
 | 
			
		||||
 70   IP3=IP2*4
 | 
			
		||||
C     IP3=IP2*IFACT
 | 
			
		||||
C     COMPUTE TWOPI THRU WR AND WI IN DOUBLE PRECISION, IF AVAILABLE.
 | 
			
		||||
      THETA=TWOPI/FLOAT(IP3/IP1)
 | 
			
		||||
      SINTH=SIN(THETA/2)
 | 
			
		||||
      WSTPR=-2*SINTH*SINTH
 | 
			
		||||
      WSTPI=SIN(THETA)
 | 
			
		||||
      WR=1.
 | 
			
		||||
      WI=0.
 | 
			
		||||
      DO 150 I2=1,IP2,IP1
 | 
			
		||||
C     I2 = 1+(J2-1)*IP1
 | 
			
		||||
      IF (I2-1) 90,90,80
 | 
			
		||||
 80   W2R=WR*WR-WI*WI
 | 
			
		||||
      W2I=2*WR*WI
 | 
			
		||||
      W3R=W2R*WR-W2I*WI
 | 
			
		||||
      W3I=W2R*WI+W2I*WR
 | 
			
		||||
 90   I1MAX=I2+IP1-IP0
 | 
			
		||||
      DO 140 I1=I2,I1MAX,IP0
 | 
			
		||||
C     I1 = 1+(J1-1)*IP0+(J2-1)*IP1
 | 
			
		||||
      DO 140 I5=I1,IP5,IP3
 | 
			
		||||
C     I5 = 1+(J1-1)*IP0+(J2-1)*IP1+(J4-1)*IP3+(J5-1)*IP4
 | 
			
		||||
      I3A=I5
 | 
			
		||||
      I3B=I3A+IP2
 | 
			
		||||
      I3C=I3B+IP2
 | 
			
		||||
      I3D=I3C+IP2
 | 
			
		||||
C     I3 = 1+(J1-1)*IP0+(J2-1)*IP1+(J3-1)*IP2+(J4-1)*IP3+(J5-1)*IP4
 | 
			
		||||
      IF (I2-1) 110,110,100
 | 
			
		||||
C     APPLY THE PHASE SHIFT FACTORS
 | 
			
		||||
 100  TEMPR=DATA(I3B)
 | 
			
		||||
      DATA(I3B)=W2R*DATA(I3B)-W2I*DATA(I3B+1)
 | 
			
		||||
      DATA(I3B+1)=W2R*DATA(I3B+1)+W2I*TEMPR
 | 
			
		||||
      TEMPR=DATA(I3C)
 | 
			
		||||
      DATA(I3C)=WR*DATA(I3C)-WI*DATA(I3C+1)
 | 
			
		||||
      DATA(I3C+1)=WR*DATA(I3C+1)+WI*TEMPR
 | 
			
		||||
      TEMPR=DATA(I3D)
 | 
			
		||||
      DATA(I3D)=W3R*DATA(I3D)-W3I*DATA(I3D+1)
 | 
			
		||||
      DATA(I3D+1)=W3R*DATA(I3D+1)+W3I*TEMPR
 | 
			
		||||
 110  T0R=DATA(I3A)+DATA(I3B)
 | 
			
		||||
      T0I=DATA(I3A+1)+DATA(I3B+1)
 | 
			
		||||
      T1R=DATA(I3A)-DATA(I3B)
 | 
			
		||||
      T1I=DATA(I3A+1)-DATA(I3B+1)
 | 
			
		||||
      T2R=DATA(I3C)+DATA(I3D)
 | 
			
		||||
      T2I=DATA(I3C+1)+DATA(I3D+1)
 | 
			
		||||
      T3R=DATA(I3C)-DATA(I3D)
 | 
			
		||||
      T3I=DATA(I3C+1)-DATA(I3D+1)
 | 
			
		||||
      DATA(I3A)=T0R+T2R
 | 
			
		||||
      DATA(I3A+1)=T0I+T2I
 | 
			
		||||
      DATA(I3C)=T0R-T2R
 | 
			
		||||
      DATA(I3C+1)=T0I-T2I
 | 
			
		||||
      IF (ISIGN) 120,120,130
 | 
			
		||||
 120  T3R=-T3R
 | 
			
		||||
      T3I=-T3I
 | 
			
		||||
 130  DATA(I3B)=T1R-T3I
 | 
			
		||||
      DATA(I3B+1)=T1I+T3R
 | 
			
		||||
      DATA(I3D)=T1R+T3I
 | 
			
		||||
 140  DATA(I3D+1)=T1I-T3R
 | 
			
		||||
      WTEMPR=WR
 | 
			
		||||
      WR=WSTPR*WTEMPR-WSTPI*WI+WTEMPR
 | 
			
		||||
 150  WI=WSTPR*WI+WSTPI*WTEMPR+WI
 | 
			
		||||
      IP2=IP3
 | 
			
		||||
      GO TO 60
 | 
			
		||||
 160  RETURN
 | 
			
		||||
      END
 | 
			
		||||
      SUBROUTINE FIXRL (DATA,N,NREM,ISIGN,IFORM)
 | 
			
		||||
C     FOR IFORM = 0, CONVERT THE TRANSFORM OF A DOUBLED-UP REAL ARRAY,
 | 
			
		||||
C     CONSIDERED COMPLEX, INTO ITS TRUE TRANSFORM.  SUPPLY ONLY THE
 | 
			
		||||
C     FIRST HALF OF THE COMPLEX TRANSFORM, AS THE SECOND HALF HAS
 | 
			
		||||
C     CONJUGATE SYMMETRY.  FOR IFORM = -1, CONVERT THE FIRST HALF
 | 
			
		||||
C     OF THE TRUE TRANSFORM INTO THE TRANSFORM OF A DOUBLED-UP REAL
 | 
			
		||||
C     ARRAY.  N MUST BE EVEN.
 | 
			
		||||
C     USING COMPLEX NOTATION AND SUBSCRIPTS STARTING AT ZERO, THE
 | 
			
		||||
C     TRANSFORMATION IS--
 | 
			
		||||
C     DIMENSION DATA(N,NREM)
 | 
			
		||||
C     ZSTP = EXP(ISIGN*2*PI*I/N)
 | 
			
		||||
C     DO 10 I2=0,NREM-1
 | 
			
		||||
C     DATA(0,I2) = CONJ(DATA(0,I2))*(1+I)
 | 
			
		||||
C     DO 10 I1=1,N/4
 | 
			
		||||
C     Z = (1+(2*IFORM+1)*I*ZSTP**I1)/2
 | 
			
		||||
C     I1CNJ = N/2-I1
 | 
			
		||||
C     DIF = DATA(I1,I2)-CONJ(DATA(I1CNJ,I2))
 | 
			
		||||
C     TEMP = Z*DIF
 | 
			
		||||
C     DATA(I1,I2) = (DATA(I1,I2)-TEMP)*(1-IFORM)
 | 
			
		||||
C 10  DATA(I1CNJ,I2) = (DATA(I1CNJ,I2)+CONJ(TEMP))*(1-IFORM)
 | 
			
		||||
C     IF I1=I1CNJ, THE CALCULATION FOR THAT VALUE COLLAPSES INTO
 | 
			
		||||
C     A SIMPLE CONJUGATION OF DATA(I1,I2).
 | 
			
		||||
      parameter(NMAX=2048*1024)
 | 
			
		||||
      DIMENSION DATA(NMAX)
 | 
			
		||||
      TWOPI=6.283185307*FLOAT(ISIGN)
 | 
			
		||||
      IP0=2
 | 
			
		||||
      IP1=IP0*(N/2)
 | 
			
		||||
      IP2=IP1*NREM
 | 
			
		||||
      IF (IFORM) 10,70,70
 | 
			
		||||
C     PACK THE REAL INPUT VALUES (TWO PER COLUMN)
 | 
			
		||||
 10   J1=IP1+1
 | 
			
		||||
      DATA(2)=DATA(J1)
 | 
			
		||||
      IF (NREM-1) 70,70,20
 | 
			
		||||
 20   J1=J1+IP0
 | 
			
		||||
      I2MIN=IP1+1
 | 
			
		||||
      DO 60 I2=I2MIN,IP2,IP1
 | 
			
		||||
      DATA(I2)=DATA(J1)
 | 
			
		||||
      J1=J1+IP0
 | 
			
		||||
      IF (N-2) 50,50,30
 | 
			
		||||
 30   I1MIN=I2+IP0
 | 
			
		||||
      I1MAX=I2+IP1-IP0
 | 
			
		||||
      DO 40 I1=I1MIN,I1MAX,IP0
 | 
			
		||||
      DATA(I1)=DATA(J1)
 | 
			
		||||
      DATA(I1+1)=DATA(J1+1)
 | 
			
		||||
 40   J1=J1+IP0
 | 
			
		||||
 50   DATA(I2+1)=DATA(J1)
 | 
			
		||||
 60   J1=J1+IP0
 | 
			
		||||
 70   DO 80 I2=1,IP2,IP1
 | 
			
		||||
      TEMPR=DATA(I2)
 | 
			
		||||
      DATA(I2)=DATA(I2)+DATA(I2+1)
 | 
			
		||||
 80   DATA(I2+1)=TEMPR-DATA(I2+1)
 | 
			
		||||
      IF (N-2) 200,200,90
 | 
			
		||||
 90   THETA=TWOPI/FLOAT(N)
 | 
			
		||||
      SINTH=SIN(THETA/2.)
 | 
			
		||||
      ZSTPR=-2.*SINTH*SINTH
 | 
			
		||||
      ZSTPI=SIN(THETA)
 | 
			
		||||
      ZR=(1.-ZSTPI)/2.
 | 
			
		||||
      ZI=(1.+ZSTPR)/2.
 | 
			
		||||
      IF (IFORM) 100,110,110
 | 
			
		||||
 100  ZR=1.-ZR
 | 
			
		||||
      ZI=-ZI
 | 
			
		||||
 110  I1MIN=IP0+1
 | 
			
		||||
      I1MAX=IP0*(N/4)+1
 | 
			
		||||
      DO 190 I1=I1MIN,I1MAX,IP0
 | 
			
		||||
      DO 180 I2=I1,IP2,IP1
 | 
			
		||||
      I2CNJ=IP0*(N/2+1)-2*I1+I2
 | 
			
		||||
      IF (I2-I2CNJ) 150,120,120
 | 
			
		||||
 120  IF (ISIGN*(2*IFORM+1)) 130,140,140
 | 
			
		||||
 130  DATA(I2+1)=-DATA(I2+1)
 | 
			
		||||
 140  IF (IFORM) 170,180,180
 | 
			
		||||
 150  DIFR=DATA(I2)-DATA(I2CNJ)
 | 
			
		||||
      DIFI=DATA(I2+1)+DATA(I2CNJ+1)
 | 
			
		||||
      TEMPR=DIFR*ZR-DIFI*ZI
 | 
			
		||||
      TEMPI=DIFR*ZI+DIFI*ZR
 | 
			
		||||
      DATA(I2)=DATA(I2)-TEMPR
 | 
			
		||||
      DATA(I2+1)=DATA(I2+1)-TEMPI
 | 
			
		||||
      DATA(I2CNJ)=DATA(I2CNJ)+TEMPR
 | 
			
		||||
      DATA(I2CNJ+1)=DATA(I2CNJ+1)-TEMPI
 | 
			
		||||
      IF (IFORM) 160,180,180
 | 
			
		||||
 160  DATA(I2CNJ)=DATA(I2CNJ)+DATA(I2CNJ)
 | 
			
		||||
      DATA(I2CNJ+1)=DATA(I2CNJ+1)+DATA(I2CNJ+1)
 | 
			
		||||
 170  DATA(I2)=DATA(I2)+DATA(I2)
 | 
			
		||||
      DATA(I2+1)=DATA(I2+1)+DATA(I2+1)
 | 
			
		||||
 180  CONTINUE
 | 
			
		||||
      TEMPR=ZR-.5
 | 
			
		||||
      ZR=ZSTPR*TEMPR-ZSTPI*ZI+ZR
 | 
			
		||||
 190  ZI=ZSTPR*ZI+ZSTPI*TEMPR+ZI
 | 
			
		||||
C     RECURSION SAVES TIME, AT A SLIGHT LOSS IN ACCURACY.  IF AVAILABLE,
 | 
			
		||||
C     USE DOUBLE PRECISION TO COMPUTE ZR AND ZI.
 | 
			
		||||
 200  IF (IFORM) 270,210,210
 | 
			
		||||
C     UNPACK THE REAL TRANSFORM VALUES (TWO PER COLUMN)
 | 
			
		||||
 210  I2=IP2+1
 | 
			
		||||
      I1=I2
 | 
			
		||||
      J1=IP0*(N/2+1)*NREM+1
 | 
			
		||||
      GO TO 250
 | 
			
		||||
 220  DATA(J1)=DATA(I1)
 | 
			
		||||
      DATA(J1+1)=DATA(I1+1)
 | 
			
		||||
      I1=I1-IP0
 | 
			
		||||
      J1=J1-IP0
 | 
			
		||||
 230  IF (I2-I1) 220,240,240
 | 
			
		||||
 240  DATA(J1)=DATA(I1)
 | 
			
		||||
      DATA(J1+1)=0.
 | 
			
		||||
 250  I2=I2-IP1
 | 
			
		||||
      J1=J1-IP0
 | 
			
		||||
      DATA(J1)=DATA(I2+1)
 | 
			
		||||
      DATA(J1+1)=0.
 | 
			
		||||
      I1=I1-IP0
 | 
			
		||||
      J1=J1-IP0
 | 
			
		||||
      IF (I2-1) 260,260,230
 | 
			
		||||
 260  DATA(2)=0.
 | 
			
		||||
 270  RETURN
 | 
			
		||||
      END
 | 
			
		||||
							
								
								
									
										111
									
								
								four2a.f
									
									
									
									
									
								
							
							
						
						
									
										111
									
								
								four2a.f
									
									
									
									
									
								
							@ -1,111 +0,0 @@
 | 
			
		||||
      subroutine four2a(a,nfft,ndim,isign,iform)
 | 
			
		||||
 | 
			
		||||
C     IFORM = 1, 0 or -1, as data is
 | 
			
		||||
C     complex, real, or the first half of a complex array.  Transform
 | 
			
		||||
C     values are returned in array DATA.  They are complex, real, or
 | 
			
		||||
C     the first half of a complex array, as IFORM = 1, -1 or 0.
 | 
			
		||||
 | 
			
		||||
C     The transform of a real array (IFORM = 0) dimensioned N(1) by N(2)
 | 
			
		||||
C     by ... will be returned in the same array, now considered to
 | 
			
		||||
C     be complex of dimensions N(1)/2+1 by N(2) by ....  Note that if
 | 
			
		||||
C     IFORM = 0 or -1, N(1) must be even, and enough room must be
 | 
			
		||||
C     reserved.  The missing values may be obtained by complex conjuga-
 | 
			
		||||
C     tion.  
 | 
			
		||||
 | 
			
		||||
C     The reverse transformation of a half complex array dimensioned
 | 
			
		||||
C     N(1)/2+1 by N(2) by ..., is accomplished by setting IFORM
 | 
			
		||||
C     to -1.  In the N array, N(1) must be the true N(1), not N(1)/2+1.
 | 
			
		||||
C     The transform will be real and returned to the input array.
 | 
			
		||||
 | 
			
		||||
      parameter (NPMAX=100)
 | 
			
		||||
      parameter (NSMALL=16384)
 | 
			
		||||
      complex a(nfft)
 | 
			
		||||
      complex aa(NSMALL)
 | 
			
		||||
      integer nn(NPMAX),ns(NPMAX),nf(NPMAX),nl(NPMAX)
 | 
			
		||||
      real*8 plan(NPMAX)             !Actually should be i*8, but no matter
 | 
			
		||||
      data nplan/0/
 | 
			
		||||
      include 'fftw3.f'
 | 
			
		||||
      save plan,nplan,nn,ns,nf,nl
 | 
			
		||||
 | 
			
		||||
      if(nfft.lt.0 .or. ndim.lt.0) go to 999
 | 
			
		||||
 | 
			
		||||
      nloc=loc(a)
 | 
			
		||||
      do i=1,nplan
 | 
			
		||||
         if(nfft.eq.nn(i) .and. isign.eq.ns(i) .and.
 | 
			
		||||
     +      iform.eq.nf(i) .and. nloc.eq.nl(i)) go to 10
 | 
			
		||||
      enddo
 | 
			
		||||
      if(nplan.ge.NPMAX) stop 'Too many FFTW plans requested.'
 | 
			
		||||
      nplan=nplan+1
 | 
			
		||||
      i=nplan
 | 
			
		||||
      nn(i)=nfft
 | 
			
		||||
      ns(i)=isign
 | 
			
		||||
      nf(i)=iform
 | 
			
		||||
      nl(i)=nloc
 | 
			
		||||
 | 
			
		||||
C  Planning: FFTW_ESTIMATE, FFTW_ESTIMATE_PATIENT, FFTW_MEASURE, 
 | 
			
		||||
C            FFTW_PATIENT,  FFTW_EXHAUSTIVE
 | 
			
		||||
      npatience=1
 | 
			
		||||
      nflags=FFTW_ESTIMATE
 | 
			
		||||
      if(npatience.eq.1) nflags=FFTW_ESTIMATE_PATIENT
 | 
			
		||||
      if(npatience.eq.2) nflags=FFTW_MEASURE
 | 
			
		||||
      if(npatience.eq.3) nflags=FFTW_PATIENT
 | 
			
		||||
      if(npatience.eq.4) nflags=FFTW_EXHAUSTIVE
 | 
			
		||||
      if(nfft.le.NSMALL) then
 | 
			
		||||
         jz=nfft
 | 
			
		||||
         if(iform.eq.0) jz=nfft/2
 | 
			
		||||
         do j=1,jz
 | 
			
		||||
            aa(j)=a(j)
 | 
			
		||||
         enddo
 | 
			
		||||
      endif
 | 
			
		||||
      call sleep_msec(0)
 | 
			
		||||
      if(isign.eq.-1 .and. iform.eq.1) then
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
         call sfftw_plan_dft_1d_(plan(i),nfft,a,a,FFTW_FORWARD,nflags)
 | 
			
		||||
      else if(isign.eq.1 .and. iform.eq.1) then
 | 
			
		||||
         call sfftw_plan_dft_1d_(plan(i),nfft,a,a,FFTW_BACKWARD,nflags)
 | 
			
		||||
      else if(isign.eq.-1 .and. iform.eq.0) then
 | 
			
		||||
         call sfftw_plan_dft_r2c_1d_(plan(i),nfft,a,a,nflags)
 | 
			
		||||
      else if(isign.eq.1 .and. iform.eq.-1) then
 | 
			
		||||
         call sfftw_plan_dft_c2r_1d_(plan(i),nfft,a,a,nflags)
 | 
			
		||||
#else
 | 
			
		||||
         call sfftw_plan_dft_1d(plan(i),nfft,a,a,FFTW_FORWARD,nflags)
 | 
			
		||||
      else if(isign.eq.1 .and. iform.eq.1) then
 | 
			
		||||
         call sfftw_plan_dft_1d(plan(i),nfft,a,a,FFTW_BACKWARD,nflags)
 | 
			
		||||
      else if(isign.eq.-1 .and. iform.eq.0) then
 | 
			
		||||
         call sfftw_plan_dft_r2c_1d(plan(i),nfft,a,a,nflags)
 | 
			
		||||
      else if(isign.eq.1 .and. iform.eq.-1) then
 | 
			
		||||
         call sfftw_plan_dft_c2r_1d(plan(i),nfft,a,a,nflags)
 | 
			
		||||
#endif
 | 
			
		||||
      else
 | 
			
		||||
         stop 'Unsupported request in four2a'
 | 
			
		||||
      endif
 | 
			
		||||
      call sleep_msec(0)
 | 
			
		||||
      i=nplan
 | 
			
		||||
      if(nfft.le.NSMALL) then
 | 
			
		||||
         jz=nfft
 | 
			
		||||
         if(iform.eq.0) jz=nfft/2
 | 
			
		||||
         do j=1,jz
 | 
			
		||||
            a(j)=aa(j)
 | 
			
		||||
         enddo
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
 10   continue
 | 
			
		||||
      call sleep_msec(0)
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
      call sfftw_execute_(plan(i))
 | 
			
		||||
#else
 | 
			
		||||
      call sfftw_execute(plan(i))
 | 
			
		||||
#endif
 | 
			
		||||
      call sleep_msec(0)
 | 
			
		||||
      return
 | 
			
		||||
 | 
			
		||||
 999  do i=1,nplan
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
         call sfftw_destroy_plan_(plan(i))
 | 
			
		||||
#else
 | 
			
		||||
         call sfftw_destroy_plan(plan(i))
 | 
			
		||||
#endif
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										14
									
								
								fstatqqq.f90
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								fstatqqq.f90
									
									
									
									
									
								
							@ -1,14 +0,0 @@
 | 
			
		||||
subroutine fstatqqq(lu,istat,ierr)
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  use dfport
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  ierr=fstat(lu,istat)
 | 
			
		||||
#else
 | 
			
		||||
  call fstat(lu,istat,ierr)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  return
 | 
			
		||||
end subroutine fstatqqq
 | 
			
		||||
							
								
								
									
										74
									
								
								fthread.c
									
									
									
									
									
								
							
							
						
						
									
										74
									
								
								fthread.c
									
									
									
									
									
								
							@ -1,74 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
* fthread.c
 | 
			
		||||
*
 | 
			
		||||
* pthread library interface to Fortran, for OSs supporting pthreads
 | 
			
		||||
*
 | 
			
		||||
* Adapted from code by V. Ganesh
 | 
			
		||||
*/
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <pthread.h>
 | 
			
		||||
 | 
			
		||||
// Create a new fortran thread through a subroutine.
 | 
			
		||||
void fthread_create_(void *(*thread_func)(void *), pthread_t *theThread) 
 | 
			
		||||
{
 | 
			
		||||
  pthread_create(theThread, NULL, thread_func, NULL);
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
// Yield control to other threads
 | 
			
		||||
void fthread_yield_() 
 | 
			
		||||
{
 | 
			
		||||
  pthread_yield();
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
// Return my own thread ID
 | 
			
		||||
pthread_t fthread_self_() 
 | 
			
		||||
{
 | 
			
		||||
  return pthread_self();
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
// Lock the execution of all threads until we have the mutex
 | 
			
		||||
int fthread_mutex_lock_(pthread_mutex_t **theMutex) 
 | 
			
		||||
{
 | 
			
		||||
  return(pthread_mutex_lock(*theMutex));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int fthread_mutex_trylock_(pthread_mutex_t **theMutex) 
 | 
			
		||||
{
 | 
			
		||||
  return(pthread_mutex_trylock(*theMutex));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Unlock the execution of all threads that were stopped by this mutex
 | 
			
		||||
void fthread_mutex_unlock_(pthread_mutex_t **theMutex) 
 | 
			
		||||
{
 | 
			
		||||
  pthread_mutex_unlock(*theMutex);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get a new mutex object
 | 
			
		||||
void fthread_mutex_init_(pthread_mutex_t **theMutex) 
 | 
			
		||||
{
 | 
			
		||||
  *theMutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t));
 | 
			
		||||
  pthread_mutex_init(*theMutex, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Release a mutex object
 | 
			
		||||
void fthread_mutex_destroy_(pthread_mutex_t **theMutex) 
 | 
			
		||||
{
 | 
			
		||||
  pthread_mutex_destroy(*theMutex);
 | 
			
		||||
  free(*theMutex);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Waits for thread ID to join
 | 
			
		||||
void fthread_join(pthread_t *theThread) 
 | 
			
		||||
{
 | 
			
		||||
  int value = 0;
 | 
			
		||||
  pthread_join(*theThread, (void **)&value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Exit from a thread
 | 
			
		||||
void fthread_exit_(void *status) 
 | 
			
		||||
{
 | 
			
		||||
  pthread_exit(status);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										171
									
								
								ftn_init.f90
									
									
									
									
									
								
							
							
						
						
									
										171
									
								
								ftn_init.f90
									
									
									
									
									
								
							@ -1,171 +0,0 @@
 | 
			
		||||
! Fortran logical units used in WSJT6
 | 
			
		||||
!
 | 
			
		||||
!   10  binary input data, *.tf2 files
 | 
			
		||||
!   11  decoded.txt
 | 
			
		||||
!   12  decoded.ave
 | 
			
		||||
!   13  tsky.dat
 | 
			
		||||
!   14  azel.dat
 | 
			
		||||
!   15  
 | 
			
		||||
!   16
 | 
			
		||||
!   17  saved *.tf2 files
 | 
			
		||||
!   18  test file to be transmitted (wsjtgen.f90)
 | 
			
		||||
!   19  messages.txt
 | 
			
		||||
!   20  bandmap.txt
 | 
			
		||||
!   21  ALL65.TXT
 | 
			
		||||
!   22  kvasd.dat
 | 
			
		||||
!   23  CALL3.TXT
 | 
			
		||||
!   24  meas24.dat
 | 
			
		||||
!   25  meas25.dat
 | 
			
		||||
!   26  tmp26.txt
 | 
			
		||||
!   27  dphi.txt
 | 
			
		||||
!   28  fftw_wisdom.dat
 | 
			
		||||
!   29  debug.txt
 | 
			
		||||
!------------------------------------------------ ftn_init
 | 
			
		||||
subroutine ftn_init
 | 
			
		||||
 | 
			
		||||
  character*1 cjunk
 | 
			
		||||
  integer ptt
 | 
			
		||||
  include 'gcom1.f90'
 | 
			
		||||
  include 'gcom2.f90'
 | 
			
		||||
  include 'gcom3.f90'
 | 
			
		||||
  include 'gcom4.f90'
 | 
			
		||||
 | 
			
		||||
  call cs_init
 | 
			
		||||
  call cs_lock('ftn_init')
 | 
			
		||||
  i=ptt(nport,pttport,0,iptt)                       !Clear the PTT line
 | 
			
		||||
  addpfx='    '
 | 
			
		||||
  nrw26=0
 | 
			
		||||
 | 
			
		||||
  do i=80,1,-1
 | 
			
		||||
     if(AppDir(i:i).ne.' ') goto 1
 | 
			
		||||
  enddo
 | 
			
		||||
1 iz=i
 | 
			
		||||
  lenappdir=iz
 | 
			
		||||
  call pfxdump(appdir(:iz)//'/prefixes.txt')
 | 
			
		||||
 | 
			
		||||
  do i=80,1,-1
 | 
			
		||||
     if(AzElDir(i:i).ne.' ') goto 2
 | 
			
		||||
  enddo
 | 
			
		||||
2 iz2=i
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  open(11,file=appdir(:iz)//'/decoded.txt',status='unknown',               &
 | 
			
		||||
       share='denynone',err=910)
 | 
			
		||||
#else
 | 
			
		||||
  open(11,file=appdir(:iz)//'/decoded.txt',status='unknown',               &
 | 
			
		||||
       err=910)
 | 
			
		||||
#endif
 | 
			
		||||
  endfile 11
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  open(12,file=appdir(:iz)//'/decoded.ave',status='unknown',               &
 | 
			
		||||
       share='denynone',err=920)
 | 
			
		||||
#else
 | 
			
		||||
  open(12,file=appdir(:iz)//'/decoded.ave',status='unknown',               &
 | 
			
		||||
       err=920)
 | 
			
		||||
#endif
 | 
			
		||||
  endfile 12
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  open(14,file=azeldir(:iz2)//'/azel.dat',status='unknown',                  &
 | 
			
		||||
       share='denynone',err=930)
 | 
			
		||||
#else
 | 
			
		||||
  open(14,file=azeldir(:iz2)//'/azel.dat',status='unknown',                  &
 | 
			
		||||
       err=930)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  open(19,file=appdir(:iz)//'/messages.txt',status='unknown',               &
 | 
			
		||||
       share='denynone',err=911)
 | 
			
		||||
#else
 | 
			
		||||
  open(19,file=appdir(:iz)//'/messages.txt',status='unknown',               &
 | 
			
		||||
       err=911)
 | 
			
		||||
#endif
 | 
			
		||||
  endfile 19
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  open(20,file=appdir(:iz)//'/bandmap.txt',status='unknown',               &
 | 
			
		||||
       share='denynone',err=912)
 | 
			
		||||
#else
 | 
			
		||||
  open(20,file=appdir(:iz)//'/bandmap.txt',status='unknown',               &
 | 
			
		||||
       err=912)
 | 
			
		||||
#endif
 | 
			
		||||
  endfile 20
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  open(21,file=appdir(:iz)//'/ALL65.TXT',status='unknown',                   &
 | 
			
		||||
       access='append',share='denynone',err=950)
 | 
			
		||||
#else
 | 
			
		||||
  open(21,file=appdir(:iz)//'/ALL65.TXT',status='unknown',                   &
 | 
			
		||||
	access='append',err=950)
 | 
			
		||||
  do i=1,9999999
 | 
			
		||||
     read(21,*,end=10) cjunk
 | 
			
		||||
  enddo
 | 
			
		||||
10 continue
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  open(22,file=appdir(:iz)//'/kvasd.dat',access='direct',recl=1024,        &
 | 
			
		||||
       status='unknown',share='denynone')
 | 
			
		||||
#else
 | 
			
		||||
  open(22,file=appdir(:iz)//'/kvasd.dat',access='direct',recl=1024,        &
 | 
			
		||||
       status='unknown')
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  open(24,file=appdir(:iz)//'/meas24.txt',status='unknown',                 &
 | 
			
		||||
       share='denynone')
 | 
			
		||||
#else
 | 
			
		||||
  open(24,file=appdir(:iz)//'/meas24.txt',status='unknown')
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  open(25,file=appdir(:iz)//'/meas25.txt',status='unknown',                 &
 | 
			
		||||
       share='denynone')
 | 
			
		||||
#else
 | 
			
		||||
  open(25,file=appdir(:iz)//'/meas25.txt',status='unknown')
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  open(26,file=appdir(:iz)//'/tmp26.txt',status='unknown',                 &
 | 
			
		||||
       share='denynone')
 | 
			
		||||
#else
 | 
			
		||||
  open(26,file=appdir(:iz)//'/tmp26.txt',status='unknown')
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  open(27,file=appdir(:iz)//'/dphi.txt',status='unknown',                 &
 | 
			
		||||
       share='denynone')
 | 
			
		||||
#else
 | 
			
		||||
  open(27,file=appdir(:iz)//'/dphi.txt',status='unknown')
 | 
			
		||||
  open(28,file='fftw_wisdom.dat',status='unknown')
 | 
			
		||||
  call import_wisdom_from_file(isuccess,28)
 | 
			
		||||
  close(28)
 | 
			
		||||
  if(isuccess.ne.0) write(*,1000) 
 | 
			
		||||
1000 format('Using optimized FFTs.')
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  open(29,file=appdir(:iz)//'/debug.txt',status='unknown',                 &
 | 
			
		||||
       share='denynone')
 | 
			
		||||
#else
 | 
			
		||||
  open(29,file=appdir(:iz)//'/debug.txt',status='unknown')
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  call cs_unlock
 | 
			
		||||
  return
 | 
			
		||||
 | 
			
		||||
910 print*,'Error opening DECODED.TXT'
 | 
			
		||||
  stop
 | 
			
		||||
911 print*,'Error opening messages.txt'
 | 
			
		||||
  stop
 | 
			
		||||
912 print*,'Error opening bandmap.txt'
 | 
			
		||||
  stop
 | 
			
		||||
920 print*,'Error opening DECODED.AVE'
 | 
			
		||||
  stop
 | 
			
		||||
930 print*,'Error opening AZEL.DAT'
 | 
			
		||||
  stop
 | 
			
		||||
950 print*,'Error opening ALL65.TXT'
 | 
			
		||||
  stop
 | 
			
		||||
 | 
			
		||||
end subroutine ftn_init
 | 
			
		||||
@ -1,9 +0,0 @@
 | 
			
		||||
!------------------------------------------------ ftn_quit
 | 
			
		||||
subroutine ftn_quit
 | 
			
		||||
  include 'gcom1.f90'
 | 
			
		||||
  ngo=0
 | 
			
		||||
! Destroy the FFTW plans
 | 
			
		||||
  call four2a(a,-1,1,1,1)
 | 
			
		||||
  call filbig(id,-1,f0,newdat,c4a,c4b,n4)
 | 
			
		||||
  return
 | 
			
		||||
end subroutine ftn_quit
 | 
			
		||||
							
								
								
									
										24
									
								
								ftsky.f
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								ftsky.f
									
									
									
									
									
								
							@ -1,24 +0,0 @@
 | 
			
		||||
      real function ftsky(l,b)
 | 
			
		||||
 | 
			
		||||
C  Returns 408 MHz sky temperature for l,b (in degrees), from 
 | 
			
		||||
C  Haslam, et al. survey.  Must have already read the entire
 | 
			
		||||
C  file tsky.dat into memory.
 | 
			
		||||
 | 
			
		||||
      real*4 l,b
 | 
			
		||||
      integer*2 nsky
 | 
			
		||||
      common/sky/ nsky(360,180)
 | 
			
		||||
      save
 | 
			
		||||
 | 
			
		||||
      j=nint(b+91.0)
 | 
			
		||||
      if(j.gt.180) j=180
 | 
			
		||||
      xl=l
 | 
			
		||||
      if(xl.lt.0.0) xl=xl+360.0
 | 
			
		||||
      i=nint(xl+1.0)
 | 
			
		||||
      if(i.gt.360) i=i-360
 | 
			
		||||
      ftsky=0.0
 | 
			
		||||
      if(i.ge.1 .and. i.le.360 .and. j.ge.1 .and. j.le.180) then
 | 
			
		||||
         ftsky=0.1*nsky(i,j)
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										32
									
								
								g.py
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								g.py
									
									
									
									
									
								
							@ -1,32 +0,0 @@
 | 
			
		||||
DFreq=0.0
 | 
			
		||||
Freq=0.0
 | 
			
		||||
PingTime=0.0
 | 
			
		||||
PingFile="current"
 | 
			
		||||
report="26"
 | 
			
		||||
rms=1.0
 | 
			
		||||
mode_change=0
 | 
			
		||||
showspecjt=0
 | 
			
		||||
g2font='courier 16 bold'
 | 
			
		||||
 | 
			
		||||
#------------------------------------------------------ ftnstr
 | 
			
		||||
def ftnstr(x):
 | 
			
		||||
    y=""
 | 
			
		||||
    xs=x.tostring()
 | 
			
		||||
    for i in range(len(xs)):
 | 
			
		||||
        y=y+xs[i]
 | 
			
		||||
    return y
 | 
			
		||||
 | 
			
		||||
#------------------------------------------------------ filetime
 | 
			
		||||
def filetime(t):
 | 
			
		||||
#    i=t.rfind(".")
 | 
			
		||||
    i=rfnd(t,".")
 | 
			
		||||
    t=t[:i][-6:]
 | 
			
		||||
    t=t[0:2]+":"+t[2:4]+":"+t[4:6]
 | 
			
		||||
    return t
 | 
			
		||||
 | 
			
		||||
#------------------------------------------------------ rfnd
 | 
			
		||||
#Temporary workaround to replace t.rfind(c)
 | 
			
		||||
def rfnd(t,c):
 | 
			
		||||
    for i in range(len(t)-1,0,-1):
 | 
			
		||||
        if t[i:i+1]==c: return i
 | 
			
		||||
    return -1
 | 
			
		||||
							
								
								
									
										51
									
								
								gcom1.f90
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								gcom1.f90
									
									
									
									
									
								
							@ -1,51 +0,0 @@
 | 
			
		||||
! Variable             Purpose                               Set in Thread
 | 
			
		||||
!---------------------------------------------------------------------------
 | 
			
		||||
integer NRXMAX         !Max length of Rx ring buffers
 | 
			
		||||
integer NTXMAX         !Max length of Tx waveform in samples
 | 
			
		||||
parameter(NRXMAX=2097152)  ! =2048*1024
 | 
			
		||||
parameter(NTXMAX=1653750)  ! =150*11025
 | 
			
		||||
real*8 tbuf            !Tsec at time of input callback          SoundIn
 | 
			
		||||
integer ntrbuf         !(obsolete?)
 | 
			
		||||
real*8 Tsec            !Present time                       SoundIn,SoundOut
 | 
			
		||||
real*8 rxdelay         !Delay between PTT=1 and Tx audio        SoundIn
 | 
			
		||||
real*8 txdelay         !Delay from end of Tx Audio and PTT=0    SoundOut
 | 
			
		||||
real*8 samfacin        !(Input sample rate)/11025               GUI
 | 
			
		||||
real*8 samfacout       !(Output sample rate)/11025              GUI
 | 
			
		||||
real*8 txsnrdb         !SNR for simulations                     GUI
 | 
			
		||||
integer*2 y1           !Ring buffer for audio channel 0         SoundIn
 | 
			
		||||
integer*2 y2           !Ring buffer for audio channel 1         SoundIn
 | 
			
		||||
integer nmax           !Actual length of Rx ring buffers        GUI
 | 
			
		||||
integer iwrite         !Write pointer to Rx ring buffer         SoundIn
 | 
			
		||||
integer iread          !Read pointer to Rx ring buffer          GUI
 | 
			
		||||
integer*2 iwave        !Data for audio output                   SoundIn
 | 
			
		||||
integer nwave          !Number of samples in iwave              SoundIn
 | 
			
		||||
integer TxOK           !OK to transmit?                         SoundIn
 | 
			
		||||
!                       NB: TxOK=1 only in SoundIn; TxOK=0 also in GUI
 | 
			
		||||
integer Receiving      !Actually receiving?                     SoundIn
 | 
			
		||||
integer Transmitting   !Actually transmitting?                  SoundOut
 | 
			
		||||
integer TxFirst        !Transmit first?                         GUI
 | 
			
		||||
integer TRPeriod       !Tx or Rx period in seconds              GUI
 | 
			
		||||
integer ibuf           !Most recent input buffer#               SoundIn
 | 
			
		||||
integer ibuf0          !Buffer# at start of Rx sequence         SoundIn
 | 
			
		||||
real ave               !(why is this here?)                     GUI
 | 
			
		||||
real rms               !(why is this here?)                     GUI
 | 
			
		||||
integer ngo            !Set to 0 to terminate audio streams     GUI
 | 
			
		||||
integer level          !S-meter level, 0-100                    GUI
 | 
			
		||||
integer mute           !True means "don't transmit"             GUI
 | 
			
		||||
integer newdat         !New data available for waterfall?       GUI
 | 
			
		||||
integer ndsec          !Dsec in units of 0.1 s                  GUI
 | 
			
		||||
integer ndevin         !Device# for audio input                 GUI
 | 
			
		||||
integer ndevout        !Device# for audio output                GUI
 | 
			
		||||
integer mfsample       !Measured sample rate, input             SoundIn
 | 
			
		||||
integer mfsample2      !Measured sample rate, output            SoundOut
 | 
			
		||||
integer ns0            !Time at last ALL.TXT date entry         Decoder
 | 
			
		||||
character*12 devin_name,devout_name ! GUI
 | 
			
		||||
 | 
			
		||||
common/gcom1/Tbuf(1024),ntrbuf(1024),Tsec,rxdelay,txdelay,              &
 | 
			
		||||
     samfacin,samfacout,txsnrdb,y1(NRXMAX),y2(NRXMAX),                  &
 | 
			
		||||
     nmax,iwrite,iread,iwave(NTXMAX),nwave,TxOK,Receiving,Transmitting, &
 | 
			
		||||
     TxFirst,TRPeriod,ibuf,ibuf0,ave,rms,ngo,level,mute,newdat,ndsec,   &
 | 
			
		||||
     ndevin,ndevout,mfsample,mfsample2,ns0,devin_name,devout_name
 | 
			
		||||
 | 
			
		||||
!### volatile /gcom1/
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										124
									
								
								gcom2.f90
									
									
									
									
									
								
							
							
						
						
									
										124
									
								
								gcom2.f90
									
									
									
									
									
								
							@ -1,124 +0,0 @@
 | 
			
		||||
! Variable             Purpose                              Set in Thread
 | 
			
		||||
!-------------------------------------------------------------------------
 | 
			
		||||
real*8 fcenter         !Linrad center freq, from pkt header   recvpkt
 | 
			
		||||
real*8 forcefcenter    !Optional override of fcenter            GUI
 | 
			
		||||
real ps0               !Spectrum of best ping, FSK441/JT6m      Decoder
 | 
			
		||||
real psavg             !Average spectrum                        Decoder
 | 
			
		||||
real s2                !2d spectrum for horizontal waterfall    GUI
 | 
			
		||||
real ccf               !CCF in time (blue curve)                Decoder
 | 
			
		||||
real green             !Data for green line                     GUI
 | 
			
		||||
real fselect           !Specified QSO frequency                 GUI
 | 
			
		||||
real pctlost           !Percent of lost packets                 Decoder
 | 
			
		||||
real pctblank          !Percent of blanked blocks/packets       Decoder
 | 
			
		||||
real rxnoise           !Rx noise in dB                        recvpkt
 | 
			
		||||
real dphi              !Phase shift between pol'n channels   GUI,Decoder
 | 
			
		||||
integer ngreen         !Length of green                         GUI
 | 
			
		||||
real dgain             !Digital audio gain setting              GUI
 | 
			
		||||
integer ndecoding      !Decoder status (see decode2.f90)     GUI,Decoder
 | 
			
		||||
integer ndecoding0     !Status on previous decode            GUI,Decoder
 | 
			
		||||
integer mcall3         !CALL3.TXT has been modified          GUI,Decoder
 | 
			
		||||
integer mousebutton    !Which button was clicked?               GUI
 | 
			
		||||
integer multicast      !1 for multicast data, 0 for unicast     GUI
 | 
			
		||||
integer ndecdone       !Is decoder finished?                 GUI,Decoder
 | 
			
		||||
integer nfloat         !Floating-point data from Linrad?      recvpkt
 | 
			
		||||
integer ierr           !Error opening *.tf2 file                GUI
 | 
			
		||||
integer lauto          !Are we in Auto mode?                    GUI
 | 
			
		||||
integer mantx          !Manual transmission requested?       GUI,SoundIn
 | 
			
		||||
integer nrestart       !True if transmission should restart  GUI,SoundIn
 | 
			
		||||
integer ntr            !Are we in 2nd sequence?                 SoundIn
 | 
			
		||||
integer nmsg           !Length of Tx message                    SoundIn
 | 
			
		||||
integer nsave          !Which files to save?                    GUI
 | 
			
		||||
integer nadd5          !Prepend 5 sec of 0's before decoding?   GUI 
 | 
			
		||||
integer dftolerance    !DF tolerance (Hz)                       GUI
 | 
			
		||||
logical LDecoded       !Was a message decoded?                  Decoder
 | 
			
		||||
logical rxdone         !Has the Rx sequence finished?      SoundIn,Decoder
 | 
			
		||||
integer monitoring     !Are we monitoring?                      GUI
 | 
			
		||||
integer nzap           !Is Zap checked?                         GUI
 | 
			
		||||
integer minsigdb       !Decoder threshold setting               GUI
 | 
			
		||||
integer nclearave      !Set to 1 to clear JT65 avg         GUI,Decoder
 | 
			
		||||
integer nfreeze        !Is Freeze checked?                      GUI
 | 
			
		||||
integer nafc           !Is AFC checked?                         GUI
 | 
			
		||||
integer newspec        !New spectra in ss(4,322,NSMAX)     GUI,Decoder
 | 
			
		||||
integer nfa            !Low end of map65 search (def 100 kHz)   GUI
 | 
			
		||||
integer nfb            !High end of map65 search (def 160 kHz)  GUI
 | 
			
		||||
integer nfcal          !Calibration offset, Hz                  GUI
 | 
			
		||||
integer idphi          !Phase offset in Y channel (deg)         GUI
 | 
			
		||||
integer nkeep          !Timeout limit for band maps (min)       GUI
 | 
			
		||||
integer nmode          !Which WSJT mode?                   GUI,Decoder
 | 
			
		||||
integer mode65         !JT65 sub-mode (A/B/C ==> 1/2/4) GUI,SoundIn,Decoder
 | 
			
		||||
integer nbpp           !# FFT Bins/pixel, wideband waterfall   Spec
 | 
			
		||||
integer ndebug         !Write debugging info?                   GUI
 | 
			
		||||
integer ndphi          !Set to 1 to compute dphi             GUI,Decoder
 | 
			
		||||
integer nhispol        !Pol angle matching HisCall or HisGrid Decoder
 | 
			
		||||
integer nt1            !Time to start FFTs                      GUI
 | 
			
		||||
integer nxant          !Antenna configuration: 0='+', 1='x'     GUI
 | 
			
		||||
integer nblank         !Is NB checked?                          GUI
 | 
			
		||||
integer nfmid          !Center frequency of main display        GUI
 | 
			
		||||
integer nfrange        !Frequency range of main display         GUI
 | 
			
		||||
integer nport          !Requested COM port number               GUI
 | 
			
		||||
integer mousedf        !Mouse-selected freq offset, DF          GUI
 | 
			
		||||
integer mousefqso      !Mouse-selected QSO freq                 GUI
 | 
			
		||||
integer neme           !EME calls only in deep search?          GUI
 | 
			
		||||
integer nrw26          !Request to rewind lu 26 (tmp26.txt)  GUI,Decoder
 | 
			
		||||
integer naggressive    !Is "Aggressive decoding" checked?       GUI
 | 
			
		||||
integer ntx2           !Is "No shorthands if Tx1" checked?      GUI
 | 
			
		||||
integer nagain         !Decode same file again?                 GUI
 | 
			
		||||
integer shok           !Shorthand messages OK?                  GUI
 | 
			
		||||
integer sendingsh      !Sending a shorthand message?            SoundIn
 | 
			
		||||
integer*2 d2a          !Rx data, extracted from y1              Decoder
 | 
			
		||||
integer*2 d2b          !Rx data, selected by mouse-pick         Decoder
 | 
			
		||||
integer*2 b            !Pixel values for waterfall spectrum     GUI
 | 
			
		||||
integer jza            !Length of data in d2a                GUI,Decoder
 | 
			
		||||
integer jzb            !(why is this here?)
 | 
			
		||||
integer ntime          !Integer Unix time (now)               SoundIn
 | 
			
		||||
integer idinterval     !Interval between CWIDs, minutes         GUI
 | 
			
		||||
integer msmax          !(why is this here?)
 | 
			
		||||
integer lenappdir      !Length of Appdir string                 GUI
 | 
			
		||||
integer idf            !Frequency offset in Hz                  Decoder
 | 
			
		||||
integer ndiskdat       !1 if data read from disk, 0 otherwise   GUI
 | 
			
		||||
integer nlines         !Available lines of waterfall data       GUI
 | 
			
		||||
integer nflat          !Is waterfall to be flattened?           GUI
 | 
			
		||||
integer ntxreq         !Tx msg# requested                       GUI
 | 
			
		||||
integer ntxnow         !Tx msg# being sent now                  GUI
 | 
			
		||||
integer ndepth         !Requested "depth" of JT65 decoding      GUI
 | 
			
		||||
integer nspecial       !JT65 shorthand msg#: RO=2 RRR=3 73=4    Decoder
 | 
			
		||||
integer ndf            !Measured DF in Hz                       Decoder
 | 
			
		||||
real ss1               !Magenta curve for JT65 shorthand msg    Decoder
 | 
			
		||||
real ss2               !Orange curve for JT65 shorthand msg     Decoder
 | 
			
		||||
character mycall*12    !My call sign                            GUI
 | 
			
		||||
character hiscall*12   !His call sign                           GUI
 | 
			
		||||
character hisgrid*6    !His grid locator                        GUI
 | 
			
		||||
character txmsg*28     !Message to be transmitted               GUI
 | 
			
		||||
character sending*28   !Message being sent                      SoundIn
 | 
			
		||||
character mode*6       !WSJT operating mode                     GUI
 | 
			
		||||
character utcdate*12   !UTC date                                GUI
 | 
			
		||||
character*24 fname0    !Filenames to be recorded, read, ...     Decoder
 | 
			
		||||
character*24 fnamea
 | 
			
		||||
character*24 fnameb
 | 
			
		||||
character*6  fnamedate
 | 
			
		||||
character*24 decodedfile
 | 
			
		||||
character*80 AppDir      !WSJT installation directory           GUI
 | 
			
		||||
character*80 AzElDir     !Directory for azel.dat                GUI
 | 
			
		||||
character*80 SaveDir     !Directory for saved data files        GUI
 | 
			
		||||
character*80 filetokilla !Filenames (full path)                 Decoder
 | 
			
		||||
character*80 filetokillb
 | 
			
		||||
character*12 pttport
 | 
			
		||||
character*8 utcdata     !HHMM UTC for the processed data       Decoder
 | 
			
		||||
 | 
			
		||||
common/gcom2/fcenter,forcefcenter,ps0(431),psavg(450),s2(64,3100),ccf(-5:540), &
 | 
			
		||||
     green(500),fselect,pctlost,pctblank,rxnoise,dphi,ngreen,dgain,         &
 | 
			
		||||
     ndecoding,ndecoding0,mcall3,mousebutton,multicast,nsetftx,ierr,        &
 | 
			
		||||
     ndecdone,nfloat,lauto,mantx,nrestart,ntr,nmsg,nsave,nadd5,             &
 | 
			
		||||
     dftolerance,LDecoded,rxdone,monitoring,nzap,minsigdb,                  &
 | 
			
		||||
     nclearave,nfreeze,nafc,newspec,nfa,nfb,nfcal,idphi,nkeep,              &
 | 
			
		||||
     nmode,mode65,nbpp,ndebug,ndphi,nhispol,nt1,nxant,                      &
 | 
			
		||||
     nblank,nport,mousedf,mousefqso,neme,nrw26,naggressive,ntx2,nagain,     &
 | 
			
		||||
     shok,sendingsh,d2a(661500),d2b(661500),b(60000),jza,jzb,ntime,         &
 | 
			
		||||
     idinterval,msmax,lenappdir,idf,ndiskdat,nlines,nflat,ntxreq,ntxnow,    &
 | 
			
		||||
     ndepth,nspecial,ndf,nfmid,nfrange,ss1(-224:224),ss2(-224:224),         &
 | 
			
		||||
     mycall,hiscall,hisgrid,txmsg,sending,mode,fname0,fnamea,               &
 | 
			
		||||
     fnameb,fnamedate,decodedfile,AppDir,AzElDir,SaveDir,                   &
 | 
			
		||||
     filetokilla,filetokillb,utcdate,pttport,utcdata
 | 
			
		||||
 | 
			
		||||
!### volatile /gcom2/
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								gcom3.f90
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								gcom3.f90
									
									
									
									
									
								
							@ -1,20 +0,0 @@
 | 
			
		||||
! Variable             Purpose                              Set in Thread
 | 
			
		||||
!-------------------------------------------------------------------------
 | 
			
		||||
integer*2 nfmt2        !Standard header for *.WAV file         Decoder
 | 
			
		||||
integer*2 nchan2
 | 
			
		||||
integer*2 nbitsam2
 | 
			
		||||
integer*2 nbytesam2
 | 
			
		||||
integer*4 nchunk
 | 
			
		||||
integer*4 lenfmt
 | 
			
		||||
integer*4 nsamrate
 | 
			
		||||
integer*4 nbytesec
 | 
			
		||||
integer*4 ndata
 | 
			
		||||
character*4 ariff
 | 
			
		||||
character*4 awave
 | 
			
		||||
character*4 afmt
 | 
			
		||||
character*4 adata
 | 
			
		||||
 | 
			
		||||
common/gcom3/ariff,nchunk,awave,afmt,lenfmt,nfmt2,nchan2,nsamrate, &
 | 
			
		||||
     nbytesec,nbytesam2,nbitsam2,adata,ndata
 | 
			
		||||
 | 
			
		||||
!### volatile /gcom3/
 | 
			
		||||
							
								
								
									
										10
									
								
								gcom4.f90
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								gcom4.f90
									
									
									
									
									
								
							@ -1,10 +0,0 @@
 | 
			
		||||
! Variable             Purpose                              Set in Thread
 | 
			
		||||
!-------------------------------------------------------------------------
 | 
			
		||||
character addpfx*8     !Add-on prefix, as in ZA/PA2CHR           GUI
 | 
			
		||||
integer*2 d2c          !Rx data recovered from recorded file     GUI
 | 
			
		||||
integer jzc            !Length of data available in d2c          GUI
 | 
			
		||||
character filename*24  !Name of wave file read from disk         GUI
 | 
			
		||||
 | 
			
		||||
common/gcom4/addpfx,d2c(661500),jzc,filename
 | 
			
		||||
 | 
			
		||||
!### volatile /gcom4/
 | 
			
		||||
							
								
								
									
										82
									
								
								gen65.f
									
									
									
									
									
								
							
							
						
						
									
										82
									
								
								gen65.f
									
									
									
									
									
								
							@ -1,82 +0,0 @@
 | 
			
		||||
      subroutine gen65(message,mode65,samfac,iwave,nwave,sendingsh,
 | 
			
		||||
     +  msgsent)
 | 
			
		||||
 | 
			
		||||
C  Encodes a JT65 message into a wavefile.
 | 
			
		||||
 | 
			
		||||
      parameter (NMAX=60*11025)     !Max length of wave file
 | 
			
		||||
      character*22 message          !Message to be generated
 | 
			
		||||
      character*22 msgsent          !Message as it will be received
 | 
			
		||||
      character*3 cok               !'   ' or 'OOO'
 | 
			
		||||
      character*6 c1,c2
 | 
			
		||||
      real*8 t,dt,phi,f,f0,dfgen,dphi,twopi,samfac,tsymbol
 | 
			
		||||
 | 
			
		||||
      integer*2 iwave(NMAX)  !Generated wave file
 | 
			
		||||
      integer dgen(12)
 | 
			
		||||
      integer sent(63)
 | 
			
		||||
      integer sendingsh
 | 
			
		||||
      common/c1c2/c1,c2
 | 
			
		||||
      include 'prcom.h'
 | 
			
		||||
      data twopi/6.283185307d0/
 | 
			
		||||
      save
 | 
			
		||||
 | 
			
		||||
      if(abs(pr(1)).ne.1.0) call setup65
 | 
			
		||||
 | 
			
		||||
      call chkmsg(message,cok,nspecial,flip)
 | 
			
		||||
      if(nspecial.eq.0) then
 | 
			
		||||
         call packmsg(message,dgen)          !Pack message into 72 bits
 | 
			
		||||
         sendingsh=0
 | 
			
		||||
         if(iand(dgen(10),8).ne.0) sendingsh=-1    !Plain text flag
 | 
			
		||||
         call rs_encode(dgen,sent)
 | 
			
		||||
         call interleave63(sent,1)           !Apply interleaving
 | 
			
		||||
         call graycode(sent,63,1)            !Apply Gray code
 | 
			
		||||
         tsymbol=4096.d0/11025.d0
 | 
			
		||||
         nsym=126                            !Symbols per transmission
 | 
			
		||||
      else
 | 
			
		||||
         tsymbol=16384.d0/11025.d0
 | 
			
		||||
         nsym=32
 | 
			
		||||
         sendingsh=1                         !Flag for shorthand message
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
C  Set up necessary constants
 | 
			
		||||
      dt=1.0/(samfac*11025.0)
 | 
			
		||||
      f0=118*11025.d0/1024
 | 
			
		||||
      dfgen=mode65*11025.0/4096.0
 | 
			
		||||
      t=0.d0
 | 
			
		||||
      phi=0.d0
 | 
			
		||||
      k=0
 | 
			
		||||
      j0=0
 | 
			
		||||
      ndata=(nsym*11025.d0*samfac*tsymbol)/2
 | 
			
		||||
      ndata=2*ndata
 | 
			
		||||
      do i=1,ndata
 | 
			
		||||
         t=t+dt
 | 
			
		||||
         j=int(t/tsymbol) + 1                    !Symbol number, 1-126
 | 
			
		||||
         if(j.ne.j0) then
 | 
			
		||||
            f=f0
 | 
			
		||||
            if(nspecial.ne.0 .and. mod(j,2).eq.0) f=f0+10*nspecial*dfgen
 | 
			
		||||
            if(nspecial.eq.0 .and. flip*pr(j).lt.0.0) then
 | 
			
		||||
               k=k+1
 | 
			
		||||
               f=f0+(sent(k)+2)*dfgen
 | 
			
		||||
            endif
 | 
			
		||||
            dphi=twopi*dt*f
 | 
			
		||||
            j0=j
 | 
			
		||||
         endif
 | 
			
		||||
         phi=phi+dphi
 | 
			
		||||
         iwave(i)=32767.0*sin(phi)
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      do j=1,5512                !Put another 0.5 sec of silence at end
 | 
			
		||||
         i=i+1
 | 
			
		||||
         iwave(i)=0
 | 
			
		||||
      enddo
 | 
			
		||||
      nwave=i
 | 
			
		||||
      call unpackmsg(dgen,msgsent)
 | 
			
		||||
      if(flip.lt.0.0) then
 | 
			
		||||
         do i=22,1,-1
 | 
			
		||||
            if(msgsent(i:i).ne.' ') goto 10
 | 
			
		||||
         enddo
 | 
			
		||||
 10      msgsent=msgsent(1:i)//' OOO'
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										36
									
								
								gencwid.f
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								gencwid.f
									
									
									
									
									
								
							@ -1,36 +0,0 @@
 | 
			
		||||
      subroutine gencwid(msg,wpm,freqcw,samfac,iwave,nwave)
 | 
			
		||||
 | 
			
		||||
      parameter (NMAX=10*11025)
 | 
			
		||||
      character msg*22,msg2*22
 | 
			
		||||
      integer*2 iwave(NMAX)
 | 
			
		||||
 | 
			
		||||
      integer*1 idat(460)
 | 
			
		||||
      real*8 dt,t,twopi,pha,dpha,tdit,samfac
 | 
			
		||||
      data twopi/6.283185307d0/
 | 
			
		||||
 | 
			
		||||
      do i=1,22
 | 
			
		||||
         if(msg(i:i).eq.' ') go to 10
 | 
			
		||||
       enddo
 | 
			
		||||
 10   iz=i-1
 | 
			
		||||
      msg2=msg(1:iz)//'                      '
 | 
			
		||||
      call morse(msg2,idat,ndits) !Encode part 1 of msg
 | 
			
		||||
 | 
			
		||||
      tdit=1.2d0/wpm                   !Key-down dit time, seconds
 | 
			
		||||
      dt=1.d0/(11025.d0*samfac)
 | 
			
		||||
      nwave=ndits*tdit/dt
 | 
			
		||||
      pha=0.
 | 
			
		||||
      dpha=twopi*freqcw*dt
 | 
			
		||||
      t=0.d0
 | 
			
		||||
      s=0.
 | 
			
		||||
      u=wpm/(11025*0.03)
 | 
			
		||||
      do i=1,nwave
 | 
			
		||||
         t=t+dt
 | 
			
		||||
         pha=pha+dpha
 | 
			
		||||
         j=t/tdit + 1
 | 
			
		||||
         s=s + u*(idat(j)-s)
 | 
			
		||||
         iwave(i)=nint(s*32767.d0*sin(pha))
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										13
									
								
								gentone.f
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								gentone.f
									
									
									
									
									
								
							@ -1,13 +0,0 @@
 | 
			
		||||
      subroutine gentone(x,n,k)
 | 
			
		||||
 | 
			
		||||
      real*4 x(512)
 | 
			
		||||
 | 
			
		||||
      dt=1.0/11025.0
 | 
			
		||||
      f=(n+51)*11025.0/512.0
 | 
			
		||||
      do i=1,512
 | 
			
		||||
         x(i)=sin(6.2831853*i*dt*f)
 | 
			
		||||
      enddo
 | 
			
		||||
      k=k+512
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										259
									
								
								getdev.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										259
									
								
								getdev.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,259 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#define MAXDEVICES 100
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <portaudio.h>
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
 | 
			
		||||
//------------------------------------------------------- pa_get_device_info
 | 
			
		||||
int pa_get_device_info (int  n,
 | 
			
		||||
                        void *pa_device_name,
 | 
			
		||||
                        void *pa_device_hostapi,
 | 
			
		||||
                        double *pa_device_max_speed,
 | 
			
		||||
                        double *pa_device_min_speed,
 | 
			
		||||
                        int *pa_device_max_bytes,
 | 
			
		||||
                        int *pa_device_min_bytes,
 | 
			
		||||
                        int *pa_device_max_channels,
 | 
			
		||||
                        int *pa_device_min_channels )
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
  (void) n ;
 | 
			
		||||
  (void) pa_device_name;
 | 
			
		||||
  (void) pa_device_hostapi;
 | 
			
		||||
  (void) pa_device_max_speed;
 | 
			
		||||
  (void) pa_device_min_speed;
 | 
			
		||||
  (void) pa_device_max_bytes;
 | 
			
		||||
  (void) pa_device_min_bytes;
 | 
			
		||||
  (void) pa_device_max_channels;
 | 
			
		||||
  (void) pa_device_min_channels;
 | 
			
		||||
  const PaDeviceInfo *deviceInfo;
 | 
			
		||||
  PaError pa_err;
 | 
			
		||||
  PaStreamParameters inputParameters;
 | 
			
		||||
  int i,j, speed_warning;
 | 
			
		||||
  int minBytes, maxBytes;
 | 
			
		||||
  double maxStandardSampleRate;
 | 
			
		||||
  double minStandardSampleRate;
 | 
			
		||||
  int minInputChannels;
 | 
			
		||||
  int maxInputChannels;
 | 
			
		||||
 | 
			
		||||
// negative terminated  list
 | 
			
		||||
  static double standardSampleRates[] = {8000.0, 9600.0,
 | 
			
		||||
        11025.0, 12000.0, 16000.0, 22050.0, 24000.0, 32000.0,
 | 
			
		||||
        44100.0, 48000.0, 88200.0, 96000.0, 192000.0, -1};
 | 
			
		||||
// *******************************************************
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  *pa_device_max_speed=0;
 | 
			
		||||
  *pa_device_min_speed=0;
 | 
			
		||||
  *pa_device_max_bytes=0;
 | 
			
		||||
  *pa_device_min_bytes=0;
 | 
			
		||||
  *pa_device_max_channels=0;
 | 
			
		||||
  *pa_device_min_channels=0;
 | 
			
		||||
  minInputChannels=0;
 | 
			
		||||
  if(n >= Pa_GetDeviceCount() ) return -1;
 | 
			
		||||
  deviceInfo = Pa_GetDeviceInfo(n);
 | 
			
		||||
  if (deviceInfo->maxInputChannels==0) return -1;
 | 
			
		||||
  sprintf((char*)(pa_device_name),"%s",deviceInfo->name);
 | 
			
		||||
  sprintf((char*)(pa_device_hostapi),"%s",
 | 
			
		||||
          Pa_GetHostApiInfo( deviceInfo->hostApi )->name);
 | 
			
		||||
  speed_warning=0;
 | 
			
		||||
 | 
			
		||||
// bypass bug in Juli@ ASIO driver:
 | 
			
		||||
// this driver hangs after a Pa_IsFormatSupported call
 | 
			
		||||
  i = strncmp(deviceInfo->name, "ASIO 2.0 - ESI Juli@", 19);
 | 
			
		||||
  if (i == 0) {
 | 
			
		||||
    minStandardSampleRate=44100;
 | 
			
		||||
    maxStandardSampleRate=192000;
 | 
			
		||||
    minBytes=1;
 | 
			
		||||
    maxBytes=4;
 | 
			
		||||
    maxInputChannels= deviceInfo->maxInputChannels;
 | 
			
		||||
    minInputChannels= 1;
 | 
			
		||||
    goto end_pa_get_device_info;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
// Investigate device capabilities.
 | 
			
		||||
// Check min and max samplerates  with 16 bit data.
 | 
			
		||||
  maxStandardSampleRate=0;
 | 
			
		||||
  minStandardSampleRate=0;
 | 
			
		||||
  inputParameters.device = n;
 | 
			
		||||
  inputParameters.channelCount = deviceInfo->maxInputChannels;
 | 
			
		||||
  inputParameters.sampleFormat = paInt16;
 | 
			
		||||
  inputParameters.suggestedLatency = 0;
 | 
			
		||||
  inputParameters.hostApiSpecificStreamInfo = NULL;
 | 
			
		||||
 | 
			
		||||
// ************************************************************************
 | 
			
		||||
//filter for portaudio Windows hostapi's with non experts.
 | 
			
		||||
//only allow ASIO or WASAPI or WDM-KS
 | 
			
		||||
  i = strncmp(Pa_GetHostApiInfo(deviceInfo->hostApi)->name, "ASIO", 4);
 | 
			
		||||
  if (i==0 ) goto end_filter_hostapi;
 | 
			
		||||
  i = strncmp(Pa_GetHostApiInfo(deviceInfo->hostApi)->name,
 | 
			
		||||
              "Windows WASAPI", 14);
 | 
			
		||||
  if (i==0 ) goto end_filter_hostapi;
 | 
			
		||||
  i = strncmp(Pa_GetHostApiInfo(deviceInfo->hostApi)->name,
 | 
			
		||||
              "Windows WDM-KS", 14);
 | 
			
		||||
  if (i==0 ) goto end_filter_hostapi;
 | 
			
		||||
  speed_warning=1;
 | 
			
		||||
end_filter_hostapi:;
 | 
			
		||||
 | 
			
		||||
// ************************************************************************
 | 
			
		||||
  i=0;
 | 
			
		||||
  while(standardSampleRates[i] > 0 && minStandardSampleRate==0) {
 | 
			
		||||
    pa_err=Pa_IsFormatSupported(&inputParameters, NULL,
 | 
			
		||||
                                standardSampleRates[i] );
 | 
			
		||||
    if(pa_err == paDeviceUnavailable) return -1;
 | 
			
		||||
    if(pa_err == paInvalidDevice) return -1;
 | 
			
		||||
    if(pa_err == paFormatIsSupported ) {
 | 
			
		||||
      minStandardSampleRate=standardSampleRates[i];
 | 
			
		||||
    }
 | 
			
		||||
    i++;
 | 
			
		||||
  }
 | 
			
		||||
  if(minStandardSampleRate == 0) return -1;
 | 
			
		||||
  j=i;
 | 
			
		||||
  while(standardSampleRates[i] > 0 ) i++;
 | 
			
		||||
  i--;
 | 
			
		||||
 | 
			
		||||
  while(i >= j && maxStandardSampleRate==0) {
 | 
			
		||||
    pa_err=Pa_IsFormatSupported(&inputParameters, NULL,
 | 
			
		||||
                                  standardSampleRates[i] );
 | 
			
		||||
    if(pa_err == paDeviceUnavailable) return -1;
 | 
			
		||||
    if(pa_err == paInvalidDevice) return -1;
 | 
			
		||||
    if( pa_err == paFormatIsSupported ) {
 | 
			
		||||
      maxStandardSampleRate=standardSampleRates[i];
 | 
			
		||||
    }
 | 
			
		||||
    i--;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
// check if min SampleRate  = max SampleRate
 | 
			
		||||
  if(maxStandardSampleRate==0 && (minStandardSampleRate != 0)) {
 | 
			
		||||
    maxStandardSampleRate= minStandardSampleRate;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
// check min and max bytes
 | 
			
		||||
  minBytes=2;
 | 
			
		||||
  maxBytes=2;
 | 
			
		||||
  inputParameters.sampleFormat = paUInt8;
 | 
			
		||||
  pa_err=Pa_IsFormatSupported(&inputParameters, NULL,
 | 
			
		||||
                                maxStandardSampleRate );
 | 
			
		||||
  if( pa_err == paFormatIsSupported ) {
 | 
			
		||||
    minBytes=1;
 | 
			
		||||
  }
 | 
			
		||||
    inputParameters.sampleFormat = paInt32;
 | 
			
		||||
    pa_err=Pa_IsFormatSupported(&inputParameters, NULL,
 | 
			
		||||
                                maxStandardSampleRate );
 | 
			
		||||
  if( pa_err == paFormatIsSupported ) {
 | 
			
		||||
    maxBytes=4;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
// check min channel count
 | 
			
		||||
  maxInputChannels= deviceInfo->maxInputChannels;
 | 
			
		||||
  inputParameters.channelCount = 1;
 | 
			
		||||
  inputParameters.sampleFormat = paInt16;
 | 
			
		||||
  pa_err=paFormatIsSupported+32000;
 | 
			
		||||
  while(pa_err != paFormatIsSupported &&
 | 
			
		||||
          ( inputParameters.channelCount < (maxInputChannels+1)) ) {
 | 
			
		||||
    pa_err=Pa_IsFormatSupported(&inputParameters, NULL,
 | 
			
		||||
                                maxStandardSampleRate );
 | 
			
		||||
    inputParameters.channelCount++;
 | 
			
		||||
  }
 | 
			
		||||
  if( pa_err == paFormatIsSupported ) {
 | 
			
		||||
    minInputChannels=inputParameters.channelCount-1;
 | 
			
		||||
  } else {
 | 
			
		||||
    return -1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
end_pa_get_device_info:;
 | 
			
		||||
 | 
			
		||||
  *pa_device_max_speed=maxStandardSampleRate;
 | 
			
		||||
  *pa_device_min_speed=minStandardSampleRate;
 | 
			
		||||
  *pa_device_max_bytes=maxBytes;
 | 
			
		||||
  *pa_device_min_bytes=minBytes;
 | 
			
		||||
  *pa_device_max_channels= maxInputChannels;
 | 
			
		||||
  *pa_device_min_channels= minInputChannels;
 | 
			
		||||
 | 
			
		||||
  return speed_warning;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void paInputDevice(int id, char* hostAPI_DeviceName, int* minChan,
 | 
			
		||||
                   int* maxChan, int* minSpeed, int* maxSpeed)
 | 
			
		||||
{
 | 
			
		||||
  int i;
 | 
			
		||||
  char pa_device_name[128];
 | 
			
		||||
  char pa_device_hostapi[128];
 | 
			
		||||
  double pa_device_max_speed;
 | 
			
		||||
  double pa_device_min_speed;
 | 
			
		||||
  int pa_device_max_bytes;
 | 
			
		||||
  int pa_device_min_bytes;
 | 
			
		||||
  int pa_device_max_channels;
 | 
			
		||||
  int pa_device_min_channels;
 | 
			
		||||
  char p2[50];
 | 
			
		||||
  char *p,*p1;
 | 
			
		||||
  static int iret, valid_dev_cnt;
 | 
			
		||||
 | 
			
		||||
  iret=pa_get_device_info (id,
 | 
			
		||||
                          &pa_device_name,
 | 
			
		||||
                          &pa_device_hostapi,
 | 
			
		||||
                          &pa_device_max_speed,
 | 
			
		||||
                          &pa_device_min_speed,
 | 
			
		||||
                          &pa_device_max_bytes,
 | 
			
		||||
                          &pa_device_min_bytes,
 | 
			
		||||
                          &pa_device_max_channels,
 | 
			
		||||
                          &pa_device_min_channels);
 | 
			
		||||
 | 
			
		||||
  if (iret >= 0 ) {
 | 
			
		||||
    valid_dev_cnt++;
 | 
			
		||||
 | 
			
		||||
    p1=(char*)"";
 | 
			
		||||
    p=strstr(pa_device_hostapi,"MME");
 | 
			
		||||
    if(p!=NULL) p1=(char*)"MME";
 | 
			
		||||
    p=strstr(pa_device_hostapi,"Direct");
 | 
			
		||||
    if(p!=NULL) p1=(char*)"DirectX";
 | 
			
		||||
    p=strstr(pa_device_hostapi,"WASAPI");
 | 
			
		||||
    if(p!=NULL) p1=(char*)"WASAPI";
 | 
			
		||||
    p=strstr(pa_device_hostapi,"ASIO");
 | 
			
		||||
    if(p!=NULL) p1=(char*)"ASIO";
 | 
			
		||||
    p=strstr(pa_device_hostapi,"WDM-KS");
 | 
			
		||||
    if(p!=NULL) p1=(char*)"WDM-KS";
 | 
			
		||||
 | 
			
		||||
    sprintf(p2,"%-8s %-39s",p1,pa_device_name);
 | 
			
		||||
    for(i=0; i<50; i++) {
 | 
			
		||||
      hostAPI_DeviceName[i]=p2[i];
 | 
			
		||||
      if(p2[i]==0) break;
 | 
			
		||||
    }
 | 
			
		||||
    *minChan=pa_device_min_channels;
 | 
			
		||||
    *maxChan=pa_device_max_channels;
 | 
			
		||||
    *minSpeed=(int)pa_device_min_speed;
 | 
			
		||||
    *maxSpeed=(int)pa_device_max_speed;
 | 
			
		||||
  } else {
 | 
			
		||||
    for(i=0; i<50; i++) {
 | 
			
		||||
      hostAPI_DeviceName[i]=0;
 | 
			
		||||
    }
 | 
			
		||||
    *minChan=0;
 | 
			
		||||
    *maxChan=0;
 | 
			
		||||
    *minSpeed=0;
 | 
			
		||||
    *maxSpeed=0;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void getDev(int* numDevices0, char hostAPI_DeviceName[][50],
 | 
			
		||||
            int minChan[], int maxChan[],
 | 
			
		||||
            int minSpeed[], int maxSpeed[])
 | 
			
		||||
{
 | 
			
		||||
  int i,id,numDevices;
 | 
			
		||||
  int minch,maxch,minsp,maxsp;
 | 
			
		||||
  char apidev[256];
 | 
			
		||||
 | 
			
		||||
  numDevices=Pa_GetDeviceCount();
 | 
			
		||||
  *numDevices0=numDevices;
 | 
			
		||||
 | 
			
		||||
  for(id=0; id<numDevices; id++)  {
 | 
			
		||||
    paInputDevice(id,apidev,&minch,&maxch,&minsp,&maxsp);
 | 
			
		||||
    for(i=0; i<50; i++) {
 | 
			
		||||
      hostAPI_DeviceName[id][i]=apidev[i];
 | 
			
		||||
    }
 | 
			
		||||
    hostAPI_DeviceName[id][49]=0;
 | 
			
		||||
    minChan[id]=minch;
 | 
			
		||||
    maxChan[id]=maxch;
 | 
			
		||||
    minSpeed[id]=minsp;
 | 
			
		||||
    maxSpeed[id]=maxsp;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										105
									
								
								getfile.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								getfile.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,105 @@
 | 
			
		||||
#include "getfile.h"
 | 
			
		||||
#include <QDir>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <math.h>
 | 
			
		||||
 | 
			
		||||
extern qint16 id[4*60*96000];
 | 
			
		||||
 | 
			
		||||
void getfile(QString fname, bool xpol, int dbDgrd)
 | 
			
		||||
{
 | 
			
		||||
  int npts=2*52*96000;
 | 
			
		||||
  if(xpol) npts=2*npts;
 | 
			
		||||
 | 
			
		||||
// Degrade S/N by dbDgrd dB -- for tests only!!
 | 
			
		||||
  float dgrd=0.0;
 | 
			
		||||
  if(dbDgrd<0) dgrd = 23.0*sqrt(pow(10.0,-0.1*(double)dbDgrd) - 1.0);
 | 
			
		||||
  float fac=23.0/sqrt(dgrd*dgrd + 23.0*23.0);
 | 
			
		||||
 | 
			
		||||
  memset(id,0,2*npts);
 | 
			
		||||
  char name[80];
 | 
			
		||||
  strcpy(name,fname.toAscii());
 | 
			
		||||
  FILE* fp=fopen(name,"rb");
 | 
			
		||||
 | 
			
		||||
  if(fp != NULL) {
 | 
			
		||||
    fread(&datcom_.fcenter,sizeof(datcom_.fcenter),1,fp);
 | 
			
		||||
    fread(id,2,npts,fp);
 | 
			
		||||
    int j=0;
 | 
			
		||||
 | 
			
		||||
    if(dbDgrd<0) {
 | 
			
		||||
      for(int i=0; i<npts; i+=2) {
 | 
			
		||||
        datcom_.d4[j++]=fac*((float)id[i] + dgrd*gran());
 | 
			
		||||
        datcom_.d4[j++]=fac*((float)id[i+1] + dgrd*gran());
 | 
			
		||||
        if(!xpol) j+=2;               //Skip over d4(3,x) and d4(4,x)
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      for(int i=0; i<npts; i+=2) {
 | 
			
		||||
        datcom_.d4[j++]=(float)id[i];
 | 
			
		||||
        datcom_.d4[j++]=(float)id[i+1];
 | 
			
		||||
        if(!xpol) j+=2;               //Skip over d4(3,x) and d4(4,x)
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    fclose(fp);
 | 
			
		||||
 | 
			
		||||
    datcom_.ndiskdat=1;
 | 
			
		||||
    int nfreq=(int)datcom_.fcenter;
 | 
			
		||||
    if(nfreq!=144 and nfreq != 432 and nfreq != 1296) datcom_.fcenter=144.125;
 | 
			
		||||
    int i0=fname.indexOf(".tf2");
 | 
			
		||||
    if(i0<0) i0=fname.indexOf(".iq");
 | 
			
		||||
    datcom_.nutc=0;
 | 
			
		||||
    if(i0>0) datcom_.nutc=100*fname.mid(i0-4,2).toInt() +
 | 
			
		||||
        fname.mid(i0-2,2).toInt();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void savetf2(QString fname, bool xpol)
 | 
			
		||||
{
 | 
			
		||||
  int npts=2*52*96000;
 | 
			
		||||
  if(xpol) npts=2*npts;
 | 
			
		||||
 | 
			
		||||
  qint16* buf=(qint16*)malloc(2*npts);
 | 
			
		||||
  char name[80];
 | 
			
		||||
  strcpy(name,fname.toAscii());
 | 
			
		||||
  FILE* fp=fopen(name,"wb");
 | 
			
		||||
 | 
			
		||||
  if(fp != NULL) {
 | 
			
		||||
    fwrite(&datcom_.fcenter,sizeof(datcom_.fcenter),1,fp);
 | 
			
		||||
    int j=0;
 | 
			
		||||
    for(int i=0; i<npts; i+=2) {
 | 
			
		||||
      buf[i]=(qint16)datcom_.d4[j++];
 | 
			
		||||
      buf[i+1]=(qint16)datcom_.d4[j++];
 | 
			
		||||
      if(!xpol) j+=2;               //Skip over d4(3,x) and d4(4,x)
 | 
			
		||||
    }
 | 
			
		||||
    fwrite(buf,2,npts,fp);
 | 
			
		||||
    fclose(fp);
 | 
			
		||||
  }
 | 
			
		||||
  free(buf);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//#define	MAX_RANDOM	0x7fffffff
 | 
			
		||||
 | 
			
		||||
/* Generate gaussian random float with mean=0 and std_dev=1 */
 | 
			
		||||
float gran()
 | 
			
		||||
{
 | 
			
		||||
  float fac,rsq,v1,v2;
 | 
			
		||||
  static float gset;
 | 
			
		||||
  static int iset;
 | 
			
		||||
 | 
			
		||||
  if(iset){
 | 
			
		||||
    /* Already got one */
 | 
			
		||||
    iset = 0;
 | 
			
		||||
    return gset;
 | 
			
		||||
  }
 | 
			
		||||
  /* Generate two evenly distributed numbers between -1 and +1
 | 
			
		||||
   * that are inside the unit circle
 | 
			
		||||
   */
 | 
			
		||||
  do {
 | 
			
		||||
    v1 = 2.0 * (float)rand() / RAND_MAX - 1;
 | 
			
		||||
    v2 = 2.0 * (float)rand() / RAND_MAX - 1;
 | 
			
		||||
    rsq = v1*v1 + v2*v2;
 | 
			
		||||
  } while(rsq >= 1.0 || rsq == 0.0);
 | 
			
		||||
  fac = sqrt(-2.0*log(rsq)/rsq);
 | 
			
		||||
  gset = v1*fac;
 | 
			
		||||
  iset++;
 | 
			
		||||
  return v2*fac;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								getfile.f90
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								getfile.f90
									
									
									
									
									
								
							@ -1,14 +0,0 @@
 | 
			
		||||
!----------------------------------------------------- getfile
 | 
			
		||||
subroutine getfile(fname,len)
 | 
			
		||||
  character*(*) fname
 | 
			
		||||
 | 
			
		||||
  include 'datcom.f90'
 | 
			
		||||
  include 'gcom2.f90'
 | 
			
		||||
 | 
			
		||||
  fname80=fname
 | 
			
		||||
  nlen=len
 | 
			
		||||
  newdat2=1
 | 
			
		||||
  ierr=0
 | 
			
		||||
 | 
			
		||||
  return
 | 
			
		||||
end subroutine getfile
 | 
			
		||||
							
								
								
									
										12
									
								
								getfile.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								getfile.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
#ifndef GETFILE_H
 | 
			
		||||
#define GETFILE_H
 | 
			
		||||
#include <QString>
 | 
			
		||||
#include <QFile>
 | 
			
		||||
#include <QDebug>
 | 
			
		||||
#include "commons.h"
 | 
			
		||||
 | 
			
		||||
void getfile(QString fname, bool xpol, int dbDgrd);
 | 
			
		||||
void savetf2(QString fname, bool xpol);
 | 
			
		||||
float gran();
 | 
			
		||||
 | 
			
		||||
#endif // GETFILE_H
 | 
			
		||||
							
								
								
									
										71
									
								
								getfile2.f90
									
									
									
									
									
								
							
							
						
						
									
										71
									
								
								getfile2.f90
									
									
									
									
									
								
							@ -1,71 +0,0 @@
 | 
			
		||||
subroutine getfile2(fname,len)
 | 
			
		||||
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  use dflib
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  character*(*) fname
 | 
			
		||||
  real*8 sq
 | 
			
		||||
 | 
			
		||||
  include 'datcom.f90'
 | 
			
		||||
  include 'gcom1.f90'
 | 
			
		||||
  include 'gcom2.f90'
 | 
			
		||||
  include 'gcom4.f90'
 | 
			
		||||
  integer*2 id(4,NSMAX)
 | 
			
		||||
 | 
			
		||||
1 if(ndecoding.eq.0) go to 2
 | 
			
		||||
#ifdef CVF
 | 
			
		||||
  call sleepqq(100)
 | 
			
		||||
#else
 | 
			
		||||
  call usleep(100*1000)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  go to 1
 | 
			
		||||
 | 
			
		||||
2 do i=len,1,-1
 | 
			
		||||
     if(fname(i:i).eq.'/' .or. fname(i:i).eq.'\\') go to 10
 | 
			
		||||
  enddo
 | 
			
		||||
  i=0
 | 
			
		||||
10 filename=fname(i+1:)
 | 
			
		||||
  ierr=0
 | 
			
		||||
 | 
			
		||||
  n=8*NSMAX
 | 
			
		||||
  ndecoding=4
 | 
			
		||||
  monitoring=0
 | 
			
		||||
  kbuf=1
 | 
			
		||||
 | 
			
		||||
  call cs_lock('getfile2a')
 | 
			
		||||
!###
 | 
			
		||||
! NB: not really necessary to read whole file at once.  Save memory!
 | 
			
		||||
  call rfile3a(fname,id,n,ierr)
 | 
			
		||||
  do i=1,NSMAX
 | 
			
		||||
     dd(1,i,1)=id(1,i)
 | 
			
		||||
     dd(2,i,1)=id(2,i)
 | 
			
		||||
  enddo
 | 
			
		||||
!###
 | 
			
		||||
 | 
			
		||||
  call cs_unlock
 | 
			
		||||
  if(ierr.ne.0) then
 | 
			
		||||
     print*,'Error opening or reading file: ',fname,ierr
 | 
			
		||||
     go to 999
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  sq=0.
 | 
			
		||||
  ka=0.1*NSMAX
 | 
			
		||||
  kb=0.8*NSMAX
 | 
			
		||||
  do k=ka,kb
 | 
			
		||||
     sq=sq + dd(1,k,1)**2 + dd(2,k,1)**2 + dd(3,k,1)**2 + dd(4,k,1)**2
 | 
			
		||||
  enddo
 | 
			
		||||
  sqave=174*sq/(kb-ka+1)
 | 
			
		||||
  rxnoise=10.0*log10(sqave) - 48.0
 | 
			
		||||
  call cs_lock('getfile2b')
 | 
			
		||||
  read(filename(8:11),*,err=20,end=20) nutc
 | 
			
		||||
  call cs_unlock
 | 
			
		||||
  go to 30
 | 
			
		||||
20 nutc=0
 | 
			
		||||
 | 
			
		||||
30 ndiskdat=1
 | 
			
		||||
  mousebutton=0
 | 
			
		||||
 | 
			
		||||
999 return
 | 
			
		||||
end subroutine getfile2
 | 
			
		||||
							
								
								
									
										45
									
								
								getpfx1.f
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								getpfx1.f
									
									
									
									
									
								
							@ -1,45 +0,0 @@
 | 
			
		||||
      subroutine getpfx1(callsign,k)
 | 
			
		||||
 | 
			
		||||
      character callsign*12
 | 
			
		||||
      character*8 c
 | 
			
		||||
      character addpfx*8
 | 
			
		||||
C  Can't 'include' *.f90 in *.f 
 | 
			
		||||
      common/gcom4/addpfx
 | 
			
		||||
      include 'pfx.f'
 | 
			
		||||
 | 
			
		||||
      iz=index(callsign,' ') - 1
 | 
			
		||||
      if(iz.lt.0) iz=12
 | 
			
		||||
      islash=index(callsign(1:iz),'/')
 | 
			
		||||
      k=0
 | 
			
		||||
      c='   '
 | 
			
		||||
      if(islash.gt.0 .and. islash.le.(iz-4)) then
 | 
			
		||||
!  Add-on prefix
 | 
			
		||||
         c=callsign(1:islash-1)
 | 
			
		||||
         callsign=callsign(islash+1:iz)
 | 
			
		||||
         do i=1,NZ
 | 
			
		||||
            if(pfx(i)(1:4).eq.c) then
 | 
			
		||||
               k=i
 | 
			
		||||
               go to 10
 | 
			
		||||
            endif
 | 
			
		||||
         enddo
 | 
			
		||||
         if(addpfx.eq.c) then
 | 
			
		||||
            k=449
 | 
			
		||||
            go to 10
 | 
			
		||||
         endif
 | 
			
		||||
 | 
			
		||||
      else if(islash.eq.(iz-1)) then
 | 
			
		||||
!  Add-on suffix
 | 
			
		||||
         c=callsign(islash+1:iz)
 | 
			
		||||
         callsign=callsign(1:islash-1)
 | 
			
		||||
         do i=1,NZ2
 | 
			
		||||
            if(sfx(i).eq.c(1:1)) then
 | 
			
		||||
               k=400+i
 | 
			
		||||
               go to 10
 | 
			
		||||
            endif
 | 
			
		||||
         enddo
 | 
			
		||||
      endif
 | 
			
		||||
 | 
			
		||||
 10   if(islash.ne.0 .and.k.eq.0) k=-1
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										35
									
								
								getsnr.f
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								getsnr.f
									
									
									
									
									
								
							@ -1,35 +0,0 @@
 | 
			
		||||
      subroutine getsnr(x,nz,snr)
 | 
			
		||||
 | 
			
		||||
      real x(nz)
 | 
			
		||||
 | 
			
		||||
      smax=-1.e30
 | 
			
		||||
      do i=1,nz
 | 
			
		||||
         if(x(i).gt.smax) then
 | 
			
		||||
            ipk=i
 | 
			
		||||
            smax=x(i)
 | 
			
		||||
         endif
 | 
			
		||||
         s=s+x(i)
 | 
			
		||||
      enddo
 | 
			
		||||
 | 
			
		||||
      s=0.
 | 
			
		||||
      ns=0
 | 
			
		||||
      do i=1,nz
 | 
			
		||||
         if(abs(i-ipk).ge.3) then
 | 
			
		||||
            s=s+x(i)
 | 
			
		||||
            ns=ns+1
 | 
			
		||||
         endif
 | 
			
		||||
      enddo
 | 
			
		||||
      ave=s/ns
 | 
			
		||||
 | 
			
		||||
      sq=0.
 | 
			
		||||
      do i=1,nz
 | 
			
		||||
         if(abs(i-ipk).ge.3) then
 | 
			
		||||
            sq=sq+(x(i)-ave)**2
 | 
			
		||||
            ns=ns+1
 | 
			
		||||
         endif
 | 
			
		||||
      enddo
 | 
			
		||||
      rms=sqrt(sq/(nz-2))
 | 
			
		||||
      snr=(smax-ave)/rms
 | 
			
		||||
 | 
			
		||||
      return
 | 
			
		||||
      end
 | 
			
		||||
							
								
								
									
										2
									
								
								gp.bat
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								gp.bat
									
									
									
									
									
								
							@ -1,2 +0,0 @@
 | 
			
		||||
gcc -c plrr_subs_win.c
 | 
			
		||||
g95 -o pulsar -fno-second-underscore -fbounds-check -ftrace=full pulsar.f90 plrr_subs_win.o
 | 
			
		||||
							
								
								
									
										19
									
								
								i1tor4.f90
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								i1tor4.f90
									
									
									
									
									
								
							@ -1,19 +0,0 @@
 | 
			
		||||
 | 
			
		||||
!--------------------------------------------------- i1tor4
 | 
			
		||||
subroutine i1tor4(d,jz,data)
 | 
			
		||||
 | 
			
		||||
!  Convert wavefile byte data from to real*4.
 | 
			
		||||
 | 
			
		||||
  integer*1 d(jz)
 | 
			
		||||
  real data(jz)
 | 
			
		||||
  integer*1 i1
 | 
			
		||||
  equivalence(i1,i4)
 | 
			
		||||
 | 
			
		||||
  do i=1,jz
 | 
			
		||||
     n=d(i)
 | 
			
		||||
     i4=n-128
 | 
			
		||||
     data(i)=i1
 | 
			
		||||
  enddo
 | 
			
		||||
 | 
			
		||||
  return
 | 
			
		||||
end subroutine i1tor4
 | 
			
		||||
							
								
								
									
										16
									
								
								in.dat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								in.dat
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,16 @@
 | 
			
		||||
  35  36  22   8  31  11  14  55  20  36  55  13  24  15  56  38  16  28  61  58
 | 
			
		||||
  15  26  45   8  41  53  37  57  59  60  29  29  41  46  44  35  52  61  24  26
 | 
			
		||||
  16  20  53  35   2   6   9  27  47  28  57   6  15   9  16  10  56   9  63  46
 | 
			
		||||
   9  15   3
 | 
			
		||||
  74  61  44 233  29 245 254  64 119  64 250 111  38 145  53  29 140 194 119  99
 | 
			
		||||
  55  86  48 110 142  95  48 120  61  66 252 252 245  88  62  41 124 249 246  68
 | 
			
		||||
 250 249  65  64 140 142  88 190 237  90 240  52  79 216  55  31 112 135  66  44
 | 
			
		||||
  99  57  68
 | 
			
		||||
  54  61  26   5  13  60   3  56  30  58  57   4  16  43  28  43   6  61  13  19
 | 
			
		||||
  56   8   4   9  45  32   9   7  14  52   4  38  40  27   3  26  51  54  40  29
 | 
			
		||||
  36  63  34  43   3  48  36  49  46  30   8  20  40  59  29  28  17  11   8  19
 | 
			
		||||
  11  63   5
 | 
			
		||||
  38  25  35   8  28   0   0  60  60  25   0  31  28  52  14  24   9  30  18  54
 | 
			
		||||
  49  55  48  15  27  54  26  22  30  27   1   1   4  31  35  29  23   2   2  27
 | 
			
		||||
   0   1  25  32  21  84  28  19   5  60   2  27  15   9  39  23  42  12  29  17
 | 
			
		||||
  16  50  49
 | 
			
		||||
							
								
								
									
										323
									
								
								install-sh
									
									
									
									
									
								
							
							
						
						
									
										323
									
								
								install-sh
									
									
									
									
									
								
							@ -1,323 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# install - install a program, script, or datafile
 | 
			
		||||
 | 
			
		||||
scriptversion=2005-05-14.22
 | 
			
		||||
 | 
			
		||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
 | 
			
		||||
# later released in X11R6 (xc/config/util/install.sh) with the
 | 
			
		||||
# following copyright and license.
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 1994 X Consortium
 | 
			
		||||
#
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
# of this software and associated documentation files (the "Software"), to
 | 
			
		||||
# deal in the Software without restriction, including without limitation the
 | 
			
		||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 | 
			
		||||
# sell copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
# furnished to do so, subject to the following conditions:
 | 
			
		||||
#
 | 
			
		||||
# The above copyright notice and this permission notice shall be included in
 | 
			
		||||
# all copies or substantial portions of the Software.
 | 
			
		||||
#
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
 | 
			
		||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 | 
			
		||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
 | 
			
		||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
#
 | 
			
		||||
# Except as contained in this notice, the name of the X Consortium shall not
 | 
			
		||||
# be used in advertising or otherwise to promote the sale, use or other deal-
 | 
			
		||||
# ings in this Software without prior written authorization from the X Consor-
 | 
			
		||||
# tium.
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
# FSF changes to this file are in the public domain.
 | 
			
		||||
#
 | 
			
		||||
# Calling this script install-sh is preferred over install.sh, to prevent
 | 
			
		||||
# `make' implicit rules from creating a file called install from it
 | 
			
		||||
# when there is no Makefile.
 | 
			
		||||
#
 | 
			
		||||
# This script is compatible with the BSD install script, but was written
 | 
			
		||||
# from scratch.  It can only install one file at a time, a restriction
 | 
			
		||||
# shared with many OS's install programs.
 | 
			
		||||
 | 
			
		||||
# set DOITPROG to echo to test this script
 | 
			
		||||
 | 
			
		||||
# Don't use :- since 4.3BSD and earlier shells don't like it.
 | 
			
		||||
doit="${DOITPROG-}"
 | 
			
		||||
 | 
			
		||||
# put in absolute paths if you don't have them in your path; or use env. vars.
 | 
			
		||||
 | 
			
		||||
mvprog="${MVPROG-mv}"
 | 
			
		||||
cpprog="${CPPROG-cp}"
 | 
			
		||||
chmodprog="${CHMODPROG-chmod}"
 | 
			
		||||
chownprog="${CHOWNPROG-chown}"
 | 
			
		||||
chgrpprog="${CHGRPPROG-chgrp}"
 | 
			
		||||
stripprog="${STRIPPROG-strip}"
 | 
			
		||||
rmprog="${RMPROG-rm}"
 | 
			
		||||
mkdirprog="${MKDIRPROG-mkdir}"
 | 
			
		||||
 | 
			
		||||
chmodcmd="$chmodprog 0755"
 | 
			
		||||
chowncmd=
 | 
			
		||||
chgrpcmd=
 | 
			
		||||
stripcmd=
 | 
			
		||||
rmcmd="$rmprog -f"
 | 
			
		||||
mvcmd="$mvprog"
 | 
			
		||||
src=
 | 
			
		||||
dst=
 | 
			
		||||
dir_arg=
 | 
			
		||||
dstarg=
 | 
			
		||||
no_target_directory=
 | 
			
		||||
 | 
			
		||||
usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
 | 
			
		||||
   or: $0 [OPTION]... SRCFILES... DIRECTORY
 | 
			
		||||
   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
 | 
			
		||||
   or: $0 [OPTION]... -d DIRECTORIES...
 | 
			
		||||
 | 
			
		||||
In the 1st form, copy SRCFILE to DSTFILE.
 | 
			
		||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
 | 
			
		||||
In the 4th, create DIRECTORIES.
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
-c         (ignored)
 | 
			
		||||
-d         create directories instead of installing files.
 | 
			
		||||
-g GROUP   $chgrpprog installed files to GROUP.
 | 
			
		||||
-m MODE    $chmodprog installed files to MODE.
 | 
			
		||||
-o USER    $chownprog installed files to USER.
 | 
			
		||||
-s         $stripprog installed files.
 | 
			
		||||
-t DIRECTORY  install into DIRECTORY.
 | 
			
		||||
-T         report an error if DSTFILE is a directory.
 | 
			
		||||
--help     display this help and exit.
 | 
			
		||||
--version  display version info and exit.
 | 
			
		||||
 | 
			
		||||
Environment variables override the default commands:
 | 
			
		||||
  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
 | 
			
		||||
"
 | 
			
		||||
 | 
			
		||||
while test -n "$1"; do
 | 
			
		||||
  case $1 in
 | 
			
		||||
    -c) shift
 | 
			
		||||
        continue;;
 | 
			
		||||
 | 
			
		||||
    -d) dir_arg=true
 | 
			
		||||
        shift
 | 
			
		||||
        continue;;
 | 
			
		||||
 | 
			
		||||
    -g) chgrpcmd="$chgrpprog $2"
 | 
			
		||||
        shift
 | 
			
		||||
        shift
 | 
			
		||||
        continue;;
 | 
			
		||||
 | 
			
		||||
    --help) echo "$usage"; exit $?;;
 | 
			
		||||
 | 
			
		||||
    -m) chmodcmd="$chmodprog $2"
 | 
			
		||||
        shift
 | 
			
		||||
        shift
 | 
			
		||||
        continue;;
 | 
			
		||||
 | 
			
		||||
    -o) chowncmd="$chownprog $2"
 | 
			
		||||
        shift
 | 
			
		||||
        shift
 | 
			
		||||
        continue;;
 | 
			
		||||
 | 
			
		||||
    -s) stripcmd=$stripprog
 | 
			
		||||
        shift
 | 
			
		||||
        continue;;
 | 
			
		||||
 | 
			
		||||
    -t) dstarg=$2
 | 
			
		||||
	shift
 | 
			
		||||
	shift
 | 
			
		||||
	continue;;
 | 
			
		||||
 | 
			
		||||
    -T) no_target_directory=true
 | 
			
		||||
	shift
 | 
			
		||||
	continue;;
 | 
			
		||||
 | 
			
		||||
    --version) echo "$0 $scriptversion"; exit $?;;
 | 
			
		||||
 | 
			
		||||
    *)  # When -d is used, all remaining arguments are directories to create.
 | 
			
		||||
	# When -t is used, the destination is already specified.
 | 
			
		||||
	test -n "$dir_arg$dstarg" && break
 | 
			
		||||
        # Otherwise, the last argument is the destination.  Remove it from $@.
 | 
			
		||||
	for arg
 | 
			
		||||
	do
 | 
			
		||||
          if test -n "$dstarg"; then
 | 
			
		||||
	    # $@ is not empty: it contains at least $arg.
 | 
			
		||||
	    set fnord "$@" "$dstarg"
 | 
			
		||||
	    shift # fnord
 | 
			
		||||
	  fi
 | 
			
		||||
	  shift # arg
 | 
			
		||||
	  dstarg=$arg
 | 
			
		||||
	done
 | 
			
		||||
	break;;
 | 
			
		||||
  esac
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
if test -z "$1"; then
 | 
			
		||||
  if test -z "$dir_arg"; then
 | 
			
		||||
    echo "$0: no input file specified." >&2
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
  # It's OK to call `install-sh -d' without argument.
 | 
			
		||||
  # This can happen when creating conditional directories.
 | 
			
		||||
  exit 0
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
for src
 | 
			
		||||
do
 | 
			
		||||
  # Protect names starting with `-'.
 | 
			
		||||
  case $src in
 | 
			
		||||
    -*) src=./$src ;;
 | 
			
		||||
  esac
 | 
			
		||||
 | 
			
		||||
  if test -n "$dir_arg"; then
 | 
			
		||||
    dst=$src
 | 
			
		||||
    src=
 | 
			
		||||
 | 
			
		||||
    if test -d "$dst"; then
 | 
			
		||||
      mkdircmd=:
 | 
			
		||||
      chmodcmd=
 | 
			
		||||
    else
 | 
			
		||||
      mkdircmd=$mkdirprog
 | 
			
		||||
    fi
 | 
			
		||||
  else
 | 
			
		||||
    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
 | 
			
		||||
    # might cause directories to be created, which would be especially bad
 | 
			
		||||
    # if $src (and thus $dsttmp) contains '*'.
 | 
			
		||||
    if test ! -f "$src" && test ! -d "$src"; then
 | 
			
		||||
      echo "$0: $src does not exist." >&2
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if test -z "$dstarg"; then
 | 
			
		||||
      echo "$0: no destination specified." >&2
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    dst=$dstarg
 | 
			
		||||
    # Protect names starting with `-'.
 | 
			
		||||
    case $dst in
 | 
			
		||||
      -*) dst=./$dst ;;
 | 
			
		||||
    esac
 | 
			
		||||
 | 
			
		||||
    # If destination is a directory, append the input filename; won't work
 | 
			
		||||
    # if double slashes aren't ignored.
 | 
			
		||||
    if test -d "$dst"; then
 | 
			
		||||
      if test -n "$no_target_directory"; then
 | 
			
		||||
	echo "$0: $dstarg: Is a directory" >&2
 | 
			
		||||
	exit 1
 | 
			
		||||
      fi
 | 
			
		||||
      dst=$dst/`basename "$src"`
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # This sed command emulates the dirname command.
 | 
			
		||||
  dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
 | 
			
		||||
 | 
			
		||||
  # Make sure that the destination directory exists.
 | 
			
		||||
 | 
			
		||||
  # Skip lots of stat calls in the usual case.
 | 
			
		||||
  if test ! -d "$dstdir"; then
 | 
			
		||||
    defaultIFS='
 | 
			
		||||
	 '
 | 
			
		||||
    IFS="${IFS-$defaultIFS}"
 | 
			
		||||
 | 
			
		||||
    oIFS=$IFS
 | 
			
		||||
    # Some sh's can't handle IFS=/ for some reason.
 | 
			
		||||
    IFS='%'
 | 
			
		||||
    set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
 | 
			
		||||
    shift
 | 
			
		||||
    IFS=$oIFS
 | 
			
		||||
 | 
			
		||||
    pathcomp=
 | 
			
		||||
 | 
			
		||||
    while test $# -ne 0 ; do
 | 
			
		||||
      pathcomp=$pathcomp$1
 | 
			
		||||
      shift
 | 
			
		||||
      if test ! -d "$pathcomp"; then
 | 
			
		||||
        $mkdirprog "$pathcomp"
 | 
			
		||||
	# mkdir can fail with a `File exist' error in case several
 | 
			
		||||
	# install-sh are creating the directory concurrently.  This
 | 
			
		||||
	# is OK.
 | 
			
		||||
	test -d "$pathcomp" || exit
 | 
			
		||||
      fi
 | 
			
		||||
      pathcomp=$pathcomp/
 | 
			
		||||
    done
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if test -n "$dir_arg"; then
 | 
			
		||||
    $doit $mkdircmd "$dst" \
 | 
			
		||||
      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
 | 
			
		||||
      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
 | 
			
		||||
      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
 | 
			
		||||
      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
 | 
			
		||||
 | 
			
		||||
  else
 | 
			
		||||
    dstfile=`basename "$dst"`
 | 
			
		||||
 | 
			
		||||
    # Make a couple of temp file names in the proper directory.
 | 
			
		||||
    dsttmp=$dstdir/_inst.$$_
 | 
			
		||||
    rmtmp=$dstdir/_rm.$$_
 | 
			
		||||
 | 
			
		||||
    # Trap to clean up those temp files at exit.
 | 
			
		||||
    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
 | 
			
		||||
    trap '(exit $?); exit' 1 2 13 15
 | 
			
		||||
 | 
			
		||||
    # Copy the file name to the temp name.
 | 
			
		||||
    $doit $cpprog "$src" "$dsttmp" &&
 | 
			
		||||
 | 
			
		||||
    # and set any options; do chmod last to preserve setuid bits.
 | 
			
		||||
    #
 | 
			
		||||
    # If any of these fail, we abort the whole thing.  If we want to
 | 
			
		||||
    # ignore errors from any of these, just make sure not to ignore
 | 
			
		||||
    # errors from the above "$doit $cpprog $src $dsttmp" command.
 | 
			
		||||
    #
 | 
			
		||||
    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
 | 
			
		||||
      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
 | 
			
		||||
      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
 | 
			
		||||
      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
 | 
			
		||||
 | 
			
		||||
    # Now rename the file to the real destination.
 | 
			
		||||
    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
 | 
			
		||||
      || {
 | 
			
		||||
	   # The rename failed, perhaps because mv can't rename something else
 | 
			
		||||
	   # to itself, or perhaps because mv is so ancient that it does not
 | 
			
		||||
	   # support -f.
 | 
			
		||||
 | 
			
		||||
	   # Now remove or move aside any old file at destination location.
 | 
			
		||||
	   # We try this two ways since rm can't unlink itself on some
 | 
			
		||||
	   # systems and the destination file might be busy for other
 | 
			
		||||
	   # reasons.  In this case, the final cleanup might fail but the new
 | 
			
		||||
	   # file should still install successfully.
 | 
			
		||||
	   {
 | 
			
		||||
	     if test -f "$dstdir/$dstfile"; then
 | 
			
		||||
	       $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
 | 
			
		||||
	       || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
 | 
			
		||||
	       || {
 | 
			
		||||
		 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
 | 
			
		||||
		 (exit 1); exit 1
 | 
			
		||||
	       }
 | 
			
		||||
	     else
 | 
			
		||||
	       :
 | 
			
		||||
	     fi
 | 
			
		||||
	   } &&
 | 
			
		||||
 | 
			
		||||
	   # Now rename the file to the real destination.
 | 
			
		||||
	   $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
 | 
			
		||||
	 }
 | 
			
		||||
    }
 | 
			
		||||
  fi || { (exit 1); exit 1; }
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# The final little trick to "correctly" pass the exit status to the exit trap.
 | 
			
		||||
{
 | 
			
		||||
  (exit 0); exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Local variables:
 | 
			
		||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
 | 
			
		||||
# time-stamp-start: "scriptversion="
 | 
			
		||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
 | 
			
		||||
# time-stamp-end: "$"
 | 
			
		||||
# End:
 | 
			
		||||
							
								
								
									
										263
									
								
								jtaudio.c
									
									
									
									
									
								
							
							
						
						
									
										263
									
								
								jtaudio.c
									
									
									
									
									
								
							@ -1,263 +0,0 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <portaudio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
void fivehz_();
 | 
			
		||||
void fivehztx_();
 | 
			
		||||
void addnoise_(short int *n);
 | 
			
		||||
 | 
			
		||||
//  Definition of structure pointing to the audio data
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
  double *Tsec;
 | 
			
		||||
  double *tbuf;
 | 
			
		||||
  int    *iwrite;
 | 
			
		||||
  int    *ibuf;
 | 
			
		||||
  int    *TxOK;
 | 
			
		||||
  int    *ndebug;
 | 
			
		||||
  int    *ndsec;
 | 
			
		||||
  int    *Transmitting;
 | 
			
		||||
  int    *nwave;
 | 
			
		||||
  int    *nmode;
 | 
			
		||||
  int    *trperiod;
 | 
			
		||||
  int     nbuflen;
 | 
			
		||||
  int     nfs;
 | 
			
		||||
  short  *y1;
 | 
			
		||||
  short  *y2;
 | 
			
		||||
  short  *iwave;
 | 
			
		||||
}
 | 
			
		||||
paTestData;
 | 
			
		||||
 | 
			
		||||
typedef struct _SYSTEMTIME
 | 
			
		||||
{
 | 
			
		||||
  short   Year;
 | 
			
		||||
  short   Month;
 | 
			
		||||
  short   DayOfWeek;
 | 
			
		||||
  short   Day;
 | 
			
		||||
  short   Hour;
 | 
			
		||||
  short   Minute;
 | 
			
		||||
  short   Second;
 | 
			
		||||
  short   Millisecond;
 | 
			
		||||
} SYSTEMTIME;
 | 
			
		||||
 | 
			
		||||
#ifdef Win32
 | 
			
		||||
extern void __stdcall GetSystemTime(SYSTEMTIME *st);
 | 
			
		||||
#else
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
 | 
			
		||||
void GetSystemTime(SYSTEMTIME *st){
 | 
			
		||||
  struct timeval tmptimeofday;
 | 
			
		||||
  struct tm tmptmtime;
 | 
			
		||||
  gettimeofday(&tmptimeofday,NULL);
 | 
			
		||||
  gmtime_r((const time_t *)&tmptimeofday.tv_sec,&tmptmtime);
 | 
			
		||||
  st->Year = (short)tmptmtime.tm_year;
 | 
			
		||||
  st->Month = (short)tmptmtime.tm_year;
 | 
			
		||||
  st->DayOfWeek = (short)tmptmtime.tm_wday;
 | 
			
		||||
  st->Day = (short)tmptmtime.tm_mday;
 | 
			
		||||
  st->Hour = (short)tmptmtime.tm_hour;
 | 
			
		||||
  st->Minute = (short)tmptmtime.tm_min;
 | 
			
		||||
  st->Second = (short)tmptmtime.tm_sec;
 | 
			
		||||
  st->Millisecond = (short)(tmptimeofday.tv_usec/1000);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//  Output callback routine:
 | 
			
		||||
static int SoundOut( void *inputBuffer, void *outputBuffer,
 | 
			
		||||
		       unsigned long framesPerBuffer,
 | 
			
		||||
		       const PaStreamCallbackTimeInfo* timeInfo, 
 | 
			
		||||
		       PaStreamCallbackFlags statusFlags,
 | 
			
		||||
		       void *userData )
 | 
			
		||||
{
 | 
			
		||||
  paTestData *data = (paTestData*)userData;
 | 
			
		||||
  short *wptr = (short*)outputBuffer;
 | 
			
		||||
  unsigned int i,n;
 | 
			
		||||
  static short int n2;
 | 
			
		||||
  static int n0;
 | 
			
		||||
  static int ia=0;
 | 
			
		||||
  static int ib=0;
 | 
			
		||||
  static int ic=0;
 | 
			
		||||
  static int TxOKz=0;
 | 
			
		||||
  static double stime0=86400.0;
 | 
			
		||||
  int nsec;
 | 
			
		||||
  double stime;
 | 
			
		||||
  SYSTEMTIME st;
 | 
			
		||||
 | 
			
		||||
  // Get System time
 | 
			
		||||
  GetSystemTime(&st);
 | 
			
		||||
  nsec = (int) (st.Hour*3600.0 + st.Minute*60.0 + st.Second);
 | 
			
		||||
  stime = nsec + st.Millisecond*0.001 + *data->ndsec*0.1;
 | 
			
		||||
  *data->Tsec = stime;
 | 
			
		||||
  nsec=(int)stime;
 | 
			
		||||
 | 
			
		||||
  if(*data->TxOK && (!TxOKz))  {
 | 
			
		||||
    n=nsec/(*data->trperiod);
 | 
			
		||||
    //    ic = (int)(stime - *data->trperiod*n) * data->nfs/framesPerBuffer;
 | 
			
		||||
    //    ic = framesPerBuffer*ic;
 | 
			
		||||
    ic = (int)(stime - *data->trperiod*n) * data->nfs;
 | 
			
		||||
    ic = ic % *data->nwave;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  TxOKz=*data->TxOK;
 | 
			
		||||
  *data->Transmitting=*data->TxOK;
 | 
			
		||||
 | 
			
		||||
  if(*data->TxOK)  {
 | 
			
		||||
    for(i=0 ; i<framesPerBuffer; i++ )  {
 | 
			
		||||
      n2=data->iwave[ic];
 | 
			
		||||
      addnoise_(&n2);
 | 
			
		||||
      *wptr++ = n2;                   //left
 | 
			
		||||
      *wptr++ = n2;                   //right
 | 
			
		||||
      ic++;
 | 
			
		||||
      if(ic>=*data->nwave) {
 | 
			
		||||
	if(*data->nmode==2) {
 | 
			
		||||
	  *data->TxOK=0;
 | 
			
		||||
	  ic--;
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	  ic = ic % *data->nwave;       //Wrap buffer pointer if necessary
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    memset((void*)outputBuffer, 0, 2*sizeof(short)*framesPerBuffer);
 | 
			
		||||
  }
 | 
			
		||||
  fivehz_();                               //Call fortran routine
 | 
			
		||||
  fivehztx_();                             //Call fortran routine
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*******************************************************************/
 | 
			
		||||
int jtaudio_(int *ndevin, int *ndevout, short y1[], short y2[], 
 | 
			
		||||
	     int *nbuflen, int *iwrite, short iwave[], 
 | 
			
		||||
	     int *nwave, int *nfsample, int *nsamperbuf,
 | 
			
		||||
	     int *TRPeriod, int *TxOK, int *ndebug,
 | 
			
		||||
 	     int *Transmitting, double *Tsec, int *ngo, int *nmode,
 | 
			
		||||
	     double tbuf[], int *ibuf, int *ndsec)
 | 
			
		||||
{
 | 
			
		||||
  paTestData data;
 | 
			
		||||
  PaStream *outstream;
 | 
			
		||||
  PaStreamParameters outputParameters;
 | 
			
		||||
 | 
			
		||||
  int nfs,ndin,ndout;
 | 
			
		||||
  PaError err1,err2,err2a,err3,err3a;
 | 
			
		||||
  double dnfs;
 | 
			
		||||
 | 
			
		||||
  data.Tsec = Tsec;
 | 
			
		||||
  data.tbuf = tbuf;
 | 
			
		||||
  data.iwrite = iwrite;
 | 
			
		||||
  data.ibuf = ibuf;
 | 
			
		||||
  data.TxOK = TxOK;
 | 
			
		||||
  data.ndebug = ndebug;
 | 
			
		||||
  data.ndsec = ndsec;
 | 
			
		||||
  data.Transmitting = Transmitting;
 | 
			
		||||
  data.y1 = y1;
 | 
			
		||||
  data.y2 = y2;
 | 
			
		||||
  data.nbuflen = *nbuflen;
 | 
			
		||||
  data.nmode = nmode;
 | 
			
		||||
  data.nwave = nwave;
 | 
			
		||||
  data.iwave = iwave;
 | 
			
		||||
  data.nfs = *nfsample;
 | 
			
		||||
  data.trperiod = TRPeriod;
 | 
			
		||||
 | 
			
		||||
  nfs=*nfsample;
 | 
			
		||||
  err1=Pa_Initialize();                      // Initialize PortAudio
 | 
			
		||||
  if(err1) {
 | 
			
		||||
    printf("Error initializing PortAudio.\n");
 | 
			
		||||
    printf("%s\n",Pa_GetErrorText(err1));
 | 
			
		||||
    goto error;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ndin=*ndevin;
 | 
			
		||||
  ndout=*ndevout;
 | 
			
		||||
  dnfs=(double)nfs;
 | 
			
		||||
  printf("Opening device %d for output.\n",ndout);
 | 
			
		||||
 | 
			
		||||
  outputParameters.device=*ndevout;
 | 
			
		||||
  outputParameters.channelCount=2;
 | 
			
		||||
  outputParameters.sampleFormat=paInt16;
 | 
			
		||||
  outputParameters.suggestedLatency=1.0;
 | 
			
		||||
  outputParameters.hostApiSpecificStreamInfo=NULL;
 | 
			
		||||
  err2a=Pa_OpenStream(
 | 
			
		||||
		       &outstream,      //address of stream
 | 
			
		||||
		       NULL,
 | 
			
		||||
		       &outputParameters,
 | 
			
		||||
		       dnfs,            //Sample rate
 | 
			
		||||
		       2048,            //Frames per buffer
 | 
			
		||||
		       paNoFlag,
 | 
			
		||||
		       (PaStreamCallback *)SoundOut, //Callback routine
 | 
			
		||||
		       (void *)&data);               //address of data structure
 | 
			
		||||
  if(err2a) {
 | 
			
		||||
    printf("Error opening Audio stream for output.\n");
 | 
			
		||||
    printf("%s\n",Pa_GetErrorText(err2a));
 | 
			
		||||
    goto error;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  err3a=Pa_StartStream(outstream);             //Start output stream
 | 
			
		||||
  if(err3a) {
 | 
			
		||||
    printf("Error starting output Audio stream\n");
 | 
			
		||||
    printf("%s\n",Pa_GetErrorText(err3a));
 | 
			
		||||
    goto error;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  printf("Audio output stream running normally.\n******************************************************************\n");
 | 
			
		||||
 | 
			
		||||
  while(Pa_IsStreamActive(outstream))  {
 | 
			
		||||
    if(*ngo==0) goto StopStream;
 | 
			
		||||
    Pa_Sleep(200);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 StopStream:
 | 
			
		||||
  Pa_AbortStream(outstream);              // Abort stream
 | 
			
		||||
  Pa_CloseStream(outstream);             // Close stream, we're done.
 | 
			
		||||
  Pa_Terminate();
 | 
			
		||||
  return(0);
 | 
			
		||||
 | 
			
		||||
error:
 | 
			
		||||
  printf("%d  %f  %d  %d  %d\n",ndout,dnfs,err1,err2a,err3a);
 | 
			
		||||
  Pa_Terminate();
 | 
			
		||||
  return(1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int padevsub_(int *numdev, int *ndefin, int *ndefout, 
 | 
			
		||||
	      int nchin[], int nchout[])
 | 
			
		||||
{
 | 
			
		||||
  int      i;
 | 
			
		||||
  int      numDevices;
 | 
			
		||||
  const    PaDeviceInfo *pdi;
 | 
			
		||||
  PaError  err;
 | 
			
		||||
  //  PaHostApiInfo *hostapi;
 | 
			
		||||
  
 | 
			
		||||
  Pa_Initialize();
 | 
			
		||||
 | 
			
		||||
  //  numDevices = Pa_CountDevices();
 | 
			
		||||
  numDevices = Pa_GetDeviceCount();
 | 
			
		||||
 
 | 
			
		||||
  *numdev=numDevices;
 | 
			
		||||
  if( numDevices < 0 )  {
 | 
			
		||||
    err = numDevices;
 | 
			
		||||
    goto error;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  printf("\nAudio    Output    Device Name\n");
 | 
			
		||||
  printf("Device  Channels\n");
 | 
			
		||||
  printf("----------------------------------------------------------\n");
 | 
			
		||||
 | 
			
		||||
  for( i=0; i<numDevices; i++ )  {
 | 
			
		||||
    pdi = Pa_GetDeviceInfo( i );
 | 
			
		||||
    if(i == Pa_GetDefaultInputDevice()) *ndefin=i;
 | 
			
		||||
    if(i == Pa_GetDefaultOutputDevice()) *ndefout=i;
 | 
			
		||||
    nchin[i]=pdi->maxInputChannels;
 | 
			
		||||
    nchout[i]=pdi->maxOutputChannels;
 | 
			
		||||
    if(nchout[i]>0) 
 | 
			
		||||
      printf("  %2d      %2d       %s\n",i,nchout[i],pdi->name);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Pa_Terminate();
 | 
			
		||||
  return 0;
 | 
			
		||||
 | 
			
		||||
 error:
 | 
			
		||||
  Pa_Terminate();
 | 
			
		||||
  return err;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user