home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
501-525
/
apd515
/
pic-pac.amos
/
pic-pac.amosSourceCode
< prev
next >
Wrap
AMOS Source Code
|
1992-02-23
|
11KB
|
344 lines
Unpack 5 To 0
Gr Writing 0
Change Mouse 2
Global SL,SY,SX,SH,SW,MY,BTS,OSH,OSW,OSY,OSX,CI,PL
MY=235 : CI=0
MAIN
Procedure MAIN
Reserve Zone 73
Limit Mouse 0,0 To 640,400
Set Zone 1,121,7 To 155,17 : Rem LOAD
Set Zone 2,121,19 To 155,29 : Rem SAVE
Set Zone 3,159,7 To 193,17 : Rem PACK
Set Zone 4,159,19 To 193,29 : Rem QUIT
For X=1 To 10
Set Zone X+4,131+(X*20),64 To 147+(X*20),94
Next X
Set Zone 15,121,31 To 154,51 : Rem EDIT PALETTE
Set Zone 16,9,111 To 67,121 : Rem RESTORE
Set Zone 17,70,111 To 104,121 : Rem PICK
Set Zone 18,22,123 To 40,133 : Rem OK
Set Zone 19,43,123 To 93,133 : Rem CANCEL
Set Zone 20,115,95 To 137,110 : Rem UP ARROW
Set Zone 21,115,114 To 137,129 : Rem DOWN ARROW
For X=1 To 16
Set Zone X+21,194+(X*8),97 To 201+(X*8),103
Next X
For X=1 To 16
Set Zone X+37,194+(X*8),109 To 201+(X*8),115
Next X
For X=1 To 16
Set Zone X+53,194+(X*8),121 To 201+(X*8),127
Next X
Set Zone 70,49,199 To 163,222 : Rem RESTORE FULL
Set Zone 71,171,199 To 304,222 : Rem RESTORE SELECTED
Set Zone 72,63,228 To 158,251 : Rem PACK FULL
Set Zone 73,162,228 To 296,251 : Rem PACK PART
Y Mouse=260 : X Mouse=235
Do
Repeat
MZ=Mouse Zone : MC=Mouse Click
I$=Inkey$ : I$=Upper$(I$) : I=Scancode : OI$=Bin$(Key Shift,8)
If OI$="%00001000"
If I$="Y"
SY=OSY : Screen Display 1,,SY,,
Proc UDY
End If
If I$="X"
SX=OSX : Screen Display 1,SX,,,
Proc UDX
End If
If I$="W"
SW=OSW : Screen Display 1,,,SW,
Proc UDSW
End If
If I$="H"
SH=OSH : Screen Display 1,,,,SH
Proc UDSH
End If
If I$="A"
SX=OSX : SY=OSY : SW=OSW : SH=OSH
Screen Display 1,SX,SY,SW,SH
Proc UDX : Proc UDY : Proc UDSW : Proc UDSH
End If
End If
If OI$="%10000000"
If I=76
Dec MY : Screen Display 0,,MY,,
End If
If I=77
Inc MY : Screen Display 0,,MY,,
End If
End If
If OI$="%00100000"
If I=76 and SL=1
Dec SH : Screen Display 1,,,,SH : Proc UDSH
End If
If I=77 and SL=1
Inc SH : Screen Display 1,,,,SH : Proc UDSH
End If
If I=79 and SL=1
Dec SW : Screen Display 1,,,SW, : Proc UDSW
End If
If I=78 and SL=1
Inc SW : Screen Display 1,,,SW, : Proc UDSW
End If
End If
'------------------------------------------------
If OI$="%00000000"
If I=76 and SL=1
Dec SY : Screen Display 1,,SY,, : Proc UDY
End If
If I=77 and SL=1
Inc SY : Screen Display 1,,SY,, : Proc UDY
End If
If I=79 and SL=1
Dec SX : Screen Display 1,SX,,, : Proc UDX
End If
If I=78 and SL=1
Inc SX : Screen Display 1,SX,,, : Proc UDX
End If
End If
Until MZ>0 and MC=1
On MZ Proc _LOAD,_SAVE,_PACK,_QUIT
If MZ=15 Then Proc _PALETTE
Loop
End Proc
Procedure UDY
If SL=1
Screen 0 : Ink 8 : Bar 294,21 To 338,27
Ink 5 : Text 294,27,Str$(SY)-" "
End If
End Proc
Procedure UDX
If SL=1
Screen 0 : Ink 8 : Bar 294,9 To 338,15
Ink 5 : Text 294,15,Str$(SX)-" "
End If
End Proc
Procedure UDSH
If SL=1
Screen 0 : Ink 8 : Bar 214,21 To 250,27
Ink 5 : Text 214,27,Str$(SH)-" "
End If
End Proc
Procedure UDSW
If SL=1
Screen 0 : Ink 8 : Bar 214,9 To 250,15
Ink 5 : Text 214,15,Str$(SW)-" "
End If
End Proc
Procedure _LOAD
Ink 8 : Bar 256,33 To 338,50
F$=Fsel$("","","PICTURE COMPACTER by OSCARsoft","PICK AN IFF PICTURE")
If F$="" Then Pop Proc
Open In 1,F$ : L=Lof(1)
D$=Input$(1,20)
Close 1
BTS=0
If Instr(D$,"FORM")>0
Ink 3 : Text 260,39,Str$(L)-" "
Load Iff F$,1 : Screen Display 1,98,25,, : SX=98 : OSX=98 : SY=25 : OSY=25
SW=Screen Width(1) : OSW=SW : SH=Screen Height(1) : OSH=SH
Screen To Front 0 : Screen 0 : SL=1 : PL=0
Proc UDY : Proc UDX : Proc UDSW : Proc UDSH
Pop Proc
End If
If Instr(D$,"Pac.Pic")>0
Load F$,4 : Unpack 4 To 1 : Erase 4
Screen 0 : Ink 3 : Text 260,39,Str$(L)-" "
Screen Display 1,98,25,, : SX=98 : OSX=98 : SY=25 : OSY=25
SW=Screen Width(1) : OSW=SW : SH=Screen Height(1) : OSH=SH
Screen Display 1,98,25,,SH
Screen To Front 0 : Screen 0 : SL=1 : PL=0
Proc UDY : Proc UDX : Proc UDSW : Proc UDSH
Pop Proc
End If
If Instr(D$,"FORM")=0 or Instr(D$,"Pac.Pic")=0
Bell : Ink 6 : Text 275,39,"NOT AN"
Text 275,49,"IFF/ABK"
Wait 50
Ink 8 : Bar 256,33 To 338,50
End If
End Proc
Procedure _SAVE
If SL=1 and BTS=0 Then Pop Proc
If SL=1 Then F$=Fsel$("","","PICTURE COMPACTER by OSCARsoft","SAVE PACKED FILE AS...")
If(SL=1) and(F$="") Then Pop Proc
If SL=1 and BTS>0 Then Save F$,BTS : Erase BTS
If SL=0
Bell : Ink 6 : Text 260,39,"NO PICTURE"
Text 275,49,"LOADED"
Wait 50
Ink 8 : Bar 256,33 To 338,50
End If
End Proc
Procedure _PACK
If SL=1
Screen Offset 0,,224 : Screen Display 0,,,,29
Repeat
MZ=Mouse Zone : MC=Mouse Click
Until MZ>71 and MC=1
If MZ=72
PM=1
Else
PM=2
End If
Screen Display 0,,,,27 : Screen Offset 0,0,61
Repeat
MZ=Mouse Zone : MC=Mouse Click
If MC=2 : Goto G : End If
Until MZ>4 and MC=1
Screen Offset 0,,148 : Screen Display 0,,,,25 : Wait 5
If PM=1
Spack 1 To MZ+1
End If
If PM=2
Spack 1 To MZ+1,0,0,SW,SH
End If
PM=0
BTS=MZ+1
PL=Length(MZ+1)
Ink 6 : Text 260,49,Str$(PL)-" "
Screen Display 0,,,,60 : Screen Offset 0,0,0
End If
G:
If SL=1 and MC=2
Ink 8 : Bar 256,33 To 338,50
Screen Display 0,,,,60 : Screen Offset 0,0,0
Bell : Ink 6 : Text 270,39,"PACKING"
Text 268,49,"ABORTED!"
Wait 100
Ink 8 : Bar 256,33 To 338,50
End If
If SL<>1
Bell : Ink 6 : Text 260,39,"NO PICTURE"
Text 275,49,"LOADED"
Wait 50
Ink 8 : Bar 256,33 To 338,50
End If
End Proc
Procedure _QUIT
If SL=1 Then Screen Close 1
Screen 0 : Fade 3 : Wait 3*15
If PL>0 Then Erase BTS
End
End Proc
Procedure _PALETTE
Screen 1 : If Screen Colour>64 Then Goto HAM
Dim R(1),G(1),B(1),CX(15)
For X=0 To 15 : CX(X)=205+(X*8) : Next X
If SL=0 Then Bell : Goto QUIT
NC=Screen Colour : Screen 0 : Dim PAL(NC)
Screen Offset 0,,89 : Screen Display 0,,,,47
Screen 1 : For X=0 To NC : PAL(X)=Colour(X) : Next X
Screen 0 : Ink 2 : Bar 141,97 To 172,103 : Ink 5 : NC$=Str$(NC)-" " : TL=Text Length(NC$) : TL=TL/2 : Text 158-TL,103,NC$
Ink 2 : Bar 141,121 To 172,127 : Ink 5 : NC$=Str$(CI)-" " : TL=Text Length(NC$) : TL=TL/2 : Text 158-TL,127,NC$
Gosub UDCI
M:
Repeat
MZ=Mouse Zone : MC=Mouse Click
Until MZ>15 and MC=1
On MZ-15 Goto _RESTORE,PICK,QUIT,CANCEL
On MZ-19 Goto CIU,CID
If MZ>21 and MZ<38 Then Goto CR
If MZ>37 and MZ<54 Then Goto CG
If MZ>53 and MZ<70 Then Goto CB
Goto M
_RESTORE:
Screen Offset 0,,196 : Screen Display 0,,,,30
Repeat
MZ=Mouse Zone : MC=Mouse Click
Until MZ>69 and MC=1
If MZ=70
If NC<33
Screen 1 : For X=0 To NC : Colour X,PAL(X) : Next X
End If
If NC=64
Screen 1 : For X=0 To 31 : Colour X,PAL(X) : Next X
End If
End If
If MZ=71
Screen 1 : Colour CI,PAL(CI)
End If
Screen Offset 0,,89 : Screen Display 0,,,,47
Screen 0 : Gosub UDCI
Goto M
PICK:
Screen Offset 0,,136 : Screen Display 0,,,,11 : Screen 1
Repeat
CI=Point(X Screen(X Mouse),Y Screen(Y Mouse)) : Gosub UDCI
Screen 1 : MK=Mouse Click
Until MK=1 or MK=2
Screen Offset 0,,89 : Screen Display 0,,,,47
Screen 0
Goto M
CR:
If NC=64 and CI>31 Then Goto M
R(0)=R(1) : NRV=MZ-22 : Gosub SCV : R(1)=NRV
NRV$=Hex$(NRV)-" " : CI$=NRV$+GC$+BC$ : CI$=CI$-"$" : CI$="$"+CI$
Screen 1 : Colour CI,Val(CI$) : Screen 0 : Colour 15,Val(CI$)
Gosub UDR : Goto M
CG:
If NC=64 and CI>31 Then Goto M
G(0)=G(1) : NGV=MZ-38 : Gosub SCV : G(1)=NGV
NGV$=Hex$(NGV)-" " : CI$=RC$+NGV$+BC$ : CI$=CI$-"$" : CI$="$"+CI$
Screen 1 : Colour CI,Val(CI$) : Screen 0 : Colour 15,Val(CI$)
Gosub UDG : Goto M
CB:
If NC=64 and CI>31 Then Goto M
B(0)=B(1) : NBV=MZ-54 : Gosub SCV : B(1)=NBV
NBV$=Hex$(NBV)-" " : CI$=RC$+GC$+NBV$ : CI$=CI$-"$" : CI$="$"+CI$
Screen 1 : Colour CI,Val(CI$) : Screen 0 : Colour 15,Val(CI$)
Gosub UDB : Goto M
CIU:
If CI+1<NC-1 Then Inc CI : Gosub UDCI : Goto M
CI=0 : Gosub UDCI : Goto M
CID:
If CI-1>-1 Then Dec CI : Gosub UDCI : Goto M
CI=NC-1 : Gosub UDCI : Goto M
CANCEL:
If NC<33
Screen 1 : For X=0 To NC : Colour X,PAL(X) : Next X
End If
If NC=64
Screen 1 : For X=0 To 31 : Colour X,PAL(X) : Next X
End If
Screen 0 : Goto QUIT
UDR:
Ink 2 : Circle CX(R(0)),100,3 : Ink 6 : Circle CX(R(1)),100,3
Return
UDG:
Ink 2 : Circle CX(G(0)),112,3 : Ink 3 : Circle CX(G(1)),112,3
Return
UDB:
Ink 2 : Circle CX(B(0)),124,3 : Ink 7 : Circle CX(B(1)),124,3
Return
SCV:
Screen 1 : CI$=Hex$(Colour(CI),3)-" "-"$" : Screen 0
RC$="$"+(Left$(CI$,1))-" " : GC$="$"+(Mid$(CI$,2,1))-" " : BC$="$"+(Right$(CI$,1))-" "
Return
UDCI:
Screen 1 : MC=Colour(CI) : Screen 0 : Colour 15,MC
Gosub SCV
R(0)=R(1) : G(0)=G(1) : B(0)=B(1)
R(1)=Val(RC$) : G(1)=Val(GC$) : B(1)=Val(BC$)
Gosub UDR : Gosub UDG : Gosub UDB
Ink 2 : Bar 141,121 To 172,127 : Ink 5 : NC$=Str$(CI)-" " : TL=Text Length(NC$) : TL=TL/2 : Text 158-TL,127,NC$
Return
HAM:
Screen Offset 0,,172 : Screen Display 0,,,,25 : Wait 100
Screen Display 0,,,,60 : Screen Offset 0,0,0 : Screen 0
Pop Proc
QUIT:
Screen Display 0,,,,60 : Screen Offset 0,0,0
Ink 2 : Circle CX(B(0)),124,3
Circle CX(G(0)),112,3
Circle CX(R(0)),100,3
If SL=0
Bell : Ink 6 : Text 260,39,"NO PICTURE"
Text 275,49,"LOADED"
Wait 50
Ink 8 : Bar 256,33 To 338,50
End If
End Proc