TSRs?

If you have questions about any aspect of QBasic programming, or would like to help fellow programmers solve their problems, check out this board!

Moderators: Pete, Mods

Post Reply
Sum Yung Guy

TSRs?

Post by Sum Yung Guy »

How can I make my Quickbasic programs TSR?
Macric
Coder
Posts: 34
Joined: Fri Mar 25, 2005 11:11 pm
Location: Mexico

i haven't test this

Post by Macric »

'Subject: TSR IN QUICKBASIC Date: 10-26-95 (18:29)
'Author: Tyler Barnes Code: QB, QBasic, PDS
'Origin: FidoNet QUIK_BAS Echo Packet: DOS.ABC
'---------------------------------------------------------------------------
'Ok, here's the source code to a TSR that will make a small screen
'saver pop up every time you hit the printscreen key. You can make
'other types of tsr's with this also, all you have to do is hook
'the right interrupts. I don't really want to explain how to use
'this source, so for the most part, you'll have to figure it out for
'yourself. One thing you should know though

'In the program introduction (The part where I wrote A = 1000:
'B = 1000, etc) you should put any variables that you plan on using.
'For example, if you are using A as a variable in your program, and
'the biggest possible number that will ever be in A is 1000, you'd
'type A = 1000. Same goes for string variables.

'If you are going to use A$, and the contents of A$ is never going
'to exceed 1000 characters, you'd put A$ = SPACE$(1000) On line
'20000, there is a place on the line where there is a number. You
'can use the number that is there, or the number that is on the same
'line commented out. Using one number will cause the computer to
'continue what it was doing

'after doing what the TSR told it to, the other one will do what the tsr told
'it to do, and abort any other processes. For example, in my screensaver
'thingy, one number will cause the screen saver to popup when you hit
'printscreen, and then return to DOS when you hit a key, the other number will
'cause the screensaver to popup, and return to dos, AND print the screen when
'you hit a key.

'Also, you will notice in the source that it creates a small .COM file,
'runs it with a shell command, and then kills it. This is unavoidable
'Load QuickBasic with the /L switch.
'Do *NOT* run the TSR source from the environment
'Always compile into the Stand-Alone format.
'And last but not least: I wrote the screensaver, but I did not write the TSR
'source itself.
'I guess that's it. Here it is. Not the best, but the closest I've seen to
'a QuickBasic TSR
'--------------------------------------------------------------
'TSR_IN_BASIC
'QuickBasic version
'start QB with"/lqb" switch
1 'start introduction program here
'
A = 1000: B = 1000: C = 1000: D = 1000: I = 1000
COL = 1000: MP = 1000: Z = 1000
6999 'end introduction program here
'
7000 'set-up program
'
7010 DIM GMMCKAY%(600)
GMMCKAY%(600) = 0: GMMCKAY%(599) = 0: GMMCKAY% = 0: GMMCKAY$ = "00"

GMMCKAY%(598) = VARPTR(GMMCKAY%(0))
DEF SEG = VARSEG(GMMCKAY%(0))
FOR GMMCKAY% = 0 TO 800
READ GMMCKAY$
POKE GMMCKAY%(598) + GMMCKAY%, VAL("&H" + GMMCKAY$)
NEXT GMMCKAY%
IF GMMCKAY$ <> "00" THEN PRINT "error loading program": STOP

7500 GMMCKAY%(597) = 1'*** first interrupt ***
7520 GMMCKAY%(598) = 5
7540 GOSUB 9000

7600 'GMMCKAY%(597)=2 '*** second interrupt ***
7620 'GMMCKAY%(598)=5
7640 'GOSUB 9000

7700 'GMMCKAY%(597)=3 '** third interrupt ***
7720 'GMMCKAY%(598)=5
7740 'GOSUB 9000

8140 DEF SEG = VARSEG(GMMCKAY%(0))
GMMCKAY% = VARPTR(GMMCKAY%(0))

