home *** CD-ROM | disk | FTP | other *** search
- /* Program EX_0807.C
- Listing 18C - see documentation in TUTOR.SSS
- */
-
- #include "SSSC.H"
-
- #define ARRIVL 1
- #define STARTA 2
- #define ENDACT 3
- #define NEXTAC 4
-
- #define TIMEL 120
-
- #define signal printf("Simulated time %6.2f\x1b[79D",T())
-
- int n, countr, server, ecode;
- double t0;
-
- void prime()
- {
- n = 0;
- countr = 0;
- server = 1;
- t0 = 0;
- INIQUE(2, 1, 1);
- INISTA(1, "bus", 1, 0, 0, 0);
- TALLY(1, server);
- CREATE(0, n);
- }
-
- void resque()
- {
- CLEARS(0);
- CLEARQ(0);
- while (NQ(1))
- { REMVFQ(1, 1); DISPOS(); }
- while (NC())
- { REMVFC(1); DISPOS(); }
- }
-
- void endper()
- {
- switch(countr)
- {
- case 0:
- SETSEE(777);
- SETANT(0);
- break;
-
- case 1:
- printf("# average avail.s duration \n");
- break;
-
- case 2:
- printf("%1d%8.1f%8.3f%9.2f \n",
- countr, QAVG(1), SAVG(1), T() - t0);
- break;
-
- case 3:
- printf("%1d%8.1f%8.3f%9.2f \n",
- countr, QAVG(1), SAVG(1), T() - t0);
- QUEUE(2, 0);
- resque();
- server = 1;
- REMVFQ(2, 1);
- SETSEE(777);
- SETANT(1);
- break;
-
- case 4:
- break;
-
- case 5:
- printf("%1d%8.1f%8.3f%9.2f \n",
- countr, QAVG(1), SAVG(1), T() - t0);
- break;
-
- case 6:
- printf("%1d%8.1f%8.3f%9.2f \n",
- countr, QAVG(1), SAVG(1), T() - t0);
- SIMEND(0);
- }
- CLEARS(0);
- CLEARQ(1);
- countr = countr + 1;
- t0 = T();
- }
-
- main()
- {
- prime();
-
- do
- {
- if ((ecode = NEXTEV()) > 0)
- switch(ecode)
- {
-
- case ARRIVL :
- if (n == countr*TIMEL) endper();
- n = n + 1;
- signal;
- SETA(1, EX(0.9));
- CREATE(EX(1), n);
- SCHED(0, NEXTAC, IDE());
- break;
-
- case NEXTAC :
- if (server) SCHED(0, STARTA, IDE());
- else QUEUE(1, 0);
- break;
-
- case STARTA :
- SCHED(A(1), ENDACT, IDE());
- server = server - 1;
- TALLY(1, server);
- break;
-
- case ENDACT :
- DISPOS();
- server = server + 1;
- TALLY(1, server);
- if (NQ(1))
- {
- REMVFQ(1,1);
- SCHED(0, STARTA, IDE());
- }
- break;
-
- }
- } while(ecode);
- }