1. dos.e

Daniel Berstein writes:

>>       if DosVersion < 7 or atom(getenv("windir")) then
> Perhaps my DOS.E file also requiered this path.

I'll put the same fix into your dos.e file.

Regards,
     Rob Craig
     Rapid Deployment Software
     http://members.aol.com/FilesEu/

new topic     » topic index » view message » categorize

2. dos.e

Hi all,

there are some bugs in dos.e (from Archive/Library Routines)
-- tested with Euphoria 2.3:


=============================[ deltree() ]==============================

<code>
global function deltree(string dirname)
   [...]
   if not compare(dirname[length(dirname)], "\\") then
      dirname = dirname[1..length(dirname)-1]
   end if
</code>

The condition   compare(dirname[length(dirname)], "\\")
is *always* -1, because dirname[length(dirname)] is an atom, and
"\\" is a sequence.

So the statement   dirname = dirname[1..length(dirname)-1]   will
*never* be executed, and therefore the function will not work properly,
when called with a dirname that has a backslash at the end.

==> It should be:  if not compare(dirname[length(dirname)], '\\') then
    or (clearer):  if dirname[length(dirname)] = '\\' then

----------------------------------------

Also in function deltree:

<code>
   info = dir(dirname)
   [...]
   if not match(info[loop][D_ATTRIBUTES],"d") then
      i = delete(dirname & "\\" & info[loop][D_NAME])
</code>

For a normal file, info[loop][D_ATTRIBUTES] is "", and then the error
"first argument of match() must be a non-empty sequence" is raised.
(BTW: I think this information should be included in the documentation
      for match().)

Furthermore, eg match("da", "d") = 0, which means that the routine will
try to delete() a directory with the attributes "da", for instance
(which will not work, of cause).

==> It should be:  if not find('d', info[loop][D_ATTRIBUTES]) then

----------------------------------------
This is my modified deltree() function:
----------------------------------------

global function deltree (string dirname)
   object info
   integer i

   if dirname[length(dirname)] = '\\' then
      dirname = dirname[1..length(dirname)-1]
   end if
   info = dir(dirname)
   if atom(info) then
      return false
   end if
   if length(info) < 3 then
      return rmdir(dirname)
   end if
   info = info[3..length(info)]
   for loop = 1 to length(info) do
      if not find('d', info[loop][D_ATTRIBUTES]) then
         i = delete(dirname & "\\" & info[loop][D_NAME])
         if not i then
            return false
         end if
      else
         i = deltree(dirname & "\\" & info[loop][D_NAME])
         if not i then
            return false
         end if
         i = rmdir(dirname & "\\" & info[loop][D_NAME])
      end if
   end for
   return rmdir(dirname)
end function


==============================[ rename() ]==============================

<code>
global function rename(string oldname, string newname)
   [...]
   if (not compare(oldname[2],":")) and (not compare(newname[2],":")) 
then
</code>

==> It should be:  if oldname[2] = ':' and newname[2] = ':' then
(see above)


==========================[ documentation() ]===========================

There is an error in the documentation at the beginning of the file:

<snip>
-- 
--          Moves file old to new. Can be used as rename among 
different     --
--          disk drives.                                                     
-- 
-- 
--          Renames file old to new.                                         
-- 
--          NOTE: Can't rename among different disk drives                   
-- 

Either both move() and rename() can work among different disk drives, or
both can't. The only thing move() does, is calling rename().


Best regards,
   Juergen

new topic     » goto parent     » topic index » view message » categorize

3. Re: dos.e

Good work, J. Maybe not many people use DOS anymore blink

----- Original Message -----
From: <jluethje at gmx.de>
To: "EUforum" <EUforum at topica.com>
Subject: dos.e


