        SUBROUTINE      ARRVL(NSET)
C////////////////////////////////////////////////////////////////
C/                                                              /
C/      Program-id.     ARRVL                                   /
C/      Date-written.   Jan. 24th 1984				/
C/      File-name.      ARRVL4.FOR                              /
C/      Remarks.        Subroutine ARRVL page 148               /
C/                      The arrival of items to the system is   /
C/                      described in terms of the time between  /
C/                      the arrivals, every arrival event must  /
C/                      cause the next arrival event to occur.  /
C/                      This is the version for Example 4.	/
C/                                                              /
C////////////////////////////////////////////////////////////////
C
C	* Default size of INTEGER = 2 bytes in F80
C       
        INTEGER*4       NSET(6,1)
C
      COMMON /C1/ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST,
     1           NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,SCALE,ISEED,
     2           TNOW,TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4)
C
      COMMON /C2/ATRIB(4),ENQ(4),INN(4),JCELS(5,22),KRANK(4),MAXNQ(4),
     1           MFE(4),MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),
     2           QTIME(4),SSUMA(10,5),SUMA(10,5),NAME(6),NPROJ,MON,
     3		 NDAY,NYR,JCLR
C
C       --- Cause next arrival to occur
C
        CALL    DRAND(ISEED,RNUM)
        ATRIB(1) = TNOW - XL * ALOG(RNUM)
        ATRIB(3) = ATRIB(1)
        ATRIB(2) = 1.0
        CALL    FILEM(1,NSET)
C
C       --- Increment total customers arriving
C
        TCUST = TCUST + 1.0
C
C       --- Test to see if system in full
C
        IF (XISYS - 8.0) 2,1,1
C
C       --- System in full. increment number of balkers
C
    1   CBALK = CBALK + 1.0
        RETURN
    2   CALL    TMST(XISYS,TNOW,3,NSET)
C       --- Increment number in system
C
        XISYS = XISYS + 1.0
C
C       ---Set arrival time of this customer to TNOW
C
        ATRIB(3) = TNOW
C
C       --- Test to see if either server is free
C
        IF (XBUZ(1)) 15,4,3
    3   IF (XBUZ(2)) 15,5,7
    4   J = 1
        					GO TO 6
    5   J = 2
C
C       --- Assign arriving customer to free server.
C
    6   CALL    DRAND(ISEED,RNUM)
        ATRIB(1) = TNOW - XMU(J) * ALOG(RNUM)
        ATRIB(2) = J + 1
        CALL    FILEM(1,NSET)
        CALL    TMST(XBUZ(J),TNOW,J,NSET)
C
C       --- Set assigned server to busy status
C
        XBUZ(J) = 1.0
        RETURN
C
C       ---Both server are busy. Put customer in shorter queue.
C
    7   ATRIB(4) = TNOW
        IF (NQ(2) - NQ(3)) 8,8,9
    8   CALL    FILEM(2,NSET)
        				GO TO 10
    9   CALL    FILEM(3,NSET)
   10   RETURN
   15   CALL    ERROR(87,NSET)
        CALL    EXIT
        END

