ASMB,R,Q,C * NAME: STRNG * SOURCE: 92071-18143 * RELOC: 92071-16143 * PGMR: HLC * * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. 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. * * **************************************************************** * * NAM STRNG,0 92071-16143 REV.2041 800328 ENT $ALCS,$EX14,$RTNS ENT $SBLN,$STRN,$$STR,$.STR * EXT $A,$B,$EXEX,$RQP8,$RQ.9 EXT $RQCT,$SCXX,$RQ.2,$VBUF EXT $RQP3,$RQ.4,.MWI EXT .CAX,.CBX,.MWF EXT $WRTS,$XQT EXT $RTN,$ALC * A EQU 0 B EQU 1 * * $EX14 EQU * STRING PASSING LDB $XQT JSB $VBUF CHECK BUFFER RANGE DEF $RQP3,I DEF $RQ.4 JMP SC04 ILLEGAL BUFFER * LDA $RQCT ADA =D-3 CLB,INB SSA JMP $SCXX NOT ENOUGH PARAMETERS STB $A,I SET TO 1 IN CASE OF FAILURE LDA $RQ.4 SSA CMA,INA,RSS CONVERT LENGTH TO POSITIVE CHARS ALS STA $RQ.9 LDA $RQ.2 ADA =D-2 SZA,RSS JMP $WRTS 2 -- WRITE STRING TO FATHER INB INA,SZA JMP $SCXX BAD REQUEST CODE, PRINT 'SC02' LDB $XQT 1 -- READ STRING JSB STSH FIND THE STRING JMP TLOG INDICATE FAILURE (A=0) ADA =D2 LDB A,I CMB,CLE,INB COMPARE AVAILABLE TO REQUESTED ADB $RQ.9 SET E IF AVAILABLE IS LESS THAN REQUESTED LDB A,I SEZ,INA,RSS USE WHICHEVER AMOUNT IS LESS LDB $RQ.9 STB $RQ.9 INB BRS CONVERT TO WORDS STB $B,I SAVE WORD COUNT JSB .CBX COPY TO INDEX REGISTER LDB $RQP3 JSB .MWI MOVE WORDS INTO USER BUFFER LDB $XQT JSB $RTNS RETURN STRING TO SAM CLA STA $A,I INDICATE SUCCESS LDA $RQ.9 USE POSITIVE CHAR COUNT LDB $RQ.4 SSB IF ORIGINAL REQUEST WAS NEGATIVE TLOG STA $B,I FOR THE TRANSMISSION LOG JMP $EXEX * * SC04 LDB =D4 JMP $SCXX * * STSH NOP FIND A STRING BLOCK STB ID ADB =D15 STB STAT LDB STRNG POINTER TO START OF STRING STSHL LDA B,I CLE,SZA,RSS JMP STSH,I END OF LIST INA LDA A,I OWNER'S ADDRESS IN A ELA,RAR CPA ID JMP FND FOUND IT LDB B,I JMP STSHL KEEP LOOKING * FND LDA B,I BLOCK ADDRESS IN A ISZ STSH JMP STSH,I * * * $RTNS NOP RETURN A STRING TO SAM JSB STSH FIND STRING JMP $RTNS,I NONE FOUND STA RTSTA SAVE ADDRESS LDA A,I STA B,I REMOVE FROM LINKED LIST LDA RTSTA ADA =D2 LDB A,I POS. NO. OF CHARS SEZ,INB ADB =D2 $ALC ALLOCATED 2 CHARS MORE THAN REQUESTED BRS CONVERT TO WORDS ADB =D3 CONTROL WORDS STB RTSTW TOTAL SIZE OF BLOCK LDA STAT,I AND =B157777 CLEAR THE 'ST' BIT STA STAT,I JSB $RTN RETURN TO SAM RTSTA NOP RTSTW NOP JMP $RTNS,I * * $ALCS NOP ALLOCATE STRING TO PROGRAM JSB $RTNS RETURN ANY PREVIOUS STRING LDA $RQ.9 INA ARS CONVERT REQUEST TO WORDS JSB .CAX COPY COUNT TO INDEX REGISTER ADA =D3 STA $SBLN LENGTH OF SAM REQUIRED JSB $ALC REQUEST SAM $SBLN NOP JMP $ALCS,I NOT ENOUGH EVER JMP ALCST NOT ENOUGH NOW CCE CPB $SBLN SET E-REG IF EXTRA WORD WAS RETURNED CLE LDB STRNG,I STB A,I LINK INTO TOP OF LIST STA STRNG,I LDB ID RBL,ERB ADD 'EXTRA WORD' BIT INA STB A,I STORE OWNER'S ADDRESS IN WORD 2 LDB $RQ.9 INA STB A,I STORE LENGTH IN WORD 3 INA LDB A LDA $RQP8 SOURCE ADDRESS JSB .MWF MOVE WORDS FROM USER MAP LDA STAT,I IOR =B20000 SET 'ST' BIT STA STAT,I ISZ $ALCS ALCST ISZ $ALCS JMP $ALCS,I * * STRNG DEF *+1 * $STRN NOP START OF PROGRAM STRINGS * * ID NOP STAT NOP * $$STR EQU * STANDARD MODULE $.STR DEC 0 STANDARD MODULE * END