home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / PROG / PASCAL / MISCTI10.ZIP / TI175.ASC < prev    next >
Encoding:
Text File  |  1988-06-02  |  20.0 KB  |  673 lines

  1. PRODUCT : TURBO GRAPHIX TOOLBOX     NUMBER : 175
  2. VERSION : 1.05A
  3.      OS : PC-DOS
  4.    DATE : July 8, 1986  
  5.  
  6.   TITLE : UPDATE FROM VERSION 1.05A TO 1.06A 
  7.  
  8.  
  9. This handout contains updates for the following:
  10.  
  11. RUN-TIME ERROR 92 IN WINDOWX, WINDOWY AND CLIP      PAGE 1
  12.  
  13. WORLD COORDINATES UPDATE                            PAGE 7
  14.  
  15. BAR CHART MODULE                                    PAGE 9
  16.  
  17. POLYGON DRAWING MODULE                              PAGE 13
  18.  
  19. WINDOW MOVE UPDATE                                  PAGE 18                           
  20.  
  21.          RUN-TIME ERROR 92 IN WINDOWX, WINDOWY AND CLIP
  22.  
  23. This  patch eliminates runtime error 92 in the WindowX,  WindowY, 
  24. and Clip routines.                                      
  25.  
  26. The following routines are found in the file called "KERNEL.SYS".
  27.  
  28. Change the WindowX function to read as follows:
  29.  
  30. function WindowX(x:real):integer;
  31. var
  32.   Temp : real;
  33. begin
  34.   Temp := AxGlb + BxGlb * x;
  35.   if Temp > MaxInt then
  36.     WindowX := MaxInt
  37.   else if Temp < $8001 then
  38.     WindowX := $8001
  39.   else
  40.     WindowX := trunc(Temp);
  41. end;
  42.  
  43.  
  44. Change the WindowY funtion to read as follows:
  45.  
  46. function WindowY(y:real):integer;
  47. var
  48.   Temp : real;
  49. begin
  50.   Temp := AyGlb + ByGlb * y;
  51.   if Temp > MaxInt then
  52.     WindowY := MaxInt
  53.   else if Temp < $8001 then
  54.     WindowY := $8001
  55.   else
  56.     WindowY := trunc(Temp);
  57. end;
  58.  
  59. RUN-TIME ERROR IN WINDOWX, WINDOWY AND CLIP, Continued:
  60.  
  61. Change the Clip function to read as follows:
  62.  
  63. function clip(var x1,y1,x2,y2:integer):boolean;
  64.  
  65.   var ix1,iy1,ix2,iy2,dummy,X1Loc,X2Loc:integer;
  66.       ClipLoc:boolean;
  67.       Temp : real;
  68.  
  69.   function inside(x,xx1,xx2:integer):integer;
  70.     begin
  71.       inside:=0;
  72.       if x<xx1 then inside:=-1
  73.       else if x>xx2 then inside:=1;
  74.     end;
  75.  
  76.   begin
  77.     clip:=true;
  78.     ClipLoc:=true;
  79.     if ClippingGlb then
  80.      begin
  81.       if HatchGlb then
  82.        begin
  83.         X1Loc:=X1RefGlb;
  84.         X2Loc:=X2RefGlb;
  85.        end
  86.       else
  87.        begin
  88.         X1Loc:=X1RefGlb shl 3;
  89.         X2Loc:=X2RefGlb shl 3 +7;
  90.        end;
  91.  
  92. RUN-TIME ERROR 92 IN WINDOWX, WINDOWY AND CLIP, Continued:
  93.  
  94.       ix1:=inside(x1,X1Loc,X2Loc);
  95.       iy1:=inside(y1,Y1RefGlb,Y2RefGlb);
  96.       ix2:=inside(x2,X1Loc,X2Loc);
  97.       iy2:=inside(y2,Y1RefGlb,Y2RefGlb);
  98.       if (ix1 or ix2 or iy1 or iy2)<>0 then
  99.        begin
  100.         if x1<>x2 then
  101.          begin
  102.           if ix1<>0 then
  103.            begin
  104.             if ix1<0 then dummy:=X1Loc else dummy:=X2Loc;
  105.             if y2<>y1 then
  106.             begin                          { Changes start here }              
  107.               Temp := (y2-y1)/(x2-x1)*(dummy-x1);
  108.               if Temp > MaxInt then
  109.                 Temp := MaxInt
  110.               else if Temp < $8001 then
  111.                 Temp := $8001;
  112.               y1:=y1+trunc(Temp);
  113.             end;                            { Changes end here }
  114.             x1:=dummy;
  115.            end;
  116.           if (ix2<>0) and (x1<>x2) then
  117.            begin
  118.             if ix2<0 then dummy:=X1Loc else dummy:=X2Loc;
  119.             if y2<>y1 then
  120.             begin                          { Changes start here }
  121.               Temp := (y2-y1)/(x2-x1)*(dummy-x1);
  122.               if Temp > MaxInt then
  123.                 Temp := MaxInt
  124.               else if Temp < $8001 then
  125.                 Temp := $8001;
  126.               y2:=y1+trunc(Temp);
  127.             end;                            { Changes end here } 
  128.             x2:=dummy;
  129.            end;
  130.  
  131. RUN-TIME ERROR 92 IN WINDOWX, WINDOWY AND CLIP, Continued:
  132.  
  133.           iy1:=inside(y1,Y1RefGlb,Y2RefGlb);
  134.           iy2:=inside(y2,Y1RefGlb,Y2RefGlb);
  135.          end;
  136.         if y1<>y2 then
  137.          begin
  138.           if iy1<>0 then
  139.            begin
  140.             if iy1<0 then dummy:=Y1RefGlb else dummy:=Y2RefGlb;
  141.             if x1<>x2 then
  142.             begin                          { Changes start here }
  143.               Temp := (x2-x1)/(y2-y1)*(dummy-y1);
  144.               if Temp > MaxInt then
  145.                 Temp := MaxInt
  146.               else if Temp < $8001 then
  147.                 Temp := $8001;
  148.               x1:=x1+trunc(Temp);
  149.             end;                            { Changes end here } 
  150.             y1:=dummy;
  151.            end;
  152.           if iy2<>0 then
  153.            begin
  154.             if iy2<0 then dummy:=Y1RefGlb else dummy:=Y2RefGlb;
  155.             if x1<>x2 then
  156.             begin                          { Changes start here }
  157.               Temp := (x2-x1)/(y2-y1)*(dummy-y1);
  158.               if Temp > MaxInt then
  159.                 Temp := MaxInt
  160.               else if Temp < $8001 then
  161.                 Temp := $8001;
  162.               x2:=x1+trunc(Temp);
  163.             end;                            { Changes end here } 
  164.             y2:=dummy;
  165.            end;
  166.          end;
  167.  
  168. RUN-TIME ERROR 92 IN WINDOWX, WINDOWY AND CLIP, Continued:
  169.  
  170.         iy1:=inside(y1,Y1RefGlb,Y2RefGlb);
  171.         iy2:=inside(y2,Y1RefGlb,Y2RefGlb);
  172.         if (iy1<>0) or (iy2<>0) then ClipLoc:=false;
  173.         if ClipLoc then
  174.          begin
  175.           ix1:=inside(x1,X1Loc,X2Loc);
  176.           ix2:=inside(x2,X1Loc,X2Loc);
  177.           if (ix2<>0) or (ix1<>0) then ClipLoc:=false;
  178.          end;
  179.         clip:=ClipLoc;
  180.        end;
  181.      end;
  182.   end;
  183.  
  184.                             WORLD COORDINATES
  185.  
  186. In  Turbo  Graphix  Toolbox version 1.05A,  the Y  coordinates 
  187. are  flipped, positive to negative.   The following patches will
  188. reverse  the direction of increasing positive Y coordinates.
  189.  
  190. In KERNEL.SYS change the procedure DefineWorld to read:
  191.  
  192. procedure DefineWorld(i:integer; X_1,Y_1,X_2,Y_2:real);
  193.   begin
  194.     if ((X_1<>X_2) and (Y_1<>Y_2)) and (i in [1..MaxWorldsGlb])
  195. then
  196.       with world[i] do
  197.        begin
  198.         x1:=X_1;y1:=Y_1;x2:=X_2;y2:=Y_2;
  199.         if i>MaxWorldGlb then MaxWorldGlb:=i;
  200.        end
  201.     else if i in [1..MaxWorldsGlb] then error(1,3)
  202.     else error(1,2);
  203.   end;
  204.  
  205. In KERNEL.SYS change the procedure ReDefineWindow to read:
  206.  
  207. procedure ReDefineWindow(i,X_1,Y_1,X_2,Y_2:integer);
  208.   begin
  209.     if (i in [1..MaxWindowsGlb]) and (X_1<=X_2) and (Y_1<=Y_2)
  210.     and
  211.        (X_1>=0) and (X_2<=XScreenMaxGlb) and (Y_1>=0) and
  212.        (Y_2<=YMaxGlb) 
  213.        then
  214.       with window[i] do
  215.        begin
  216.         x1:=X_1;
  217.         y1:=Y_1;
  218.         x2:=X_2;
  219.         y2:=Y_2;
  220.         if i>MaxWindowGlb then MaxWindowGlb:=i;
  221.        end
  222.     else if i in [1..MaxWindowsGlb] then error(3,3)
  223.     else error(3,2);
  224.   end;
  225.  
  226. WORLD COORDINATES, Continued: 
  227.  
  228. Change the File called FINDWRLD.HGH to read:
  229.  
  230. procedure FindWorld(i:integer;
  231.                     A:PlotArray;
  232.                     NPoints:integer;
  233.                     ScaleX,ScaleY:real);
  234.   var XMax,YMax,XMin,YMin:real;
  235.       j:integer;
  236.  
  237.     xmid, ymid, xdiff, ydiff : real;
  238.   begin
  239.     NPoints:=abs(NPoints);
  240.     if NPoints>=2 then
  241.       if i in [1..MaxWorldsGlb] then
  242.        begin
  243.         XMax:=A[1,1];
  244.         YMax:=A[1,2];
  245.         XMin:=XMax;
  246.         YMin:=YMax;
  247.         for j:=2 to NPoints do
  248.          begin
  249.           if A[j,1]>XMax then XMax:=A[j,1]
  250.           else if A[j,1]<XMin then XMin:=A[j,1];
  251.           if A[j,2]>YMax then YMax:=A[j,2]
  252.           else if A[j,2]<YMin then YMin:=A[j,2];
  253.          end;
  254.         ScaleX:=abs(ScaleX);
  255.         ScaleY:=abs(ScaleY);
  256.         xdiff := xmax - xmin;
  257.         xmid := (xmax + xmin) * 0.5;
  258.         xmax := xmid + scalex * 0.5 * xdiff;
  259.         xmin := xmid - scalex * 0.5 * xdiff;
  260.         ydiff := ymax - ymin;
  261.         ymid := (ymax + ymin) * 0.5;
  262.         ymax := ymid + scaley * 0.5 * ydiff;
  263.         ymin := ymid - scaley * 0.5 * ydiff;
  264.         DefineWorld(i,XMin,YMin,XMax,YMax);
  265.         SelectWorld(i);
  266.        end
  267.       else error(7,2)
  268.     else error(7,4);
  269.   end;
  270.  
  271.  
  272. MAKE THE FOLLOWING MODIFICATION TO THE FILE "HISTOGRM.HGH."
  273.  
  274. (***********************************************************)
  275. (*                                                         *)
  276. (*                TURBO GRAPHIX version 1.06A              *)
  277. (*                                                         *)
  278. (*                     Bar chart module                    *)
  279. (*                   Module version 1.06A                  *)
  280. (*                                                         *)
  281. (*                  Copyright (C) 1985 by                  *)
  282. (*                  BORLAND International                  *)
  283. (*                                                         *)
  284. (***********************************************************)
  285.  
  286. procedure DrawHistogram(A :PlotArray; NPoints : integer;
  287.  
  288. var
  289.   X1, X2, Y2, NPixels, Delta, NDiff, YRef, LineStyleLoc, I :
  290.   integer;
  291.   Fract, S, Y, YAxis : real;
  292.   DirectModeLoc, Negative : boolean;
  293.   Wtemp : WindowType;
  294.   X1Loc, Y1Loc, X2Loc, Y2Loc : integer;
  295.  
  296. function Balance : integer;
  297. begin
  298.   Balance := 0;
  299.   S := S + Fract;
  300.   if S >= 0.0 then
  301.   begin
  302.     S := S - 1.0;
  303.     Balance := 1;
  304.   end;
  305. end; { Balance }
  306.  
  307. begin { DrawHistogram }
  308.   if abs(NPoints) >= 2 then
  309.     begin
  310.       X1Loc := X1Glb;
  311.       Y1Loc := Y1Glb;
  312.       X2Loc := X2Glb;
  313.       Y2Loc := Y2Glb;
  314.       LineStyleLoc := LinestyleGlb;
  315.       SetLineStyle(0);
  316.       if AxisGlb then
  317.  
  318. BAR CHART MODULE, CONTINUED
  319.  
  320.         begin
  321.         Wtemp := Window[WindowNdxGlb];
  322.         ReDefineWindow(WindowNdxGlb,   X1RefGlb   +  4  +  X1Glb, 
  323.                        Y1RefGlb  +  6 +  Y1Glb,  X2RefGlb  - 2  - 
  324.                        X2Glb, Y2RefGlb - 14 - Y2Glb);
  325.         SelectWindow(WindowNdxGlb);
  326.         AxisGlb := true;
  327.       end;
  328.       DirectModeLoc := DirectModeGlb;
  329.       DirectModeGlb := true;
  330.       Negative := NPoints < 0;
  331.       NPoints := abs(NPoints);
  332.       NPixels := (X2RefGlb - X1RefGlb) shl 3 + 7;
  333.       Delta := NPixels div NPoints;
  334.       NDiff := NPixels - Delta * NPoints;
  335.       Fract := NDiff / NPoints;
  336.       S := -Fract;
  337.       X1 := X1RefGlb shl 3;
  338.       YRef := trunc(Y2RefGlb + Y1RefGlb - AyGlb);
  339.       if Negative then
  340.         DrawStraight(X1, X2RefGlb shl 3 + 7, YRef);
  341.       YAxis := Y1RefGlb;
  342.       if BYGlb > 0 then
  343.         YAxis := Y2RefGlb;
  344.       for I := 1 to NPoints do
  345.       begin
  346.         X2 := X1 + Delta + Balance;
  347.         Y := A[I, 2];
  348.         if not Negative then
  349.           Y := abs(Y);
  350.                <-----------------------------------|
  351.         if AxisGlb then                            |
  352.           Y2 := trunc(AyGlb + ByGlb * Y)           |
  353.         else                                       |-{ DELETE }
  354.           Y2 := trunc((AyGlb + ByGlb * Y) * 0.99); | { THIS   }
  355.         Y2 := Y2RefGlb + Y1RefGlb - Y2;            | { BLOCK  }
  356.                <-----------------------------------|
  357.  
  358.         { ADD THE FOLLOWING LINE }
  359.         Y2 := Y2RefGlb + Y1RefGlb - (trunc(AyGlb + ByGlb * Y)); 
  360.  
  361.  
  362. BAR CHART MODULE, CONTINUED
  363.  
  364.         if not Negative then
  365.           begin
  366.             DrawLine(X1, YAxis, X1, Y2);
  367.             DrawStraight(X1, X2, Y2);
  368.             DrawLine(X2, Y2, X2, YAxis);
  369.             if Hatching then
  370.               if Odd(I) then
  371.                 Hatch(X1, Y2, X2, YAxis, HatchStyle)
  372.               else
  373.                 Hatch(X1, Y2, X2, YAxis, -HatchStyle);
  374.           end
  375.         else
  376.           begin
  377.             DrawLine(X1, YRef, X1, Y2);
  378.             DrawStraight(X1, X2, Y2);
  379.             DrawLine(X2, Y2, X2, YRef);
  380.             if Hatching then
  381.               if YRef - Y2 < 0 then
  382.                 if Odd(I) then
  383.                   Hatch(X1, YRef, X2, Y2, HatchStyle)
  384.                 else
  385.                   Hatch(X1, YRef, X2, Y2, -HatchStyle)
  386.               else
  387.                 if Odd(I) then
  388.                   Hatch(X1, Y2, X2,YRef, HatchStyle)
  389.                 else
  390.                   Hatch(X1, Y2, X2, YRef, -HatchStyle);
  391.           end;
  392.         X1 := X2;
  393.       end;
  394.       if AxisGlb then
  395.       begin
  396.         Window[WindowNdxGlb] := Wtemp;
  397.         SelectWindow(WindowNdxGlb);
  398.         X1Glb := X1Loc;
  399.         Y1Glb := Y1Loc;
  400.         X2Glb := X2Loc;
  401.         Y2Glb := Y2Loc;
  402.         AxisGlb := false;
  403.       end;
  404.       DirectModeGlb := DirectModeLoc;
  405.       SetLineStyle(LineStyleLoc);
  406.     end
  407.   else
  408.     Error(19, 4);
  409. end; { DrawHistogram }
  410.  
  411. ADD  THE  FOLLOWING VARIABLE TO  THE  FILE  "TYPEDEF.SYS."
  412.  
  413. WorldNdxGlb : integer;
  414.  
  415. { IN THE FILE CALLED "KERNEL.SYS" MODIFY THE PROCEDURE CALLED, 
  416. "SelectWorld" as follows. }
  417.  
  418. procedure SelectWorld(I : integer);
  419. begin
  420.   if (I in [1..MaxWorldGlb]) then
  421.     with World[I] do
  422.     begin
  423.       WorldNdxGlb := I; <----------------{ ADD THIS LINE }
  424.       X1WldGlb := X1;
  425.       Y1WldGlb := Y1;
  426.       X2WldGlb := X2;
  427.       Y2WldGlb := Y2;
  428.     end
  429.   else
  430.     Error(2, 2);
  431. end; { SelectWorld }
  432.  
  433. IN   THE   FILE   CALLED   "POLYGON.HGH"   MAKE   THE   FOLLOWING 
  434. MODIFICATIONS.
  435.  
  436. (***********************************************************)  
  437. (*                                                         *)    
  438. (*                TURBO GRAPHIX version 1.06A              *)    
  439. (*                                                         *)    
  440. (*                  Polygon drawing module                 *)    
  441. (*                   Module version 1.06A                  *)    
  442. (*                                                         *)    
  443. (*                  Copyright (C) 1985 by                  *)    
  444. (*                  BORLAND International                  *)    
  445. (*                                                         *)    
  446. (***********************************************************)
  447.  
  448. procedure DrawPolygon(A :  PlotArray;I0,  NPoints,  Line,  Scale,                       
  449.                       Lines : integer);
  450. var
  451.   I, X1, X2, Y1, Y2, XOffset, YOffset,
  452.   X1RefLoc, Y1RefLoc, X2RefLoc, Y2RefLoc,
  453.   DeltaY, XOs1, XOs2, YOs1, YOs2 : integer;
  454.   AutoClip, DirectModeLoc, PlotLine, PlotSymbol : boolean;
  455.   X1Loc, Y1Loc, X2Loc, Y2Loc : integer;
  456.   Temp : real; <-------------|
  457.   Flipped  :  boolean;  <----|-------{ ADD THESE TWO VARIABLES }  
  458.  
  459. procedure DrawPointClipped(X, Y : integer);
  460. begin
  461.   if (X1 > X1RefGlb shl 3) and (X2 < X2RefGlb shl 3 + 7) then
  462.     if (Y1 > Y1RefGlb) and (Y2 < Y2RefGlb) then
  463.       DP(X, Y);
  464. end; { DrawPointClipped }
  465.  
  466. procedure DrawItem(X, Y : integer);
  467. var
  468.   LineStyleLoc : integer;
  469. begin
  470.   LineStyleLoc := LineStyleGlb;
  471.   SetLineStyle(0);
  472. POLYGON DRAWING MODULE, CONTINUED
  473.  
  474.     case Line of
  475.     2    : DrawCrossDiag(X, Y, Scale);
  476.     3,  4  :  DrawSquareC(X - Scale,  Y + Scale,  X + Scale,  Y - 
  477.                           Scale, (Line = 4));
  478.     5    : DrawDiamond(X, Y, Scale + 1);
  479.     6    : DrawWye(X, Y, Scale + 1);
  480.     1    : DrawCross(X, Y, Scale);
  481.     8    : DrawCircleDirect(X, Y, Scale + 1, false);
  482.     9    : begin
  483.              PlotLine := false;
  484.              if AutoClip then
  485.                DrawPointClipped(X, Y)
  486.              else
  487.                DP(X, Y);
  488.            end;
  489.      7   : DrawStar(X, Y, Scale);
  490.    end;
  491.    SetLineStyle(LineStyleLoc);
  492.  end; { DrawItem }
  493.  
  494. begin { DrawPolygon }
  495.                    <-------------------|
  496.   if not AxisGlb then                  |
  497.     begin                              |
  498.       with World[WorldNdxGlb] do       |
  499.       begin                            |
  500.         Temp := Y1;                    |
  501.         Y1 := Y2;                      |
  502.         Y2 := Temp;                    |------{ ADD THIS BLOCK } 
  503.       end;                             |
  504.       SelectWorld(WorldNdxGlb);        |
  505.       SelectWindow(WindowNdxGlb);      |
  506.       Flipped := true;                 |
  507.     end                                |
  508.   else                                 |
  509.     Flipped := false;                  |
  510.                    <-------------------|
  511.   if abs(NPoints - I0) >= 2 then
  512.   begin
  513.     X1Loc := X1Glb;
  514.     Y1Loc := Y1Glb;
  515.     X2Loc := X2Glb;
  516.     Y2Loc := Y2Glb;
  517.     DirectModeLoc := DirectModeGlb;
  518.     DirectModeGlb := true;
  519.     AutoClip := (NPoints < 0);
  520.     NPoints := abs(NPoints);
  521. POLYGON DRAWING MODULE, CONTINUED
  522.     XOs1 := 1;
  523.     XOs2 := 1;
  524.  
  525.     YOs1 := 6;
  526.     YOs2 := 6;
  527.     if AxisGlb then
  528.     begin
  529.       XOs1 := 4;
  530.       XOs2 := 2;
  531.       YOs1 := 6;
  532.       YOs2 := 14;
  533.       if  (((X2RefGlb  + 7 - XOs2 - X1RefGlb + XOs1)  >  (XOs1  + 
  534.           XOs2)  shl 1) and (Y2RefGlb - YOs2 - Y1RefGlb + YOs1  > 
  535.           (YOs1 + YOs2) shl 1)) then
  536.       begin
  537.         X1RefLoc := X1RefGlb;
  538.         X1 := X1RefGlb + XOs1 + X1Glb;
  539.         Y1RefLoc := Y1RefGlb;
  540.         Y1 := Y1RefGlb + YOs1 + Y1Glb;
  541.         X2RefLoc := X2RefGlb;
  542.         X2 := X2RefGlb - XOs2 - X2Glb;
  543.         Y2RefLoc := Y2RefGlb;
  544.         Y2 := Y2RefGlb - YOs2 - Y2Glb;
  545.         ReDefineWindow(WindowNdxGlb, X1, Y1, X2, Y2);
  546.         SelectWindow(WindowNdxGlb);
  547.         AxisGlb := true;
  548.       end;
  549.     end;
  550.     PlotLine := (Line >= 0);
  551.     PlotSymbol := (Line <> 0);
  552.     Line := abs(Line);
  553.     Scale := abs(Scale);
  554.     if Lines < 0 then
  555.       DeltaY := Trunc(1.0 / (abs(Y1WldGlb) + abs(Y2WldGlb)) *
  556.                              abs(Y1WldGlb) * abs(Y2RefGlb - 
  557.                              Y1RefGlb)) + 1
  558.     else
  559.       DeltaY := 0;
  560.     if (NPoints < 2) and MessageGlb then
  561.       Writeln('<DrawPolygon>: too few data pairs ->(NPoints)>=2')
  562.     else
  563.  
  564.         begin
  565.         X1 := WindowX(A[I0, 1]);
  566.         Y1 := Y2RefGlb + Y1RefGlb - WindowY(A[I0, 2]);
  567.         DrawItem(X1, Y1);
  568.         if Abs(Lines) = 1 then
  569.  
  570. POLYGON DRAWING MODULE, CONTINUED 
  571.          
  572.         if AutoClip then
  573.             DrawLineClipped(X1, Y2RefGlb - DeltaY, X1, Y1)
  574.           else
  575.             DrawLine(X1, Y2RefGlb - DeltaY, X1, Y1);
  576.         for I:= I0 + 1 to NPoints do
  577.         begin
  578.           X2 := WindowX(A[I, 1]);
  579.           Y2 := Y2RefGlb + Y1RefGlb - WindowY(A[I, 2]);
  580.           DrawItem(X2, Y2);
  581.           if Abs(Lines) = 1 then
  582.             if AutoClip then
  583.               DrawLineClipped(X2, Y2RefGlb - DeltaY, X2, Y2)
  584.             else
  585.               DrawLine(X2, Y2RefGlb - DeltaY, X2, Y2);
  586.           if PlotLine then
  587.             if AutoClip then
  588.               DrawLineClipped(X1, Y1, X2, Y2)
  589.             else
  590.               DrawLine(X1, Y1, X2, Y2);
  591.           X1 := X2;
  592.           Y1 := Y2;
  593.         end;
  594.       end;
  595.     if AxisGlb then
  596.     begin
  597.       ReDefineWindow(WindowNdxGlb,  X1RefLoc, Y1RefLoc, X2RefLoc, 
  598.                      Y2RefLoc);
  599.       SelectWindow(WindowNdxGlb);
  600.       X1Glb := X1Loc;
  601.       Y1Glb := Y1Loc;
  602.       X2Glb := X2Loc;
  603.       Y2Glb := Y2Loc;
  604.       AxisGlb := false;
  605.     end;
  606.     DirectModeGlb := DirectModeLoc;
  607.   end
  608.   else
  609.     Error(18, 4);
  610.  
  611. POLYGON DRAWING MODULE, CONTINUED      
  612.  
  613.                    <-------------------|
  614.   if Flipped then                      |
  615.     begin                              |
  616.       with World[WorldNdxGlb] do       |
  617.       begin                            |
  618.         Temp := Y1;                    |
  619.         Y1 := Y2;                      |
  620.         Y2 := Temp;                    |------{ ADD THIS BLOCK }
  621.       end;                             |
  622.       SelectWorld(WorldNdxGlb);        |
  623.       SelectWindow(WindowNdxGlb);      |
  624.     end;                               |
  625.                    <-------------------|
  626. end; { DrawPolygon }
  627.  
  628.                        WINDOW MOVE UPDATE
  629.  
  630. The following code modifications enable the Turbo Graphix Toolbox
  631. to properly display text after doing a move window.
  632.  
  633. In the procedure MoveVer in the file WINDOWS.SYS
  634.  
  635.   Change from:
  636.        Y1RefGlb := Y1RefGlb + HeaderSizeGlb
  637.      else
  638.        Y2RefGlb := Y2RefGlb - HeaderSizeGlb;
  639.    end;
  640.  end; { MoveVer }
  641.  
  642.  
  643.   Change to:
  644.        Y1RefGlb := Y1RefGlb + HeaderSizeGlb
  645.      else
  646.        Y2RefGlb := Y2RefGlb - HeaderSizeGlb;
  647.      ReDefineWindow(WindowNdxGlb,  X1RefGlb,  Y1RefGlb, X2RefGlb,                     
  648.                     Y2RefGlb);    { addition ver. 1.06A }
  649.      SelectWindow(WindowNdxGlb);  { addition ver. 1.06A }
  650.    end;
  651.  end; { MoveVer }
  652.  
  653. In the procedure MoveHor in the WINDOWS.SYS:
  654.  
  655.   Change from:
  656.     if Top then
  657.       Y1RefGlb := Y1RefGlb + HeaderSizeGlb
  658.     else
  659.       Y2RefGlb := Y2RefGlb - HeaderSizeGlb;
  660.   end;
  661. end; { MoveHor }
  662.  
  663.   Change to:
  664.     if Top then
  665.       Y1RefGlb := Y1RefGlb + HeaderSizeGlb
  666.     else
  667.       Y2RefGlb := Y2RefGlb - HeaderSizeGlb;
  668.     ReDefineWindow(WindowNdxGlb,  X1RefGlb,  Y1RefGlb,  X2RefGlb,                    
  669.                    Y2RefGlb);    { addition ver. 1.06A }
  670.     SelectWindow(WindowNdxGlb);  { addition ver. 1.06A }
  671.   end;
  672. end; { MoveHor }
  673.