delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2005/01/14/12:01:20

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
From: "Mike C" <My DOT address AT end DOT of DOT post>
Newsgroups: comp.os.msdos.djgpp
Subject: intdos question
Lines: 56
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1409
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1409
Message-ID: <oGSFd.353$N25.335@newsfe3-gui.ntli.net>
Date: Fri, 14 Jan 2005 16:45:08 GMT
NNTP-Posting-Host: 62.253.115.224
X-Complaints-To: http://www.ntlworld.com/netreport
X-Trace: newsfe3-gui.ntli.net 1105721108 62.253.115.224 (Fri, 14 Jan 2005 16:45:08 GMT)
NNTP-Posting-Date: Fri, 14 Jan 2005 16:45:08 GMT
Organization: ntl Cablemodem News Service
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

Can somebody please point me in the right direction?

I have written a parser, which parses a source file and creates a
destination file.

To operate the program, I select the source file in Windows explorer and
drag it onto a shortcut to my program. This leaves the path to the source
file in argv[1].  My problem is that the string that I find in argv[1] is
all in DOS 8.3 format.  I would like to name the destination file the same
as the source file, with a long filename, changing only the extension.

As I know the short filename, I thought of using findfirst() and findnext()
to locate the long filenames, then generate the short filename for each one
and compare it to the known short filename. Simple in concept!

I have been looking at Ralph Brown's interrupt list, int21, AX=7160.

It says :

AX = 7160h
CL = 00h
CH = SUBST expansion flag
  00h return a path containing true path for a SUBSTed drive letter
  80h return a path containing the SUBSTed drive letter
DS:SI -> ASCIZ filename or path (either long name or short name)
ES:DI -> 261-byte buffer for canonicalized name

Return:CF set on error
AX = error code
  02h invalid component in directory path or drive letter only
  03h malformed path or invalid drive letter
ES:DI buffer unchanged
CF clear if successful
ES:DI buffer filled with fully qualified name
AX destroyed

... so I guess I need to load DS:SI with a pointer to my long filename
buffer, and it will return a pointer to the short filename in ES:DI, but
that's where I get stuck.

I'm not very familiar with the Intel registers.  How do I get my pointer
into DS:SI?  If I'm not mistaken, SI is an index register that gets added to
DS?  How do I work it all out?

With thanks to anybody who spends their precious time on this,

MikeC

-- 
WARNING: My e-mail return address is bogus to confuse the automated spam
address gatherers.
Mental decryption required:
mike*e-col#ntlworld*com
where * = 'dot' and # = 'at'


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019