home *** CD-ROM | disk | FTP | other *** search
- C Program EX_0807.FOR
- C Listing 18F - see documentation in TUTOR.SSS
-
- $include:'SSSF1.H'
-
- subroutine prime
- $include:'SSSF2.H'
- real*8 t0
- character*5 a0
- integer*1 i(5)
- integer countr, server
- common a0, t0, countr, server
- equivalence (a0, i)
- countr = 0
- server = 1
- n = 0
- i(1) = 27
- i(2) = 91
- i(3) = 55
- i(4) = 57
- i(5) = 68
- call INIQUE(2, 1, 1)
- call INISTA(1,'bus ',1,0,0,0)
- call TALLY(1, 1)
- call CREATE(0, 0)
- return
- end
-
- subroutine signal
- $include:'SSSF2.H'
- real*8 t0
- character*5 a0
- integer countr, server
- common a0, t0, countr, server
- write(*,'(A,F6.2,A\)')' Simulated time ',T(),a0
- return
- end
-
- subroutine resque
- $include:'SSSF2.H'
- call CLEARS(0)
- call CLEARQ(0)
- 11 continue
- if (NQ(1).gt.0) then
- call REMVFQ(1, 1)
- call DISPOS
- goto 11
- endif
- 21 continue
- if (NC().gt.0) then
- call REMVFC(1)
- call DISPOS
- goto 21
- endif
- return
- end
-
- subroutine endper
- $include:'SSSF2.H'
- real*8 t0
- character*5 a0
- integer countr, server
- common a0, t0, countr, server
- 990 format(A,I1,F8.1,F8.3,F9.2,A)
- i = countr + 1
- goto (1,2,3,4,5,6,7) i
-
- 1 call SETSEE(777)
- call SETANT(0)
- goto 999
-
- 2 write(*,'(A)')' # average avail.s duration '
- goto 999
-
- 3 write(*,990) ' ', countr, QAVG(1), SAVG(1),
- + T()-t0, ' '
- goto 999
-
- 4 write(*,990) ' ', countr, QAVG(1), SAVG(1),
- + T()-t0, ' '
- call QUEUE(2, 0)
- call resque
- server = 1
- call REMVFQ(2, 1)
- call SETSEE(777)
- call SETANT(1)
- goto 999
-
- 5 goto 999
-
- 6 write(*,990) ' ', countr, QAVG(1), SAVG(1),
- + T()-t0, ' '
- goto 999
-
- 7 write(*,990) ' ', countr, QAVG(1), SAVG(1),
- + T()-t0, ' '
- call SIMEND(0)
- return
-
- 999 call CLEARS(0)
- call CLEARQ(1)
- countr = countr + 1
- t0 = T()
- return
- end
-
- Program EX_0807
- $include:'SSSF2.H'
- real*8 t0
- character*5 a0
- integer countr, server
- common a0, t0, countr, server
- integer ARRIVL, STARTA, ENDACT, NEXTAC, TIMEL
- + n, ecode
- data ARRIVL/1/, STARTA/2/, ENDACT/3/, NEXTAC/4/
- data TIMEL/120/
- data n/0/
-
- call prime
-
- 99 ecode = NEXTEV()
- if (ecode.gt.0) then
- goto (101, 102, 103, 104) ecode
-
- C ARRIVL
- 101 continue
- if (n.eq.countr*TIMEL) call endper
- n = n + 1
- call signal
- call SETA(1, EX(0.9))
- call CREATE(EX(1), n)
- call SCHED(0, NEXTAC, IDE())
- goto 99
-
- C NEXTAC
- 104 continue
- if (server.gt.0) then
- call SCHED(0.0, STARTA, IDE())
- else
- call QUEUE(1, 0.0)
- endif
- goto 99
-
- C STARTA
- 102 continue
- call SCHED(A(1), ENDACT, IDE())
- server = server - 1
- call TALLY(1, server)
- goto 99
-
- C ENDACT
- 103 continue
- call DISPOS
- server = server + 1
- call TALLY(1, server)
- if (NQ(1).gt.0) then
- call REMVFQ(1, 1)
- call SCHED(0.0, STARTA, IDE())
- endif
- goto 99
-
- else
- stop 'End of simulation'
- endif
- end
-