// MICRO compile time definitions
// last edited February 5, 1981  9:56 AM
// Copyright Xerox Corporation 1979, 1980, 1981

external [

// NOVA I/O EMULATORS
close
endmic

// STORAGE

		// MICGLOB -- not saved
version
cversion
xlistflag
binflag
ltoflag
ucflag
lincnt
lbsym
lblct
stlct
lchan
warncnt
errcnt
errmax
lllength
@fstop
@fslim
fsgap
		// saved
aevals
dumpver
symtab
symvec
nstab
slfl
srover
fsbot
ofbot
memno
cmtchar
mbext
targsym
tracecalls
ignore
tracesyms
nevals
		// not saved
typesizes
typenames
stbuf
stbend
		// MICLIST
abortflag
		// MICPROC
@stbot
@sttop
@tlbot
@tltop

// PROCEDURES

// MICGLOB
	initglob
	getbits; setbits
// MICSA
	alloc; alloctemp; dalloc; dalloctemp
	get1
	bsize
	sdump; srecover
// MICMU/MICASM
	bcplpak; pak; unpak
	@DoubleAdd1
	length
	num2blk
// MICSYM
	initsym
	dumpsym; recsym
	lookup; fastlookup; putin; newdef
	lenname
	scinit; scnext; nsnext
// MICACC
	initacc
	assem
	defaultbi; setlfbi; targset
	aldef; auref; aused
	gtfield; stfield
	dosta
// MICIN
	initin
	inpop; inpush
	initreadstat; readstat
	printstat
// MICPROC
	initscan
	evarg
	expandsize; expandval
	expandlength; expand
	pr1; process
// MICBIX
	doaddr; dobi; dofld
	adef
	redeferr
// MICLIST
	error; errx
	lblk; lblnks; lchr; lcrlf; ldec; lloc; llstr; lstr; lsym; lval
	lstword
// MICOUT
	initout
	wfixup; wmemdef; wsym; wword
	endout
// MICMAC
	initmac; initmac1
	argstr; colargs; macdef; mcall
// MICRO
	micro
	copyfile; filext
	putboth
// MICEND
	filtsyms; sort
	endlist
// MICINIT
	micinit

// Streams ("channels")
@inchan	// source input
@outchan	// binary output [word]
fakeoutchan	// initial setting of outchan
@comchan	// command input
@lstchan	// expanded listing output
@erlchan	// error listing output
@ettchan	// error listing with echo to terminal
@fixchan	// fixup output (then input) [word]
@ttochan	// terminal output
@symchan	// symbol table output [word]
@sysdir	// system directory [word]
 ]


// M A N I F E S T   D E C L A R A T I O N S
manifest [
// Symbol Types
nultype = 0
mactype = 1		// Not used (Mac symbols have stype=fstop-Def ptr)
fldtype = 2
inttype = 3
adrtype = 4		// For values only (Adr symbols have stype=mem Ep-fstop)
bitype = 5
neutype = 6
memtype = 7
undtype = 8
bttype = 9

maxtype = 9		// Maximum type number

// Evaluation Modes
valmode = 1		// Return value
accmode = 2		// Accumulate word
fldmode = 3		// Field Store

// Lexical scan markers - must be control char.s
endc = $*N
sepc = $*S
Aend = 1
Aargn = 2
Aarg2 = 3
Aarg1 = 4
Anargs = 5
Askip = 6
symc = 21
numc = 22
num6c = 23

// Fields in symbol
slink = 0		// Offset of hash link
stype = -1		// Offset of type
sname = 1		// Offset of name

// Displacements
mcsp = -1
isval = -2
fsbits = -2
asmem = -1
asval = -2
mswidth = -2
mssize = -3
msno = -4
msdflt = -5
mssource = -6
mssink = -7
mslist = -8
msltag = -9
// msbt = -10 // no longer used
mspost = -11
mstagmac = -12
mslfields = -13
bsno = -2
bttab = -2
btsize = -3

// Block prefix displacement
bprefix = -1

// LIST flags
	LFbinary = 1
	LFfields = 2
	LFnumeric = 4
	LFalphabetic = #10
	LF16bit = #20
	LFany = LFbinary+LFfields+LF16bit	// list stores if any of these is set

// Initial BUILTIN numbers
	biBUILTIN = 1
	biINSERT = 20

// Buffer lengths
	stbl = 400
	filenamelength = 40

// Binary block types
	MBend = 0
	MBdata = 1
	MBseta = 2
	MBfixup = 3
	MBmemdef = 4
	MBsymbol = 5
	MBext = 6
]

// BCPL string
structure BS:
[	length byte
	char↑1,255 byte
]

// Bytes in word
structure [ lh byte; rh byte ]
structure [ bytes↑0,77777b byte ]