home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / computervision / kermit.rdata < prev    next >
Text File  |  2020-01-01  |  3KB  |  110 lines

  1. ; 18 jly 85 esj converted
  2. ;;;;;;;;;;;;;           RDATA        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  3.       E'F A:S(NWLS)
  4.       E'O RDATA.(X)
  5.  
  6. ;     read a data packet from the other KERMIT
  7.  
  8. /INCLUDE BYU.PROG.KERMIT.SYM.EQU.KERCOM
  9. /INCLUDE BYU.PROG.KERMIT.SYM.EQU.KERDEF
  10.  
  11.       I'R NUM,LEN,STATUS,X,TNUM
  12.       I'R TV1,TV2,TV3,TV4
  13.  
  14.    W'R (NUMTRY.GT.MAXTRY)
  15.       LCLSTATE=BIGA                   ;exceeded maxtry , gives up
  16.       E'E CLOSTEXT.(FD)
  17.  
  18.    O'E
  19.       NUMTRY=NUMTRY+1             ;try it again
  20.       STATUS=RPACK.(LEN,NUM,PACKET)    ;read a packet
  21.  
  22.       E'E DODOT.                 ; tell all if ok to
  23.  
  24.       W'R (STATUS.EQ.BIGD)          ;we got the data packet
  25.          W'R (NUM.NE.N)
  26.             W'R (OLDTRY.GT.MAXTRY)
  27.                LCLSTATE=BIGA
  28.                E'E CLOSTEXT.(FD)
  29.             O'E
  30.                OLDTRY=OLDTRY+1
  31.                W'R (NUM.EQ.(N-1))
  32.                   E'E SPAR.(PACKET)      ;we got a duplicted packet
  33.                   TV1=BIGY               ;just ACK it
  34.                   TV2=6
  35.                   E'E SPACK.(TV1,NUM,TV2,PACKET)
  36.                   NUMTRY=0
  37.                   LCLSTATE=STATE
  38.                O'E
  39.                   LCLSTATE=BIGA
  40.                   E'E CLOSTEXT.(FD)
  41.                E'L
  42.             E'L
  43.  
  44.          O'E
  45.             E'E BUFEMP.(PACKET,LEN)     ;write the data packet just receive
  46.             TNUM=N                      ;into the receiving disk file
  47.             TV1=BIGY
  48.             TV2=TNUM
  49.             TV3=0
  50.             TV4=0
  51.             E'E SPACK.(TV1,TV2,TV3,TV4) ;ACK the just received packet
  52.             OLDTRY=NUMTRY
  53.             NUMTRY=0
  54.             N=(N+1) .MOD. 64
  55.             LCLSTATE=BIGD
  56.          E'L
  57.  
  58.       O'R (STATUS.EQ.BIGF)        ;the packet is the file header
  59.          W'R (OLDTRY.GT.MAXTRY)   ;we should have already gotten
  60.             LCLSTATE=BIGA              ;exceeded number of retry, give
  61.             E'E CLOSTEXT.(FD)
  62.  
  63.          O'E
  64.             OLDTRY=OLDTRY+1
  65.             W'R (NUM.EQ.(N-1))       ;we got duplicate file header p
  66.                TV1=BIGY
  67.                TV2=0
  68.                TV3=0
  69.                E'E SPACK.(TV1,NUM,TV2,TV3)  ;just ACK it
  70.                NUMTRY=0
  71.                LCLSTATE=STATE
  72.  
  73.             O'E
  74.                LCLSTATE=BIGA
  75.                E'E CLOSTEXT.(FD)
  76.  
  77.             E'L
  78.          E'L
  79.  
  80.       O'R (STATUS.EQ.BIGZ)             ;we got the EOF packet
  81.          W'R (NUM.NE.N)
  82.             LCLSTATE=BIGA
  83.             E'E CLOSTEXT.(FD)
  84.          O'E
  85.             TNUM=N
  86.             TV1=BIGY
  87.             TV2=0
  88.             TV3=0
  89.             E'E SPACK.(TV1,TNUM,TV2,TV3)  ;ACK it
  90.             E'E CLOSTEXT.(FD)             ;close the receiving disk fi
  91.             N = (N+1) .MOD. 64
  92.             LCLSTATE=BIGF                    ;change the state to look fo
  93.           E'L
  94.  
  95.       O'R (STATUS.EQ.BAD)
  96.               LCLSTATE=STATE                   ;there was an error in the
  97.               TNUM=N                        ;checksum
  98.               TV1=BIGN
  99.               TV2=0
  100.               TV3=0
  101.               E'E SPACK.(TV1,TNUM,TV2,TV3)  ;NAK it
  102.  
  103.       O'E
  104.           LCLSTATE=BIGA                     ;we got a unknown packet type
  105.           E'E CLOSTEXT.(FD)
  106.       E'L                              ;gives up
  107.    E'L
  108.    F'N LCLSTATE
  109.    E'N
  110.