Plan 9 from Bell Labs’s /usr/web/sources/contrib/maht/inferno/appl/cmd/asm/asm.b

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


implement Asm;

include "draw.m";
draw : Draw;

include "sys.m";
sys: Sys;

include "bufio.m";
bufio: Bufio;
Iobuf : import bufio;

include "regex.m";
	regex : Regex;

include "dis.m";
	dis : Dis;

include "asm.m";

init(nil: ref Draw->Context, nil: list of string)
{
	draw = load Draw Draw->PATH;
	sys = load Sys Sys->PATH;
	bufio = load Bufio Bufio->PATH;
	regex = load Regex Regex->PATH;


	f := sys->open("/usr/m/asm/bruise_TIL.dasm", Sys->OREAD);
	o := parse(f);
}

Obj.label_cell(o : self ref Obj, name : string) : int
{
	for(labels := o.labels; labels != nil; labels = tl labels)
		if((hd labels).name == name) return (hd labels).cell;
	return -1;
}

parse_op(line : string) : ref Dis->Inst
{
	return ref Dis->Inst(0, 0, 0, 0, 0);
}

parse(fd : ref Sys->FD) : ref Obj
{
	obj := ref Obj(nil, nil, nil, nil, "", nil, nil, nil, nil, nil);
	label, opcode, ca : regex->Re;
	diag : string;
	line : string;
	cell : int;
	(label, diag) = regex->compile("([a-z]+):", 0);
	(opcode, diag) = regex->compile("([a-zA-Z]+) (,? ?([^ ,]+))*", 0);
	(ca, diag) = regex->compile("^ |	+\\+", 0);

	cells : list of ref Cell;
	gvars, fvars : list of ref Dtype;

	match : array of (int, int);

	io := bufio->fopen(fd, Bufio->OREAD);


	while((line = io.gets('\n')) != nil) {
		match = regex->execute(label, line);
		if(match != nil) {
			sys->print("LABEL %s", line);
			obj.labels = ref Label(line, len cells) :: obj.labels;
			continue;
		}

		match = regex->execute(ca, line);
		if(match != nil) {
			sys->print("CA %s", line);
			cells = ref Cell.addr((len cells) +1) :: cells;
			continue;
		}
			
		match = regex->execute(opcode, line);
		if(match != nil) {
			sys->print("OP %s", line);
			cells = ref Cell.op(parse_op(line)) :: cells;
			continue;
		}
	}

	io.close();

	return obj;
}

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.