From 03df5baaa09379e39595045fa4acdd66116334be Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sat, 19 May 2018 20:41:27 +0000 Subject: [PATCH] Deal with strict interpretation if ISO C interop in recent GCC Fortran Cast C char array type to Fortran character string using TRANSFER. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@8666 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- lib/decoder.f90 | 34 ++++++++++++++++++++++------------ lib/jt9.f90 | 19 +++++++++---------- lib/jt9com.f90 | 10 +++++----- 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/lib/decoder.f90 b/lib/decoder.f90 index 5f9913bde..d5607ebdb 100644 --- a/lib/decoder.f90 +++ b/lib/decoder.f90 @@ -32,12 +32,22 @@ subroutine multimode_decoder(ss,id2,params,nfsample) integer*2 id2(NTMAX*12000) type(params_block) :: params real*4 dd(NTMAX*12000) + character(len=20) :: datetime + character(len=12) :: mycall, hiscall + character(len=6) :: mygrid, hisgrid save type(counting_jt4_decoder) :: my_jt4 type(counting_jt65_decoder) :: my_jt65 type(counting_jt9_decoder) :: my_jt9 type(counting_ft8_decoder) :: my_ft8 + !cast C character arrays to Fortran character strings + datetime=transfer(params%datetime, datetime) + mycall=transfer(params%mycall,mycall) + hiscall=transfer(params%hiscall,hiscall) + mygrid=transfer(params%mygrid,mygrid) + hisgrid=transfer(params%hisgrid,hisgrid) + ! initialize decode counts my_jt4%decoded = 0 my_jt65%decoded = 0 @@ -87,7 +97,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) params%nftx,newdat,params%nutc,params%nfa,params%nfb, & params%nexp_decode,params%ndepth,logical(params%nagain), & logical(params%lft8apon),logical(params%lapcqonly),params%napwid, & - params%mycall,params%mygrid,params%hiscall,params%hisgrid) + mycall,mygrid,hiscall,hisgrid) call timer('decft8 ',1) if(nfox.gt.0) then n30min=minval(n30fox(1:nfox)) @@ -110,7 +120,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample) n30fox(j)=n m=n30max-n if(len(trim(g2fox(j))).eq.4) then - call azdist(params%mygrid,g2fox(j),0.d0,nAz,nEl,nDmiles,nDkm, & + call azdist(mygrid,g2fox(j),0.d0,nAz,nEl,nDmiles,nDkm, & nHotAz,nHotABetter) else nDkm=9999 @@ -165,8 +175,8 @@ subroutine multimode_decoder(ss,id2,params,nfsample) call my_jt4%decode(jt4_decoded,dd,jz,params%nutc,params%nfqso, & params%ntol,params%emedelay,params%dttol,logical(params%nagain), & params%ndepth,logical(params%nclearave),params%minsync, & - params%minw,params%nsubmode,params%mycall,params%hiscall, & - params%hisgrid,params%nlist,params%listutc,jt4_average) + params%minw,params%nsubmode,mycall,hiscall, & + hisgrid,params%nlist,params%listutc,jt4_average) go to 800 endif @@ -198,8 +208,8 @@ subroutine multimode_decoder(ss,id2,params,nfsample) nf1,nf2,params%nfqso,ntol65,params%nsubmode,params%minsync, & logical(params%nagain),params%n2pass,logical(params%nrobust), & ntrials,params%naggressive,params%ndepth,params%emedelay, & - logical(params%nclearave),params%mycall,params%hiscall, & - params%hisgrid,params%nexp_decode,params%nQSOProgress, & + logical(params%nclearave),mycall,hiscall, & + hisgrid,params%nexp_decode,params%nQSOProgress, & logical(params%ljt65apon)) call timer('jt65a ',1) @@ -224,8 +234,8 @@ subroutine multimode_decoder(ss,id2,params,nfsample) nf1,nf2,params%nfqso,ntol65,params%nsubmode,params%minsync, & logical(params%nagain),params%n2pass,logical(params%nrobust), & ntrials,params%naggressive,params%ndepth,params%emedelay, & - logical(params%nclearave),params%mycall,params%hiscall, & - params%hisgrid,params%nexp_decode,params%nQSOProgress, & + logical(params%nclearave),mycall,hiscall, & + hisgrid,params%nexp_decode,params%nQSOProgress, & logical(params%ljt65apon)) call timer('jt65a ',1) else @@ -503,11 +513,11 @@ contains c1=decoded0(1:i1-1)//' ' c2=decoded0(i1+1:i2-1) g2=decoded0(i2+1:i3-1) - b0=c1.eq.params%mycall + b0=c1.eq.mycall if(c1(1:3).eq.'DE ' .and. index(c2,'/').ge.2) b0=.true. - if(len(trim(c1)).ne.len(trim(params%mycall))) then - i4=index(trim(c1),trim(params%mycall)) - i5=index(trim(params%mycall),trim(c1)) + if(len(trim(c1)).ne.len(trim(mycall))) then + i4=index(trim(c1),trim(mycall)) + i5=index(trim(mycall),trim(c1)) if(i4.ge.1 .or. i5.ge.1) b0=.true. endif b1=i3-i2.eq.5 .and. isgrid4(g2) diff --git a/lib/jt9.f90 b/lib/jt9.f90 index 784972646..ff548b46e 100644 --- a/lib/jt9.f90 +++ b/lib/jt9.f90 @@ -66,8 +66,9 @@ program jt9 'FLAGS') ] type(dec_data), allocatable :: shared_data - character(len=12) :: mycall, hiscall - character(len=6) :: mygrid, hisgrid + character(len=20) :: datetime='' + character(len=12) :: mycall='K1ABC', hiscall='W9XYZ' + character(len=6) :: mygrid='', hisgrid='EN37' common/patience/npatience,nthreads common/decstats/ntry65a,ntry65b,n65a,n65b,num9,numfano data npatience/1/,nthreads/1/ @@ -278,13 +279,10 @@ program jt9 shared_data%params%nranera=6 !### ntrials=3000 shared_data%params%nrobust=.false. shared_data%params%nexp_decode=nexp_decode - shared_data%params%mycall=mycall - shared_data%params%mygrid=mygrid - shared_data%params%hiscall=hiscall - shared_data%params%hisgrid=hisgrid - if (shared_data%params%mycall == '') shared_data%params%mycall='K1ABC' - if (shared_data%params%hiscall == '') shared_data%params%hiscall='W9XYZ' - if (shared_data%params%hisgrid == '') shared_data%params%hiscall='EN37' + shared_data%params%mycall=transfer(mycall,shared_data%params%mycall) + shared_data%params%mygrid=transfer(mygrid,shared_data%params%mygrid) + shared_data%params%hiscall=transfer(hiscall,shared_data%params%hiscall) + shared_data%params%hisgrid=transfer(hisgrid,shared_data%params%hisgrid) if (tx9) then shared_data%params%ntxmode=9 else @@ -296,7 +294,8 @@ program jt9 shared_data%params%nmode=mode end if shared_data%params%nsubmode=nsubmode - shared_data%params%datetime="2013-Apr-16 15:13" !### Temp + datetime="2013-Apr-16 15:13" !### Temp + shared_data%params%datetime=transfer(datetime,shared_data%params%datetime) if(mode.eq.9 .and. fsplit.ne.2700) shared_data%params%nfa=fsplit call multimode_decoder(shared_data%ss,shared_data%id2,shared_data%params,nfsample) enddo diff --git a/lib/jt9com.f90 b/lib/jt9com.f90 index be44f3b6f..c595582d6 100644 --- a/lib/jt9com.f90 +++ b/lib/jt9com.f90 @@ -41,11 +41,11 @@ integer(c_int) :: naggressive logical(c_bool) :: nrobust integer(c_int) :: nexp_decode - character(kind=c_char, len=20) :: datetime - character(kind=c_char, len=12) :: mycall - character(kind=c_char, len=6) :: mygrid - character(kind=c_char, len=12) :: hiscall - character(kind=c_char, len=6) :: hisgrid + character(kind=c_char) :: datetime(20) + character(kind=c_char) :: mycall(12) + character(kind=c_char) :: mygrid(6) + character(kind=c_char) :: hiscall(12) + character(kind=c_char) :: hisgrid(6) end type params_block type, bind(C) :: dec_data