ASMB,R,L,C,Q HED $OPEN * NAME: $OPEN * SOURCE: 92067-18141 * RELOC: 92067-16125 * PGMR: G.A.A. * * *************************************************************** * * (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 $OPEN,7 92067-16125 REV.1903 790103 EXT RWND$ ENT $OPEN SUP * * $OPEN IS A ROUTINE OF THE RTE FILE MANAGEMENT PACKAGE. * * $OPEN IS CALLLED BY OPEN AND CREAT TO SET UP THE * DCB. IT READS THE DIRECTORY INFORMATION * AND TRANSFERS THE INFORMATION FROM THERE * TO THE DCB. IT ALSO INITIALIZES THE REST * OF THE DCB. * * CALLING SEQUENCE: * (IT IS ASSUMED THAT WORDS 1 & 2 OF THE DCB ARE SET UP.) * * A = DCB ADDRESS * B = BUF ADDRESS WHERE BUF CONTAINS WORDS 4-8 * OF THE DIRECTORY ENTRY RETURNED FROM D.RTR * E = 1 IF TYPE 1 OVERRIDE * O = 1 IF AN UPDATE OPEN * * JSB $OPEN * DEF IBLK DEF OF LENGTH OF DCB OR ZERO * DEF #SECT DEF OF WORD CONTAINING #SEC/TRACK * IN THE HIGH HALF (PASSED FROM D.RTR) * JMP ERR ERROR RETURN * NORMAL RETURN * ON A NORMAL RETURN: * A AND B = GARBAGE * * ON AN ERROR RETURN, EITHER * A = -1 DISC ERROR OR * A = -9 TYPE ZERO OVERRIDE ERROR * IN EITHER CASE THE DCB IS NOT SET UP. * * $OPEN NOP ENTRY STB BUF SAVE THE BUFFER ADDRESS STA DCB AND THE DCB ADDRESS STA DCB2 ADA .5 OFFSET TO FILE SIZE WORD STA SIZE AND SAVE CLA SET UPDATE OPEN BIT SOC IN OPEN MODE WORD IF LDA =B10 UPDATE OPEN WAS REQUESTED STA OPNMD ISZ DCB INCREMENT DCB POINTER ISZ DCB TO TYPE WORD CLB,SEZ,INB IF TYPE 1 OVERRIDE STB DCB,I SET TYPE SEZ AND CCB THE STB TPFLG OVERRIDE SKIP FLAG CLB SET DCB LDA DCB EXTENT ADA .13 WORD STB A,I TO ZERO LDA N9 LDB BUF,I GET FILE TYPE SZB,RSS IF ZERO ISZ TPFLG AND OVERRIDE FLAG SET RSS JMP EREX EXIT - ERROR * LDB N5 SET TO MOVE 5 NXT LDA BUF,I PARAMETERS ISZ TPFLG IF OVERRIDE SET SKIP STA DCB,I SET PARAMETER ISZ DCB STEP ADDRESS ISZ BUF STEP SOURCE INB,SZB AND COUNT - DONE? JMP NXT NO; DO NEXT ONE LDB $OPEN,I GET ADDRESS OF DCB LENGTH ISZ $OPEN STEP POINTER LDA $OPEN,I GET #SECTORS PER TRACK LDA A,I TO A-REG ALF,ALF SHIFT TO LOWER BYTE AND =B377 MASK TO BITS 0-8 STA SEC/T AND SAVE. LDB B,I DCB LENGTH TO B-REG LSR 7 DIVIDE BY 128 TO GET BLOCKS SZB,RSS IF ZERO THEN INB USE ONE BLS CONVERT TO SECTORS NXBUF STB TPFLG SAVE IT CLB LDA SIZE,I GET FILE SIZE SSA,RSS +SECTORS OR -128 BLOCK CHUNKS JMP SEC1 ALREADY SECTORS - SKIP CMA,INA -CHUNKS - CONVERT TO +SECTORS LSL 8 IN B-REG AND A-REG SEC1 STA ASAVE DIVIDE BY DCB SIZE IN SECTORS ASR 15 A REGULAR DIVIDE COULD OVERFLOW ON DIV TPFLG LARGE FILES. SINCE ALL WE WANT TO LDA ASAVE KNOW IS IF THERE IS A REMAINDER, JUST RAL USE THIS ALGORITHM TO AVOID USE OF ASR 1 DOUBLE WORD DIVIDE, MULT, AND SUBTRACT DIV TPFLG COMPLIMENTS OF BILL GIBBONS SZB,RSS IF NO REMAINDER JMP BFOK THEN THE SIZE IS OK LDB N2 ELSE TRY ONE SMALLER ADB TPFLG THAN THE CURRENT JMP NXBUF ONE BFOK LDA TPFLG GET THE BUFFER SIZE AND LSL 6 CONVERT SECTORS TO WORDS IOR OPNMD INCLUDE OPEN MODE FLAG STA DCB,I SET IN DCB ISZ DCB GET NUMBER OF LDB SEC/T SECTORS PER TRACK STB DCB,I PUT IT IN THE DCB ISZ $OPEN STEP RETURN ADDRESS CLA OPEN EXTENT ZERO LDB DCB2 GET THE DCB ADDRESS JSB RWND$ SET REST OF DCB JMP $OPEN,I ERROR EXIT ADB N3 GET DOUBLE WORD RECORD CLA NUMBER TO 1 STA B,I INA INB STA B,I ISZ DCB STEP TO THE OPEN FLAG ADDRESS LDA XEQT GET THE CURRENT ID ADDRESS STA DCB,I SET THE OPEN FLAG RSS EREX ISZ $OPEN STEP TO ERROR RETURN ISZ $OPEN STEP AND JMP $OPEN,I AND RETURN * * * SIZE NOP DCB NOP DCB2 NOP BUF NOP SEC/T NOP TPFLG NOP OPNMD NOP ASAVE NOP * .5 DEC 5 .13 DEC 13 N2 DEC -2 N3 DEC -3 N5 DEC -5 N9 DEC -9 * XEQT EQU 1717B A EQU 0 B EQU 1 * END EQU * * END