subroutine get_hdr(iarray,oarray) C Subroutine unpacks RSC-11-6 header; returns results as a 42 element array C This subroutine calls subroutine mvbits, which may not be available on C all systems but which transfers bits from an input variable to an output C variable as follows: C C call mvbits(a,i,j,b,k) C where C a is a 32-bit input, assumed for convenience to be integer C b is a 32-bit output, also assumed integer C i is the least significant bit in a to be copied C (msb is 31, lsb is 0) C j is the number of bits to be moved (i+j <= 32) C k is the least significant bit in b to be overwritten C C For positive a and initial b=0 the following are equivalent: C call mvbits(a,i,j,b,k) and b=(mod(a,2**(i+j))/(2**i))*2**k C Output array of header values contains C NB: Original position is in terms of 16-bit words where bit 01 is MSB and C bit 16 is LSB. Internal position is in terms of 32-bit words where C bit 00 is LSB and bit 31 is MSB. C C Index Original Internal C in Position Position Description C oarray (RSC-11-6) in iarray C Word Bits Word Bits C ------ ---- ----- ---- ----- ----------------------------- C 01 01 01 01 31 Time-tag validity indicator C 02 01 02 01 30 Record continuity indicator C 03 01 03 01 29 Copy source error indicator C 04 01 04 01 28 Sample count validity indicator C 05 01 05-08 01 24-27 ODA tape type indicator C 06 01 09-16 01 16-23 Tape Number C 07 02 01-16 01 00-15 Record number C 08 03 01-16 02 16-31 Record length C 09 04 01-08 02 08-15 Spacecraft number C 10 04 09-16 02 00-07 Source station C 11 05 01-16 03 16-31 DRA tape number C 12 06 01-04 03 12-15 Data time tag - hundreds of days C 13 06 05-08 03 08-11 tens of days C 14 06 09-12 03 04-07 units of days C 15 06 13-16 03 00-03 tens of hours C 16 07 01-04 04 28-31 units of hours C 17 07 05-08 04 24-27 tens of minutes C 18 07 09-12 04 20-23 units of minutes C 19 07 13-16 04 16-19 tens of seconds C 20 08 01-04 04 12-15 units of seconds C 21 08 05-16 04 00-11 microseconds (part 1) C 09 01-08 05 24-31 (part 2) C 22 09 09-11 05 21-23 DRA input selection C 23 09 12 05 20 DRA 1-pps status C 24 09 13 05 19 DRA clock sync status C 25 09 14 05 18 Real-time recording monitor C 26 09 15 05 17 DRA microsecond time status C 27 09 16 05 16 DRA time-track sync C 28 10 12-16 05 00-04 Reduction rate C 29 11 12-16 06 16-20 Channel sampling rate C 30 12 01 06 15 Reduction rate source C 31 12 02-04 06 12-14 Reduction rate decimation ratio C 32 12 05 06 11 1 pps track selection C 33 12 06 06 10 Time track selection C 34 12 07-08 06 08-09 Reduction channel selection C 35 12 09-16 06 00-07 Input block size register (part 1) C 13 01-16 07 16-31 (part 2) C 36 23 01-09 12 23-31 Reduction day of year C 37 23 16 12 16 Reduction seconds of day (part 1) C 24 01-16 12 00-15 (part 2) C 38 26 09 13 07 Input buffer overflow flag C 39 26 10 13 06 1 pps out-of-sync flag C 40 26 11 13 05 Bit slip flag C 41 26 14-16 13 00-02 Decimation counter value C 42 27 01-16 14 16-31 Sample count (part 1) C 28 01-16 14 00-15 (part 2) integer*4 iarray(1264) ! input data record integer*4 oarray(42) ! unpacked header data call mvbits(iarray(1),31,01,oarray(01),0) ! Word 1 call mvbits(iarray(1),30,01,oarray(02),0) call mvbits(iarray(1),29,01,oarray(03),0) call mvbits(iarray(1),28,01,oarray(04),0) call mvbits(iarray(1),24,04,oarray(05),0) call mvbits(iarray(1),16,08,oarray(06),0) call mvbits(iarray(1),00,16,oarray(07),0) ! Word 2 call mvbits(iarray(2),16,16,oarray(08),0) ! Word 3 call mvbits(iarray(2),08,08,oarray(09),0) ! Word 4 call mvbits(iarray(2),00,08,oarray(10),0) call mvbits(iarray(3),16,16,oarray(11),0) ! Word 5 call mvbits(iarray(3),12,04,oarray(12),0) ! Word 6 call mvbits(iarray(3),08,04,oarray(13),0) call mvbits(iarray(3),04,04,oarray(14),0) call mvbits(iarray(3),00,04,oarray(15),0) call mvbits(iarray(4),28,04,oarray(16),0) ! Word 7 call mvbits(iarray(4),24,04,oarray(17),0) call mvbits(iarray(4),20,04,oarray(18),0) call mvbits(iarray(4),16,04,oarray(19),0) call mvbits(iarray(4),12,04,oarray(20),0) ! Word 8 call mvbits(iarray(4),00,12,oarray(21),8) call mvbits(iarray(5),24,08,oarray(21),0) ! Word 9 call mvbits(iarray(5),21,03,oarray(22),0) call mvbits(iarray(5),20,01,oarray(23),0) call mvbits(iarray(5),19,01,oarray(24),0) call mvbits(iarray(5),18,01,oarray(25),0) call mvbits(iarray(5),17,01,oarray(26),0) call mvbits(iarray(5),16,01,oarray(27),0) call mvbits(iarray(5),00,05,oarray(28),0) ! Word 10 call mvbits(iarray(6),16,05,oarray(29),0) ! Word 11 call mvbits(iarray(6),15,01,oarray(30),0) ! Word 12 call mvbits(iarray(6),12,03,oarray(31),0) call mvbits(iarray(6),11,01,oarray(32),0) call mvbits(iarray(6),10,01,oarray(33),0) call mvbits(iarray(6),08,02,oarray(34),0) call mvbits(iarray(6),00,08,oarray(36),24) call mvbits(iarray(7),16,16,oarray(36),8) ! Word 13 oarray(35) = rshift(oarray(35),8) oarray(36) =0 call mvbits(iarray(12),23,09,oarray(36),0) ! Word 23 call mvbits(iarray(12),16,01,oarray(37),16) call mvbits(iarray(12),00,16,oarray(37),0) ! Word 24 call mvbits(iarray(13),07,01,oarray(38),0) ! Word 26 call mvbits(iarray(13),06,01,oarray(39),0) call mvbits(iarray(13),05,01,oarray(40),0) call mvbits(iarray(13),00,03,oarray(41),0) oarray(42) = iarray(14) ! Words 27-28 return end