8160 CALL absolute(GMMCKAY%) 'call set-up
IF GMMCKAY%(599) = 1 THEN 10000
GMMCKAY%(599) = 1
LOCATE , , 1
Z = FREEFILE: OPEN "CS.COM" FOR OUTPUT AS Z
PRINT #Z, "??" + CHR$(0) + CHR$(0) + "??>???" + CHR$(0) + "L?!???";
CLOSE Z
SHELL "CS.COM"
KILL "CS.COM"
GMMCKAY% = VARPTR(GMMCKAY%(0)) + 763
DEF SEG = VARSEG(GMMCKAY%(0))
8340 CALL absolute(GMMCKAY%) 'terminate as TSR
GOTO 10000
9000 GMMCKAY% = VARPTR(GMMCKAY%(0)) + 643
DEF SEG = VARSEG(GMMCKAY%(0))
9040 CALL absolute(GMMCKAY%(598), GMMCKAY%(597), GMMCKAY%)'call interrupt .......
9060 RETURN
'
10000 'start TSR program here

SCREEN 12
RANDOMIZE TIMER
DO
A = INT(RND * 640)
B = INT(RND * 480)
C = INT(RND * 640)
D = INT(RND * 480)
COL = INT(RND * 15)
FOR I = A TO INT(RND * (640 - A))
Z = INT(RND * 3) + 1
MP = INT(RND * 2)
SELECT CASE Z
CASE 1: C = C + 1
CASE 2: D = D + 1
CASE 3: B = B + 1
END SELECT
LINE (A, B)-(C, D), COL
NEXT I
LOOP WHILE INKEY$ = ""
SCREEN 0
CLS

19999 'end TSR program here
'
20000 GMMCKAY% = 437'**** or have GMMCKAY%=551
20020 GMMCKAY% = GMMCKAY% + VARPTR(GMMCKAY%(0))
DEF SEG = VARSEG(GMMCKAY%(0))
20060 CALL absolute(GMMCKAY%) 'return to original program
GOTO 10000
20100 END

