Source file : win32.adb
package body Win32 is
function Cat (Left, Right : String) return String is
Nul : constant Character := Character'First;
begin
if Left (Left'Last) = Nul then
if Right (Right'Last) = Nul then
return Left (Left'First .. Left'Last - 1) & Right;
else
return Left (Left'First .. Left'Last - 1) & Right & Nul;
end if;
else
if Right (Right'Last) = Nul then
return Left & Right;
else
return Left & Right & Nul;
end if;
end if;
end Cat;
function Cat (Left, Right : Wide_String) return Wide_String is
Nul : constant Wide_Character := Wide_Character'First;
begin
if Left (Left'Last) = Nul then
if Right (Right'Last) = Nul then
return Left (Left'First .. Left'Last - 1) & Right;
else
return Left (Left'First .. Left'Last - 1) & Right & Nul;
end if;
else
if Right (Right'Last) = Nul then
return Left & Right;
else
return Left & Right & Nul;
end if;
end if;
end Cat;
function Cat (Left, Right : CHAR_Array) return CHAR_Array is
Nul : constant CHAR := CHAR'First;
use type Win32.CHAR;
begin
if Left (Left'Last) = Nul then
if Right (Right'Last) = Nul then
return Left (Left'First .. Left'Last - 1) & Right;
else
return Left (Left'First .. Left'Last - 1) & Right & Nul;
end if;
else
if Right (Right'Last) = Nul then
return Left & Right;
else
return Left & Right & Nul;
end if;
end if;
end Cat;
function Cat (Left, Right : WCHAR_Array) return WCHAR_Array is
Nul : constant WCHAR := WCHAR'First;
use type Win32.WCHAR;
begin
if Left (Left'Last) = Nul then
if Right (Right'Last) = Nul then
return Left (Left'First .. Left'Last - 1) & Right;
else
return Left (Left'First .. Left'Last - 1) & Right & Nul;
end if;
else
if Right (Right'Last) = Nul then
return Left & Right;
else
return Left & Right & Nul;
end if;
end if;
end Cat;
function Addr (S : String) return PSTR is
function To_PSTR is new
Ada.Unchecked_Conversion (System.Address, PSTR);
begin
return To_PSTR (S (S'First)'Address);
end Addr;
function Addr (S : String) return PCSTR is
begin
return To_PCSTR (S (S'First)'Address);
end Addr;
function Addr (S : Wide_String) return PWSTR is
begin
return To_PWSTR (S (S'First)'Address);
end Addr;
function Addr (S : Wide_String) return PCWSTR is
begin
return To_PCWSTR (S (S'First)'Address);
end Addr;
function Addr (S : CHAR_Array) return PSTR is
function To_PSTR is new
Ada.Unchecked_Conversion (System.Address, PSTR);
begin
return To_PSTR (S (S'First)'Address);
end Addr;
function Addr (S : CHAR_Array) return PCSTR is
begin
return To_PCSTR (S (S'First)'Address);
end Addr;
function Addr (S : WCHAR_Array) return PWSTR is
begin
return To_PWSTR (S (S'First)'Address);
end Addr;
function Addr (S : WCHAR_Array) return PCWSTR is
begin
return To_PCWSTR (S (S'First)'Address);
end Addr;
function To_Chars_Ptr (STR : PSTR) return Interfaces.C.Strings.chars_ptr is
function UC1 is new
Ada.Unchecked_Conversion (PSTR, Interfaces.C.Strings.chars_ptr);
begin
return UC1 (STR);
end To_Chars_Ptr;
function To_Chars_Ptr (STR : PCSTR) return Interfaces.C.Strings.chars_ptr is
function UC2 is new
Ada.Unchecked_Conversion (PCSTR, Interfaces.C.Strings.chars_ptr);
begin
return UC2 (STR);
end To_Chars_Ptr;
function To_PSTR (CP : Interfaces.C.Strings.chars_ptr) return PSTR is
function UC3 is new
Ada.Unchecked_Conversion (Interfaces.C.Strings.chars_ptr, PSTR);
begin
return UC3 (CP);
end To_PSTR;
function To_PCSTR (CP : Interfaces.C.Strings.chars_ptr) return PCSTR is
function UC4 is new
Ada.Unchecked_Conversion (Interfaces.C.Strings.chars_ptr, PCSTR);
begin
return UC4 (CP);
end To_PCSTR;
function To_C (S : CHAR_Array) return Interfaces.C.char_array is
Res : Interfaces.C.char_array (
Interfaces.C.size_t (S'First) ..
Interfaces.C.size_t (S'Last));
begin
Res := Interfaces.C.char_array (S);
return Res;
end To_C;
function To_Win (S : Interfaces.C.char_array) return CHAR_Array is
Low : constant Integer := Integer (S'First);
High : constant Integer := Integer (S'Last);
Res : CHAR_Array (Low .. High);
begin
Res := CHAR_Array (S);
return Res;
end To_Win;
function To_Win (S : Interfaces.C.wchar_array) return WCHAR_Array is
Low : constant Integer := Integer (S'First);
High : constant Integer := Integer (S'Last);
Res : WCHAR_Array (Low .. High);
begin
Res := WCHAR_Array (S);
return Res;
end To_Win;
----------------------------------------------------------------------------
--
-- THIS FILE AND ANY ASSOCIATED DOCUMENTATION IS FURNISHED "AS IS"
-- WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
-- INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
-- MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. The
-- user assumes the entire risk as to the accuracy and the use of
-- this file.
--
-- Copyright (c) Intermetrics, Inc. 1995
-- Royalty-free, unlimited, worldwide, non-exclusive use, modification,
-- reproduction and further distribution of this file is permitted.
--
----------------------------------------------------------------------------
end Win32;
-- Log
-- 05/04/1998 - remove Pragma Linker_Options ("-lwin32ada") - this option
-- is already set in the spec.
Zip-Ada: Ada library for zip archive files (.zip).
Ada programming.
Some news about Zip-Ada and other related Ada projects
on Gautier's blog.