SUBROUTINE STRMUL(KBASE,INPUT,MUL,NEWB) COMMON/STR/IBLK,IDASH,IPLUS,IZERO,IAYE,ISIGN1,ISIGN2 1 ,JBASE,LINA,LINA2,INPA11,INPA21,NEW(132) BYTE NEWB(1),INPUT(1),MUL(1),INPUT1,MUL1 BYTE IBLK,IDASH,IPLUS,IZERO,IAYE,ISIGN1,ISIGN2 1 ,JBASE,LINA,LINA2,INPA11,INPA21 C.. CHECK DATA OF INPUT + MUL C.. NEWB(1)=0 CALL STRCHK(KBASE,INPUT,MUL,IERR) IF(IERR.GT.0) GO TO 99 C.. C.. CHANGE GLOBAL VARIABLES TO LOCAL C.. IBASE=JBASE LIN=LINA LMUL=LINA2 INPUT1=INPA11 MUL1=INPA21 I1SIGN=ISIGN1 I2SIGN=ISIGN2 IF(LIN.LE.0.OR.LMUL.LE.0) GO TO 99 C.. C.. NEW LENGTH = INPUT+MUL C.. LNEW=LIN+LMUL C.. C.. MULTIPLY C.. CALL DOBYTE(NEWB(1),NEWB(LNEW+1),0) CALL DOWORD(NEW(1),NEW(LNEW+1),0) DO 20 I=1,LMUL DO 21 J=1,LIN L=LIN+LMUL-I-J+2 NEW(L)=NEW(L)+INPUT(LIN-J+1)*MUL(LMUL-I+1) 21 CONTINUE 20 CONTINUE C.. C.. CARRY OVER CARRIES C.. DO 30 I=1,LNEW LNEWS=LNEW-I+1 ICARRY=NEW(LNEWS)/IBASE IF(ICARRY.LE.0) GO TO 31 NEW(LNEW-I)=NEW(LNEW-I)+ICARRY NEW(LNEWS)=NEW(LNEWS)-ICARRY*IBASE 31 NEWB(LNEWS)=NEW(LNEWS)+IZERO IF(NEW(LNEWS).GE.10) NEWB(LNEWS)=NEW(LNEWS)-10+IAYE 30 CONTINUE C.. C.. SEE IF MINUS OR FILLED OUTPUT C.. IF(I1SIGN*I2SIGN.LT.0) NEWB(1)=IDASH C.. C.. GET RID OF LEADING ZEROS C.. CALL STRRD0(NEWB,LNEW) C.. C..RESET INITIIAL DATA C.. CALL STRRES(-1,MUL,LMUL) MUL(1)=MUL1 CALL STRRES(-1,INPUT,LIN) INPUT(1)=INPUT1 RETURN 99 TYPE 199,(INPUT(I),I=1,5),(MUL(I),I=1,5) 199 FORMAT('0*** ERROR IN STRMUL *** INPUT = ',5A1,' MUL=',5A1) NEWB(1)=0 RETURN END