ASMB HED S/P NXPAR 12/5/79 M. NAKAMURA NAM NXPAR,7 . 92080-1X592 REV.2026 791101 * * SOURCE 92080-18592 * SPC 2 ************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. 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 EXT .ENTR,ISCAN,MOVCA,PUTCA ENT NXPAR,NXINI * * THIS ROUTINE "PICKS OFF" A PARAMETER FROM A STRING EACH TIME THAT * IT IS CALLED. THE USER SPECIFIES WHICH DELIMITERS ARE TO BE USED. * * USAGE: * * ENTRY POINT NXINI MUST BE CALLED TO SPECIFY THE STRING TO BE * OPERATED ON. AFTER A CALL TO NXINI, CALLS TO NXPAR RETURN THE * STRING PARAMETERS IN SEQUETIAL ORDER. I.E. THE FIRST CALL TO NXPAR * RETURNS THE FIRST PARAMETER, THE SECOND CALL RETURNS THE SECOND * PARAMETER, ETC. * * CALLING SEQUENCE: * * CALL NXINI(ISTRN,IBYTE,MXCHR) * * ISTRN - STRING TO BE OPERATED ON * IBYTE - STARTING BYTE (BYTE 1 IS LEFTMOST BYTE) * MXCHR - STRING LENGTH IN CHARACTERS * * I = NXPAR (IPARM,ICHAR,ITERM) * * IPARM - PARAMETER FOLLOWED BY BLANK (RETURNED BY NXPAR) * ICHAR - NO. OF CHARACTERS IN IPARM (INCLUDES TRAILING BLANK) * ITERM - TERMINATION/TEST CHARACTER: * LEFT BYTE - TERMINATION CHARACTER * RIGHT BYTE - TEST CHARACTER * * I (OR THE A REG FOR ASSEMBLY LANG) IS SET TO: * * 0 - IF TEST CHARACTER WAS ENCOUNTERED * 1 - IF TERMINATOR CHARACTER OR MAX STRING LENGTH WAS * ENCOUNTERED * -1 - IF AN ERROR OCURRED (NXINI WAS NOT CALLED FIRST) * ISTRN NOP STRING BUFFER ADDR IBYTE NOP STARTING BYTE ADDR MXCHR NOP STRING LENGTH ADDR * * ENTRY POINT NXINI: * NXINI NOP JSB .ENTR DEF ISTRN * LDA IBYTE,I GET FIRST BYTE STA FBYTE SAVE IT * CLA,INA SET FLAG TO INDICATE THAT NXINI WAS CALLED STA FIRST * JMP NXINI,I RETURN * ********************************************************************** * * ENTRY POINT NXPAR: * IPARM NOP PARAMETER RETURNED TO THIS ADDR ICHAR NOP NO. OF CHAR (INCLUDING TRAILING BLANK) RETURNED ITERM NOP TERMINATOR/TEST CHARACTER * NXPAR NOP JSB .ENTR DEF IPARM * LDA FIRST GET NXINI FLAG SZA NXINI CALLED PREVIOUSLY? JMP NXPA1 YES, PROCESS CCA NO, RETURN WITH ERROR FLAG JMP NXPAR,I RETURN * NXPA1 LDA FBYTE GET STARTING BYTE STA ICHAR,I INITIALIZE CHARACTER COUNT * JSB ISCAN SCAN FOR DELIMITER INDICATING "END OF PARAMETER" DEF *+5 DEF ISTRN,I DEF ICHAR,I DEF ITERM,I DEF D0 * STA ASAV SAVE TEST TERMINATOR FLAG * JSB MOVCA MOVE PARAMETER TO USER BUFFER DEF *+6 DEF ISTRN,I DEF FBYTE DEF IPARM,I DEF D1 DEF ICHAR,I * LDA ICHAR,I GET PARAMETER LENGTH ADA FBYTE CALCULATE FIRST BYTE OF NEXT PARAMETER STA FBYTE * CMA,INA NEGATE NEW FIRST BYTE ADA MXCHR,I LAST BYTE ENCOUNTERED? SSA STA ASAV YES, SET LAST BYTE, TERMINATOR FLAG * JSB PUTCA PUT BLANK IN LAST BYTE OF PARAMETER DEF *+4 DEF IPARM,I DEF BLANK DEF ICHAR,I * LDA ASAV GET TERMINATOR/TEST FLAG SZA,RSS TERMINATOR ENCOUNTERED? JMP NXPAR,I NO, RETURN CLA YES, CLEAR NXINI FLAG STA FIRST INA JMP NXPAR,I * ********************************************************************** * ASAV BSS 1 FIRST OCT 0 FBYTE BSS 1 BLANK ASC 1, D1 DEC 1 D0 DEC 0 END