*
* $Id: xzputp.F,v 1.3 1997/09/02 08:46:28 mclareni Exp $
*
* $Log: xzputp.F,v $
* Revision 1.3  1997/09/02 08:46:28  mclareni
* WINNT mods, mostly cpp defines
*
* Revision 1.2  1997/01/17 08:56:17  gunter
* call vxinvb for linux too.
*
* Revision 1.1.1.1  1996/03/08 15:44:31  mclareni
* Cspack
*
*
#include "cspack/pilot.h"
      SUBROUTINE XZPUTP(LOCAL,REMOTE,CHOPT,IRC)
#include "cspack/zmach.inc"
#include "cspack/hcmail.inc"
#include "cspack/czsock.inc"
#include "cspack/czbuff.inc"
#include "cspack/quest.inc"
#if defined(CERNLIB_IBM)
      CHARACTER*80 CHFILE
#endif
#include "cspack/czoptd.inc"
      DIMENSION     IA(512)
      DIMENSION     IX(8)
      DIMENSION     ICONTR(2)
      DIMENSION     MPACK2(2),MPACK9(2)
      CHARACTER*12  NODE
      CHARACTER*8   DELTIM
      CHARACTER*8   CHOPTT
      CHARACTER*(*) LOCAL,REMOTE
#include "cspack/czunit.inc"
      DATA MPACK2  / 2, 16 /
      DATA MPACK9  / 9, 3  /
#include "cspack/czoptu.inc"
#include "cspack/czopen.inc"
      IRC = 0
      NCHL = LENOCC(LOCAL)
      NCHR = LENOCC(REMOTE)
      IF(IDEBXZ.GE.1) PRINT *,'XZPUTP. enter for ',LOCAL,REMOTE,CHOPT
*
*     Open local file, options Input
*
      LRECL = 2048
      IF(IOPTA.EQ.0) THEN
         IF(IOPTC.EQ.0) THEN
            CALL SZOPEN(LUNXZI,LOCAL(1:NCHL),LRECL,'IP',ISTAT)
         ELSE
            CALL SZOPEN(LUNXZI,LOCAL(1:NCHL),LRECL,'IPC',ISTAT)
         ENDIF
      IF(ISTAT.NE.0) GOTO 95
      ENDIF
*
*     Send OPEN request to server
*
      NCHO=LENOCC(CHOPT)
      CHOPTT = CHOPT
      IF(NCHO.EQ.0) THEN
         CHOPTT = ' '
         NCHO   = 1
      ENDIF
 
      CHMAIL = 'PUTP :'//REMOTE(1:NCHR)//' '//CHOPTT(1:NCHO)
      CALL CZPUTA(CHMAIL,ISTAT)
      IF(ISTAT.NE.0)GO TO 99
*
*     Verify that PAM file has been opened by server
*
      CALL CZGETA(CHMAIL,ISTAT)
      IF(ISTAT.NE.0)GO TO 90
      IF(CHMAIL(1:2).NE.'OK')GO TO 90
*
*     Start timer
*
      IF(INDEX(CHOPT,'S').NE.0) THEN
         CALL CZRTIM(DELTIM)
         CALL TIMED(T)
      ENDIF
*
*     Start transfer
*
      NR   = 0
      NWOR = 0
1     CALL VBLANK(IA,512)
      NUM = 512
      READ(LUNXZI,END=2) NUM,(IA(I),I=1,NUM)
      IF(NUM.EQ.0) GOTO 2
      NWOR = NWOR + NUM
      NR   = NR   + 1
#if defined(CERNLIB_IBM)
*
*     Translate look-ahead name
*
      CALL XZETOA(IA(1),8)
#endif
      CALL UPKBYT(IA(3),1,IX(4),4,MPACK9)
      CALL UPKBYT(IA(3),1,IX,4,MPACK2)
*
*     Loop over body of this record, splitting into lines
*
      I = 4
      LENX = 1
      IF(IX(5).NE.0) THEN
         I = IX(7)
         LENX = IX(7) - 3
      ENDIF
#if defined(CERNLIB_VAX)||defined(CERNLIB_DECS) || defined(CERNLIB_LINUX) || defined(CERNLIB_WINNT)
*
*     Byte swap index vector
*
      CALL VXINVB(IA(3),LENX)
#endif
*
*     Send #words to read
*
      WRITE(CHMAIL,'(I3)') NUM
      CALL CZPUTA(CHMAIL,ISTAT)
      IF(ISTAT.NE.0) GOTO 97
#if defined(CERNLIB_IBM)
*
*     Translate text
*
      CALL XZETOA(IA(I),(NUM-I+1)*4)
#endif
*
*     Send data to server
*
      LBUF      = NUM
      ICONTR(1) = 1
      ICONTR(2) = LBUF
      CALL CZTCP(IA,ICONTR)
 
10    CONTINUE
*
*     Look for null byte in text
*
      IF(IDEBXZ.LT.3) GOTO 1
      J = LOCBYT(0,IA(I),20,1,1,8)
      IF(J.EQ.0) J=20
      PRINT 9001,(IA(K),K=I,I+J-1)
9001  FORMAT(1X,20A4/)
      I = I + J
      IF(I.LT.NUM) GOTO 10
      GOTO 1
*
2     CONTINUE
 
      NUM = -1
      WRITE(CHMAIL,'(I3)') NUM
      CALL CZPUTA(CHMAIL,ISTAT)
      IF(ISTAT.NE.0) GOTO 97
 
      CLOSE(LUNXZI)
      IF(IDEBXZ.GE.0) PRINT *,' File transfer completed '
      IF(INDEX(CHOPT,'S').NE.0)THEN
         CALL CZRTIM(DELTIM)
         CALL TIMED(T)
         READ(DELTIM,'(I2,1X,I2,1X,I2)') IHOUR,IMIN,ISEC
         NSECS = ISEC + IMIN*60 + IHOUR*3600
         IF(NSECS.LE.0) NSECS = 1
         NKILO = NWOR*IQCHAW / 1024
         RATE  = FLOAT(NKILO)/FLOAT(NSECS)
#include "cspack/xzstat.inc"
         PRINT *,' Transferred ',NR,' records, transfer rate = ',RATE,
     +           ' KB/S'
         PRINT *,' Elapsed time = ',DELTIM,' CP time = ',T,' sec.'
      ENDIF
      GO TO 99
*
*          Error
*
  90  PRINT *, ' Cannot open remote file'
      IRC = 1
      GO TO 99
  95  PRINT *, ' Cannot open local file'
      IRC = 2
      GO TO 99
  97  PRINT *, 'Problem in transferring file'
      IRC = 3
      CLOSE(1)
*
  99  LBUF = 270
      END