summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornickysn <nickysn@3ad0048d-3df7-0310-abae-a5850022a9f2>2013-06-01 10:34:07 +0000
committernickysn <nickysn@3ad0048d-3df7-0310-abae-a5850022a9f2>2013-06-01 10:34:07 +0000
commit43e9b90d396bd45ba8797cd89e06078738f370ee (patch)
treebdc7f0c48c2b34507b91c1786475c42f9170fae4
parent955fa7016bef4c9e1bf51e19cf13268608496831 (diff)
downloadfpc-43e9b90d396bd45ba8797cd89e06078738f370ee.tar.gz
+ implemented dos.GetShortName and GetLongName for i8086-msdos
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@24699 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--rtl/msdos/dos.pp49
1 files changed, 43 insertions, 6 deletions
diff --git a/rtl/msdos/dos.pp b/rtl/msdos/dos.pp
index 21ef92781e..16293e1178 100644
--- a/rtl/msdos/dos.pp
+++ b/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;