SUBROUTINE STRDIV(KBASE,INP1,IDIV,NEWA,NEWR) COMMON/STR/IBLK,IDASH,IPLUS,IZERO,IAYE,ISIGN1,ISIGN2 1 ,IBASE,LIND,LIND2,INPD11,INPD21,NEW(132),NEWAX(132),NEWRX(132) BYTE NEWA(1),NEWR(1),NEWAX,NEWRX,INP1(1),IDIV(1),INP11,INP21 BYTE IBLK,IDASH,IPLUS,IZERO,IAYE,ISIGN1,ISIGN2 1 ,IBASE,LIND,LIND2,INPD11,INPD21 C.. C.. THIS ROUTINE DIVIDES TWO STRINGS TOGETHER C.. C.. CALL ROUTINE TO CHECK DATA C.. CALL STRCHK(KBASE,INP1,IDIV,IERR) C.. C.. CHANGE GLOBAL VARIABLES TO LOCAL C.. JBASE=IBASE LIN=LIND LIN2=LIND2 INP11=INPD11 INP21=INPD21 I1SIGN=ISIGN1 I2SIGN=ISIGN2 C.. C.. CHECK SIGN C.. NEGAT=I1SIGN*I2SIGN NEWA(1)=0 C.. C.. CHECK FOR ERROR C.. IF(IERR.GT.0) RETURN C.. C.. DIVIDE BY MULTIPLE SUBTRACTS AND ADDS C.. C.. SEE IF ANSWER IS ALL REMAINDER C.. CALL STRADB(JBASE,INP1,LIN,1,IDIV,LIN2,-1,NEWAX,LNEWAX) IF(NEWAX(1).GE.0) GO TO 10 C.. C.. ANSWER IS 0 + REMAINDER C.. NEWA(1)=0 NEWA(2)=0 LIN3=2 LIN4=LIN CALL BYTEDO(NEWR,NEWR(LIN),INP1) GO TO 100 10 CONTINUE C.. C.. START DIVIDING BY MULTIPLE SUBRTACTIONS C.. LIN4=0 LIN3=1 NEWA(LIN3)=0 DO 11 I=1,LIN LIN4=LIN4+1 NEWAX(LIN4)=INP1(I) ISUBS=1 IF(LIN4.LT.LIN2) GO TO 12 NEWAX(LIN4+1)=0 C.. C.. SUBTRACT AND SEE IF NEGATIVE C.. ISUBS=0 21 ISUBS=ISUBS+1 C..SEE IF NO DIVISOR FOUND IF(ISUBS.GT.JBASE) GO TO 97 C** CALL STRADB(JBASE,NEWAX,LIN4,1,IDIV,LIN2,-1,NEWRX,LNEWRX) LNEWAX=LIN4 IF(NEWRX(1).LT.0) GO TO 13 ISUBS=ISUBS+1 C.. SEE IF NO DIVISOR FOUND IF(ISUBS.GT.JBASE) GO TO 97 CALL STRADB(JBASE,NEWRX,LNEWRX,1,IDIV,LIN2,-1,NEWAX,LNEWAX) LIN4=LNEWAX IF(NEWAX(1).LT.0) GO TO 14 GO TO 21 C.. C.. DIVISOR FOUND, ADD TO GET CORRECT REMAINDER C.. 13 CALL STRADB(JBASE,NEWRX,LNEWRX,1,IDIV,LIN2,1,NEWR,LIN4) GO TO 15 14 CALL STRADB(JBASE,NEWAX,LNEWAX,1,IDIV,LIN2,1,NEWR,LIN4) C.. C.. COPY OVER REMAINDER TO NEW DIVIDEN 15 CALL BYTEDO(NEWAX(1),NEWAX(LIN4),NEWR) C.. C.. C.. PLACE PARTIAL ANSWER C.. 12 LIN3=LIN3+1 NEWA(LIN3)=ISUBS-1 11 CONTINUE C.. C.. RESET ALL ANSWERS C.. 100 CALL STRRES(-1,NEWA,LIN3) CALL STRRES(-1,NEWR,LIN4) C.. C.. RESET INPUT C.. CALL STRRES(-1,INP1,LIN) CALL STRRES(-1,IDIV,LIN2) C.. C.. SEE IF NEGAT C.. IF(NEGAT.LT.0) NEWA(1)=IDASH C.. C..RESET INITIIAL DATA C.. IDIV(1)=INP21 INP1(1)=INP11 C.. C.. RESET ANSWER C.. CALL STRRD0(NEWA,LIN3) CALL STRRD0(NEWR,LIN4) RETURN C.. C.. ERRORS C.. 97 TYPE 197,(IDIV(I),I=1,LIN2) 197 FORMAT('0*** ERROR IN STRDIV *** DIVISOR =',20A1) NEWA(1)=0 RETURN END