// Static variables for MICRO 
// last edited March 12, 1981  10:37 AM
// Copyright Xerox Corporation 1979, 1980, 1981

get "micdecl.d"

static [

// Scalars
version = 30000b+1281	// Release version, 3-12-81
cversion = 20000b+0581	// Compatibility version, 2-5-81
xlistflag = 0		// Expanded listing flag
binflag = 0		// Binary output flag
ltoflag = 0		// List target only flag
ucflag = 0		// Force upper case flag
lincnt = 0		// Current line count
lbsym = 0		// Last label symbol
lblct = 0		// Lincnt at last label
stlct = 0		// Lincnt at last statement
lchan = 0		// Current listing channel
warncnt = 0		// Warning count
errcnt = 0		// Error count
errmax = 100		// Abort if this many errors
lllength = 0		// Expanded listing line length
@fstop = 0		// Top of free storage
@fslim = 0		// Bottom of free storage area
fsgap = 77777b	// Minimum free space

// Scalars saved on .ST file ("environment values")
aevals = 1		// Address of saved scalars, init to (lv aevals)+1
dumpver = 0		// Version number
symtab = 0		// Symbol table pointer
symvec = 0		// Symbol packing vector
nstab = 0		// New symbol table pointer
slfl = 0		// Free storage list
srover = 0		// Roving free block pointer
fsbot = 0		// Bottom of used storage relative to fstop
ofbot = 0		// Old bottom of free storage
memno = 0		// Max used memory #
cmtchar = -1		// special * comment character
mbext = 0		// Pointer to extension for binary output
targsym = 0		// Relative ep of target address symbol
tracecalls = false	// If true, trace macro calls
ignore = false		// If true, ignore all statements not starting with :
tracesyms = false	// If true, trace all lookups/putins
nevals = 15		// Number of saved scalars

// Table Pointers
typesizes
typenames

// Streams ("channels")
inchan
outchan
fakeoutchan
comchan
lstchan
erlchan
ettchan
fixchan
ttochan
symchan
sysdir

// BUFFERS
stbuf
stbend

// Renamed external procedures
getbits
setbits

]

let startmicro(blv, params, cfa) be
// INITIALIZATION ROUTINE
  [	aevals = (lv aevals) + 1
	// Set up renamed procedures
	 [ external [ GetBits; SetBits ]
	   getbits, setbits = GetBits, SetBits
	 ]
	// Type of symbol table
	typesizes = table [
	  2;	// Nul
	  1;	// (Mac, not used)
	  2;	// Fld: Fsbits
	  2;	// Int: Isval
	  2;	// (adr; not used)
	  2;	// Bi: bsno
	  1;	// Neu
	  13;	// Mem: mswidth, mssize, msno, msdflt, mssource, mssink,
		//   mslist, msltag, (msbt), mspost, mstagmac, mslfields
	  2;	// Und
	  3;	// Bt: bttab, btsize
	 ]
	typenames = table [ 0; 0; 0; 0; 0; 0; 0; 0; 0; 0 ]
	  typenames!nultype = "null"
	  typenames!mactype = "macro"
	  typenames!fldtype = "field"
	  typenames!inttype = "integer"
	  typenames!adrtype = "address"
	  typenames!bitype = "builtin"
	  typenames!neutype = "neutral"
	  typenames!memtype = "memory"
	  typenames!undtype = "undefined"
	  typenames!bttype = "bittable"
	micro(blv, params, cfa)
   ]