home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 June / SIMTEL_0692.cdr / msdos / turbopas / tasker4.arc / NEAT.PAS next >
Pascal/Delphi Source File  |  1988-01-07  |  5KB  |  234 lines

  1. PROGRAM Tasking_Demo;
  2. {$R- ,$S- ,$N-}
  3. {
  4.   Author  : Michael Warot;
  5.   Date    : November 1987
  6.   Purpose : Demonstrate the TASKER unit
  7. }
  8. Uses Crt,Drivers,Graph,Tasker;
  9.  
  10. Type
  11.   Str  = String[255];
  12.  
  13. Var
  14.   Dx1,Dy1,
  15.   Dx2,Dy2,
  16.   X1,X2,Y1,Y2  : Integer;
  17.   C            : Char;
  18.   Clr,CC       : Byte;
  19.   Gd,Gm        : Integer;
  20.   MaxColor     : Word;
  21.   MaxX,MaxY,
  22.   MinX,MinY    : Integer;
  23.  
  24. Procedure Exit;
  25. Begin
  26.   CloseGraph;
  27.   Halt(0);
  28. End; { Exit }
  29.  
  30. Procedure DoClip2(Var  a,da    : Integer;
  31.                        Min,Max : Integer);
  32. Begin
  33.   a := a + (da div 256);
  34.   If (a <= Min) or (a >= Max) then
  35.   begin
  36.     da := -da;
  37.     a := a + (da div 256);
  38.   end;
  39. End;
  40.  
  41. Procedure DoClip(Var  a,da    : Integer;
  42.                       Min,Max : Integer);
  43. Begin
  44.   a := a + da;
  45.   If (a <= Min) or (a >= Max) then
  46.   begin
  47.     da := -da;
  48.     a := a + da;
  49.   end;
  50. End;
  51.  
  52. Procedure Task_N(MinX,MaxX,MinY,MaxY,Time,Speed : Integer);
  53. Var
  54.   cx1,cy1,
  55.   cx2,cy2,
  56.   X1,X2,Y1,Y2  : Integer;
  57.   C            : Char;
  58.   Clr,CC       : Byte;
  59.   i            : integer;
  60.  
  61. Begin
  62.   cx1 := dx1; cx2 := dx2;
  63.   cy1 := dy1; cy2 := dy2;
  64.  
  65.   X1 := MinX; Y1 := MinY;  CC := 0;
  66.   X2 := MinX; Y2 := MinY;  Clr:= 1;
  67.   Repeat
  68.     SetColor(Clr);
  69.     Line(          X1,          Y1,          X2,          Y2);
  70.     Line(MaxX+MinX-X1,          Y1,MaxX+MinX-X2,          Y2);
  71.     Line(          X1,MaxY+MinY-Y1,          X2,MaxY+MinY-Y2);
  72.     Line(MaxX+MinX-X1,MaxY+MinY-Y1,MaxX+MinX-X2,MaxY+MinY-Y2);
  73.  
  74.     DoClip(x1,cx1,MinX,MaxX);
  75.     DoClip(x2,cx2,MinX,MaxX);
  76.     DoClip(y1,cy1,Miny,Maxy);
  77.     DoClip(y1,cy2,Miny,Maxy);
  78.  
  79.     CC := CC + 1;
  80.     If CC > Time then
  81.     Begin
  82.       cc := 0;
  83.       Clr := Succ(Clr) mod Succ(MaxColor);
  84.     end;
  85.     For i := 1 to speed do
  86.       Yield;
  87.   Until KeyPressed;
  88.   C := ReadKey;
  89.  Exit;
  90. End; { Task_N }
  91.  
  92. Procedure Ball(MinX,MaxX,MinY,MaxY,Speed : Integer);
  93. {
  94.   Bouncing ball.....
  95. }
  96. Type
  97.   Ball_Record = Record
  98.                   x,dx,ox  : Integer;
  99.                   y,dy,oy  : Integer;
  100.                   color       : byte;
  101.                 end;
  102.  
  103. Var
  104.   C : Char;
  105.   i : integer;
  106.   balls      : array[1..10] of ball_record;
  107.  
  108. Begin
  109.   for i := 1 to 10 do
  110.   with balls[i] do
  111.     Begin
  112.       X  := MinX+Random(MaxX-MinX); Y  := MinY+Random(MaxY-MinY);
  113.       DX := random(320)+16;         dy := random(320)+16;
  114.       OX := X;                      oy := y;
  115.       color := random(MaxColor)+ 1;
  116.     end;
  117.   Repeat
  118.     for i := 1 to 10 do
  119.     with balls[i] do
  120.     begin
  121.       DoClip2(x,dx,MinX,MaxX);
  122.       DoClip2(y,dy,MinY,MaxY);
  123.       PutPixel(ox,oy,0);
  124.       PutPixel( x, y,Color);
  125.       ox := x;
  126.       oy := y;
  127.       if dy > 0 then
  128.         dy := dy + 150
  129.       else
  130.         dy := dy + 160;
  131.       if ( (y >= MaxY-3) and (abs(dy) < 1000) ) then
  132.       Begin
  133.         X  := MinX+1;                 Y  := MinY+1;
  134.         dx := 100+random(1000);       dy := 100+random(100);
  135.       end;
  136.     end;
  137.     For i := 1 to speed do
  138.       yield;
  139.   until False;
  140. End; { Ball }
  141.  
  142. Procedure GoodYear(Speed : Integer);
  143. Var
  144.   Data : String[255];
  145.   i    : integer;
  146. Begin
  147.   Data := '               Blue Star Systems   MS-DOS specialists, '+
  148.           ' Software, Data recovery, and many other services available.   ';
  149.   Repeat
  150.     GotoXY(6,2);
  151.     For i := 1 to 15 do
  152.       Write(Data[i]);
  153.     Data := Data + Data[1];
  154.     Delete(Data,1,1);
  155.     For i := 1 to speed do
  156.       Yield;
  157.   Until False;
  158. End; { GoodYear }
  159.  
  160. Procedure GoodYear2(Speed : Integer);
  161. Var
  162.   Data : String[255];
  163.   i    : integer;
  164. Begin
  165.   Data := '    This demo program was written for Turbo Pascal 4.0 '+
  166.           ' and is available with source from'+
  167.           ' Blue Star Systems.  7751 Chestnut Ave, Hammond, IN 46324';
  168.   Repeat
  169.     GotoXY(8,25);
  170.     For i := 1 to 20 do
  171.       Write(Data[i]);
  172.     Data := Data + Data[1];
  173.     Delete(Data,1,1);
  174.     For i := 1 to speed do
  175.       Yield;
  176.   Until False;
  177. End; { GoodYear2 }
  178.  
  179. procedure Abort(Msg : string);
  180. begin
  181.   Writeln(Msg, ': ', GraphErrorMsg(GraphResult));
  182.   Halt(1);
  183. end;
  184.  
  185. Begin
  186.   { Register all the drivers }
  187.   if RegisterBGIdriver(@CGADriverProc) < 0 then
  188.     Abort('CGA');
  189.   if RegisterBGIdriver(@EGAVGADriverProc) < 0 then
  190.     Abort('EGA/VGA');
  191.   if RegisterBGIdriver(@HercDriverProc) < 0 then
  192.     Abort('Herc');
  193.   if RegisterBGIdriver(@ATTDriverProc) < 0 then
  194.     Abort('AT&T');
  195.   if RegisterBGIdriver(@PC3270DriverProc) < 0 then
  196.     Abort('PC 3270');
  197.  
  198.   Gd := Detect;
  199.   InitGraph(Gd, Gm, '');
  200.   if GraphResult <> grOk then
  201.     Halt(1);
  202.  
  203.   Case Gd of
  204.     CGA : SetGraphMode(CGAC0);
  205.   End; { Case Graphic Driver }
  206.   DirectVideo := False;
  207.  
  208.   Init_Tasking;
  209.  
  210.   MaxColor := GetMaxColor;
  211.   MaxX := GetMaxX - 10;   MinX := 10;
  212.   MaxY := GetMaxY - 10;   MinY := 10;
  213.  
  214.   DX1 := 1;
  215.   DY1 := 2;
  216.   DX2 := 3;
  217.   DY2 := -2;
  218.  
  219.   Fork; IF child_process THEN Task_N(210,310, 10,110,   50,15);
  220.  
  221.   Fork; IF child_process THEN Task_N(250,300,120,150,   60,12);
  222.  
  223.   Fork; IF child_process THEN Task_N(250,300,155,195,   20,13);
  224.  
  225.   Fork; IF child_process THEN Ball(10, 40,50,199,10);
  226.  
  227.   Fork; IF child_process THEN GoodYear(40);
  228.   Fork; IF child_process THEN GoodYear2(60);
  229.  
  230.   Task_N(50,199,30,179, 100, 3);
  231.  
  232. END.
  233.  
  234.