BBS: Inland Empire Archive Date: 01-16-93 (15:41) Number: 379 From: CORIDON HENSHAW Refer#: NONE To: MARK REJHON Recvd: NO Subj: Heya. Conf: (2) Quik_Bas
Hello Mark! In a msg of <14 Jan 93>, Mark Rejhon writes to All: MR> I heard that there is a way to trick DOS to open a directory as a MR> file. [deleted] Do[es] anybody here have information on this? Yes, I do. You can fool DOS if you use the change attribs function to remove the DIR attribute, open the directory as a file, and when you've finished using it, change the attributes back. Some example code: ===Chop=== DEFINT A-Z CONST Nul = -2 CONST True = -1 CONST False = 0 TYPE FileAttrsType ReadOnly AS STRING * 1 Hidden AS STRING * 1 System AS STRING * 1 VolumeLabel AS STRING * 1 Directory AS STRING * 1 Archive AS STRING * 1 END TYPE '$INCLUDE: 'qbx.bi' DIM FileAttrs AS FileAttrsType MKDIR "example" 'Make example directory GetFileAttrs "example", FileAttrs 'Get file attributes FileAttrs.Directory="0" 'Remove directory attribute SetFileAttrs "example", FileAttrs 'Set attributes OPEN "example" FOR BINARY AS #1 'Directory is opened PRINT "Directory length: "; LOF(1) CLOSE 'Close directory FileAttrs.Directory="1" 'Reset directory attribute SetFileAttrs "example", FileAttrs 'Set attributes SUB GetFileAttrs (File$, FileAttrs AS FileAttrsType) DIM Regs AS RegTypeX Regs.AX = &H4300 Regs.DS = SSEG(File$) Regs.DX = SADD(File$) CALL InterruptX(&H21, Regs, Regs) IF Regs.CX AND 2 ^ 0 THEN FileAttrs.ReadOnly = "1" IF Regs.CX AND 2 ^ 1 THEN FileAttrs.Hidden = "1" IF Regs.CX AND 2 ^ 2 THEN FileAttrs.System = "1" IF Regs.CX AND 2 ^ 3 THEN FileAttrs.VolumeLabel = "1" IF Regs.CX AND 2 ^ 4 THEN FileAttrs.Directory = "1" IF Regs.CX AND 2 ^ 5 THEN FileAttrs.Archive = "1" END SUB SUB SetFileAttrs (File$, FileAttrs AS FileAttrsType) DIM Regs AS RegTypeX IF FileAttrs.ReadOnly = "1" THEN Regs.CX = Regs.CX + 2 ^ 0 IF FileAttrs.Hidden = "1" THEN Regs.CX = Regs.CX + 2 ^ 1 IF FileAttrs.System = "1" THEN Regs.CX = Regs.CX + 2 ^ 2 IF FileAttrs.VolumeLabel = "1" THEN Regs.CX = Regs.CX + 2 ^ 3 IF FileAttrs.Directory = "1" THEN Regs.CX = Regs.CX + 2 ^ 4 IF FileAttrs.Archive = "1" THEN Regs.CX = Regs.CX + 2 ^ 5 Regs.AX = &H4301 Regs.DS = SSEG(File$) Regs.DX = SADD(File$) CALL InterruptX(&H21, Regs, Regs) END SUB ===Chop=== There you go. \ Coridon Henshaw \ ³ \ Sirrus Software \ \ ³ / \ Sysop, \ ÄÄÄÄ*ÄÄÄÄ \ TCS Concordia \ / ³ \ \ 34:3416/18 \ ³ ...Be there or be hexagonal! --- GEcho 1.00 * Origin: Somewhere in the Streeling Sector of Trantor... (1:250/820)
Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET