-- second definitions module for silicon (pretty picture) program
-- modified by McCreight, March 27, 1983  2:45 PM
-- modified by Petit, September 18, 1981  2:40 PM

DIRECTORY
  SegmentDefs,
  multiGraphicsDefs,
  ppdefs,
  StreamDefs;
ppddefs: DEFINITIONS IMPORTS ppdefs, SegmentDefs, multiGraphicsDefs, StreamDefs =
  BEGIN OPEN ppdefs, multiGraphicsDefs, StreamDefs;


  --***** exports from ppkint:

  initkbd: PROCEDURE [POINTER TO ARRAY [0..15] OF CARDINAL, POINTER TO Bitmap];
  getKchr: PROCEDURE RETURNS [keyEvent];
  anyKavail: PROCEDURE RETURNS [BOOLEAN];

  -- **** exports from ppdraw:

  cTabCnt: CARDINAL;
  colorTabs: LONG POINTER TO ARRAY [0..0) OF ARRAY [0..49) OF CARDINAL;
  currentCTab: CARDINAL;
  anyCTChanges: BOOLEAN;

  orLtab: ARRAY level OF CARDINAL;
  showColorLevel: ARRAY level OF BOOLEAN;

  xBWsize: CARDINAL = 606;
  yBWMax: CARDINAL = 808;
  bwFeedTop: CARDINAL = 640;

  xColorMax: CARDINAL = IF csHor THEN 640 ELSE 480;
  xMax: CARDINAL = xColorMax + xBWsize;
  yColorMax: CARDINAL = IF csHor THEN 480 ELSE 640;

  colPatNum:CARDINAL=8;
  colPatternTabs:ARRAY [0..colPatNum) OF ARRAY level OF CARDINAL;
  colPatternBits:ARRAY [0..colPatNum) OF CARDINAL;
  currentPattern:CARDINAL;
  savCBbox: Rect; -- where the color screen is on the design
  bwCurs, bwCursI: ARRAY [0..15] OF CARDINAL;

  cursorBox, insideCBox: Bitmap;

  Pixel: TYPE = INTEGER;
  ScreenRect: TYPE = Rect; -- should really be a separate type


  initAll: PROCEDURE;
  updateColor, updateBW: PROC; -- actually processes
  writeCTab: PROCEDURE;
  setGlev: PROCEDURE [c, cc, v: INTEGER];
  invertColors: PROCEDURE;
  restoreColors: PROCEDURE;
  setColorTable: PROCEDURE [CARDINAL];
  getCurrenColor: PROCEDURE [c, cc: INTEGER] RETURNS [INTEGER];
  deScaledCursor: PROCEDURE [x, y: INTEGER] RETURNS [BOOLEAN, INTEGER, INTEGER];
  bwscaleRect: PROCEDURE [x1, y1, x2, y2: INTEGER]
    RETURNS [BOOLEAN, INTEGER, INTEGER, INTEGER, INTEGER];
  cscaleRect: PROCEDURE [x1, y1, x2, y2: INTEGER]
    RETURNS [BOOLEAN, INTEGER, INTEGER, INTEGER, INTEGER];
  --orArea:PROCEDURE[w,x,y,z:INTEGER,l:level];
  outlineBW: PROCEDURE [w, x, y, z: INTEGER, q: color, clip: POINTER TO Rect];
  outlineCol: PROCEDURE [w, x, y, z: INTEGER, q: color, clip: POINTER TO Rect];
  orColArea: PROCEDURE [w, x, y, z: INTEGER, l: level, clip: POINTER TO Rect];
  orBwArea: PROCEDURE [w, x, y, z: INTEGER, l: level, clip: POINTER TO Rect];
  repColArea: PROCEDURE [w, x, y, z: INTEGER, l: level, clip: POINTER TO Rect];
  repBwArea: PROCEDURE [w, x, y, z: INTEGER, l: level, clip: POINTER TO Rect];
  eraseScreen: PROCEDURE [w, x, y, z: INTEGER];
  --eraseArea:PROCEDURE[w,x,y,z:INTEGER];
  eraseColArea: PROCEDURE [w, x, y, z: INTEGER];
  eraseBwArea: PROCEDURE [w, x, y, z: INTEGER];
  --drawArea: PROCEDURE[w,x,y,z:INTEGER,c:color];
  setSelColor: PROCEDURE [a: CARDINAL];
  drawMark: PROCEDURE [x, y: INTEGER];
  drawBWText: PROCEDURE [x, y, sx, sy: INTEGER, s: STRING, clip: POINTER TO Rect];
  drawString: PROCEDURE [s: STRING, x, y: INTEGER];


  -- ***** exports from ppio:

  readChip: PROC [get: PROC RETURNS [UNSPECIFIED]]
    RETURNS[masterList: listPtr, cellList: cListPtr, cellStack: cellSEPtr];

  readAll: PROCEDURE [get: PROC RETURNS [UNSPECIFIED]];
  openIfile: PROCEDURE [fname: STRING] RETURNS [StreamDefs.DiskHandle];

  openOTfile: PROCEDURE [fname: STRING] RETURNS [BOOLEAN];
  hardOut: PROCEDURE [fn: STRING, lp: listPtr];

  scanLine: PROCEDURE [s: STRING, i: CARDINAL]
    RETURNS [v: INTEGER, j: CARDINAL, any: BOOLEAN];
  rdErfLine: PROCEDURE RETURNS [x, y: INTEGER, s: STRING, nums: BOOLEAN];
  openErfile: PROCEDURE [fname: STRING] RETURNS [BOOLEAN];

  -- ******** Exports from ppprocs2:

  cellNameMode: BOOLEAN;
  cnList: listPtr;

  doZee: cmdProc;
  delCellDef: PROCEDURE [
    cn: cListPtr, ob: cellPtr];
  doHard: cmdProc;

  doExpS, doExpP: cmdProc;
  reCount: PROCEDURE;
  selSingle: PROCEDURE [mp: listPtr, xx, yy: INTEGER];
  selExtend: PROCEDURE [mp: listPtr, xx, yy: INTEGER];
  selNewThing: PROCEDURE [mp, lp: listPtr, unOthers: BOOLEAN];
  unselSingle: PROCEDURE [mp: listPtr, xx, yy: INTEGER];
  selAreaSingle: PROCEDURE [mp: listPtr, xx, yy: INTEGER];
  selAreaExtend: PROCEDURE [mp: listPtr, xx, yy: INTEGER];
  unselAreaSingle: PROCEDURE [mp: listPtr, xx, yy: INTEGER];
  rotReflSel: PROCEDURE [refl: BOOLEAN];
  rotReflPnt: PROCEDURE [refl: BOOLEAN, xx, yy: INTEGER];

  copyProps: PUBLIC PROCEDURE [n, o: listPtr];

  getErfil: cmdProc;
  enterText: cmdProc;
  enterName: cmdProc;

  -- ******** Exports from ppprocs3:

  insertList: PROCEDURE [mp, lp: listPtr]
    RETURNS [listPtr];

  --********* exports from ppspace:

  alocProp: PROCEDURE RETURNS [p: propPtr];
  alocRectList: PROCEDURE RETURNS [p: LONG POINTER TO rectList];
  returnRectList: PROCEDURE [p: LONG POINTER TO rectList];

  -- **** exports from ppprocs6:

  putMark: PROCEDURE [xx, yy: INTEGER, bw:BOOLEAN←FALSE];

  -- ***** exports from ppfeed:

  dChange: BOOLEAN;
  HideColor, ShowColor: PROC [l: level];

  END.