;*; Updated on 06-Dec-91 at 9:16 AM by Michele Tonti; edit time: 0:00:12 ;*************************** AMUS Program Label ****************************** ; Filename: DSKFRE.M68 Date: 12/6/91 ; Category: SBR Hash Code: 561-445-106-040 Version: ; Initials: KUNI/AM Name: RENE S. HOLLAN ; Company: UDISCO LTD. Telephone #: 5144818107 ; Related Files: DSKFRE.SBR,DSKFRE.DOC,DSKFRE.BAS,DSKFRE.RUN,DSKFRE.LIT ; Min. Op. Sys.: Expertise Level: ; Special: ; Description: Returns the largest contiguous block free and the total number ; of blocks free on a specified device. ; ;***************************************************************************** ;************************************************************************ ; * ; DSKFRE BASIC SUBROUTINE * ; * ;************************************************************************ ; ; NOTICE ; ;All rights reserved. This software is the property of UDISCO LTD. and ;the material contained herein is the proprietary property and trade ;secrets of UDISCO LTD., embodying substantial creative efforts and ;confidential information, ideas and expressions, no part of which may be ;reproduced or transmitted in any form or by any means, electronic, ;mechanical, or otherwise, including photocopying or input into any ;information storage or retrieval system without the express written ;permission of UDISCO LTD. ; ;Permission to copy and use is granted to AMUS members for non commercial ;purposes only. ; ; Author: Rene S. Hollan ; Date Written: June 3, 1989 ; ; COPYRIGHT (C) 1989 - UDISCO LTD. ; ;Edit History ; ;[100] 3 July 89 ; Coding starts. /RSH ; ; Usage: XCALL DSKFRE,,, ; ; Where is device specification (i.e. DSK0:), ; ; receives size of largest contigous block, ; ; receives total number of blocks free. ; ; and must be mapped as floating point ; variables, i.e.: ; ; MAP1 contig,F,6 ; MAP1 total,F,6 ; ; If an error occurs (bad device spec., etc.) contig is set to ; 0 and the file system error code is returned in total. ; ; Note that the device driver for the specified device must be loaded ; into memory and that there must be sufficient memory available in the ; BASIC impure area to hold a 24 byte result table (from DSKFRE), a DDB, ; and a 512 byte disk buffer. ; SEARCH SYS SEARCH SYSSYM OBJNAM 0,0,[SBR] VMAJOR = 1 ; major version VMINOR = 0 ; minor version VSUB = 0 ; sub version VEDIT = 100. ; edit level VWHO = 0 ; patch level ; On entry A3 points to the following parameter block .OFINI ; BASIC calling parameter area .OFDEF Bas.No,2 ; number of parameters (3) .OFDEF Bas.T1,2 ; type code (string) .OFDEF Bas.A1,4 ; variable address .OFDEF Bas.L1,4 ; variable length .OFDEF Bas.T2,2 ; type code (string) .OFDEF Bas.A2,4 ; variable address .OFDEF Bas.L2,4 ; variable length .OFDEF Bas.T3,2 ; type code (string) .OFDEF Bas.A3,4 ; variable address .OFDEF Bas.L3,4 ; variable length .OFSIZ Bas.Sz ; parameter area size DSKFRE: PHDR -1,PV$RSM,PH$REU!PH$REE ; program header MOV Bas.A1(A3),A2 ; A2 -> device name MOV A4,A5 ; A5 -> device table LEA A4,DF.SIZ(A4) ; adjust for device table size ORB #D$BYP+D$ERC,D.FLG(A4) ; bypass error messages FSPEC @A4 ; FSPEC the device name into imp. area BNE ERR ; error MOV A4,D.BUF(A4) ; D.BUF --> base of DDB ADD #D.DDB,D.BUF(A4) ; D.BUF --> buffer area MOV #512.,D.SIZ(A4) ; set buffer size CLR D.DVR(A4) ; no driver ORB #D$INI,D.FLG(A4) ; set buffer inited flag ; WARNING!!! - DEVICE DRIVER MUST BE IN MEMORY OR ALL THIS WILL BLOW UP IN ; YOUR FACE! DSKFRE @A4,@A5 ; get free space on device BEQ OK ; no error ERR: CLR D1 ; clear contiguous blocks MOV D1,DF.HOL(A5) ; ... MOVB D.ERR(A4),D1 ; set error code in total blocks MOV D1,DF.FRE(A5) ; ... OK: MOV Bas.A2(A3),A1 ; A1 -> contiguous space result FLTOF DF.HOL(A5),@A1 ; return contiguous space MOV Bas.A3(A3),A1 ; A1 -> total space result FLTOF DF.FRE(A5),@A1 ; return total space RTN ; and return END .