User Tools

Site Tools


cdc:nos2.source:nam5871:xexec

Table of Contents

XEXEC

Table Of Contents

  • [00023] PROC XEXEC
  • [00034] PROC HHIR
  • [00035] PROC MGETS
  • [00036] PROC MRELS
  • [00037] PROC NEIB
  • [00038] PROC NEIB1
  • [00039] PROC NNETREL
  • [00040] PROC OMSG
  • [00041] PROC OTIME
  • [00042] PROC OVLCALL
  • [00043] PROC XRECALL
  • [00044] PROC XSACB
  • [00045] PROC XTRACE

Source Code

XEXEC.txt
  1. *DECK XEXEC
  2. USETEXT NIPDEF
  3. USETEXT AT
  4. USETEXT PARAMP
  5. USETEXT BACKBUF
  6. USETEXT CET
  7. USETEXT DRHDR
  8. USETEXT FREETAB
  9. USETEXT KDIS
  10. USETEXT OVERLAY
  11. USETEXT PIT
  12. USETEXT PT
  13. USETEXT LLCB
  14. USETEXT NCNT
  15. USETEXT PCNB
  16. USETEXT NBT
  17. USETEXT NHEADER
  18. USETEXT STATTAB
  19. USETEXT SYSCOMD
  20. USETEXT SYSTIME
  21. USETEXT TNT
  22. USETEXT DBGBUF
  23. PROC XEXEC; # NIP MAIN EXECUTION CONTROL #
  24.  
  25. STARTIMS;
  26. #
  27.  #
  28. STOPIMS;
  29. #
  30.   EXTERNAL VARIABLES
  31. #
  32. XREF
  33. BEGIN
  34. PROC HHIR; # MAIN HOST INTERFACE PROCESSOR #
  35. PROC MGETS; # GET ONE FREE BUFFER #
  36. PROC MRELS; # FREE ONE BUFFER INTO THE FREE CHAIN #
  37. PROC NEIB; # UPLINE MESSAGE PROCESSOR #
  38. PROC NEIB1; # CONTINUE PROCESSING OF UPLINE MESSAGES #
  39. PROC NNETREL; # RELEASE ZZZZZDN FILE #
  40. PROC OMSG; # SEND MESSAGE #
  41. PROC OTIME; # GET SYSTEM TIME #
  42. PROC OVLCALL; # OVERLAY LOADER #
  43. PROC XRECALL; # RECALL #
  44. PROC XSACB; # PROCESS ACB STATUS CHANGES #
  45. PROC XTRACE; # TRACE CALLS #
  46. END
  47.  
  48. #
  49.   LOCAL DEFINITIONS
  50. #
  51. DEF TCET # 2000 #; # CHECK CET STATUS CHANGE TIMER IN MS #
  52. DEF TPCR # 5000 #; # XCHKPCR CALL TIMER IN MILLISECONDS #
  53. DEF TACBS # 500 #; # CHECK ACB STATUS CHANGE TIMER IN MS #
  54. DEF TRASIZE # 274 #; # TRACE BUFFER SIZE #
  55. DEF PBTID # 63 #; # PIP TRACE BUFFER ID #
  56. #
  57.   LOCAL VARIABLES
  58. #
  59. ITEM BUF ; # BUFFER FOR INTRAHOST A-A QUEUE #
  60. ITEM I I; # INDUCTION VARIABLE #
  61. ITEM NBTADR U;
  62. ITEM FINISH B; # FLAG TO INDICATE FINISHED RELEASING BUF #
  63. ITEM NEWMS U=0; # NEW MILLESECOND TIME #
  64. ITEM RECALL B; # RECALL FLAG #
  65. ITEM MS U; # MILLISECOND CLOCK #
  66. ITEM TIMER$CET U=0; # CHECK CET TIMER IN MS #
  67. ITEM TIMER$PCR U=0; # XCHKPCR CALL TIMER IN MS #
  68. ITEM TIMER$BUF U=0; # GARBAGE COLLECTION CALL TIMER IN MS #
  69. ITEM TIMER$ACBS U=0; # CHECK ACB STATUS TIMER IN MS #
  70. ITEM TEMP U; # TEMPORARY #
  71. ITEM TEMP1 U; # TEMPORARY #
  72. ITEM TMP U; # TEMPORARY #
  73. ITEM TMPFET U; # TEMPORARY #
  74.  
  75.  
  76. CONTROL IFEQ STAT,1;
  77. ARRAY STIME P(1); # RTIME BUFFER FOR STARTING TIME #
  78. BEGIN
  79. ITEM SMILS U(0,24,36); # STARTING TIME IN MILLESECONDS #
  80. END
  81. ARRAY ETIME P(1); # RTIME BUFFER FOR ENDING TIME #
  82. BEGIN
  83. ITEM EMILS U(0,24,36); # ENDING TIME IN MILLESECONDS #
  84. END
  85.  
  86. ITEM STTEMP; # TEMPORARY STATISTICS VARIABLE #
  87. CONTROL FI;
  88.  
  89. ARRAY KZEROS S(1);
  90. BEGIN # LINE OF BINARY ZEROES #
  91. ITEM KZEROLINE U(00,00,60) = [0];
  92. END
  93. ARRAY CNX ;
  94. BEGIN
  95. ITEM CNE U(00,00,60) ;
  96. ITEM CN1 U(00,52,04) ;
  97. ITEM CN2 U(00,56,04) ;
  98. END
  99.  
  100. CONTROL EJECT;
  101.  
  102. BEGIN # XEXEC #
  103.  
  104. CONTROL IFEQ DEBUG,1;
  105. XTRACE("XEXEC"); # TRACE CALL #
  106. CONTROL FI;
  107.  
  108. KDIS$STAT = 0; # NO STATUS DISPLAY TO FORMAT #
  109. OTIME(THETIME); # GET CURRENT TIME #
  110. MS = MSECS[0]; # SET MILLISECOND CLOCK #
  111. P<DRHDRWD> = 0;
  112. #
  113.   PERFORM PERIODIC SERVICES
  114. #
  115. IF TIMER$ACBS LQ MS OR MSG$AN GR 0
  116. THEN
  117. BEGIN
  118.  
  119. CONTROL IFEQ STAT,1;
  120. OTIME(STIME); # GET SYSTEM TIME BEFORE XSACB CALL #
  121. CONTROL FI;
  122.  
  123. IF TIMER$ACBS LQ MS # SHOULD LOOK AT ALL AN #
  124. THEN
  125. BEGIN
  126. MSG$AN = 0; # CLEAR MSG$AN SUCH THAT ALL AN ARE CHECK #
  127. END
  128. XSACB; # PROCESS ACB(S) STATUS CHANGES #
  129.  
  130. CONTROL IFEQ STAT,1;
  131. OTIME(ETIME); # GET SYSTEM TIME AFTER XSACB CALL #
  132. STTEMP = EMILS[0] - SMILS[0];
  133. IF STTEMP GR ST$LXS
  134. THEN # FOUND LARGER TIME INTERVAL #
  135. BEGIN
  136. ST$LXS = STTEMP; # LARGEST TIME INTERVAL #
  137. END
  138. IF STTEMP GR 200
  139. THEN # SPENT MORE THAN .2 SECONDS IN INTERVAL #
  140. BEGIN
  141. ST$MXS = ST$MXS + 1; # INCREMENT NO OF TIMES GREATER .2 SEC#
  142. END
  143. ST$TXS = ST$TXS + STTEMP; # INCREMENT TOTAL TIME IN INTERVAL#
  144. CONTROL FI;
  145.  
  146. IF MSG$AN EQ 0 # IF ALL TIMER$ACBS HAVE TO BE CHECKED #
  147. THEN
  148. BEGIN
  149. TIMER$ACBS = MS + TACBS; # UPDATE TIMER #
  150. END
  151. ELSE
  152. BEGIN
  153. MSG$AN = 0; # CLEAR MESSAGE FOR APPLICATION FLAG #
  154. END # DO NOT UPDATE TIMER$ACBS SO THAT #
  155. # OTHER APPLICATIONS CAN BE CHECKED #
  156. IF TIMER$PCR LQ MS
  157. THEN
  158. BEGIN # CHECK CONNECTION INACTIVITY/ K DISPLAY #
  159. OVLNAME = XCHKPCRP;# AND RELEASE UNUSED DATA STRUCTURES #
  160. OVLCALL;
  161. TIMER$PCR = MS + TPCR;
  162. END
  163.  
  164. IF (ATENTRYW[NVFAN] NQ 0 ) AND
  165. ( ( (TIMER$BUF LQ MS ) AND
  166. ( (FRENOFB GR NFBUFF) OR
  167. (FRESFB GR NFSIZE ) OR
  168. (REDUCEFL NQ 0 ) ) ) OR
  169. (HRL LQ HRLV1 ) )
  170. THEN # CALL GARBAGE COLLECTION TO PACK FL #
  171. BEGIN
  172. COUNTER = COUNTER + 1 ; # COUNTING FOR PRU BUFFER MOVING#
  173. PARAMP1 = 0 ; # ASSUMING NO PRU TO BE MOVED #
  174. PRUMOVE = FALSE; # NOT MOVING FREE PRU BUFFERS #
  175. IF COUNTER EQ MGBCLPB
  176. THEN
  177. BEGIN # REACH THE LIMIT #
  178. # SET FROM LIST TO CIRCULAR CHN #
  179. PRUMOVE = TRUE; # OKAY TO MOVE FREE PRU BUFFERS #
  180.  
  181. OVLNAME = MSETPTRP ;
  182. OVLCALL ;
  183. COUNTER = 0 ;
  184. END # REACH THE LIMIT #
  185.  
  186. FLGBGCLT[0] = TRUE; # GARBAGE COLLECTION IN PROGRESS#
  187. OVLNAME = MGBGCLTP;
  188. OVLCALL;
  189. FLGBGCLT[0] = FALSE; # GARBAGE COLLECTION COMPLETED #
  190. TIMER$BUF = MS + TBUF;
  191. END
  192.  
  193. IF TIMER$CET LQ MS
  194. OR CETC[0] # CET ENTRY(S) STATUS CHANGED #
  195. THEN
  196. BEGIN # PROCESS CET CHANGE #
  197. OVLNAME = XCHKCETP;
  198. OVLCALL;
  199. TIMER$CET = MS + TCET;
  200. END
  201. END
  202.  
  203. #
  204.   CHECK IF PIP NEEDS ADDITIONAL PRU BUFFERS
  205. #
  206. IF PITRPA[0]
  207. THEN # PIP NEEDS ADDITIONAL PRU BUFS #
  208. BEGIN
  209. PITRPA[0] = FALSE; # CLEAR REQUEST PRU ACTIVITY FLG#
  210. OVLNAME = XCHKABCP; # NAME OF OVERLAY TO LOAD #
  211. OVLCALL; # LOAD AND EXECUTE OVERLAY #
  212. END
  213.  
  214. #
  215.   RELEASE PIP PROCESSED BUFFERS
  216. #
  217. IF OUTREL
  218. THEN # OUTBOUND BUFFER(S) TO RELEASE #
  219. BEGIN
  220. OUTREL = FALSE;
  221.  
  222. FOR TMPFET=0 STEP NBTFETNO UNTIL NBTMAXID
  223. DO # SCAN THROUGH ALL THE ACTIVE NBT ENTRIES #
  224. BEGIN # TO RELEASE ALL PROCESSED OUTBOUND BUFFERS #
  225. IF NBTIUF[TMPFET]
  226. THEN # NBT ENTRY IN USE #
  227. BEGIN
  228.  
  229. FOR TMP=TMPFET+2 STEP 1 UNTIL TMPFET+4
  230. DO # GO THROUGH ALL OUTBOUND FETS #
  231. BEGIN
  232. IF NBTOUT[TMP] NQ 0
  233. THEN # OUTBOUND BUFFER PROCEESED BY PIP #
  234. BEGIN # CHECK IF BUFFER(S) CAN BE RELEASED #
  235. P<DRHDRWD> = NBTFIRST[TMP]; # FIRST BUFFER IN CHAIN #
  236.  
  237. FINISH = FALSE;
  238. FOR TEMP=TEMP WHILE NOT FINISH
  239. DO # RELEASE BUFS IN OUTBOUND CHAIN#
  240. BEGIN
  241. #
  242.   CHECK AND PROCESS SPECIAL BLOCK ID FIRST
  243. #
  244. IF BLKID[0] EQ PRUSPECID
  245. THEN
  246. BEGIN # SPECIAL OUTBOUND BLK FOR PCNB #
  247. P<NHEADER> = P<DRHDRWD> + BLKHSIZE ;
  248. P<PCNB> = NHWORD[0] ; #CAN NOW CONVERT NCNB TO PCNB#
  249. CNE[0] = PCNBCN[0] ;
  250. # SET BATCH STREAM STATE AND BLOCK HANDLER STATE #
  251. P<NCNT> = PCNBCTAD[0] ;
  252. NCNTBSS[CN2+NCNTHSIZE] = BSSI ;
  253. IF PCNBDT[0] EQ DT$CR
  254. OR ( PCNBXFR[0] # FILE TRANSFER CONN #
  255. AND PCNBREC[0] ) # RECEIVING #
  256. THEN
  257. BEGIN
  258. NCNTBHS[CN2+NCNTHSIZE] = BHSPRUI ; # INPUT PRU #
  259. END
  260. ELSE
  261. BEGIN
  262. NCNTBHS[CN2+NCNTHSIZE] = BHSPRUO ; # PRU OUTPUT #
  263. END
  264. PCNBID[0] = PCNBIDVALUE ; # ID NOW IS PCNB #
  265. BLKID[0] = POBIDVALUE; # CONVERT TO REGULAR ID #
  266. END
  267.  
  268. TEMP = NEXTPTR[0]; # NEXT BUFFER IN CHIAN #
  269. IF P<DRHDRWD> EQ NBTOUT[TMP]
  270. THEN # NOT LAST BUFFER IN CHAIN #
  271. BEGIN
  272. FINISH = TRUE; # COMPLETED RELEASING BUFFERS #
  273. END
  274. ELSE # THIS BUFFER CAN BE RELEASED #
  275. BEGIN
  276. #
  277.   CHECK AND PROCESS BACKS BLOCKS FROM BACK TABLE
  278. #
  279. IF (P<DRHDRWD> LS BACKBLWA) AND
  280. (P<DRHDRWD> GQ BACKBFWA)
  281. THEN # THIS IS BACK ENTRY IN BACK BUF #
  282. BEGIN
  283. P<DRHDRWD> = P<DRHDRWD> - 1; # HEAD WRD OF ENTRY#
  284. CMWORD[0] = BACKFFREE; # PTR TO NEXT FREE ENTRY #
  285. BACKFFREE = P<DRHDRWD>; # NEW FIRST FREE ENTRY #
  286. END
  287. ELSE # THIS IS REGULAR DYNAMIC BUFFER #
  288. BEGIN
  289. MRELS(P<DRHDRWD>); # RELEASE BUFFER #
  290. END
  291. P<DRHDRWD> = TEMP; # RESET POINTER #
  292. END
  293. END
  294. NBTFIRST[TMP] = P<DRHDRWD>; # NEW FIRST BUF IN CHAIN #
  295. OUTREL = OUTREL OR (NBTIN[TMP] NQ P<DRHDRWD>);
  296. # FLAG MORE OUTSTANDING OUTBOUND BUFFERS #
  297. END
  298. END
  299. END
  300. END
  301. END
  302.  
  303. FOR NBTIDX = 0 STEP NBTFETNO WHILE NBTIDX LQ NBTMAXID
  304. DO
  305. BEGIN
  306. IF NBTREQ[NBTIDX + 5] # REQUEST FLAG SET #
  307. THEN
  308. BEGIN
  309. IF NOT NBTACT[NBTIDX + 5] # ACTIVE FLAG NOT SET #
  310. THEN
  311. BEGIN
  312. IF NOT NBTREL[NBTIDX + 5] # RELEASE FLAG NOT SET #
  313. THEN
  314. BEGIN
  315. MGETS(TRASIZE,NBTADR,0); # ALLOCATES BUFFER #
  316. P<DRHDRWD> = NBTADR;
  317. BLKID[0] = PBTID;
  318. NBTFIRST[NBTIDX + 5] = NBTADR + BLKHSIZE;
  319. NBTWD4[NBTIDX + 5] = NBTADR + TRASIZE;
  320. NBTACT[NBTIDX + 5] = TRUE;
  321. END
  322. END
  323. END
  324. END
  325.  
  326. IF HRL NQ 0
  327. THEN # NAM NOT AT MAX FIELD LENGTH #
  328. BEGIN
  329. #
  330.   PROCESS UPLINE NETWORK MESSAGES
  331. #
  332.  
  333. CONTROL IFEQ STAT,1;
  334. OTIME(STIME); # GET SYSTEM TIME BEFORE NEIB CALL #
  335. CONTROL FI;
  336.  
  337. NEIB; # PROCESS INCOMING NETWORK TRAFFIC #
  338.  
  339. CONTROL IFEQ STAT,1;
  340. OTIME(ETIME); # GET SYSTEM TIME AFTER NEIB CALL #
  341. STTEMP = EMILS[0] - SMILS[0];
  342. IF STTEMP GR ST$LNI
  343. THEN # FOUND LARGER TIME INTERVAL #
  344. BEGIN
  345. ST$LNI = STTEMP; # LARGEST TIME INTERVAL #
  346. END
  347. IF STTEMP GR 200
  348. THEN # SPENT MORE THAN .2 SECONDS IN INTERVAL #
  349. BEGIN
  350. ST$MNI = ST$MNI + 1; # INCREMENT NO OF TIMES GREATER .2 SEC#
  351. END
  352. ST$TNI = ST$TNI + STTEMP; # INCREMENT TOTAL TIME IN NEIB #
  353. CONTROL FI;
  354.  
  355. #
  356.   PROCESS WORKLIST FROM APPLICATION
  357. #
  358. HHIR; # PROCESS INCOMING APPLICATION WORKLISTS #
  359. #
  360.   CHECK IF ANY MESSAGES HAVE BEEN ADDED TO THE INTRAHOST QUEUE
  361. #
  362. P<LLCB> = TNTLLAD[0];
  363. IF P<LLCB> NQ 0
  364. THEN # HOST TO HOST LOGICAL LINK EXISTS #
  365. BEGIN
  366. P<DRHDRWD> = 0;
  367. BUF = LLCBSHFP[0]; # FIRST MSG IN LIST #
  368. FOR I=I WHILE BUF NQ 0
  369. DO
  370. BEGIN
  371. LLCBSHFP[0] = NEXTPTR[BUF]; # UPDATE FORWARD POINTER #
  372. NBTIDX = NBTMAXID + 1; # NBT INDEX FOR INTRAHOST MSG #
  373. NEIB1(BUF,0); # PROCESS INTRAHOST MESSAGE #
  374. BUF = LLCBSHFP[0];
  375. END
  376. END
  377.  
  378. END
  379. #
  380.   PROCESS NAM BUFFER REGULATION LEVEL CHANGES
  381. #
  382.  
  383. CONTROL IFEQ STAT,1;
  384. OTIME(STIME); # GET SYSTEM TIME AT THIS POINT IN PROC #
  385. CONTROL FI;
  386.  
  387. IF HRL NQ LASTHRL
  388. THEN
  389. BEGIN
  390. OVLNAME = XNBRLCP;
  391. OVLCALL;
  392. END
  393.  
  394. #
  395.   CHECK NAM K DISPLAY ACTIVITY
  396. #
  397. IF NOT KDVW[0]
  398. THEN # K DISPLAY NOT BEING VIEWED #
  399. BEGIN
  400. IF KDLCOMP[0] OR KDRCOMP[0]
  401. THEN # K DISPLAY ASSIGNED TO NAM #
  402. BEGIN
  403. OMSG(KZEROS,2); # CLEAR FLASHING REQUEST ON B-DISPLAY #
  404. KDALERT[0] = FALSE; # CLEAR OUTSTANDING ALERT FLAG #
  405. KDVW[0] = TRUE; # K DISPLAY NOW BEING VIEWED #
  406. KDTIMER[0] = RTSECS[0] + TKDVW; # SET VIEW TIMEOUT TIMER #
  407. KDLCOMP[0] = FALSE;
  408. KDRCOMP[0] = FALSE;
  409. END
  410. END
  411.  
  412. ELSE # K DISPLAY IS BEING VIEWED #
  413. BEGIN
  414.  
  415. IF KWLPTR[0] NQ 0
  416. THEN # KWL TO ADD/DELETE ST ENTRY(S) #
  417. BEGIN
  418. OVLNAME = KCHANGEP;
  419. OVLCALL;
  420. END
  421.  
  422. IF KBUF1[0] NQ 0
  423. THEN # K DISPLAY INPUT AVAILABLE #
  424. BEGIN
  425. OVLNAME = KPTYPINP; # PROCESS K DISPLAY TYPE INS #
  426. OVLCALL;
  427. END
  428.  
  429. IF KSHOW[0] THEN
  430. BEGIN
  431. IF KDETAIL[0] THEN
  432. OVLNAME=KRIGHTDP;
  433. ELSE
  434. OVLNAME=KRIGHTP;
  435. OVLCALL;
  436. END
  437.  
  438. IF KDIS$STAT NQ 0
  439. THEN # STATUS DISPLAY FORMATTING REQUIRED #
  440. BEGIN
  441. OVLNAME = KDSTINP; # FORMAT STATUS DISPLAY #
  442. OVLCALL;
  443. END
  444. END
  445. #
  446.   RELEASE NETWORK TRACE FILE ZZZZZDN IF MC PARAMETER IS
  447.   SPECIFIED IN NIP-S CONTROL STATEMENT AND MC NUMBER OF
  448.   TRACE MESSAGES HAS REACHED
  449. #
  450. CONTROL IFEQ ZZDN,1;
  451. IF MC NQ 0
  452. AND MSGCNT GQ MC
  453. THEN
  454. NNETREL(ZNRF1,0);
  455. CONTROL FI;
  456.  
  457. CONTROL IFEQ STAT,1; # STATISTICS ON #
  458. ST$LOOP = ST$LOOP + 1; # INCR NO OF TIMES THROUGH #
  459.  
  460. OTIME(ETIME); # GET SYSTEM TIME AT THIS POINT IN PROC #
  461. STTEMP = EMILS[0] - SMILS[0];
  462. IF STTEMP GR ST$LT2
  463. THEN # FOUND LARGER TIME INTERVAL #
  464. BEGIN
  465. ST$LT2 = STTEMP; # NEW LARGEST TIME INTERVAL #
  466. END
  467. IF STTEMP GR 200
  468. THEN # SPENT MORE THAN .2 SECONDS IN INTERVAL #
  469. BEGIN
  470. ST$MT2 = ST$MT2 + 1; # INCREMENT NO OF TIMES GREATER .2 SEC #
  471. END
  472. ST$TT2 = ST$TT2 + STTEMP; # TOTAL TIME SPEND IN THIS INTERVAL #
  473. SMILS[0] = EMILS[0]; # BEGINNING TIME FOR NEXT PART OF PROC #
  474. CONTROL FI; # XEXEC LOOP #
  475.  
  476. IF MSG$AN EQ 0
  477. THEN # NO DATA QUEUED FOR APP TO PROCESS #
  478. BEGIN
  479. #
  480.   GIVE UP CPU UNTIL SOMETHING TO DO
  481. #
  482. RECALL = TRUE; # INITIALIZE RECALL FLAG #
  483. FOR MS=MS WHILE RECALL
  484. DO # LOOP UNTIL SOMETHING TO DO #
  485. BEGIN
  486. IF SSCLK[0]
  487. THEN # SSC WORKLIST HAS BEEN RECEIVED #
  488. BEGIN
  489. RECALL = FALSE; # DO NOT WANT TO GO INTO RECALL #
  490. END
  491. ELSE # NO SSC WORKLIST HAS BEEN RECEIVED #
  492. BEGIN
  493. IF PITWORK[0]
  494. THEN # PIP HAS WORK FOR NIP TO DO #
  495. BEGIN
  496. PITWORK[0] = FALSE; # CLEAR WORK-FOR-NIP FLAG #
  497. RECALL = FALSE; # DO NOT WANT TO GO INTO RECALL #
  498. END
  499. ELSE # GO INTO RECALL FOR SMALLEST TIMEOUT #
  500. BEGIN
  501. OTIME(THETIME); # CALL RTIME NOS MACRO #
  502. NEWMS = MSECS[0]; # CURRENT MILLISECOND TIME #
  503. IF (NEWMS - TIMER$ACBS) GQ 0
  504. THEN # SMALLEST TIMEOUT INVERVAL HAS ELAPSED #
  505. BEGIN
  506. RECALL = FALSE; # TERMINATE WHILE LOOP #
  507. END
  508. ELSE # OKAY TO GO INTO RECALL #
  509. BEGIN
  510. XRECALL(0); # CALL RECALL NOS MACRO #
  511. END
  512. END
  513. END
  514. END
  515. END
  516.  
  517. CONTROL IFEQ STAT,1;
  518. OTIME(ETIME); # GET SYSTEM TIME AT END OF PROC #
  519. STTEMP = EMILS[0] - SMILS[0];
  520. IF STTEMP GR ST$LT3
  521. THEN # FOUND LARGER TIME INTERVAL #
  522. BEGIN
  523. ST$LT3 = STTEMP; # NEW LARGEST TIME INTERVAL #
  524. END
  525. IF STTEMP GR 500
  526. THEN # SPENT MORE THAN .5 SECONDS IN INTERVAL #
  527. BEGIN
  528. ST$MT3 = ST$MT3 + 1; # INCREMENT NO OF TIMES GREATER .5 SEC #
  529. END
  530. ST$TT3 = ST$TT3 + STTEMP; # INCREMENT TOTAL TIME IN THIS PART #
  531. CONTROL FI;
  532. RETURN;
  533. END
  534. TERM
cdc/nos2.source/nam5871/xexec.txt ยท Last modified: 2023/08/05 17:23 by Site Administrator