ASMB NAM SADD,7 24306-60001 REV.2026 791205 * * ******************************************************************* * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS RESERVED. * NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, REPRODUCED, OR * TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT THE PRIOR WRITTEN * CONSENT OF HEWLETT-PACKARD COMPANY. ******************************************************************* * * * SOURCE: 24306-18004 * RELOC: 24306-60001 * * * ****************************************************************** * * * * *FUNCTION - ADDS TWO CHARACTER STRING FIELDS OF *ARBITRARY LENGTH. THE RESULT IS SET IN THE SECOND *FIELD. * *CALLING SEQUENCE * CALL SADD(JSTR,JBEG,JEND,KSTR,KBEG,KEND,IERR) * *WHERE *JSTR NAMES A ONE-DIMENSIONAL STRING INTEGER ARRAY *IN A2 FORMAT CONTAINING THE FIRST CHARACTER STRING *FIELD TO BE ADDED. *JBEG IS AN INTEGER CONSTANT, INTEGER VARIABLE, OR *IFTEGER EXPRESSIGN IFDICATIFG THE FIRST CHARACTER *IN JSTR TO BE ADDED. *JEND IS AN INTEGER CONSTANT, INTEGER VARIABLE, OR *INTEGER EXPRESSION INDICATING THE LAST CHARACTER IN *JSTR TO BE ADDED. *KSTR NAMES A ONE-DIMENSIONAL STRING INTEGER ARRAY *CONTAINING THE DATA TO WHICH THE DATA IN JSTR IS *ADDED.IT WILL CONTAIN THE RESULT IN A2 FORMAT *FOLLOWING ADDITION. *KBEG IS AN INTEGER CONSTANT, INTEGER VARIABLE, OR *INTEGER EXPRESSION GIVING THE POSITION OF THE FIRST *CHARACTER IN KSTR TO BE ADDED. *KEND IS AN INTEGER CONSTANT, INTEGER VARIABLE, OR *INTEGER EXPRESSION GIVING THE POSITION OF TE LAST *CHARACTER IN KSTR TO BE ADDED. *IERR IS AN INTEGER USED AS AN ERROR INDICATOR. *IERR IS SET IF AN INVALID CHARACTER IS ENCOUNTERED *OR IF OVERFLOW OCCURS. * ENT SADD EXT .ENTR,SA2DE,SDEA2,S.GET,SPUT EXT SSIGN,SFILL,SCARY PARAM BSS 7 SADD NOP JSB .ENTR TRANSFER PARAMETERS DEF PARAM CLA STA IERR JSB SA2DE CONVERT JSTR TO D2 DEF *+5 DEF PARAM,I DEF PARAM+1,I DEF PARAM+2,I DEF IERR LDA IERR SZA IFVALID CHAR? JMP ERR1 IF SO JSB SA2DE CONVERT KSTR TO D2 DEF *+5 DEF PARAM+3,I DEF PARAM+4,I DEF PARAM+5,I DEF IERR LDA IERR INVALID CHAR? SZA JMP ERR2 IF SO JSB SSIGN MAKE NEW SIGN OF JSTR POS. DEF *+5 DEF PARAM,I DEF PARAM+2,I DEF ONE JSIGN=1 IF JSTR>=0, DEF JSIGN -1 IF JSTR<0 JSB SSIGN MAKE NEW SIGN OF KSTR POS. DEF *+5 DEF PARAM+3,I DEF PARAM+5,I DEF ONE KSIGN=1 IF KSTR>=0 DEF KSIGN -1 IF KSTR<0 LDA KSIGN ISIGN=KSIGN*JSIGN MPY JSIGN STA ISIGN LDA PARAM+2,I KNOW=KLAST-JLAST+J CMA,INA ADA PARAM+1,I ADA PARAM+5,I STA KNOW LDB PARAM+4,I IS KNOWJLAST? CMA,INA ADA JNOW SSA,RSS JMP CARY IF SO ISZ JNOW JNOW=JNOW+1 JMP E14 ADD NEXT 2 CHARS CARY JSB SCARY PERFORM CARRY ON KSTR DEF *+5 DEF PARAM+3,I DEF PARAM+4,I DEF PARAM+5,I DEF KNOW KNOW=THE CARY LDA KNOW KNOW NOT=0?(CARRY OVERFLOW?) SZA JMP FILL IF SO BETA JSB SSIGN IF NO OVERFLOW DEF *+5 RE-ENTER ORIGINAL SIGN IN JSTR DEF PARAM,I DEF PARAM+2,I DEF JSIGN DEF JNOW JSB SSIGN RE-ENTER ORIGINAL SIGN IN KSTR DEF *+5 DEF PARAM+3,I DEF PARAM+5,I DEF KSIGN DEF KNOW EPS JSB SDEA2 CONVERT JSTR TO A2 FORMAT DEF *+5 DEF PARAM,I DEF PARAM+1,I DEF PARAM+2,I DEF IERR JSB SDEA2 CONVERT KSTR TO A2 FORMAT DEF *+5 DEF PARAM+3,I DEF PARAM+4,I DEF PARAM+5,I DEF IERR JMP SADD,I RETURN ERR1 CCA IERR=-1 STA PARAM+6,I JSB SDEA2 CONVERT JSTR TO A2 FORMAT DEF *+5 DEF PARAM,I DEF PARAM+1,I DEF PARAM+2,I DEF IERR JMP SADD,I ERR2 CCA IERR=-1 STA PARAM+6,I JMP EPS FILL SSA KNOW>0?(POSITIVE CARRY?) JMP CMPL JSB SFILL IF SO LEFT FILL KSTR WITH 9'S DEF *+5 DEF PARAM+3,I DEF PARAM+4,I DEF PARAM+5,I DEF NINE ERR3 LDA PARAM+5,I IERR=KLAST STA PARAM+6,I JMP BETA CMPL JSB S.GET ADD THE CARRY TO KSTR(KLAST) DEF *+4 KTEST=KSTR(KLAST) DEF PARAM+3,I DEF PARAM+5,I DEF KTEST LDA KTEST KTEST=KTEST+KNOW ADA KNOW STA KTEST JSB SPUT KSTR(KLAST)=KTEST DEF *+4 DEF PARAM+3,I DEF PARAM+5,I DEF KTEST LDA PARAM+4,I KNOW=K STA KNOW GET JSB S.GET SUBTRACT EACH NUMBER IN KSTR FROM 9 DEF *+4 KTEST=KSTR(KNOW) DEF PARAM+3,I DEF KNOW DEF KTEST LDA KTEST KTEST=9-KTEST CMA,INA ADA NINE STA KTEST JSB SPUT KSTR(KNOW)=KTEST DEF *+4 DEF PARAM+3,I DEF KNOW DEF KTEST LDA PARAM+5,I IS KNOW