ASMB,R,L,C HED READF * NAME: READF * SOURCE: 92064-18065 * RELOC: 92064-16061 * PGMR: G.L.M. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. 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 92064-16061 REV.1650 761115 * ENT READF,WRITF EXT EXEC,.ENTR SUP UNL * * * 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) * * O R * * IER = READF(IDCB,IERR,IBUF,IL,L,N) * * TO READ, O R * * CALL WRITF(IDCB,IERR,IBUF,IL,N) * * O R * * IER = WRITF(IDCB,IERR,IBUF,IL,N) * * TO WRITE. * * * W H E R E: * * IDCB IS THE 16 WORD DATA CONTROL BLOCK * FOR THE REFERENCED FILE. * LST * IERR IS THE ERROR RETURN LOCATION * ERRORS ARE AS FOLLOWS: * * CODE ERROR CONDITION * 0 OR >0 NO ERROR * -5 ILLEGAL RECORD NUMBER OR * ATTEMPT TO READ A RECORD NOT WRITTEN * -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 * * IER SEE IERR - RETURNED AS FUNCTION * UNL * 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. * * * 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 LST WRITF NOP WRITE ENTRY POINT LDA WRITF TRANSFER RETURN ADDRESS STA DEADF TO READ ENTRY JMP RST GO RESET ENTRY PARMS * READF NOP READ ENTRY POINT LDA READF TRANSFER RETURN ADDRESS STA DEADF TO DUMMY ENTRY POINT CCA SET ENTRY FLAG RST STA ENTFG SET ENTRY FLAG * LDA DZERO RESET STA BUF ENTRY STA IL PARMS STA L FOR M-SYSTEM JMP DEADF+1 GO FETCH ENTRY PARMS * SPC 3 DCB NOP DCB POINTER IERR NOP ERROR BOX BUF DEF ZER0 USER BUFFER ADDRESS IL DEF ZER0 REQUEST LENGTH L DEF ZER0 RETURN LENGTH N DEF ZER0 RECORD NUMBER DEADF NOP READ ENTRY POINT JSB .ENTR TRANSFER THE DEF DCB PARAMETERS LDB DCB SET ADB .3 UP STB LU0 NEEDED INB DCB STB EOF0 POINTERS ADB .2 STB RL ADB .3 STB OCFLG ADB .5 STB RC * SPC 2 LDA N10 PRESET FOR MISSING PRAM ERROR LDB BUF BUFFER MUST BE CPB DZERO SUPPLIED JMP EXIT ELSE MISSING PRAM LDB OCFLG,I IF NOT OPEN ADA N1 CPB XEQT THEN JMP TYP00 SPC 5 EXIT STA IERR,I SET THE ERROR CODE JMP DEADF,I RETURN SPC 2 EOFT0 CCA SET RETURN LEGNTH STA L,I FOR EOF SPC 2 EXIOK ISZ RC,I STEP RECORD COUNT CLA DONE - OK SO JMP EXIT EXIT SKP TYP00 LDB ENTFG 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,INA SET UP THE REQUEST CODE SSB,RSS FOR THE CALL INA AND ELA,RAR (PREVENT ABORTS) STA RQ SET IT FOR THE CALL. JSB EXEC 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 CALL REJECTED BY DRIVER ISZ TMP TEST READ WRITE JMP EXIOK GO EXIT IF WRITE STB L,I SET THE RETURN LENGTH SPC 1 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 EOFT0 GO DO EOF THING * SZB IF ZERO WORDS READ THEN SKIP JMP EXIOK ELSE GO EXIT GOOD XFER * 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 * JMP EOFT0 * * * * * * SPC 2 EOFW0 JSB EXEC WRITE TYPE ZERO EOF DEF EOFRT RETURN ADDRESS DEF .3 DEF EOF0,I DEF N1 EOFRT 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 OCT -1 N10 DEC -10 N17 DEC -17 .2 OCT 2 .3 OCT 3 .5 OCT 5 B70 OCT 70 DZERO DEF ZER0 TMP EQU READF ENTFG EQU WRITF ZER0 NOP * LU0 NOP EOF0 NOP RL NOP OCFLG NOP RC NOP SPC 5 RQ NOP SPC 3 A EQU 0 B EQU 1 XEQT EQU 1717B SPC 1 PLENG EQU * END