home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
modcomp
/
spack.
< prev
next >
Wrap
Text File
|
2020-01-01
|
6KB
|
173 lines
SUBROUTINE SPACK (XTYPE,NUM,LEN,XDATA)
C
C ****************************************************************
C
C KERMIT for the MODCOMP MAXIV operating system
C
C Compliments of:
C
C SETPOINT, Inc.
C 10245 Brecksville Rd.
C Brecksville, Ohio 44141
C
C
C KERMIT is a copyrighted protocol of Columbia Univ. The authors
C of this version hereby grant permission to copy this software
C provided that it is not used for an explicitly commercial
C purpose and that proper credit be given. SETPOINT, Inc. makes
C no warranty whatsoever regarding the accuracy of this package
C and will assume no liability resulting from it's use.
C
C ****************************************************************
C
C Abstract: SEND THIS PACKET TO THE REMOTE KERMIT
C
C
C MODIFICATION HISTORY
C
C BY DATE REASON PROGRAMS AFFECTED
C
C
C ****************************************************************
C
C Author: BOB BORGESON Version: A.0 Date: Oct-86
C
C Calling Parameters:
C
C R XTYPE - DATA PACKET TYPE
C R NUM - PACKET SEQUENCE NUMBER (MODULO 64)
C R LEN - LENGTH IN WORDS OF XDATA
C R XDATA - DATA PORTION OF PACKET
C
C ****************************************************************
C
C Messages generated by this module : None
C
C ****************************************************************
C
C Subroutines called directly : TOCHAR, TPUTCH
C
C ****************************************************************
C
C Files referenced : None
C
C ****************************************************************
C
C Local variable definitions :
C
C BUFFER - SCRATCH TO PIECE TOGETHER THE WHOLE PACKET
C CH - UFT # TO OUTPUT TO
C CHKSUM - BLOCK CHECKSUM
C COUNT - RUNNING COUNT OF HOW MANY CHARACTERS IN PACKET
C
C ****************************************************************
C
C Commons referenced : KER and KERPAR
C
C ****************************************************************
C
C (*$END.DOCUMENT*)
C
C ****************************************************************
C * *
C * D I M E N S I O N S T A T E M E N T S *
C * *
C ****************************************************************
C
IMPLICIT INTEGER (A-Z)
C
INTEGER*2 XDATA(1), BUFFER(132)
C
C ****************************************************************
C * *
C * T Y P E S T A T E M E N T S *
C * *
C ****************************************************************
C
C
C ****************************************************************
C * *
C * C O M M O N S T A T E M E N T S *
C * *
C ****************************************************************
C
INCLUDE USL/KERCOM
INCLUDE USL/KERPMC
C
C ****************************************************************
C * *
C * E Q U I V A L E N C E S T A T E M E N T S *
C * *
C ****************************************************************
C
C
C ****************************************************************
C * *
C * D A T A S T A T E M E N T S *
C * *
C ****************************************************************
C
C
C ****************************************************************
C
C Code starts here :
C
C
C
C !THIS IS THE CHANNEL TO SEND PACKET
C !OUT ON, START WITH THE FIRST BYTE
CH=RMTOUT
I=1
C
100 CONTINUE
C !SEND OUT PADCHAR IF NEEDED
IF(I.GT.PAD)GO TO 200
CALL TPUTCH(PADCHAR,CH)
I=I+1
GO TO 100
200 CONTINUE
C !BUILD UP THE PACKET
COUNT=1
BUFFER(COUNT)=SOH
COUNT=COUNT+1
CHKSUM=TOCHAR(LEN+3)
BUFFER(COUNT)=TOCHAR(LEN+3)
COUNT=COUNT+1
CHKSUM=CHKSUM+TOCHAR(NUM)
BUFFER(COUNT)=TOCHAR(NUM)
COUNT=COUNT+1
CHKSUM=CHKSUM+XTYPE
BUFFER(COUNT)=XTYPE
COUNT=COUNT+1
C
C !COPY THE CONTENT OF PACKET INFORMA
IF (LEN .LT. 1) GO TO 310
DO 300 I=1,LEN
C !CALCULATE THE CHECKSUM
BUFFER(COUNT)=XDATA(I)
COUNT=COUNT+1
CHKSUM=CHKSUM+XDATA(I)
300 CONTINUE
310 CONTINUE
C
TV1=IAND(CHKSUM,192)
TV2=TV1/64
TV3=TV2+CHKSUM
CHKSUM=IAND(TV3,63)
BUFFER(COUNT)=TOCHAR(CHKSUM)
COUNT=COUNT+1
BUFFER(COUNT)=EOL
BUFFER(COUNT+1)=EOS
COUNT=1
CH=RMTOUT
C
C !SEND OUT THE PACKET
400 CONTINUE
IF(BUFFER(COUNT).EQ.EOS)GO TO 500
CALL TPUTCH(BUFFER(COUNT),CH)
COUNT=COUNT+1
GO TO 400
500 CONTINUE
RETURN
END