Classic Computer Magazine Archive PROGRAM LISTING: 86-10/STRETCH.ACT


;STRETCH
;BY LLOYD BURCHILL
;(c) 1986, ANTIC PUBLISHING

Module

byte key=764,IR     
card scr=88,dlist=560

define dlspace="14592"
define dlsend= "14592 +575"
 ;a 580 byte long space is needed
 ;that includes no addresses on
 ;a 1K boundary
 ;(excepting first byte)

card array memline(192)

Proc Stretch(card lines,card vstart)

;Parameters:
;'lines' is number of scan lines the image should occupy on the screen
;'vstart' is scan line of original image that will appear at top of screen

Byte pointer p
card pointer q
card bigline,addr,inc,temp

inc=24576/lines

bigline=(inc rsh 1)+(vstart lsh 7)

p=dlspace+3
q=dlspace+4

do

 temp=bigline rsh 7
 addr=memline(temp)

 p^=IR+64
 p==+3

 q^=addr
 q==+3

 bigline==+inc
 if bigline>24576 or p>dlsend then exit fi

od

p^=65

Return


Proc Sinit()       ;initialize
card a

setblock(dlspace,3,112)

for a=0 to 191 do
memline(a)=scr+a*40 od
;change to 'a*20' to use mode 14

stretch(192,0)
dlist =dlspace

Return


Proc Load()        ;load disk picture
byte pointer p

Close(5)
Open(5,"D1:PICTURE",4,0)

for p=scr to  scr+7679
do
 p^=GetD(5)
od

 p=712
 p^=GetD(5)

for p=708 to  710
do
 p^=GetD(5)
od

Close(5)

Return

 
Proc Drawing()     ;example picture
byte t,u,v,w,x,y,z

for w=0 to 30
do
 color=rand(16)
 x=rand(76)
 y=rand(180)
 for z=0 to 3
  do
  Plot(x+z,y) Drawto(x+z,y+12)
  od
od

for x=0 to 14
do
 color=x+1
 Plot(0,x) Drawto(79-x,95) Drawto(0,191-x)
 Plot(0,29-x) Drawto(52+x,95) Drawto(0,163+x)
od

for w=0 to 15
do
 z=10+ rand(70)
 y=rand(192-z)
 u=rand(20)
 v=rand(50-u)+15
 t=10+rand(21)

 for x=0 to 14
 do
  color=(15-x)*t/30
  Plot(v-x,y+z)
  Drawto(v-10+u,y)
  Drawto(v+x,y+z)
 od
od

Return


Proc Rubber_Band() ;main procedure
byte pad1=624,pad2=625,mode
card h

do
   IR=15
   ;use 15 for modes 8,9,10,11
   ;use 14 for mode 15, "graphics 7 1/2"
   ;use 12 for mode 14  (160 x 192 x 2 colors)

  Graphics(0)
  Poke (752,1)
  PrintE ("�oad your own picture")
  PrintE ("�emo mode") 

  do
     until key=0 OR key=58
  od
  mode=key
  Poke(764,255)
  
   if mode=58 then
     Graphics(9) Poke(712,128)
     Drawing()

   elseif mode=0 then
     Graphics(8) Poke(712,128)
     IR=14
     Load()
   fi
 
  ;Use either Load() or Drawing()
  ;and adjust graphics call
  ;according to preference
 
  Sinit()
  do

   h=pad1

   if pad2<192 then
    Stretch(h lsh 1 ,pad2)
   fi
 
  until key<>255
  od 

until 0=1
od

Return




Back to previous page