UFO: Alien Invasion
ufoslicer.cpp
Go to the documentation of this file.
1
7#include <SDL_main.h>
8#include "../common/bspslicer.h"
9#include "../common/mem.h"
10#include "../shared/byte.h"
11#include "../common/tracing.h"
12#include "../tools/ufo2map/common/bspfile.h"
13
18
19typedef struct slicerConfig_s {
20 float thickness;
21 int scale;
26
27static slicerConfig_t config = {8.0, 1, false, false, ""};
28
29static void Usage (void)
30{
31 Com_Printf("Usage: ./ufoslicer -t N -s N -c -m bspfile\n");
32 Com_Printf("\n");
33 Com_Printf(" -t N = use slice thickness of N units.\n");
34 Com_Printf(" -s N = use scale factor of N.\n");
35 Com_Printf(" -m = create multiple contour maps.\n");
36 Com_Printf(" -c = combine the contours in a single file. Implies -m.\n");
37 Com_Printf(" -h|--help = show this help screen.\n");
38 Com_Printf("\n");
39 Com_Printf("For example: ./ufoslicer -t 64 -s 8 maps/farm\n");
40 Com_Printf("would slice the map \"farm.bsp\", moving by 64 units between slices and\n");
41 Com_Printf("would create a 1/8th scale bitmap file.\n");
42 Com_Printf("\n");
43 Com_Printf("The default for -t is 8 units.\n");
44
46
47 exit(EXIT_FAILURE);
48}
49
53static void SL_Parameter (int argc, char** argv)
54{
55 int i;
56
57 for (i = 1; i < argc; i++) {
58 if (Q_streq(argv[i], "-t") && (i + 1 < argc)) {
59 config.thickness = strtod(argv[++i], nullptr);
60 } else if (Q_streq(argv[i], "-s") && (i + 1 < argc)) {
61 config.scale = atoi(argv[++i]);
62 } else if (Q_streq(argv[i], "-c")) {
63 config.singleFile = true;
64 } else if (Q_streq(argv[i], "-m")) {
66 } else if (Q_streq(argv[i], "-h") || Q_streq(argv[i], "--help")) {
67 Usage();
68 } else {
69 if (config.filename[0] == '\0') {
70 Q_strncpyz(config.filename, argv[i], sizeof(config.filename));
71 } else {
72 Com_Printf("Parameters unknown. Try --help.\n");
73 Usage();
74 }
75 }
76 }
77}
78
79void Com_Printf (const char* format, ...)
80{
81 char out_buffer[4096];
82 va_list argptr;
83
84 va_start(argptr, format);
85 Q_vsnprintf(out_buffer, sizeof(out_buffer), format, argptr);
86 va_end(argptr);
87
88 printf("%s", out_buffer);
89}
90
91int main (int argc, char** argv)
92{
93 char bspFilename[MAX_OSPATH];
94
95 if (argc < 2) {
96 Usage();
97 }
98
100 com_fileSysPool = Mem_CreatePool("slicer filesys");
101
102 Swap_Init();
103 Mem_Init();
104
105 SL_Parameter(argc, argv);
106
107 Com_StripExtension(config.filename, bspFilename, sizeof(bspFilename));
108 Com_DefaultExtension(bspFilename, sizeof(bspFilename), ".bsp");
109
110 FS_InitFilesystem(false);
112
113 Mem_Shutdown();
114
115 return EXIT_SUCCESS;
116}
dMapTile_t * LoadBSPFile(const char *filename)
Definition: bspfile.cpp:231
void SL_BSPSlice(const TR_TILE_TYPE *model, float thickness, int scale, bool singleFile, bool multipleContour)
Definition: bspslicer.cpp:315
void Swap_Init(void)
Definition: byte.cpp:31
void FS_InitFilesystem(bool writeToHomeDir)
Definition: files.cpp:890
#define MAX_OSPATH
Definition: filesys.h:44
#define MAX_QPATH
Definition: filesys.h:40
const char * filename
Definition: ioapi.h:41
void Mem_Init(void)
Definition: mem.cpp:588
void Mem_Shutdown(void)
Definition: mem.cpp:603
#define Mem_CreatePool(name)
Definition: mem.h:32
void format(__printf__, 1, 2)))
QGL_EXTERN GLint i
Definition: r_gl.h:113
#define Q_streq(a, b)
Definition: shared.h:136
void Com_StripExtension(const char *in, char *out, const size_t size)
Removes the file extension from a filename.
Definition: shared.cpp:259
void Q_strncpyz(char *dest, const char *src, size_t destsize)
Safe strncpy that ensures a trailing zero.
Definition: shared.cpp:457
void Com_DefaultExtension(char *path, size_t len, const char *extension)
Sets a default extension if there is none.
Definition: shared.cpp:297
int Q_vsnprintf(char *str, size_t size, const char *format, va_list ap)
Safe (null terminating) vsnprintf implementation.
Definition: shared.cpp:535
bool multipleContour
Definition: ufoslicer.cpp:23
char filename[MAX_QPATH]
Definition: ufoslicer.cpp:24
mapTiles_t mapTiles
Definition: ufoslicer.cpp:17
static void SL_Parameter(int argc, char **argv)
Parameter parsing.
Definition: ufoslicer.cpp:53
int main(int argc, char **argv)
Definition: ufoslicer.cpp:91
dMapTile_t * curTile
Definition: ufoslicer.cpp:16
static slicerConfig_t config
Definition: ufoslicer.cpp:27
void Com_Printf(const char *format,...)
Definition: ufoslicer.cpp:79
static void Usage(void)
Definition: ufoslicer.cpp:29
memPool_t * com_genericPool
Definition: ufoslicer.cpp:15
memPool_t * com_fileSysPool
Definition: ufoslicer.cpp:14