* How to rename a file? @ 2001-09-27 19:43 Pi 2001-09-27 23:09 ` tmoran ` (2 more replies) 0 siblings, 3 replies; 16+ messages in thread From: Pi @ 2001-09-27 19:43 UTC (permalink / raw) It may sound stupid, but I didn't find anything. Is there a way to rename files in Ada? Other than : create a new file, copy every byte into the new one, delete the old one. -- 3,14159265359 ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: How to rename a file? 2001-09-27 19:43 How to rename a file? Pi @ 2001-09-27 23:09 ` tmoran 2001-09-27 23:36 ` Larry Kilgallen 2001-09-28 2:16 ` DuckE 2001-09-28 3:16 ` David Botton 2 siblings, 1 reply; 16+ messages in thread From: tmoran @ 2001-09-27 23:09 UTC (permalink / raw) >Is there a way to rename files in Ada? Often. Consult your compiler's docs. Renaming files is usually impossible in embedded systems, systems living entirely in ROM, etc. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: How to rename a file? 2001-09-27 23:09 ` tmoran @ 2001-09-27 23:36 ` Larry Kilgallen 0 siblings, 0 replies; 16+ messages in thread From: Larry Kilgallen @ 2001-09-27 23:36 UTC (permalink / raw) In article <WkOs7.54950$L%5.36196502@news1.rdc1.sfba.home.com>, tmoran@acm.org writes: >>Is there a way to rename files in Ada? > Often. Consult your compiler's docs. Renaming files is usually > impossible in embedded systems, systems living entirely in ROM, etc. And renaming on a general purpose operating system is highly specific to the operating system in use. Some things are possible in one environment but not another. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: How to rename a file? 2001-09-27 19:43 How to rename a file? Pi 2001-09-27 23:09 ` tmoran @ 2001-09-28 2:16 ` DuckE 2001-09-28 2:54 ` Pi 2001-09-28 3:41 ` David Botton 2001-09-28 3:16 ` David Botton 2 siblings, 2 replies; 16+ messages in thread From: DuckE @ 2001-09-28 2:16 UTC (permalink / raw) Here's how I make the OS call on WindowsNT/W2K using ObjectAda or GNAT: WITH Win32; WITH Win32.WinBase; WITH Interfaces.C; ... PACKAGE WinBase RENAMES Win32.WinBase; PACKAGE C RENAMES Interfaces.C; USE TYPE Win32.BOOL; USE TYPE Win32.DWORD; ... PROCEDURE RenameFileDFU( sourceFileNameDFU, destFileNameDFU : STRING; renamedDFU : out BOOLEAN ) IS result : Win32.BOOL; sourceName : ALIASED C.Char_Array := C.To_C( sourceFileNameDFU ); destName : ALIASED C.Char_Array := C.To_C( destFileNameDFU ); BEGIN result := WinBase.MoveFile( sourceName(0)'UNCHECKED_ACCESS, destName(0)'UNCHECKED_ACCESS ); renamedDFU := result /= Win32.FALSE; END RenameFileDFU; I hope this helps, SteveD "Pi" <pi3_1415926536@yahoo.ca> wrote in message news:MYKs7.11405$%r.2963162@news20.bellglobal.com... > It may sound stupid, but I didn't find anything. > > Is there a way to rename files in Ada? > > Other than : > create a new file, > copy every byte into the new one, > delete the old one. > > -- > 3,14159265359 > ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: How to rename a file? 2001-09-28 2:16 ` DuckE @ 2001-09-28 2:54 ` Pi 2001-09-28 3:41 ` David Botton 1 sibling, 0 replies; 16+ messages in thread From: Pi @ 2001-09-28 2:54 UTC (permalink / raw) Thanks buddy, I'll try it tomorrow :-) DuckE wrote : > Here's how I make the OS call on WindowsNT/W2K using ObjectAda or GNAT: > > WITH Win32; > WITH Win32.WinBase; > WITH Interfaces.C; > ... > PACKAGE WinBase RENAMES Win32.WinBase; > PACKAGE C RENAMES Interfaces.C; > > USE TYPE Win32.BOOL; > USE TYPE Win32.DWORD; > ... > PROCEDURE RenameFileDFU( sourceFileNameDFU, destFileNameDFU : STRING; > renamedDFU : out BOOLEAN ) IS > result : Win32.BOOL; > sourceName : ALIASED C.Char_Array := C.To_C( sourceFileNameDFU ); > destName : ALIASED C.Char_Array := C.To_C( destFileNameDFU ); > BEGIN > result := WinBase.MoveFile( sourceName(0)'UNCHECKED_ACCESS, > destName(0)'UNCHECKED_ACCESS ); > renamedDFU := result /= Win32.FALSE; > END RenameFileDFU; > > I hope this helps, > SteveD > > "Pi" <pi3_1415926536@yahoo.ca> wrote in message > news:MYKs7.11405$%r.2963162@news20.bellglobal.com... > > It may sound stupid, but I didn't find anything. > > > > Is there a way to rename files in Ada? > > > > Other than : > > create a new file, > > copy every byte into the new one, > > delete the old one. > > > > -- > > 3,14159265359 > > > > -- 3,14159265359 ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: How to rename a file? 2001-09-28 2:16 ` DuckE 2001-09-28 2:54 ` Pi @ 2001-09-28 3:41 ` David Botton 2001-09-28 7:39 ` Lutz Donnerhacke ` (2 more replies) 1 sibling, 3 replies; 16+ messages in thread From: David Botton @ 2001-09-28 3:41 UTC (permalink / raw) To: comp.lang.ada On Win32 if you wish to be cross compiler (this also demonstrates why thin bindings are mostly a waste of time for Ada): First the ugly method: function Rename_File (Old_File, New_File : String) return Boolean is Old_C : Interfaces.C.Char_Array := Interfaces.C.To_C (Old_File); New_C : Interfaces.C.Char_Array := Interfaces.C.To_C (New_File); function MoveFile (Old_Name : Interfaces.C.Char_Array := Old_C; New_Name : Interfaces.C.Char_Array := New_C) return Boolean; pragma Import (StdCall, MoveFile, "MoveFileA"); begin return MoveFile; end Rename_File; Now the cool method: function Rename_File2 (Old_File, New_File : String) return Boolean is function MoveFile (Old_Name : String := Old_File & Character'Val (0); New_Name : String := New_File & Character'Val (0)) return Boolean; pragma Import (StdCall, MoveFile, "MoveFileA"); begin return MoveFile; end Rename_File2; Ada arrays are passed as C arrays do to the import so the use of String is valid, we just need to Zero terminate. Ada record types are also passed as pointers, which makes life a lot easier. For many more examples look through the bodies of GWindows code http://www.adapower.com/gwindows BTW, if you don't care about the result: procedure Rename_File3 (Old_File, New_File : String) is procedure MoveFile (Old_Name : String := Old_File & Character'Val (0); New_Name : String := New_File & Character'Val (0)); pragma Import (StdCall, MoveFile, "MoveFileA"); begin MoveFile; end Rename_File3; If you are using a compiler other then GNAT, you may need to insure that WinBase.lib is linked in (as you would using a Win32 thin binding). David Botton ----- Original Message ----- From: "DuckE" <nospam_steved94@home.com> Newsgroups: comp.lang.ada To: <comp.lang.ada@ada.eu.org> Sent: Thursday, September 27, 2001 10:16 PM Subject: Re: How to rename a file? > Here's how I make the OS call on WindowsNT/W2K using ObjectAda or GNAT: > > WITH Win32; > WITH Win32.WinBase; > WITH Interfaces.C; > ... > PACKAGE WinBase RENAMES Win32.WinBase; > PACKAGE C RENAMES Interfaces.C; > > USE TYPE Win32.BOOL; > USE TYPE Win32.DWORD; > ... > PROCEDURE RenameFileDFU( sourceFileNameDFU, destFileNameDFU : STRING; > renamedDFU : out BOOLEAN ) IS > result : Win32.BOOL; > sourceName : ALIASED C.Char_Array := C.To_C( sourceFileNameDFU ); > destName : ALIASED C.Char_Array := C.To_C( destFileNameDFU ); > BEGIN > result := WinBase.MoveFile( sourceName(0)'UNCHECKED_ACCESS, > destName(0)'UNCHECKED_ACCESS ); > renamedDFU := result /= Win32.FALSE; > END RenameFileDFU; > > I hope this helps, > SteveD > > "Pi" <pi3_1415926536@yahoo.ca> wrote in message > news:MYKs7.11405$%r.2963162@news20.bellglobal.com... > > It may sound stupid, but I didn't find anything. > > > > Is there a way to rename files in Ada? > > > > Other than : > > create a new file, > > copy every byte into the new one, > > delete the old one. > > > > -- > > 3,14159265359 > > > > > _______________________________________________ > comp.lang.ada mailing list > comp.lang.ada@ada.eu.org > http://ada.eu.org/mailman/listinfo/comp.lang.ada > ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: How to rename a file? 2001-09-28 3:41 ` David Botton @ 2001-09-28 7:39 ` Lutz Donnerhacke 2001-09-28 17:34 ` Pascal Obry 2001-09-29 5:02 ` DuckE 2 siblings, 0 replies; 16+ messages in thread From: Lutz Donnerhacke @ 2001-09-28 7:39 UTC (permalink / raw) * David Botton wrote: >Ada arrays are passed as C arrays do to the import so the use of String is >valid, we just need to Zero terminate. Ada record types are also passed as >pointers, which makes life a lot easier. There is no guarantee AFAIK. Even GCC (not to mention Ada) has different ways to do this. Therefore I prefer passing Interfaces.C.Strings.char_p over Interfaces.C.char_array over Standard.String. Especially, if you look how Standard.String is implemented: As a small struct, passable in registers or as a pointer to this struct. In the latter case your C-function may assume the pointer to the memory area containing the string values and the bounds. -fpcc-struct-return Use the same convention for returning struct and union values that is used by the usual C compiler on your system. This convention is less efficient for small structures, and on many machines it fails to be reentrant; but it has the advantage of allow� ing intercallability between GCC-compiled code and PCC-compiled code. -freg-struct-return Use the convention that struct and union values are returned in registers when possible. This is more efficient for small structures than -fpcc-struct-return. If you specify neither -fpcc-struct-return nor -freg-struct-return, GNU CC defaults to whichever convention is standard for the target. If there is no standard convention, GNU CC defaults to -fpcc-struct-return. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: How to rename a file? 2001-09-28 3:41 ` David Botton 2001-09-28 7:39 ` Lutz Donnerhacke @ 2001-09-28 17:34 ` Pascal Obry 2001-09-28 18:39 ` Larry Kilgallen 2001-09-30 1:51 ` David Botton 2001-09-29 5:02 ` DuckE 2 siblings, 2 replies; 16+ messages in thread From: Pascal Obry @ 2001-09-28 17:34 UTC (permalink / raw) "David Botton" <David@Botton.com> writes: > On Win32 if you wish to be cross compiler (this also demonstrates why thin > bindings are mostly a waste of time for Ada): > > First the ugly method: > (code removed) > > Now the cool method: > (code removed) Now the really cool method :) POSIX.Files.Rename ("myoldfile", "whateveristhenewname"); All the ugly binding to the OS has been done by the POSIX bindings developers... don't waste your time ! Pascal. -- --|------------------------------------------------------ --| Pascal Obry Team-Ada Member --| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE --|------------------------------------------------------ --| http://perso.wanadoo.fr/pascal.obry --| --| "The best way to travel is by means of imagination" ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: How to rename a file? 2001-09-28 17:34 ` Pascal Obry @ 2001-09-28 18:39 ` Larry Kilgallen 2001-09-30 1:51 ` David Botton 1 sibling, 0 replies; 16+ messages in thread From: Larry Kilgallen @ 2001-09-28 18:39 UTC (permalink / raw) In article <uofnvnrrz.fsf@wanadoo.fr>, Pascal Obry <p.obry@wanadoo.fr> writes: > > "David Botton" <David@Botton.com> writes: > >> On Win32 if you wish to be cross compiler (this also demonstrates why thin >> bindings are mostly a waste of time for Ada): >> >> First the ugly method: >> > > (code removed) > >> >> Now the cool method: >> > > (code removed) > > Now the really cool method :) > > POSIX.Files.Rename ("myoldfile", "whateveristhenewname"); > > All the ugly binding to the OS has been done by the POSIX bindings > developers... Only if you are satisfied with least-common-denominator semantics, avoiding OS-specific features. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: How to rename a file? 2001-09-28 17:34 ` Pascal Obry 2001-09-28 18:39 ` Larry Kilgallen @ 2001-09-30 1:51 ` David Botton 2001-09-30 8:53 ` Pascal Obry 1 sibling, 1 reply; 16+ messages in thread From: David Botton @ 2001-09-30 1:51 UTC (permalink / raw) To: comp.lang.ada That's not cool, but certainly an alternative. The coolness is in that code was that you don't need any "special" bindings for accessing low level C calls. In fact I think far to much emphasis has been placed on the need of thin bindings. Concentration should rather be made on "frameworks" (which POSIX bindings may perhaps also be included, as cross platform was in mind) and tools that abstract the C interfaces and work in a more Ada like nature. David Botton ----- Original Message ----- From: "Pascal Obry" <p.obry@wanadoo.fr> > Now the really cool method :) > > POSIX.Files.Rename ("myoldfile", "whateveristhenewname"); > > All the ugly binding to the OS has been done by the POSIX bindings > developers... don't waste your time ! ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: How to rename a file? 2001-09-30 1:51 ` David Botton @ 2001-09-30 8:53 ` Pascal Obry 2001-09-30 10:21 ` Florian Weimer 0 siblings, 1 reply; 16+ messages in thread From: Pascal Obry @ 2001-09-30 8:53 UTC (permalink / raw) "David Botton" <David@Botton.com> writes: > That's not cool, but certainly an alternative. ;) > The coolness is in that code was that you don't need any "special" bindings > for accessing low level C calls. In fact I think far to much emphasis has > been placed on the need of thin bindings. Concentration should rather be David, really POSIX is *far* from being a thin binding. Your cool example is way more thin than mine :) << function Rename_File2 (Old_File, New_File : String) return Boolean is function MoveFile (Old_Name : String := Old_File & Character'Val (0); New_Name : String := New_File & Character'Val (0)) return Boolean; pragma Import (StdCall, MoveFile, "MoveFileA"); begin return MoveFile; end Rename_File2; >> Character'Val (0), Stdcall, pragma Import... > made on "frameworks" (which POSIX bindings may perhaps also be included, as > cross platform was in mind) and tools that abstract the C interfaces and > work in a more Ada like nature. I won't call POSIX a framework since it is a _binding_ but yet not a thin one. And yes in cross-platform environemnt it is definitly the choice, this is why I do use it! Pascal. -- --|------------------------------------------------------ --| Pascal Obry Team-Ada Member --| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE --|------------------------------------------------------ --| http://perso.wanadoo.fr/pascal.obry --| --| "The best way to travel is by means of imagination" ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: How to rename a file? 2001-09-30 8:53 ` Pascal Obry @ 2001-09-30 10:21 ` Florian Weimer 2001-09-30 14:53 ` Pascal Obry 0 siblings, 1 reply; 16+ messages in thread From: Florian Weimer @ 2001-09-30 10:21 UTC (permalink / raw) Pascal Obry <p.obry@wanadoo.fr> writes: >> made on "frameworks" (which POSIX bindings may perhaps also be included, as >> cross platform was in mind) and tools that abstract the C interfaces and >> work in a more Ada like nature. > > I won't call POSIX a framework since it is a _binding_ but yet not a > thin one. Most POSIX.5 implementations aren't bindings. > And yes in cross-platform environemnt it is definitly the choice, > this is why I do use it! IMHO, the POSIX.5 interface is a horrible mess, combining the uselessness of POSIX.1 with some additional unfortunate design decisions. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: How to rename a file? 2001-09-30 10:21 ` Florian Weimer @ 2001-09-30 14:53 ` Pascal Obry 0 siblings, 0 replies; 16+ messages in thread From: Pascal Obry @ 2001-09-30 14:53 UTC (permalink / raw) Florian Weimer <fw@deneb.enyo.de> writes: > Pascal Obry <p.obry@wanadoo.fr> writes: > > >> made on "frameworks" (which POSIX bindings may perhaps also be included, as > >> cross platform was in mind) and tools that abstract the C interfaces and > >> work in a more Ada like nature. > > > > I won't call POSIX a framework since it is a _binding_ but yet not a > > thin one. > > Most POSIX.5 implementations aren't bindings. > > > And yes in cross-platform environemnt it is definitly the choice, > > this is why I do use it! > > IMHO, the POSIX.5 interface is a horrible mess, combining the > uselessness of POSIX.1 with some additional unfortunate design > decisions. Maybe, maybe not... I'm not a POSIX expert ! But yet I have some large applications that run without modification on Linux and Windows using a lot OS routines (Renaming files, running subprocess, waiting for process to terminate, retrieving environment variable values, retrieving all files on a specific directory...). I'm not saying that POSIX is in theory a good choice but it is the best choice I have seen so far... Do you know of other choices ? Pascal. -- --|------------------------------------------------------ --| Pascal Obry Team-Ada Member --| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE --|------------------------------------------------------ --| http://perso.wanadoo.fr/pascal.obry --| --| "The best way to travel is by means of imagination" ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: How to rename a file? 2001-09-28 3:41 ` David Botton 2001-09-28 7:39 ` Lutz Donnerhacke 2001-09-28 17:34 ` Pascal Obry @ 2001-09-29 5:02 ` DuckE 2 siblings, 0 replies; 16+ messages in thread From: DuckE @ 2001-09-29 5:02 UTC (permalink / raw) I've used both methods. I don't find thin bindings to be a waste of time, mainly because it keeps me from having to define constants, structures, function and procedure prototypes. Creating these definitions can be tricky. Using the thin bindings _usually_ the prototypes are right, it's just a matter of setting up the arguments correctly. IMHO SteveD "David Botton" <David@Botton.com> wrote in message news:mailman.1001648485.22108.comp.lang.ada@ada.eu.org... > On Win32 if you wish to be cross compiler (this also demonstrates why thin > bindings are mostly a waste of time for Ada): > [snip] ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: How to rename a file? 2001-09-27 19:43 How to rename a file? Pi 2001-09-27 23:09 ` tmoran 2001-09-28 2:16 ` DuckE @ 2001-09-28 3:16 ` David Botton 2001-09-28 16:03 ` Jeffrey Carter 2 siblings, 1 reply; 16+ messages in thread From: David Botton @ 2001-09-28 3:16 UTC (permalink / raw) To: comp.lang.ada > Is there a way to rename files in Ada? Using GNAT, you would use GNAT.OS_Lib.Rename_File (Old_Name, New_Name); Take a look around the GNAT.* packages, you will find many goodies! David Botton ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: How to rename a file? 2001-09-28 3:16 ` David Botton @ 2001-09-28 16:03 ` Jeffrey Carter 0 siblings, 0 replies; 16+ messages in thread From: Jeffrey Carter @ 2001-09-28 16:03 UTC (permalink / raw) For portability, I would suggest using Posix.Files.Rename. Posix is both OS and compiler independent. Implementations exist for most platforms. GNAT.OS_Lib is OS independent but compiler dependent. Putting Win32 calls in your code is probably compiler independent but definitely OS dependent. -- Jeffrey Carter ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2001-09-30 14:53 UTC | newest] Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2001-09-27 19:43 How to rename a file? Pi 2001-09-27 23:09 ` tmoran 2001-09-27 23:36 ` Larry Kilgallen 2001-09-28 2:16 ` DuckE 2001-09-28 2:54 ` Pi 2001-09-28 3:41 ` David Botton 2001-09-28 7:39 ` Lutz Donnerhacke 2001-09-28 17:34 ` Pascal Obry 2001-09-28 18:39 ` Larry Kilgallen 2001-09-30 1:51 ` David Botton 2001-09-30 8:53 ` Pascal Obry 2001-09-30 10:21 ` Florian Weimer 2001-09-30 14:53 ` Pascal Obry 2001-09-29 5:02 ` DuckE 2001-09-28 3:16 ` David Botton 2001-09-28 16:03 ` Jeffrey Carter
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox