Initial revision
This commit is contained in:
parent
467f680968
commit
78aae09a09
87
util/misc/convert.c
Normal file
87
util/misc/convert.c
Normal file
|
@ -0,0 +1,87 @@
|
|||
#ifndef NORCSID
|
||||
static char rcsid[] = "$Header$";
|
||||
#endif
|
||||
|
||||
/* This program converts either human-readable or compact EM
|
||||
assembly code to calls of the procedure-interface.
|
||||
It must be linked with two libraries:
|
||||
- a library to read EM code, according to read_em(3)
|
||||
- a library implementing the em_code(3) interface.
|
||||
Thus, this program could serve as an EM_encoder, an
|
||||
EM_decoder, or some code generator, depending on how it is
|
||||
linked.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <em_pseu.h>
|
||||
#include <em_mnem.h>
|
||||
#include <em_spec.h>
|
||||
#include <em_flag.h>
|
||||
#include <em_ptyp.h>
|
||||
#include <em.h>
|
||||
#include <em_comp.h>
|
||||
|
||||
char *filename; /* Name of input file */
|
||||
int errors; /* Number of errors */
|
||||
|
||||
main(argc,argv)
|
||||
char **argv;
|
||||
{
|
||||
struct e_instr *EM_getinstr();
|
||||
register struct e_instr *p;
|
||||
register struct e_args *ap;
|
||||
|
||||
if (argc >= 2) {
|
||||
filename = argv[1];
|
||||
}
|
||||
else filename = 0;
|
||||
if (!EM_open(filename)) {
|
||||
fatal(EM_error);
|
||||
}
|
||||
p = EM_getinstr();
|
||||
C_init((arith) EM_wordsize, (arith) EM_pointersize);
|
||||
if (argc >= 3) {
|
||||
if (!C_open(argv[2])) {
|
||||
fatal("C_open failed");
|
||||
}
|
||||
}
|
||||
else if (!C_open( (char *) 0)) fatal("C_open failed");
|
||||
C_magic();
|
||||
while (p) {
|
||||
if (p->em_type == EM_FATAL) {
|
||||
fatal("EM_getinstr: %s", EM_error);
|
||||
}
|
||||
if (p->em_type == EM_ERROR) {
|
||||
error("EM_getinstr: %s", EM_error);
|
||||
continue;
|
||||
}
|
||||
if (!EM_mkcalls(p)) {
|
||||
error("EM_mkcalls: %s", EM_error);
|
||||
}
|
||||
p = EM_getinstr();
|
||||
}
|
||||
C_close();
|
||||
EM_close();
|
||||
return errors ? 1 : 0;
|
||||
}
|
||||
|
||||
/* VARARGS */
|
||||
error(s,a1,a2,a3,a4)
|
||||
char *s;
|
||||
{
|
||||
fprintf(stderr,
|
||||
"%s, line %d: ",
|
||||
filename ? filename : "standard input",
|
||||
EM_lineno);
|
||||
fprintf(stderr,s,a1,a2,a3,a4);
|
||||
putc('\n', stderr);
|
||||
errors++;
|
||||
}
|
||||
|
||||
/* VARARGS */
|
||||
fatal(s,a1,a2,a3,a4)
|
||||
char *s;
|
||||
{
|
||||
error(s,a1,a2,a3,a4);
|
||||
exit(1);
|
||||
}
|
Loading…
Reference in a new issue