subroutine genmsk_short(msg,msgsent,ichk,itone,itype)

  use hashing
  character*22 msg,msgsent
  character*3 crpt,rpt(0:7)
  logical first
  integer itone(35)
  integer ig24(0:4096-1)                  !Codewords for Golay (24,12) code
  integer b11(11)
  data b11/1,1,1,0,0,0,1,0,0,1,0/         !Barker 11 code
  data rpt /'26 ','27 ','28 ','R26','R27','R28','RRR','73 '/
  data first/.true./
  save first,ig24

  if(first) then
     call golay24_table(ig24)             !Define the Golay(24,12) codewords
     first=.false.
  endif

  itype=-1
  msgsent='*** bad message ***'
  itone=0
  i1=index(msg,'>')
  if(i1.lt.9) go to 900
  call fmtmsg(msg,iz)
  crpt=msg(i1+2:i1+5)
  do i=0,7
     if(crpt.eq.rpt(i)) go to 10
  enddo
  go to 900

10 irpt=i                               !Report index, 0-7
  if(ichk.lt.10000) then
     call hash(msg(2:i1-1),i1-2,ihash)  
     ihash=iand(ihash,511)                 !9-bit hash for the two callsigns
     ig=8*ihash + irpt                     !12-bit message information
  else
     ig=ichk-10000
  endif
  ncodeword=ig24(ig)
  itone(1:11)=b11                       !Insert the Barker-11 code
  n=2**24
  do i=12,35                            !Insert codeword into itone array
     n=n/2
     itone(i)=0
     if(iand(ncodeword,n).ne.0) itone(i)=1
  enddo 
  msgsent=msg
  itype=7

  n=count(itone(1:35).eq.0)
  if(mod(n,2).ne.0) stop 'Parity error in genmsk_short.'

900 return
end subroutine genmsk_short

subroutine hash_calls(calls,ih9)

  use hashing
  character*(*) calls
  i1=index(calls,'>')
  call hash(calls(2:i1-1),i1-2,ih9)
  ih9=iand(ih9,511)                      !9-bit hash for the two callsigns

  return
end subroutine hash_calls
