-- initialization module of silicon (pretty picture) program -- modified by McCreight, March 23, 1983 1:06 PM DIRECTORY ChipUserInt, multiGraphicsDefs, InlineDefs, ImageDefs, AltoFileDefs, StringDefs, IODefs, MiscDefs, SegmentDefs, StreamDefs, ppCache, ppdddefs,ppddefs, ppdefs, ppoutdefs, ppMainDefs, ProcessDefs; ppInit: PROGRAM IMPORTS ImageDefs, ppdddefs, multiGraphicsDefs, ppCache, ppdefs, ppddefs, ppMainDefs, InlineDefs, StreamDefs, IODefs, MiscDefs, SegmentDefs, StringDefs, ppoutdefs, ChipUserInt, ProcessDefs EXPORTS ppdefs, ppMainDefs = 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; fileName: PUBLIC STRING ← NIL; universe: PUBLIC Rect ← univ; 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]; 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; ppoutdefs.DisableBackup[]; ProcessDefs.Detach[FORK ppoutdefs.BackupDemonProcess[]]; 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 inFile: StreamDefs.DiskHandle; getProc: PROC RETURNS [UNSPECIFIED] = {RETURN[inFile.get[inFile]]}; cmdLineFile←FALSE; dChange ← TRUE; inFile ← StreamDefs.NewWordStream[cmFileName, StreamDefs.Read ! StreamDefs.FileNameError => GOTO NoFile]; typeOut["", "Reading File:", cmFileName]; readAll[getProc]; inFile.destroy[inFile]; FOR i: CARDINAL IN [0..cmFileName.length) DO IF cmFileName[i]='. THEN {cmFileName.length←i; EXIT}; ENDLOOP; fileName←newString[cmFileName]; anyChanges ← TRUE; sinceIOchanges ← FALSE; refreshTypeInScreen[]; EXITS NoFile => NULL; END; DO OPEN ChipUserInt; [] ← CmdTwerp[nullChrThing ! Punt => CONTINUE; -- do another command RestSig => {ppCache.FlushEntireCache[]; EXIT}; -- restart Chipmonk QuitSig, ABORTED => GOTO ChipmonkExit; -- he asked for it UNWIND => ERROR]; ENDLOOP; REPEAT ChipmonkExit => NULL; ENDLOOP; writeCTab[]; SetColorTable[LOOPHOLE[@blankColors]]; ReplaceColorArea[x1: 0, x2: colWidth-1, y1: 0, y2: colHeight-1, c: 0]; FOR i: CARDINAL IN [1..10000] DO -- wait for Godot. jj: CARDINAL ← i+1; jj←jj/2; ENDLOOP; ChipUserInt.ColorOff[]; ImageDefs.RemoveCleanupProcedure[@cleanupItem]; ImageDefs.StopMesa[]; END.