PDA

View Full Version : چک کردن فلاپی دیسک در پاسکال



mehdimdp
جمعه 08 آبان 1388, 11:08 صبح
سلام
من میخوام با پاسکال یه برنامه تحت داس بنویسم.
و سوالم اینه که چطور میتونم چک کنم که در فلاپی رام دیسکت وجود داره یا نه.
متشکر

Delphi-Man
جمعه 08 آبان 1388, 11:58 صبح
سلام
با دستور DiskSize اندازه درایو a رو بفهمید اگه صفر نبود وجود داره.

Felony
جمعه 08 آبان 1388, 18:29 عصر
سلام
با دستور DiskSize اندازه درایو a رو بفهمید اگه صفر نبود وجود داره.
اگه دیسکی که قرار داده شده بود فرمت نشده بود چی ؟

tdkhakpur
جمعه 08 آبان 1388, 19:27 عصر
var
RtnVal, carry : byte;
addr : array [1..512] of byte ;
begin
asm
mov ah, 02h
mov al, 1
lea bx, addr
mov ch, 1
mov cl, 1
mov dh, 0
mov dl, 0
push ds
pop es
int 13h
mov dl, 0
adc dl, 0
mov carry , dl
mov RtnVal, ah
end;
if carry=0 then
writeln('flopy is ready.')
else
if RtnVal = 128 then
writeln('insert flopy..');

khoshblagh
شنبه 09 آبان 1388, 09:46 صبح
var
RtnVal, carry : byte;
addr : array [1..512] of byte ;
begin
asm
mov ah, 02h
mov al, 1
lea bx, addr
mov ch, 1
mov cl, 1
mov dh, 0
mov dl, 0
push ds
pop es
int 13h
mov dl, 0
adc dl, 0
mov carry , dl
mov RtnVal, ah
end;
if carry=0 then
writeln('flopy is ready.')
else
if RtnVal = 128 then
writeln('insert flopy..');

این کد جهت محیط داس است ؟ اگر نه برنامه اعلام خطا مینماید. این خطا در خط int 13h میباشد. متشکرم.

tdkhakpur
شنبه 09 آبان 1388, 10:09 صبح
این کد جهت محیط داس است ؟ اگر نه برنامه اعلام خطا مینماید. این خطا در خط int 13h میباشد.
درسته براي داس طراحي شده و شما داخل ويندوز حق استفاده از اينتراپت را نداريد مگر اينكه فقط برنامه اي كه براي داس كامپايل شده باشد را اجرا كنيد.

khoshblagh
شنبه 09 آبان 1388, 11:16 صبح
درسته براي داس طراحي شده و شما داخل ويندوز حق استفاده از اينتراپت را نداريد مگر اينكه فقط برنامه اي كه براي داس كامپايل شده باشد را اجرا كنيد.
با تشکر از پاسختان
حالا اگر بخواهیم برای ویندوز استفاده نمائیم کد باید چگونه باشد؟ متشکرم.

tdkhakpur
شنبه 09 آبان 1388, 13:37 عصر
معلوم نشد شما براي ويندوز برنامه مي نويسيد يا داس.
براي ويندوز نميتوانيد از وقفه ها استفاده كنيد بلكه بايد از api براي اين كار استفاده نماييد. همان توابع كار با فايل ميتواند اين مشكل شما را حل كنند.

MohsenTi
شنبه 09 آبان 1388, 14:01 عصر
با دستورات زیر تو ویندوز این کار قابل انجامه !

Fi:=CreateFile('A:\',GENERIC_READ,FILE_SHARE_READ, nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if (Fi<>INVALID_HANDLE_VALUE) then هست ; else نیست ;
CloseHandle(Fi);

راستی
Fi:THandle;

khoshblagh
یک شنبه 10 آبان 1388, 07:13 صبح
با سلام خدمت دوستان
این هم یک نمونه برای محیط ویندوز که از یک سایت برداشت کردم. البته پروسیجر را خودم اضافه کردم.


function DiskInDrive(Drive: Char): Boolean;
var
ErrorMode: Word;
begin
{ make it upper case }
if Drive in ['a'..'z'] then Dec(Drive, $20);
{ make sure it's a letter }
if not (Drive in ['A'..'Z']) then
raise EConvertError.Create('Not a valid drive ID');
{ turn off critical errors }
ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
try
{ drive 1 = a, 2 = b, 3 = c, etc. }
if DiskSize(Ord(Drive) - $40) = -1 then
Result := False
else
Result := True;
finally
{ Restore old error mode }
SetErrorMode(ErrorMode);
end;
end;
procedure TMainForm.RzToolButton7Click(Sender: TObject);
begin
if DiskInDrive('a')=False then begin
Application.Title:='ÚÏã æÌæÏ ÏíÓ˜Ê';
ShowMessage('ÏíÓ˜Ê ÏÑ ÏÑÇíæ ãæÌæÏ äíÓÊ'+'!'#13+'ÏíÓ˜Ê ÑÇ ÏÑÇíæ ÞÑÇÑ ÏåíÏ æ ÏæÈÇÑå ÇÞÏÇã äãÇÆíÏ');
end
else begin
FormatFloppy(0);
end;
end;