31000 'GMMCKAY%() data statements
31001 DATA 9C,56,E8,00,00,5E,81,C6,7B,03,2E,8C,5C,08,0E
31002 DATA 1F,89,04,89,5C,02,89,4C,04,89,54,06,8C,54,0A
31003 DATA 8C,44,0C,58,89,44,0E,89,7C,10,89,6C,12,58,89
31004 DATA 44,16,B9,30,00,89,F0,05,60,00,05,18,00,07,89
31005 DATA C7,29,CF,29,CF,8C,05,E2,F5,89,64,14,B8,00,00
31006 DATA 89,84,30,01,E9,A1,00,90,9C,56,E8,00,00,5E,81
31007 DATA C6,28,03,2E,89,44,78,58,2E,89,44,7A,58,2E,89
31008 DATA 44,7C,2E,8B,84,30,01,3D,00,00,74,1C,2E,8B,84
31009 DATA 02,01,50,2E,8B,84,00,01,50,2E,8B,44,7C,50,2E
31010 DATA 8B,44,78,2E,8B,74,7A,9D,CB,90,B8,01,00,2E,89
31011 DATA 84,30,01,2E,8C,9C,88,00,0E,1F,90,90,8B,44,78
31012 DATA 89,84,80,00,8B,44,7C,89,84,96,00,8B,44,7A,89
31013 DATA 84,8E,00,89,9C,82,00,89,8C,84,00,89,94,86,00
31014 DATA 8C,94,8A,00,8C,84,8C,00,89,BC,90,00,89,AC,92
31015 DATA 00,B9,30,00,89,F0,05,60,00,05,98,00,07,89,C7
31016 DATA 29,CF,29,CF,8C,05,E2,F5,89,A4,94,00,8E,54,0A
31017 DATA 8B,64,14,B9,30,00,89,F0,05,16,00,89,C7,01,CF
31018 DATA 01,CF,8E,05,06,E2,F5,8B,6C,12,8B,7C,10,8E,44
31019 DATA 0C,8B,54,06,8B,4C,04,8B,5C,02,8B,44,16,50,8B
31020 DATA 44,0E,50,8B,04,8E,5C,08,5E,9D,FB,CB,90,90,9C
31021 DATA 56,E8,00,00,5E,81,C6,50,02,2E,89,44,78,58,2E
31022 DATA 89,44,7A,58,2E,89,44,7C,2E,8B,84,30,01,3D,00
31023 DATA 00,74,1C,2E,8B,84,06,01,50,2E,8B,84,04,01,50
31024 DATA 2E,8B,44,7C,50,2E,8B,44,78,2E,8B,74,7A,9D,CB
31025 DATA 90,B8,02,00,E9,25,FF,90,9C,56,E8,00,00,5E,81
31026 DATA C6,0B,02,2E,89,44,78,58,2E,89,44,7A,58,2E,89
31027 DATA 44,7C,2E,8B,84,30,01,3D,00,00,74,1C,2E,8B,84
31028 DATA 0A,01,50,2E,8B,84,08,01,50,2E,8B,44,7C,50,2E
31029 DATA 8B,44,78,2E,8B,74,7A,9D,CB,90,B8,03,00,E9,E0
31030 DATA FE,90,E8,00,00,5E,81,C6,C8,01,0E,1F,8E,94,8A
31031 DATA 00,8B,A4,94,00,B9,30,00,89,F0,05,96,00,89,C7
31032 DATA 01,CF,01,CF,8E,05,06,E2,F5,8B,AC,92,00,8B,BC
31033 DATA 90,00,8E,84,8C,00,8B,94,86,00,8B,8C,84,00,8B
31034 DATA 84,30,01,01,C0,01,C0,01,F0,BB,FE,00,01,C3,8B
31035 DATA 07,50,8B,47,FE,90,90,50,8B,9C,82,00,8B,84,96
31036 DATA 00,50,FA,B8,00,00,89,84,30,01,8B,84,80,00,8E
31037 DATA 9C,88,00,2E,8B,B4,8E,00,9D,CB,90,E8,00,00,5E
31038 DATA 81,C6,56,01,0E,1F,8E,94,8A,00,8B,A4,94,00,B9
31039 DATA 30,00,89,F0,05,96,00,89,C7,01,CF,01,CF,8E,05
31040 DATA 06,E2,F5,8B,AC,92,00,8B,BC,90,00,8E,84,8C,00
31041 DATA 8B,94,86,00,8B,8C,84,00,90,8B,9C,82,00,8B,84
31042 DATA 96,00,50,FA,B8,00,00,89,84,30,01,8B,84,80,00
31043 DATA 8E,9C,88,00,2E,8B,B4,8E,00,9D,FB,CF,90,E8,00
31044 DATA 00,5E,81,C6,FA,00,2E,8C,9C,A0,00,0E,1F,8C,84
31045 DATA A2,00,89,AC,A4,00,89,BC,A6,00,89,E5,8B,7E,06
31046 DATA 8A,05,B4,35,CD,21,89,F2,8B,7E,04,8B,0D,83,F9
31047 DATA 01,75,0E,89,9C,00,01,8C,84,02,01,81,EA,2D,03
31048 DATA EB,1F,83,F9,02,75,0E,89,9C,04,01,8C,84,06,01
31049 DATA 81,EA,55,02,EB,0C,89,9C,08,01,8C,84,0A,01,81
31050 DATA EA,10,02,B4,25,CD,21,8B,AC,A4,00,8B,BC,A6,00
31051 DATA 8E,84,A2,00,8E,9C,A0,00,CA,04,00,90,90,B4,62
31052 DATA CD,21,B8,00,00,8E,C0,26,A1,FE,03,29,D8,89,C2
31053 DATA B8,00,31,CD,21,90,90,90,90,00,00,00,00,00,00
31054 DATA 00,00,00,00,00,00
31055 'end GMMCKAY%() data statments
Post Reply