'=========================================================================== ' Subject: PB TEXT MODE SCREEN SAVER Date: 11-05-96 (11:12) ' Author: Alexander Podkolzin Code: PB ' Origin: APP@nw.sbank.e-burg.su Packet: TEXT.ABC '=========================================================================== '------------------------------------------------------------------------- ' ' Simple text mode screen saver (PowerBasic 3.2). ' Author - Alexander Podkolzin ' Public domain. ' Test it before using! ' '------------------------------------------------------------------------- ' Not PowerBasic users! Exclude subs SaveScreen and RestoreScreen... '------------------------------------------------------------------------- ' DEFINT a-z ' ScreenSaver ' SUB ScreenSaver ' ' It works fine on my 100DX4 ... ' %MaxStars = 50 ' Number of "stars" on the screen DIM Star(2000) ' Array of "stars" ' SaveScreen w$,1,1,80,25,0 ' CLS ' Initial settings... RANDOMIZE TIMER ' FOR i=1 TO %MaxStars Star(INT(RND*1999)+1) = 1 NEXT ' s$=CHR$(250) FOR k=1 TO 2000 IF Star(k)<>0 THEN GOSUB CalcYX GOSUB ShowStar END IF NEXT ' DO ' Main loop s$=INKEY$ IF s$<>"" THEN EXIT LOOP ' k = INT(RND*1999)+1 ' IF Star(k)=1 THEN s$=CHR$(250) ELSEIF Star(k)=2 THEN s$=CHR$(249) ELSEIF Star(k)=3 THEN s$=CHR$(7) ELSEIF Star(k)>4 THEN s$=" " END IF ' IF k<2001 THEN IF Star(k)<>0 THEN GOSUB CalcYX GOSUB ShowStar INCR Star(k) IF Star(k)>4 THEN GOSUB KillStar n=0 FOR i=1 TO 2000 IF Star(i)<>0 THEN INCR n NEXT d = %MaxStars - n IF d>0 THEN FOR i=1 TO d GOSUB AddStar NEXT END IF END IF END IF END IF COLOR 8,0 LOCATE 1,72 ' Printing time at upper right corner PRINT TIME$; ' of the screen. LOOP ' RestoreScreen w$,1,1 ' EXIT SUB ' CalcYX: y = k \ 80 +1 x = (k MOD 80)+1 RETURN ' KillStar: Star(k)=0 LOCATE y,x PRINT " "; RETURN ' ' ShowStar: LOCATE y,x c = INT(RND*15)+1 ' Random color (1 - 15) COLOR c,0 PRINT s$; RETURN ' ' AddStar: DO k = INT(RND*2000)+1 IF k<2001 AND Star(k)=0 THEN Star(k)=1 EXIT LOOP END IF LOOP RETURN ' END SUB ' '------------------------------------------------------------------------- SUB SaveScreen(w$,xb%,yb%,xe%,ye%,sh%) PUBLIC DIM temp AS BYTE PTR DIM WinPtr AS BYTE PTR DIM TextPtr AS BYTE PTR lx% = (xe% - xb% + 1) * 2 ly% = ye% - yb% + 1 IF sh% THEN INCR lx%,2 INCR ly% END IF l$ = RIGHT$(" " + STR$(lx%), 3 ) w$ = l$ + SPACE$( lx% * ly% ) WinPtr = PBVSCRNBUFF + (yb%-1)*160 + (xb%-1)*2 TextPtr = STRPTR32(w$) + 3 FOR i%=1 TO ly% temp = WinPtr FOR k%=1 TO lx% @TextPtr = @temp INCR TextPtr INCR temp NEXT INCR WinPtr,160 NEXT END SUB '------------------------------------------------------------------------- SUB RestoreScreen(w$,xb%,yb%) PUBLIC DIM temp AS BYTE PTR DIM WinPtr AS BYTE PTR DIM TextPtr AS BYTE PTR l$ = LEFT$(w$,3) w$ = LTRIM$(w$,l$) lx% = VAL(l$) ly% = LEN(w$) \ lx% TextPtr = STRPTR32(w$) WinPtr = PBVSCRNBUFF + (yb%-1)*160 + (xb%-1)*2 FOR i%=1 TO ly% temp = WinPtr FOR k%=1 TO lx% @temp = @TextPtr INCR TextPtr INCR temp NEXT INCR WinPtr,160 NEXT END SUB '-------------------------------------------------------------------------