'=========================================================================== ' Subject: POPUP DOS SCREEN SAVER Date: 01-16-00 (21:39) ' Author: Ken Sims Code: PB ' Origin: mrken@megsinet.com Packet: PB.ABC '=========================================================================== 'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ '³ This program demonstrates a complete popup TSR program known ³ '³ as POPSAVER which can be STARTED when ALT-A is pressed. ³ '³ In order to run this program do the following: ³ '³ 1. Load PowerBASIC by typing PB at the DOS prompt. ³ '³ 2. Load the file popsaver.BAS from the Open option of the ³ '³ File pulldown menu. ³ '³ 3. Compile by pressing ALT-F9 ³ '³ 4. Exit PowerBASIC by pressing ALT-X ³ '³ 5. Type POPSAVER from the DOS prompt ³ '³ 6. Popup the TSR by pressing ALT-A ³ '³ 7. Popdown the TSR by pressing ESC ³ '³ 8. If you desire, un-install the TSR by pressing ³ '³ lowr case q while it is popped up ³ 'ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ $DIM NONE $COMPILE EXE ' this tells PB to make a standalone EXE $LIB IPRINT OFF ' allow graphic characters to print $OPTION CNTLBREAK OFF ' not wise in a tsr POPUP QUIET 1000 x& = SETMEM(-700000) ' release unused memory CALL CLR COLOR 4,7 LOCATE 1,1 PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿" PRINT "³ This program demonstrates a complete popup TSR program known ³" PRINT "³ as POPSAVER which can be STARTED when ALT-A is pressed. ³" PRINT "³ In order to run this program do the following: ³" PRINT "³ ³" PRINT "³ FREEWARE from KASA Entertainment-Presents & Ken Sims ³" PRINT "³ Updated REL of POWERBASIC'S ASCIITSR.BAS 01/16/2000 ³" PRINT "³ ³" PRINT "³ ³" PRINT "³ 1. Type POPSAVER from the DOS prompt (you allready did that) ³" PRINT "³ 2. Popup the TSR by pressing ALT-A ³" PRINT "³ 3. Popdown the TSR by pressing ESC ³" PRINT "³ 4. If you desire, un-install the TSR by pressing ³" PRINT "³ lower case q while it is popped up ³" PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" POPUP KEY CHR$(8,30,247) ' ALT A is the hot key POPUP MULTIPLEX &HC000, 254 ' reg AX and DX get this pattern as an ID REG 1, &HC000 : REG 4, 254 ' set pattern to check for already installed CALL INTERRUPT &H2F ' do the multiplex interrrupt IF REG(1)<>&HC000 AND REG(4)<>254 THEN END 'we were already installed SwapFile$ = LEFT$(CURDIR$,2)+"\ASCTSR.SWP" PRINT "POPSAVER available as ALT-A" REG 1, &HC001 : REG 4, 252 ' Alter AX,DX to show we were here POPUP SLEEP USING EMS, SwapFile$ ' before going to sleep WHILE 1=1 x% = POS : y% = CSRLIN DEF SEG = &hB800 SaveScreen$ = PEEK$(0,4000) ' save the entire screen IF REG(1)=&HC000 AND REG(4)=254 THEN LOCATE 12,20 PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿"; LOCATE 13,20 PRINT "³ POPSAVER is already installed ³"; LOCATE 14,20 PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ"; ELSE GOSUB showsavers END IF a$ = INPUT$(1) 'wait for key to cancel POKE$ 0, SaveScreen$ : LOCATE y%, x% 'restore screen IF UCASE$(A$)="Q" THEN IF POPUP(1) THEN END 'this uninstalls us REG 1, &HC001 : REG 4, 252 ' Alter AX,DX to show we were here POPUP SLEEP ' before going to sleep WEND showsavers: ' SCREEN SAVER FOR POWERBASIC ' ' This program runs TEN different screen saver screens sequentialy. 'All screens are colorful and randomly generated so that no two are exactly 'alike. ' 'From KASA Entertainment-Presents & Ken Sims ' ' DEFINT A-Z CALL screen1 SUB screen1 CALL CLR SCREEN 12 FOR i% = 1 TO 320 FOR c% = 0 TO 15 12 IF INKEY$ = CHR$(27) THEN 14 x% = RND(TIMER) * 1000 y% = RND(TIMER + 1) * 1000 IF x% > 640 THEN 12 IF y% > 480 THEN 12 PSET (x%, y%), c% NEXT c% NEXT i% CALL screen2 14 END SUB SUB screen2 CALL CLR SCREEN 12 FOR i% = 1 TO 32 FOR c% = 0 TO 15 20 IF INKEY$ = CHR$(27) THEN 21 x% = RND(TIMER) * 1000 y% = RND(TIMER + 1) * 1000 z% = RND(TIMER + 2) * 1000 w% = RND(TIMER + 3) * 1000 IF x% > 640 THEN 20 IF y% > 480 THEN 20 IF w% > 640 THEN 20 IF z% > 480 THEN 20 LINE (x%, y%)-(w%, z%), c% NEXT c% NEXT i% CALL screen3 21 END SUB SUB screen3 CALL CLR SCREEN 12 FOR i% = 1 TO 32 FOR c% = 0 TO 15 22 IF INKEY$ = CHR$(27) THEN 23 x% = RND(TIMER) * 1000 y% = RND(TIMER + 1) * 1000 z% = RND(TIMER + 2) * 1000 w% = RND(TIMER + 3) * 1000 IF x% > 640 THEN 22 IF y% > 480 THEN 22 IF w% > 640 THEN 22 IF z% > 480 THEN 22 LINE (x%, y%)-(w%, z%), c%, BF NEXT c% NEXT i% CALL screen4 23 END SUB SUB screen4 CALL CLR SCREEN 12 FOR i% = 1 TO 100 FOR c% = 0 TO 15 24 IF INKEY$ = CHR$(27) THEN 25 x% = RND(TIMER) * 1000 y% = RND(TIMER + 1) * 1000 z% = RND(TIMER + 2) * 100 IF x% > 640 THEN 24 IF y% > 480 THEN 24 CIRCLE (x%, y%), z%, c% PAINT (x%, y%), c%, c% NEXT c% NEXT i% CALL screen5 25 END SUB SUB screen5 CALL CLR SCREEN 12 FOR i% = 1 TO 15 FOR c% = 0 TO 15 26 IF INKEY$ = CHR$(27) THEN 27 x% = RND(TIMER) * 1000 y% = RND(TIMER + 1) * 1000 z% = RND(TIMER + 2) * 1000 w% = RND(TIMER + 3) * 1000 a% = RND(TIMER + 4) * 1000 b% = RND(TIMER + 5) * 1000 IF x% > 640 THEN 26 IF y% > 480 THEN 26 IF w% > 640 THEN 26 IF z% > 480 THEN 26 IF a% > 640 THEN 26 IF b% > 480 THEN 26 LINE (x%, y%)-(a%, b%), c% LINE (a%, b%)-(w%, z%), c% LINE (x%, y%)-(w%, z%), c% NEXT c% NEXT i% CALL screen6 27 END SUB SUB screen6 FOR h% = 1 TO 10 CLS SCREEN 12 28 x% = RND(TIMER) * 1000 29 y% = RND(TIMER + 1) * 1000 IF INKEY$ = CHR$(27) THEN 30 IF x% > 640 THEN 28 IF y% > 240 THEN 29 r% = 0 FOR i% = 1 TO 10 FOR c% = 0 TO 15 FOR t% = 1 TO 3 r% = r% + 1 CIRCLE (x%, y%), r%, c% NEXT t% NEXT c% NEXT i% FOR g% = 500 TO 1 STEP -1 CIRCLE (x%, y%), g%, 0 NEXT g% NEXT h% CALL screen7 30 END SUB SUB screen7 FOR h% = 1 TO 10 CLS SCREEN 12 31 x% = RND(TIMER) * 1000 32 y% = RND(TIMER + 1) * 1000 33 w% = RND(TIMER + 2) * 1000 34 z% = RND(TIMER + 3) * 1000 IF INKEY$ = CHR$(27) THEN 35 IF x% > 640 THEN 31 IF y% > 240 THEN 32 IF w% > 640 THEN 33 IF z% > 240 THEN 34 IF x% > w% THEN 31 IF y% > z% THEN 32 r% = 0 FOR i% = 1 TO 20 FOR c% = 0 TO 15 FOR t% = 1 TO 3 x% = x% - 1 y% = y% - 1 w% = w% + 1 z% = z% + 1 LINE (x%, y%)-(w%, z%), c% NEXT t% NEXT c% NEXT i% NEXT h% CALL screen8 35 END SUB SUB screen8 FOR h% = 1 TO 15 CLS SCREEN 12 36 x% = RND(TIMER) * 1000 37 y% = RND(TIMER + 1) * 1000 38 w% = RND(TIMER + 2) * 1000 39 z% = RND(TIMER + 3) * 1000 IF INKEY$ = CHR$(27) THEN 40 IF x% > 640 THEN 36 IF y% > 240 THEN 37 IF w% > 640 THEN 38 IF z% > 240 THEN 39 IF x% > w% THEN 36 IF y% > z% THEN 37 r% = 0 FOR i% = 1 TO 20 FOR c% = 0 TO 15 FOR t% = 1 TO 3 x% = x% - 1 y% = y% - 1 w% = w% + 1 z% = z% + 1 LINE (x%, y%)-(w%, z%), c%, B NEXT t% NEXT c% NEXT i% FOR j% = 1 TO 970 LINE (x%, y%)-(w%, z%), 0, B x% = x% + 1 y% = y% + 1 w% = w% - 1 z% = z% - 1 NEXT j% NEXT h% CALL screen9 40 END SUB SUB screen9 CALL CLR CONST = TRUE CONST = FALSE LOCATE 2, 3, 0 LOCATE 3, 3, 0 LOCATE 5, 3, 0 RANDOMIZE TIMER CLS num = 20 SCREEN 1 x = 0 y = 0 DONE = 0 DO UNTIL DONE = 21 colr = 1 colri = 0 CLS a = INT(20 * RND) b = INT(30 * RND) C = INT(70 * RND) FOR i = 1 TO 1000 * num PSET (x + 160, y + 100), colr x1 = y - SGN(x) * SQR(ABS(b * x - C)) y1 = a - x x = x1 y = y1 colri = colri + 1 IF colri > 3000 THEN colr = colr + 1 IF colr = 4 THEN colr = 1 colri = 0 END IF IF INKEY$ > "" THEN DONE = 21 i = 1000 * num GOTO 41 END IF NEXT INCR DONE LOOP CALL screen10 41 END SUB SUB screen10 DONE = 0 CLS ' Clears screen. SCREEN 12 ' High Resolution. COLOR 0,2 LOCATE 14, 29 ' Where the words go. FOR i% = 1 TO 700 ' How many pixels PSET (i%, 220), 7 ' to move across the screen. PSET (i%, 210), 8 FOR COOLIT% = 1 TO 500 ' How fast it goes. NEXT COOLIT% NEXT i% SLEEP 1 ' How long it pauses. SLEEP 1 DO ' Do the do....for your loop. FOR j% = 100 TO 300 RANDOMIZE TIMER ' Makes Random Numbers. x% = INT(RND * 600) + 1 y% = INT(RND * 600) + 1 c% = INT(RND * 15) + 1 CIRCLE (j%, x%), y%, c% ' Random Circle Sizes. LINE (y%, x%)-(x%, y%), c%, BF ' Random Sized/Filled Circles. FOR COOLIT% = 1 TO 200: NEXT COOLIT% NEXT j% IF INKEY$ = CHR$(27) THEN 42 INCR DONE LOOP UNTIL DONE = 25 COLOR 7,0 CALL SCREEN1 42 END SUB SUB CLR A = 80 C = 12 D = 12 FOR B = 1 TO 12 LOCATE C,A PRINT " " PRINT " " LOCATE D,A PRINT " " PRINT " " A = A - 1 C = C - 1 D = D + 1 DELAY .1 IF C = 0 THEN C = 24 CLS END IF NEXT LOCATE 24, 1 END SUB RETURN