]> de.git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - conout.c
This is supposted in C99
[xonotic/gmqcc.git] / conout.c
index c22758be9c178a43a7ac61617405a7124fcd7b4f..9d0659b4b691c3a9f44fb1b011af5f514b608cf2 100644 (file)
--- a/conout.c
+++ b/conout.c
@@ -1,43 +1,17 @@
-/*
- * Copyright (C) 2012, 2013
- *     Dale Weiler
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is furnished to do
- * so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
 #include <stdio.h>
 #include "gmqcc.h"
 
-#define GMQCC_IS_STDOUT(X) ((fs_file_t*)((void*)X) == (fs_file_t*)stdout)
-#define GMQCC_IS_STDERR(X) ((fs_file_t*)((void*)X) == (fs_file_t*)stderr)
+#define GMQCC_IS_STDOUT(X) ((X) == stdout)
+#define GMQCC_IS_STDERR(X) ((X) == stderr)
 #define GMQCC_IS_DEFINE(X) (GMQCC_IS_STDERR(X) || GMQCC_IS_STDOUT(X))
 
 typedef struct {
-    fs_file_t *handle_err;
-    fs_file_t *handle_out;
-    int        color_err;
-    int        color_out;
+    FILE *handle_err;
+    FILE *handle_out;
+    int color_err;
+    int color_out;
 } con_t;
 
-/*
- * We use standard files as default. These can be changed at any time
- * with con_change(F, F)
- */
 static con_t console;
 
 /*
@@ -58,8 +32,8 @@ static void con_enablecolor(void) {
  * arguments.  This colorizes for windows as well via translate
  * step.
  */
-static int con_write(fs_file_t *handle, const char *fmt, va_list va) {
-    return vfprintf((FILE*)handle, fmt, va);
+static int con_write(FILE *handle, const char *fmt, va_list va) {
+    return vfprintf(handle, fmt, va);
 }
 
 /**********************************************************************
@@ -68,9 +42,9 @@ static int con_write(fs_file_t *handle, const char *fmt, va_list va) {
 
 void con_close() {
     if (!GMQCC_IS_DEFINE(console.handle_err))
-        fs_file_close(console.handle_err);
+        fclose(console.handle_err);
     if (!GMQCC_IS_DEFINE(console.handle_out))
-        fs_file_close(console.handle_out);
+        fclose(console.handle_out);
 }
 
 void con_color(int state) {
@@ -83,54 +57,26 @@ void con_color(int state) {
 }
 
 void con_init() {
-    console.handle_err = (fs_file_t*)stderr;
-    console.handle_out = (fs_file_t*)stdout;
+    console.handle_err = stderr;
+    console.handle_out = stdout;
     con_enablecolor();
 }
 
 void con_reset() {
     con_close();
-    con_init ();
-}
-
-/*
- * This is clever, say you want to change the console to use two
- * files for out/err.  You pass in two strings, it will properly
- * close the existing handles (if they're not std* handles) and
- * open them.  Now say you want TO use stdout and stderr, this
- * allows you to do that so long as you cast them to (char*).
- * Say you need stdout for out, but want a file for error, you can
- * do this too, just cast the stdout for (char*) and stick to a
- * string for the error file.
- */
-int con_change(const char *out, const char *err) {
-    con_close();
-
-    if (!out) out = (const char *)((!console.handle_out) ? (fs_file_t*)stdout : console.handle_out);
-    if (!err) err = (const char *)((!console.handle_err) ? (fs_file_t*)stderr : console.handle_err);
-
-    if (GMQCC_IS_DEFINE(out)) {
-        console.handle_out = (fs_file_t*)(GMQCC_IS_STDOUT(out) ? stdout : stderr);
-        con_enablecolor();
-    } else if (!(console.handle_out = fs_file_open(out, "w"))) return 0;
-
-    if (GMQCC_IS_DEFINE(err)) {
-        console.handle_err = (fs_file_t*)(GMQCC_IS_STDOUT(err) ? stdout : stderr);
-        con_enablecolor();
-    } else if (!(console.handle_err = fs_file_open(err, "w"))) return 0;
-
-    return 1;
+    con_init();
 }
 
 /*
  * Defaultizer because stdio.h shouldn't be used anywhere except here
  * and inside file.c To prevent mis-match of wrapper-interfaces.
  */
-fs_file_t *con_default_out() {
-    return (fs_file_t*)(console.handle_out = (fs_file_t*)stdout);
+FILE *con_default_out() {
+    return console.handle_out = stdout;
 }
-fs_file_t *con_default_err() {
-    return (fs_file_t*)(console.handle_err = (fs_file_t*)stderr);
+
+FILE *con_default_err() {
+    return console.handle_err = stderr;
 }
 
 int con_verr(const char *fmt, va_list va) {
@@ -145,20 +91,20 @@ int con_vout(const char *fmt, va_list va) {
  * to be used.
  */
 int con_err(const char *fmt, ...) {
-    va_list  va;
-    int      ln = 0;
+    va_list va;
+    int ln = 0;
     va_start(va, fmt);
     con_verr(fmt, va);
-    va_end  (va);
-    return   ln;
+    va_end(va);
+    return ln;
 }
 int con_out(const char *fmt, ...) {
-    va_list  va;
-    int      ln = 0;
+    va_list va;
+    int ln = 0;
     va_start(va, fmt);
     con_vout(fmt, va);
-    va_end  (va);
-    return   ln;
+    va_end (va);
+    return ln;
 }
 
 /*
@@ -213,8 +159,7 @@ void con_cprintmsg(lex_ctx_t ctx, int lvl, const char *msgtype, const char *msg,
     va_end  (va);
 }
 
-#ifndef QCVM_EXECUTOR
-/* General error interface */
+/* General error interface: TODO seperate as part of the compiler front-end */
 size_t compile_errors   = 0;
 size_t compile_warnings = 0;
 size_t compile_Werrors  = 0;
@@ -279,4 +224,3 @@ bool GMQCC_WARN compile_warning(lex_ctx_t ctx, int warntype, const char *fmt, ..
     va_end(ap);
     return r;
 }
-#endif