--- /dev/null
+/* Copyright (c) 2019 Pat Thoyts <patthoyts>users.sourceforge.net>
+ *
+ * Print out some header information from a surface file.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <assert.h>
+#include "surfacefile.h"
+
+#ifdef WIN32
+#include <direct.h>
+#include <tchar.h>
+#else
+#include "compat/tchar.h"
+#endif /* !WIN32 */
+
+static int SrfInfo(const char *filename, FILE *fp)
+{
+ int r = 0;
+ SurfaceFileHeader hdr = {0};
+ fread(&hdr, sizeof(SurfaceFileHeaderRev0), 1, fp);
+ size_t hdrsize = sizeof(SurfaceFileHeaderRev0);
+ if (hdr.revision > 1)
+ hdrsize += sizeof(SurfaceFileHeaderRev2);
+ if (hdr.revision > 2)
+ hdrsize += sizeof(SurfaceFileHeaderRev3);
+ if (hdr.revision > 3)
+ hdrsize += sizeof(SurfaceFileHeaderRev4);
+ if (hdr.revision > 4)
+ hdrsize += sizeof(SurfaceFileHeaderRev5);
+ fseek(fp, 0, SEEK_SET);
+ fread(&hdr, hdrsize, 1, fp);
+
+ char ver[5] = { 0 };
+ memcpy(ver, &hdr.fileversion, 4);
+ char path[1024] = { 0 };
+ char *q = path;
+ const char *p = filename;
+ while (p && *p)
+ {
+ if (*p == '\\')
+ {
+ *q++ = '\\';
+ }
+ *q++ = *p++;
+ }
+ printf("{\"Filename\":\"%s\", \"Version\":\"%s\", \"Revision\":\"%d\", \"Points\":\"%u\", \"Triangles\":\"%u\", \"Images\":\"%u\"}\n",
+ path, ver, hdr.revision, hdr.num_points, hdr.num_triangles, hdr.num_images);
+ return 0;
+}
+
+int _tmain(int argc, TCHAR *argv[])
+{
+ if (argc != 2) {
+ _fputts(_T("usage: srfinfo filename"), stderr);
+ return 1;
+ }
+
+ FILE *fp = _tfopen(argv[1], _T("rb"));
+ if (fp == NULL) {
+ _tperror(_T("fopen"));
+ return 1;
+ }
+#ifdef UNICODE
+#error FIXME
+#endif
+ int r = SrfInfo(argv[1], fp);
+
+ fclose(fp);
+ return r;
+}