Syntax10.Scn.FntUSyntax10b.Scn.Fnt! -Lf8FoldElemsNew#Syntax10.Scn.Fntxx VAR e1: Elem; BEGIN NEW(e1); e1.handle:= e.handle; e.W:= W; e1.H:= H; e1.id:= e.id; e1.col:= e.col; END CopyElem;8 )8{Syntax10.Scn.Fnt0Syntax10b.Scn.Fnt =   VAR e1: Elem; col: INTEGER; BEGIN WITH e: Elem DO WITH msg: Texts.CopyMsg DO IF msg.e = NIL THEN NEW(e1); END; Texts.CopyElem(e, e1); e1.id:= e.id; e1.col:= e.col; msg.e := e1; | msg: TextFrames.DisplayMsg DO IF msg.prepare THEN e.W:= W * Unit; e.H:= H * Unit; ELSE Display.CopyPattern(e.col, icons[e.id], msg.X0, msg.Y0, Display.paint); END; | msg: Texts.IdentifyMsg DO msg.mod:= "HierElems"; msg.proc:= "Alloc"; | msg: Texts.FileMsg DO IF msg.id = Texts.load THEN Files.ReadInt(msg.r, e.id); Files.ReadInt(msg.r, col); e.col:= SHORT(col); ELSE Files.WriteInt(msg.r, e.id); Files.WriteInt(msg.r, LONG(e.col)); END; ELSE END; ELSE END END ElemHandle;8 8#Syntax10.Scn.Fnt__ BEGIN e.col:= Display.white; e.id:= id; e.W:= W; e.H:= H; e.handle:= ElemHandle; END Init;8 8#Syntax10.Scn.FntGG VAR e: Elem; BEGIN NEW(e); Init(e, 0); Texts.new:= e; END Alloc;88 Syntax10.Scn.Fnt&{8FoldElemsNew#Syntax10.Scn.Fntcc img[16]:= {}; img[15]:= {}; img[14]:= {}; img[13]:= {4..13}; img[12]:= {3, 12,13}; img[11]:= {2, 11, 13}; img[10]:= {1..10, 13}; img[9]:= {1..10, 13}; img[8]:= {1..10, 13}; img[7]:= {1..10, 13}; img[6]:= {1..10, 13}; img[5]:= {1..10, 13}; img[4]:= {1..10, 13}; img[3]:= {1..10, 12}; img[2]:= {1..10, 11}; img[1]:= {1..10}; 818#Syntax10.Scn.Fnt== img[16]:= {}; img[15]:= {}; img[14]:= {1..13}; img[13]:= {1, 13}; img[12]:= {1, 13}; img[11]:= {1, 13}; img[10]:= {1, 13}; img[9]:= {1, 13}; img[8]:= {1, 13}; img[7]:= {1, 13}; img[6]:= {1, 13}; img[5]:= {1, 13}; img[4]:= {1, 13}; img[3]:= {1, 13}; img[2]:= {1, 13}; img[1]:= {1..13}; 818#Syntax10.Scn.Fnt^^ img[16]:= {}; img[15]:= {}; img[14]:= {}; img[13]:= {1..6}; img[12]:= {1, 6, 7}; img[11]:= {1, 3..4, 6, 8}; img[10]:= {1, 6, 9}; img[9]:= {1, 3..4, 6..10}; img[8]:= {1, 10}; img[7]:= {1, 3..8, 10}; img[6]:= {1, 10}; img[5]:= {1, 3..8, 10}; img[4]:= {1, 10}; img[3]:= {1, 3..8, 10}; img[2]:= {1, 10}; img[1]:= {1..10}; 81|8#Syntax10.Scn.Fntbb img[16]:= {}; img[15]:= {}; img[14]:= {1, 2}; img[13]:= {0, 3, 5, 6}; img[12]:= {0, 3, 6, 7}; img[11]:= {0, 3, 6, 8}; img[10]:= {1, 2, 6, 9}; img[9]:= {6..10}; img[8]:= {1, 10}; img[7]:= {1, 3..8, 10}; img[6]:= {1, 10}; img[5]:= {1, 3..8, 10}; img[4]:= {1, 10}; img[3]:= {1, 3..8, 10}; img[2]:= {1, 10}; img[1]:= {1..10}; 818#Syntax10.Scn.Fnt77 img[15]:= {}; img[14]:= {}; img[13]:= {}; img[12]:= {4..7}; img[11]:= {3, 8}; img[10]:= {2, 5, 6, 9}; img[9]:= {2, 4, 7, 9}; img[8]:= {2, 4, 7, 9}; img[7]:= {2..9}; img[6]:= {1, 10}; img[5]:= {1, 10}; img[4]:= {1, 5, 6, 10}; img[3]:= {1, 6, 10}; img[2]:= {1, 10}; img[1]:= {2..9}; 818#Syntax10.Scn.Fnt99 img[15]:= {}; img[14]:= {5..7}; img[13]:= {4, 8}; img[12]:= {3, 5, 6, 9}; img[11]:= {4, 7, 10}; img[10]:= {8, 10}; img[9]:= {8, 10}; img[8]:= {7, 9}; img[7]:= {2..9}; img[6]:= {1, 10}; img[5]:= {1, 10}; img[4]:= {1, 5, 6, 10}; img[3]:= {1, 6, 10}; img[2]:= {1, 10}; img[1]:= {2..9}; 818#Syntax10.Scn.Fnt== img[15]:= {}; img[14]:= {4..7}; img[13]:= {3, 8}; img[12]:= {2, 5, 6, 9}; img[11]:= {2, 4, 7, 9}; img[10]:= {2, 4, 7, 9}; img[9]:= {}; img[8]:= {}; img[7]:= {3, 5, 6, 8}; img[6]:= {1, 10}; img[5]:= {1, 10}; img[4]:= {1, 5, 6, 10}; img[3]:= {1, 6, 10}; img[2]:= {1, 10}; img[1]:= {2..9}; 818#Syntax10.Scn.Fnt img[15]:= {}; img[14]:= {}; img[13]:= {}; img[12]:= {2..6}; img[11]:= {1, 7}; img[10]:= {1, 4, 7}; img[9]:= {1, 7}; img[8]:= {2, 6}; img[7]:= {3, 5}; img[6]:= {3, 5}; img[5]:= {3, 6}; img[4]:= {3, 5}; img[3]:= {3, 6}; img[2]:= {3, 5}; img[1]:= {4}; 8> VAR img: ARRAY 17 OF SET; BEGIN (* cube *) icons[0]:= Display.NewPattern(img, 16, 16); (* square *) icons[1]:= Display.NewPattern(img, 16, 16); (* doc *) icons[2]:= Display.NewPattern(img, 16, 16); (* oDoc *) icons[3]:= Display.NewPattern(img, 16, 16); (* cLock *) icons[4]:= Display.NewPattern(img, 16, 16); (* oLock *) icons[5]:= Display.NewPattern(img, 16, 16); (* brLock *) icons[6]:= Display.NewPattern(img, 16, 16); (* key *) icons[7]:= Display.NewPattern(img, 16, 16); END InitIcons;8%WMODULE HierElems; (* EK 98 *) IMPORT Display, Texts, TextFrames, Files; CONST cube-= 0; square-= 1; doc-= 2; oDoc-= 3; cLock-= 4; oLock-= 5; brLock-= 6; key-= 7; W-= 16; H-= 16; Unit= 10000; TYPE Elem*= POINTER TO ElemDesc; ElemDesc*= RECORD (Texts.ElemDesc) id: INTEGER; col*: SHORTINT; END; VAR icons: ARRAY 8 OF Display.Pattern; PROCEDURE CopyElem*(e: Elem): Elem; PROCEDURE ElemHandle* (e: Texts.Elem; VAR msg: Texts.ElemMsg); PROCEDURE Init*(e: Elem; id: SHORTINT); PROCEDURE Alloc*; PROCEDURE InitIcons; BEGIN InitIcons; END HierElems.