home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol268 / user11x.for < prev   
Text File  |  1986-05-22  |  15KB  |  476 lines

  1. C    [USER11X.FOR of JUGPDS Vol.10]
  2. C
  3.     PROGRAM        EXA11
  4. C////////////////////////////////////////////////////////////////
  5. C/                                /
  6. C/    Program-id.    Example_11x, Information System        /
  7. C/    Date-written.    Feb. 11th 1984                /
  8. C/    Remarks.    A main program of Information service    /
  9. C/            system, from page 269.            /
  10. C/            This program uses GASP IIex version.    /
  11. C/                                /
  12. C////////////////////////////////////////////////////////////////
  13. C
  14.     INTEGER*1    FLNAME(11)
  15.     DIMENSION    NSET(120), QSET(30)
  16.         COMMON/C1/ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST,
  17.      $  NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,ISEED,TNOW,
  18.      $  TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4),IMM,MAXQS,MAXNS
  19.     COMMON/C2/ATRIB(10),ENQ(4),INN(4),JCELS(5,22),KRANK(4),
  20.      $  MAXNQ(4),MFE(4),MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),
  21.      $  QTIME(4),SSUMA(10,5),SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,
  22.      $  JCLR,JTRIB(12)
  23.     COMMON /U1/ NARC,NSCAN,JBUFF,NSTA(10),JRPLY(10)
  24.     COMMON /U2/ XL,NTER,IBUFF,CDIAL(2),CREAD(2),SRTIM,SCTIM,
  25.      $    TRTIM,DLTIM,COMTIM(2)
  26.     DATA FLNAME/'G','A','S','P',4*' ','D','A','T'/
  27. C
  28. C    --- Start of Main program of Information System.
  29. C
  30.     NCRDR = 6
  31. C
  32.     IDRIVE = 0
  33.     WRITE(1,90)
  34.    90    FORMAT(1H0,'Output GASP data file to Display(3) or Printer(2)'
  35.      1         ,/1H ,'Enter Output Device number 2 or 3 : ')
  36.     READ(1,95) NPRNT
  37.   95    FORMAT(I1)
  38.     WRITE(1,100)
  39.   100    FORMAT(1H0,'Input GASPex data file name (max 8 characters):')
  40.     READ(1,200) (FLNAME(I),I=1,8)
  41.     WRITE(1,210) (FLNAME(I),I=1,11)
  42.   200    FORMAT(8A1)
  43.   210    FORMAT(1H ,'Input GASPex data file name: ',11A1)
  44.     CALL    OPEN(NCRDR,FLNAME,IDRIVE)
  45. C
  46. C    --- Initial conditions for he simulation are no customers in
  47. C        the system. the scanner is at position (1), the buffer sto-
  48. C        rage is not blocked, all stations have no customers in them
  49. C        and all lines are free.
  50. C
  51.     NARC = 0
  52.     NSCAN = 1
  53.     JBUFF = 0
  54.        DO 10 I=1,10
  55.     NSTA(I) = 0
  56.    10    JRPLY(I) = 1
  57. C
  58.     CALL    GASP(NSET,QSET)
  59.     CALL    EXIT
  60.     END
  61. C
  62.     SUBROUTINE    EVNTS(I,NSET,QSET)
  63. C////////////////////////////////////////////////////////////////
  64. C/                                /
  65. C/    Program-id.    EVNTS.FOR                /
  66. C/    Date-written.    11th,Feb,1984                /
  67. C/    Remarks.    The user defined events routine for     /
  68. C/            Information system, from page 270    /
  69. C/                                /
  70. C////////////////////////////////////////////////////////////////
  71. C
  72.     DIMENSION    NSET(1),QSET(1)
  73.         COMMON/C1/ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST,
  74.      $  NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,ISEED,TNOW,
  75.      $  TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4),IMM,MAXQS,MAXNS
  76.     COMMON /C2/ATRIB(10),ENQ(4),INN(4),JCELS(5,22),KRANK(4),
  77.      $  MAXNQ(4),MFE(4),MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),
  78.      $  QTIME(4),SSUMA(10,5),SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,
  79.      $  JCLR,JTRIB(12)
  80.     COMMON /U1/ NARC,NSCAN,JBUFF,NSTA(10),JRPLY(10)
  81.     COMMON /U2/ XL,NTER,IBUFF,CDIAL(2),CREAD(2),SRTIM,SCTIM,
  82.      $  TRTIM,DLTIM,COMTIM(2)
  83. C
  84. C
  85. C    --- SET INITIAL USER VARIABLES.
  86. C
  87.     NTER = PARAM(1,1)
  88.     IBUFF = PARAM(1,2)
  89.     XL = PARAM(1,3)
  90.     CDIAL(1) = PARAM(2,1)
  91.     CDIAL(2) = PARAM(2,2)
  92.     CREAD(1) = PARAM(3,1)
  93.     CREAD(2) = PARAM(3,2)
  94.     SRTIM = PARAM(4,1)
  95.     SCTIM = PARAM(4,2)
  96.     TRTIM = PARAM(5,1)
  97.     DLTIM = PARAM(5,2)
  98.     COMTIM(1) = PARAM(6,1)
  99.     COMTIM(2) = PARAM(6,2)
  100. C
  101.     GO TO (1,2,3,4,5),I
  102.     1    CALL    ARRVL(NSET,QSET)
  103.     RETURN
  104.     2    CALL    RQEST(NSET,QSET)
  105.     RETURN
  106.     3    CALL    SCAN(NSET,QSET)
  107.     RETURN
  108.     4    CALL    ANSER(NSET,QSET)
  109.     RETURN
  110.     5    CALL    ENDSV(NSET,QSET)
  111.     RETURN
  112.     END
  113. C
  114.     SUBROUTINE    OTPUT(NSET,QSET)
  115. C////////////////////////////////////////////////////////////////
  116. C/                                /
  117. C/    Program-id.    OTPUT.FOR                /
  118. C/    Date-written.    11th,Feb,1984                /
  119. C/    Remarks.    User optinal output routine for     /
  120. C/            Information system from page 270    /
  121. C/                                /
  122. C////////////////////////////////////////////////////////////////
  123. C
  124.     INTEGER*1    DOT(90)
  125.     DIMENSION    NSET(1),QSET(1),DIST(22)
  126.         COMMON/C1/ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST,
  127.      $  NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,ISEED,TNOW,
  128.      $  TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4),IMM,MAXQS,MAXNS
  129.     COMMON /C2/ATRIB(10),ENQ(4),INN(4),JCELS(5,22),KRANK(4),
  130.      $  MAXNQ(4),MFE(4),MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),
  131.      $  QTIME(4),SSUMA(10,5),SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,
  132.      $  JCLR,JTRIB(12)
  133.     COMMON /U1/ NARC,NSCAN,JBUFF,NSTA(10),JRPLY(10)
  134.     COMMON /U2/ XL,NTER,IBUFF,CDIAL(2),CREAD(2),SRTIM,SCTIM,
  135.      $  TRTIM,DLTIM,COMTIM(2)
  136. C
  137. C
  138.     SIMTIM = TFIN - TBEG
  139.     EFECT  = FLOAT(NARC) / SIMTIM
  140.     WRITE(NPRNT,290) NPROJ,NAME,MON,NDAY,NYR,SIMTIM
  141. 290    FORMAT(1H1,'Simulation Project no.',I4,2X,'on',2X,6A2,
  142.      $  //,' Date',I3,'/',I3,'/',I5,5X,'Simulation time : ',F5.0,
  143.      $  ' min ')
  144.     WRITE(NPRNT,380) NTER,IBUFF,XL,CDIAL(1),CDIAL(2),CREAD(1),
  145.      $  CREAD(2),SRTIM,SCTIM,TRTIM,DLTIM,COMTIM(1),COMTIM(2)
  146. 380    FORMAT(1H ,'Numbers of stations : ',I2/
  147.      $  1H ,'Max size of buffer         : ',I2/
  148.      $  1H ,'Mean time between arrivals of customers : ',F4.1,
  149.      $  /1H ,'Customers dialing time range : ',F4.1,2X,F4.1,
  150.      $  /1H ,'Customers reading time range : ',F4.1,2X,F4.1,
  151.      $  /1H ,'Scanner rotation time and scanning time : ',F7.4,2X,F7.4,
  152.      $  /1H ,'Scanner transfer time and delay time    : ',F7.4,2X,F7.4,
  153.      $  /1H ,'Computing time range : ',F6.3,2X,F6.3)
  154.     WRITE(NPRNT,385)
  155. 385    FORMAT(1H ,'------------------------------------------------',
  156.      $  '---------------------------')
  157.     WRITE(NPRNT,901) NARC
  158. 901    FORMAT(1H ,'Total customers served is : ',I6,' persons ')
  159.     WRITE(NPRNT,902) EFECT
  160. 902    FORMAT(1H ,'Customers served / Simulation time : ',F7.4,
  161.      $  ' persons/min ')
  162.     WRITE(NPRNT,905) (NSTA(I),I=1,NTER)
  163. 905    FORMAT(1H ,'Number of customers waiting at station at end : ',/
  164.      $  1H ,10(I5,2X))
  165. C
  166. C    --- Define user output
  167. C
  168.     SUMT = SRTIM + SCTIM + TRTIM + DLTIM
  169.     DELT = (COMTIM(2) - COMTIM(1) + SUMT) / 20.0
  170.     SUMH = 0
  171.     NCL = NCELS(1) + 2
  172.     DO 910 I=1,NCL
  173. 910    SUMH = SUMH + JCELS(1,I)
  174.     DO 920 I=1,NCL
  175. 920    DIST(I) = FLOAT(JCELS(1,I)) / SUMH * 100.0
  176.     WRITE(NPRNT,925)
  177. 925    FORMAT(1H ,'Average time to obtain a display Distribution : ')
  178.     WRITE(NPRNT,930)
  179. 930    FORMAT(1H ,'Upper Limit  Observations  Percentage ')
  180.     DO 940 I=1,NCL
  181.     DO 950 J=1,90
  182.     DOT(J) = ' '
  183. 950    CONTINUE
  184.     DOT(1) = ':'
  185.     K = IFIX((DIST(I) + 0.5) * 0.9)
  186.     IF (K.LE.0) GO TO 960
  187.     DO  980  M=1,K
  188. 980    DOT(M) = '@'
  189. 960    IF (NPRNT.NE.2) GO TO 975
  190.     WRITE(NPRNT,970) SUMT,JCELS(1,I),DIST(I),(DOT(L),L=1,90)
  191.     GO TO 976
  192. 975    WRITE(NPRNT,977) SUMT,JCELS(1,I),DIST(I)
  193. 977    FORMAT(3X,F6.3,8X,I3,9X,F6.2)
  194. 976    CONTINUE
  195. 970    FORMAT(3X,F6.3,8X,I3,9X,F6.2,3X,90A1)
  196.     SUMT = SUMT + DELT
  197. 940    CONTINUE
  198.     WRITE(NPRNT,1000)
  199. 1000    FORMAT(1H1)
  200.     RETURN
  201.     END
  202.     SUBROUTINE    ARRVL(NSET,QSET)
  203. C////////////////////////////////////////////////////////////////
  204. C/                                /
  205. C/    Program-id.    ARRVL.FOR                /
  206. C/    Date-written.    11th,Feb,1984                /
  207. C/    Remarks.    Subroutine ARRVL is called each time    /
  208. C/            a new customer arrives to the system    /
  209. C/            from page 272                /
  210. C/                                /
  211. C////////////////////////////////////////////////////////////////
  212. C
  213.     DIMENSION    NSET(1),QSET(1)
  214.         COMMON/C1/ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST,
  215.      $  NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,ISEED,TNOW,
  216.      $  TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4),IMM,MAXQS,MAXNS
  217.     COMMON /C2/ATRIB(10),ENQ(4),INN(4),JCELS(5,22),KRANK(4),
  218.      $  MAXNQ(4),MFE(4),MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),
  219.      $  QTIME(4),SSUMA(10,5),SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,
  220.      $  JCLR,JTRIB(12)
  221.     COMMON /U1/ NARC,NSCAN,JBUFF,NSTA(10),JRPLY(10)
  222.     COMMON /U2/ XL,NTER,IBUFF,CDIAL(2),CREAD(2),SRTIM,SCTIM,
  223.      $  TRTIM,DLTIM,COMTIM(2)
  224. C
  225. C    --- Determine the station number that the arriving customer
  226. C        will go to by sampling from a uniform distribution.
  227. C        Collect statistics on number of customers at the station
  228. C        to which the new arrival is going.
  229. C
  230.     NARC = NARC + 1
  231.     J = 1
  232.     ICHEK = NSTA(1)
  233.     DO 10 I=2,NTER
  234.     IF(ICHEK.LE.NSTA(I)) GO TO 10
  235.     ICHEK = NSTA(I)
  236.     J = I
  237. 10    CONTINUE
  238.     X = NSTA(J)
  239.     CALL    TMST(X,TNOW,J,NSET,QSET)
  240. C
  241. C    --- Allow customer to make his request immediately since 
  242. C        station was idle.
  243. C
  244.     IF (NSTA(J)) 2,2,3
  245. 2    ATRIB(1) = TNOW + UNFRM(CDIAL(1),CDIAL(2))
  246.     JTRIB(1) = 2
  247.     JTRIB(2) = J
  248.     CALL    FILEM(1,NSET,QSET)
  249. C
  250. C    --- Increment number of customer at station J by one
  251. C
  252. 3    NSTA(J) = NSTA(J) + 1
  253. C
  254. C    --- Schedule next customer arrival at current time olus a
  255. C        sample from an exponential distribution.
  256. C        Customers request is completed. Store request in file 
  257. C        of calls requested but not in buffer. 
  258. C
  259.     CALL    DRAND(ISEED,RNUM)
  260.     ATRIB(1) = TNOW - XL*ALOG(RNUM)
  261.     JTRIB(1) = 1
  262.     CALL    FILEM(1,NSET,QSET)
  263.     RETURN
  264.     END
  265.     SUBROUTINE     RQEST(NSET,QSET)
  266. C////////////////////////////////////////////////////////////////
  267. C/                                /
  268. C/    Program-id.    RQEST.FOR                /
  269. C/    Date-written.    11th,Feb,1984                /
  270. C/    Remarks.    Placement of request for information    /
  271. C/            from page 273                /
  272. C/                                /
  273. C////////////////////////////////////////////////////////////////
  274. C
  275.     DIMENSION    NSET(1),QSET(1)
  276.         COMMON/C1/ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST,
  277.      $  NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,ISEED,TNOW,
  278.      $  TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4),IMM,MAXQS,MAXNS
  279.     COMMON /C2/ATRIB(10),ENQ(4),INN(4),JCELS(5,22),KRANK(4),
  280.      $  MAXNQ(4),MFE(4),MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),
  281.      $  QTIME(4),SSUMA(10,5),SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,
  282.      $  JCLR,JTRIB(12)
  283.     COMMON /U1/ NARC,NSCAN,JBUFF,NSTA(10),JRPLY(10)
  284.     COMMON /U2/ XL,NTER,IBUFF,CDIAL(2),CREAD(2),SRTIM,SCTIM,
  285.      $  TRTIM,DLTIM,COMTIM(2)
  286. C
  287.     J = JTRIB(2)
  288.     JTRIB(1) = 20
  289.     CALL    FILEM(2,NSET,QSET)
  290.     JRPLY(J) = 2
  291.     RETURN
  292.     END
  293.     SUBROUTINE    SCAN(NSET,QSET)
  294. C////////////////////////////////////////////////////////////////
  295. C/                                /
  296. C/    Program-id.    SCAN.FOR                /
  297. C/    Date-written.    11th,Feb,1984                /
  298. C/    Remarks.    Subroutine SCAN controls the scanner     /
  299. C/            and is called each time the scanner    /
  300. C/            can intettogate a scan point.        /
  301. C/            From page 274                /
  302. C/                                /
  303. C////////////////////////////////////////////////////////////////
  304. C
  305.     DIMENSION    NSET(1),QSET(1)
  306.         COMMON/C1/ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST,
  307.      $  NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,ISEED,TNOW,
  308.      $  TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4),IMM,MAXQS,MAXNS
  309.     COMMON /C2/ATRIB(10),ENQ(4),INN(4),JCELS(5,22),KRANK(4),
  310.      $  MAXNQ(4),MFE(4),MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),
  311.      $  QTIME(4),SSUMA(10,5),SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,
  312.      $  JCLR,JTRIB(12)
  313.     COMMON /U1/ NARC,NSCAN,JBUFF,NSTA(10),JRPLY(10)
  314.     COMMON /U2/ XL,NTER,IBUFF,CDIAL(2),CREAD(2),SRTIM,SCTIM,
  315.      $  TRTIM,DLTIM,COMTIM(2)
  316. C
  317. C    --- Test to see if scan point has a request which is to be 
  318. C        transferred to the buffer.
  319. C
  320.     K = JRPLY(NSCAN)
  321.     GO TO (4,1,4,4),K
  322. C
  323. C    --- Test to see if buffer is full. If buffer is full, stop 
  324. C        scanner and set buffer index to full ststus and return
  325. C
  326. 1    IF (NQ(3) - IBUFF) 3,2,2
  327. 2    JBUFF = 1
  328.     RETURN
  329. C
  330. C    --- If buffer is not full, find the request at the scan point
  331. C        and transfer it to the buffer.
  332. C
  333. 3    CALL    FINDN(NSCAN,5,2,2,KCOL,NSET,QSET)
  334.     CALL    RMOVE(KCOL,2,NSET,QSET)
  335.     JTRIB(1) = 30
  336.     CALL    FILEM(3,NSET,QSET)
  337. C
  338. C    --- File request in file 3, the file of calls in buffer.
  339. C        Schedule arrival of answer to the request to occur at
  340. C        current time plus the transfer time from the scanner to 
  341. C        the buffer and from the buffer to the station plus 
  342. C        the computer computation time.
  343. C
  344.     JRPLY(NSCAN) = 3
  345.     ADDTIM = TRTIM + DLTIM
  346.     ATRIB(1) = TNOW + ADDTIM + UNFRM(COMTIM(1),COMTIM(2))
  347.     JTRIB(1) = 4
  348.     CALL    FILEM(1,NSET,QSET)
  349. C
  350. C    --- Set scanner delay time as the sum of the transfer time plus
  351. C        scan time plus movement time.
  352. C
  353.     SUMTIM = SRTIM + SCTIM + TRTIM
  354.     ATRIB(1) = TNOW + SUMTIM
  355.     GO TO 5
  356. C
  357. C    --- Set scan time delay equal to scan time plus movement time
  358. C
  359. 4    SUMTIM = SRTIM + SCTIM
  360.     ATRIB(1) = TNOW + SUMTIM
  361. C
  362. C    --- Move scanner to next position and schedule another scan
  363. C
  364. 5    IF(NSCAN - NTER) 7,6,6
  365. 6    NSCAN = 0
  366. 7    JTRIB(1) = 3
  367.     CALL    FILEM(1,NSET,QSET)
  368.     NSCAN = NSCAN + 1
  369.     RETURN
  370.     END
  371. C
  372.     SUBROUTINE    ANSER(NSET,QSET)
  373. C////////////////////////////////////////////////////////////////
  374. C/                                /
  375. C/    Program-id.    ANSER.FOR                /
  376. C/    Date-written.    11th,Feb,1984                /
  377. C/    Remarks.    Subroutine ANSER ia called whenever an    /
  378. C/            answer to request is ready.        /
  379. C/            From page 275                /
  380. C/                                /
  381. C////////////////////////////////////////////////////////////////
  382. C
  383.     DIMENSION    NSET(1),QSET(1)
  384.         COMMON/C1/ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST,
  385.      $  NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,ISEED,TNOW,
  386.      $  TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4),IMM,MAXQS,MAXNS
  387.     COMMON /C2/ATRIB(10),ENQ(4),INN(4),JCELS(5,22),KRANK(4),
  388.      $  MAXNQ(4),MFE(4),MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),
  389.      $  QTIME(4),SSUMA(10,5),SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,
  390.      $  JCLR,JTRIB(12)
  391.     COMMON /U1/ NARC,NSCAN,JBUFF,NSTA(10),JRPLY(10)
  392.     COMMON /U2/ XL,NTER,IBUFF,CDIAL(2),CREAD(2),SRTIM,SCTIM,
  393.      $  TRTIM,DLTIM,COMTIM(2)
  394. C
  395. C    --- Find request for which an answer has been determined
  396. C        and remove it from the file of calls requested and stored 
  397. C        in the buffer.
  398. C
  399.     J  = JTRIB(2)
  400.     CALL    FINDN(J,5,3,2,KCOL,NSET,QSET)
  401.     CALL    RMOVE(KCOL,3,NSET,QSET)
  402.     TI = TNOW - ATRIB(1)
  403.     CALL    COLCT(TI,1,NSET,QSET)
  404.     SUMT = SRTIM + SCTIM + TRTIM + DLTIM
  405.     DELT = (COMTIM(2) - COMTIM(1) + SUMT) / 20.0
  406.     CALL    HISTO(TI,SUMT,DELT,1)
  407.     JRPLY(J) = 4
  408. C
  409. C    --- Schedule an end of service event for the customer to
  410. C        occur at current time plus customer's reading time
  411. C
  412.     ATRIB(1) = TNOW + UNFRM(CREAD(1),CREAD(2))
  413.     JTRIB(1) = 5
  414.     CALL    FILEM(1,NSET,QSET)
  415. C
  416. C    --- Determine if buffer was full 
  417. C
  418.     IF (JBUF.LE.0) RETURN
  419. C
  420. C    --- If buffer was full, set it to nonfull status and call 
  421. C        subroutine SCAN to start the scanner moving again.
  422. C
  423.     JBUFF = 0
  424.     CALL    SCAN(NSET,QSET)
  425.     RETURN
  426.     END
  427. C
  428.     SUBROUTINE    ENDSV(NSET,QSET)
  429. C////////////////////////////////////////////////////////////////
  430. C/                                /
  431. C/    Program-id    ENDSV.FOR                /
  432. C/    Date-written.    Feb. 11th 1984                /
  433. C/    Remarks.    Subroutine ENDSV is called eack time    /
  434. C/            a customer is finished with the answer    /
  435. C/            to his request.                /
  436. C/            From page 276                /
  437. C/                                /
  438. C////////////////////////////////////////////////////////////////
  439. C
  440.     DIMENSION    NSET(1),QSET(1)
  441.         COMMON/C1/ID,IM,INIT,JEVNT,JMNIT,MFA,MSTOP,MX,MXC,NCLCT,NHIST,
  442.      $  NOQ,NORPT,NOT,NPRMS,NRUN,NRUNS,NSTAT,OUT,ISEED,TNOW,
  443.      $  TBEG,TFIN,MXX,NPRNT,NCRDR,NEP,VNQ(4),IMM,MAXQS,MAXNS
  444.     COMMON /C2/ATRIB(10),ENQ(4),INN(4),JCELS(5,22),KRANK(4),
  445.      $  MAXNQ(4),MFE(4),MLC(4),MLE(4),NCELS(5),NQ(4),PARAM(20,4),
  446.      $  QTIME(4),SSUMA(10,5),SUMA(10,5),NAME(6),NPROJ,MON,NDAY,NYR,
  447.      $  JCLR,JTRIB(12)
  448.     COMMON /U1/ NARC,NSCAN,JBUFF,NSTA(10),JRPLY(10)
  449.     COMMON /U2/ XL,NTER,IBUFF,CDIAL(2),CREAD(2),SRTIM,SCTIM,
  450.      $  TRTIM,DLTIM,COMTIM(2)
  451. C
  452. C    --- Collect statistics on number of customers at station J
  453. C
  454.     J = JTRIB(2)
  455.     X = NSTA(J)
  456.     CALL    TMST(X,TNOW,J,NSET,QSET)
  457. C
  458. C    --- Decrement number of customers at station J by one
  459. C
  460.     NSTA(J) = NSTA(J) - 1
  461.     JRPLY(J) = 1
  462. C
  463. C    --- Set line from station J to free status
  464. C
  465.     IF (NSTA(J).LE.0) RETURN
  466. C
  467. C    --- If a customer is waitting for station J, schedule a 
  468. C        plavement of request event at station J
  469. C
  470.     ATRIB(1) = TNOW + UNFRM(CDIAL(1),CDIAL(2))
  471.     JTRIB(1) = 2
  472.     JTRIB(2) = J
  473.     CALL    FILEM(1,NSET,QSET)
  474.     RETURN
  475.     END
  476.