ASMB NAM MOVCX,7 . 92903-16001 REV.1805 770512 * * SOURCE 92903-18041 * SPC 2 ************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * * PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ************************************************************** SPC 2 ********************************************************************** * * * THIS SUBROUTINE MOVES CHARACTERS FROM A * * SOURCE BUFFER TO A DESTINATION BUFFER . SEVERAL FIELDS MAY BE * * MOVED IN ONE CALL . THESE FIELDS MUST BE CONTIGUOUS IN THE * * SOURCE BUFFER . * * * * THE CALLING SEQUENCE IS : * * * * JSB MOVCX * * DEF *+6 * * DEF BUFS SOURCE BUFFER ADDRESS * * DEF SOF SOURCE CHARACTER OFFSET ADDRESS (TABLE)* * DEF BUFD DEST. BUFFER ADDRESS (TABLE)* * DEF OFSET OFFSET IN BYTE ADDED TO SOURCE OFFSET * * DEF DBLEN DEST. BUFFER LENGTH (IN BYTE) * * (USED ONLY FOR CONVERSION) * * * * THREE TABLES ARE NECESSARY IN THE CALLING PROGRAM : * * * * 1)- TABLE OF THE OFFSETS IN THE SOURCE BUFFER : IF N FIELDS * * ARE TO BE MOVED : * * SOF DEC SOF1 SOURCE OFFSET OF FIELD # 1 * * DEC SOF2 SOURCE OFFSET OF FIELD # 2 * * . * * . * * DEC SOFN SOURCE OFFSET OF FIELD # N * * DEC SOF(N+1)SOURCE OFFSET OF FIELD # N+1 * * DEC -1 END OF TABLE * * * * 2)- TABLE OF THE DESTINATIONS BUFFERS ADDRESSES : * * BUFD DEF BUFD1 DEST. BUFFER ADDRESS FOR FIELD # 1 * * DEF BUFD2,I DEST. BUFFER ADDRESS FOR FIELD # 2 * * . * * . * * DEF BUFDP,I DEST. BUFFER ADDRESS FOR FIELD # P * * DEF BUFDQ,I DEST. BUFFER ADDRESS FOR FIELD # Q * * . * * . * * DEF BUFDN DEST. BUFFER ADDRESS FOR FIELD # N * * * * 3)- TABLE OF THE DESTINATIONS BUFFERS LENGTH : * * THIS TABLE IS USED ONLY WHEN INTEGER CONVERSION ARE * * REQUIRED, THIS IS INDICATED BY AN INDIRECT ADDRESS IN * * THE TABLE 2 : DESTINATIONS BUFFERS ADDRESSES. * * THIS TABLE HAS NOT THE SAME LENGTH THAN TABLE 1 AND 2, * * THIS TABLE SHOULD HAVE AN ENTRY ONLY WHEN IT IS NECESSARY. * * * * DBLEN DEC DBL2 DEST. BUFFER LENGTH FOR FIELD # 2 * * . * * DEC DBLP DEST. BUFFER LENGTH FOR FIELD # P * * DEC DBLQ DEST. BUFFER LENGTH FOR FIELD # Q * * * ********************************************************************** * * ENT MOVCX EXT .ENTR,MOVCA,JASC * * GET ADDRESSES OF CALLING PARAMETERS : * .P1 NOP SOURCE BUFF. .P2 NOP SOURCE CHAR. OFFSET .P3 NOP DEST. BUFFER .P4 NOP DEST. OFFSET .P5 NOP QUESTION # MOVCX NOP ENTRY POINT JSB .ENTR DEF .P1 * * COMPUTE # OF CHARACTERS TO MOVE FOR THIS FIELD * L1 LDA .P2 SOURCE CHAR. OFFSET ADDRESS INA INCREMENT ADDRESS LDB A,I GET NEXT SOURCE CHAR. OFFSET CPB .D1 -1 ? END OF TABLE ? JMP MOVCX,I YES RETURN ! LDA .P2,I NO COMPUTE CMA,INA FIELD LENGTH ADB A TO MOVE. STB LNGTH STORE IT * * COMPUTE SOURCE CHAR. OFFSET . * LDB .P2,I GET OFFSET ADB .P4,I TRUE CHAR. OFFSET FOR THIS FIELD STB SOF STORE IT * * CHECK FOR INTEGER CONVERSION * LDA .P3,I GET DEST. BUFF ADD STA DEBAD SET IT TO MOVCA CALL SSA,RSS INTEGER CONVERSION REQUIRED ? JMP L4 NO, DO THE MOVE * ELA,CLE,ERA YES, CLEAR BIT15 STA DEBA. LDA LNGTH ERA DLD D1 SEZ SWP DST BUF+1 CLA INIT BINARY WORD TO NUL STA TEMP JSB MOVCA TRANSFERT BINARY DATA DEF *+6 INTO A WORD TO DO DEF .P1,I THE CONVERSION DEF SOF DEF TEMP OUTPUT BUFFER (I HOPE THAT DEF BUF+1 SOURCE LENGTH IS NOT MORE THAN 2 CHAR.) DEF BUF+2 FORCE LENGTH IN BYTE * JSB JASC DO THE CONVERSION DEF *+5 DEF TEMP DEF BUF INTO A TEMPORARY BUFFER DEF D1 DEF D6 * LDA BUF+2 LDB ASC. SET SPACE IF IT IS ZERO CPA ASC.0 STB BUF+2 * LDA .P5,I GET DESTINATION LENGTH IN BYTE CMA,INA COMPUTE OFSET IN THE TEMPORARY BUFFER ADA D7 STA TEMP * JSB MOVCA MOVE BYTE IN DESTINATION BUFFER DEF *+6 DEF BUF DEF TEMP OFFSET IN TEMPORARY BUFFER DEBA. NOP DESTINATION ADDR DEF D1 DEF .P5,I # OF CHAR. TO MOVE ISZ .P5 BUMP POINTER IN DEST. LEN TABLE JMP L6 * * MOVE CHARACTERS ! * L4 JSB MOVCA DEF *+6 DEF .P1,I SOURCE BUFF ADDRESS DEF SOF SOURCE OFFSET DEBAD NOP DEST BUFF ADDRESS DEF D1 DEST OFFSET DEF LNGTH # OF CHAR. TO MOVE * * INCREMENT ADDRESSES FOR NEXT MOVE * L6 ISZ .P2 SOURCE OFFSET ISZ .P3 DEST BUFFER JMP L1 GO TO NEXT MOVE * * DATA AND STORAGE * A EQU 0 D1 DEC 1 D2 DEC 2 D6 DEC 6 D7 DEC 7 .D1 DEC -1 ASC. ASC 1, ASC.0 ASC 1, 0 LNGTH NOP # OF CHARS TO MOVE BUF BSS 3 TEMP EQU DEBAD SOF EQU BUF END