"prgm"[2300]→Str0 . E23 is the hash character
"[0123456789ABCDEF]"[]→Str1 . the brackets suppress the null byte, saving you one byte
Copy(Str1,GetCalc(Str0,18),18)
.EXPORT
!If H-3
If D=51 or (D=15)
0->A->B->D->HEnd
!If D-52
->A->B->D
2->H
6->GEnd
!If D-53
->A->B->D
1->HEnd
!If D-1
A<9+A->AEnd
!If D-4
A-(A>0)->AEnd
If D=3 or (D=2)
If A/5
A-5->AElse
A+5->AEnd
End
Lbl EXD
ClrDraw
7:While ->L+1
7:While ->M+1
!If M>1 and (M<7)
0->T
Else
768-(A/5*320)->T
End
Pt-On(L*8,M*8,M*8+L*8-T+Pic6
M-1:End
L-1:End
Pt-On(7,A^5*6+23,Pic8
StorePic
If H>3
Return
End
!If D-54
5->H
If A>4 and (A<7) or (A<4)
For(L,1,10
0->{L+L1}End
If A<4
21->{L1}
Else
5->{L1}
End
0->U->D->B
4->H
!If A*(A-5)
If {L2}-95
Copy(L2,L1+1,8
length(L1+1)->U
!If A-5
!If U-8
83->{L1+8}
Else
83->{L1+U+1}
U++
End:End
End:End
!If A-1*(A-6)
If {L2+10}-95
Copy(L2+10,L1+1,8
length(L1+1)->U
!If A-6
!If U-8
77->{L1+8}
Else
77->{L1+U+1}
U++
End:End
End:End
End
!If A-4
6->H
End
If A<10 and (A>6)
6->HEnd
End
End
.MAP EDIT
!If H-2
!If D-51
3->HEnd
If D=52 or (D=15)
0->H->DEnd
!If D-53
1->HEnd
If G<5
If getKey(48)
If getKey(3)
P<128+P->PEnd
If getKey(2)
P-(P>8)->PEnd
N-(N+8>P)->N
If getKey(1)
Q<128+Q->QEnd
If getKey(4)
Q-(Q>8)->Q
O-(O+8>Q)->OEnd
6->GEnd
End
If D
If D-1<4
!If D-3
N+8<P*(A=7)+N->N
A<7+A->AEnd
!If D-2
N-(N>0*(A=0))->N
A-(A>0)->AEnd
!If D-1
O+8<Q*(B=7)+O->O
B<7+B->BEnd
!If D-4
O-(O>0*(B=0))->O
B-(B>0)->BEnd
6->GElse
O+B*128+N+A+Y->T
.SELECT BY MAP
!If D-40
{T}->E
8->GEnd
!If D-54
.ADD TO UNDO STACK
If {L1+20}
{L1+20}+1
While -1->L
{L-1*3+L1+21}->{L*3+L1+21}
{L-1*3+L1+22}^^r->{L*3+L1+22}^^r
L:End:End
{T}->{L1+21}
T->{L1+22}^^r
{L1+20}+({L1+20}<128)->{L1+20}
E->{T}End
.UNDO
!If D-55
If {L1+20}
{L1+21}->{{L1+22}^^r}
Copy(L1+24,L1+21,384
{L1+20}-1->{L1+20}
End:End
End:End
.DRAW
7:While ->L+1
7:While ->M+1
O+M*128+L+N+Y->T
If {T}<=F
Pt-Off(L*8,M*8,{T}*8+Z
Pt-Off(L*8,M*8,{T}*8+Z+2048)^^r
Else
Pt-Off(L*8,M*8,Z
Pt-Off(L*8,M*8,Z+2048)^^r
End
M-1:End
L-1:End
If G
If getKey(48)
Rect(0,0,64,14
RectI(1,0,62,13
Rect(0,0,64,14)^^r
RectI(1,0,62,13)^^r
N>10*4+(N>100*4)->T
O>10*4+(O>100*4)->U
N+7>9*4+(N+7>99*4)->V
O+7>9*4+(O+7>99*4)->W
Text(2,0,"X:"
Text(2,6,"Y:"
Text(9,0,N>Dec
Text(9,6,O>Dec
Text(T+13,0,"-"
Text(U+13,6,"-"
Text(T+17,0,N+7>Dec
Text(U+17,6,O+7>Dec
Text(T+V+21,0,"/"
Text(U+W+21,6,"/"
Text(T+V+25,0,P>Dec
Text(U+W+25,6,Q>Dec
Else
Pt-Change(A*8,B*8,Pic4
End
Else
0->T
End
Else
.SET EDIT
!If H-1
If D=53 or (D=15)
0->H->DEnd
!If D-52
2->H
6->GEnd
!If D-51
3->HEnd
If D
If D-1<4
!If D-3
A<7+A->AEnd
!If D-2
A-(A>0)->AEnd
!If D-1
B<7+B->BEnd
!If D-4
B-(B>0)->BEnd
Else
!If D-56
Fill(E*8+Z,8,0)
Fill(E*8+Z+2048,8,0)
End
.NUM COMMANDS
If D>17 and (D<37)
E*8+Z->T+2048->S
!If D-36
Copy(rotCC(T),T,8
Copy(rotCC(S),S,8
End
!If D-28
Copy(T+1,L1,7
{T}->{T+7}
Copy(L1,T,7
Copy(S+1,L1,7
{S}->{S+7}
Copy(L1,S,7
End
!If D-20
Copy(rotC(T),T,8
Copy(rotC(S),S,8
End
!If D-35
For(L,0,7
{T+L}*2+(/256)->{T+L}
{S+L}*2+(/256)->{S+L}
End:End
!If D-27
For(L,0,7
{T+L} xor 255->{T+L}
{S+L} xor 255->{S+L}
End:End
!If D-19
For(L,0,7
{T+L}*257/2^256->{T+L}
{S+L}*257/2^256->{S+L}
End:End
!If D-34
Copy(flipH(T),T,8
Copy(flipH(S),S,8
End
!If D-26
Copy(T,L1,7
{T+7}->{T}
Copy(L1,T+1,7
Copy(S,L1,7
{S+7}->{S}
Copy(L1,S+1,7
End
!If D-18
Copy(flipV(T),T,8
Copy(flipV(S),S,8
End
If E>F
E->FEnd
End
End:End
.ANIMATION
If {L2+400}
!If D-32
->{L2+400}
8->G
End
!If G
2->G
E++
If E>F
-1->EEnd
End
Else
!If D-32
+1->{L2+400}
0->E+1->G
End:End
If D
.COPY/PASTE
!If D-40
Copy(E*8+Z,L5,8
Copy(E*8+Z+2048,L5+8,8
End
!If D-48
Copy(L5,E*8+Z,8
Copy(L5+8,E*8+Z+2048,8
If E>F
E->FEnd
End
!If D-47
7:While ->L+1
{E*8+Z+L} or {L+L5}->{E*8+Z+L}
{E*8+Z+L+2048} or {L+L5+8}->{E*8+Z+L+2048}
L-1:End
If E>F
E->FEnd
End
!If D-46
7:While ->L+1
{E*8+Z+L} xor {L+L5}->{E*8+Z+L}
{E*8+Z+L+2048} xor {L+L5+8}->{E*8+Z+L+2048}
L-1:End
If E>F
E->FEnd
End
If (D=54)+(D=55)
E*8+B+Z->T
!If D-55
T+2048->T
End
If {T}[e]A
{T}-e^((7-A))->{T}Else
{T}+e^((7-A))->{T}End
If E>F
E->FEnd
End
End
7:While ->L+1
7:While ->M+1
Pt-On(L*8,M*8,C/4*8+Pic3
M-1:End
L-1:End
StorePic
7:While ->L+1
7:While ->M+1
If {E*8+M+Z}[e]L
Pt-On(L*8,M*8,Pic2
End
If {E*8+M+Z+2048}[e]L
Pt-On(L*8,M*8,Pic2)^^r
End
M-1:End
L-1:End
Pt-Change(A*8,B*8,Pic1
Pt-Change(A*8,B*8,Pic1)^^r
End:End
.INFO
!If H
!If D-53
1->HEnd
!If D-52
2->H
6->GEnd
!If D-51
3->HEnd
If D
If D-1<4
8->G
!If D-3
E^4<3+E->EEnd
!If D-2
E-(E^4>0)->EEnd
!If D-1
E<252*4+E->EEnd
!If D-4
E-(E>3*4)->EEnd
End
.COPY/PASTE
!If D-40
Copy(E*8+Z,L5,8
End
!If D-48
Copy(L5,E*8+Z,8
If E>F
E->FEnd
End
!If D-47
7:While ->L+1
{E*8+Z+L} or {L+L5}->{E*8+Z+L}
L-1:End
If E>F
E->FEnd
End
!If D-46
7:While ->L+1
{E*8+Z+L} xor {L+L5}->{E*8+Z+L}
L-1:End
If E>F
E->FEnd
End
!If D-54
E->FEnd
End
ClrDraw
Text(30,19,L2
Text(30,25,(E+1)>Dec
Text(46,25,(F+1)>Dec
Text(30,33,L2+10
Text(30,39,N>Dec
Text(46,39,P>Dec
Text(30,45,O>Dec
Text(46,45,Q>Dec
7:While ->L+1
7:While ->M+1
Pt-On(L*8,M*8,M*8+L*8+Pic6
M-1:End
L-1:End
StorePic
End
32:While ->L+1
Pt-On(L^4*8+64,L/4*8,C/6*8+Pic5
L-1:End
!If E/32>(F/32)
!If E/32-(F/32)
F^32->TElse
32->TEnd
E/32*256+Z->S
T:While ->L+1
Pt-Off(L^4*8+64,L/4*8,L*8+S
Pt-Off(L^4*8+64,L/4*8,L*8+S+2048)^^r
L-1:End
End
If G
Pt-Change(E^32^4*8+64,E^32/4*8,Pic4
G--
End
If D-15
!If R-2
DispGraph^^r^^r
Else!If R
DispGraph
Else
DispGraph^^r
End
End
C++
!If C-12
->CEnd
End
If GetCalc(Str3,16)->theta
Copy(L2,theta,8)
Copy(L2+10,theta+8,8)
End
DelVar Str1
DelVar Str2
Return
.TO STRING
Lbl STR
nib{r1+L*2}->T
T>9*7+48+T->{L*2+theta}
nib{r1+L*2+1}->T
T>9*7+48+T->{L*2+theta+1}
Return
.DRAW PROG BAR
Lbl BAR
sub(EXD)
For(M,0,r1
Pt-On(M+3,54,Pic9
End
DispGraph
Return
.EXP ERROR
Lbl ERR
Rect(19,33,25,9
RectI(20,34,23,7
Text(21,34,"ERROR!"
!If D
->UEnd
!If U
If D
3->HEnd
End
Return
or if you run into any bugs, let me know =) there are a bunch of obvious changes, like not clearing/redrawing the screen every single time and moving the portions in the "if H-n" statements into subroutines, but things like that would require massive rewrites and restructuring, which i'm not really up to right now :PWow this looks very great O.O Can it be ran from archive entirely?Yep, it can read data appvars from archive, and I think it always saves to the archive. The program itself is an app.