C PROGRAM OCT.FT C ----------------- C C C SUBROUTINE OCT(KOCT,IDEC,IOPR) C C C C C PETER LEMKIN C NATIONAL INSTITUTE OF HEALTH C BETHESDA, MARYLAND. 20014 C C C MARCH 4, 1975 C C C C C PURPOSE C ------- C OCT.FT CONVERTS DOUBLE PRECISION (MAGNITUDE) C INTEGER TO AND FROM 8 DIGIT OCTAL NUMBERS. KOCT IS C AN EXTERNALLY DIMENSION ARRAY KOCT(8) AND IDEC IS AN C EXTERNALLY DIMENSION ARRAY IDEC(2). IOPR DETERMINES THE C DIRECTION OF THE CONVERSION. THERE ARE NO ERROR C CONDITIONS. C ARGUMENTS C ---------- C 1. KOCT - ARRAY KOCT(8) OF 8 OCTAL DIGITS (PRINT WITH 8I1) C 2. IDEC - ARRAY IDEC(2) OF UNSIGNED DECIMAL DIGITS C 3. IOPR - CONVERSION DIRECTION WORD C 0 OR -1 OCTAL TO DECIMAL C +1 DECIMAL TO OCTAL C C C ******* PDP8E OPERATOR DEFINITIONS**** S OPDEF TADI 1400 /INDIRECT TAD S OPDEF DCAI 3400 /INDIRECT DCA C C C [1] TEST CONVERSION DIRECTION IF >0 THEN DEC TO OCT C ELSE OCT TO DEC. IF(IOPR)30,30,20 C C C C [2] CONVERT IDEC[1:2] TO KOCT[1:8]. 20 DO 200 M=1,2 J=IDEC S INC \IDEC# /INCREMENT DUMMY POINTER C C C [2.1] BREAK THE WORD INTO 4 I1 WORDS. C COMPUTE THE INDEX INTO KOCT. TEST IF [1:4] OR C [5:8] AND ADD OFFSETS TO COMPUTE THE INDEX BACKWARDS C FROM L. DO 200 L=1,4 S CLA CMA S TAD \M /1=[1:4], 2=[5:8] S SZA CLA S TAD (4 /[5:8] S TAD (4 /[1:4] /TAKES CARE OF 0/1 OFFSET PROBLEM. S DCA 7 /TEMP S TAD \L S CIA S TAD 7 /COMPUTE OFFSET [(8*(M-1)+4*(2-M)) - L] S DCA 7 C C C [2.2] GET OCTAL DIGIT S TAD \J /GET DECIMAL WORD S AND (0007 /GET OCTAL DIGIT S DCA OCTEMP /SAVE IT S TAD \J /ROTATE TO NEXT DIGIT (RIGHT) S CLL RAR S RTR S DCA \J C C C [2.3] SET UP THE DUMMY ADDRESS AND SAVE S TAD \KOCT /FIELD S DCA OCT1 S TAD \KOCT# /POINTER S TAD 7 /OFFSET S DCA 7 /COMPLETED POINTER INTO KOCT[1:8] S TAD OCTEMP /GET COMPUTED DIGIT S OCT1, 6201 /CDF OF KOCT. S DCAI 7 S CPAGE 2 S JMS 45 /CDFSKP S CLA 200 CONTINUE RETURN S OCTEMP, 0 /TEMP LOC C C C C C [3] CONVERT KOCT TO IDEC. 30 DO 302 M=1,2 C C C [3.1] CONVERT EACH WORD TO DECIMAL AND THEN SAVE IT. DO 300 L=1,4 S TAD \J S CLL RAL S RTL /ROTATE 3 LEFT (GARBAGE GETS LOST SO DON'T WORRY). S AND (7770 /MAKE SURE ONLY BITS 0:8. S DCA \J C C C [3.2] COMPUTE POINTER INTO KOCT[1:8] S CLA CMA S TAD \M S SZA CLA S TAD (4 /[5:8] S TAD \L S TAD (-1 /SINCE COUNT FROM 0 WANT (L-1) S TAD \KOCT# /POINTER TO KOCT[1:8] S DCA 7 /NOTE: POINTER TO KOCT[1] HAS OFFSET OF 0. S TAD \KOCT S DCA OCT2 /SAVE KOCT FIELD C C C [3.3] GET DIGIT AND PACK IT S OCT2, 6201 /KOCT FIELD S TADI 7 S CPAGE 2 S JMS 45 /CDFSKP S NOP S AND (0007 S TAD \J /COMPOSE THE DECIMAL WORD S DCA \J 300 CONTINUE C C C [3.4] SAVE WHEN FALL THROUGH IDEC=J S INC \IDEC# /INCREMENT DUMMY POINTER 302 CONTINUE RETURN C C END