home *** CD-ROM | disk | FTP | other *** search
- DECLARE SUB Writedot (x%, y%, c%)
- DECLARE SUB Setvesa (Mode%)
- DECLARE SUB Delay (Times!)
- DECLARE FUNCTION Mouseinit% ()
- DECLARE FUNCTION Getvect& (Interrup%)
- DECLARE FUNCTION Findnext% (Buf AS ANY)
- DECLARE FUNCTION Findfirst% (Filename$, Attr%, Buf AS ANY)
- DECLARE FUNCTION Offp% (Pntr&)
- DECLARE FUNCTION Segp% (Pntr&)
- DECLARE FUNCTION Ptr& (Array%())
- DECLARE FUNCTION Long2int% (Number&)
- DECLARE FUNCTION Sbinit% (Port%, Irq%, Dmach%, Version%)
- DECLARE FUNCTION Dmastat% (Dmach%)
- DECLARE FUNCTION Int2Long& (Integ%)
- DECLARE FUNCTION Dosread% (Pnt&, Size%, Handle%)
- DECLARE FUNCTION Doswrite% (Pnt&, Size%, Handle%)
- '$INCLUDE: 'qb.bi'
- '$INCLUDE: 'modex.bi'
- DEFINT A-Z
- CONST Vesa640x400 = &H100
- CONST Vesa640x480 = &H101
- CONST Vesa800x600 = &H103
- CONST Vesa1024x768 = &H105
- CONST True = -1
- CONST False = 0
-
- TYPE Filefind
- Internal AS STRING * 21
- Attr AS STRING * 1
- Ftime AS INTEGER
- Fdate AS INTEGER
- Size AS LONG
- Namext AS STRING * 13
- END TYPE
- DIM SHARED Inregs AS RegTypeX
- DIM SHARED Outregs AS RegTypeX
- DIM SHARED Curpage AS INTEGER
- DIM SHARED Memloc AS INTEGER
- DIM SHARED Ytable(0 TO 767) AS INTEGER
- DIM SHARED Ptable(0 TO 767) AS INTEGER
-
- DEFINT A-Z
-
- SUB Delay (Times!)
- Start! = TIMER
- DO WHILE TIMER - Start! < Times!: LOOP
- END SUB
-
- FUNCTION Dmastat (Dmach)
- Addr = Dmach * 2
- tmp = 0
- DEF SEG = VARSEG(tmp)
- d = VARPTR(tmp)
- POKE (d), INP(Addr)
- POKE (d + 1), INP(Addr)
- Dmastat = tmp
-
- END FUNCTION
-
- FUNCTION Dosread% (Pnt&, Size%, Handle%)
- Dseg = Segp(Pnt&)
- Doff = Offp(Pnt&)
- Inregs.ax = &H3F00
- Inregs.bx = Handle
- Inregs.cx = Size
- Inregs.ds = Dseg
- Inregs.dx = Doff
- CALL INTERRUPTX(&H21, Inregs, Outregs)
- Dosread = Outregs.ax
-
- END FUNCTION
-
- FUNCTION Doswrite% (Pnt&, Size%, Handle%)
- Dseg = Segp(Pnt&)
- Doff = Offp(Pnt&)
-
- Inregs.ax = &H4000
- Inregs.bx = Handle
- Inregs.cx = Size
- Inregs.ds = Dseg
- Inregs.dx = Doff
- CALL INTERRUPTX(&H21, Inregs, Outregs)
- Doswrite = Outregs.ax
-
- END FUNCTION
-
- FUNCTION Findfirst (Filename$, Attr%, Buf AS Filefind)
- Asciiz$ = Filename$ + CHR$(0)
- Inregs.ax = &H1A00
- Inregs.ds = VARSEG(Buf)
- Inregs.dx = VARPTR(Buf)
- CALL INTERRUPTX(&H21, Inregs, Outregs)
- Inregs.ax = &H4E00
- Inregs.cx = Attr%
- Inregs.ds = VARSEG(Asciiz$)
- Inregs.dx = SADD(Asciiz$)
- CALL INTERRUPTX(&H21, Inregs, Outregs)
- IF (Outregs.flags AND &H1) = &H1 THEN
- Findfirst = 0
- ELSE
- Buf.Namext = LEFT$(Buf.Namext, INSTR(Buf.Namext, CHR$(0)))
-
- Findfirst = -1
- END IF
-
- END FUNCTION
-
- FUNCTION Findnext (Buf AS Filefind)
- Asciiz$ = Filename$ + CHR$(0)
- Inregs.ax = &H1A00
- Inregs.ds = VARSEG(Buf)
- Inregs.dx = VARPTR(Buf)
- CALL INTERRUPTX(&H21, Inregs, Outregs)
- Inregs.ax = &H4F00
- CALL INTERRUPTX(&H21, Inregs, Outregs)
- IF (Outregs.flags AND &H1) = &H1 THEN
- Findnext = 0
- ELSE
- Buf.Namext = LEFT$(Buf.Namext, INSTR(Buf.Namext, CHR$(0)))
- Findnext = -1
- END IF
-
- END FUNCTION
-
- FUNCTION Getvect& (Interrup%)
- Inregs.ax = &H3500 OR Interrup
- CALL INTERRUPTX(&H21, Inregs, Outregs)
- Vseg = Outregs.es
- Voff = Outregs.bx
- tmp& = 0
- DEF SEG = VARSEG(Vseg)
- v = VARPTR(Vseg)
- a = PEEK(v)
- b = PEEK(v + 1)
- DEF SEG = VARSEG(Voff)
- v = VARPTR(Voff)
- c = PEEK(v)
- d = PEEK(v + 1)
- DEF SEG = VARSEG(tmp&)
- v = VARPTR(tmp&)
- POKE (v), c
- POKE (v + 1), d
- POKE (v + 2), a
- POKE (v + 3), b
- Getvect& = tmp&
- END FUNCTION
-
- SUB Hidemouse
- Inregs.ax = &H2
- CALL INTERRUPTX(&H33, Inregs, Outregs)
-
- END SUB
-
- FUNCTION Int2Long& (Integ%)
- DEF SEG = VARSEG(Integ)
- v = VARPTR(Integ)
- a = PEEK(v)
- b = PEEK(v + 1)
- DEF SEG = VARSEG(Int2Long&)
- v = VARPTR(Int2Long&)
- POKE (v), a
- POKE (v + 1), b
-
- END FUNCTION
-
- FUNCTION Long2int (Number&)
- Long2int = VAL("&H" + HEX$(Number& AND &HFFFF&))
- END FUNCTION
-
- SUB MaxMousex (Minx, Maxx)
- Inregs.ax = &H7
- Inregs.cx = Minx
- Inregs.dx = Maxx
- CALL INTERRUPTX(&H33, Inregs, Outregs)
-
- END SUB
-
- SUB MaxMousey (Miny, Maxy)
- Inregs.ax = &H8
- Inregs.cx = Miny
- Inregs.dx = Maxy
- CALL INTERRUPTX(&H33, Inregs, Outregs)
-
- END SUB
-
- FUNCTION Mouseinit%
- IF Getvect(&H33) = 0 THEN
- Mouseinit = 0
- EXIT FUNCTION
- END IF
- Inregs.ax = &H0
- CALL INTERRUPTX(&H33, Inregs, Outregs)
- IF NOT Outregs.ax THEN
- Mouseinit = 0
- ELSE
- Mouseinit = -1
- END IF
-
- END FUNCTION
-
- SUB Mousestat (x, y, b)
- Inregs.ax = &H3
- CALL INTERRUPTX(&H33, Inregs, Outregs)
- x = Outregs.cx
- y = Outregs.dx
- b = Outregs.bx
-
- END SUB
-
- FUNCTION Offp (Pntr&)
- tmp = 0
- DEF SEG = VARSEG(Pntr&)
- v = VARPTR(Pntr&)
- a = PEEK(v)
- b = PEEK(v + 1)
-
- DEF SEG = VARSEG(tmp)
- v = VARPTR(tmp)
- POKE (v), a
- POKE (v + 1), b
- Offp = tmp
-
- END FUNCTION
-
- SUB Outsb (Baseport, Writeval)
- WHILE (INP(Baseport + &HC) AND &H80) <> 0: WEND
- OUT (Baseport + &HC), Writeval
-
- END SUB
-
- FUNCTION Ptr& (Array())
- tmp& = 0
- Vseg = VARSEG(Array(1))
- v = VARPTR(Array(1))
-
-
- DEF SEG = VARSEG(Vseg)
- r = VARPTR(Vseg)
- a = PEEK(r)
- b = PEEK(r + 1)
-
- DEF SEG = VARSEG(tmp&)
- r = VARPTR(tmp&)
- POKE (r + 2), a
- POKE (r + 3), b
-
- DEF SEG = VARSEG(v)
- r = VARPTR(v)
- a = PEEK(r)
- b = PEEK(r + 1)
-
- DEF SEG = VARSEG(tmp&)
- r = VARPTR(tmp&)
- POKE (r), a
- POKE (r + 1), b
-
- Ptr& = tmp&
-
-
- END FUNCTION
-
- SUB ResetSb (Baseport)
- OUT Baseport + &H6, &H1
- Delay .1
- OUT Baseport + &H6, &H0
- WHILE (INP(Baseport + &HC) AND &H80) = 0: WEND
-
-
-
- END SUB
-
- FUNCTION Sbinit% (Port, Irq, Dmach, Version)
- Evrstr$ = ENVIRON$("BLASTER")
- Port = 0
- IF LEN(Evrstr$) = 0 THEN
- FOR i = &H210 TO &H270 STEP &H10
- OUT i + &H6, &H1
- OUT i + &H6, &H0
- IF INP(i + &HC) = &HAA THEN
- Port = &H220
- Irq = 7
- Dmach = 1
- Version = 1
- END IF
- NEXT i
- IF Port = 0 THEN
- Sbinit% = 0
- ELSE
- Sbinit% = -1
- END IF
-
- EXIT FUNCTION
- END IF
- Aloc = INSTR(Evrstr$, "A")
- Iloc = INSTR(Evrstr$, "I")
- Dloc = INSTR(Evrstr$, "D")
- Tloc = INSTR(Evrstr$, "T")
- IF Aloc <> 0 THEN Port = VAL("&H" + MID$(Evrstr$, Aloc + 1, 3))
- IF Iloc <> 0 THEN Irq = VAL(MID$(Evrstr$, Iloc + 1, 1))
- IF Dloc <> 0 THEN Dmach = VAL(MID$(Evrstr$, Dloc + 1, 1))
- IF Tloc <> 0 THEN Version = VAL(MID$(Evrstr$, Tloc + 1, 1))
- Sbinit% = -1
-
-
- END FUNCTION
-
- FUNCTION Segp% (Pntr&)
- tmp = 0
- DEF SEG = VARSEG(Pntr&)
- v = VARPTR(Pntr&)
- a = PEEK(v + 2)
- b = PEEK(v + 3)
-
- DEF SEG = VARSEG(tmp)
- v = VARPTR(tmp)
- POKE (v), a
- POKE (v + 1), b
- Segp = tmp
- END FUNCTION
-
- SUB Setvesa (Mode)
- SELECT CASE Mode
- CASE &H100
- Mult& = 640
- y = 400
- CASE &H101
- Mult& = 640
- y = 480
- CASE &H103
- Mult& = 800
- y = 600
- CASE &H105
- Mult& = 1024
- y = 768
- END SELECT
-
- Memloc2& = 0
- Curpage = 0
- FOR yt = 0 TO y
- Ytable(yt) = VAL("&H" + HEX$(Memloc2&))
- Ptable(yt) = Curpage
- Memloc2& = Memloc2& + Mult&
- IF Memloc2& > 65535 THEN
- Curpage = Curpage + 1
- Memloc2& = Memloc2& - 65536
- END IF
- NEXT yt
- Curpage = 0
-
-
-
- Inregs.ax = &H4F02
- Inregs.bx = Mode
- CALL INTERRUPTX(&H10, Inregs, Outregs)
-
- END SUB
-
- SUB Showmouse
- Inregs.ax = &H1
- CALL INTERRUPTX(&H33, Inregs, Outregs)
-
- END SUB
-
- SUB Writedot (x%, y%, c%)
- Memloc = Ytable(y) + x
- Npage = Ptable(y)
- IF Npage <> Curpage THEN
- Inregs.ax = &H4F05
- Inregs.bx = 0
- Inregs.dx = Npage
- CALL INTERRUPTX(&H10, Inregs, Outregs)
- Curpage = Npage
- END IF
- IF (Ytable(y) < 0) AND (Memloc >= 0) THEN
- Curpage = Curpage + 1
- Inregs.ax = &H4F05
- Inregs.bx = 0
- Inregs.dx = Curpage
- CALL INTERRUPTX(&H10, Inregs, Outregs)
- END IF
- POKE (Memloc), c
-
-
- END SUB
-
-