ASMB,R,L,C HED COMPILER LIBRARY CLOSE ROUTINE NAM CLO.C,7 92060-16102 790207 REV. 1913 $CLIB * * *************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * * REPRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * *************************************************************** * * * * SOURCE PART NUMBER : 92060-18055 * * * CLOSE FILE ROUTINE * * THIS ROUTINE WILL SEARCH THE LINKED LIST OF FCB'S AND REMOVE IT * FROM THE LIST. IT WILL THEN BE CLOSED. IF IT IS A SCRATCH FILE * THE TRACKS WILL BE RETURNED TO THE SYSTEM. IF IT IS A READ FILE * IT WILL BE CLOSED. IF IT IS WRITE FILE THE * FCB WILL BE CHECKED TO SEE IF THE BUFFER NEEDS TO BE WRITTEN OUT * AND IF SO IT WILL BE WRITTEN OUT PRIOR TO CLOSING. * ALSO IF THE FILE DOES NOT HAVE EXTENTS IT WILL BE TRUNCATED. * * * * * * * CALLING SEQUENCE: * * JSB CLO.C * DEF FCB * ERROR RETURN * NO ERROR RETURN * * ON RETURN A < 0 INDICATES ERROR * A = 0 INDICATES NO ERROR * * * * ENTRY POINT: * ENT CLO.C * * EXTERNALS: * EXT GEX.C D.RTR REPLACEMENT ROUTINE EXT ADS.C FCB ADDRESS PASSER ROUTINE EXT GE#SC WRITE OUT BUFFER ROUTINE EXT C.HLK HEAD OF FCB LINKED LIST EXT C.FCB ADDRESS OF FCB EXT C.FID FCB ID WORD EXT C.FLU FCB LOGICAL UNIT WORD EXT C.EXT FCB EXTENT NUMBER WORD EXT C.#SC FCB NUMBER OF BLOCKS/EXTENT WORD EXT C.RSC CURRENT OFFSET SECTOR NUMBER EXT C.BFF FCB BUFFER ADDRESS WORD EXT C.FAD FCB DIRECTORY ADDRESS FROM D.RTR WORDS EXT C.?? FCB PROMPT CHARACTERS EXT C.SON THE SON PROCESS FLAG EXT LURQ THE LU LOCK GUY EXT .TTY THE INTERACTIVE TEST GUY * EXT C.FCB ADDRESS OF FCB * * * * DETERMINE TYPE OF OPERATION * * THE FCB CONTAINS THE OPERATION TYPE AS FOLLOWS: * * TYPE = 0 IS READ SOURCE FILE(OR LU) * = 1 IS WRITE BINARY FILE(OR LU) * = 2 IS WRITE SCRATCH FILE * = 3 IS WRITE LIST FILE(OR LU) * * * A EQU 0 B EQU 1 * CLO.C NOP JSB ADS.C SET UP FILE CONTROL BLOCK ADDRESSES DEC 0 CLA STA SECTS SET FOR NO TRUNCATION LDA AHEAD GET ADDRESS OF NEXT LDB A,I PTR AND ALSO PTR SZA,RSS IS IT EMPTY? JMP CLO.C,I ERROR EXIT CPB C.FCB IS IT THE ONE WE'RE LOOKING FOR JMP FND YES, GOT IT LDA B NO, CONTINUE ON DOWN THE LIST JMP NEXT FND LDB B,I REMOVE STB A,I IT BY CONNECTING NEXT TO PREVIOUS FCB * LDA C.FID,I IS THIS A LOGICAL SSA,RSS UNIT? JMP FILE NO, GO PROCESS THE FILE LDA C.FLU,I STA LU JSB .TTY TEST FOR INTERACTIVE DEF *+1+1 DEF LU SSA IF INTERACTIVE THEN JMP EXIT JUST BUG OUT JSB LURQ UNLOCK THE TURKEY DEF *+3+1 DEF .40K UNLOCK REQ DEF C.FLU,I DEF .1 NOP JMP EXIT * FILE LDA C.FID,I AND CLRFG CLEAR OPEN FLAG STA C.FID,I AND =B7 DETERMINE FCB TYPE CPA .2 SCRATCH? JMP CLSSC CLOSE SCRATCH FILE SZA READ FCB CPA =D4 SOURCE REWIND FILE? JMP CLSRD CLOSE SOURCE TYPE FILES * LDA C.BFF,I SHOULD BUFFER SSA,RSS BUFFER BE FLUSHED? JMP TRUN NO! CLA CLOSE WRITE FCB CLB JSB GE#SC AND FLUSH BUFFER JMP CLO.C,I ERROR RETURN * * TRUNCATE IF NO EXTENTS * TRUN LDA C.EXT,I IS SZA AND EXTENTS? JMP CLSRD YES! LDA C.#SC,I DETERMINE CMA,INA ADA C.RSC,I NUMBER OF UNUSED INA SECTORS ALS STA SECTS LDA C.RSC,I RESET C.#SC IN CASE WE CALL A SON. INA STA C.#SC,I JMP CLSRD CLOSE FILE * * * CLOSE SCRATCH FILE * CLSSC LDA .5 CALL CLOSE GEX.C TO RETURN SCRATCH FILE JSB GEX.C JMP EXIT YES! * * CLOSE READ FILE * CLSRD LDA C.SON LDB C.FAD,I SSA,RSS IF SON_PROCESS THEN JMP SCRTX TEST FOR SCRATCH SZB,RSS IF SCRATCH THEN JMP EXIT JUST BUG OUT * SCRTX SZB,RSS IF SCRATCH THEN JMP CLSSC GIVE IT BACK CLA CLOSE FILES CLB JSB GEX.C DEF SECTS JMP CLO.C,I ERROR EXIT P+1 EXIT ISZ CLO.C JMP CLO.C,I OK RETURN P+2 * * CONSTANTS AND BUFFERS * AHEAD DEF C.HLK ADDRESS OF HEAD OF LINKED LIST SECTS NOP NUMBER OF SECTORS TO TRUNCATE LU EQU SECTS .40K OCT 40000 UNLOCK - NO ABORT .1 DEC 1 .2 DEC 2 .5 DEC 5 CLRFG OCT 177767 END