Преглед изворни кода

+ implemented dos.GetShortName and GetLongName for i8086-msdos

git-svn-id: trunk@24699 -
nickysn пре 12 година
родитељ
комит
ed7eb79486
1 измењених фајлова са 43 додато и 6 уклоњено
  1. 43 6
      rtl/msdos/dos.pp

+ 43 - 6
rtl/msdos/dos.pp

@@ -595,17 +595,54 @@ end;
 
 { change to short filename if successful DOS call PM }
 function GetShortName(var p : String) : boolean;
-begin
-  {TODO: implement}
-  runerror(304);
+var
+  c : array[0..255] of char;
+begin
+  move(p[1],c[0],length(p));
+  c[length(p)]:=#0;
+  dosregs.ax:=$7160;
+  dosregs.cx:=1;
+  dosregs.ds:=Seg(c);
+  dosregs.si:=Ofs(c);
+  dosregs.es:=Seg(c);
+  dosregs.di:=Ofs(c);
+  msdos(dosregs);
+  LoadDosError;
+  if DosError=0 then
+   begin
+     move(c[0],p[1],strlen(c));
+     p[0]:=char(strlen(c));
+     GetShortName:=true;
+   end
+  else
+   GetShortName:=false;
 end;
 
 
 { change to long filename if successful DOS call PM }
 function GetLongName(var p : String) : boolean;
-begin
-  {TODO: implement}
-  runerror(304);
+var
+  c : array[0..260] of char;
+begin
+  move(p[1],c[0],length(p));
+  c[length(p)]:=#0;
+  dosregs.ax:=$7160;
+  dosregs.cx:=2;
+  dosregs.ds:=Seg(c);
+  dosregs.si:=Ofs(c);
+  dosregs.es:=Seg(c);
+  dosregs.di:=Ofs(c);
+  msdos(dosregs);
+  LoadDosError;
+  if DosError=0 then
+   begin
+     c[255]:=#0;
+     move(c[0],p[1],strlen(c));
+     p[0]:=char(strlen(c));
+     GetLongName:=true;
+   end
+  else
+   GetLongName:=false;
 end;