hedgewars/uFLScripts.pas
author unc0rr
Sun, 09 Nov 2014 23:02:21 +0300
branchqmlfrontend
changeset 10458 f7a199346c3e
child 10517 844bd43db47a
permissions -rw-r--r--
Scripts list module
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10458
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
     1
unit uFLScripts;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
     2
interface
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
     3
uses uFLTypes;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
     4
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
     5
function getScriptsList: PPChar; cdecl;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
     6
procedure freeScriptsList;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
     7
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
     8
implementation
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
     9
uses uFLUtils, uFLIPC, uPhysFSLayer, uFLData;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    10
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    11
const MAX_SCRIPT_NAMES = 64;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    12
type
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    13
    TScript = record
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    14
            scriptName: shortstring;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    15
            description: shortstring;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    16
            gameScheme, weapons: shortstring;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    17
        end;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    18
    PScript = ^TScript;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    19
var
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    20
    scriptsList: PScript;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    21
    scriptsNumber: Longword;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    22
    listOfScriptNames: array[0..MAX_SCRIPT_NAMES] of PChar;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    23
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    24
procedure loadScript(var script: TScript; fileName: shortstring);
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    25
var f: PFSFile;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    26
    section: LongInt;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    27
    l: shortstring;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    28
begin
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    29
    section:= -1;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    30
    f:= pfsOpenRead(fileName);
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    31
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    32
    while (not pfsEOF(f)) do
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    33
    begin
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    34
        pfsReadLn(f, l);
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    35
    end;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    36
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    37
    pfsClose(f)
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    38
end;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    39
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    40
procedure loadScripts;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    41
var filesList, tmp: PPChar;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    42
    script: PScript;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    43
    s: shortstring;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    44
    l: Longword;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    45
begin
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    46
    filesList:= pfsEnumerateFiles('/Scripts/Multiplayer');
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    47
    scriptsNumber:= 0;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    48
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    49
    tmp:= filesList;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    50
    while tmp^ <> nil do
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    51
    begin
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    52
        s:= shortstring(tmp^);
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    53
        writeln(stderr, '> ', s);
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    54
        l:= length(s);
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    55
        if (l > 4) and (copy(s, l - 3, 4) = '.lua') then inc(scriptsNumber);
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    56
        inc(tmp)
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    57
    end;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    58
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    59
    scriptsList:= GetMem(sizeof(scriptsList^) * scriptsNumber);
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    60
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    61
    script:= scriptsList;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    62
    tmp:= filesList;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    63
    while tmp^ <> nil do
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    64
    begin
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    65
        s:= shortstring(tmp^);
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    66
        l:= length(s);
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    67
        if (l > 4) and (copy(s, l - 3, 4) = '.lua') then 
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    68
            begin
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    69
                loadScript(script^, '/Config/Scripts/' + s);
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    70
                inc(script)
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    71
            end;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    72
        inc(tmp)
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    73
    end;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    74
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    75
    pfsFreeList(filesList)
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    76
end;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    77
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    78
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    79
function getScriptsList: PPChar; cdecl;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    80
var i, t, l: Longword;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    81
    script: PScript;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    82
begin
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    83
    if scriptsList = nil then
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    84
        loadScripts;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    85
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    86
    t:= scriptsNumber;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    87
    if t >= MAX_SCRIPT_NAMES then 
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    88
        t:= MAX_SCRIPT_NAMES;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    89
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    90
    script:= scriptsList;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    91
    for i:= 0 to Pred(t) do
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    92
    begin
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    93
        l:= length(script^.scriptName);
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    94
        if l >= 255 then l:= 254;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    95
        script^.scriptName[l + 1]:= #0;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    96
        listOfScriptNames[i]:= @script^.scriptName[1];
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    97
        inc(script)
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    98
    end;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
    99
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
   100
    listOfScriptNames[t]:= nil;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
   101
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
   102
    getScriptsList:= listOfScriptNames
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
   103
end;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
   104
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
   105
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
   106
procedure freeScriptsList;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
   107
begin
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
   108
    if scriptsList <> nil then
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
   109
        FreeMem(scriptsList, sizeof(scriptsList^) * scriptsNumber)
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
   110
end;
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
   111
f7a199346c3e Scripts list module
unc0rr
parents:
diff changeset
   112
end.