Menu

[r2126]: / trunk / Src / FirstRun.UUnicode.pas  Maximize  Restore  History

Download this file

136 lines (125 with data), 3.7 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
{
* FirstRun.UUnicode.pas
*
* Pascal script for use in [Code] Section of CodeSnip's Install.iss.
*
* Helper file for working with Unicode. Requires the Unicode version of Inno
* Setup.
*
* $Rev$
* $Date$
*
* ***** BEGIN LICENSE BLOCK *****
*
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is FirstRun.UUnicode.pas, formerly Unicode.ps.
*
* The Initial Developer of the Original Code is Peter Johnson
* (http://www.delphidabbler.com/).
*
* Portions created by the Initial Developer are Copyright (C) 2007-2012 Peter
* Johnson. All Rights Reserved.
*
* Contributors:
* NONE
*
* ***** END LICENSE BLOCK *****
}
unit FirstRun.UUnicode;
interface
// Writes the lines of Unicode strings from the given string array to a named
// file. Each line is terminated with CRLF.
procedure WriteStringsToUnicodeFile(FileName: string; Lines: array of string);
implementation
uses
Windows,
UMessageBox;
//const
// // Constants for Windows CreateFile API function.
// GENERIC_WRITE = $40000000;
// CREATE_ALWAYS = 2;
//// Import for Windows CreateFileW API function.
//function CreateFileW(
// lpFileName: PWideChar;
// dwDesiredAccess, dwShareMode: DWORD;
// lpSecurityAttributes: PSecurityAttributes;
// dwCreationDisposition, dwFlagsAndAttributes: DWORD;
// hTemplateFile: THandle
//): THandle;
//external 'CreateFileW@kernel32.dll stdcall';
//
//// Import for Windows WriteFile API function. Prototype specialised for writing
//// Unicode strings.
//function WriteFile(
// hFile: THandle;
// const Buffer: string; // untyped param
// nNumberOfBytesToWrite: LongWord; // DWORD;
// var lpNumberOfBytesWritten: LongWord; // DWORD;
// lpOverlapped: Cardinal // POverlapped
//): BOOL;
//external 'WriteFile@kernel32.dll stdcall';
//
//// Import for Windows CloseHandle API function.
//function CloseHandle(
// hObject: THandle
//): BOOL;
//external 'CloseHandle@kernel32.dll stdcall';
// Writes the lines of Unicode strings from the given string array to a named
// file. Each line is terminated with CRLF.
procedure WriteStringsToUnicodeFile(FileName: string; Lines: array of string);
var
F: THandle; // file handle
I: Integer; // loops thru string array
BytesWritten: LongWord; // dummy for use with WriteFile
Line: string; // each line from array
BOM: WideChar; // stores UTF-16LE byte order mark
begin
// Create new file
F := CreateFileW(
PChar(FileName),
GENERIC_WRITE,
0,
nil,
CREATE_ALWAYS,
FILE_ATTRIBUTE_ARCHIVE,
0
);
if F = LongWord(-1) then
begin
TMessageBox.Error( nil, 'Error - can''t create file ' + FileName);
Exit;
end;
// Write BOM for UTF-16LE
BOM := #$FEFF;
WriteFile(
F,
BOM,
2, // Size of a Unicode char
BytesWritten,
nil
);
// Write each element of string array terminated by CRLF
for I := 0 to Length(Lines) - 1 do
begin
Line := Lines[I] + #13#10;
WriteFile(
F,
Line,
Length(Line) * 2, // These are 2 byte Unicode chars
BytesWritten,
nil
);
end;
// Close the file
CloseHandle(F);
end;
end.
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.