mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-01 16:13:57 -04:00
95926577ae
Groundwork for calling the decoders directly from C/C++ threads. To access the timer module timer_module must now be used. Instrumented code need only use the module function 'timer' which is now a procedure pointer that is guaranteed to be associated (unless null() is assigned to it, which should not be done). The default behaviour of 'timer' is to do nothing. If a Fortran program wishes to profile code it should now use the timer_impl module which contains a default timer implementation. The main program should call 'init_timer([filename])' before using 'timer' or calling routines that are instrumented. If 'init_timer([filename])'. If it is called then an optional file name may be provided with 'timer.out' being used as a default. The procedure 'fini_timer()' may be called to close the file. The default timer implementation is thread safe if used with OpenMP multi-threaded code so long as the OpenMP thread team is given the copyin(/timer_private/) attribute for correct operation. The common block /timer_private/ should be included for OpenMP use by including the file 'timer_common.inc'. The module 'lib/timer_C_wrapper.f90' provides a Fortran wrapper along with 'init' and 'fini' subroutines which allow a C/C++ application to call timer instrumented Fortran code and for it to receive callbacks of 'timer()' subroutine invocations. No C/C++ timer implementation is provided at this stage. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6320 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
68 lines
1.6 KiB
Fortran
68 lines
1.6 KiB
Fortran
program testmsk
|
|
|
|
use timer_module, only: timer
|
|
|
|
parameter (NMAX=359424)
|
|
integer*2 id2(NMAX)
|
|
integer narg(0:11)
|
|
character*80 line(100)
|
|
character infile*80
|
|
|
|
nargs=iargc()
|
|
if(nargs.lt.1) then
|
|
print*,'Usage: testmsk infile1 [infile2 ...]'
|
|
print*,'Examples: testmsk ~/data/JTMSK3/150825_115515.wav'
|
|
print*,' testmsk C:/data/JTMSK3/150825_120245.wav'
|
|
go to 999
|
|
endif
|
|
|
|
nfiles=nargs
|
|
tsync1=0.
|
|
tsync2=0.
|
|
tsoft=0.
|
|
tvit=0.
|
|
ttotal=0.
|
|
ndecodes=0
|
|
|
|
call init_timer()
|
|
call timer('testmsk ',0)
|
|
do ifile=1,nfiles
|
|
call getarg(ifile,infile)
|
|
open(10,file=infile,access='stream',status='old')
|
|
read(10) id2(1:22) !Skip 44 header bytes
|
|
npts=179712 !### T/R = 15 s
|
|
read(10,end=1) id2(1:npts) !Read the raw data
|
|
1 close(10)
|
|
i1=index(infile,'.wav')
|
|
read(infile(i1-6:i1-1),*) narg(0)
|
|
|
|
nrxfreq=1500
|
|
ntol=100
|
|
narg(1)=npts !npts
|
|
narg(2)=0 !nsubmode
|
|
narg(3)=1 !newdat
|
|
narg(4)=0 !minsync
|
|
narg(5)=0 !npick
|
|
narg(6)=0 !t0 (ms)
|
|
narg(7)=npts/12 !t1 (ms) ???
|
|
narg(8)=2 !maxlines
|
|
narg(9)=103 !nmode
|
|
narg(10)=nrxfreq
|
|
narg(11)=ntol
|
|
|
|
call timer('jtmsk ',0)
|
|
call jtmsk(id2,narg,line)
|
|
call timer('jtmsk ',1)
|
|
do i=1,narg(8)
|
|
if(line(i)(1:1).eq.char(0)) exit
|
|
ndecodes=ndecodes+1
|
|
write(*,1002) line(i)(1:60),ndecodes
|
|
1002 format(a60,i10)
|
|
enddo
|
|
enddo
|
|
|
|
call timer('testmsk ',1)
|
|
call timer('testmsk ',101)
|
|
|
|
999 end program testmsk
|