BBS: Inland Empire Archive Date: 12-12-92 (12:12) Number: 340 From: DIK COATES Refer#: NONE To: HUGH MARTIN Recvd: NO Subj: Re: far string access Conf: (2) Quik_Bas
>>>> QUOTING Hugh Martin to Dik Coates <<<< Thanks for posting... I've included final(?) edition... for this function... Had a 'bum steer' on the descriptor being a DWORD and not WORD... That's what allowed the function to work when compiled to EXE and not within environment... Putting together finishing touches on library, and will post when completed... ; BASIC FILE FUNCTION to Create a FILE using FAR STRING filename. ; returns File Handle if successful, and DOS Critical Error if fails. ; Declare as follows: ; ; DECLARE FUNCTION CREATEFF% (filename$, BYVAL attribute%) ; ; ARGS: filename$ - name of file to create ; attribute%- attribute of file as follows: ; 0 - normal ; 1 - read only ; 2 - hidden ; 4 - system ; LIB: BAFILF.LIB ; ; REV: 92-12-04 ; 92-12-07 StringLength:Proc removed ; 92-12-11 BUG fix ; CREATEFF proc Uses bx cx dx ds es ss si di, desrptr:word, attrib:word pushf ;save flags mov ax, desrptr push ax call StringAddress ;this has now been revised push ax ;save offset push dx ;save segment pop ds ;retrieve segment in ds pop dx ;retrieve offset in dx mov cx, attrib ;attribute in cx mov ah, 3ch ;DOS create file int 21h jnc @f ;carry flag clear, ret handle in ax neg ax ;carry flag not clear, ret -ve crit err in ax @@: popf ;restore flags ret CREATEFF Endp Have renamed it to CREATEFF for create far file... library already has CREATEFN for near files... Thanks for help and effort... Caught the original mov and pushing address. No point in loading address of something that was passed as an address. Missed the push and pop... it was a carry over from when string length was required. You mention that you do the ASCIZ thing in the function... I had originally written the function by creating a temporary buffer of 0's (automatically Nul terminated) and needed the string length. It was kind of clunky... Is there an easier way of doing this than creating the buffer and writing to it? Also, is there a way to handle near and far strings from the same function? Will check to see if StringAddress hangs the machine from near string... if not, maybe by checking lengths... Will be in touch in the New Year to pick up a copy of your library. Regards Dik, Oshawa, Canada ... Dik, remember last week in the Austin Mini? See a doctor! - Heather ___ Blue Wave/QWK v2.10 --- Maximus 2.00 * Origin: Durham Systems (ONLINE!) (1:229/110)
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