diff options
author | nickysn <nickysn@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2013-06-01 10:34:07 +0000 |
---|---|---|
committer | nickysn <nickysn@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2013-06-01 10:34:07 +0000 |
commit | 43e9b90d396bd45ba8797cd89e06078738f370ee (patch) | |
tree | bdc7f0c48c2b34507b91c1786475c42f9170fae4 | |
parent | 955fa7016bef4c9e1bf51e19cf13268608496831 (diff) | |
download | fpc-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.pp | 49 |
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; |