>
> Hi all,
>
> there are some bugs in dos.e (from Archive/Library Routines)
> -- tested with Euphoria 2.3:
>
>
> =============================[ deltree() ]==============================
>
> <code>
> global function deltree(string dirname)
>    [...]
>    if not compare(dirname[length(dirname)], "\\") then
>       dirname = dirname[1..length(dirname)-1]
>    end if
> </code>
>
> The condition   compare(dirname[length(dirname)], "\\")
> is *always* -1, because dirname[length(dirname)] is an atom, and
> "\\" is a sequence.
>
> So the statement   dirname = dirname[1..length(dirname)-1]   will
> *never* be executed, and therefore the function will not work properly,
> when called with a dirname that has a backslash at the end.
>
> ==> It should be:  if not compare(dirname[length(dirname)], '\\') then
>     or (clearer):  if dirname[length(dirname)] = '\\' then
>
> ----------------------------------------
>
> Also in function deltree:
>
> <code>
>    info = dir(dirname)
>    [...]
>    if not match(info[loop][D_ATTRIBUTES],"d") then
>       i = delete(dirname & "\\" & info[loop][D_NAME])
> </code>
>
> For a normal file, info[loop][D_ATTRIBUTES] is "", and then the error
> "first argument of match() must be a non-empty sequence" is raised.
> (BTW: I think this information should be included in the documentation
>       for match().)
>
> Furthermore, eg match("da", "d") = 0, which means that the routine will
> try to delete() a directory with the attributes "da", for instance
> (which will not work, of cause).
>
> ==> It should be:  if not find('d', info[loop][D_ATTRIBUTES]) then
>
> ----------------------------------------
> This is my modified deltree() function:
> ----------------------------------------
>
> global function deltree (string dirname)
>    object info
>    integer i
>
>    if dirname[length(dirname)] = '\\' then
>       dirname = dirname[1..length(dirname)-1]
>    end if
>    info = dir(dirname)
>    if atom(info) then
>       return false
>    end if
>    if length(info) < 3 then
>       return rmdir(dirname)
>    end if
>    info = info[3..length(info)]
>    for loop = 1 to length(info) do
>       if not find('d', info[loop][D_ATTRIBUTES]) then
>          i = delete(dirname & "\\" & info[loop][D_NAME])
>          if not i then
>             return false
>          end if
>       else
>          i = deltree(dirname & "\\" & info[loop][D_NAME])
>          if not i then
>             return false
>          end if
>          i = rmdir(dirname & "\\" & info[loop][D_NAME])
>       end if
>    end for
>    return rmdir(dirname)
> end function
>
>
> ==============================[ rename() ]==============================
>
> <code>
> global function rename(string oldname, string newname)
>    [...]
>    if (not compare(oldname[2],":")) and (not compare(newname[2],":"))
> then
> </code>
>
> ==> It should be:  if oldname[2] = ':' and newname[2] = ':' then
> (see above)
>
>
> ==========================[ documentation() ]===========================
<snip>

>
>
>

new topic     » goto parent     » topic index » view message » categorize

4. Re: dos.e

Derek Parnell wrote:
> ...
> Good work, J. Maybe not many people use DOS anymore blink
> ...

Well, besides WinNT, I do! But I never used 'dos.e'. Where to find it? A
search under DOS in the EU archive leads to nothing.

Have a nice day, Rolf

new topic     » goto parent     » topic index » view message » categorize

5. Re: dos.e

T24gU3VuLCAxOSBNYXkgMjAwMiAxMDoyMTowNCArMDIwMCwgci5zY2hyQHQtb25saW5lLmRlIHdy
b3RlOg0KDQo+QnV0IEkgbmV2ZXIgdXNlZCAnZG9zLmUnLiBXaGVyZSB0byBmaW5kIGl0PyBBDQo+
c2VhcmNoIHVuZGVyIERPUyBpbiB0aGUgRVUgYXJjaGl2ZSBsZWFkcyB0byBub3RoaW5nLg0KPg0K
U2VhcmNoIGZvciBEYW5pZWwgQmVyc3RlaW4uDQoNCg==

new topic     » goto parent     » topic index » view message » categorize

6. Re: dos.e

Hi Rolf,

http://www.RapidEuphoria.com/dos.zip

Regards,
Igor Kachan
kinz at peterlink.ru
----------
> Îò: r.schr at t-online.de
> Êîìó: EUforum <EUforum at topica.com>
> Òåìà: Re: dos.e
> Äàòà: âîñêðåñåíüå, Ìàé 19, 2002 12:21
> 
> Derek Parnell wrote:
> > ...
> > Good work, J. Maybe not many people use DOS anymore blink
> > ...
> 
> Well, besides WinNT, I do! But I never used 'dos.e'.
> Where to find it? A search under DOS in the EU 
>  archive leads to nothing.
> 
> Have a nice day, Rolf

new topic     » goto parent     » topic index » view message » categorize

7. Re: dos.e

Sorry!
For some reason, the last part of my previous message was destroyed.

It should have been like this:


===========================[ documentation ]=============================

There is an error in the documentation at the beginning of the file:

<snip>
-------------------------------------------------------------------------------
--      i = move(old,new)                                                    --
--          Moves file old to new. Can be used as rename among different     --
--          disk drives.                                                     --
-------------------------------------------------------------------------------
--      i = rename(old,new)                                                  --
--          Renames file old to new.                                         --
--          NOTE: Can't rename among different disk drives                   --
-------------------------------------------------------------------------------
</snip>

There is a contradiction, because both move() and rename() exactly work
the same. The only thing move() does, is calling rename().

Best regards,
   Juergen

new topic     » goto parent     » topic index » view message » categorize

8. Re: dos.e

Hello Rolf,

you wrote:

> Derek Parnell wrote:
>> ...
>> Good work, J. Maybe not many people use DOS anymore blink
>> ...

> Well, besides WinNT, I do! But I never used 'dos.e'. Where to find it? A
> search under DOS in the EU archive leads to nothing.

You can find dos.e in the Archive at the page
http://www.rapideuphoria.com/lib.htm under he title "File Commands",
or directly download it from http://www.rapideuphoria.com/dos.zip

Best regards,
   Juergen

new topic     » goto parent     » topic index » view message » categorize

9. Re: dos.e

I, for one, use DOS for several tasks, Windows for many others, and Dragon
Linux for a few ones.
----- Original Message -----
From: "Derek Parnell" <ddparnell at bigpond.com>
To: "EUforum" <EUforum at topica.com>
Subject: Re: dos.e


>
> Good work, J. Maybe not many people use DOS anymore blink
>
> ----- Original Message -----
> From: <jluethje at gmx.de>
> To: "EUforum" <EUforum at topica.com>
> Sent: Sunday, May 19, 2002 8:11 AM
> Subject: dos.e
>
>
> >
> > Hi all,
> >
> > there are some bugs in dos.e (from Archive/Library Routines)
> > -- tested with Euphoria 2.3:
> >
> >
> > =============================[ deltree() ]==============================
> >
> > <code>
> > global function deltree(string dirname)
> >    [...]
> >    if not compare(dirname[length(dirname)], "\\") then
> >       dirname = dirname[1..length(dirname)-1]
> >    end if
> > </code>
> >
> > The condition   compare(dirname[length(dirname)], "\\")
> > is *always* -1, because dirname[length(dirname)] is an atom, and
> > "\\" is a sequence.
> >
> > So the statement   dirname = dirname[1..length(dirname)-1]   will
> > *never* be executed, and therefore the function will not work properly,
> > when called with a dirname that has a backslash at the end.
> >
> > ==> It should be:  if not compare(dirname[length(dirname)], '\\') then
> >     or (clearer):  if dirname[length(dirname)] = '\\' then
> >
> > ----------------------------------------
> >
> > Also in function deltree:
> >
> > <code>
> >    info = dir(dirname)
> >    [...]
> >    if not match(info[loop][D_ATTRIBUTES],"d") then
> >       i = delete(dirname & "\\" & info[loop][D_NAME])
> > </code>
> >
> > For a normal file, info[loop][D_ATTRIBUTES] is "", and then the error
> > "first argument of match() must be a non-empty sequence" is raised.
> > (BTW: I think this information should be included in the documentation
> >       for match().)
> >
> > Furthermore, eg match("da", "d") = 0, which means that the routine will
> > try to delete() a directory with the attributes "da", for instance
> > (which will not work, of cause).
> >
> > ==> It should be:  if not find('d', info[loop][D_ATTRIBUTES]) then
> >
> > ----------------------------------------
> > This is my modified deltree() function:
> > ----------------------------------------
> >
> > global function deltree (string dirname)
> >    object info
> >    integer i
> >
> >    if dirname[length(dirname)] = '\\' then
> >       dirname = dirname[1..length(dirname)-1]
> >    end if
> >    info = dir(dirname)
> >    if atom(info) then
> >       return false
> >    end if
> >    if length(info) < 3 then
> >       return rmdir(dirname)
> >    end if
> >    info = info[3..length(info)]
> >    for loop = 1 to length(info) do
> >       if not find('d', info[loop][D_ATTRIBUTES]) then
> >          i = delete(dirname & "\\" & info[loop][D_NAME])
> >          if not i then
> >             return false
> >          end if
> >       else
> >          i = deltree(dirname & "\\" & info[loop][D_NAME])
> >          if not i then
> >             return false
> >          end if
> >          i = rmdir(dirname & "\\" & info[loop][D_NAME])
> >       end if
> >    end for
> >    return rmdir(dirname)
> > end function
> >
> >
> > ==============================[ rename() ]==============================
> >
> > <code>
> > global function rename(string oldname, string newname)
<snip>

>
>
>

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu