misc/libphyslayer/hwpacksmounter.c
author Wuzzy <Wuzzy2@mail.ru>
Tue, 21 Aug 2018 17:56:17 +0200
changeset 13680 d3a4cbba060e
parent 13400 fa81f809fbb9
permissions -rw-r--r--
Consistently rename "team chat" to "clan chat" (except chat command) Only change in strings, no functional change. "Team" and "clan" have defined meanings in HW, but "team chat" oddly broke this convention. This feature allows chat with your clan, not with your team, so is now called "clan chat". /team command unchanged to avoid disruption (for now).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8052
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
     1
#include <string.h>
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
     2
#include <stdio.h>
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
     3
#include <stdlib.h>
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
     4
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
     5
#include "hwpacksmounter.h"
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
     6
8119
257ffa847aa2 physfs: no carbon depency on osx, add cdecl attributes on extra functions
koda
parents: 8074
diff changeset
     7
PHYSFS_DECL void hedgewarsMountPackages()
8052
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
     8
{
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
     9
    char ** filesList = PHYSFS_enumerateFiles("/");
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    10
    char **i;
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    11
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    12
    for (i = filesList; *i != NULL; i++)
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    13
    {
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    14
        char * fileName = *i;
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    15
        int fileNameLength = strlen(fileName);
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    16
        if (fileNameLength > 4)
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    17
            if (strcmp(fileName + fileNameLength - 4, ".hwp") == 0)
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    18
            {
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    19
                const char * dir = PHYSFS_getRealDir(fileName);
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    20
                if(dir)
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    21
                {
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    22
                    char * fullPath = (char *)malloc(strlen(dir) + fileNameLength + 2);
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    23
                    strcpy(fullPath, dir);
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    24
                    strcat(fullPath, "/");
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    25
                    strcat(fullPath, fileName);
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    26
8714
ab201a62d115 Prepend, not append
unc0rr
parents: 8524
diff changeset
    27
                    PHYSFS_mount(fullPath, NULL, 0);
8052
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    28
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    29
                    free(fullPath);
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    30
                }
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    31
            }
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    32
    }
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    33
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    34
    PHYSFS_freeList(filesList);
845b5ae03841 Mount .hwt files found in Data folder
unc0rr
parents:
diff changeset
    35
}
8978
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    36
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    37
PHYSFS_DECL void hedgewarsMountPackage(char * fileName)
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    38
{
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    39
    int fileNameLength = strlen(fileName);
13398
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    40
    int dirLength = 0;
8978
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    41
    if (fileNameLength > 4)
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    42
        if (strcmp(fileName + fileNameLength - 4, ".hwp") == 0)
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    43
        {
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    44
            const char * dir = PHYSFS_getRealDir(fileName);
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    45
            if(dir)
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    46
            {
13398
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    47
				dirLength = strlen(dir);
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    48
				if (dirLength > 4)
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    49
				{
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    50
					if (strcmp(dir + dirLength - 4, ".hwp") == 0)
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    51
					{
13400
fa81f809fbb9 IFDEF for Phys 2.0 which has no mountHandle - result will just be no hwp in hwp on those systems, which would be rarely used and DLC only.
nemo
parents: 13398
diff changeset
    52
#if PHYSFS_VER_MAJOR > 2 || PHYSFS_VER_MINOR > 0
13398
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    53
						char * uniqName = (char *)malloc(strlen(dir) + fileNameLength + 2);
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    54
						strcpy(uniqName, dir);
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    55
						strcat(uniqName, ",");
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    56
						strcat(uniqName, fileName);
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    57
						PHYSFS_mountHandle(PHYSFS_openRead(fileName), uniqName, NULL, 0);
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    58
						free(uniqName);
13400
fa81f809fbb9 IFDEF for Phys 2.0 which has no mountHandle - result will just be no hwp in hwp on those systems, which would be rarely used and DLC only.
nemo
parents: 13398
diff changeset
    59
#endif
13398
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    60
					}
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    61
					else
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    62
					{
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    63
						char * fullPath = (char *)malloc(strlen(dir) + fileNameLength + 2);
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    64
						strcpy(fullPath, dir);
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    65
						strcat(fullPath, "/");
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    66
						strcat(fullPath, fileName);
8978
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    67
13398
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    68
						PHYSFS_mount(fullPath, NULL, 0);
8978
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    69
13398
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    70
						free(fullPath);
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    71
					}
ae5d6448c5be Make wrapping a lua and its sidecar actually work.
nemo
parents: 8978
diff changeset
    72
				}
8978
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    73
            }
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    74
        }
e6ef8fe314bd suggestion of unc0rr's to fix issue w/ random maps in campaign. load sidecar packages in physfs for lua. should be useful also for lua that does custom layouts
nemo
parents: 8714
diff changeset
    75
}