ASMB,R,L,C,Q HED LOCF * NAME: LOCF * SOURCE: 92067-18136 * 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 LOCF,7 92067-16125 REV.1903 781110 ENT LOCF,ELOCF EXT P.PAS,.ENTR EXT .DDE, .DMP, .DAD * * * * * LOCF RETURNS THE CURRENT STATUS OF A * RTE FILE TO THE CALLER. * * * * THE FORTRAN CALLING SEQUENCE IS: * * * CALL LOCF(IDCB,IERR,IREC,IRS,IOFF,JSEC,JLU,JTY,JREC) OR * CALL ELOCF(IDCB,IERR,IREC,IRS,IOFF,JSEC,JLU,JTY,JREC) * * * * W H E R E: * * * IDCB IS THE DATA CONTROL BLOCK FOR THE FILE. * * IERR IS THE ERROR CODE RETURN. * POSSIBLE CODES ARE: * 0 - NO ERROR * -11 - DCB NOT OPEN * -10 - NOT ENOUGH PARAMETERS * -30 - VALUE TOO LARGE FOR PARAMETER * * IREC IS THE RECORD NUMBER OF THE NEXT RECORD. * * IRS IS THE RELATIVE SECTOR OF THE NEXT RECORD./2 * * IOFF IS THE OFFSET IN THE SECTOR OF THE NEXT RECORD. * * JSEC IS THE NO. OF SECTORS IN THE FILE (OR EXTENT). * * JLU IS THE FILE'S LOGICAL UNIT. * * JTY IS THE FILE'S TYPE. * * JREC IS THE RECORD SIZE. * * * ALL PARAMETERS AFTER IREC ARE OPTIONAL. * * * FOR LOCF CALLS, IREC, IRB, JSEC ARE SINGLE WORD INTEGERS. * FOR ELOCF CALLS, IREC, IRB, JSEC ARE DOUBLE WORD INTEGERS. * SKP * * ELOCF DEC -1 LDA ELOCF STA LOCF JMP LOCF+1 * * * DCB NOP IER DEF DM IREC DEF DM IRS DEF DM IOFF DEF DM JSEC DEF DM JLU DEF DM JTY DEF DM JREC DEF DM * LOCF NOP ENTRY JSB .ENTR GET DFDCB DEF DCB PARAMETER ADDRESSES * LDA N10 TEST FOR LDB IREC NOT ENOUGH CPB DFDM PARAMETERS JMP EXIT NOT ENOUGH - EXIT LDA DCB SET A TO GET DCB CLB,CCE SET TO GET ERB,CLE ACTUAL WORDS JSB P.PAS CALL TO PASS N16 DEC -16 DCB LU NOP PARAMETERS TMP NOP TYP NOP TRK NOP SEC NOP #SEC NOP SIZE NOP COUNT NOP SEC/T NOP OPCLS NOP CTRK NOP CSEC NOP BUFPT NOP REC1 NOP REC NOP EXNO NOP * LDB OPCLS IS LDA N11 FILE CPB XEQT OPEN? JMP OK YES; JUMP EXIT STA IER,I NO; SET EXIT CODE LDB N9 SET UP STB COUNT AND LDB DFDCB RESTORE STB TMP DUMMY LDB DFDM PARAMETER STB TMP,I ADDRESSES ISZ TMP ISZ COUNT IN JMP *-3 CALL CCB RESET LOCF\ELOCF STB ELOCF FLAG JMP LOCF,I EXIT * * * OK LDA #SEC GET SIZE IN +SECTORS CLB OR IN -TRACKS SSA,RSS IF IN -TRACKS CONVERT TO JMP OK.1 DOUBLE WORD NUMBER CMA,INA OF SECTORS LSL 8 OK.1 SWP DST FSIZE SAVE DOUBLE WORD SIZE IN SECTORS LDA AREC1 GET RECORD # LDB IREC AND SET IN JSB PRMRT RETURN PARAMETERS LDA TYP GET THE TYPE SZA,RSS SET NEG AND TEST FOR ZERO JMP TYPST TYPE ZERO SO JUMP LDA AFSIZ SET SIZE LDB JSEC IN RETURN JSB PRMRT PARAMETERS LDA TYP GET TYPE AGAIN CMA,INA AND MAKE IT NEGATIVE ADA .2 IF THREE OR GREATER SSA THEN JMP NOTRA JUMP NOT RAMDOM ACCESS CLA GET RECORD LENGTH LDB SIZE AND MAKE INTO DST DTMP A DOUBLE WORD DLD REC1 GET CURRENT RECORD NUMBER JSB .DDE LESS ONE JSB .DMP AND MULTIPLY BY DEF DTMP RECORD LENGTH SWP STA TMP AND B177 MASK OFF BLOCK OFFSET AND STA IOFF,I SET IN RETURN PARAMETERS XOR TMP ASR 7 CONVERT TO NUMBER OF BLOCKS SWP JMP STRS GO RETURN IT NOTRA LDA TRK TYPE >= 3 CMA,INA ((STARTING TRACK - CURRENT TRACK) ADA CTRK * #SECTORS PER TRACK) MPY SEC/T - STARTING SECTOR SWP + CURRENT SECTOR DST DTMP LDB SEC CMB,INB ADB CSEC CLA MAKE INTO A DOUBLE WORD SSB SO CAN USE DOUBLE WORD CCA ADD ROUTINE. JSB .DAD DEF DTMP # SECTORS "INTO" THIS EXTENT SWP ASR 1 CONVERT TO BLOCKS SWP DST DTMP # BLOCKS "INTO" THIS EXTEN * CLA MULTIPLY FILE SIZE LDB EXNO IN SECTORS TIMES JSB .DMP THE NUMBER OF DEF FSIZE PREVIOUS EXTENTS SWP ASR 1 CONVERT TO BLOCKS SWP JSB .DAD ADD TO # BLOCKS "INTO" THE CURRENT DEF DTMP EXTENT AND SAVE DST FSIZE * LDA DCB COMPUTE CMA,INA CURRENT ADA BUFPT BUFFER OFFSET ADA N16 ADJUST FOR BUFFER ADDRESS CLB ADJUST OFFSET TO DIV .128 128 WORD BASE STB IOFF,I RETURN OFFSET CLB ADD IN # 128 WORD SWP BLOCKS IN JSB .DAD DCB BUFFER (BEFORE CURRENT DEF FSIZE POSITION) TO GET CURRENT STRS DST FSIZE BLOCK OFFSET INTO FILE LDA AFSIZ LDB IRS JSB PRMRT RETURN CURRENT BLOCK OFFSET TYPST LDB TYP GET AND SET STB JTY,I TYPE LDA LU GET LU (DISC FILE) SZB,RSS IS IT A DISC FILE? LDA TRK NO; USE TYPE 0 LU AND B77 MASK STA JLU,I AND SET LDA SIZE GET THE RECORD STA JREC,I SIZE AND SET IT CLA NO ERRORS JMP EXIT RETURN * * * * * PRMRT ROUTINE TO STUFF A DOUBLE WORD INTO A SINGLE OR * DOUBLE WORD RETURN PARAMETER (DEPENDING ON * WHETHER THE SINGLE WORD OR THE DOUBLE WORD * ROUTINE WAS CALLED) * * ON ENTRY * A = ADDRESS OF DOUBLE WORD * B = ADDRESS OF DESTINATION * * * ERROR 30 EXIT IS TAKEN IF VALUE IS >32K BUT SINGLE WORD * ROUTINE WAS CALLED. * * PRMRT NOP STB TMP LDB ELOCF CPB N1 JMP PR.1 DLD A,I DST TMP,I JMP PRMRT,I PR.1 DLD A,I STB TMP,I LDB N30 SZA JMP EXIT JMP PRMRT,I * * * A EQU 0 B EQU 1 XEQT EQU 1717B * .2 DEC 2 .128 DEC 128 * N1 DEC -1 N9 DEC -9 N10 DEC -10 N11 DEC -11 N30 DEC -30 * B77 OCT 77 B177 OCT 177 * FSIZE BSS 2 AFSIZ DEF FSIZE DTMP BSS 2 DM BSS 2 DFDM DEF DM AREC1 DEF REC1 * END EQU * * END