]> granicus.if.org Git - yasm/commitdiff
Add global filename variable and handling for a filename passed on the
authorPeter Johnson <peter@tortall.net>
Sat, 18 Aug 2001 22:15:12 +0000 (22:15 -0000)
committerPeter Johnson <peter@tortall.net>
Sat, 18 Aug 2001 22:15:12 +0000 (22:15 -0000)
command line (no real command-line parsing yet).

svn path=/trunk/yasm/; revision=130

frontends/yasm/yasm.c
libyasm/bytecode.c
libyasm/errwarn.c
libyasm/errwarn.h
libyasm/linemgr.h
src/bytecode.c
src/errwarn.c
src/errwarn.h
src/globals.h
src/linemgr.h
src/main.c

index ffb095ccee895411934c3be019f6f0904fc6c825..d7db7939ae272262196a91f5b80d3cfc0558c9ab 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: yasm.c,v 1.4 2001/07/11 23:16:50 peter Exp $
+/* $Id: yasm.c,v 1.5 2001/08/18 22:15:12 peter Exp $
  * Program entry point, command line parsing
  *
  *  Copyright (C) 2001  Peter Johnson
  */
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 
 extern int yydebug;
+extern FILE *yyin;
 
 extern int yyparse(void);
 
+char *filename = (char *)NULL;
 unsigned int line_number = 1;
 unsigned int mode_bits = 32;
 
 int
-main (void)
+main (int argc, char *argv[])
 {
+    FILE *in;
+
     yydebug = 1;
+
+    if(argc==2) {
+       in = fopen(argv[1], "rt");
+       if(!in) {
+           fprintf(stderr, "could not open file `%s'\n", argv[1]);
+           return EXIT_FAILURE;
+       }
+       filename = strdup(argv[1]);
+       yyin = in;
+    } else
+       filename = strdup("<UNKNOWN>");
+
     yyparse();
+
+    if(filename)
+       free(filename);
     return EXIT_SUCCESS;
 }
 
index 9af7ad0de22aaa66269266b6a11498b6b9f8b818..54c7c8e4b08230754ff52bdf2a80104c61e37a3d 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: bytecode.c,v 1.14 2001/07/25 00:33:10 peter Exp $
+/* $Id: bytecode.c,v 1.15 2001/08/18 22:15:12 peter Exp $
  * Bytecode utility functions
  *
  *  Copyright (C) 2001  Peter Johnson
@@ -21,6 +21,7 @@
  */
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include "globals.h"
 #include "bytecode.h"
 #include "errwarn.h"
@@ -232,7 +233,7 @@ BuildBC_Common (bytecode *bc)
 {
     bc->len = 0;
 
-    bc->filename = (char *)NULL;
+    bc->filename = strdup(filename);
     bc->lineno = line_number;
 
     bc->offset = 0;
index b6c4e2637e0c1dfe12ee4841e832c7125ac51790..eaf6292a659384705fb842c755f86f104dba4d7b 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: errwarn.c,v 1.17 2001/07/25 00:33:10 peter Exp $
+/* $Id: errwarn.c,v 1.18 2001/08/18 22:15:12 peter Exp $
  * Error and warning reporting and related functions.
  *
  *  Copyright (C) 2001  Peter Johnson
@@ -72,7 +72,8 @@ static char *err_msgs[] = {
     "unexpected end of file in string",
     "expression syntax error",
     "floating-point constant encountered in `%s'",
-    "non-floating-point value encountered in `%s'"
+    "non-floating-point value encountered in `%s'",
+    "could not open file `%s'"
 };
 
 /* Warning messages.  Match up with warn_num enum in errwarn.h. */
@@ -275,7 +276,7 @@ void
 OutputError (void)
 {
     if(last_err_num != ERR_NONE)
-       fprintf(stderr, "filename:%u: %s\n", line_number, last_err);
+       fprintf(stderr, "%s:%u: %s\n", filename, line_number, last_err);
     last_err_num = ERR_NONE;
 }
 
@@ -284,7 +285,8 @@ void
 OutputWarning (void)
 {
     if(last_warn_num != WARN_NONE)
-       fprintf(stderr, "filename:%u: warning: %s\n", line_number, last_warn);
+       fprintf(stderr, "%s:%u: warning: %s\n", filename, line_number,
+           last_warn);
     last_warn_num = WARN_NONE;
 }
 
index 51bf7175c693458edf4510a5c2578ed0e4e30be3..5c76a17ba963d28f348d04113d922a5d301b9d94 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: errwarn.h,v 1.11 2001/07/25 00:33:10 peter Exp $
+/* $Id: errwarn.h,v 1.12 2001/08/18 22:15:12 peter Exp $
  * Error and warning reporting and related functions header file.
  *
  *  Copyright (C) 2001  Peter Johnson
@@ -50,7 +50,8 @@ typedef enum {
     ERR_STRING_EOF,
     ERR_EXPR_SYNTAX,
     ERR_DECLDATA_FLOAT,
-    ERR_DECLDATA_EXPR
+    ERR_DECLDATA_EXPR,
+    ERR_FILE_OPEN
 } err_num;
 
 /* Warning constants.  Match up with warn_msgs in errwarn.c. */
index 30153d4f3b39cf4516bf9eb0ab8a0868d658eb8b..e33463c8f36617429bf20099a3fc3cd2dd127ad0 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: linemgr.h,v 1.3 2001/06/28 21:22:01 peter Exp $
+/* $Id: linemgr.h,v 1.4 2001/08/18 22:15:12 peter Exp $
  * Globals header file
  *
  *  Copyright (C) 2001  Peter Johnson
@@ -22,6 +22,7 @@
 #ifndef YASM_GLOBALS_H
 #define YASM_GLOBALS_H
 
+extern char *filename;
 extern unsigned int line_number;
 extern unsigned int mode_bits;
 extern struct symrec_s *locallabel_base;
index 9af7ad0de22aaa66269266b6a11498b6b9f8b818..54c7c8e4b08230754ff52bdf2a80104c61e37a3d 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: bytecode.c,v 1.14 2001/07/25 00:33:10 peter Exp $
+/* $Id: bytecode.c,v 1.15 2001/08/18 22:15:12 peter Exp $
  * Bytecode utility functions
  *
  *  Copyright (C) 2001  Peter Johnson
@@ -21,6 +21,7 @@
  */
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include "globals.h"
 #include "bytecode.h"
 #include "errwarn.h"
@@ -232,7 +233,7 @@ BuildBC_Common (bytecode *bc)
 {
     bc->len = 0;
 
-    bc->filename = (char *)NULL;
+    bc->filename = strdup(filename);
     bc->lineno = line_number;
 
     bc->offset = 0;
index b6c4e2637e0c1dfe12ee4841e832c7125ac51790..eaf6292a659384705fb842c755f86f104dba4d7b 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: errwarn.c,v 1.17 2001/07/25 00:33:10 peter Exp $
+/* $Id: errwarn.c,v 1.18 2001/08/18 22:15:12 peter Exp $
  * Error and warning reporting and related functions.
  *
  *  Copyright (C) 2001  Peter Johnson
@@ -72,7 +72,8 @@ static char *err_msgs[] = {
     "unexpected end of file in string",
     "expression syntax error",
     "floating-point constant encountered in `%s'",
-    "non-floating-point value encountered in `%s'"
+    "non-floating-point value encountered in `%s'",
+    "could not open file `%s'"
 };
 
 /* Warning messages.  Match up with warn_num enum in errwarn.h. */
@@ -275,7 +276,7 @@ void
 OutputError (void)
 {
     if(last_err_num != ERR_NONE)
-       fprintf(stderr, "filename:%u: %s\n", line_number, last_err);
+       fprintf(stderr, "%s:%u: %s\n", filename, line_number, last_err);
     last_err_num = ERR_NONE;
 }
 
@@ -284,7 +285,8 @@ void
 OutputWarning (void)
 {
     if(last_warn_num != WARN_NONE)
-       fprintf(stderr, "filename:%u: warning: %s\n", line_number, last_warn);
+       fprintf(stderr, "%s:%u: warning: %s\n", filename, line_number,
+           last_warn);
     last_warn_num = WARN_NONE;
 }
 
index 51bf7175c693458edf4510a5c2578ed0e4e30be3..5c76a17ba963d28f348d04113d922a5d301b9d94 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: errwarn.h,v 1.11 2001/07/25 00:33:10 peter Exp $
+/* $Id: errwarn.h,v 1.12 2001/08/18 22:15:12 peter Exp $
  * Error and warning reporting and related functions header file.
  *
  *  Copyright (C) 2001  Peter Johnson
@@ -50,7 +50,8 @@ typedef enum {
     ERR_STRING_EOF,
     ERR_EXPR_SYNTAX,
     ERR_DECLDATA_FLOAT,
-    ERR_DECLDATA_EXPR
+    ERR_DECLDATA_EXPR,
+    ERR_FILE_OPEN
 } err_num;
 
 /* Warning constants.  Match up with warn_msgs in errwarn.c. */
index a5fe788f28b4b36d27d29101611308b1560820b1..5083ebdc50d310712e34f52d6a1025e147a5a5ee 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: globals.h,v 1.3 2001/06/28 21:22:01 peter Exp $
+/* $Id: globals.h,v 1.4 2001/08/18 22:15:12 peter Exp $
  * Globals header file
  *
  *  Copyright (C) 2001  Peter Johnson
@@ -22,6 +22,7 @@
 #ifndef YASM_GLOBALS_H
 #define YASM_GLOBALS_H
 
+extern char *filename;
 extern unsigned int line_number;
 extern unsigned int mode_bits;
 extern struct symrec_s *locallabel_base;
index 30153d4f3b39cf4516bf9eb0ab8a0868d658eb8b..e33463c8f36617429bf20099a3fc3cd2dd127ad0 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: linemgr.h,v 1.3 2001/06/28 21:22:01 peter Exp $
+/* $Id: linemgr.h,v 1.4 2001/08/18 22:15:12 peter Exp $
  * Globals header file
  *
  *  Copyright (C) 2001  Peter Johnson
@@ -22,6 +22,7 @@
 #ifndef YASM_GLOBALS_H
 #define YASM_GLOBALS_H
 
+extern char *filename;
 extern unsigned int line_number;
 extern unsigned int mode_bits;
 extern struct symrec_s *locallabel_base;
index 28bee46fc90d82ada196d6739106b9d9c035519a..68cbcaea6ce6ec0da19b1a1b0e8b52bca0e16db0 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.4 2001/07/11 23:16:50 peter Exp $
+/* $Id: main.c,v 1.5 2001/08/18 22:15:12 peter Exp $
  * Program entry point, command line parsing
  *
  *  Copyright (C) 2001  Peter Johnson
  */
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 
 extern int yydebug;
+extern FILE *yyin;
 
 extern int yyparse(void);
 
+char *filename = (char *)NULL;
 unsigned int line_number = 1;
 unsigned int mode_bits = 32;
 
 int
-main (void)
+main (int argc, char *argv[])
 {
+    FILE *in;
+
     yydebug = 1;
+
+    if(argc==2) {
+       in = fopen(argv[1], "rt");
+       if(!in) {
+           fprintf(stderr, "could not open file `%s'\n", argv[1]);
+           return EXIT_FAILURE;
+       }
+       filename = strdup(argv[1]);
+       yyin = in;
+    } else
+       filename = strdup("<UNKNOWN>");
+
     yyparse();
+
+    if(filename)
+       free(filename);
     return EXIT_SUCCESS;
 }