-- 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.