home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga ISO Collection
/
AmigaUtilCD1.iso
/
Ascii-Ansi
/
ASCIIpaint.lha
/
apaint
/
AsciiPaint21.AMOS
/
AsciiPaint21.amosSourceCode
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
NeXTSTEP
RISC OS/Acorn
UTF-8
Wrap
AMOS Source Code
|
1994-11-20
|
35.3 KB
|
1,353 lines
Set Buffer 100
Break Off : Request Off
Screen Open 1,640,256,16,Hires
Flash Off
For T=0 To 20 : Colour T,$0 : Next
_MAKEICONS
Palette $AAA,$0,$B00,$80,$EB0,$24C,$D6A,$CC,$FFF,$AAA,$0,$FFF,,,,,,$765,$987,$CA8
Curs Off : Cls 0 : Colour Back $0
Reserve Zone 25
Degree
Dim CODE(16),O(80,28),BIN(16,2,2),POS(2,2),FARG(80,28),M$(12)
Global CODE(),O(),FARG(),BIN(),POS(),M$()
Global DISPLAY,_COL,ANSI,O$,BACK,CHSIZE,PAL,BLANK_T,BLANK_G
_COL=2 : BACK=1 : ANSI=2 : CHSIZE=1 : PAL=1
SETUP
GADGET[1,1,1] : GADGET[2,1,2]
ABOUT
_MAIN
Procedure _MAIN
MO=1
Do
Menu On
If Choice=True
MEN=Choice(1) : OPT=Choice(2) : BI=Choice(3)
If MEN=1
If OPT=1
_MESSAGE[" Delete current picture ?",1]
If Param=1 : _CLEAR : GADGET[MO,0,1] : End If
End If
If OPT=2 : LADDA[BI] : GADGET[MO,0,1] : End If
If OPT=3 : SPARA : End If
If OPT=4 : ABOUT : End If
If OPT=5
_MESSAGE["End Program ?",1] : If Param=1 : Edit : End If
End If
End If
If MEN=2
If OPT=1 : ANSI=BI : MENY : End If
If OPT=2 : CHSIZE=BI : MENY : End If
If OPT=3 : PAL=BI
BACK=1 : Colour 9,$AAA
MENY : _PALETTE
End If
If OPT=4
If BI=2
If PAL=2 or PAL=3
_MESSAGE["You should not use black background in WB mode!",0]
Else
BACK=BI : Colour 9,$0
End If
End If
If BI=1
BACK=BI : Colour 9,$AAA
End If
MENY
End If
If OPT=5
If BI=1
If BLANK_T=0 : BLANK_T=1 Else BLANK_T=0 : End If
Else
If BLANK_G=0 : BLANK_G=1 Else BLANK_G=0 : End If
End If
MENY
End If
If OPT=6 : DEFINE : End If
If OPT=7 : _ZOOM : End If
End If
End If
X=(X Screen(X Mouse)) : Y=(Y Screen(Y Mouse))
If Y>27
Menu Off
If Mouse Key<>0
If DISPLAY=0
If MO=1 : _RITA : End If
If MO=2 : _LINJE : End If
If MO=3 : _BOX[1] : End If
If MO=4 : _BOX[2] : End If
If MO=5 : _CIRCLE : End If
End If
If DISPLAY=1
DISPLAY=0 : GADGET[6,0,1]
CONV[DISPLAY,0] : GADGET[MO,0,1]
End If
End If
End If
If Mouse Key=1
MZ=Mouse Zone
If MZ=6 : Inc DISPLAY
If DISPLAY=2 : DISPLAY=0 : End If
GADGET[6,0,1] : CONV[DISPLAY,0] : GADGET[MO,0,1]
End If
If MZ=>1 and MZ<=5
MO=MZ : If MZ<>OMZ : GADGET[MO,0,1] : OMZ=MZ
End If
End If
If MZ=>7 and MZ<=14 and MZ<>OMZ
_COL=MZ-5 : GADGET[_COL,0,2] : OMZ=MZ
End If
End If
Multi Wait
Loop
End Proc
Procedure _CIRCLE
Repeat
Y=(Y Screen(Y Mouse))
If Mouse Key<>0
If Mouse Key=1 : F=_COL : FI=_COL : End If
If Mouse Key=2 : F=0 : FI=9 : End If
SX=(X Screen(X Mouse))/4 : SY=(Y Screen(Y Mouse))/4
Repeat
XX=(X Screen(X Mouse)+4)/4 : YY=(Y Screen(Y Mouse))/4
X1=XX*4 : X2=(SX*4)+(SX*4-XX*4)
Y1=YY*4 : Y2=(SY*4)+(SY*4-YY*4)
If SX<XX : Swap X1,X2 : End If
If SY<YY : Swap Y1,Y2 : End If
If Y1>24 : Bob 1,X1,Y1,1 : Bob 3,X2,Y1,3
Else Bob Off 1 : Bob Off 3
End If
Bob 2,X1,Y2,2 : Bob 4,X2,Y2,4
Wait Vbl
Multi Wait
Until Mouse Key=0
Bob Off : Wait Vbl : Ink FI
XADD=Abs(SX-XX)*4 : YADD=Abs(SY-YY)*4
For T=0 To 360
X=(Cos(T)*XADD+SX*4)/4 : Y=(Sin(T)*YADD+SY*4)/4
Y=((Y*4)-28)/4
If Y>-1 and Y<56 and X>-1 and X<160
RX=X : RY=Y
Ror.w 1,RX : Bclr 15,RX
Ror.w 1,RY : Bclr 15,RY
TX=X mod 2 : TY=Y mod 2
If F<>0
FARG(RX,RY)=F
If BIN(O(RX,RY),TX,TY)=0
O(RX,RY)=O(RX,RY)+POS(TX,TY)
End If
Else
If BIN(O(RX,RY),TX,TY)<>0
O(RX,RY)=O(RX,RY)-POS(TX,TY)
End If
End If
Ink FI : Bar X*4,Y*4+28 To X*4+3,Y*4+31
End If
Next
End If
Multi Wait
Until Y<27
End Proc
Procedure _ZOOM
Menu Off
Wind Save : Paper 0
Wind Open 1,190,48,30,11,1
Border 2,0,1 : Curs Off
Ink 11 : Polyline 184,135 To 184,48 To 422,48
Draw 185,134 To 185,48 : Ink 1 : Box 223,59 To 386,116
Draw 224,60 To 224,116 : Ink 11
Polyline 224,116 To 386,116 To 386,59 : Draw 385,60 To 385,116
Ink 1,0 : Text 250,125," <ESC> to Exit "
For Y=0 To 27
For X=0 To 79
TMP=O(X,Y) : J=8 : XX=X*2 : YY=Y*2
For T=1 To 4
If TMP=>J
TMP=TMP-J
Ink FARG(X,Y)
Else Ink 0
End If
Ror.w 1,J
Bclr 15,J
If T=1 Then Plot XX+225,YY+60
If T=2 Then Plot XX+226,YY+60
If T=3 Then Plot XX+225,YY+61
If T=4 Then Plot XX+226,YY+61
If Inkey$=Chr$(27) Then Wind Close : Pop Proc
Next
Next
Next
Repeat : I$=Inkey$ : Multi Wait : Until I$=Chr$(27)
Wind Close
End Proc
Procedure _LINJE
Repeat
Y=Y Screen(Y Mouse)
If Mouse Key<>0
SX=X Screen(X Mouse)/4*4 : SY=Y Screen(Y Mouse)/4*4
If SY<28 : SY=28 : End If
If Mouse Key=1 : FI=_COL : F=_COL : End If
If Mouse Key=2 : FI=0 : F=9 : End If
Repeat
EX=X Screen(X Mouse)/4*4 : EY=Y Screen(Y Mouse)/4*4
If EY<28 : EY=28 : End If
If SX>EX
B1=3 : B2=4 : B3=1 : B4=2
Else
B1=1 : B2=2 : B3=3 : B4=4
End If
Bob 1,SX-2,SY-1,B1 : Bob 2,SX-2,SY+5,B2
Bob 3,EX+2,EY-1,B3 : Bob 4,EX+2,EY+5,B4
Multi Wait
Until Mouse Key=0
Bob Off : Wait Vbl
If SX>EX
Swap EX,SX : Swap EY,SY
End If
XNR#=(EX-SX) : YNR#=(EY-SY)
XX#=0 : YY#=0 : Ink F
If Abs(XNR#)>Abs(YNR#)
For T=0 To XNR#/4
If XNR#=0 : XNR#=1 : End If
YY#=YY#+(YNR#/XNR#)*4
YY=YY# : YY=YY/4*4
If SY+YY<28 : YY=-(SY-28) : End If
Bar SX+T*4,SY+YY To SX+T*4+3,SY+YY+3
TX=SX/4+T : TY=SY/4+YY/4-7
Gosub _CHECKDRAW
Next
Else
If(YNR#/4)=>0 : ST=1 : Else ST=-1 : XNR#=XNR#-(Abs(XNR#)*2) : End If
For T=0 To YNR#/4 Step ST
If YNR#=0 : YNR#=1 : End If
XX#=XX#+(XNR#/YNR#)*4
XX=XX# : XX=XX/4*4
Bar SX+XX,SY+T*4 To SX+XX+3,SY+T*4+3
TX=SX/4+XX/4 : TY=SY/4+T-7
Gosub _CHECKDRAW
Next
End If
End If
Multi Wait
Until Y<27
Pop Proc
_CHECKDRAW:
RX=TX : RY=TY
Ror.w 1,RX
Bclr 15,RX
Ror.w 1,RY
Bclr 15,RY
WX=TX mod 2 : WY=TY mod 2
If FI<>0
If BIN(O(RX,RY),WX,WY)=0
O(RX,RY)=O(RX,RY)+POS(WX,WY)
End If
Else
O(RX,RY)=O(RX,RY)-POS(WX,WY)
End If
' Best�mmer f�rgen & kontrollerar v�rdena...
If O(RX,RY)>15 Then O(RX,RY)=15
If O(RX,RY)<0 Then O(RX,RY)=0
If FI<>0 Then FARG(RX,RY)=_COL
If O(RX,RY)=0 and FI=0 Then FARG(RX,RY)=0
Return
End Proc
Procedure _BOX[MO]
Repeat
X=(X Screen(X Mouse)) : Y=(Y Screen(Y Mouse))
If Mouse Key<>0
If Mouse Key=1 : F=_COL : FI=15 : End If
If Mouse Key=2 : F=9 : FI=0 : End If
SX=(X Screen(X Mouse))/8 : SY=(Y Screen(Y Mouse))/8
If SY>30 : SY=30 : End If
Repeat
XX=(X Screen(X Mouse)+4)/8 : YY=(Y Screen(Y Mouse))/8
If Y Screen(Y Mouse)<28 : YY=3 : End If
If SX>XX
X1=XX : X2=SX
Else
X1=SX : X2=XX
End If
If SY>YY
Y1=YY : Y2=SY
Else
Y1=SY : Y2=YY
End If
If Y1<3 : Y1=3 : End If
If Abs(SX-XX)<=1 : X2=X1+1 : End If
If Abs(SY-YY)<=1 : Y2=Y1+1 : End If
Bob 1,X1*8,Y1*8+4,1 : Bob 2,X1*8,Y2*8+4,2
Bob 3,X2*8,Y1*8+4,3 : Bob 4,X2*8,Y2*8+4,4
Wait Vbl
Multi Wait
Until Mouse Key=0
Bob Off : Wait Vbl : Ink F
XX1=X1*8 : XX2=X2*8-1 : YY1=Y1*8+4 : YY2=Y2*8+3
Y1=Y1-3 : Y2=Y2-3
If MO=1
For T=X1 To X2-1
O(T,Y1)=FI : FARG(T,Y1)=F
O(T,Y2-1)=FI : FARG(T,Y2-1)=F
Next
Bar XX1,YY1 To XX2,YY1+7
Bar XX1,YY2-7 To XX2,YY2
For T=Y1 To Y2-1
O(X1,T)=FI : FARG(X1,T)=F
O(X2-1,T)=FI : FARG(X2-1,T)=F
Next
Bar XX1,YY1 To XX1+7,YY2
Bar XX2-7,YY1 To XX2,YY2
End If
If MO=2
For R=Y1 To Y2-1
For T=X1 To X2-1
O(T,R)=FI : FARG(T,R)=F
Next
Bar XX1,(R+3)*8+4 To XX2,(R+3)*8+11
Next
End If
End If
Multi Wait
Until Y<27
End Proc
Procedure _CLEAR
Ink 9 : Bar 0,28 To 640,251
For Y=0 To 28
For X=0 To 79
FARG(X,Y)=0 : O(X,Y)=0
Next
Next
DISPLAY=0
End Proc
Procedure _MAKEICONS
Cls 9
For F=2 To 8
For E=0 To 15
TMP=E : J=8
For T=1 To 4
If TMP=>J
TMP=TMP-J
Ink F
Else Ink 9
End If
Ror.w 1,J
Bclr 15,J
If T=1 Then Bar 1,1 To 4,4
If T=2 Then Bar 5,1 To 8,4
If T=3 Then Bar 1,5 To 4,8
If T=4 Then Bar 5,5 To 8,8
Next
Get Icon 8+E+(F-2)*16,1,1 To 17,9
Ink 9,9 : Bar 0,0 To 20,20
Next
Next
End Proc
Procedure _RITA
Repeat
X=(X Screen(X Mouse)) : Y=(Y Screen(Y Mouse))
XX=X : YY=Y+28
Ror.w 2,XX : Bclr 15,XX : Bclr 14,XX
Ror.w 2,YY : Bclr 15,YY : Bclr 14,YY
' Ror.w 2,XX => XX=XX/4
NV=XX+YY
If Mouse Key<>0 and OV<>NV and Y>28
If YY<7 : YY=7 : End If
RX=XX : RY=YY
Ror.w 1,RX : Bclr 15,RX
Ror.w 1,RY : Bclr 15,RY
If CHSIZE=1
TX=XX mod 2 : TY=YY mod 2
End If
RY=RY-7
If Mouse Key=1
If CHSIZE=1
If BIN(O(RX,RY),TX,TY)=0
O(RX,RY)=O(RX,RY)+POS(TX,TY)
End If
Ink _COL : Bar XX*4,YY*4-28 To XX*4+3,YY*4-25
Else
O(RX,RY)=15 : Ink _COL
Bar RX*8,RY*8+28 To RX*8+7,RY*8+35
End If
FARG(RX,RY)=_COL
End If
If Mouse Key=2
If CHSIZE=1
If BIN(O(RX,RY),TX,TY)=1
O(RX,RY)=O(RX,RY)-POS(TX,TY)
If O(RX,RY)=0
FARG(RX,RY)=0
End If
Ink 9 : Bar XX*4,YY*4-28 To XX*4+3,YY*4-25
End If
Else
O(RX,RY)=0 : Ink 9
Bar RX*8,RY*8+28 To RX*8+7,RY*8+35
End If
End If
OV=NV
End If
Multi Wait
Until Y<27
End Proc
Procedure _PALETTE
Restore(PAL)
For T=2 To 8
Read F
Colour T,F
Next
1 Data $B00,$80,$EB0,$24C,$D6A,$CC,$FFF
2 Data $0,$FFF,$68A,$E44,$5D5,$4D,$EA0
3 Data $0,$FFF,$68A,$999,$BBB,$BA9,$FBA
End Proc
Procedure DEFINE
Wind Save : Ink 1 : Paper 0 : Pen 1
Wind Open 1,148,50,35,24,1
Curs Off : Border 2,0,1 : Menu Off
Ink 11 : Polyline 152,241 To 152,50 To 422,50
Draw 153,240 To 153,50
Dim OCODE(16)
For E=0 To 15
TMP=E : J=8
For T=1 To 4
If TMP=>J
TMP=TMP-J
Ink 1
Else Ink 11
End If
Ror.w 1,J
Bclr 15,J
If T=1 Then Bar 188,66+E*8 To 193,68+E*8
If T=2 Then Bar 194,66+E*8 To 199,68+E*8
If T=3 Then Bar 188,69+E*8 To 193,71+E*8
If T=4 Then Bar 194,69+E*8 To 199,71+E*8
Next
Locate 7,E+1 : Print " = "+Chr$(CODE(E))
Locate 16,E+1 : Print "= ";CODE(E);Space$(2)
OCODE(E)=CODE(E)
Next
Locate 0,18 : Print " Use Cursor keys to move. "
Locate 3,20 : Print " ESC = Cancel Return = OK "
RAD=0 : KOL=1 : Gosub _PRINT
Do
While I$="" : I$=Inkey$ : Multi Wait : Wend
C=Asc(I$) : Gosub _PRINT
If C=27
Wind Close
For T=0 To 15 : CODE(T)=OCODE(T) : Next
Pop Proc
End If
If C=13 Then Wind Close : Pop Proc
If C=30 and RAD>0 Then Dec RAD
If C=31 and RAD<15 Then Inc RAD
If C=28 and KOL=1 Then KOL=2
If C=29 and KOL=2 Then KOL=1
If KOL=1 and C>31
CODE(RAD)=Val(Right$(Str$(C),Len(Str$(C))-1))
End If
If KOL=2 and C>47 and C<58 Then Gosub _ASCII
I$="" : C=0 : Gosub _PRINT
Multi Wait
Loop
_PRINT:
Pen 1 : Paper 0 : If KOL=1 and I$="" Then Pen 0 : Paper 1
Locate 12,RAD+1 : Print Chr$(CODE(RAD))
Pen 1 : Paper 0 : If KOL=2 and I$="" Then Pen 0 : Paper 1
Locate 18,RAD+1 : Print CODE(RAD);Space$(2)
Return
_ASCII:
Paper 0 : Pen 1
Locate 0,18 : Print " Type in an Ascii code. "
Paper 11 : Pen 1
Repeat
If C>47 and C<58
A$=A$+I$
TMP=Val(A$)
Locate 18,RAD+1 : Print TMP;Space$(4-Len(A$))
End If
While Inkey$=I$ : Multi Wait : Wend
I$=""
While I$="" : I$=Inkey$ : Multi Wait : Wend
C=Asc(I$)
Until C=13 or Len(A$)=3
A$=""
If TMP>31 and TMP<255
CODE(RAD)=TMP
Gosub _PRINT
Else
Pen 0 : Paper 1
Locate 3,18 : Print " Not a valid Asciicode!! "
Wait 100
End If
Pen 1 : Paper 0
Locate 0,18 : Print " Use Cursor keys to move. "
Return
End Proc
Procedure SETUP
Limit Mouse 128,40 To 446,292
Hot Spot 1,0,0 : Hot Spot 2,0,4
Hot Spot 3,4,0 : Hot Spot 4,4,4
Cls 0 : Ink 9 : Bar 0,28 To 640,251
Ink 11 : Draw 0,26 To 640,26 : Draw 0,252 To 640,252
Ink 1 : Draw 0,27 To 640,27 : Draw 0,253 To 640,253
Pen 11
Menu$(1)=" Project "
Menu$(1,1)=" New... "
Menu$(1,2)=" Open IFF "
Menu$(1,2,1)=" Normal "
Menu$(1,2,2)=" Fast mode "
Menu$(1,2,3)=" Extra Fast "
Menu$(1,3)=" Save Text "
Menu$(1,4)=" About... "
Menu$(1,5)=" Quit "
M$(1)=" None "
M$(2)="� Normal "
M$(3)=" BackGround "
M$(4)="� 1/4 Char "
M$(5)=" 1/1 Char "
M$(6)="� ANSI "
M$(7)=" Workbench "
M$(8)=" MagicWB "
M$(9)="� Grey "
M$(10)=" Black "
M$(11)=" Text "
M$(12)=" Graphics "
Menu$(2)=" Options "
Menu$(2,1)=" ANSI Mode "
Menu$(2,1,1)=M$(1)
Menu$(2,1,2)=M$(2)
Menu$(2,1,3)=M$(3)
Menu$(2,2)=" Pen size "
Menu$(2,2,1)=M$(4)
Menu$(2,2,2)=M$(5)
Menu$(2,3)=" Palette "
Menu$(2,3,1)=M$(6)
Menu$(2,3,2)=M$(7)
Menu$(2,3,3)=M$(8)
Menu$(2,4)=" Paper Colour "
Menu$(2,4,1)=M$(9)
Menu$(2,4,2)=M$(10)
Menu$(2,5)=" Blank line "
Menu$(2,5,1)=M$(11)
Menu$(2,5,2)=M$(12)
Menu$(2,6)=" Define Chars "
Menu$(2,7)=" Zoom out "
Menu Static(1)
Menu Static(1,1)
Menu Static(1,2,1)
Menu Static(2)
Menu Static(2,1)
Menu Static(2,1,1)
Menu Static(2,2,1)
Menu Static(2,3,1)
Menu Static(2,4,1)
Menu Static(2,5,1)
Menu On
Restore CODE
For T=0 To 15
Read CODE(T)
Next
Restore BIN
For T=0 To 15
For Y=0 To 1
For X=0 To 1
Read BIN(T,X,Y)
Next
Next
Next
J=8
For Y=0 To 1
For X=0 To 1
POS(X,Y)=J
J=J/2
Next
Next
CODE:
Data 32,46,46,110,96,93,47,74,39,92,91,76,34,55,70,35
BIN:
Data 0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0
Data 0,1,0,1,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1
Data 1,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,1,1,1,0
Data 1,1,1,1
End Proc
Procedure SPARA
DISPLAY=1 : CONV[DISPLAY,1]
Menu Off
FREQ
F$=Param$
If F$="" Then _MESSAGE["Nothing selected!",0] : Pop Proc
If Exist(F$)
_MESSAGE[" Overwrite existing file?",1]
SVAR=Param
If SVAR=0
Pop Proc
End If
End If
Open Out 1,F$
Print #1,O$
Close 1
O$=""
End Proc
Procedure ABOUT
Wind Save : Paper 0
Wind Open 1,150,48,40,11,1
Border 2,0,1 : Curs Off
Ink 11 : Polyline 152,135 To 152,48 To 470,48
Draw 153,134 To 153,48
Paste Icon 170,60,7
Repeat : Multi Wait : Until Mouse Key<>0
Wind Close
End Proc
Procedure LADDA[ST]
Menu Off
FREQ
F$=Param$
On Error Goto _ERROR
If Exist(F$)
Load Iff(F$),2
If PP=1 : Pop Proc : End If
If Screen<>2
_MESSAGE["Could not load picture...",0]
Pop Proc
End If
SC=Screen Colour : SW=Screen Width : SH=Screen Height
Flash Off
If SC>8
Screen To Front 1 : Screen 1 : _MESSAGE["Too many colours!",0]
Screen Close 2 : Pop Proc
End If
If SC<8
Screen To Front 1 : Screen 1
_MESSAGE["Only"+Str$(SC)+" colours, use it anyway ?",1]
If Param=0
Screen Close 2 : Pop Proc
End If
End If
If SW<640
Screen To Front 1 : Screen 1
_MESSAGE["Picture is less than 640 pixels wide!",0]
Pop Proc
End If
If SW>640
Screen To Front 1 : Screen 1
_MESSAGE["More than 640 pixels wide, use it anyway ?",1]
If Param=0 : Pop Proc : End If
End If
If SH>256
Screen To Front 1 : Screen 1
_MESSAGE["More than 256 pixels high, use it anyway ?",1]
If Param=0 : Pop Proc : End If
End If
Else
If F$=""
_MESSAGE["Nothing selected !",0]
Else _MESSAGE["File dosent exist !",0]
End If
Pop Proc
End If
Screen 1 : _CLEAR
Hide
Screen 2 : Screen To Front 2
Palette $0,$B00,$80,$EB0,$24C,$D6A,$CC,$FFF
Pen 1 : Paper 0
' Konverteringsrutinen...
If ST=3 Then ST=4
Dim C(SC)
For Y=0 To 28
Y8=Y*8
For X=0 To 79
X8=X*8
For T=1 To 4
If T=1 Then XX=0 : YY=0
If T=2 Then XX=4 : YY=0
If T=3 Then XX=0 : YY=4
If T=4 Then XX=4 : YY=4
For PX=0 To 3 Step ST
For PY=0 To 3 Step ST
F=Point(X8+XX+PX,Y8+YY+PY)
Inc C(F)
If F=>1 Then Inc A
Next
Next
If A=>1 Then TKN=TKN+(2^(4-T))
A=0
Next
CC=0
For R=1 To SC
If C(R)>CC Then CC=C(R) : F=R
C(R)=0
Next
O(X,Y)=TKN : FARG(X,Y)=F+1
TKN=0
Next
Ink 7 : Locate 30,30 : Print " Converting - ";(Y*100)/28;"% Done..."
Next
Cls 0
Screen 1 : Screen To Front 1 : Show On
GADGET[6,0,1] : DISPLAY=0
CONV[DISPLAY,0] : GADGET[MO,0,1]
Pop Proc
_ERROR:
ERR=Errn
Screen 1 : Screen To Front 1
_MESSAGE["Could not load that file as IFF-ILBM !",0]
PP=1
Resume Next
End Proc
Procedure GADGET[NR,ST,F]
If F=1
X=10 : Y=2 : B=(310-4*6)/6 : H=20
For T=1 To 6
If NR=T : CC=1 : C=11 Else CC=11 : C=1 : End If
If ST=1
Paste Icon X+4,Y+1,T
Set Zone T,X,Y To X+B,Y+H
End If
Ink C
Box X,Y To X+B,Y+H
Draw X+B-1,Y+1 To X+B-1,Y+H-1
Ink CC
Polyline X,Y+H To X,Y To X+B-1,Y
Draw X+1,Y+H-1 To X+1,Y+1
Add X,B+4
Next
End If
If F=2
X=320 : Y=2 : B=(310-4*7)/7 : H=20
For T=1 To 7
If NR-1=T : CC=1 : C=11 Else CC=11 : C=1 : End If
Ink C
Box X,Y To X+B,Y+H
Draw X+B-1,Y+1 To X+B-1,Y+H-1
Ink CC
Polyline X,Y+H To X,Y To X+B-1,Y
Draw X+1,Y+H-1 To X+1,Y+1
If ST=1
Ink T+1 : Bar X+2,Y+1 To X+B-2,Y+H-1
Set Zone T+6,X,Y To X+B,Y+H
End If
Add X,B+4
Next
End If
End Proc
Procedure CONV[DISPLAY,SA]
' Den h�r rutinen "konverterar" mellan Text/Grafik
If DISPLAY=0
Ink 9
For Y=0 To 27
If BLANK_G=1 : Bar 0,Y*8+28 To 640,Y*8+35 : End If
YY=Y*8+28
For X=0 To 79
If O(X,Y)<>0
Paste Icon X*8,YY,8+O(X,Y)+(FARG(X,Y)-2)*16
End If
Next
Next
End If
If DISPLAY=1
O$="" : BG=-1
If BACK=1 : Ink 1,9
Else Ink 8,9
End If
If ANSI=1
For Y=0 To 27
If BLANK_T=1 : Ink 9 : Bar 0,Y*8+28 To 640,Y*8+35 : End If
If BACK=1 : Ink 1,9 Else Ink 8,9 : End If
For X=0 To 79
TMP$=TMP$+Chr$(CODE(O(X,Y)))
Next
Text 0,(Y*8)+34,TMP$
If SA=1
Gosub DELSPACE
O$=O$+TMP$+Chr$(10)
End If
TMP$=""
Next
End If
If ANSI=2
For Y=0 To 27
If BLANK_T=1 : Ink 9 : Bar 0,Y*8+28 To 640,Y*8+35 : End If
YY=Y*8
LC=FARG(X,Y) : Ink FARG(X,Y),9
For X=0 To 79
If FARG(X,Y)<>LC and FARG(X,Y)<>0
If SA=1
TMP$=TMP$+Chr$(27)+"[3"+Right$(Str$(FARG(X,Y)-1),1)+"m"
End If
LC=FARG(X,Y) : Ink FARG(X,Y),9
End If
If SA=1
TMP$=TMP$+Chr$(CODE(O(X,Y)))
End If
If O(X,Y)<>0
Text X*8,YY+34,Chr$(CODE(O(X,Y)))
End If
Next
If SA=1
Gosub DELSPACE : O$=O$+TMP$+Chr$(10)
TMP$=""
End If
Next
End If
If ANSI=3
For Y=0 To 27
If BLANK_T=1 : Ink 9 : Bar 0,Y*8+28 To 640,Y*8+35 : End If
For X=0 To 79
If O(X,Y)=15
If SA=1
If FARG(X,Y)<>BG
TMP$=TMP$+Chr$(27)+"[4"+Right$(Str$(FARG(X,Y)-1),1)+"m"
BG=FARG(X,Y)
End If
TMP$=TMP$+Chr$(32)
End If
Ink 9,FARG(X,Y) : Text X*8,(Y*8)+34," "
Else
If SA=1
If FARG(X,Y)<>0 and FARG(X,Y)<>LC
TMP$=TMP$+Chr$(27)+"[3"+Right$(Str$(FARG(X,Y)-1),1)
If BG<>0
TMP$=TMP$+";40m" : BG=0
Else TMP$=TMP$+"m"
End If
End If
If BG<>0
TMP$=TMP$+Chr$(27)+"[40m" : BG=0
End If
LC=FARG(X,Y)
End If
If O(X,Y)<>0
Ink FARG(X,Y),9 : Text X*8,(Y*8)+34,Chr$(CODE(O(X,Y)))
End If
If SA=1
TMP$=TMP$+Chr$(CODE(O(X,Y)))
End If
End If
Next
If SA=1
Gosub DELSPACE : O$=O$+TMP$+Chr$(10)
TMP$=""
End If
Next
End If
End If
Pop Proc
DELSPACE:
L=Len(TMP$)
While Mid$(TMP$,L,1)=Chr$(CODE(0))
Dec L
If L=0 : Exit : End If
Wend
TMP$=Left$(TMP$,L)
Return
End Proc
Procedure MENY
For T=1 To 12
Left$(M$(T),1)=" "
Next
Pen 11 : Paper 1
M$(ANSI)="�"+Right$(M$(ANSI),13)
M$(CHSIZE+3)="�"+Right$(M$(CHSIZE+3),11)
M$(PAL+5)="�"+Right$(M$(PAL+5),11)
M$(BACK+8)="�"+Right$(M$(BACK+8),7)
If BLANK_T=1 Then M$(11)="�"+Right$(M$(11),10)
If BLANK_G=1 Then M$(12)="�"+Right$(M$(12),10)
Menu$(2,1,1)=M$(1)
Menu$(2,1,2)=M$(2)
Menu$(2,1,3)=M$(3)
Menu$(2,2,1)=M$(4)
Menu$(2,2,2)=M$(5)
Menu$(2,3,1)=M$(6)
Menu$(2,3,2)=M$(7)
Menu$(2,3,3)=M$(8)
Menu$(2,4,1)=M$(9)
Menu$(2,4,2)=M$(10)
Menu$(2,5,1)=M$(11)
Menu$(2,5,2)=M$(12)
End Proc
Procedure FREQ
On Error Goto MALFUNCTION
PATH$=Dir$
BLACK=1 : WHITE=11 : LAMP=10 : _STZON=15 : X=148 : Y=50
X=X/16*16
NUM=500
_HIDE$="*.info/*.*.info/*.*.*.info"
Set Slider BLACK,0,0,0,BLACK,WHITE,0,1
Dim OUT$(NUM),DEV$(80),FILES(NUM),FILE$(NUM)
Dim X1(8),X2(8),Y1(8),Y2(8)
Wind Save : Paper 0 : Wind Open 1,X,Y,42,24,1
Curs Off : Border 2,0,BLACK
Add X,4
Window 1
Gosub RITA
Gosub _GETDIR
Gosub _UPDATE
Gosub _UPDATE2
Ink BLACK,0
Do
MX=X Screen(X Mouse)/8 : MY=Y Screen(Y Mouse)/8
MZ=Mouse Zone-_STZON
If MZ=1 Then Gosub _FILES
If Mouse Key=1 and MZ=>2 and MZ=<10
If MZ<=8 and MZ>=3
Swap BLACK,WHITE
X1=X1(MZ) : X2=X2(MZ) : Y1=Y1(MZ) : Y2=Y2(MZ)
Gosub GADGET : Swap BLACK,WHITE
End If
If MZ=2
_MAXX#=_MAX
SCR#=(86/_MAXX#)
Repeat
MV=(Y Screen(Y Mouse)-(Y+11+((86/_MAXX#)*6)))/SCR#
If MV=>0 and _MAX>12
If MV+12<=_MAX-1
_TOP=MV : _BOTTOM=_TOP+12
Else
_BOTTOM=_MAX-1 : _TOP=_BOTTOM-12
End If
Gosub _UPDATE
End If
Multi Wait
Until Mouse Key<>1
End If
If MZ=4 or MZ=3
Repeat
If MZ=3 and(Mouse Zone-_STZON)=MZ
If _TOP=>1 : Dec _TOP
If _MAX<_BOTTOM-1 : _BOTTOM=_MAX
Else Dec _BOTTOM
End If
End If
End If
If MZ=4 and(Mouse Zone-_STZON)=MZ : Rem Down
If _BOTTOM+1<_MAX
Inc _TOP : Inc _BOTTOM
End If
End If
Gosub _UPDATE
Multi Wait
Until Mouse Key<>1
End If
While Mouse Key=1 : Multi Wait : Wend
If MZ<=8 and MZ>=3 : Gosub GADGET : End If
If MZ=Mouse Zone-_STZON
If MZ=8
PATH$="" : FIL$="" : Gosub _QUIT
End If
If MZ=7 : Gosub _PARENT : End If
If MZ=6
Gosub _GETDEVS
Gosub _UPDATE
Gosub _UPDATE2
End If
If MZ=5
Gosub _SHUTDOWN
If PATH$="" or FIL$="" : Pop Proc[""]
Else PATH$=PATH$+FIL$ : Pop Proc[PATH$]
End If
End If
If MZ=9
Gosub _WRITE
If ED$=""
Gosub _GETDEVS
Else
If Exist(ED$)
PATH$=ED$
If Right$(PATH$,1)<>"/" and Right$(PATH$,1)<>":"
PATH$=PATH$+"/"
End If
Gosub _GETDIR
End If
End If
Gosub _UPDATE2 : Gosub _UPDATE
End If
If MZ=10 : Gosub _WRITE : Gosub _UPDATE2 : End If
End If
Multi Wait
End If
Loop
_WRITE:
If MZ=10 : ED$=FIL$ : L=31 : End If
If MZ=9 : ED$=PATH$ : L=33 : End If
Repeat
I$="" : Ink 0,BLACK
OUT$=ED$
If Len(OUT$)=>L Then OUT$=Right$(ED$,L)
If MZ=9 Then PY=135 Else PY=155
Ink BLACK,0 : Text 20+X,PY+Y,OUT$+Space$(L-Len(OUT$)+1)
Ink 0,BLACK : Text 20+X+(Len(OUT$)*8),PY+Y," "
While I$="" : I$=Inkey$ : Multi Wait
If Mouse Key=1 Then Return
Wend
If I$=Chr$(8)
ED$=Left$(ED$,(Len(ED$)-1))
End If
If MZ=9
If I$=Chr$(13) or Asc(I$)<32
Else
ED$=ED$+I$
End If
End If
If MZ=10
If I$=Chr$(13) or Asc(I$)<32 or I$="/" or I$=":"
Else
ED$=ED$+I$
End If
End If
Multi Wait
Until I$=Chr$(13)
If MZ=10 : FIL$=ED$ : End If
Return
_PARENT:
If Len(PATH$)=0 Then Return
For T=(Len(PATH$)-1) To 0 Step -1
If Mid$(PATH$,T,1)="/" or Mid$(PATH$,T,1)=":"
PATH$=Left$(PATH$,T)
Exit
End If
Next
If T=-1 Then PATH$="" : Gosub _GETDEVS Else Gosub _GETDIR
FIL$=""
Gosub _UPDATE
Gosub _UPDATE2
Return
_FILES:
OCR=-1
Repeat
CR=Y Screen(Y Mouse)/8-(Y/8)-2
If OCR<>CR and OCR=>0 and OCR<=12 and OCR<=_MAX-1
Ink BLACK,0 : Text 20+X,(OCR*8)+20+Y,OUT$(OCR+_TOP)
End If
If OCR<>CR and CR=>0 and CR<=12 and CR<=_MAX-1
Ink 0,BLACK : Text 20+X,(CR*8)+20+Y,OUT$(CR+_TOP)
End If
OCR=CR
If Mouse Key=1
CHOSED=CR+_TOP
If CHOSED<_MAX
If LIST=1
PATH$=DEV$(CHOSED)
Gosub _GETDIR
Gosub _UPDATE
Gosub _UPDATE2
LIST=2
Else
If FILES(CHOSED)=2
FIL$=FILE$(CHOSED)
Gosub _UPDATE2
End If
If FILES(CHOSED)=1
PATH$=PATH$+FILE$(CHOSED)+"/"
Gosub _GETDIR
Gosub _UPDATE
Gosub _UPDATE2
End If
End If
End If
End If
Multi Wait
Until Mouse Zone-_STZON<>1
If OCR=>0 and OCR<=12 and OCR<=_MAX-1
Ink BLACK,0 : Text 20+X,(OCR*8)+20+Y,OUT$(OCR+_TOP)
End If
Return
_GETDIR:
Set Dir 30,_HIDE$ : Flash LAMP,"(F00,1)(ff0,1)(888,1)"
NR=0
F$=Dir First$(PATH$)
Repeat
OUT$(NR)=F$
If Left$(OUT$(NR),1)="*"
OUT$(NR)=Mid$(OUT$(NR),2)
Gosub _NOSPACE
FILE$(NR)=OUT$(NR)
OUT$(NR)=OUT$(NR)+Space$(26-Len(OUT$(NR)))+"(Drawer)"
FILES(NR)=1
Else
OUT$(NR)=Mid$(OUT$(NR),1)
SIZE$=Right$(OUT$(NR),8)-" "
OUT$(NR)=Mid$(Left$(OUT$(NR),Len(OUT$(NR))-8),2)
Gosub _NOSPACE
FILE$(NR)=OUT$(NR)
OUT$(NR)=OUT$(NR)+Space$(34-(Len(OUT$(NR))+Len(SIZE$)))+SIZE$
FILES(NR)=2
End If
F$=Dir Next$
Inc NR
Multi Wait
Until F$=""
_MAX=NR : _TOP=0
If _MAX>12
_BOTTOM=12
Else
_BOTTOM=_MAX-1
End If
Flash Off : Colour LAMP,Colour(0)
Ink 0 : Bar 17+X,11+Y To 298+X,119+Y
Return
_NOSPACE:
For S=Len(OUT$(NR)) To 1 Step -1
If Mid$(OUT$(NR),S,1)<>" "
Exit
End If
Next S
OUT$(NR)=Left$(OUT$(NR),S)
Return
_GETDEVS:
PATH$="" : FIL$=""
Flash LAMP,"(F00,1)(ff0,1)(888,1)" : NR=0
TS$=Dev First$("Dev:")
While TS$<>""
TS$=Mid$(TS$-" ",1)
If Exist(TS$)
DEV$(NR)=TS$
DI$=Disc Info$(TS$)
VOL$=Left$(DI$,Instr(DI$,":"))
FRE$=DI$-VOL$-" " : VOL$=Left$(VOL$,23)
OUT$(NR)=TS$+Space$(1)+VOL$+Space$(20-Len(VOL$))+Space$(9-Len(FRE$))+FRE$
Inc NR
End If
TS$=Dev Next$
Wend
TS$=Dev First$("Ass:")
While TS$<>""
DEV$(NR)=Mid$(TS$-" ",1)
OUT$(NR)=DEV$(NR)
Gosub _NOSPACE
OUT$(NR)=OUT$(NR)+Space$(28-Len(OUT$(NR)))+"Assign"
Inc NR
TS$=Dev Next$
Wend
_MAX=NR : _TOP=0
If _MAX>10 Then _BOTTOM=12 Else _BOTTOM=_MAX-1
LIST=1
Flash Off : Colour LAMP,Colour(0)
Ink 0 : Bar 17+X,11+Y To 298+X,119+Y
Return
_UPDATE:
Ink BLACK,0
For T=_TOP To _BOTTOM
Text 20+X,(YP*8)+20+Y,OUT$(T)
Inc YP
Next
Vslider 307+X,11+Y To 318+X,99+Y,_MAX,_TOP,13
YP=0
Return
_UPDATE2:
Ink BLACK,0
Text 20+X,135+Y,Space$(34)
Text 20+X,155+Y,Space$(32)
Text 20+X,135+Y,Right$(PATH$,34)
Text 20+X,155+Y,Right$(FIL$,32)
Return
RITA:
For T=1 To 14
Read X1,Y1,X2,Y2
Add X1,X : Add X2,X : Add Y1,Y : Add Y2,Y
If T<=10 Then Set Zone _STZON+T,X1,Y1 To X2,Y2
If T=12 Then Swap BLACK,WHITE
If T=>2 and T=<8 Then X1(T)=X1 : Y1(T)=Y1 : X2(T)=X2 : Y2(T)=Y2
Gosub GADGET
Next
Swap BLACK,WHITE
Ink BLACK,0 : Text 40+X,175+Y,"OK"
Text 100+X,175+Y,"Volumes" : Text 188+X,175+Y,"Parent"
Text 270+X,175+Y,"Cancel"
Polygon 309+X,113+Y To 317+X,113+Y To 313+X,117+Y
Polygon 309+X,108+Y To 317+X,108+Y To 313+X,104+Y
Ink LAMP : Bar 292+X,151+Y To 318+X,154+Y
Data 12,10,300,120,305,10,320,100,305,101,320,110,305,111,320,120
Data 12,165,84,180,94,165,166,180,176,165,248,180,258,165,330,180
Data 12,125,300,140,12,145,280,160,4,0,339,191
Data 290,150,320,155,14,126,298,139,14,146,278,159
Return
MALFUNCTION:
Restore Errn+0 : Read MESS$
If Errn=25 or Errn=92
_MESSAGE[MESS$,0]
Resume _QUIT
Else
_MESSAGE[MESS$,1]
Window 1
If Param=1
Resume
Else
Resume _QUIT
End If
End If
25 Data "Out of memory! Close something and retry"
83 Data "Disc Not Validated, retry?"
86 Data "Volume '"+PATH$+"' Is Not Available, retry?"
92 Data "Thats Not An AmigaDos Disk!"
93 Data "There Is No Disk In The Drive, retry?"
94 Data "I/O Error, retry?"
GADGET:
Ink WHITE : Box X1,Y1 To X2,Y2
Draw X1+1,Y1+1 To X1+1,Y2-1
Ink BLACK : Polyline X1+1,Y2 To X2,Y2 To X2,Y1
Draw X2-1,Y1+1 To X2-1,Y2-1
Return
_SHUTDOWN:
Wind Close
Return
_QUIT:
Wind Close
Pop Proc[""]
Return
End Proc[PATH$]
Procedure _MESSAGE[TXT$,_ASK]
Menu Off
XB=(Len(TXT$)+6)/2*2 : X=((640-XB*8)/2)/16*16
Y1=140 : Y2=150 : BLACK=1 : WHITE=11
Y=5 : If _ASK=1 Then Y=7
Ink 1,0
Wind Save : Wind Open 3,X,110,XB,Y,2
Curs Off : Border 2,0,1
Ink WHITE : Polyline X+8,109+Y*8 To X+8,110 To X+6+(XB*8),110
Draw X+9,108+Y*8 To X+9,110
Pen 1 : Paper 0 : Clw : Locate 1,1 : Print TXT$
If _ASK=0
While Mouse Key=0 : Multi Wait : Wend
Wind Close
Menu On : Pop Proc
Else
Ink 1,0
Text 275,148,"Yes No"
X1=265 : X2=310 : Gosub GADGET
Set Zone 16,X1,Y1 To X2,Y2
X1=330 : X2=370 : Gosub GADGET
Set Zone 15,X1,Y1 To X2,Y2
Repeat
While Mouse Key=0 : Multi Wait : Wend
MZ=Mouse Zone
If MZ=>15 and MZ<=16
Swap BLACK,WHITE
If MZ=15
X1=330 : X2=370 : SVAR=0 : Gosub GADGET
End If
If MZ=16
X1=265 : X2=310 : SVAR=1 : Gosub GADGET
End If
While Mouse Key=1 : Multi Wait : Wend
Swap BLACK,WHITE : Gosub GADGET
End If
Multi Wait
Until Mouse Zone=MZ and MZ=>15 and MZ<=16
Wind Close
Menu On
Pop Proc[SVAR]
End If
GADGET:
Ink WHITE
Box X1,Y1 To X2,Y2
Draw X1+1,Y1+1 To X1+1,Y2-1
Ink BLACK
Polyline X1+1,Y2 To X2,Y2 To X2,Y1
Draw X2-1,Y1+1 To X2-1,Y2-1
Return
End Proc