Allow app to specify a base filename for error messages.
--- a/assemble.c Thu Feb 12 02:37:59 2009 -0500
+++ b/assemble.c Thu Feb 12 02:41:43 2009 -0500
@@ -11,7 +11,8 @@
#include <stdlib.h>
#include "mojoshader.h"
-static int assemble(const char *buf, int len, const char *outfile)
+static int assemble(const char *fname, const char *buf, int len,
+ const char *outfile)
{
FILE *io = fopen(outfile, "wb");
if (io == NULL)
@@ -23,8 +24,8 @@
const MOJOSHADER_parseData *pd;
int retval = 0;
- pd = MOJOSHADER_assemble(buf, len, NULL, 0, NULL, 0, NULL, 0,
- NULL, NULL, NULL, NULL, NULL);
+ pd = MOJOSHADER_assemble(fname, buf, len, NULL, 0, NULL, 0,
+ NULL, 0, NULL, NULL, NULL, NULL, NULL);
if (pd->error_count > 0)
{
int i;
@@ -76,7 +77,7 @@
printf(" ... fread('%s') failed.\n", infile);
else
{
- if (assemble(buf, rc, outfile))
+ if (assemble(infile, buf, rc, outfile))
retval = 0;
else
remove(outfile);
--- a/finderrors.c Thu Feb 12 02:37:59 2009 -0500
+++ b/finderrors.c Thu Feb 12 02:41:43 2009 -0500
@@ -84,7 +84,7 @@
const MOJOSHADER_parseData *a;
buf[rc] = '\0'; // make sure the source is null-terminated.
- a = MOJOSHADER_assemble((char *) buf, rc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ a = MOJOSHADER_assemble(fname, (char *) buf, rc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
if (a->error_count > 0)
{
--- a/mojoshader.h Thu Feb 12 02:37:59 2009 -0500
+++ b/mojoshader.h Thu Feb 12 02:41:43 2009 -0500
@@ -329,7 +329,8 @@
const char *error;
/*
- * Filename where error happened.
+ * Filename where error happened. This can be NULL if the information
+ * isn't available.
*/
const char *filename;
@@ -747,7 +748,14 @@
*
* This function maps to D3DXPreprocessShader().
*
- * (source) is an ASCII string of text to preprocess. It does not need to be
+ * (filename) is a NULL-terminated UTF-8 filename. It can be NULL. We do not
+ * actually access this file, as we obtain our data from (source). This
+ * string is copied when we need to report errors while processing (source),
+ * as opposed to errors in a file referenced via the #include directive in
+ * (source). If this is NULL, then errors will report the filename as NULL,
+ * too.
+ *
+ * (source) is an string of UTF-8 text to preprocess. It does not need to be
* NULL-terminated.
*
* (sourcelen) is the length of the string pointed to by (source), in bytes.
@@ -781,8 +789,8 @@
* call. This allows you to preprocess several shaders on separate CPU cores
* at the same time.
*/
-const MOJOSHADER_preprocessData *MOJOSHADER_preprocess(const char *source,
- unsigned int sourcelen,
+const MOJOSHADER_preprocessData *MOJOSHADER_preprocess(const char *filename,
+ const char *source, unsigned int sourcelen,
const MOJOSHADER_preprocessorDefine **defines,
unsigned int define_count,
MOJOSHADER_includeOpen include_open,
@@ -808,7 +816,14 @@
* This function is optional. Use this to convert Direct3D shader assembly
* language into bytecode, which can be handled by MOJOSHADER_parse().
*
- * (source) is an ASCII string of valid Direct3D shader assembly source code.
+ * (filename) is a NULL-terminated UTF-8 filename. It can be NULL. We do not
+ * actually access this file, as we obtain our data from (source). This
+ * string is copied when we need to report errors while processing (source),
+ * as opposed to errors in a file referenced via the #include directive in
+ * (source). If this is NULL, then errors will report the filename as NULL,
+ * too.
+ *
+ * (source) is an UTF-8 string of valid Direct3D shader assembly source code.
* It does not need to be NULL-terminated.
*
* (sourcelen) is the length of the string pointed to by (source), in bytes.
@@ -854,8 +869,8 @@
* call. This allows you to assemble several shaders on separate CPU cores
* at the same time.
*/
-const MOJOSHADER_parseData *MOJOSHADER_assemble(const char *source,
- unsigned int sourcelen,
+const MOJOSHADER_parseData *MOJOSHADER_assemble(const char *filename,
+ const char *source, unsigned int sourcelen,
const char **comments, unsigned int comment_count,
const MOJOSHADER_symbol *symbols,
unsigned int symbol_count,
--- a/mojoshader_assembler.c Thu Feb 12 02:37:59 2009 -0500
+++ b/mojoshader_assembler.c Thu Feb 12 02:41:43 2009 -0500
@@ -1514,7 +1514,8 @@
} // parse_token
-static Context *build_context(const char *source, unsigned int sourcelen,
+static Context *build_context(const char *filename,
+ const char *source, unsigned int sourcelen,
const MOJOSHADER_preprocessorDefine **defines,
unsigned int define_count,
MOJOSHADER_includeOpen include_open,
@@ -1537,7 +1538,7 @@
ctx->free = f;
ctx->malloc_data = d;
ctx->parse_phase = MOJOSHADER_PARSEPHASE_NOTSTARTED;
- ctx->preprocessor = preprocessor_start(NULL, source, sourcelen,
+ ctx->preprocessor = preprocessor_start(filename, source, sourcelen,
include_open, include_close,
defines, define_count, m, f, d);
@@ -1817,8 +1818,8 @@
// API entry point...
-const MOJOSHADER_parseData *MOJOSHADER_assemble(const char *source,
- unsigned int sourcelen,
+const MOJOSHADER_parseData *MOJOSHADER_assemble(const char *filename,
+ const char *source, unsigned int sourcelen,
const char **comments, unsigned int comment_count,
const MOJOSHADER_symbol *symbols,
unsigned int symbol_count,
@@ -1834,7 +1835,7 @@
if ( ((m == NULL) && (f != NULL)) || ((m != NULL) && (f == NULL)) )
return &MOJOSHADER_out_of_mem_data; // supply both or neither.
- ctx = build_context(source, sourcelen, defines, define_count,
+ ctx = build_context(filename, source, sourcelen, defines, define_count,
include_open, include_close, m, f, d);
if (ctx == NULL)
return &MOJOSHADER_out_of_mem_data;
--- a/mojoshader_preprocessor.c Thu Feb 12 02:37:59 2009 -0500
+++ b/mojoshader_preprocessor.c Thu Feb 12 02:41:43 2009 -0500
@@ -603,8 +603,8 @@
} // build_errors
-const MOJOSHADER_preprocessData *MOJOSHADER_preprocess(const char *source,
- unsigned int sourcelen,
+const MOJOSHADER_preprocessData *MOJOSHADER_preprocess(const char *filename,
+ const char *source, unsigned int sourcelen,
const MOJOSHADER_preprocessorDefine **defines,
unsigned int define_count,
MOJOSHADER_includeOpen include_open,
@@ -626,8 +626,7 @@
include_open = (MOJOSHADER_includeOpen) 0x1;
include_close = (MOJOSHADER_includeClose) 0x1;
- const char *fname = "*"; // !!! FIXME
- Preprocessor *pp = preprocessor_start(fname, source, sourcelen,
+ Preprocessor *pp = preprocessor_start(filename, source, sourcelen,
include_open, include_close,
defines, define_count, m, f, d);
--- a/preprocess.c Thu Feb 12 02:37:59 2009 -0500
+++ b/preprocess.c Thu Feb 12 02:41:43 2009 -0500
@@ -11,7 +11,8 @@
#include <stdlib.h>
#include "mojoshader.h"
-static int preprocess(const char *buf, int len, const char *outfile)
+static int preprocess(const char *fname, const char *buf, int len,
+ const char *outfile)
{
FILE *io = fopen(outfile, "wb");
if (io == NULL)
@@ -23,7 +24,7 @@
const MOJOSHADER_preprocessData *pd;
int retval = 0;
- pd = MOJOSHADER_preprocess(buf, len, NULL, 0, NULL,
+ pd = MOJOSHADER_preprocess(fname, buf, len, NULL, 0, NULL,
NULL, NULL, NULL, NULL);
if (pd->error_count > 0)
@@ -77,7 +78,7 @@
printf(" ... fread('%s') failed.\n", infile);
else
{
- if (preprocess(buf, rc, outfile))
+ if (preprocess(infile, buf, rc, outfile))
retval = 0;
else
remove(outfile);