--- /dev/null
+/*
+Copyright (C) 1999-2006 Id Software, Inc. and contributors.
+For a list of contributors, see the accompanying CONTRIBUTORS file.
+
+This file is part of GtkRadiant.
+
+GtkRadiant is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+GtkRadiant is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GtkRadiant; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+
+#include "qdata.h"
+
+byte *byteimage, *lbmpalette;
+int byteimagewidth, byteimageheight;
+
+qboolean TrueColorImage;
+unsigned *longimage;
+int longimagewidth, longimageheight;
+
+char pic_prefix[1024];
+extern char *g_outputDir;
+
+/*
+===============
+Cmd_Pic
+===============
+*/
+
+void Cmd_Pic (void)
+{
+ int xl,yl,xh,yh,w,h;
+ byte *dest, *source;
+ int flags, value, contents;
+ char lumpname[128];
+ char animname[128];
+ byte buffer[256*256];
+ unsigned bufferl[256*256];
+ char filename[1024];
+ unsigned *destl, *sourcel;
+ int linedelta, x, y;
+ int size;
+ miptex_t *qtex;
+ miptex32_t *qtex32;
+ float scale_x, scale_y;
+
+ GetScriptToken (false);
+ strcpy (lumpname, token);
+
+ GetScriptToken (false);
+ xl = atoi (token);
+ GetScriptToken (false);
+ yl = atoi (token);
+ GetScriptToken (false);
+ w = atoi (token);
+ GetScriptToken (false);
+ h = atoi (token);
+
+ total_x += w;
+ total_y += h;
+ total_textures++;
+
+ if ( (w & 7) || (h & 7) )
+ Error ("line %i: miptex sizes must be multiples of 8", scriptline);
+
+ flags = 0;
+ contents = 0;
+ value = 0;
+
+ animname[0] = 0;
+
+ scale_x = scale_y = 0.5;
+
+ if (TrueColorImage)
+ {
+ sprintf (filename, "%spics/%s/%s.m32", g_outputDir, pic_prefix, lumpname);
+ if (g_release)
+ return; // textures are only released by $maps
+
+ xh = xl+w;
+ yh = yl+h;
+
+ if (xl >= longimagewidth || xh > longimagewidth ||
+ yl >= longimageheight || yh > longimageheight)
+ {
+ Error ("line %i: bad clip dimmensions (%d,%d) (%d,%d) > image (%d,%d)", scriptline, xl,yl,w,h,longimagewidth,longimageheight);
+ }
+
+ sourcel = longimage + (yl*longimagewidth) + xl;
+ destl = bufferl;
+ linedelta = (longimagewidth - w);
+
+ for (y=yl ; y<yh ; y++)
+ {
+ for (x=xl ; x<xh ; x++)
+ {
+ *destl++ = *sourcel++; // RGBA
+ }
+ sourcel += linedelta;
+ }
+
+ qtex32 = CreateMip32(bufferl, w, h, &size, false);
+
+ qtex32->flags |= LittleLong(flags);
+ qtex32->contents = contents;
+ qtex32->value = value;
+ qtex32->scale_x = scale_x;
+ qtex32->scale_y = scale_y;
+ sprintf (qtex32->name, "%s/%s", pic_prefix, lumpname);
+ if (animname[0])
+ sprintf (qtex32->animname, "%s/%s", pic_prefix, animname);
+
+ //
+ // write it out
+ //
+ printf ("writing %s\n", filename);
+ SaveFile (filename, (byte *)qtex32, size);
+
+ free (qtex32);
+ }
+ else
+ {
+ sprintf (filename, "%spics/%s/%s.m8", g_outputDir, pic_prefix, lumpname);
+ if (g_release)
+ return; // textures are only released by $maps
+
+ xh = xl+w;
+ yh = yl+h;
+
+ if (xl >= byteimagewidth || xh > byteimagewidth ||
+ yl >= byteimageheight || yh > byteimageheight)
+ {
+ Error ("line %i: bad clip dimmensions (%d,%d) (%d,%d) > image (%d,%d)", scriptline, xl,yl,w,h,byteimagewidth,byteimageheight);
+ }
+
+ source = byteimage + yl*byteimagewidth + xl;
+ dest = buffer;
+ linedelta = byteimagewidth - w;
+
+ for (y=yl ; y<yh ; y++)
+ {
+ for (x=xl ; x<xh ; x++)
+ {
+ *dest++ = *source++;
+ }
+ source += linedelta;
+ }
+
+ qtex = CreateMip(buffer, w, h, lbmpalette, &size, false);
+
+ qtex->flags = flags;
+ qtex->contents = contents;
+ qtex->value = value;
+ sprintf (qtex->name, "%s/%s", pic_prefix, lumpname);
+ if (animname[0])
+ sprintf (qtex->animname, "%s/%s", pic_prefix, animname);
+
+ //
+ // write it out
+ //
+ printf ("writing %s\n", filename);
+ SaveFile (filename, (byte *)qtex, size);
+
+ free (qtex);
+ }
+}
+
+
+/*
+===============
+Cmd_picdir
+===============
+*/
+void Cmd_Picdir (void)
+{
+ char filename[1024];
+
+ GetScriptToken (false);
+ strcpy (pic_prefix, token);
+ // create the directory if needed
+ sprintf (filename, "%sPics", g_outputDir);
+ Q_mkdir (filename);
+ sprintf (filename, "%sPics/%s", g_outputDir, pic_prefix);
+ Q_mkdir (filename);
+}
+
+