UFO: Alien Invasion
Doxygen documentation generating
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 
19 typedef struct slicerConfig_s {
20  float thickness;
21  int scale;
22  bool singleFile;
26 
27 static slicerConfig_t config = {8.0, 1, false, false, ""};
28 
29 static 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 
45  Mem_Shutdown();
46 
47  exit(EXIT_FAILURE);
48 }
49 
53 static 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")) {
65  config.multipleContour = true;
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 
79 void 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 
91 int main (int argc, char** argv)
92 {
93  char bspFilename[MAX_OSPATH];
94 
95  if (argc < 2) {
96  Usage();
97  }
98 
99  com_genericPool = Mem_CreatePool("slicer");
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 }
int Q_vsnprintf(char *str, size_t size, const char *format, va_list ap)
Safe (null terminating) vsnprintf implementation.
Definition: shared.cpp:535
void Mem_Shutdown(void)
Definition: mem.cpp:518
void Swap_Init(void)
Definition: byte.cpp:31
void Com_StripExtension(const char *in, char *out, const size_t size)
Removes the file extension from a filename.
Definition: shared.cpp:259
const char * filename
Definition: ioapi.h:41
#define MAX_OSPATH
Definition: filesys.h:44
static slicerConfig_t config
Definition: ufoslicer.cpp:27
void SL_BSPSlice(const TR_TILE_TYPE *model, float thickness, int scale, bool singleFile, bool multipleContour)
Definition: bspslicer.cpp:315
void Q_strncpyz(char *dest, const char *src, size_t destsize)
Safe strncpy that ensures a trailing zero.
Definition: shared.cpp:457
dMapTile_t * LoadBSPFile(const char *filename)
Definition: bspfile.cpp:231
mapTiles_t mapTiles
Definition: ufoslicer.cpp:17
memPool_t * com_fileSysPool
Definition: ufoslicer.cpp:14
void FS_InitFilesystem(bool writeToHomeDir)
Definition: files.cpp:890
#define Mem_CreatePool(name)
Definition: mem.h:32
memPool_t * com_genericPool
Definition: ufoslicer.cpp:15
static void Usage(void)
Definition: ufoslicer.cpp:29
void Com_DefaultExtension(char *path, size_t len, const char *extension)
Sets a default extension if there is none.
Definition: shared.cpp:297
bool multipleContour
Definition: ufoslicer.cpp:23
#define MAX_QPATH
Definition: filesys.h:40
QGL_EXTERN GLint i
Definition: r_gl.h:113
void Mem_Init(void)
Definition: mem.cpp:506
static void SL_Parameter(int argc, char **argv)
Parameter parsing.
Definition: ufoslicer.cpp:53
dMapTile_t * curTile
Definition: ufoslicer.cpp:16
#define Q_streq(a, b)
Definition: shared.h:136
char filename[MAX_QPATH]
Definition: ufoslicer.cpp:24
void Com_Printf(const char *format,...)
Definition: ufoslicer.cpp:79
void format(__printf__, 1, 2)))
int main(int argc, char **argv)
Definition: ufoslicer.cpp:91