program demos; uses crt; const RETURN_KEY = #13; NULL = #0; c1 : integer = 4; {colours} c2 : integer = 6; side_ways_speed : integer = 150; { change these speeds for } { different effects } up_down_speed1 : integer = 70; up_down_speed2 : integer = 7; scroll_colour_speed : integer = 150; end_intro_speed1 : word = 1500; end_intro_speed2 : integer = 10; procedure Pause(var ch : char); begin textcolor(black); ch := readkey; end; procedure interrupt_delay(p1,p2 : integer); var i : integer; begin for i := 1 to p1 do begin textcolor(black); delay(p2); if keypressed then break; end; end; function return_column(len : integer): integer; begin return_column := 40-(len div 2); end; procedure writexy(text : string; row : integer; colour : integer); var len : integer; column : integer; begin len := length(text); column := return_column(len); textcolor(colour); gotoxy(column,row); write(text); textcolor(black); gotoxy(1,25); end; procedure side_ways(title : string; row : integer; speed : integer); var moving : integer; direction : boolean; x1,x2,tmp : integer; exit : boolean; ch : char; begin tmp := 40-(length(title) div 2); x1 := tmp-5; x2 := tmp+5; direction := true; exit := false; moving := x1; repeat window(1,row,79,row); clrscr; window(1,1,80,25); gotoxy(moving,row); textcolor(c2); write(title); textcolor(black); delay(speed); if direction then inc(moving,1) else dec(moving,1); if (moving = x2) and (direction) then direction := false; if (moving = x1) and (not direction) then direction := true; if keypressed then begin pause(ch); if ch = RETURN_KEY then ch := NULL; exit := true; end; until exit; clrscr; end; procedure up_down(sentence : string); var x,y : integer; len : integer; letter : integer; begin len := length(sentence); x := return_column(len); y := 12; repeat writexy(sentence,y,c2); { shows the whole sentence } letter := random(len)+1; { picks a random letter } gotoxy(x+letter-1,y); { clears the letter } write(' '); textcolor(c1); gotoxy(x+letter-1,y-1); { moves the letter up } write(sentence[letter]); gotoxy(1,25); interrupt_delay(up_down_speed1,up_down_speed2); gotoxy(x+letter-1,y-1); { then clears the letter } write(' '); gotoxy(1,25); interrupt_delay(up_down_speed1,up_down_speed2); until keypressed; end; procedure scroll_colour(text : string); var count,len : integer; column,i : integer; m : longint; ch : char; begin clrscr; len := length(text); column := return_column(len); count := column; for i := 1 to len do begin gotoxy(column,12); textcolor(c2); write(text); gotoxy(count,12); textcolor(c1); write(text[i]); gotoxy(1,25); textcolor(black); for m := 1 to scroll_colour_speed div 10 do begin delay(10); if keypressed then begin pause(ch); if ch = RETURN_KEY then ch := NULL; end; end; inc(count,1); end; end; procedure end_intro(text : string); var len,pos : integer; column : integer; i,m,y : integer; begin len := length(text); column := return_column(len); pos := len; for i := 1 to len do begin gotoxy(1,12); clreol; gotoxy(column,12); textcolor(c2); write(text); if i = 1 then begin textcolor(black); gotoxy(1,25); delay(end_intro_speed1); end; delete(text,pos,1); dec(pos,1); y := pos+column; for m := pos+column to 80 do begin gotoxy(y,12); textcolor(c1); write('-'); gotoxy(1,25); delay(end_intro_speed2); gotoxy(y,12); write(' '); inc(y,1); end; textcolor(black); end; end; begin textmode(80); clrscr; textcolor(black); randomize; side_ways ('Side Ways',12,side_ways_speed); up_down ('Up Down'); scroll_colour ('Scroll Colour'); end_intro ('End Intro'); textcolor(lightgray); clrscr; end.