GET/PUT

 BBS: Inland Empire Archive
Date: 02-16-93 (19:56)             Number: 281
From: NOT STEVE                    Refer#: NONE
  To: CALVIN FRENCH                 Recvd: NO  
Subj: GET/PUT                        Conf: (2) Quik_Bas
DEFINT A-Z
'$DYNAMIC
'Must load appropriate *.QLB i.e. QB.QLB/QBX.QLB/VBDOS.QLB
' BUT _DO NOT_ use '$INCLUDE: 'whatever.BI"!!!!
'Following declare statement modified from appropriate *.bi...
DECLARE SUB Absolute (address AS INTEGER)
DECLARE SUB DoScreen ()
DECLARE SUB BlockMove ()
DECLARE SUB MakeAMask (PixArray%(), MaskArray%())
DIM SHARED StartX%, StartY%, EndX%, EndY%
'$STATIC
DIM SHARED DisableInt%, EnableInt%
DIM SHARED BackArray%(0 TO 400)
DIM SHARED SpriteArray%(0 TO 400), MaskArray%(0 TO 400)
'$DYNAMIC
REDIM SHARED ScreenArray%(0 TO 32766)
CONST C$ = "Recreated 02/15/92 by Steve Gartrell."
DisableInt% = &HCBFA   '= CLI RETF
EnableInt% = &HCBFB    '= STI RETF
SCREEN 13
DoScreen
StartX% = 159: StartY% = 100
ToggleY% = 1
ToggleX% = -1
DO
  StartY% = StartY% + ToggleY%
  IF StartY% < 1 OR StartY% > 170 THEN
    ToggleY% = -ToggleY%
  END IF
  StartX% = StartX% + ToggleX%
  IF StartX% < 1 OR StartX% > 290 THEN
    ToggleX% = -ToggleX%
  END IF
  BlockMove
LOOP UNTIL LEN(INKEY$)
SCREEN 0
WIDTH 80
COLOR 7, 0
END    'Th-th-th-ats all, folks!!!
REM $STATIC
SUB BlockMove ()
  DIM RowCnt%, NumCols%, NumRows%, ByteCnt%, CellCnt%
  DIM SourceAddr&, SourceRowOffset&, EndColAddr&
  NumCols% = (SpriteArray%(0) \ 8) - 1
  SourceRowOffset& = (320& * StartY%) + StartX% + 4
  ByteCnt% = -1
  CellCnt% = 1
  DEF SEG = VARSEG(ScreenArray%(0))
  FOR RowCnt% = 1 TO SpriteArray%(1)
    EndColAddr& = SourceRowOffset& + NumCols%
    FOR SourceAddr& = SourceRowOffset& TO EndColAddr&
      ByteCnt% = ByteCnt% + 1
      IF (ByteCnt% AND 1) THEN
        'High byte at high address!!
        POKE 1, PEEK(SourceAddr&)
        CellCnt% = CellCnt% + 1
        BackArray%(CellCnt%) = (ScreenArray%(0) AND
MaskArray%(CellCnt%)) OR SpriteArray%(CellCnt%)
      ELSE
        'Low byte at low address!!
        POKE 0, PEEK(SourceAddr&)
      END IF
    NEXT
    SourceRowOffset& = SourceRowOffset& + 320
  NEXT
  DEF SEG
  IF (ByteCnt% AND 1) = 0 THEN
    BackArray%(CellCnt% + 1) = (ScreenArray%(0) AND MaskArray%(CellCnt% + 1))
OR SpriteArray%(CellCnt% + 1)
  END IF
  CALL Absolute(VARPTR(DisableInt%))
  WAIT &H3DA, 8, 8
  WAIT &H3DA, 8
  PUT (StartX%, StartY%), BackArray%, PSET
  CALL Absolute(VARPTR(EnableInt%))
END SUB
SUB DoScreen ()
  DIM X%, Y%
  CLS
  CIRCLE (165, 100), 9, 4
  PAINT (165, 100), 90, 4
  CIRCLE (165, 100), 8, 4, 0, 3.14
  CIRCLE (165, 100), 9, 90, 3.14, 6.28
  CIRCLE (162, 99), 3, 1
  PAINT (162, 99), 0, 1
  CIRCLE (168, 99), 3, 1
  PAINT (168, 99), 0, 1
  CIRCLE (165, 103), 3, 1, 3.43, 5.83
  StartX% = 154: StartY% = 89: EndX% = 176: EndY% = 111
  REDIM ScreenArray%(0 TO 32002)  'whole screen 13 = 32002
  REDIM PixArray%(StartY% TO EndY%, StartX% TO EndX%)
  FOR Y% = StartY% TO EndY%
    FOR X% = StartX% TO EndX%
      PixArray%(Y%, X%) = POINT(X%, Y%)
    NEXT
  NEXT
  GET (StartX%, StartY%)-(EndX%, EndY%), SpriteArray%
  BackArray%(0) = SpriteArray%(0): MaskArray%(0) = SpriteArray%(0)
  BackArray%(1) = SpriteArray%(1): MaskArray%(1) = SpriteArray%(1)
  MakeAMask PixArray%(), MaskArray%()
  CLS
  b% = 16
  FOR a% = 0 TO 319
    LINE (a%, 0)-(a%, 199), b%
    b% = b% + 1
    IF b% > 143 THEN b% = 16
  NEXT
  'memory hog!!!  But necessary...
  GET (0, 0)-(319, 199), ScreenArray%(0)
END SUB
SUB MakeAMask (PixArray%(), MaskArray%())
  DIM ByteCnt%, CellCnt%, X%, Y%
  CellCnt% = 2
  ByteCnt% = 0
  FOR Y% = StartY% TO EndY%
    FOR X% = StartX% TO EndX%
      IF ByteCnt% AND 1 THEN
        IF PixArray%(Y%, X%) = 0 THEN
          MaskArray%(CellCnt%) = MaskArray%(CellCnt%) OR -256
        END IF
        CellCnt% = CellCnt% + 1
      ELSE
        IF PixArray%(Y%, X%) = 0 THEN
          MaskArray%(CellCnt%) = MaskArray%(CellCnt%) OR 255
        END IF
      END IF
      ByteCnt% = ByteCnt% + 1
    NEXT
  NEXT
END SUB

$$
 * Origin: JW-PC Consulting DataFlex.HST (608)837-1923 (1:121/8)
Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET