misc/libphyslayer/hwpacksmounter.c
author nemo
Tue, 21 Aug 2018 15:11:28 -0400
branch0.9.24
changeset 13682 f60b3998ba56
parent 13395 fa81f809fbb9
child 15817 0defc1d3261d
permissions -rw-r--r--
only-stats should never create visual gears. and lua should never rely on visual gears being created. critical is just to help ensure ones important to gameplay don't get lost in fast-forward
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);
13393
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
            {
13393
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
					{
13395
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: 13393
diff changeset
    52
#if PHYSFS_VER_MAJOR > 2 || PHYSFS_VER_MINOR > 0
13393
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);
13395
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: 13393
diff changeset
    59
#endif
13393
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
13393
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
13393
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
}