home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / PASCAL / NWTP04 / XCONN / LOGOUT.PAS < prev    next >
Pascal/Delphi Source File  |  1993-12-29  |  5KB  |  210 lines

  1. {$X+,V-,B-}
  2. Program Logout;
  3.  
  4. { This program is an adaption of a multi-worm version,
  5.   written by a Dutch programmer (sorry, I don't have a name..)}
  6.  
  7. { This adaption / NwTP 0.4 API. (c) 1994, R.Spronk }
  8.  
  9. uses crt,dos,graph,nwConn;
  10. { demo of a program that logs out the user, and fills the screen with
  11.   a worm, functionally equal to the worm of the netware console monitor. }
  12.  
  13. const
  14.   MaxTailLen      = 30;
  15.   MaxDeviations   = 15;
  16.   MaxSymbols      = 5;
  17.   TailSegments    : array[1..MaxSymbols] of byte
  18.                   = (32,176,177,178,219);
  19.  
  20. type
  21.   BorderColl = (left,right,upside,downside);
  22.  
  23. var
  24.   gd,gm           : integer;
  25.  
  26.   color           : boolean;
  27.   wormrecord      : record
  28.                     x_head,y_head : integer;
  29.                     ChosenDir     : integer;
  30.                     PreferredDir  : integer;
  31.                     LengthFactor  : integer;
  32.                     TailLen       : integer;
  33.                     x,y           : array[1..MaxTailLen] of integer;
  34.                     end;
  35.  
  36.  
  37. procedure Initialization;
  38. var CurrSegment : integer;
  39. begin
  40. randomize;
  41.  
  42. with wormrecord
  43.  do begin
  44.     LengthFactor:=random(5)+3;
  45.     TailLen:=MaxSymbols*LengthFactor;
  46.     if TailLen>MaxTailLen then TailLen:=MaxTailLen;
  47.     x_head:=40;
  48.     y_head:=12;
  49.     PreferredDir:=random(8);
  50.     for CurrSegment:=1 to MaxTailLen
  51.      do begin
  52.         x[CurrSegment]:=0;
  53.         y[CurrSegment]:=0;
  54.         end;
  55.     end;
  56. end;
  57.  
  58. procedure ChooseDir;
  59. { This procedure determines the future direction of the worm. }
  60. VAR NbrOfDev : integer;
  61. begin
  62. NbrOfDev:=0;
  63. with wormrecord
  64.  do begin
  65.     repeat
  66.       repeat
  67.         inc (NbrOfDev);
  68.         ChosenDir:=random(8);
  69.       until  (NbrOfDev>=MaxDeviations)
  70.              or (ChosenDir=PreferredDir);
  71.     until abs(PreferredDir-ChosenDir)<>4;
  72.     PreferredDir:=ChosenDir;
  73.     end;
  74. end;
  75.  
  76. procedure DrawWorm;
  77. var CurrSegment : integer;
  78.     SegmentSym : integer;
  79. begin
  80. with wormrecord
  81.  do begin
  82.     if color then textcolor (7);
  83.     for CurrSegment:=1 to TailLen
  84.      do begin
  85.         SegmentSym:=(CurrSegment-1) div LengthFactor+1;
  86.         if (x[CurrSegment]<>0)
  87.          then begin
  88.               gotoxy (x[CurrSegment],y[CurrSegment]);
  89.               write (chr(TailSegments[SegmentSym]),
  90.                      chr(TailSegments[SegmentSym]));
  91.               end;
  92.         if (CurrSegment<TailLen)
  93.          then begin
  94.               x[CurrSegment]:=x[CurrSegment+1];
  95.               y[CurrSegment]:=y[CurrSegment+1];
  96.               end;
  97.         end;
  98.     gotoxy (x[TailLen],y[TailLen]);
  99.     x[TailLen]:=x_head;
  100.     y[TailLen]:=y_head;
  101.     end;
  102. if color then textcolor (7);
  103. end;
  104.  
  105. procedure ReverseDir (ScreenBorder:BorderColl);
  106. { Bounce directions on screenborders }
  107. begin
  108. with wormrecord
  109.  do case ScreenBorder of
  110.     left  : case PreferredDir of
  111.               3 : PreferredDir:=1;
  112.               4 : PreferredDir:=0;
  113.               5 : PreferredDir:=7;
  114.              end;
  115.     right : case PreferredDir of
  116.               1 : PreferredDir:=3;
  117.               0 : PreferredDir:=4;
  118.               7 : PreferredDir:=5;
  119.              end;
  120.     upside  : case PreferredDir of
  121.               1 : PreferredDir:=7;
  122.               2 : PreferredDir:=6;
  123.               3 : PreferredDir:=5;
  124.             end;
  125.     downside  : case PreferredDir of
  126.               5 : PreferredDir:=3;
  127.               6 : PreferredDir:=2;
  128.               7 : PreferredDir:=1;
  129.             end;
  130.   end;
  131. end;
  132.  
  133.  
  134. procedure DeterminePos;
  135. begin
  136. with wormrecord
  137.  do begin
  138.     if (ChosenDir in [1..3])
  139.      then dec (y_head);
  140.     if (ChosenDir in [5..7])
  141.      then inc (y_head);
  142.     if (ChosenDir in [3..5])
  143.      then dec (x_head);
  144.     if (ChosenDir<2) or (ChosenDir=7)
  145.      then inc (x_head);
  146.     if (ChosenDir=0)
  147.      then inc (x_head);
  148.     if (ChosenDir=4)
  149.      then dec (x_head);
  150.  
  151.     if (x_head<1)
  152.      then begin
  153.           x_head:=2-x_head;
  154.           ReverseDir (left);
  155.           end;
  156.     if (x_head>77)
  157.      then begin
  158.           x_head:=77-(x_head-77);
  159.           ReverseDir (right);
  160.           end;
  161.     if (y_head<1)
  162.      then begin
  163.           y_head:=2-y_head;
  164.           ReverseDir (upside);
  165.           end;
  166.     if (y_head>24)
  167.      then begin
  168.           y_head:=24-(y_head-24);
  169.           ReverseDir (downside);
  170.           end;
  171.     end; {with}
  172. end;
  173.  
  174.  
  175. procedure logoutservers;
  176. { Logs you out form all servers by logging out and detaching on
  177.   a server by server basis. Normally you are not detached when
  178.   logging off. It gives your connection back to the server. }
  179. Var connId:byte;
  180.     servName:string;
  181. begin
  182. for connId:=1 to 8
  183.  do begin
  184.     IF GetFileServerName(ConnId,servName)
  185.      then begin
  186.           IF LogoutFromFileServer(ConnId)
  187.              and DetachFromFileServer(connId)
  188.            then writeln('You are now detached from fileserver ',servName);
  189.           end
  190.     end;
  191. delay(2500);
  192. end;
  193.  
  194.  
  195. begin
  196.   color:=false;
  197.   detectgraph (gd,gm);
  198.   color:=(gd<>7);
  199.   logoutservers;
  200.   clrscr;
  201.   Initialization;
  202.   repeat
  203.    ChooseDir  ;
  204.    DeterminePos;
  205.    DrawWorm   ;
  206.   delay (150);
  207.   until keypressed;
  208.   clrscr;
  209. end.
  210.