-- initialization module of silicon (pretty picture) program
-- modified by McCreight, December 30, 1982 4:51 PM
DIRECTORY
ChipUserInt,
multiGraphicsDefs,
InlineDefs,
ImageDefs,
AltoFileDefs,
StreamDefs,
StringDefs,
IODefs,
MiscDefs,
SegmentDefs,
ppdddefs,ppddefs,
ppdefs,
ppoutdefs,
ppMainDefs;
ppInit: PROGRAM
IMPORTS
ImageDefs, ppdddefs, multiGraphicsDefs, ppdefs, ppddefs, ppMainDefs,
InlineDefs, StreamDefs, IODefs, MiscDefs, SegmentDefs, StringDefs,
ppoutdefs, ChipUserInt
EXPORTS ppdefs = PUBLIC
BEGIN
OPEN ppdefs, ppdddefs,ppddefs, ppMainDefs, multiGraphicsDefs, InlineDefs, StringDefs, ppoutdefs;
--core banks 4 & 5 use scheme (NOTE: set mesabanks to 170000B)
-- 1000000B: color buffer (160x481 = 76960 = 226240B)
-- empty (8 = 10B)
-- 1226250B: color table (76 = 114B)
-- empty (12 = 14B)
-- 1226400B: B&W table (808x38 = 30704 = 73760B)
-- empty (16 = 20B)
-- 1322400B: color tables (avail:23296 = 55400B
-- each table is 48 = 60B words,
-- so 60 tables is 2880 wds
-- or avail is room for 485 tables)
colorWasOn: BOOLEAN;
QuitSig:PUBLIC SIGNAL = CODE;
RestSig:PUBLIC SIGNAL = CODE;
cMos:PUBLIC BOOLEAN ← FALSE;
fontNumber: CARDINAL←0;
fontNumberMax: CARDINAL = 3;
cfa:POINTER TO AltoFileDefs.CFA;
fa:AltoFileDefs.FA;
fp:AltoFileDefs.FP;
cfile:StreamDefs.DiskHandle;
chr:CHARACTER;
dotSeen:BOOLEAN;
cmdLineFile: BOOLEAN;
cmFileName:STRING←[30];
ii, jj: CARDINAL;
blankColors:ARRAY [0..48) OF CARDINAL←ALL[255];
MaintainColorSanity: ImageDefs.CleanupProcedure =
BEGIN OPEN ChipUserInt;
SELECT why FROM
Abort, OutLd =>
{colorWasOn ← ColorIsOn[]; ColorOff[]};
InLd => IF colorWasOn THEN ColorOn[];
ENDCASE => ERROR;
END;
cleanupItem: ImageDefs.CleanupItem ←
[link: NIL,
mask: ImageDefs.CleanupMask[Abort]+
ImageDefs.CleanupMask[OutLd]+
ImageDefs.CleanupMask[InLd],
proc: MaintainColorSanity
];
config: SegmentDefs.MemoryConfig ←
SegmentDefs.GetMemoryConfig[];
nullChrThing: keCheckProc = {return←FALSE; execute←TRUE};
IF InlineDefs.BITAND[config.banks, 6000B]#0 THEN
BEGIN OPEN IODefs;
WriteLine["MesaBanks must be set to 171777 from Executive"L];
WriteLine["and debugger must be reinstalled."L];
WriteLine["(Confirm)"L];
[]←ReadChar[];
ImageDefs.StopMesa[];
END;
cellStack ← NIL;
masterList ← NIL;
initAll[]; -- starts repainting immediately
ImageDefs.AddCleanupProcedure[@cleanupItem];
cmdLineFile←dotSeen←FALSE;
cfa←MiscDefs.CommandLineCFA[];
fa←cfa↑.fa;
fp←cfa↑.fp;
cfile←StreamDefs.CreateByteStream[
SegmentDefs.InsertFile[@fp,SegmentDefs.Read],StreamDefs.Read];
StreamDefs.JumpToFA[cfile,@fa];
IODefs.SetInputStream[cfile];
cmFileName.length←0;
UNTIL cfile.endof[cfile] DO
chr←IODefs.ReadChar[];
IF chr='. THEN
BEGIN
dotSeen←TRUE;
END;
IF chr=' THEN
BEGIN
IF cmFileName.length>0 THEN EXIT;
END
ELSE IF chr=15C THEN EXIT
ELSE AppendChar[cmFileName,chr];
ENDLOOP;
cfile.destroy[cfile];
IF cmFileName.length>0 THEN
BEGIN
cmdLineFile←TRUE;
IF NOT dotSeen THEN
BEGIN
AppendString[cmFileName,".chip"];
END;
END;
DO -- UNTIL quitflg DO
InitHeap[1];
masterList ← NIL;
cellStack ← NIL;
noChange ← FALSE;
wClosestDisp ← FALSE;
wiringOrnSet ← FALSE;
moving ← FALSE;
copying ← FALSE;
areaSel ← FALSE;
moveMarked ← FALSE;
cellList ← NIL;
pushLevel ← 0;
currentLevel ← cut;
curcol ← 0;
cellNameMode ← FALSE;
dChange ← TRUE;
mode ← wire;
setSelColor[0];
unDelPnt ← NIL;
unDelGrpCnt ← unDelItemCnt ← 0;
selCount ← 0;
doingAreaSel ← FALSE;
locCell←"";
locIName←"";
insideCell←"";
IF cmdLineFile THEN
BEGIN
cmdLineFile←FALSE;
dChange ← TRUE;
IF openIfile[cmFileName] THEN
BEGIN
typeOut["", "Reading File:", cmFileName];
[masterList, cellList] ← readAll[];
closeFile[];
FOR ii IN [0..cmFileName.length) DO IF cmFileName[ii]='.
THEN BEGIN cmFileName.length←ii;EXIT;END;ENDLOOP;
fileName←newString[cmFileName];
anyChanges ← TRUE;
sinceIOchanges ← FALSE;
END;
refreshTypeInScreen[];
END;
DO OPEN ChipUserInt;
SquirrelAway: PROC =
BEGIN
IF cellStack#NIL AND HeSaysYes["You're pushed down below the top level design",
"Shall I try to pop you back to top level first?"]
THEN
WHILE cellStack#NIL DO
doPop[! ANY => EXIT];
ENDLOOP;
IF openOfile["ChipmonkBug.chip", TRUE] THEN
{writeAll[masterList, cellList]; closeFile[]};
END;
[] ← CmdTwerp[nullChrThing
! Punt => CONTINUE; -- do another command
RestSig => EXIT; -- restart Chipmonk
QuitSig => GOTO ChipmonkExit; -- he asked for it
ABORTED =>
BEGIN
IF sinceIOchanges AND
HeSaysYes["Shall I squirrel away the design as best I can before",
"leaving Chipmonk?",
"(will use ChipmonkBug.chip)"] THEN SquirrelAway[];
GOTO ChipmonkExit;
END;
UNWIND => ERROR;
ANY =>
BEGIN
SELECT sinceIOchanges FROM
FALSE => Explain["We're going into the debugger but I think your design is",
"correct as it sits in its file."];
ENDCASE => IF HeSaysYes["Shall I squirrel away the design as best I can before",
"going into the debugger?",
"(will use ChipmonkBug.chip)"] THEN SquirrelAway[];
REJECT;
END];
ENDLOOP;
REPEAT ChipmonkExit => NULL;
ENDLOOP;
writeCTab[];
SetColorTable[LOOPHOLE[@blankColors]];
ReplaceColorArea[x1: 0, x2: colWidth-1, y1: 0, y2: colHeight-1, c: 0];
FOR ii IN [1..10000] DO -- wait for Godot.
jj: CARDINAL ← ii+1;
jj←jj/2;
ENDLOOP;
ChipUserInt.ColorOff[];
ImageDefs.RemoveCleanupProcedure[@cleanupItem];
ImageDefs.StopMesa[];
END.