Wed, 02 Jul 2025 23:21:17 +0200
resolve TODOs regarding input.h
a) mouse position must be integer, because it can be negative (though rarely)
b) we should not trade "access complexity" for space in the scancodes array
86
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
1 | /* |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
3 | * Copyright 2025 Mike Becker. All rights reserved. |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
4 | * |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
5 | * Redistribution and use in source and binary forms, with or without |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
6 | * modification, are permitted provided that the following conditions are met: |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
7 | * |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
8 | * 1. Redistributions of source code must retain the above copyright |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
9 | * notice, this list of conditions and the following disclaimer. |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
10 | * |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
11 | * 2. Redistributions in binary form must reproduce the above copyright |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
12 | * notice, this list of conditions and the following disclaimer in the |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
13 | * documentation and/or other materials provided with the distribution. |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
14 | * |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
16 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
17 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
18 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
19 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
20 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
21 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
22 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
23 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
24 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
25 | * POSSIBILITY OF SUCH DAMAGE. |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
26 | */ |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
27 | |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
28 | #include "ascension/filesystem.h" |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
29 | |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
30 | bool asc_filesystem_is_absolute(cxstring path) { |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
31 | #ifdef _WIN32 |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
32 | #error "Windows currently not supported." |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
33 | #else |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
34 | return path.length > 0 && path.ptr[0] == '/'; |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
35 | #endif |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
36 | } |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
37 | |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
38 | |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
39 | cxmutstr asc_filesystem_combine_paths(cxstring base, cxstring path) { |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
40 | if (asc_filesystem_is_absolute(path)) { |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
41 | return cx_strdup(path); |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
42 | } |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
43 | if (base.length == 0) { |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
44 | return cx_strdup(path); |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
45 | } |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
46 | |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
47 | if (base.ptr[base.length - 1] == '/') base.length--; |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
48 | |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
49 | if (cx_strprefix(path, CX_STR("./"))) { |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
50 | path = cx_strsubs(path, 2); |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
51 | } |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
52 | |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
53 | return cx_strcat(3, base, CX_STR("/"), path); |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
54 | } |