ASMB,L,C,R RTE-M SEGMENTED PROGRAM PREPARATION PROGRAM * * NAME: RTE-M SGPRP * SOURCE: 91740-18070 * RELOC: 91740-16070 * PROGMR: E.J.W.,C.E.J. * * **************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. 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. * * **************************************************************** * * * TO INITIATE SGPRP: * *RU,SGPRP,FI,LN,MN * OR * *RU,SGPRP,LU * WHERE: * FILNMN IS AN ASCII ANSWER FILE CONTAINING THE NAMR OF THE MAIN * PROGRAM'S FILE AS THE FIRST RECORD, FOLLOWED BY THE * SEGMENT(S)' NAMR(S) IN CONSECUTIVE RECORDS, ENDING WITH * AN "/E". * * LU IS THE LOGICAL UNIT NUMBER OF THE DEVICE FROM WHICH SGPRP * IS TO TAKE DATA. * * THE DEFAULT VALUE FOR THE PARAMETER IS LU # 1 (SYSTEM CONSOLE). * * NAM SGPRP,3,90 91740-16070 REV 1805 771118 EXT $LIBR,$LIBX,EXEC,$CVT1,$CVT3,$PARS EXT OPEN,READF,WRITF,CLOSE,POSNT * A EQU 0 B EQU 1 * * SGPRP NOP CLA STA PRMPT STA INLU LDA B,I GET INPUT PARAMETER CMA,INA LU OR FILE NAME? ADA B77 SSA JMP FILE FILE--GO MOVE NAME INTO STORAGE * LDA B,I LU--RESET A REG. SZA,RSS DEFAULTED? LDA D1 YES--GET DEFAULT LU STA INLU AND SAVE FOR INPUT RETRIEVAL * JSB EXEC SEE IF DEVICE IS INTERACTIVE DEF *+1+6 DEF D13 DEF INLU DEF DVR DEF TEMP DEF SUB LDA DVR DVR00, DVR05 SUB. 0, AND DVR07 SUB. 0 ALF,ALF ARE DRIVERS FOR INTERACTIVE DEVICES AND B77 SZA,RSS JMP SETPM CPA D5 JMP SUB? CPA D7 JMP SUB? JMP BEGIN SUB? LDA SUB AND B37 SZA JMP BEGIN SETPM ISZ PRMPT IF INTERACTIVE--SET PROMPT FLAG LDA INLU IOR B400 AND ECHO BIT IN LU STA INLU JMP BEGIN * FILE LDA .FLNM MOVE FILE NAME INTO LOCAL STORAGE SWP MVW D3 * JSB OPEN OPEN THE FILE DEF *+1+3 DEF IDCB1 DEF ERR .FLNM DEF FILNM IGNORE ERRORS ON THIS FILE * JSB READF READ FILE NAME OF MAIN DEF *+1+5 AND SAVE FOR MUCH LATER. DEF IDCB1 DEF ERR DEF MBUF DEF D10 DEF MLEN JMP SEGMT * BEGIN LDA PRMPT SEE IF LU INTERACTIVE SZA,RSS JMP RMAIN JSB EXEC IF SO--WRITE "SGPRP STARTED" DEF *+1+4 DEF D2 DEF INLU DEF MESS1 DEF D7 JSB EXEC AND PROMPT "MAIN PROGRAM NAME?" DEF *+1+4 DEF D2 DEF INLU DEF ASKMP DEF D10 * RMAIN JSB EXEC READ FILE NAME OF MAIN DEF *+1+4 AND SAVE FOR MUCH LATER. DEF D1 DEF INLU DEF MBUF DEF D10 STB MLEN * SEGMT CLA CLEAR OUT WORDS TO SAVE STA HMAIN HIGHEST MAIN AND HIGHEST BASE PAGE STA HBASE LOCATIONS USED BY ANY SEGMENT * NXSEG LDA INLU INPUT FROM FILE OR LU? SZA JMP NXLU LU--BRANCH AROUND * JSB READF FILE--READ SEGMENT NAME DEF *+1+5 DEF IDCB1 DEF ERR DEF IBUF DEF D10 DEF LEN JMP OPSEG * NXLU LDA PRMPT LU INTERACTIVE? SZA,RSS JMP NXLU2 NO--BRANCH AROUND WRITE JSB EXEC YES--PROMPT "/E OR SEGMENT NAME?" DEF *+1+4 DEF D2 DEF INLU DEF ASKSG DEF MD21 * NXLU2 JSB EXEC READ SEGMENT NAME DEF *+1+4 DEF D1 DEF INLU DEF IBUF DEF D10 STB LEN * OPSEG LDA DIBUF (A)=INPUT STRING ADDR LDB LEN (B)=WORD LENGTH OF INPUT STRING JSB PARSE PARSE INTO FNAME, SC, AND CR COMPONENTS LDA FNAME CPA /E NO MORE SEGMENTS? JMP UPDAT RIGHT, GO UPDATE MAIN'S BOUNDS * JSB OPEN OPEN SEGMENT FILE (ABSOLUTE) DEF *+7 DEF IDCB2 DEF ERR DEF FNAME DEF ABS DEF SC DEF CR SSA JMP FMPER * CLA INITIALIZE SPECIAL RECORD COUNT STA SRECN TO COUNT TIE-OFF RECORDS * NXREC JSB READF READ AN ABSOLUTE RECORD DEF *+6 INTO ABUF DEF IDCB2 DEF ERR DEF ABUF DEF D128 DEF LEN SSA JMP FMPER * CCA END-OF-FILE? CPA LEN JMP SGEOF YES, * JSB ABSCK PERFORM CHECKSUM CHECK LDA ABSAD COULD IT BE SPECIAL RECORD? CPA D2 IE., ADDR=2? RSS JMP NXREC NO, TRY NEXT RECORD * LDA LEN IT MIGHT BE SPECIAL RECORD CPA D5 SO CHECK ABSOLUTE RECORD LENGTH RSS JMP NXREC NOT SPECIAL RECORD. * ISZ SRECN IT IS A SPECIAL RECORD. LDA SRECN CPA D7 IS IT PROG'S MAIN ADDR BOUNDS? JMP SGMAN YES, SEE IF THESE ARE THE HIGHEST. * CPA D8 IS IT PROG'S BASE PAGE ADDR BOUNDS? JMP SGBAS YES, SEE IF THESE ARE THE HIGHEST. JMP NXREC * SGMAN LDA WORD2 GET HIGH ADDR BOUND STA B CMA,INA ADA HMAIN IS CURRENT SEGMENT HIGH ADDR SSA HIGHER THAN PREVIOUS HIGH? STB HMAIN YES, SAVE NEW HIGH JMP NXREC * SGBAS LDA WORD2 GET HIGH BASE PAGE BOUND STA B CMA,INA ADA HBASE IS CURRENT SEGMENT HIGH BASE ADDR SSA HIGHER THAN PREVIOUS HIGH? STB HBASE YES, SAVE NEW HIGH BASE * SGEOF JSB CLOSE DONE NOW. SO, CLOSE FILE DEF *+3 DEF IDCB2 DEF ERR JMP NXSEG DONE WITH THIS SEGMENT, MORE SEGMENTS? * UPDAT LDA DMBUF GET ORIGINAL INPUT STRING LDB MLEN FOR MAIN PROGRAM FILE NAME JSB PARSE AND PARSE INTO FNAME,SC,CR COMPONENTS * JSB OPEN OPEN THE MAIN PROGRAM FILE DEF *+7 DEF IDCB2 DEF ERR DEF FNAME DEF UPDTA UPDATE ABSOLUTE DEF SC DEF CR SSA JMP FMPER * CLA STA SRECN INIT SPECIAL RECORD COUNT * NXMRC JSB READF DEF *+6 DEF IDCB2 DEF ERR DEF ABUF DEF D128 DEF LEN SSA JMP FMPER * CCA CPA LEN END-OF-FILE? JMP MNEOF YES * JSB ABSCK PERFORM CHECKSUM CHECK LDA ABSAD IS IT SPECIAL RECORD CPA D2 ORIGINED AT 2? RSS MAYBE JMP NXMRC DEFINITELY NO. * LDA LEN CPA D5 IS IT THE RIGHT SIZE (5 WORDS)? RSS YES JMP NXMRC NO * ISZ SRECN LDA SRECN CPA D7 IS IT MAIN'S MAIN ADDR BOUNDS? JMP MNMAN YES * CPA D8 IS IT MAIN'S BASE PAGE ADDR BOUNDS? JMP MNBAS YES JMP NXMRC * MNMAN LDA HMAIN SET UP NEW HIGH MAIN SZA,RSS ANY CHANGE? JMP NXMRC NO, IGNORE STA WORD2 ADA WORD1 AND COMPUTE NEW CHECKSUM ADA ABSAD STA CKSUM * JSB POSNT BACK UP ONE RECORD DEF *+4 DEF IDCB2 DEF ERR DEF MD1 SSA JMP FMPER * JSB WRITF REWRITE RECORD DEF *+5 DEF IDCB2 DEF ERR DEF ABUF DEF LEN SSA JMP FMPER JMP NXMRC * MNBAS LDA HBASE FIX UP HIGH BASE PAGE WORD SZA,RSS ANY CHANGE? JMP MNEOF NO, IGNORE STA WORD2 AND RECOMPUTE THE CHECKSUM ADA WORD1 ADA ABSAD STA CKSUM * JSB POSNT BACK UP ONE RECORD DEF *+4 DEF IDCB2 DEF ERR DEF MD1 * JSB WRITF REWRITE RECORD IN MAIN FILE DEF *+5 DEF IDCB2 DEF ERR DEF ABUF DEF LEN SSA JMP FMPER * MNEOF LDA PRMPT IS INPUT DEVICE INTERACTIVE? SZA,RSS JMP EXIT JSB EXEC YES--WRITE "SGPRP DONE" DEF *+1+4 DEF D2 DEF INLU DEF MESS2 DEF D5 * EXIT JSB CLOSE CLOSE MAIN PROGRAM'S FILE DEF *+1+2 DEF IDCB2 DEF ERR IGNORE ERROR RETURNS * LDA INLU INPUT FROM FILE? SZA JMP TERM JSB CLOSE YES--CLOSE IT ALSO DEF *+1+2 DEF IDCB1 DEF ERR IGNORE ERROR RETURN * TERM JSB EXEC ALL DONE! DEF *+2 DEF D6 * * PARSE NOP BLS CONVERT B TO CHARACTER COUNT JSB $LIBR NOP JSB $PARS DEF PBUF JSB $LIBX DEF PARSE * ABSCK NOP ROUTINE FOR CHECKSUM VERIFY LDA ABSCT IF BAD CHECKSUM THEN AND LHALF EXIT VIA 'FMP ERROR' ALF,ALF SHIFT WORD COUNT TO LOW BITS CMA,INA STA ERR SAVE NEGATIVE COUNT LDB ABSAD GET ADDR, START CKSM LDA DABSD STA TEMP2 SET DATA ADDR * ABSC2 LDA TEMP2,I GET A WORD ADB A AND ADD TO CKSM ISZ TEMP2 BUMP TO NEXT WORD ISZ ERR BUMP COUNT JMP ABSC2 REPEAT TILL DONE * LDA TEMP2,I CPA B COMPARE CHECKSUMS JMP ABSCK,I MATCH, SO RETURN. * LDA D7 ERROR, SO FALL THROUGH 'FMP ERROR 007' * FMPER LDB PLUS SSA IF NEGATIVE NUMBER LDB MINUS GET ASCII "-" STB SIGN SSA CMA,INA MAKE ERROR CODE POSITIVE JSB $LIBR BEFORE CONVERTING TO ASCII NOP FOR ERROR MESSAGE CCE (E)=1 FOR DECIMAL CONVERSION JSB $CVT3 JSB $LIBX DEF *+1 DEF *+1 INA DLD A,I GET LAST 4 DIGITS OF ERROR CODE DST ERMNO INTO ERROR MESSAGE DLD FNAME MOVE CURRENT FILENAME DST ERMNM INTO ERROR MESSAGE LDA FNAME+2 STA ERMNM+2 LDA PRMPT GET INITIATING TERMINAL'S LU SZA,RSS OR, IF NON-INTERACTIVE, LU # 1 LDB D1 SZA LDB INLU STB LU2 AND STORE IN EXEC CALL JSB EXEC WRITE ERROR MESSAGE DEF *+1+4 DEF D2 DEF LU2 DEF ERMSG DEF D12 JMP EXIT * * * * MESS1 ASC 7,SGPRP STARTED MESS2 ASC 5,SGPRP DONE ASKMP ASC 10,MAIN PROGRAM NAME? _ ASKSG ASC 11,/E OR SEGMENT NAME? __ ERMSG ASC 12, FMP ERROR -#### FNAMEX SIGN EQU ERMSG+5 ERMNO EQU ERMSG+6 ERMNM EQU ERMSG+9 MINUS ASC 1, - PLUS ASC 1, DMBUF DEF MBUF DIBUF DEF IBUF DABSD DEF WORD1 LHALF OCT 177400 FILNM BSS 3 /E ASC 1,/E ABS OCT 2310 UPDTA OCT 2312 LEN NOP ERR NOP TEMP EQU ERR SRECN NOP DVR EQU SRECN TEMP2 NOP LU2 EQU TEMP2 SUB EQU TEMP2 INLU NOP PRMPT NOP * B37 OCT 37 B77 OCT 77 B400 OCT 400 D1 DEC 1 D2 DEC 2 D3 DEC 3 D5 DEC 5 D6 DEC 6 D7 DEC 7 D8 DEC 8 D10 DEC 10 D12 DEC 12 D13 DEC 13 D128 DEC 128 MD1 DEC -1 MD21 DEC -21 * HMAIN NOP HBASE NOP MLEN NOP MBUF BSS 10 IBUF BSS 10 ABUF BSS 128 ABSCT EQU ABUF ABSAD EQU ABUF+1 WORD1 EQU ABUF+2 WORD2 EQU ABUF+3 CKSUM EQU ABUF+4 PBUF BSS 33 FNAME EQU PBUF+1 SC EQU PBUF+5 CR EQU PBUF+9 IDCB1 BSS 144 IDCB2 BSS 144 * * BSS 0 SIZE OF MODULE END SGPRP