ASMB,R,L,C,Q HED HELP * NAME: HELP * SOURCE: 92067-18121 * RELOC: 92067-16121 * PGMR: N.J.S. * * *************************************************************** * * (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. * * *************************************************************** * NAM HELP,3 92067-16121 REV.1903 790312 ENT HELP EXT EXEC,OPEN,CLOSE EXT READF,LOGLU,GTERR SUP * * BUFFR BSS 128 PRAM1 BSS 4 INTEG NOP ABUF DEF BUFFR APRM1 DEF PRAM1 * * GPTR NOP POINTER FOR PARSE; POINTER FOR COMPR PPTR NOP POINTER FOR PARSE; POINTER FOR COMPR EOL NOP COUNT NOP COUNTER FOR ASCIN; COUNTER FOR COMPR SAVE NOP TEMP STORAGE FOR ASCIN; ERROR RETURN SIGN NOP CHAR NOP TERLU NOP * * DCB BSS 144 DCBA DEF DCB LNDCB NOP LENGTH OF DCB BEING USED ADCB NOP ADDRESS OF DCB BEING USED LEN EQU CHAR CNWRD EQU SIGN * * NAME ASC 3,"HELP CODE ASC 19,HELP INFO FILE FOR PROGRAM 92067-18121 ACODE DEF CODE "" ASC 1,"" A"" DEF "" * * ZERO DEC 0 .1 DEC 1 .2 DEC 2 .3 DEC 3 .4 DEC 4 .6 DEC 6 .14 DEC 14 .128 DEC 128 * * N1 DEC -1 N4 DEC -4 N8 DEC -8 N10 DEC -10 N16 DEC -16 N64 DEC -64 * * A EQU 0 B EQU 1 XEQT EQU 1717B BGLWA EQU 1777B * * * * * ENTRY - HELP MAY BE SCHEDULED IN ANY OF THE FOLLOWING WAYS * * :HE,P1,P2 * *HE,P1,P2 * :RU,HELP,P1,P2 * *RU,HELP,P1,P2 * * * THE RUN STRING RETRIEVED BY HELP WILL BE EITHER * * RU,HELP,PARAM1,PARAM2 * OR * ON,HELP,PARAM1,PARAM2 * OR * HELP,PARAM1,PARAM2 * OR * HE,PARAM1,PARAM2 * * * ** ********************* ** ** ** SECTION I ** ** ** ********************* ** ** ** CALCULATE LARGEST BUFFER BEHIND PROGRAM THAT CAN BE USED ** ** HELP EQU * LDB XEQT GET ID SEGMENT ADDRESS OF ADB .14 HELP POSITION TO AND XLA B,I FETCH PROGRAM TYPE AND =B17 MASK TO LOWER 4 BITS CPA .1 MEMORY RESIDENT? JMP BUF.2 YES - MUST USE IN-PROGRAM BUFFER ADB =D9 POSITION TO AND GET XLA B,I HIGH MAIN + 1 STA ADCB SAVE THIS ADDRESS CLB CMA,INA EXTRA = #WORDS BETWEEN HIGH MAIN ADA BGLWA +1 AND END OF THE PARTITION. ADA N16 ALLOW FOR 16 DCB CONTROL WORDS LSR 7 DIVIDE TO GET # BLOCKS SZA,RSS LESS THAN 1 BLOCK FOR DCB BUFFER? JMP BUF.2 YES - JUST USE IN-PROGRAM BUFFER LSL 7 LENGTH IN WORDS (EVEN 128) OF SPACE BEHIND ADA =D16 PROGRAM - (ADD BACK IN 16 CONTROL WORDS) STA LNDCB SAVE LENGTH OF BUFFER BEING USED. JMP RETRV NOW GO PROCESS HELP REQUEST * BUF.2 LDA =D144 SET UP LENGTH OF IN-PROGRAM STA LNDCB BUFFER FOR DCB LDA DCBA SET UP ADDRESS OF BUFFER STA ADCB TO BE USED FOR DCB * * ** ******************** ** ** ** SECTION II ** ** ** ******************** ** ** ** RETRIEVE RUN STRING AND PARSE IT ** ** * * CLEAR 1ST PARAMETER BY MOVING IN BLANKS * FIND OUT LU# OF TERMINAL * RETRV LDA =B20040 STA PRAM1 STA PRAM1+1 STA PRAM1+2 STA PRAM1+3 * JSB LOGLU CALL LOGLU TO GET LU# DEF *+2 OF TERMINAL SCHEDULING HELP DEF SAVE DUMMY VARIABLE - GETS CHANGED STA TERLU SAVE LU# OF THE TERMINAL * * RETRIEVE RUN STRING * JSB EXEC EXEC 14 CALL TO DEF *+5 RETRIEVE RUN STRING DEF .14 TO BUFFER STRNG DEF .1 DEF BUFFR DEF .128 * LDA ABUF SET UP POINTERS IN STRING FOR GETCR IN CLE,ELA FORMAT: ADDRESS IN BITS 15-1, U\L CHAR STA GPTR =0\1 UB BIT 0. BLS SHIFT STRING LENGTH TO SAME FORMAT ADA B ADD IT TO ADDRESS OF STRING TO STA EOL GET ADDRESS FOR END OF LINE * * 1ST CHARACTER IN STRING MUST BE EITHER A BLANK (40B), AN * H (110B), AN O (117B), OR AN R (122B). THIS SECTION LOOKS * AT THE 1ST NON-BLANK CHARACTER. IF IT IS AN H, IT SEARCHES * FOR THE 1ST DELIMITER. IF IT IS AN R OR AN O, IT SEARCHES * FOR THE SECOND DELIMITER. * PARS0 JSB GETCR GET A CHARACTER JMP CKPRM END OF LINE (SHOULDN'T EVER HAPPEN - JUST DEFAULT) CPA =B40 IS THIS A SPACE? JMP PARS0 YES - KEEP LOOKING FOR 1ST NON-BLANK CHARACTER CPA =B110 IS THIS AN H? JMP DEL.2 YES - JUST WANT TO LOOK FOR 1 DELIMITER DEL.1 JSB GETCR MUST BE AN R OR AN O SO LOOK FOR 1ST DELIMITER JMP CKPRM END OF LINE (SHOULDN'T EVER HAPPEN - JUST DEFAULT) CPA =B54 IS THIS A COMMA? RSS YES - NOW LOOK FOR 2ND DELIMITER JMP DEL.1 NO - KEEP LOOKING * * LOOK FOR SECOND COMMA. * DEL.2 JSB GETCR GET A CHARACTER JMP CKPRM END OF LINE - GO CHECK PARAMETERS CPA =B54 IS THIS A COMMA? RSS YES - NOW WE CAN GET THE PARAMETERS JMP DEL.2 NO - KEEP LOOKING * * NOW POSITIONED AT BEGINNING OF 1ST PARAMETER. * WANT TO GET RID OF LEADING BLANKS BUT ALLOW IMBEDDED BLANKS. * LDA APRM1 STUFF THE 1ST PARAMETER CLE,ELA INTO PARM1 TAKING INTO STA PPTR ACCOUNT FORMAT FOR PUTCR LDA N8 IT CAN BE 8 CHARACTERS LONG STA COUNT (THROW ANYTHING AFTER THAT OUT) * PAR.1 JSB GETCR NO - GET THE NEXT CHARACTER JMP CKPRM END OF LINE - GO CHECK PARAMETERS CPA =B40 A BLANK? JMP PAR.1 YES - SQUEEZE OUT LEADING BLANKS PAR.2 CPA =B54 COMMA? JMP PAR.3 YES - END OF THIS PARAMETER LDB COUNT HAVE WE ALREADY SSB "PUT" 8 CHARACTERS IN PARM1? JSB PUTCR NO - "PUT" THIS ONE ISZ COUNT STEP THE COUNT NOP (IN CASE WE GET TO ZERO) JSB GETCR NO - GET ANOTHER CHARACTER JMP CKPRM END OF LINE - GO CHECK PARAMETERS JMP PAR.2 AND GO PROCESS IT * * * READY TO GET THE SECOND PARAMETER. JUST IN CASE THERE IS A COMMA * FOLLOWING IT, STOP THERE. * PAR.3 LDA GPTR SAVE BEGINNING ADDRESS STA SAVE OF SECOND PARAMETER COMFD JSB GETCR GET A CHARACTER JMP DOCON FOUND END OF LINE BEFORE A COMMA CPA =B54 COMMA? RSS YES JMP COMFD NO - KEEP LOOKING LDA GETCR BACK UP POINTER TO POINT ADA N1 TO COMMA AND USE THAT STA EOL AS END OF LINE ADDRESS DOCON LDA SAVE RESTORE STARTING ADDRESS STA GPTR OF SECOND PARAMETER JSB ASCIN PARSE AND CONVERT TO INTEGER JMP ER04 BAD PARAMETER ** ********************* ** ** ** SECTION III ** ** ** ********************* ** ** ** IF PARAMETERS NOT SUPPLIED, CALCULATE DEFAULTS ** GET KEYWORD FROM SCB. GET LU FROM LOGLU ** ** CKPRM LDA PRAM1 WAS THERE A MNEUMONIC? CPA =B20040 SENT? RSS NO JMP GETLU YES - SKIP SCB STUFF AND CHECK LU JSB GTERR GET ERROR CODE DEF *+3 FROM THE SESSION DEF PRAM1 CONTROL BLOCK. DEF SAVE LDA SAVE SZA UNDER SESSION CONTROL? JMP ER01 NOT IN SESSION AND DIDN'T PASS KEYWORD STA BUFFR WORDS OF BUFFR STA BUFFR+1 FOR THE COMPARE STA BUFFR+2 STA BUFFR+3 LDA .4 SEE IF THE ERROR RETREIVED LDB APRM1 FROM GTERR IS ALL ZEROS JSB COMPR RSS IT ISN'T JMP MS01 IT IS - THERE WASN'T ANY 'LAST' ERROR * GETLU LDA TERLU GET LU # OF THE TERMINAL LDB INTEG GET SECOND PARAMETER SZB,RSS WAS ONE SUPPLIED? STA INTEG SAVE LU IN SECOND PARAMETER * * THESE CHECKS ARE IN CASE LU SUPPLIED BY USER IS BAD * IF PASS, PARAMETERS ARE ALL SET UP * LDA INTEG GET LU NUMBER AGAIN SSA NEGATIVE LU? JMP ER04 YES ADA N64 LU GREATER SSA,RSS THAN 64? JMP ER04 YES ** ******************** ** ** ** SECTION IV ** ** ** ******************** ** ** OPEN HELP FILE AND SEARCH FOR KEYWORD ** IF FOUND DUMP INFORMATION TO LU IN INTEG ** ** PROCS JSB OPEN OPEN THE HELP FILE DEF *+8 DEF ADCB,I DEF SAVE ERROR RETURN DEF NAME DEF .3 FORCE TO A TYPE 1 FILE DEF ZERO DEF ZERO DEF LNDCB LDA SAVE GET ERROR RETURN SSA ANY ERRORS? JMP ER03 YES - HELP FILE NOT FOUND * JSB RDREC READ 1ST RECORD JMP ER03 CAN'T EVEN FIND A 1ST RECORD? LDA =D19 LDB ACODE JSB COMPR IS THIS THE CODE RECORD? JMP ER03 NOPE - WON'T BE ABLE TO FIND RIGHT HELP FILE * FIND" JSB RDREC READ NEXT RECRD JMP ER02 ERROR ON READ AND DIDN'T FIND KEYWORD LDA =D1 LDB A"" JSB COMPR IS THIS A DELIMITER RECORD JMP FIND" NO - KEEP LOOKING * * FOUND "" NEXT RECORD'S A KEYWORD * JSB RDREC READ NEXT RECORD WILL BE A KEYWORD JMP ER02 READ ERROR - DIDN'T FIND KEYWORD LDA LEN GET LENGTH OF KEYWORD READ LDB N4 IF LENGTH OF KEYWORD IS GREATER ADB LEN THAN 4 JUST USE 4 SSB,RSS ELSE USE THE LENGTH READ. LDA =D4 LDB APRM1 JSB COMPR DOES THIS MATCH THE KEYWORD WE WANT?? JMP FIND" NO - LOOK FOR NEXT DELIMITER RECORD * * FOUND THE KEYWORD AND EXPLANATION. NO JUST DUMP IT OUT * TO THE SPECIFIED LU #. * DUMP JSB WTREC WRITE THE RECORD WE HAVE IN THE BUFFER JSB RDREC READ THE NEXT RECORD JMP EXIT READ ERROR - MUST BE AT EOF SO RETURN LDA =D1 LDB A"" JSB COMPR IS THIS A DELIMITER RECORD?? JMP DUMP NO - KEEP SENDING INFORMATION * * ALL DONE SO CLOSE THE HELP FILE AND TERMINATE * EXIT JSB CLOSE DEF *+2 DEF ADCB,I * JSB EXEC DEF *+2 DEF .6 ** ******************* ** ** ** SECTION V ** ** ** ******************* ** ** ** SUBROUTINES USED BY THE PARSING SECTION ** ** * * * GETCR - ROUTINE TO GET THE NEXT CHARACTER FROM THE RUN STRING * AND PUT IT IN CHAR AND IN A * * THE FORMAT OF GPTR IS: ADDRESS OF WORD IN STRING IN * BITS 15-1, BIT 0 IS 0/1 INDICATING U/L CHARACTER * * GETCR NOP LDB GPTR CPB EOL JMP GETCR,I CLE,ERB LDA B,I ELB SLB,INB,RSS ALF,ALF STB GPTR AND =B377 STA CHAR ISZ GETCR JMP GETCR,I * * * * PUTCR - ROUTINE TO PUT THE CHARACTER IN CHAR INTO THE * PARAMETER BUFFER. * * THE FORMAT FOR PPTR IS THE SAME AS FOR GPTR IN GETCR * * PUTCR NOP LDB PPTR LDA CHAR CLE,ERB XOR B,I AND =B377 XOR B,I SEZ,RSS ALF,ALF STA B,I ISZ PPTR JMP PUTCR,I * * * ASCIN - ROUTINE TO CONVERT A NUMERIC ASCII FIELD BEGINNING * AT GPTR TO AN INTEGER IN INTEG * * ENTRY: GPTR - ADDRESS OF CHARACTER IN THE FIELD * EOL - CHARACTER ADDRESS OF THE END OF THE LINE * * RETURN: INTEG - CONVERTED INTEGER * P+1 IF OVERFLOW * P+2 NORMAL FINDING A NON-NUMERIC CHARACTER TERMINATES * CONVERSION, BUT STILL RETURNS HERE. * * * CONVERSION IS TERMINATED BY A NON-NUMERIC CHARACTER OR * FINDING EOL. * * NUMERIC CHARACTER - BLANK,+,-,NUMBER * * ASCIN NOP CLO CLA STA INTEG ALL BLANK FIELD => 0 STA SIGN STA SAVE C0 JSB GETCR GET A CHARACTER JMP DONE FOUND END OF THE LINE CPA =B40 A BLANK? JMP C0 YES - JUST SKIP IT CPA =B53 + SIGN JMP C1 YES CPA =B55 - SIGN CCB,RSS YES JMP C5 NO STB SIGN * C1 JSB GETCR GET A CHARACTER JMP DONE FOUND END OF THE LINE CPA =B40 IS THIS A BLANK? JMP C1 YES - SO JUST SKIP IT C5 JSB CHECK CHECK IT STA INTEG LDA SAVE ADA A STA B ADA A ADA A ADA B ADA INTEG STA SAVE JMP C1 * * DONE SOS RETURN P+1 OF THERE IS AN ERROR ISZ ASCIN ELSE STEP RETURN TO P+2 ERR LDA SAVE LDB SIGN INSERT THE SZB SIGN CMA,INA STA INTEG JMP ASCIN,I EXIT * * CHECK NOP ADA =B177720 CHECK FOR SSA ASCII NUMBER JMP DONE (>57B, ADA N10 <72B) SSA,RSS JMP DONE END CONVERSION IF NON-NUMERIC CHAR IS FOUND ADA =D10 JMP CHECK,I ** ******************* ** ** ** SECTION V ** ** ** ******************* ** ** ** OTHER SUBROUTINES ** ** * * * RDREC ROUTINE TO READ THE NEXT SEQUENTIAL RECORD INTO * 128-WORD BUFFER BUFFR. * * RETURN - P+1 IF AN ERROR WAS RETURNED FROM READF * P+2 IF NORMAL * * RDREC NOP JSB READF DEF *+6 DEF ADCB,I DEF SAVE DEF BUFFR DEF .128 DEF LEN * LDA SAVE GET ERROR RETURN SSA,RSS ERROR? ISZ RDREC NO - STEP TO P+2 RETURN JMP RDREC,I * * * WTREC ROUTINE TO WRITE A RECORD OF LENGTH LEN FROM BUFFER * BUFFR TO LU IN INTEG * * WTREC NOP LDA INTEG ADA =B200 STA CNWRD JSB EXEC DEF *+5 DEF .2 DEF CNWRD DEF BUFFR DEF LEN JMP WTREC,I * * * COMPR ROUTINE TO COMPARE THE CONTENTS OF BUFFR WITH A * SPECIFIED STRING * * ENTRY A - # WORDS TO COMPARE * B - ADDRESS OF STRING TO BE COMPARED AGAINST BUFFR * * RETURN P+1 - DID NOT COMPARE * P+2 - COMPARE WORKED * * COMPR NOP CMA,INA MAKE NEGATIVE COUNTER STA COUNT OF WORDS TO BE COMPARED STB PPTR POINTER IN STRING LDA ABUF POINTER STA GPTR IN BUFFR NXTWD LDA GPTR,I CPA PPTR,I RSS THIS WORD COMPARES JMP COMPR,I NO MATCH - RETURN AT P+1 ISZ GPTR ISZ PPTR ISZ COUNT JMP NXTWD GO DO THE NEXT ONE ISZ COMPR DONE - STEP RETURN ADDRESS TO P+2 JMP COMPR,I RETURN ** ** ******************** ** ** ** SECTION VI ** ** ** ******************** ** ** ** MESSAGE AND ERROR HANDLING ** ** MS01 LDA A.MS1 RSS ER01 LDA A.ER1 GET ADDRESS OF ERROR 1 INFORMATION RSS ER02 LDA A.ER2 GET ADDRESS OF ERROR 2 INFORMATION RSS ER03 LDA A.ER3 GET ADDRESS OF ERROR 3 INFORMATION RSS ER04 LDA A.ER4 GET ADDRESS OF ERROR 4 INFORMATION STA PPTR SAVE AS A POINTER LDA PPTR,I GET NUMBER OF LINES TO BE PRINTED OUT STA COUNT IT IS ALREADY NEGATIVE - USE AS COUNTED ISZ PPTR STEP POINTER SENDM LDA PPTR,I GET LENGTH OF THIS LINE STA LEN AND SAVE IT ISZ PPTR STEP POINTER JSB EXEC DEF *+5 DEF .2 DEF TERLU DEF PPTR,I DEF LEN LDA PPTR STEP POINTER PAST LINE JUST WRITTEN ADA LEN STA PPTR ISZ COUNT STEP LINE COUNTER DONE? JMP SENDM GO SEND ANOTHER LINE JMP EXIT ALL DONE GO CLOSE FILE AND LEAVE * * * * #LNM1 DEC -1 DEC 8 ASC 8,NO ERROR IN SCB A.MS1 DEF #LNM1 * #LNS1 DEC -5 DEC 14 ASC 14,HELP PROGRAM ERROR HELP0001 DEC 11 ASC 11,NOT ENOUGH PARAMETERS DEC 27 ASC 27, NOT OPERATING UNDER SESSION CONTROL AND A KEYWORD DEC 28 ASC 28, WAS NOT SPECIFIED. RE-ENTER THE COMMAND AND SPECIFY DEC 26 ASC 26, THE APPROPRIATE KEYWORD AS THE FIRST PARAMETER. A.ER1 DEF #LNS1 * #LNS2 DEC -4 DEC 14 ASC 14,HELP PROGRAM ERROR HELP0002 DEC 9 ASC 9,KEYWORD NOT FOUND DEC 26 ASC 26, KEYWORD WAS NOT FOUND IN THE HELP FILE. IF THE DEC 26 ASC 26, KEYWORD WAS SPECIFIED IN THE COMMAND, CHECK IT. A.ER2 DEF #LNS2 * #LNS3 DEC -4 DEC 14 ASC 14,HELP PROGRAM ERROR HELP0003 DEC 10 ASC 10,HELP FILE NOT FOUND DEC 22 ASC 22, HELP PROGRAM COULD NOT FIND FILE "HELP. DEC 13 ASC 13, NOTIFY SYSTEM MANAGER. A.ER3 DEF #LNS3 * #LNS4 DEC -6 DEC 14 ASC 14,HELP PROGRAM ERROR HELP0004 DEC 7 ASC 7,BAD PARAMETER DEC 26 ASC 26, THE SECOND PARAMETER, THE LOGICAL UNIT NUMBER TO DEC 24 ASC 24, WHICH THE HELP INFORMATION IS TO OUTPUT, WAS DEC 25 ASC 25, SPECIFIED BUT WAS NOT A LEGAL LU#. CHECK THE DEC 16 ASC 16, LU# AND RE-ENTER THE COMMAND. A.ER4 DEF #LNS4 * * * * END HELP