3 pref IIUWGRAPH block;
\r
5 unit Welcome : Ansi procedure ;
\r
15 unit DrawO : procedure( P : Point );
\r
17 call Move( P.X,P.Y );
\r
18 call Draw( P.X + Width , P.Y );
\r
19 call Draw( P.X + Width , P.Y + Height );
\r
20 call Draw( P.X , P.Y + Height );
\r
21 call Draw( P.X , P.Y );
\r
24 unit DrawD : procedure( P : Point );
\r
27 call Move( P.X + 2,P.Y );
\r
28 call Draw( P.X + 2 ,P.Y + Height );
\r
31 unit DrawC : procedure( P : point );
\r
33 call Move( P.X + Width ,P.Y );
\r
34 call Draw( P.X, P.Y );
\r
35 call Draw( P.X , P.Y + Height );
\r
36 call Draw( P.X + Width , P.Y + Height );
\r
39 unit DrawI : procedure( P : point );
\r
41 call Move( P.X,P.Y );
\r
42 call Draw( P.X + 2, P.Y );
\r
43 call Draw( P.X + 2, P.Y + Height );
\r
44 call Draw( P.X,P.Y + Height );
\r
45 call Draw( P.X, P.Y );
\r
48 unit DrawN : procedure( P : point );
\r
50 call Move( P.X , P.Y + Height );
\r
51 call Draw( P.X , P.Y );
\r
52 call Draw( P.X + Width , P.Y + Height );
\r
53 call Draw( P.X + Width , P.Y );
\r
56 unit DrawK : procedure( P : point );
\r
58 call Move( P.X , P.Y );
\r
59 call Draw( P.X, P.Y + Height );
\r
60 call Move( P.X + Width , P.Y );
\r
61 call Draw( P.X , P.Y + Height div 2 );
\r
62 call Draw( P.X + Width , P.Y + Height );
\r
67 P := new point ( X,Y );
\r
69 P.X := P.X + Width + Room;
\r
71 P.X := P.X + Width + Room ;
\r
73 P.X := P.X + Width + Room ;
\r
77 P.X := P.X + Width + Room ;
\r
79 P.X := P.X + Width + Room ;
\r
83 call MyWrite( P, "Copyright by Anna Wosinska " );
\r
85 if i = Hlp then call Help ; fi ;
\r
92 unit Point : class ( X, Y : integer);
\r
95 unit Interval : class( x1, x2 : integer );
\r
97 unit Assign : procedure( y1,y2 : integer );
\r
100 if y1 > y2 then call Swap( y1,y2 ); fi;
\r
106 if x1 > x2 then call Swap ( x1,x2 ); fi;
\r
109 unit Swap : procedure( inout y1,y2 : integer );
\r
117 unit Elem : class( Info : integer );
\r
121 unit IncidList : class( Key : integer );
\r
124 unit Into : procedure( i : integer );
\r
128 if Head = none then
\r
129 Head := new Elem( i );
\r
131 Aux := new Elem( i );
\r
132 Aux.next := Head.next ;
\r
137 unit KillList : procedure ;
\r
139 unit KL : procedure( inout u : Elem );
\r
142 if u.next = none then
\r
145 call KL( u.next );
\r
156 unit Node : class( Key, Info : integer );
\r
161 close Delete, Insert ;
\r
165 (* Nodes in this BST are sorted according to their Key value( k ) *)
\r
167 unit Insert : procedure( k,i : integer );
\r
169 unit Ins : procedure( inout u : node );
\r
172 if k <= u.Key then call Ins( u.l );
\r
173 else call Ins( u.r );
\r
176 u := new node( k, i );
\r
184 unit Build : procedure( P : integer);
\r
188 for i := 1 to Act do
\r
189 if Tree( P,i ) = 0 then exit ;
\r
191 if not Lines( Tree( P,i) ).Vertical then
\r
192 call Insert( Lines( Tree( P,i )).Pe.X , Tree( P,i ));
\r
193 call Insert( Lines( Tree( P,i )).Pb.X , Tree( P,i ));
\r
196 (* Lines( Tree( P,i )).Vertical *)
\r
197 if Min( Lines( Tree( P,i )).Pb.Y , Lines( Tree( P,i )).Pe.Y ) = P
\r
199 call Insert( Lines( Tree( P,i )).Pb.X , Tree( P,i ));
\r
207 unit Update : procedure( P : integer ) ;
\r
211 for i := 1 to Act do
\r
212 if Tree( P,i ) = 0 then exit ; fi;
\r
214 if Lines( Tree( P,i )).Vertical then
\r
215 if Max( Lines( Tree( P,i )).Pb.Y , Lines( Tree( P,i )).Pe.Y ) = P
\r
217 call Delete( Lines( Tree( P,i )).Pb.X , Tree( P,i ) ) ;
\r
221 call Delete( Lines( Tree( P,i )).Pb.X , Tree( P,i ) );
\r
222 call Delete( Lines( Tree( P,i )).Pe.X , Tree( P,i ) );
\r
228 unit Delete : procedure( k,i : integer );
\r
230 unit Del : procedure( inout u : node );
\r
233 unit DelMax : procedure( inout v : node );
\r
235 if v.r <> none then call DelMax( v.r );
\r
247 if k < u.key then call Del ( u.l );
\r
249 if k > u.key then call Del( u.r );
\r
251 if i <> u.info then call Del( u.l );
\r
256 if u.r = none then u := u.l ;
\r
259 if u.l = none then u := u.r ;
\r
263 call DelMax( Q.l );
\r
265 (* Q = maximal in left subtree of u *)
\r
278 unit Range : procedure ( x1, x2, Index : integer );
\r
280 unit Ran : procedure( v : node );
\r
281 var tx1, tx2 : boolean;
\r
285 if x1 > x2 then call Swap( x1,x2 ); fi ;
\r
286 tx1 := v.Key >= x1;
\r
287 tx2 := v.Key <= x2;
\r
289 (* x1 < v.key < x2 *)
\r
292 writeln("v.info = 0 ");
\r
296 if tx2 and tx1 then call Information( Index ).Into( v.info ) ;fi;
\r
298 if tx2 then call Ran( v.r ); fi;
\r
311 unit Murderer : procedure( T : BST );
\r
313 unit Killer : procedure( u : Node );
\r
316 if u.l <> none then
\r
317 call Killer( u.l );fi;
\r
318 if u.r <> none then
\r
319 call Killer( u.r ); fi;
\r
326 call Killer( T.Root );
\r
330 unit BuildTree : procedure;
\r
332 var j,i : integer;
\r
335 array Tree dim ( MinY : MaxY );
\r
336 for i := MinY to MaxY do
\r
337 array Tree( i ) dim ( 1 : Act + 1 );
\r
340 for i := 1 to Act do
\r
342 while Tree( Lines( i ).Pb.Y,j ) <> 0 do j := j + 1 ; od;
\r
344 Tree( Lines( i ).Pb.Y, j ) := i ;
\r
346 if Lines( i ).Vertical then
\r
348 while Tree( Lines( i ).Pe.Y,j ) <> 0 do j := j + 1; od;
\r
349 Tree( Lines( i ).Pe.Y, j ) := i ;
\r
354 unit Scan : procedure ;
\r
360 for k := MinY to MaxY do
\r
361 if Tree( k,1 ) <> 0 then
\r
362 call BegScanLine( k ) ;
\r
363 call XTree.Build( k );
\r
364 for l := 1 to Act do
\r
365 if Tree( k,l ) = 0 then exit ; fi;
\r
366 call XTree.Range( Lines( Tree( k,l)).Pb.X, Lines( Tree( k,l)).Pe.X ,
\r
369 Aux := Information( Tree( k,l )).Head;
\r
373 when conerror : call groff ;
\r
374 writeln("k = ", k) ;
\r
375 writeln("l = ", l) ;
\r
376 if k < lower(Tree) orif k > upper(Tree)
\r
377 orif l < lower(Tree(k)) orif l > upper(Tree(k)) then
\r
378 writeln(" Excessed bounds of Tree ") ;
\r
380 writeln("Tree(k,l) = ", Tree(k,l));
\r
381 writeln("Aux.Info = ", Aux.Info) ;
\r
382 if Tree(k,l) < lower(Lines)
\r
383 orif Tree(k,l) > upper(Lines)
\r
384 orif Aux.Info < lower(Lines)
\r
385 orif Aux.Info > upper(Lines) then
\r
386 writeln("Excessed bounds of Lines, which are (",
\r
387 lower(Lines), ":", upper(Lines), ")") ;
\r
393 while Aux <> none do
\r
394 call CrossPoint( Lines( Tree( k,l )),Lines( Aux.Info ));
\r
400 call Xtree.Update( k );
\r
401 (* call kill ( Tree( k )); *)
\r
402 call EndScanLine( k ) ;
\r
405 call Murderer( XTree );
\r
411 unit Inchar : IIUWgraph function : integer ;
\r
412 (*podaj nr znaku przeslanego z klawiatury *)
\r
417 if i <> 0 then exit fi;
\r
425 unit MyWrite : procedure( Pos : Point, Word : string );
\r
430 A := unpack( Word );
\r
431 call Move( Pos.X, Pos.Y );
\r
432 for i := lower( A ) to upper( A ) do
\r
434 call HASCII( ord( A( i )));
\r
439 unit Erase : procedure( Line : integer );
\r
443 Aux := new Point( Left + M, Line );
\r
449 unit Frame : procedure( P1, P2 : point );
\r
451 call Move ( P1.X, P1.Y );
\r
452 call Draw ( P1.X, P2.Y );
\r
453 call Draw ( P2.X, P2.Y );
\r
454 call Draw ( P2.X, P1.Y );
\r
455 call Draw ( P1.X, P1.Y );
\r
458 unit SysDraw : procedure;
\r
460 unit GradVert : procedure( P : Point, Number : integer );
\r
464 call Move( P.X - M, P.Y );
\r
465 call Draw( P.X + M, P.Y );
\r
466 if Number < 10 then
\r
467 call Move( P.X - 2 * M - LetDim , P.Y - LetDim div 2 );
\r
469 call HASCII( Number + 48 );
\r
471 i := Number div 10;
\r
472 j := Number - i * 10;
\r
473 call Move( P.X - 2 * M - 2 * LetDim , P.Y - LetDim div 2 );
\r
475 call Hascii( i + 48 );
\r
476 call Move( P.X - 2 * M - LetDim , P.Y - LetDim div 2 );
\r
478 call Hascii( j + 48 );
\r
482 unit GradHor : procedure( P : Point , Number : integer );
\r
486 call Move( P.X, P.Y - M );
\r
487 call Draw( P.X, P.Y + M );
\r
488 if Number < 10 then
\r
489 call Move( P.X - LetDim div 2, P.Y + 4 * M );
\r
491 call HASCII( Number + 48 );
\r
493 i := Number div 10;
\r
494 j := Number - i * 10;
\r
495 call Move( P.X - LetDim div 2 , P.Y + 4 * M );
\r
497 call Hascii( i + 48 );
\r
499 call Hascii( j + 48 );
\r
503 unit ArVert : procedure( X, Y : integer);
\r
505 call Move( X - 2 * M, Y + 2 * M );
\r
507 call Draw( X + 2 * M, Y + 2 * M );
\r
510 unit ArHor : procedure( X,Y : integer );
\r
512 call Move( X - 2 * M, Y - 2 * M );
\r
514 call Draw( X - 2 * M, Y + 2 * M );
\r
521 call Move( LeftMargin,UpMargin );
\r
522 call Draw( LeftMargin, DimY - DownMargin );
\r
523 call Draw( DimX - RightMargin, DimY - DownMargin );
\r
524 call ArVert( LeftMargin, UpMargin );
\r
525 call ArHor( DimX - RightMargin, DimY - DownMargin );
\r
527 call Move( LeftMargin - 2 * M - 2 * LetDim, DimY - DownMargin - LetDim div 2);
\r
532 P := new Point( LeftMargin, DimY - DownMargin );
\r
533 for i := MinX + 1 to MaxX do
\r
535 call GradHor( P , i );
\r
539 P := new Point ( LeftMargin, DimY - DownMargin );
\r
540 for i := MinY + 1 to MaxY do
\r
542 call GradVert( P , i );
\r
547 unit Segment : class( pb , pe : Point, Vert : boolean );
\r
550 unit Vertical : function : boolean;
\r
558 unit SegKill : procedure( inout S : Segment );
\r
565 unit GenSeg : function : Segment ;
\r
567 var X1, Y1, X2, Y2 : integer;
\r
570 if Random < 0.5 then
\r
571 (* Generates horizontal segment *)
\r
573 X1 := Random * MaxX ;
\r
574 Y1 := Random * MaxY ;
\r
575 X2 := Random * MaxX ;
\r
577 if X1 <> X2 and Y2 > MinX then exit ; fi;
\r
579 result := new Segment( new Point( X1 ,Y1 ), new Point( X2,Y2 ),false);
\r
581 (* Generates vertical segment *)
\r
583 X1 := Random * MaxX ;
\r
584 Y1 := Random * MaxY ;
\r
586 Y2 := Random * MaxY ;
\r
587 if Y1 <> Y2 and X2 > MinX then exit; fi;
\r
589 result := new Segment( new Point( X1 ,Y1 ), new Point( X2,Y2 ),true);
\r
594 unit SegDraw : procedure( S : Segment );
\r
598 call Move( LeftMargin + Sc*S.Pb.X + M, DimY - ( Sc*S.Pb.Y + DownMargin));
\r
599 call Draw( LeftMargin + Sc*S.Pb.X - M, DimY - ( Sc*S.Pb.Y + DownMargin));
\r
600 call Move( LeftMargin + Sc*S.Pb.X, DimY - ( Sc*S.Pb.Y + DownMargin));
\r
601 call Draw( LeftMargin + Sc*S.Pe.X, DimY - ( Sc*S.Pe.Y + DownMargin));
\r
602 call Move( LeftMargin + Sc*S.Pe.X + M, DimY - ( Sc*S.Pe.Y + DownMargin));
\r
603 call Draw( LeftMargin + Sc*S.Pe.X - M, DimY - ( Sc*S.Pe.Y + DownMargin));
\r
605 call Move( LeftMargin + Sc*S.Pb.X , DimY - ( Sc*S.Pb.Y + DownMargin) + M );
\r
606 call Draw( LeftMargin + Sc*S.Pb.X , DimY - ( Sc*S.Pb.Y + DownMargin) - M);
\r
607 call Move( LeftMargin + Sc*S.Pb.X, DimY - ( Sc*S.Pb.Y + DownMargin));
\r
608 call Draw( LeftMargin + Sc*S.Pe.X, DimY - ( Sc*S.Pe.Y + DownMargin));
\r
609 call Move( LeftMargin + Sc*S.Pe.X , DimY - ( Sc*S.Pe.Y + DownMargin) + M);
\r
610 call Draw( LeftMargin + Sc*S.Pe.X , DimY - ( Sc*S.Pe.Y + DownMargin) - M);
\r
614 unit KeyServer : Ansi procedure;
\r
615 var PrevChar , i : integer;
\r
621 when Esc : call Escape;
\r
622 when NSys : Over := true;
\r
623 when Hlp : call Help;
\r
624 when NewSeg : if PrevChar <> NewSeg then call ClearWindow; fi;
\r
626 Lines( Act ) := GenSeg;
\r
627 call SegEdit( Act );
\r
628 call SegDraw( Lines( Act ));
\r
630 when Termin : exit;
\r
632 when Enter : call ClearWindow;
\r
642 unit Pause : procedure( T : integer );
\r
645 for i := 1 to T do; od;
\r
649 unit Help : Ansi procedure;
\r
653 Aux := new Point( LeftMargin + Distance, DimY - Window + 2 * M ) ;
\r
656 ( Aux," Esc - terminates program, Del - new system of coordinates ");
\r
657 Aux.Y := Aux.Y + LetDim + M ;
\r
658 call Mywrite( Aux," Enter - generates new segment, End - scanning ");
\r
659 Aux.Y := Aux.Y + LetDim + M ;
\r
660 call MyWrite( Aux," Space - you enter new segment ");
\r
666 unit SegRead : procedure;
\r
669 unit ReadInteger : ANSI function : integer;
\r
672 var X,Y,i, OrdN, j : integer,
\r
673 Number : arrayof integer;
\r
674 (* i - liczba wprowadzonych znakow *)
\r
676 array Number dim( 1 : NumbLenght );
\r
682 if i = NumbLenght or (OrdN < 48 and OrdN > 57) then exit fi;
\r
705 when 8 :if i>0 then
\r
709 when 13 :if i > 0 then exit fi ;
\r
713 if Number( 1 ) <> 0 then
\r
716 call hascii(48+Number( 1 ));
\r
722 call Move( X + LetDim, Y );
\r
724 call hascii( 48 + Number( 2 ));
\r
729 if Number( 1 ) = 0 and Number( 2 ) = 0 then
\r
736 if i = 1 then result := Number( 1 );
\r
738 result := 10 * Number( 1 ) + Number ( 2 );
\r
743 const StrLenght = 26;
\r
746 X1, X2, Y1, Y2 : integer;
\r
749 Aux := new Point( LeftMargin + Distance, DimY - Window + 2 * M ) ;
\r
750 call MyWrite( Aux," ENTER NEW SEGMENT : X1 = " );
\r
752 Aux.X := Aux.X + StrLenght * LetDim + NumbLenght * LetDim;
\r
753 call MyWrite( Aux ," Y1 = " );
\r
756 Aux.X := Aux.X - (NumbLenght + 6) * LetDim;
\r
757 Aux.Y := Aux.Y + M + LetDim;
\r
758 call MyWrite( Aux, " X2 = " );
\r
759 X2 := ReadInteger;
\r
760 Aux.X := Aux.X + (NumbLenght + 6 ) * LetDim ;
\r
761 call Mywrite( Aux, " Y2 = " );
\r
763 Aux.X := Aux.X - StrLenght * LetDim - NumbLenght * LetDim;
\r
764 Aux.Y := Aux.Y + M + LetDim;
\r
765 if ( X1 <> X2 ) and ( Y1 <> Y2 ) then
\r
766 call MyWrite( Aux," THIS SEGMENT IS NEITHER HORIZONTAL NOR VERTICAL ! ");
\r
768 if X1 < MaxX and X2 < MaxX and Y1 < MaxY and Y2 < MaxY then
\r
771 Lines( Act ) := new Segment( new Point( X1,Y1 ),
\r
772 new Point( X2,Y2 ), true );
\r
774 Lines( Act ) := new Segment( new Point( X1,Y1 ),
\r
775 new Point( X2,Y2 ), false );
\r
777 call SegDraw( Lines( Act ));
\r
779 call MyWrite( Aux," THE SEGMENT IS TOO BIG ! " );
\r
785 unit WriteInteger : procedure( Number : integer );
\r
787 if Number < 10 then
\r
789 call HASCII( Number + 48 );
\r
792 i := Number div 10;
\r
793 j := Number - i * 10;
\r
795 call Hascii( i + 48 );
\r
797 call Hascii( j + 48 );
\r
801 unit SegEdit : procedure( Cur : integer );
\r
804 const StrLenght = 24;
\r
809 Aux := new Point( LeftMargin + Distance, DimY - Window + 2 * M );
\r
810 call MyWrite( Aux," CURRENT SEGMENT : ");
\r
811 call WriteInteger( Act );
\r
813 Aux.Y := Aux.Y + M + LetDim ;
\r
814 call Mywrite( Aux," BEGIN : X1 = ");
\r
815 call WriteInteger( Lines( Cur ).Pb.X );
\r
816 Aux.X := Aux.X + StrLenght * LetDim + NumbLenght * LetDim ;
\r
817 call MyWrite( Aux," Y1 = ");
\r
818 call WriteInteger( Lines( Cur ).Pb.Y );
\r
820 Aux.X := Aux.X - StrLenght * LetDim - NumbLenght * LetDim ;
\r
821 Aux.Y := Aux.Y + M + LetDim ;
\r
822 call Mywrite( Aux," END : X2 = ");
\r
823 call WriteInteger( Lines( Cur ).Pe.X );
\r
824 Aux.X := Aux.X + StrLenght * LetDim + NumbLenght * LetDim ;
\r
825 call MyWrite( Aux," Y2 = ");
\r
826 call WriteInteger( Lines( Cur ).Pe.Y );
\r
830 unit ClearWindow : procedure ;
\r
835 for i := 0 to (( Window - Down ) div LetDim) - 1 do
\r
836 call Erase( DimY - Window + i * LetDim + M );
\r
840 unit Escape : procedure;
\r
848 unit CrossPoint : procedure ( S1, S2 : segment ) ;
\r
849 var X1,X2,X3,X4,Y1,Y2,Y3,Y4 : integer ;
\r
852 if S1.Vertical then
\r
853 if not S2.Vertical then
\r
854 (* S1 is vertical and S2 is horizontal *)
\r
855 call Mark( S1.pe.X, S2.pe.Y);
\r
857 (* both S1 and S2 are vertical *)
\r
858 Y1 := min( S1.pb.Y, S1.pe.Y );
\r
859 Y2 := max( S1.pb.Y, S1.pe.Y );
\r
860 Y3 := min( S2.pb.Y, S2.pe.Y );
\r
861 Y4 := max( S2.pb.Y, S2.pe.Y );
\r
862 if not( Y1 = Y3 and Y2 = Y4 ) then
\r
865 call Mark( S1.pb.X, Y4 );
\r
866 call Mark( S1.pb.X, Y1 );
\r
868 call Mark( S1.pb.X, Y4 );
\r
869 call Mark( S1.pb.X, Y3 );
\r
873 call Mark( S1.pb.X, Y2 );
\r
874 call Mark( S1.pb.X, Y1);
\r
876 call Mark( S1.pb.X, Y2 );
\r
877 call Mark( S1.pb.X, Y3);
\r
883 if S2.Vertical then
\r
884 (* S1 is horizontal and S2 is vertical *)
\r
885 call Mark( S2.Pb.X, S1.Pb.Y);
\r
887 (* both are horizontal *)
\r
888 X1 := min( S1.pb.X, S1.pe.X );
\r
889 X2 := max( S1.pb.X, S1.pe.X );
\r
890 X3 := min( S2.pb.X, S2.pe.X );
\r
891 X4 := max( S2.pb.X, S2.pe.X );
\r
892 if not( X1 = X3 and X2 = X4 ) then
\r
895 call Mark( X4, S1.pb.Y);
\r
896 call Mark( X3, S1.pb.Y);
\r
898 call Mark( X1, S1.pb.Y);
\r
899 call Mark( X4, S1.pb.Y);
\r
903 call Mark( X3, S1.pb.Y);
\r
904 call Mark( X2, S1.pb.Y);
\r
906 call Mark( X1, S1.pb.Y);
\r
907 call Mark( X2, S1.pb.Y);
\r
915 unit Mark : procedure( input X,Y : integer );
\r
918 if X >= 0 and Y >= 0 then
\r
919 x := X * Sc + LeftMargin ;
\r
920 y := DimY - ( DownMargin + Y * Sc ) ;
\r
921 call cirb( x,y,R,1,1,1,0,1,1 );
\r
925 unit Min : function( x,y : integer ): integer ;
\r
927 if x < y then result := x ;
\r
928 else result := y; fi;
\r
931 unit Max: function( x,y : integer ) : integer ;
\r
933 if x < y then result := y ;
\r
934 else result := x; fi;
\r
938 LongHLine : arrayof integer ;
\r
940 unit BegScanLine : procedure( y : integer );
\r
943 call Move( LeftMargin , DimY - DownMargin - y * Sc );
\r
944 LongHLine:= GetMap( DimX - RightMargin, DimY - DownMargin - y * Sc) ;
\r
945 call Move( LeftMargin, DimY - DownMargin - y * Sc);
\r
946 call Draw( DimX - RightMargin, DimY - DownMargin - y * Sc) ;
\r
947 Aux := new Point( LeftMargin + Distance, DimY - Window + 2 * M ) ;
\r
948 call MyWrite( Aux," SCANNING ... : ");
\r
949 call WriteInteger( y );
\r
953 unit EndScanLine : procedure( y : integer );
\r
956 call Move( LeftMargin, DimY - DownMargin - y * Sc);
\r
957 call PutMap( LongHLine );
\r
958 kill ( LongHLine );
\r
959 call Erase( Aux.Y );
\r
988 Esc = 27, (* Escape *)
\r
989 Hlp = - 59, (* F1 *)
\r
990 NSys = - 83,(* Del *)
\r
991 Enter = 13, (* enter *)
\r
992 Termin = - 79,(* End *)
\r
993 NewSeg = 32, (* space bar *)
\r
997 var Tree : arrayof arrayof integer ,
\r
998 Act, j, i : integer,
\r
999 Continue,Over : boolean,
\r
1000 Information : arrayof IncidList,
\r
1001 Lines : arrayof segment;
\r
1010 call Frame( new Point( Left, Up ),
\r
1011 new Point( DimX - Right, DimY - Window - M ));
\r
1012 call Frame( new Point( Left, DimY - Window ),
\r
1013 new Point( DimX - Right, DimY - Down ));
\r
1015 array Lines dim( 1 : Numb );
\r
1017 if not Over and Act > 0 then
\r
1019 array Information dim ( 1 : Act );
\r
1020 for i := 1 to Act do
\r
1021 Information( i ) := new IncidList( i );
\r
1027 if i <> 0 then exit; fi;
\r
1030 if i = Esc then exit ; fi ;
\r
1032 for i := 1 to Act do
\r
1033 if Information( i ) <> none then
\r
1034 call Information( i ). KillList;
\r
1037 kill ( Information );
\r
1038 for i:=1 to Act do
\r
1039 call SegKill( Lines( i ));
\r
1042 for i := MinY to MaxY do kill ( Tree( i )); od;
\r