Advertisement
Guest User

Untitled

a guest
Mar 17th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. !
  2. !  NTPREPed on: SUN, OCT  3, 2010,  2:27 PM
  3. !
  4. !RANGE ON
  5.       SUBROUTINE FDTAB02(BEAT,COMMAREA,UNITS,FILEPTRS,RS)
  6. !DEC$ INTEGER:2
  7. !DEC$ REAL:4
  8.       IMPLICIT INTEGER (A-Z)
  9. !DEC$ PACK:2
  10. !DEC$ ATTRIBUTES C,ALIAS : '_FDTAB02' :: FDTAB02
  11. !DEC$ ATTRIBUTES DLLEXPORT :: FDTAB02
  12. !DEC$ ATTRIBUTES REFERENCE :: BEAT
  13. !DEC$ ATTRIBUTES REFERENCE :: COMMAREA
  14. !DEC$ ATTRIBUTES REFERENCE :: UNITS
  15. !DEC$ ATTRIBUTES REFERENCE :: FILEPTRS
  16. !DEC$ ATTRIBUTES REFERENCE :: RS
  17. !
  18. !  'FDTAB02' A SUBROUTINE TO FIND COMMAND AREA AND UNITS
  19. !            BASED ON A GIVEN BEAT.
  20. !
  21. !************************************************************
  22. !  COPYRIGHT 1996 BY PUBLIC SAFETY SYSTEMS, INC.
  23. !************************************************************
  24. !  05/12/86  JOHN D. GOODSPEED / PSSI
  25. !  05/13/86  11:30
  26. !  05/05/92  MAJOR MODS FOR V8.0 - BOTH TABLE01 & TABLE02 ACCESS
  27. !            IS VIA DMI32/DMO32.
  28. !            MAX RDS PER CA INCREASED TO 400.
  29. !            INDICES FOR TABLE01 & TABLE02 ARE STILL COMPRISED
  30. !            OF 16 BIT WORDS ACCEESED AS A CHUNK OF 8 32-BIT WORDS
  31. !  03/25/93  ELK - INCREASE NUMBER OF CA'S -> 32.
  32. !  03/30/93  ELK - FIX PROB WHEN BEAT NOT FOUND AND 48 BEATS LOADED.
  33. !  05/25/93  EWT - SEARCH FOR ALL BEATS ASSOCIATED WITH SUPPLIED UNIT
  34. !  07/22/96  RAR - REMOVED PHASE 1 INTRINSICS
  35. !  09/09/96  RAR - REMOVED CCODE CHECK FROM DMI/DMO ROUTINES
  36. !
  37. !  BEAT      := BEAT  << SEARCH BY BEAT >>
  38. !  COMMAREA  := COMMAND AREA
  39. !  UNITS     := THE UNITS ASSIGNED TO A GIVEN BEAT.  THE FIRST 16
  40. !               UNITS ARE PATROL (DEFINED AS TYPE 'PATx') UNITS, THE
  41. !               SECOND 16 UNITS ARE NON-PATROL (CATS & DOGS).
  42. !               EACH UNIT-ID IS 6 BYTES LONG FOLLOWED BY A ONE BYTE
  43. !               INDICATOR FOR PRIMARY ('P') OR SECONDARY ('S').
  44. !  RS        := ON CALL, INDICATES THE TYPE OF SEARCH
  45. !               0 = SEARCH BY BEAT
  46. !               1 = SEARCH BY UNIT
  47. !               2 = SEQUENTIAL WALKTHRU BY CA+BEAT
  48. !               3 = RETURN ALL BEATS ASSOCIATED WITH UNIT
  49. !  RS        := ON RETURN, ERROR CONDITIONS:
  50. !               0 = BEAT FOUND, COMMAND AREA AND UNITS RETURNED
  51. !               1 = BEAT OR UNIT NOT FOUND
  52. !               6 = 'DMOVIN' FAILURE, BOUNDS CHECK
  53. !               7 = 'DMOVIN' FAILURE, INDEX/NUMBER INVALID
  54. !               60= -60 == THE 'TABLE', 'DSID' AND 'SEGRIN' AT FAULT
  55. !
  56. !     IMPLICIT INTEGER (A-Z)
  57.       INTEGER*2 DUMMY(8)
  58.       INCLUDE 'DMI32.FD'
  59.       INCLUDE 'LOCKRIN.FD'
  60.       INCLUDE 'UNLOCKRIN.FD'
  61.       REAL*8 FILEPTRS(82,2), DSINDEX
  62.       INTEGER*4 UNCONDLOCK, DRS, SEGRIN
  63.       INTEGER*2 BEATCAUL(5520), CASTATL(64)
  64.       INTEGER*2 CASTATI(64)
  65.       INTEGER*4 BEATCAUL32(2760), CASTATL32(32)
  66.       INTEGER*4 NWDS, CURRLOC, CASIZE, CBASADR
  67.       CHARACTER BEAT*4, UNITS*224, CAS(32)*2, CALIST*64, UNITX*6
  68.       CHARACTER COMMAREA*2, SEARCHARG*4, BEATCAUS(49)*230
  69.       EQUIVALENCE (CAS(1), CALIST)
  70.       EQUIVALENCE (BEATCAUL(1), BEATCAUS(1))
  71.       EQUIVALENCE (CASTATL(1), CASTATI(1)), (CASTATL(1), CASTATL32(1))
  72.       EQUIVALENCE (BEATCAUL(1), BEATCAUL32(1))
  73. !
  74. !     MAXBEATCA     = 48
  75. !     ITEMLENGTH    = 115
  76. !     CASIZE        = (MAXBEATCA * ITEMLENGTH) / 2
  77. !  START OF NTPREP VARIABLE INIT
  78.       CHARACTER NTPNULLS*4000
  79.       DO NTPI = 1,4000,1
  80.         NTPNULLS(NTPI:NTPI) = CHAR(0)
  81.       END DO
  82.       BEATCAUS          = NTPNULLS
  83.       CAS               = NTPNULLS
  84.       CASIZE            = 0
  85.       CASTATI           = 0
  86.       CBASADR           = 0
  87.       COUNT             = 0
  88.       COUNTER           = 0
  89.       CURRLOC           = 0
  90.       DSINDEX           = 0
  91.       I                 = 0
  92.       ICA               = 0
  93.       K                 = 0
  94.       KK                = 0
  95.       MAXCA             = 0
  96.       NWDS              = 0
  97.       SEARCHARG         = NTPNULLS
  98.       SEGRIN            = 0
  99.       TABLE02           = 0
  100.       UNCONDLOCK        = 0
  101.       UNITX             = NTPNULLS
  102. !  END OF NTPREP VARIABLE INIT
  103.       CASIZE        = 2760
  104.       MAXCA         = 32
  105.       TABLE02       = 2
  106.       SEGRIN        = TABLE02
  107.       CALIST(1:32)  = "01020304050607080910111213141516"
  108.       CALIST(33:64) = "17181920212223242526272829303132"
  109. !
  110. !  LOCK THE SEGMENT ASSOCIATED RIN, WE DON'T WANT ANY MODS TO
  111. !  THE DSEG WHILE WE ARE READING IT ONTO OUR STACK.
  112. !
  113. !     GOTO 1225
  114.       UNCONDLOCK = 1
  115.       CALL LOCKRIN(SEGRIN,UNCONDLOCK,FILEPTRS,DRS)
  116.       IF (DRS) 1200,1225,1225
  117.  1200 DUMMY = 0
  118.       RS = 60 + TABLE02
  119.       GOTO 9990
  120.  1225 DSINDEX = FILEPTRS(TABLE02,1)
  121. !
  122. !  GET THE STATUS WORDS FOR THIS DATA SEGMENT, THEY CONTAIN THE
  123. !  NUMBER OF LOGICAL RECORDS CONTAINED IN EACH COMMAND AREA.
  124. !
  125.  1300 CURRLOC = 1
  126.       NWDS  = 32
  127.       CALL DMI32(DSINDEX,CURRLOC,NWDS,CASTATL32,DRS)
  128.       IF (DRS) 9950,1400,9960
  129.  1400 DO 1700 ICA=1,MAXCA,1
  130.         IF (RS .NE. 2) GOTO 1425
  131.         IF (CAS(ICA) .NE. COMMAREA) GOTO 1700
  132.  1425   PT = (ICA - 1) * 2 + 1
  133.         COUNT  = CASTATI(PT)
  134.         CBASADR = ((ICA - 1) * CASIZE) + 33
  135.         CALL DMI32(DSINDEX,CBASADR,CASIZE,BEATCAUL32,DRS)
  136.         IF (DRS) 9950,1460,9960
  137.  1460   IF (RS .EQ. 1) GOTO 1650
  138.         IF (RS .EQ. 2) GOTO 1675
  139.         IF (RS .EQ. 3) GOTO 4000
  140. !
  141. !  FIND THE BEAT, RETURN THE ASSOCIATED COMMAND AREA AND UNITS.
  142. !
  143.         SEARCHARG(1:4) = BEAT
  144. !       DISPLAY "FIND THE BEAT; SEARCHARG, COUNT :=",SEARCHARG,COUNT
  145.         DO 1625 I=1,COUNT,1
  146.           IF (BEATCAUS(I)(1:4) .EQ. SEARCHARG) GOTO 1750
  147.  1625   CONTINUE
  148. !
  149. !  BEAT NOT FOUND IN THIS CA, TRY NEXT CA.
  150. !
  151.         GOTO 1700
  152. !
  153. !  PERFORM A SEARCH BY PRIMARY UNIT, RETURN BACKUP UNITS.
  154. !  CHECK BOTH PATROL AND NON-PATROL.
  155. !
  156.  1650   DO 1665 I=1,COUNT,1
  157.           IF (BEATCAUS(I)(7:12) .EQ. UNITS(1:6)) GOTO 1750
  158.           IF (BEATCAUS(I)(119:125) .EQ. UNITS(1:6)) GOTO 1750
  159.  1665   CONTINUE
  160.         GOTO 1700
  161. !
  162. !  PERFORM A SEQUENTIAL WALKTHRU OF THE GIVEN COMMAND AREA.
  163. !  RETURN EACH BEAT AND ASSOCIATED UNITS (BOTH PATROL AND NON PATROL)
  164. !  IN BEAT ALPHABETICAL ORDER.  ON FIRST CALL THE COMMAND AREA IS
  165. !  SET AS DESIRED WITH THE BEAT SET TO BLANKS, SUBSEQUENT CALLS ARE
  166. !  MADE WITH THE BEAT RETURNED IN THE PREVIOUS CALL.
  167. !
  168.  1675 DO 1680 I=1,COUNT,1
  169.         IF (RS .EQ. 2) THEN
  170. !C        PRINT *,"BEATCAUS(I)(1:4),BEAT: ",BEATCAUS(I)(1:4)," ",BEAT
  171.         ENDIF
  172.         IF (BEATCAUS(I)(1:4) .GT. BEAT) GOTO 1750
  173.  1680 CONTINUE
  174.       RS = 1
  175.       GOTO 9980
  176. !
  177. !  PRIMARY UNIT NOT FOUND IN THIS CA, TRY NEXT CA.
  178. !
  179.  1700 CONTINUE
  180.       RS = 1
  181.       BEATCAUS(I) = " "
  182.       GOTO 1855
  183.  1750 RS = 0
  184.  1855 COMMAREA = BEATCAUS(I)(5:6)
  185.       BEAT     = BEATCAUS(I)(1:4)
  186.       UNITS(1:224) = BEATCAUS(I)(7:230)
  187. !C    PRINT *,"***FDTAB02: UNITS=",UNITS(1:224)
  188.       GOTO 9980
  189. !
  190. !  FIND ALL BEATS ASSOCIATED WITH UNIT CONTAINED IN FIRST
  191. !  SIX CHARACTERS OF 'UNITS' ARRAY. RETURN BEATS IN 'UNITS' ARRAY.
  192. !  WE WILL RETURN UP TO 42 BEATS PER UNIT.
  193. !
  194.  4000 UNITX = UNITS(1:6)
  195.       UNITS(1:224) = " "
  196. !C    PRINT *, "FDTAB02: SEARCHING FOR ", UNITX, " BEATS"
  197.       COUNTER = 1
  198.       DO 4180 ICA=1,MAXCA,1
  199.         PT = (ICA - 1) * 2 + 1
  200.         COUNT  = CASTATI(PT)
  201.         CBASADR = ((ICA - 1) * CASIZE) + 33
  202.         CALL DMI32(DSINDEX,CBASADR,CASIZE,BEATCAUL32,DRS)
  203.         IF (DRS) 9950,4060,9960
  204. !
  205. !  FOR EACH BEAT, FIND OCCURANCE OF 'UNITX'
  206. !
  207.  4060   DO 4125 I=1,COUNT,1
  208.           KK = 7
  209.           DO 4080 K=7,112,7
  210.             IF (BEATCAUS(I)(K:K+5) .EQ. UNITX) THEN
  211.               UNITS(COUNTER:COUNTER+3) = BEATCAUS(I)(1:4)
  212.               COUNTER = COUNTER + 5
  213.               GOTO 4120
  214.             ENDIF
  215.  4080     CONTINUE
  216.           KK = 119
  217.           DO 4100 K=119,224,7
  218.             IF (BEATCAUS(I)(K:K+5) .EQ. UNITX) THEN
  219.               UNITS(COUNTER:COUNTER+3) = BEATCAUS(I)(1:4)
  220.               COUNTER = COUNTER + 5
  221.               GOTO 4120
  222.             ENDIF
  223.  4100     CONTINUE
  224.  4120     IF (COUNTER .GT. 210) GOTO 4190
  225.  4125   CONTINUE
  226.  4180 CONTINUE
  227.  4190 RS = 0
  228.       IF (COUNTER .EQ. 1) RS = 1
  229.       GOTO 9980
  230.  9950 DUMMY = 0
  231. !     DISPLAY "FDTAB02 - 'DMOVIN' ILLEGAL INDEX/NUMBER"
  232.       RS = 7
  233.       GOTO 9980
  234.  9960 DUMMY = 0
  235. !     DISPLAY "FDTAB02 - 'DMOVIN' BOUNDS CHECK."
  236.       RS = 6
  237.       GOTO 9980
  238. !
  239. !  UNLOCK TABLE 2 RIN.
  240. !
  241.  9980 DUMMY = 0
  242. !     GOTO 9990
  243.       CALL UNLOCKRIN(SEGRIN,FILEPTRS,DRS)
  244.       IF (DRS) 9984,9990,9986
  245.  9984 DUMMY = 0
  246. !     DISPLAY "FDTAB02 - 'UNLOCKRIN' SEGRIN NOT ALLOCATED",SEGRIN
  247.       RS = 60 + SEGRIN
  248.       GOTO 9990
  249.  9986 DUMMY = 0
  250. !     DISPLAY "FDTAB02 - 'UNLOCKRIN' SEGRIN NOT LOCKED",SEGRIN
  251.       RS = 60 + SEGRIN
  252.       GOTO 9990
  253.  9990 RETURN
  254.       END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement