Update Files

This commit is contained in:
2025-01-22 16:18:30 +01:00
parent ed4603cf95
commit a36294b518
16718 changed files with 2960346 additions and 0 deletions

View File

@ -0,0 +1,69 @@
/*
* Copyright (C)2005-2019 Haxe Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package sys.io;
import php.Global.*;
import php.Global;
@:coreApi class File {
public static function getContent(path:String):String {
return file_get_contents(path);
}
public static function getBytes(path:String):haxe.io.Bytes {
return haxe.io.Bytes.ofString(file_get_contents(path));
}
public static function saveContent(path:String, content:String):Void {
file_put_contents(path, content);
}
public static function saveBytes(path:String, bytes:haxe.io.Bytes):Void {
var f = write(path);
f.write(bytes);
f.close();
}
public static function read(path:String, binary:Bool = true):FileInput {
return @:privateAccess new FileInput(fopen(path, binary ? "rb" : "r"));
}
public static function write(path:String, binary:Bool = true):FileOutput {
return untyped new FileOutput(fopen(path, binary ? "wb" : "w"));
}
public static function append(path:String, binary:Bool = true):FileOutput {
return untyped new FileOutput(fopen(path, binary ? "ab" : "a"));
}
public static function update(path:String, binary:Bool = true):FileOutput {
if (!FileSystem.exists(path)) {
write(path).close();
}
return untyped new FileOutput(fopen(path, binary ? "rb+" : "r+"));
}
public static function copy(srcPath:String, dstPath:String):Void {
Global.copy(srcPath, dstPath);
}
}

View File

@ -0,0 +1,100 @@
/*
* Copyright (C)2005-2019 Haxe Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package sys.io;
import haxe.io.Eof;
import haxe.io.Error;
import haxe.io.Bytes;
import php.*;
import php.Global.*;
import php.Const.*;
@:coreApi
class FileInput extends haxe.io.Input {
private var __f:Resource;
function new(f:Resource):Void {
__f = f;
}
public override function readByte():Int {
var r = fread(__f, 1);
if (feof(__f))
throw new Eof();
if (r == false)
throw Custom('An error occurred');
return ord(r);
}
public override function readBytes(s:Bytes, p:Int, l:Int):Int {
if (feof(__f))
throw new Eof();
var r = fread(__f, l);
if (r == false)
throw Custom('An error occurred');
if (strlen(r) == 0)
throw new Eof();
var b = Bytes.ofString(r);
s.blit(p, b, 0, strlen(r));
return strlen(r);
}
public override function close():Void {
super.close();
if (__f != null)
fclose(__f);
}
public function seek(p:Int, pos:FileSeek):Void {
var w;
switch (pos) {
case SeekBegin:
w = SEEK_SET;
case SeekCur:
w = SEEK_CUR;
case SeekEnd:
w = SEEK_END;
}
var r = fseek(__f, p, w);
if (r == -1)
throw Custom('An error occurred');
}
public function tell():Int {
var r = ftell(__f);
if (r == false)
throw Custom('An error occurred');
return cast r;
}
public function eof():Bool {
return feof(__f);
}
override function readLine():String {
var r = fgets(__f);
if (false == r)
throw new Eof();
return rtrim(r, "\r\n");
}
}

View File

@ -0,0 +1,86 @@
/*
* Copyright (C)2005-2019 Haxe Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package sys.io;
import php.*;
import php.Global.*;
import php.Const.*;
@:coreApi
class FileOutput extends haxe.io.Output {
private var __f:Resource;
function new(f:Resource):Void {
__f = f;
}
public override function writeByte(c:Int):Void {
var r = fwrite(__f, chr(c));
if (r == false)
throw haxe.io.Error.Custom('An error occurred');
}
public override function writeBytes(b:haxe.io.Bytes, p:Int, l:Int):Int {
var s = b.getString(p, l);
if (feof(__f))
throw new haxe.io.Eof();
var r = fwrite(__f, s, l);
if (r == false)
throw haxe.io.Error.Custom('An error occurred');
return r;
}
public override function flush():Void {
var r = fflush(__f);
if (r == false)
throw haxe.io.Error.Custom('An error occurred');
}
public override function close():Void {
super.close();
if (__f != null)
fclose(__f);
}
public function seek(p:Int, pos:FileSeek):Void {
var w;
switch (pos) {
case SeekBegin:
w = SEEK_SET;
case SeekCur:
w = SEEK_CUR;
case SeekEnd:
w = SEEK_END;
}
var r = fseek(__f, p, w);
if (r == -1)
throw haxe.io.Error.Custom('An error occurred');
}
public function tell():Int {
var r = ftell(__f);
if (r == false)
throw haxe.io.Error.Custom('An error occurred');
return r;
}
}

View File

@ -0,0 +1,200 @@
/*
* Copyright (C)2005-2019 Haxe Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package sys.io;
import php.*;
import haxe.io.*;
import haxe.SysTools;
using StringTools;
using php.Global;
@:forward(iterator)
private abstract ProcessPipes(NativeIndexedArray<Resource>) from NativeIndexedArray<Resource> to NativeIndexedArray<Resource> {
public var stdin(get, never):Resource;
public var stdout(get, never):Resource;
public var stderr(get, never):Resource;
inline function get_stdin()
return this[0];
inline function get_stdout()
return this[1];
inline function get_stderr()
return this[2];
}
private class ReadablePipe extends Input {
var pipe:Resource;
var tmpBytes:Bytes;
public function new(pipe:Resource) {
this.pipe = pipe;
tmpBytes = Bytes.alloc(1);
}
override public function close():Void {
pipe.fclose();
}
override public function readByte():Int {
if (readBytes(tmpBytes, 0, 1) == 0)
throw Error.Blocked;
return tmpBytes.get(0);
}
override public function readBytes(s:Bytes, pos:Int, len:Int):Int {
if (pipe.feof())
throw new Eof();
var result = pipe.fread(len);
if (result == "")
throw new Eof();
if (result == false)
return throw Error.Custom('Failed to read process output');
var result:String = result;
var bytes = Bytes.ofString(result);
s.blit(pos, bytes, 0, result.strlen());
return result.strlen();
}
}
private class WritablePipe extends Output {
var pipe:Resource;
var tmpBytes:Bytes;
public function new(pipe:Resource) {
this.pipe = pipe;
tmpBytes = Bytes.alloc(1);
}
override public function close():Void {
pipe.fclose();
}
override public function writeByte(c:Int):Void {
tmpBytes.set(0, c);
writeBytes(tmpBytes, 0, 1);
}
override public function writeBytes(b:Bytes, pos:Int, l:Int):Int {
var s = b.getString(pos, l);
if (pipe.feof())
throw new Eof();
var result = Global.fwrite(pipe, s, l);
if (result == false)
throw Error.Custom('Failed to write to process input');
return result;
}
}
class Process {
public var stdout(default, null):Input;
public var stderr(default, null):Input;
public var stdin(default, null):Output;
var process:Resource;
var pipes:ProcessPipes;
var pid:Int = -1;
var running:Bool = true;
var _exitCode:Int = -1;
public function new(cmd:String, ?args:Array<String>, ?detached:Bool):Void {
if (detached)
throw "Detached process is not supported on this platform";
var descriptors = Syntax.arrayDecl(Syntax.arrayDecl('pipe', 'r'), Syntax.arrayDecl('pipe', 'w'), Syntax.arrayDecl('pipe', 'w'));
var result = buildCmd(cmd, args).proc_open(descriptors, pipes);
if (result == false)
throw Error.Custom('Failed to start process: $cmd');
process = result;
updateStatus();
stdin = new WritablePipe(pipes.stdin);
stdout = new ReadablePipe(pipes.stdout);
stderr = new ReadablePipe(pipes.stderr);
}
public function getPid():Int {
return pid;
}
public function exitCode(block:Bool = true):Null<Int> {
if (!block) {
updateStatus();
return (running ? null : _exitCode);
}
while (running) {
var arr = Syntax.arrayDecl(process);
try {
Syntax.suppress(Global.stream_select(arr, arr, arr, null));
} catch(_) {}
updateStatus();
}
return _exitCode;
}
public function close():Void {
if (!running)
return;
for (pipe in pipes)
Global.fclose(pipe);
process.proc_close();
}
public function kill():Void {
process.proc_terminate();
}
function buildCmd(cmd:String, ?args:Array<String>):String {
if (args == null)
return cmd;
return switch (Sys.systemName()) {
case "Windows":
[cmd.replace("/", "\\")].concat(args).map(SysTools.quoteWinArg.bind(_, true)).join(" ");
case _:
[cmd].concat(args).map(SysTools.quoteUnixArg).join(" ");
}
}
function updateStatus():Void {
if (!running)
return;
var status = process.proc_get_status();
if (status == false)
throw Error.Custom('Failed to obtain process status');
var status:NativeAssocArray<Scalar> = status;
pid = status['pid'];
running = status['running'];
_exitCode = status['exitcode'];
}
}