Browse Source

+ implemented dos.getfattr and setfattr for i8086-msdos

git-svn-id: trunk@24696 -
nickysn 12 years ago
parent
commit
7d757cc5ed
1 changed files with 30 additions and 4 deletions
  1. 30 4
      rtl/msdos/dos.pp

+ 30 - 4
rtl/msdos/dos.pp

@@ -636,15 +636,41 @@ end;
 
 
 procedure getfattr(var f;var attr : word);
 procedure getfattr(var f;var attr : word);
 begin
 begin
-  {TODO: implement}
-  runerror(304);
+  dosregs.dx:=Ofs(filerec(f).name);
+  dosregs.ds:=Seg(filerec(f).name);
+  if LFNSupport then
+   begin
+     dosregs.ax:=$7143;
+     dosregs.bx:=0;
+   end
+  else
+   dosregs.ax:=$4300;
+  msdos(dosregs);
+  LoadDosError;
+  Attr:=dosregs.cx;
 end;
 end;
 
 
 
 
 procedure setfattr(var f;attr : word);
 procedure setfattr(var f;attr : word);
 begin
 begin
-  {TODO: implement}
-  runerror(304);
+  { Fail for setting VolumeId. }
+  if ((attr and VolumeID)<>0) then
+  begin
+    doserror:=5;
+    exit;
+  end;
+  dosregs.dx:=Ofs(filerec(f).name);
+  dosregs.ds:=Seg(filerec(f).name);
+  if LFNSupport then
+   begin
+     dosregs.ax:=$7143;
+     dosregs.bx:=1;
+   end
+  else
+   dosregs.ax:=$4301;
+  dosregs.cx:=attr;
+  msdos(dosregs);
+  LoadDosError;
 end;
 end;