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