home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / multtsk / cpmult / demo / taskwin.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-04-07  |  2.7 KB  |  121 lines

  1. PROGRAM TaskWindows;
  2.  
  3. {$R-,S-,I-,D-,F-,V-,B-,N-,L- }
  4. {
  5.   Code-Sharing Demo
  6.  
  7.   Christian Philipps Software-Technik
  8.   Düsseldorfer Str. 316
  9.   4130 Moers 1
  10.  
  11.   Stand: 01/89
  12. }
  13.  
  14. USES Crt, CpMulti;
  15.  
  16. TYPE WinType = RECORD
  17.                  Top,
  18.                  Left,
  19.                  Bottom,
  20.                  Right  : word;
  21.                END;
  22.  
  23. CONST NoWin  = 8;
  24.       TaskWin : ARRAY[1..8] OF WinType =
  25.                 ((Top:2;Left:5;Bottom:9;Right:15),
  26.                  (Top:2;Left:25;Bottom:9;Right:35),
  27.                  (Top:2;Left:45;Bottom:9;Right:55),
  28.                  (Top:2;Left:65;Bottom:9;Right:75),
  29.                  (Top:12;Left:5;Bottom:19;Right:15),
  30.                  (Top:12;Left:25;Bottom:19;Right:35),
  31.                  (Top:12;Left:45;Bottom:19;Right:55),
  32.                  (Top:12;Left:65;Bottom:19;Right:75));
  33.  
  34. VAR   Screen : Pointer;
  35.       TaskNo : Word;
  36.  
  37. {---------------------------------------------------------------------------}
  38.  
  39. PROCEDURE Frame (X1,Y1,X2,Y2:BYTE);
  40.  
  41. VAR N : BYTE;
  42.  
  43. BEGIN { Frame }
  44.   SemWait(Screen);
  45.   Window(1,1,80,25);
  46.   GotoXY(X1,Y1);
  47.   Write('╔');
  48.   FOR N := 1 TO X2-X1-1 DO
  49.     Write('═');
  50.   Write('╗');
  51.   FOR N := 1 TO Y2-Y1-1 DO
  52.   BEGIN
  53.     GotoXY(X1,Y1+N);
  54.     Write('║');
  55.     GotoXY(X2,Y1+N);
  56.     Write('║');
  57.   END;
  58.   GotoXY(X1,Y2);
  59.   Write('╚');
  60.   FOR N := 1 TO X2-X1-1 DO
  61.     Write('═');
  62.   Write('╝');
  63.   SemSignal(Screen);
  64. END;  { Frame }
  65.  
  66. {---------------------------------------------------------------------------}
  67.  
  68. {$F+}
  69. PROCEDURE SubTask(TaskNo:Pointer);
  70.  
  71. VAR  MyNo : Word;
  72.      Pass : Word;
  73.  
  74. BEGIN {SubTask}
  75.   MyNo := Word(TaskNo);
  76.   Pass := 1;
  77.   WITH TaskWin[MyNo] DO
  78.     Frame(Left-1,Top-1,Right+1,Bottom+1);
  79.   REPEAT
  80.     SemWait(Screen);
  81.     WITH TaskWin[MyNo] DO
  82.     BEGIN
  83.       Window(Left,Top,Right,Bottom);
  84.       GotoXY(2,8);
  85.       Writeln('--',Pass:4,' --');
  86.       Inc(Pass);
  87.     END;
  88.     SemSignal(Screen);
  89.     Sleep(Random(Seconds(1)));
  90.   UNTIL False;
  91. END;  {SubTask}
  92. {$F-}
  93.  
  94. {---------------------------------------------------------------------------}
  95.  
  96. BEGIN {Main}
  97.   ClrScr;
  98.   GotoXY(20,23);
  99.   Writeln('Beenden durch einen Tastendruck...');
  100.   IF (CreateSem(Screen) <> Sem_Ok)
  101.      THEN BEGIN
  102.             Writeln('Fehler beim Erzeugen einer Semaphore!');
  103.             Halt(1);
  104.           END;
  105.  
  106.   SemClear(Screen);
  107.   FOR TaskNo := 1 TO NoWin DO
  108.     IF CreateTask(SubTask,Pointer(TaskNo),Pri_User,500) < 0
  109.        THEN BEGIN
  110.               Writeln(^G'Fehler beim Erzeugen der Task ',TaskNo);
  111.               Halt(1);
  112.             END;
  113.   SemSignal(Screen);
  114.   REPEAT
  115.     Sleep(Seconds(1));
  116.   UNTIL Keypressed;
  117.   SemWait(Screen);
  118.   Window(1,1,80,25);
  119.   GotoXY(1,23);
  120. END.
  121.