View Full Version : چک کردن فلاپی دیسک در پاسکال
  
mehdimdp
جمعه 08 آبان 1388, 12:08 عصر
سلام
من میخوام با پاسکال یه برنامه تحت داس بنویسم. 
و سوالم اینه که چطور میتونم چک کنم که در فلاپی رام دیسکت وجود داره یا نه.
متشکر
Delphi-Man
جمعه 08 آبان 1388, 12:58 عصر
سلام
با دستور DiskSize اندازه درایو a رو بفهمید اگه صفر نبود وجود داره.
Felony
جمعه 08 آبان 1388, 19:29 عصر
سلام
با دستور DiskSize اندازه درایو a رو بفهمید اگه صفر نبود وجود داره.
اگه دیسکی که قرار داده شده بود فرمت نشده بود چی ؟
tdkhakpur
جمعه 08 آبان 1388, 20: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, 10: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, 11:09 صبح
این کد جهت محیط داس است ؟ اگر نه برنامه اعلام خطا مینماید. این خطا در خط int 13h میباشد. 
درسته براي داس طراحي شده و شما داخل ويندوز حق استفاده از اينتراپت را نداريد مگر اينكه فقط برنامه اي كه براي داس كامپايل شده باشد را اجرا كنيد.
khoshblagh
شنبه 09 آبان 1388, 12:16 عصر
درسته براي داس طراحي شده و شما داخل ويندوز حق استفاده از اينتراپت را نداريد مگر اينكه فقط برنامه اي كه براي داس كامپايل شده باشد را اجرا كنيد.
 با تشکر از پاسختان
حالا اگر بخواهیم برای ویندوز استفاده نمائیم کد باید چگونه باشد؟ متشکرم.
tdkhakpur
شنبه 09 آبان 1388, 14:37 عصر
معلوم نشد شما براي ويندوز برنامه مي نويسيد يا داس.
براي ويندوز نميتوانيد از وقفه ها استفاده كنيد بلكه بايد از api براي اين كار استفاده نماييد. همان توابع كار با فايل ميتواند اين مشكل شما را حل كنند.
MohsenTi
شنبه 09 آبان 1388, 15: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, 08: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;
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.