ASMB,R,L,C,Q HED READF - WITH RENT. I/O * NAME: READF * SOURCE: 92067-18130 * RELOC: 92067-16125 * PGMR: G.A.A.,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 READF,7 92067-16125 REV.2001 791015 ENT READF,WRITF,EREAD,EWRIT EXT EXEC, REIO, .ENTR, P.PAS EXT RW$UB, $KIP, D$XFR, R/W$, RFLG$ EXT .DAD, .DMP, .DDI, .DIN, .DSB, .DDE SUP * * * THIS IS THE RTE FILE MANAGEMENT PACKAGE * READ/WRITE SUBROUTINE. * * THIS ROUTINE WILL READ OR WRITE ANY TYPE FILE. * * * CALLING SEQUENCE: * * CALL READF(IDCB,IERR,IBUF,IL,L,N) OR * CALL EREAD(IDCB,IERR,IBUF,IL,L,N) * * O R * * IER = READF(IDCB,IERR,IBUF,IL,L,N) OR * IER = EREAD(IDCB,IERR,IBUF,IL,L,N) * * TO READ, O R * * CALL WRITF(IDCB,IERR,IBUF,IL,N) OR * CALL EWRIT(IDCB,IERR,IBUF,IL,N) * * O R * * IER = WRITF(IDCB,IERR,IBUF,IL,N) OR * IER = EWRIT(IDCB,IERR,IBUF,IL,N) * * TO WRITE. * * * W H E R E: * * IDCB IS THE 144 WORD DATA CONTROL BLOCK * FOR THE REFERENCED FILE. * * IERR IS THE ERROR RETURN LOCATION * ERRORS ARE AS FOLLOWS: * * CODE ERROR CONDITION * 0 OR >0 NO ERROR * -1 A REQUIRED DISC OR DEVICE IS DOWN * -5 ILLEGAL RECORD NUMBER OR * ATTEMPT TO READ A RECORD NOT WRITTEN * -7 INVALID SECURITY CODE FOR * WRITE (FILE IS READ ONLY) * -10 A REQUIRED PARAMETER IS MISSING * -11 THE DCB IS NOT OPEN * -12 SOF OR EOF SENSED ON READ * -17 ILLEGAL REQUEST TO A TYPE ZERO FILE * -19 ILLEGAL ACCESS ON A SYSTEM DISC * * IER SEE IERR - RETURNED AS FUNCTION * * IBUF IS THE BUFFER TO BE USED TO READ OR WRITE. * * IL IS THE REQUESTED TRANSFER LENGTH IN WORDS. * * L IS THE LENGTH AS READ IN WORDS. * * N IS THE REQUESTED RECORD NUMBER * IF N>0 OR IF N<0 THE RELATIVE RECORD * NUMBER FROM THE CURRENT POSITION. * N IS LEGAL ON TYPE 1 AND 2 FILES ONLY. * FOR READF AND WRITF, N IS A SINGLE WORD RECORD NUMBER. * FOR EREAD AND EWRIT, N IS A DOUBLE WORD RECORD NUMBER. * * * O P T I O N S: * * IL IS OPTIONAL ON TYPE 1 AND 2 FILES. * ON TYPE 1 FILES, 128 IS USED; * ON TYPE 2 FILES THE RECORD LENGTH IS USED. * * L IS OPTIONAL AT ALL TIMES. * * N IS OPTIONAL AND IS IGNORED ON FILES * OF TYPES OTHER THAN 1 AND 2. IF NOT * SUPPLIED, ZERO IS USED. * THE FIRST RECORD IN A FILE IS RECORD #1. * * * E X T E R N A L S: * * RW$UB IS USED TO READ OR WRITE WORDS * FROM OR TO FILES OF TYPE 2 OR * ABOVE. IT HANDLES ALL SECTOR, * TRACK, AND EXTENT SWITCHING FOR * THESE FILES AND ALSO WRITES AND/OR * READS BLOCKS FROM THE FILE AS * REQUIRED. READS ARE CONDITIONAL * ON RFLG$. A GLOBAL FLAG WHICH * MUST BE NON-ZERO BEFORE A READ * IS EXECUTED. * * RW$UB CALLING SEQUENCE IS: * * LDB #WORDS * LDA DCB ADDRESS * CLE/CCE WRITE/READ * JSB RW$UB CALL * DEF UBUF ADDRESS OF USER'S BUFFER * JMP ERROR ERROR RETURN (A = CONDITION) * -- NORMAL RETURN SKP * * EREAD DEC -1 LDA EREAD TRANSFER RETURN ADDRESS STA READF TO READ ENTRY JMP READF+1 CONTINUE * WRITF DEC -1 LDA WRITF TRANSFER RETURN ADDRESS STA READF TO READ ENTRY CLA SET WRITE\READ FLAG TO STA WFLAG INDICATE WRITE (0) JMP READF+1 CONTINUE * EWRIT DEC -1 LDA EWRIT TRANSFER RETURN ADDRESS STA READF TO READ ENTRY CLA SET WRITE\READ FLAG TO STA WFLAG INDICATE WRITE (0) JMP READF+1 CONTINUE * * DCB NOP DCB POINTER IERR NOP ERROR RETURN BUF OCT -17 USER BUFFER ADDRESS IL DEF DM REQUEST LENGTH L DEF ZERO RETURN LNGTH (READ) RECORD NUMBER (WRITE) N DEF ZERO RECORD NUMBER (READ) * READF NOP ENTRY POINT JSB .ENTR FETCH INCOMING DEF DCB PARAMETERS LDA EREAD GET EREAD ENTRY POINT SSA EREAD CALL? #-1? JMP R.1 NO - TRY ANOTHER DLD N,I YES - LOAD DOUBLE WORD RECORD NUMBER JMP READ0 AND GO SAVE IT * R.1 LDA WRITF GET WRITF ENTRY POINT SSA WRITF CALL? #-? JMP R.2 NO - GO TRY ANOTHER LDB L,I YES - GET RECORD NUMBER, CLA MAKE INTO A DOUBLE WORD SSB TAKING INTO ACCOUNT THAT IT CCA MAY BE POSITIVE OR NEGATIVE JMP READ0 AND GO SAVE IT * R.2 LDA EWRIT GET EWRIT ENTRY POINT SSA EWRIT CALL? #-1? JMP R.3 NO - GO TRY ANOTHER DLD L,I YES - GET DOUBLE WORD RECORD NUMBER JMP READ0 AND GO SAVE IT. R.3 CLA MUST BE A READF CALL SO GET RECORD LDB N,I NUMBER AND MAKE INTO A DOUBLE WORD SSB TAKING INTO ACCOUNT THAT IT CCA MAY BE POSITIVE OR NEGATIVE READ0 DST RECRD SAVE DOUBLE WORD RECORD NUMBER * LDA DCB SET UP THE CLB,CLE DCB JSB P.PAS ADDRESSES N17 DEC -17 DTMP NOP USE FIRST TWO AS DTM1 NOP DOUBLE WORD TEMP STORAGE TYPE NOP ADDRESS OF TYPE LU0 NOP LU (FOR 0 FILE) TRACK EQU LU0 ALSO TRACK EOF0 NOP EOF CODE (0 FILE) BSECT EQU EOF0 ALSO SECTOR SPAC NOP SPACING CODE (0 FILE) SIZE EQU SPAC ALSO FILE SIZE RL NOP RECORD LENGTH SCRWF NOP SECURITY/OPEN MODE/READ\WRITE FLAG #SC/T NOP SECTORS/TRACK OCFLG NOP OPEN FLAG TR NOP CURRENT TRACK SECT NOP CURRENT SECTOR BUFPT NOP CURRENT POSITION RC1 NOP DOUBLE WORD RC NOP RECORD COUNT TMP NOP BFSZ EQU TMP BUFD NOP SPC 2 LDA BUFPT GET CURRENT BUFFER POINTER STA TDCBP AND SAVE IN CASE OF EOD LDA SCRWF,I GET BUFPT AND RWFLG STA TRWFP CONTENTS AND SAVE IN LDA BUFPT,I CASE OF END OF STA TBUFP DATA. * * LDA N10 PRESET FOR MISSING PRAM ERROR LDB BUF BUFFER MUST BE SSB SUPPLIED JMP EXIT ELSE MISSING PRAM * LDB OCFLG,I IF NOT OPEN LDA N11 CPB XEQT THEN RSS JMP EXIT EXIT FILE NOT OPEN * LDB WFLAG GET READ WRITE FLAG LDA SCRWF,I AND SECURITY CODE AND BLMSK MASK TO DCB LENGTH STA BFSZ SAVE BLOCK LENGTH XOR SCRWF,I GET THE SECURITY CODE/UDATE FLAG ARS,ARS KEEP SC IN BIT 15 AND GET OPEN ARS MODE TO BIT 0 SSB,RSS IF WRITE SSA AND JMP SCOK BAD SECURITY * LDA N7 THEN EXIT STA IERR,I SET THE ERROR CODE CPA N33 ERROR -33? (END OF DISC ON CREAT) JMP EOD CPA N14 ERROR -14? (END OF DIR ON CREAT) JMP EOD EXIT1 LDB N17 STB BUF RESTORE LDB DMBUF OPTIONAL STB IL PARAMETER LDB DZERO ADDRESS STB L FOR STB N NEXT CLB CALL STB ZERO STB ZERO+1 STB DM CCB PRESET READ\WRITE FLAG TO STB WFLAG INDICATE READ (-1) STB EREAD RESET OTHER ENTRY POINTS STB EWRIT STB WRITF JMP READF,I RETURN * * EOD CCB SET -1 INTO LAST STB TBUFP,I POSITION IN DCB. DLD TBUFP NOW RESTORE BUFFER AND STA TDCBP,I FLAG WORDS. STB SCRWF,I LDA IERR,I RESET ERROR CODE JMP EXIT1 AND FINISH EXIT WORK. * * TDCBP NOP TBUFP NOP KEEP THESE TOGETHER TRWFP NOP * * SCOK ERA GET OPEN MODE TO E-REGISTER CLA SSB IF WRITE, A = 0 CCA IF READ, A = -1 SEZ IF WRITE AND UPDATE CCA OPEN, A = -1 STA RFLG$ USE A AS READ FLAG LDA TYPE,I GET TYPE CPA .2 TWO JMP LTEST GO TEST FOR EOF * CPA .1 IF TYPE ONE RSS SKIP JMP EOFTS ELSE GO TO EOF TEST * RANDOM ACCESS FILE * LDA SCRWF,I CLEAR WRITTEN-ON FLAG RAR,CLE,ELA IN DCB TO INHIBIT R/W$ STA SCRWF,I WRITE FOR TYPE ONE FILES LDA .128 FORCE LENGTH TO 128 FOR TYPE 1 FILES STA RL,I FOR THE POSITION ROUTINE STA BFSZ FORCE BLOCK LENGTH TO 128 FOR TYPE 1 * LTEST LDA IL,I GET THE REQUEST LENGTH SSA IF EOF REQUEST THEN JMP EXIOK GO EXIT NO ACTION * CLA SET UP RECORD LENGTH LDB RL,I AND DCB BUFFER LENGTH DST DTMP1 AS DOUBLE WORDS FOR USE LDB BFSZ LATER IN DOUBLE WORD DST DTMP2 CALCULATIONS. DLD RECRD GET SPECIFIED DOUBLE WORD RECORD NUMBER SZB,RSS IF ZERO SZA OR NEGATIVE SSA IT IS RELATIVE RSS RECORD POSITION. JMP ABPOS ELSE IS ABSOLUTE RECORD NUMBER JSB .DAD RELATIVE - SO ADD DEF RC1,I TO CURRENT RECORD POSITION ABPOS DST DTMP SAVE NEW RECORD NUMBER JSB .DDE DECREMENT NEW RECORD NUMBER BY 1 SSA IF NEGATIVE JMP EOFEX TAKE ERROR EXIT JSB .DMP MULTIPLY RECORD NUMBER - 1 DEF DTMP1 BY RECORD LENGTH DST DTMP1 SAVE (RC - 1)RL JSB .DDI USE DOUBLE WORD DIVIDE THIS DEF DTMP2 TIME. DOUBLE WORD QUOTIENT IN A,B JSB .DMP MULTIPLY BY DCB BUFFER SIZE DEF DTMP2 ((RC - 1)RL/BFSZ)*BFSZ DST DTMP2 KEEP TEMPORARILY DLD DTMP1 GET (RC - 1)RL AGAIN JSB .DSB SUBTRACT POSITION IN WORDS OF DEF DTMP2 RELATIVE BEGINNING OF DCB BUFFER IN FILE STB OCFLG DIFFERENCE IS OFFSET IN DCB BUFFER - SAVE DLD DTMP2 FIND SECTOR ADDRESS OF BEGINNING OF DCB IN FILE SWP CONVERT TO ASR 6 EVEN SECTOR SWP ADDRESS DST DTMP1 AND SAVE * LDA SIZE,I GET FILE SIZE IN +SECTORS OR -TRACKS CLB SSA,RSS IN +SECTORS? JMP INSEC YES CMA,INA NO - CONVERT TO LSL 8 +SECTORS INSEC SWP A,B = DOUBLE WORD # SECTORS IN FILE DST DTMP2 SAVE IT JSB .DSB SUBTRACT NEW DEF DTMP1 SECTOR ADDRESS JSB .DDE DECREMENT BY 1 SIZE - DTMP1 - 1 SSA CHECK FOR EOF JMP EOFEX EOF SO TAKE ERROR EXIT * CLA ADD FILE'S BASE LDB BSECT,I SECTOR TO NEW JSB .DAD SECTOR ADDRESS DEF DTMP1 SWP DIV #SC/T,I DIVIDE BY NO. SECT/TRACK ADA TRACK,I ADD BASE TRACK-A = TRACK DST DTMP1 SAVE NEW TR/SECTOR ADDRESS CPA TR,I IF SAME CCA AS CPB SECT,I CURRENT LDB 0 POSITION CLE,SSB THEN JMP RACS SKIP * LDB DCB ELSE JSB R/W$ WRITE THE CURRENT BLOCK JMP EXIT IF NECESSARY * DLD DTMP1 THEN SET THE NEW DST TR,I TRACK AND SECTOR ADDRESS * * RACS LDA OCFLG SET THE OFFSET ADA BUFD ADD BUFFER ADDRESS STA BUFPT,I AND SET THE POINTER DLD DTMP SET THE DST RC1,I NEW RECORD NUMBER SPC 2 EOFTS LDA BUFPT SET THE INDIRECT ADA MSIGN BIT ON STA BUFPT THE BUFFER POINTER LDA TYPE,I GET FILE TYPE CMA,INA,SZA,RSS IF 0 JMP TYP00 OR 1 * INA,SZA,RSS GO DO 0/1 THING JMP .1TYP * INA,SZA,RSS IF TYPE 2 JMP TWOTY GO DO READ TEST * INTS LDA SCRWF,I GET THE IN CORE FLAG AND =B7 IF IN CCE,SZA CORE JMP TWOSP GO TEST FOR TYPE TWO * LDB DCB ELSE READ JSB R/W$ THE BLOCK JMP EXIT ERROR EXIT SPC 2 TWOSP LDA TYPE,I GET THE TYPE AGAIN TWORW LDB RL,I GET THE RECORD LENGTH (TYPE 2) CPA .2 IF TYPE 2 JMP .2RW GO DO READ WRITE SPC 2 * * TYPE 3 AND ABOVE READ/WRITE LOOP * LDA WFLAG SET READ WRITE FLAG ELA IN E 0=> WRITE 1=>READ LDB BUFPT,I GET CURRENT WORD SSB,RSS IF <0 THEN EOF JMP RDLEN NO <0 - SKIP * LDA SCRWF,I EOF RAR,RAR SET (READ) OR CLEAR (WRITE) ELA,RAL EOF SENT STA SCRWF,I BIT IN DCB LDA WFLAG GET THE DIRECTION AGAIN SSA,RSS IF WRITE JMP SWRI GO BACK UP THE COUNT IF REQUIRED * * READ AT EOF * EOFT0 STA L,I EOF HERE WITH A = -1 CLA,SEZ IF FIRST EOF SKIP EOFEX LDA N12 ELSE EOF ERROR SSA IF 2ND EOF THEN RETURN WITH ERROR JMP EXIT DLD RC1,I ELSE STEP JSB .DIN RECORD DST RC1,I COUNT CLA JMP EXIT RETURN NO ERROR * * WRITE AT EOF * SWRI SEZ,RSS EOF WAS PASSED TO THE USER? JMP SWRI1 NO - SKIP DLD RC1,I YES - THEN BACK JSB .DDE UP THE RECORD COUNT DST RC1,I SWRI1 CLB,CLE RECOVER THE E BIT FOR WRITE STB RFLG$ CLEAR THE READ FLAG RDLEN CCB,SEZ IF READ JMP RDLE1 SKIP WRITE CHECKS * LDA IL,I GET REQUEST LENGTH CMA,CCE,SSA,INA,RSS IF WRITE EOF JMP EOFWR GO WRITE EOF * ADA BUFPT,I COMPARE NEW LENGTH TO OLD LDB RFLG$ GET READ FLAG CLE,SZA IF NEW LENGTH = OLD SZB,RSS OR IF NOT UPDATE JMP RDLE2 CONTINUE WRITE SPC 1 ERR5 LDA N5 ELSE UPDATE ERROR JMP EXIT GO EXIT SPC 1 RDLE1 LDA DMBUF GET LENGTH RETURN ADDRESS RDLE2 CLB,SEZ,INB,RSS IF WRITE LDA IL USE REQUEST LENGTH STA BUA SET ADDRESS OF BUFFER LDA DCB SET THE DCB ADDRESS JSB RW$UB GO READ FIRST LENGTH WORD BUA DEF L,I JMP EXIT ERROR EXIT * LDB BUA,I .2RW LDA WFLAG GET READ/WRITE FLAG ELA TO E CLA,SEZ,RSS IF WRITE THEN SKIP JMP WRIT WRITE SO SKIP * LDA IL CHECK IF LENGTH SUPPLIED CPA DMBUF IF COMPARE THEN NO LENGTH CLA,RSS NOT SUPPLIED SO FORCE TRANSFER LDA B SUPPLIED SO CHECK FOR RECORD CMA,INA TOO LONG FOR ADA IL,I BUFFER SSA SKIP IF OK LDB IL,I TOO LONG SO USE SUPPIED LENGTH STB L,I SET AS RETURN LENGTH WRIT STA SKIP SAVE RESIDUE FOR SKIP AFTER READ LDA DCB DCB TO A JSB RW$UB READ THE RECORD DEF BUF,I TO USER BUFFER JMP EXIT ERROR EXIT * LDB TYPE,I GET FILE TYPE CPB .2 IF 2 JMP EXT0 THEN DONE - GO EXIT * LDA DCB SET UP TO SKIP LDB SKIP THE RESIDUE CMB,SSB,INB SET + NO WORDS SKIP IF >0 JMP NOSKP <0 SO DON'T SKIP * JSB $KIP GO SKIP THE WORDS JMP EXIT ERROR EXIT * NOSKP LDA WFLAG ELSE ELA SET TO LDA ADTMP IF READ USE TEMPORARY SPACE SEZ,RSS READ /WRITE THE LDA IL TWIN WORD STA BUFAA WORD LDA DCB TO TEMP SPACE CLB,INB OR FROM JSB RW$UB USER PARAMETER BUFAA NOP JMP EXIT ERROR - EXIT * LDA BUFAA,I GET TWIN LENGTH WORD CPA BUA,I IF TWIN MISMATCH CCB,RSS JMP ERR5 THEN BAD RECORD - EXIT * LDA RFLG$ GET READ FLAG CLE,SZA,RSS IF NOT READING JMP EOFWR GO SET EOF IN FILE * EXT0 DLD RC1,I STEP THE JSB .DIN RECORD DST RC1,I COUNT EXIOK CLA DONE - OK SO JMP EXIT EXIT * * EOFWR STB BUFPT,I SET EOF IN DCB LDA SCRWF,I SET UP THE EOF RAR,ERA READ FLAG AND CCE THE WRITTEN-ON ERA,RAL FLAG AND THE IN CORE CCE RAL,ELA FLAG IN THE DCB STA SCRWF,I JMP EXT0 GO EXIT SPC 2 TWOTY LDB RFLG$ GET READ WRITE FLAG SZB IF READING JMP INTS GO TEST FOR IN CORE * JMP TWOSP ELSE GO WRITE. SPC 2 * * TYPE 0 OR 1 FILE -- TRANSFER FROM CORE * .1TYP LDA IL GET LENGTH ADDRESS LDB A,I GET LENGTH CPA DMBUF IF NOT SUPPLIED THEN LDB .128 USE 128 STB IL SAVE LOCALLY ADB B177 ROUND UP LSR 7 GET # OF SECTORS COVERED STB SKIP SAVE ROUNDED LENGTH CLA ADD # SECTORS COVERED JSB .DAD TO CURRENT RECORD # DEF RC1,I = # 128 WORD RECORDS DST DTMP SAVE NEW RECORD NUMBER JSB .DDE DECREMENT SWP LSL 1 CONVERT TO 64-WORD SECTORS SWP DST DTMP1 AND SAVE DLD DTMP2 GET DOUBLE WORD FILE SIZE IN SECTORS JSB .DSB SIZE - 2(SKIP + RC,I - 1) DEF DTMP1 SSA IF OUT OF FILE TAKE JMP EOFEX EOF EXIT * * LDA SKIP GET ROUNDED LENGTH LSL 7 SET TO CORRECT POSITION LDB WFLAG AND SSB,RSS RESET IF STA IL WRITE LDA IL GET XFER LENGTH FOR D$XFR SSB IF READ THEN STA L,I SET THE RETURN LENGTH ELB SET E FOR DXFR$ CALL LDB BUF GET THE BUFFER ADDRESS STB BUFA SET IT IN THE CALL LDB DCB GET THE DCB ADDRESS JSB D$XFR GO DO THE TRANSFER BUFA NOP JMP EXIT ERROR RETURN * DLD DTMP SET THE NEW DST RC1,I RECORD COUNT JMP EXIOK AND EXIT * TYP00 LDB WFLAG IF READ STB TMP SET READ WRITE FLAG FOR EOF TEST LDA RL,I GET THE READ WRITE LEGAL FLAG SSB,RSS IF WRITE RAR SHIFT THE WRITE FLAG TO BIT 15 SSA,RSS TEST THE FLAG JMP EX17 ILLEGAL REQUEST GO EXIT SPC 1 CCA IF READ SSB THEN JMP TYP01 SKIP * CPA IL,I EOF? JMP EOFW0 YES; GO MAKE CONTROL RQ SPC 1 TYP01 CLA,CCE,INA SET UP THE REQUEST CODE SSB,RSS FOR THE CALL INA AND ELA,RAR STA RQ IT. JSB REIO CALL DEF RTN THE DEF RQ EXEC DEF LU0,I FOR DEF BUF,I I/O DEF IL,I TO/FROM USER BUFFER. RTN JMP EX17 DRIVER REJECTED CALL - ERROR. ISZ TMP TEST READ WRITE JMP EXT0 GO EXIT IF WRITE * STB L,I SET THE RETURN LENGTH SPC 1 SZB IF ZERO WORDS READ THEN SKIP JMP EXT0 ELSE GO EXIT GOOD XFER * RAL,CLE,ELA PUT THE DOWN BIT IN E ALF,RAL SHIFT THE EOF BIT RAL TO BIT 15 SSA IF EOF BIT SET JMP EOF00 GO DO EOF THING * AND B70 MASK THE HIGH ORDER TYPE BIT SEZ,CCE,SZA IF NOT DOWN OR IF TYPE <10 THEN EOF JMP TYP00 ELSE RETRY THE XFER * EOF00 CCA,CLE SET RETURN LENGTH JMP EOFT0 SPC 2 EOFW0 JSB EXEC WRITE TYPE ZERO EOF DEF EOFRT RETURN ADDRESS DEF .3I CATCH ERRORS DEF EOF0,I DEF N1 EOFRT RSS IF ERROR RETURN THE CODE JMP EXIOK SPC 3 EX17 LDA N17 SET UP ILLEGAL REQUEST FLAG JMP EXIT GO EXIT SPC 2 * * * C O N S T A N T S * * N1 DEC -1 N5 DEC -5 N7 DEC -7 N10 DEC -10 N11 DEC -11 N12 DEC -12 N14 DEC -14 N33 DEC -33 * ZERO BSS 2 .1 DEC 1 .2 DEC 2 .128 DEC 128 * B70 OCT 70 B177 OCT 177 BLMSK OCT 77600 .3I DEF 3,I MSIGN DEF 0,I * ADTMP DEF DTMP DM NOP DMBUF DEF DM DZERO DEF ZERO SKIP NOP RQ NOP WFLAG DEC -1 MAY BE CHANGED TO ZERO!!! DTMP1 BSS 2 DTMP2 BSS 2 RECRD BSS 2 * A EQU 0 B EQU 1 XEQT EQU 1717B SPC 1 PLENG EQU * END