You are not logged in. You can browse in the PowerBASIC Community, but you must click Login (top right) before you can post. If this is your first visit, check out the FAQ or Sign Up.
<Copy from Clay>
Here is some code that you can TRY. It is a largely modified
version of my own production function. I have no idea if it
will work in the way you need.
<End>
Clay-
I will try it. From looking at it- I would say it WILL work,
but I should try it before actually saying it will work on the
intended machines.
Here is some code that you can TRY. It is a largely modified version
of my own production function. I have no idea if it will work in the
way you need. All you can do is try it. Its argument is the drive letter
you want to check ("a" to "z" or "A" to "Z"). It is supposed to return
TRUE (-1) if the drive exists, and zero in all other cases (including
if there are errors). All you can do is try it yourself, as I do not
have the hardware/software machines to test it on as far as YOUR needs.
$ENDIF
Code:
$COMPILE UNIT
$DIM ALL
FUNCTION CheckDrive (BYVAL sDrive AS STRING) PUBLIC AS INTEGER
DIM IReturn AS LOCAL INTEGER
sDrive = UCASE$(LEFT$(sDrive, 1))
IF (ASCII(sDrive) < 65) OR (ASCII(sDrive) > 90) THEN
GOTO PEndIt
END IF
DIM w AS LOCAL ASCIIZ*7
DIM w2 AS LOCAL ASCIIZ*37
w = sDrive + ":\*.*"
! push ds
! push es
! push si
! push di
! push ax
! push ss
! pop es
! lea si, w
! lea di, w2
! mov ax, &H2900
! int &H21
! cmp al, &HFF
! je P1A
! mov IReturn, -1
P1A:
! pop ax
! pop di
! pop si
! pop es
! pop ds
PEndIt:
FUNCTION = IReturn
END FUNCTION
Michael said: It may be possible to do this, but if this
is your program, you should be keeping track of it and would
have no need to ask.
Michael, I do agree wholeheartedly, but my target users are not
good "computer literators." Every time I offer to help, they
remind me they are age XX been around a lot longer, etc., etc.
Asking them which letter the floppy drive is brought me a lot
of confusion I had to explain.
Tom said: Now that most computers are back to one floppy,
plus a hard drive, the old A:/B: mapping trick would be pretty
handy. As it happens, though, Windows doesn't seem to support
this any more. Thank you, Microsoft.
I agree. Would you believe some of my intended users have not
seen any version of Windows yet? This is what I do, program for
users of DOS machines. But I have to stay mindful of that user
who uses Windows mainly, but will run DOS programs.
They don't want Windows apps (too big, too complicated, too
expensive, too long to learn, etc.), and would rather have
DOS software that is "intuitive." Because of that, that there
was my reason for being able to determine if it was an "A" or
"B" the floppy drive was acting as.
Thank you all. I *think* I have come up with a non-confusing
way to do this because of your comments. Thanks again.
Is there a way to detect whether the A: drive is currently considered
to be A: or B: under this sort of arrangement? Yes, but. It relies on
"undocumented" DOS tricks that may well have changed from one version
of DOS to another. You'll have to do some digging to find them. Start
with the Ralf Brown list (see the Links page) and good luck.
[/B]
In Ralf's check out Int 21 AX = 440Eh (IOCTL GET LOGICAL DRIVE MAP).
It should do the trick.
Background: In Olden Times, a computer would, often enough, have just
one floppy drive. To make matters more exciting, the computer may not
have had a hard drive at all. In any event, it was frequently handy to
be able to copy a floppy disk without having to consider whether there
was another floppy drive available. To make this convenient, Microsoft
invented the "phantom" floppy: if you had only one floppy drive, you
could address it as "A:" or "B:", and the computer would cheerfully
pretend that you had two floppy drives.
In short, if you said "XCOPY A: B:", the computer would copy all files
from your "real" drive "A:", to your phantom drive "B:", which would
actually be the same drive. But, it would prompt you to change disks
when appropriate, so you could copy from one disk to another IN THE
SAME DRIVE without causing problems.
Is there a way to detect whether the A: drive is currently considered
to be A: or B: under this sort of arrangement? Yes, but. It relies on
"undocumented" DOS tricks that may well have changed from one version
of DOS to another. You'll have to do some digging to find them. Start
with the Ralf Brown list (see the Links page) and good luck.
Now that most computers are back to one floppy, plus a hard drive, the
old A:/B: mapping trick would be pretty handy. As it happens, though,
Windows doesn't seem to support this any more. Thank you, Microsoft.
Don't do that if you have the hard drive real estate available!
Two reasons:
1. You have an automatic backup. If the floppy goes west, just
burn another copy from the hard drive.
2. Frequently, copying install files from floppy to hard allows
you to run the install program from the hard drive. Makes for
a LOT faster installation.
------------------
[This message has been edited by Mel Bishop (edited July 06, 2003).]
If I check for "A:\*.*" and it is currently acting as "B" it will tell me to insert
???
It may be possible to do this, but if this is your program, you should be keeping track of it and would have no need to ask.
In fact, I see no reason to require multiple drives to do this; sure, you'd have to prompt the user to insert the source and destination disks and maybe do a check of the directory when he says "OK"; better still...
Code:
Prompt ONCE to insert source Disk
Copy everything off source disk to hard drive
Prompt ONCE to insert destination disk
Copy from hard drive to destination
Delete the files from hard drive.
???
MCM
[This message has been edited by Michael Mattias (edited July 06, 2003).]
That works- I asked the question unclearly. Let me try it this
way.
(Let me pretend the user is a super idiot.)
If you have a single floppy drive, and you have been making
backups using the A: to B: technique, but the user forgot which
"current state" he left the floppy drive in. Was it "A" or "B"?
If I check for "A:\*.*" and it is currently acting as "B" it
will tell me to insert a disk and press return. There is my
problem. I would rather trap that and I haven't found a way
to do that so far.
In other words, is it possible to see which letter the floppy
drive is assigned to (A or B) without having to check both?
Assuming you are typing "A:" or "B:" to select the current drive:
Code:
CurrentDrive$=LEFT$(CURDIR$,3)
On the other hand, if you have written something to do a "one-physical-drive-floppy-to-floppy copy" then your program is responsible for keeping track of where you are.
There's all kinds of code around here to determine if a disk is physically inserted.. most of it is based on trying to access a file on the target drive and trapping an error.
i.e.
Code:
ON ERROR RESUME NEXT
SourceDrive$ = "A:"
FileSpec$ = SourceDrive$ & "\*.*"
Z$ = DIR$(FileSpec$)
IF ERR THEN
IF ERR = 71 THEN
PRINT "No disk or door open on drive " & SourceDrive$
END IF
END IF
MCM
[This message has been edited by Michael Mattias (edited July 06, 2003).]
Most people have a single floppy drive, as do I. What I *do*
have is the ability to type in "B:" at the prompt and my floppy
drive will act as a "B:" drive. Thus, I can copy a floppy to
another floppy by swapping diskettes.
Within a Powerbasic program, is there a way to determine WHICH
of the two (A or B) letters is active at that moment?
And secondly, if there is a disk inside the drive at that
moment?
Lastly, is there a way to determine if a disk is inside a ZIP
drive?
We process personal data about users of our site, through the use of cookies and other technologies, to deliver our services, and to analyze site activity. For additional details, refer to our Privacy Policy.
By clicking "I AGREE" below, you agree to our Privacy Policy and our personal data processing and cookie practices as described therein. You also acknowledge that this forum may be hosted outside your country and you consent to the collection, storage, and processing of your data in the country where this forum is hosted.
Leave a comment: