User guide
11.5. THE N-QUEENS DEMONSTRATION 201
UNLESS rdargs("mc,lo/n,hi/n,-c/s,-m/s,-a/s,-b/s", argv, 50) DO
{ writef("Bad arguments for mcqueens*n")
RESULTIS 0
}
IF argv!0 DO mcname := argv!0 // mc
IF argv!1 DO lo := !argv!1 // lo/n
IF argv!2 DO hi := !argv!2 // hi/n
IF argv!3 DO dlevel := dlevel | #b0001 // -c/s comments
IF argv!4 DO dlevel := dlevel | #b0010 // -m/s mc instructions
IF argv!5 DO dlevel := dlevel | #b0100 // -a/s assembler
IF argv!6 DO dlevel := dlevel | #b1000 // -b/s binary
mcseg := globin(loadseg(mcname))
UNLESS mcseg DO
{ writef("Trouble with MC package: mci386*n")
GOTO fin
}
// Create an MC instance for hi functions with a data space
// of 10 words and code space of 4000
mcb := mcInit(hi, 10, 40000)
UNLESS mcb DO
{ writef("Unable to create an mci386 instance*n")
GOTO fin
}
mc := 0 // Currently no selected MC instance
mcSelect(mcb)
mcK(mc_debug, dlevel)
FOR n = lo TO hi DO
{ mcComment("*n*n// Code for a %nx%n board*n", n, n)
gencode(n) // Compile the code for an nxn board
}
mcF(mc_end)
writef("Code generation complete*n")
FOR n = lo TO hi DO
{ LET k = 0
writef("Calling mcCall(%n)*n", n)
k := mcCall(n)
writef("Number of solutions to %i2-queens is %i9*n", n, k)
}
fin:
IF mc DO mcClose()
IF mcseg DO unloadseg(mcseg)
writef("*n*nEnd of run*n")