hedgewars/uPhysFSLayer.pas
author unc0rr
Wed, 14 Nov 2012 23:27:33 +0400
branchphysfslayer
changeset 8028 dc30104660d3
parent 8025 07862ab415c8
child 8031 fc40b343c45c
permissions -rw-r--r--
Engine loads fine with basic config
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7959
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
     1
unit uPhysFSLayer;
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
     2
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
     3
{$LINKLIB ../bin/libphysfs.a}
8022
10b3b93c1f56 - Add physfsrwops library
unc0rr
parents: 7963
diff changeset
     4
{$LINKLIB ../bin/libphysfsrwops.a}
7959
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
     5
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
     6
interface
8022
10b3b93c1f56 - Add physfsrwops library
unc0rr
parents: 7963
diff changeset
     7
uses SDLh;
7959
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
     8
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
     9
procedure initModule;
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    10
procedure freeModule;
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    11
8028
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    12
type PFSFile = pointer;
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    13
8025
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    14
function rwopsOpenRead(fname: shortstring): PSDL_RWops;
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    15
function rwopsOpenWrite(fname: shortstring): PSDL_RWops;
8022
10b3b93c1f56 - Add physfsrwops library
unc0rr
parents: 7963
diff changeset
    16
8028
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    17
function pfsOpenRead(fname: shortstring): PFSFile;
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    18
function pfsEOF(f: PFSFile): boolean;
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    19
function pfsClose(f: PFSFile): boolean;
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    20
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    21
procedure pfsReadLn(f: PFSFile; var s: shortstring);
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    22
7959
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    23
implementation
8022
10b3b93c1f56 - Add physfsrwops library
unc0rr
parents: 7963
diff changeset
    24
uses uUtils, uVariables;
7959
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    25
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    26
function PHYSFS_init(argv0: PChar) : LongInt; cdecl; external;
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    27
function PHYSFS_deinit() : LongInt; cdecl; external;
8025
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    28
function PHYSFSRWOPS_openRead(fname: PChar): PSDL_RWops; cdecl; external;
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    29
function PHYSFSRWOPS_openWrite(fname: PChar): PSDL_RWops; cdecl; external;
7959
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    30
7963
9910f303f5b6 Fix function prototype
unc0rr
parents: 7959
diff changeset
    31
function PHYSFS_mount(newDir, mountPoint: PChar; appendToPath: LongBool) : LongInt; cdecl; external;
8028
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    32
function PHYSFS_openRead(fname: PChar): PFSFile; cdecl; external;
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    33
function PHYSFS_eof(f: PFSFile): LongBool; cdecl; external;
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    34
function PHYSFS_read(f: PFSFile; buf: pointer; objSize, objCount: Longword): Int64; cdecl; external;
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    35
function PHYSFS_close(f: PFSFile): LongBool; cdecl; external;
7959
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    36
8025
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    37
function rwopsOpenRead(fname: shortstring): PSDL_RWops;
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    38
begin
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    39
    exit(PHYSFSRWOPS_openRead(Str2PChar(fname)));
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    40
end;
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    41
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    42
function rwopsOpenWrite(fname: shortstring): PSDL_RWops;
7959
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    43
begin
8025
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    44
    exit(PHYSFSRWOPS_openWrite(Str2PChar(fname)));
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    45
end;
8022
10b3b93c1f56 - Add physfsrwops library
unc0rr
parents: 7963
diff changeset
    46
8028
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    47
function pfsOpenRead(fname: shortstring): PFSFile;
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    48
begin
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    49
    exit(PHYSFS_openRead(Str2PChar(fname)));
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    50
end;
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    51
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    52
function pfsEOF(f: PFSFile): boolean;
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    53
begin
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    54
    exit(PHYSFS_eof(f))
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    55
end;
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    56
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    57
function pfsClose(f: PFSFile): boolean;
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    58
begin
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    59
    exit(PHYSFS_close(f))
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    60
end;
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    61
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    62
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    63
procedure pfsReadLn(f: PFSFile; var s: shortstring);
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    64
var c: char;
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    65
begin
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    66
s[0]:= #0;
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    67
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    68
while (PHYSFS_read(f, @c, 1, 1) = 1) and (c <> #10) do
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    69
    if (c <> #13) and (s[0] < #255) then
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    70
        begin
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    71
        inc(s[0]);
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    72
        s[byte(s[0])]:= c
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    73
        end
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    74
end;
dc30104660d3 Engine loads fine with basic config
unc0rr
parents: 8025
diff changeset
    75
8025
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    76
procedure initModule;
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    77
var i: LongInt;
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    78
begin
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    79
    i:= PHYSFS_init(Str2PChar(ParamStr(0)));
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    80
    AddFileLog('[PhysFS] init: ' + inttostr(i));
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    81
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    82
    i:= PHYSFS_mount(Str2PChar(PathPrefix), nil, true);
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    83
    AddFileLog('[PhysFS] mount ' + PathPrefix + ': ' + inttostr(i));
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    84
    i:= PHYSFS_mount(Str2PChar(UserPathPrefix), nil, true);
07862ab415c8 Get rid of Pathz and UserPathz
unc0rr
parents: 8022
diff changeset
    85
    AddFileLog('[PhysFS] mount ' + UserPathPrefix + ': ' + inttostr(i));
7959
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    86
end;
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    87
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    88
procedure freeModule;
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    89
begin
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    90
    PHYSFS_deinit;
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    91
end;
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    92
644b757d20e6 Start work on physfs support in engine
unc0rr
parents:
diff changeset
    93
end.