summaryrefslogtreecommitdiff
path: root/assembler/main.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2006-08-30 10:22:56 -0700
committerDamien Lespiau <damien.lespiau@intel.com>2013-03-04 15:54:23 +0000
commit5fbc3990626328d18eeea4fbec2632b54d08772e (patch)
tree447c53cc4ca9b801bb148dc666f5d9453e5c7e84 /assembler/main.c
parent2d298742bfabc799251920c01b3b1db255b13145 (diff)
Add input/output file command line arguments.
Diffstat (limited to 'assembler/main.c')
-rw-r--r--assembler/main.c48
1 files changed, 46 insertions, 2 deletions
diff --git a/assembler/main.c b/assembler/main.c
index 65f34b86..0f1a50a9 100644
--- a/assembler/main.c
+++ b/assembler/main.c
@@ -28,6 +28,8 @@
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
#include "gen4asm.h"
@@ -35,17 +37,59 @@ extern FILE *yyin;
struct brw_program compiled_program;
+static const struct option longopts[] = {
+ { NULL, 0, NULL, 0 }
+};
+
+void usage(void)
+{
+ fprintf(stderr, "usage: gen4asm [-o outputfile] inputfile\n");
+}
+
int main(int argc, char **argv)
{
- int err;
+ FILE *output = stdout;
struct brw_program_instruction *entry;
+ int err;
+ char o;
+
+ while ((o = getopt_long(argc, argv, "o:", longopts, NULL)) != -1) {
+ switch (o) {
+ case 'o':
+ if (strcmp(optarg, "-") != 0) {
+ output = fopen(optarg, "w");
+ if (output == NULL) {
+ perror("Couldn't open output file");
+ exit(1);
+ }
+ }
+ break;
+ default:
+ usage();
+ exit(1);
+ }
+ }
+ argc -= optind;
+ argv += optind;
+ if (argc != 1) {
+ usage();
+ exit(1);
+ }
+
+ if (strcmp(argv[0], "-") != 0) {
+ yyin = fopen(argv[0], "r");
+ if (yyin == NULL) {
+ perror("Couldn't open input file");
+ exit(1);
+ }
+ }
err = yyparse();
for (entry = compiled_program.first;
entry != NULL;
entry = entry->next) {
- printf(" { 0x%08x, 0x%08x, 0x%08x, 0x%08x },\n",
+ fprintf(output, " { 0x%08x, 0x%08x, 0x%08x, 0x%08x },\n",
((int *)(&entry->instruction))[0],
((int *)(&entry->instruction))[1],
((int *)(&entry->instruction))[2],