-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathinitopts.c
115 lines (104 loc) · 2.3 KB
/
initopts.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
* Copyright 2001-2018 Eric Smith <[email protected]>
*/
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include "dis.h"
char *predef[NPREDEF];
int npredef = 0;
char *file;
char *progname = "dis";
int bopt = UNKNOWN;
int base_address = 0;
int vector_address = 0x10000;
int entry_count = 0;
int entry_address[MAX_ENTRY];
int asmout = 0;
void usage (void)
{
fprintf (stderr, "Usage: %s <format> <options> <object-file>\n"
" format: -r <address> raw binary file\n"
" -b Atari boot format\n"
" -l Atari load format\n"
" -c Commodore 64\n"
" options: -a assembly output\n"
" -p <file> predefs\n"
" -e <address> alternate entry point address\n"
" -v <address> alternate vector address\n"
" -7 mask character data to 7-bit\n"
" -P decode ProDOS MLI calls\n",
progname);
exit (1);
}
void initopts (int argc, char *argv[])
{
int ai;
char *ca;
char *p;
int fileset = 0;
progname = argv[0];
while (--argc)
{
if ((*++argv)[0] == '-')
{
ca = *argv;
for(ai = 1; ca[ai] != '\0'; ai++)
switch (ca[ai])
{
case 'a':
asmout = 1;
break;
case 'p':
predef[npredef] = *++argv;
npredef++;
argc--;
break;
case 'r':
base_address = strtoul (*++argv, &p, 0);
if (*p)
crash ("base address must be specified");
bopt = RAW_BINARY;
argc--;
break;
case 'e':
entry_address [entry_count++] = strtoul (*++argv, &p, 0);
if (*p)
crash ("address required");
argc--;
break;
case 'v':
vector_address = strtoul (*++argv, &p, 0);
if (*p)
crash ("address required");
argc--;
break;
case 'l':
bopt = ATARI_LOAD;
break;
case 'c':
bopt = C64_LOAD;
break;
case 'b':
bopt = ATARI_BOOT;
break;
case '7':
sevenbit = true;
break;
case 'P':
prodos = true;
break;
default: crash("Invalid option letter");
}
}
else if (!fileset)
{
file = *argv;
fileset++;
}
else usage ();
}
if (!fileset)
usage ();
}