home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1999-06-16 | 3.6 KB | 129 lines |
- Screen Open 1,640,512,4,$8004 : Screen Hide
- Curs Off : Flash Off : Pen 1 : Paper 0 : Cls
- Palette 0,$FFF,$FF0,$FF
- Screen Open 0,640,512,4,$8004
- Curs Off : Flash Off : Pen 1 : Paper 0 : Cls
- Palette 0,$FFF,$FF0,$FF
- Wait Vbl : Limit Mouse
- F$="REC:Test.aiff"
- Reserve As Work 9,1024
- ST=Start(9)
- Open In 1,F$
- Extension_8_17A6 1 To ST,1024
- 'Close 1
- AD=Hunt(ST To ST+1024,"SSND")
- LE=Leek(AD+4)/4
- OF=AD+8-ST
- LASTLOAD=-1
- For X=0 To 639
- POS=(X*LE)/640
- FETCHSAMP[POS]
- V1= Extension_8_0BE4(Param) : V2= Extension_8_0BE4(Param+2)
- Ink 2 : Draw X-1,OY1/128+256 To X,V1/128+256
- Ink 3 : Draw X-1,OY2/128+256 To X,V2/128+256
- OV1=V1 : OV2=V2
- Next
- Screen Copy 0 To 1
- SCX=8 : SCY=64
- Do
- Multi Wait
- XM=X Screen(X Mouse) : YM=Y Screen(Y Mouse) : MK=Mouse Key
- If OMK>0 and(OXM<>XM or OYM<>YM or MK=0)
- X1=Max(OXM-65,0) : Y1=Max(OYM-65,0)
- X2=Min(OXM+65,639) : Y2=Min(OYM+65,511)
- Screen Copy 1,X1,Y1,X2+1,Y2+1 To 0,X1,Y1
- End If
- If MK=1 and(OXM<>XM or OYM<>YM or OMK=0 or UPD)
- X1=Max(XM-65,0) : Y1=Max(YM-65,0)
- X2=Min(XM+65,639) : Y2=Min(YM+65,511)
- POS=(XM*LE)/640
- YP=(YM-256)*128
- Cls 0,X1+1,Y1+1 To X2,Y2
- Ink 1 : Box X1,Y1 To X2,Y2
- FETCHSAMP[POS+(X1+1-XM)*SCX]
- OV=YM+( Extension_8_0BE4(Param+2)-YP)/SCY
- Clip X1,Y1 To X2,Y2
- For X=X1+1 To X2-1
- FETCHSAMP[POS+(X-XM)*SCX]
- V=YM+( Extension_8_0BE4(Param)-YP)/SCY
- If(OV>Y1 and V>Y1 and OV<Y2 and V<Y2) or Not((OV<Y1 and V<Y1) or(OV>Y2 and V>Y2))
- Ink 2 : Draw X-1,OV To X,V
- End If
- If V>Y1 and V<Y2
- ' Circle X,V,2
- End If
- OV=V
- Next
- Clip 0,0 To 640,512
- End If
- If MK=2 and(OXM<>XM or OYM<>YM or OMK=0 or UPD)
- X1=Max(XM-65,0) : Y1=Max(YM-65,0)
- X2=Min(XM+65,639) : Y2=Min(YM+65,511)
- POS=(XM*LE)/640
- YP=(YM-256)*128
- Cls 0,X1+1,Y1+1 To X2,Y2
- Ink 1 : Box X1,Y1 To X2,Y2
- FETCHSAMP[POS+(X1+1-XM)*SCX]
- OV=YM+( Extension_8_0BE4(Param+2)-YP)/SCY
- Clip X1,Y1 To X2,Y2
- For X=X1+1 To X2-1
- FETCHSAMP[POS+(X-XM)*SCX]
- V=YM+( Extension_8_0BE4(Param+2)-YP)/SCY
- If(OV>Y1 and V>Y1 and OV<Y2 and V<Y2) or Not((OV<Y1 and V<Y1) or(OV>Y2 and V>Y2))
- Ink 3 : Draw X-1,OV To X,V
- End If
- If V>Y1 and V<Y2
- ' Circle X,V,2
- End If
- OV=V
- Next
- Clip 0,0 To 640,512
- End If
- UPD=0
- I$=Inkey$
- If I$=Cup$ Then SCY=SCY/2 : UPD=1
- If I$=Cdown$ Then SCY=SCY*2 : UPD=1
- If I$=Cleft$ Then Dec SCX : UPD=1
- If I$=Cright$ Then Inc SCX : UPD=1
- If UPD Then Home : Cline : Print SCX : Cline : Print SCY
- OXM=XM : OYM=YM : OMK=MK
- Loop
- End
- If MK=1 and(OXM<>XM or OYM<>YM or OMK=0)
- X1=Max(XM-65,0) : Y1=Max(YM-65,0)
- X2=Min(XM+65,639) : Y2=Min(YM+65,511)
- POS=(XM*LE)/640
- YP=(YM-256)*128
- Cls 0,X1+1,Y1+1 To X2,Y2
- Ink 1 : Box X1,Y1 To X2,Y2
- OV1=YM : OV2=YM
- Clip X1,Y1 To X2,Y2
- For X=X1+1 To X2-1
- FETCHSAMP[POS+(X-XM)*8]
- V1=YM+( Extension_8_0BE4(Param)-YP)/64 : V2=YM+( Extension_8_0BE4(Param+2)-YP)/64
- If(OV1>Y1 and V1>Y1 and OV1<Y2 and OV1<Y2) or(OV1<Y1 and V1>Y2) or(OV1>Y2 and V1<Y1)
- Ink 2 : Draw X-1,OV1 To X,V1
- End If
- If(OV2>Y1 and V2>Y1 and OV2<Y2 and OV2<Y2) or(OV2<Y1 and V2>Y2) or(OV2>Y2 and V2<Y1)
- Ink 3 : Draw X-1,OV2 To X,V2
- End If
- If V1>Y1 and V1<Y2
- Plot X,V1,2
- End If
- If V2>Y1 and V2<Y2
- Plot X,V2,3
- End If
- OV1=V1
- OV2=V2
- Next
- Clip 0,0 To 640,512
- End If
- Procedure FETCHSAMP[P]
- Shared LASTLOAD,LE,ST,OF
- If LASTLOAD*256=>P and LASTLOAD*256+256<P
- Pop Proc[ST+(P mod 256)*4]
- End If
- LASTLOAD=P/256
- Pof(1)=LASTLOAD*1024+OF
- Extension_8_17A6 1 To ST,1024
- End Proc[ST+(P mod 256)*4]