home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
451-475
/
apd459
/
anthraxed.amos
/
anthraxed.amosSourceCode
Wrap
AMOS Source Code
|
1994-01-01
|
11KB
|
357 lines
'Great little program this!
'total amos power!
'
Set Buffer 100
NC=31
Dim TB$(NC),FX(NC),A$(999),C$(15),C(15),B$(9)
INIT : Set Tab 8
Do
Clear Key : A$="" : Repeat : Multi Wait : A$=Inkey$ : Until A$<>""
A=Scancode : B=Key Shift and 251
If A=95 Then B$=A$(Y) : IMP[Y,B$] : X=0 : Locate 0,Y : COOR
If A=65 and B=0 Then DEL[1]
If A=65 and(B and 3) Then B$="" : DEL[0]
If A=70 Then DEL[0]
If A=68 Then VAID
If A=79 and B=0 Then LEFT
If A=78 and B=0 Then RIGHT
If A=79 and(B and 3) Then X=0 : Locate 0,Y : COOR
If A=78 and(B and 3) Then X=Len(B$) : POS[X,B$] : Locate Param,Y : COOR
If A=76 and(B and 8) Then POSA[0,0]
If A=77 and(B and 8) Then POSA[0,MX]
If A=77 Then ENBAS
If A=76 Then ENHAUT
B=Asc(A$) : If B=9 or(B>31 and B<128) Then WRITE
Loop
Procedure POSA[A,B]
Shared A$(),Y,SCR,X,MX,B$
A$(Y+SCR)=B$
If B=<14 Then SCR=0 : Y=B Else SCR=B-14 : Y=14
If SCR<0 Then Y=B : SCR=0
PRES[SCR] : B$=A$(Y+SCR)
POS[A,B$] : Locate Param,Y : X=A : SLID : COOR
End Proc
Procedure ABOUT
MSG["About ..."]
Screen Open 1,336,40,2,0 : Screen Hide 1
Screen Display 1,128,150,320,1
Paper 0 : Cls
Flash Off : Curs Off
Print : Centre "Anthrax Editor vs 1.0"
A$=" THIS BRILLIANT TEXT EDITOR WAS WRITTEN Francois merlin alias mr Dos! /For pic n mix 93 "
Def Scroll 1,0,24 To 336,32,-1,0
Screen Show 1 : For I=1 To 20 : Screen Display 1,128,150-I,320,I*2 : Wait Vbl : Next : T=1
Repeat
For I=0 To 7 : Scroll 1 : Wait Vbl : Next
Print At(40,3);Mid$(A$,T,1);
Add T,1,1 To Len(A$)
Until Mouse Click
For I=20 To 1 Step -1 : Screen Display 1,128,150-I,320,I*2 : Wait Vbl : Next
Screen Close 1
End Proc
Procedure PRES[SCR]
Shared X,Y,A$(),B$,MX
D=29 : If D+SCR>MX Then D=MX-SCR
For I=0 To D : IMP[I,A$(I+SCR)] : Next
End Proc
Procedure INIT
Shared TB$(),FX(),NC,MX,X,Y
Screen Open 0,640,256,4,Hires
Screen Display 0,128,40,320,256
Paper 1 : Cls : Pen 2 : Curs Pen 3
Flash Off : Colour 0,0 : Colour 1,2 : Colour 2,$888 : Colour 3,$80
MX=0 : Home : Limit Mouse 128,40 To 448,296
Wind Open 1,16,11,78,30 : PRES[0] : X=0 : Y=0 : Locate X,Y : BR
Gr Writing 1 : Vslider 0,11 To 14,255,1,0,240 : Set Pattern 0 : Gr Writing 0
Read A$ : Repeat
Inc A : Menu$(A)=A$ : Read C,A$ : B=1
Repeat
If A$<>"" Then Menu$(A,B)=A$+Space$(C-Len(A$)) Else Menu$(A,B)=String$("-",C) : Menu Inactive(A,B)
Read A$ : Inc B : Until A$="FIN"
Read A$ : Until A$="FIN" : Menu On : On Menu Proc MENU,MENU : On Menu On
Data "Project ",9,"About","","Clear","Load","Save","Save As","Quit","FIN"
Data "Search ",9,"Find","Find Next","Find Top","FIN"
Data "FIN"
End Proc
Procedure MENU
A=Choice(1) : B=Choice(2)
If A=1 Then On B Proc ABOUT,RIEN,CLEAR,XLOAD,XSAVE,XSAVEAS,QUIT
If A=2 Then On B Proc FIND,FINDN,FINDT
On Menu On
End Proc
Procedure RIEN
End Proc
Procedure CLEAR
Shared MX,SCR,Y,X,A$(),B$
MX=0 : Y=0 : SCR=0 : X=0 : Clw : B$="" : MSG["Cleared."]
End Proc
Procedure DEL[V]
Shared X,B$,A$(),Y,MX,SCR
If V
If X>0
B$=Left$(B$,X-1)+Mid$(B$,X+1) : Dec X : IMP[Y,B$+" "] : POS[X,B$] : Locate Param, : COOR : Pop Proc
End If : Gosub DEL : PREVLINE : COOR : Pop Proc
DEL:
If B$<>""
Pop Proc
End If
SCR : B$=A$(Y+SCR)
Clw : PRES[SCR] : SLID : Return
End If
If B$<>""
B$=Left$(B$,X)+Mid$(B$,X+2) : IMP[Y,B$+" "] : POS[X,B$] : Locate Param,Y : COOR : Pop Proc
End If
Gosub DEL : X=0 : Locate 0,Y : COOR
End Proc
Procedure SCR
Shared A$(),Y,MX,SCR
If MX=0 Then A$(0)="" : Pop Proc
For I=Y+SCR To MX
A$(I)=A$(I+1)
Next : A$(I)="" : Dec MX
End Proc
Procedure PREVLINE
Shared Y,B$,X,SCR
If Y+SCR=0 Then Pop Proc
ENHAUT
X=Len(B$) : POS[X,B$]
Locate Param,Y
End Proc
Procedure VAID
Shared A$(),B$,X,Y,MX,SCR
A$(Y+SCR)=Left$(B$,X)
IMP[Y,A$(Y+SCR)+Chr$(0)]
If Y=29 Then Inc SCR Else Inc Y
Inc MX
If Y+SCR<MX
Locate 0,Y : Vscroll 1
For I=MX To Y+SCR Step -1
A$(I)=A$(I-1)
Next
End If
A$(Y+SCR)=Mid$(B$,X+1) : B$=A$(Y+SCR) : X=0
IMP[Y,B$] : Locate 0,Y : COOR : SLID
End Proc
Procedure LEFT
Shared X,B$
If X=0 Then PREVLINE : COOR : Pop Proc
If Mid$(B$,X,1)=Chr$(9) Then POS[X-1,B$] : Locate Param, Else Cleft
Dec X : COOR
End Proc
Procedure RIGHT
Shared X,B$
If X=Len(B$) Then NXTLINE : COOR : Pop Proc
If Mid$(B$,X+1,1)=Chr$(9) Then Locate(X Curs/8)*8+8, Else Cright
Inc X : COOR
End Proc
Procedure NXTLINE
Shared X,Y,SCR,MX
If Y+SCR=MX Then Pop Proc
X=0 : ENBAS
End Proc
Procedure ENBAS
Shared X,Y,B$,A$(),MX,SCR,B
If Y+SCR=MX Then Pop Proc
If B and 3 Then PGD : Pop Proc
A$(Y+SCR)=B$
If Y=29 Then Vscroll 3 : Inc SCR : IMP[29,A$(Y+SCR)] Else Inc Y
POS[X,B$]
B$=A$(Y+SCR)
POS2[Param,B$] : X=Param : If X>Len(B$) Then X=Len(B$)
POS[X,B$]
Locate Param,Y : COOR : SLID
End Proc
Procedure SLID
Shared MX,SCR,Y
Gr Writing 1
Vslider 0,11 To 14,255,MX+28,SCR+Y,29
Gr Writing 0 : Set Pattern 0
End Proc
Procedure PGD
Shared X,Y,B$,A$(),MX,SCR
A$(Y+SCR)=B$
If Y+SCR+28>=MX Then SCR=MX-29 : Y=0
SCR=SCR+Y : Y=29 : PRES[SCR]
POS[X,B$]
B$=A$(Y+SCR)
POS2[Param,B$] : X=Param : If X>Len(B$) Then X=Len(B$)
POS[X,B$]
Locate Param,Y : COOR : SLID
End Proc
Procedure PGU
Shared X,Y,B$,A$(),MX,SCR
A$(Y+SCR)=B$
If Y+SCR-29<=0 Then SCR=0 : Y=29
SCR=SCR-29+Y : Y=0 : PRES[SCR]
POS[X,B$]
B$=A$(Y+SCR)
POS2[Param,B$] : X=Param : If X>Len(B$) Then X=Len(B$)
POS[X,B$]
Locate Param,Y : COOR : SLID
End Proc
Procedure ENHAUT
Shared X,Y,B$,A$(),SCR,B
If SCR+Y=0 Then Pop Proc
If B and 3 Then PGU : Pop Proc
A$(Y+SCR)=B$
If Y=0 Then Vscroll 1 : Dec SCR : IMP[0,A$(SCR)] Else Dec Y
POS[X,B$]
B$=A$(Y+SCR)
POS2[Param,B$] : X=Param : If X>Len(B$) Then X=Len(B$)
POS[X,B$]
Locate Param,Y : COOR : SLID
End Proc
Procedure POS[X,A$]
If X : For I=1 To X : If Mid$(A$,I,1)=Chr$(9) : J=(J/8)*8+7 : End If : Inc J : Next : End If
End Proc[J]
Procedure POS2[X,A$]
If X : Repeat : If Mid$(A$,I+1,1)=Chr$(9) : J=(J/8)*8+7 : End If : Inc I : Inc J : Until J>=X : End If
End Proc[I]
Procedure WRITE
Shared B$,X,Y,A$
If Len(B$)=79 Then Pop Proc
B$=Left$(B$,X)+A$+Mid$(B$,X+1)
Inc X : CX=X Curs
IMP[Y,B$]
If A$=Chr$(9) Then Locate(CX/8)*8+8, Else Locate CX+1,
COOR
End Proc
Procedure IMP[Y,B$]
Shared SCR
Locate 0,Y
Cline : Print Left$(B$,77);
End Proc
Procedure COOR
Shared SCR,MX,FLG
If FLG Then FLG=0 : BR
Ink 2 : Bar 450,0 To 640,9 : Ink 0
Text 450,7,"X:"+Str$(X Curs)+" Y:"+Str$(Y Curs+SCR)+" Mx:"+Str$(MX)
End Proc
Procedure ANTIVIRUS
A=Leek(4)
If Leek(A+42)<>0 Then A=1 : Goto ALERT
If Leek(A+46)<>0 Then A=2 : Goto ALERT
If Leek(A+546)<>0 Then A=3 : Goto ALERT
If Leek(A+550)<>0 Then A=4 : Goto ALERT
Every On : Pop Proc
ALERT:
Loke Leek(4)+42,0
Loke Leek(4)+46,0
Loke Leek(4)+546,0
Loke Leek(4)+550,0
Amos To Front
Screen Open 7,320,200,2,0
Paper 0 : Cls
Flash Off : Curs Off
Flash 1,"(FFF,30)(000,30)"
Flash 0,"(000,30)(f00,30)" : Pen 1
Home : Print "VIRUS FOUND TP"+Str$(A)
Print "PLEASE STOP WORK"
Zoom 7,0,0,128,16 To 7,0,16,320,184
Home : Print " " : Print " "
Clear Key : Wait Key : Screen Close 7 : Every On
End Proc
Procedure EXECUTE[A$]
If Intcall(-210)=0 Then Print "WorkBench Not Open" : Pop Proc
Amos To Back
A$=A$+Chr$(0) : B$="CON:0/0/640/200/Amos Basic"+Chr$(0)
Dreg(1)=Varptr(B$) : Dreg(2)=1005 : D=Doscall(-30)
If D=0 Then Print "Can't Open A Window" : Pop Proc
Dreg(1)=Varptr(A$) : Dreg(2)=D : Dreg(3)=D
A=Doscall(-222) : Dreg(1)=D : A=Doscall(-36) : Amos To Front
End Proc
Procedure XSAVE
Shared MX,A$(),FILE$,DR$
If FILE$="" Then XSAVEAS : Pop Proc
MSG["Saving ... "+FILE$]
Open Out 1,DR$+FILE$
For I=0 To MX-1
Print #1,A$(I)+Chr$(10);
Next
Close 1 : BR
End Proc
Procedure XSAVEAS
Shared MX,A$(),FILE$
SELECT["Save a File"] : A$=Param$ : If A$="" Then Pop Proc
MSG["Saving ... "+FILE$]
Open Out 1,A$
For I=0 To MX-1
Print #1,A$(I)+Chr$(10);
Next
Close 1 : BR
End Proc
Procedure XLOAD
Shared MX,A$(),X,Y,SCR,FILE$,B$
SELECT["Load a File"] : A$=Param$ : If A$="" Then Pop Proc
Set Input 10,-1 : Open In 1,A$ : Clw : MX=0
MSG["Loading ... "+FILE$]
B=Lof(1) : Close 1 : C$=Space$(B)
Bload A$,Varptr(C$) : PX=1
Repeat
AX=Instr(C$,Chr$(10),PX)
If AX Then A$(MX)=Mid$(C$,PX,AX-PX)
PX=AX+1 : Inc MX
Until PX>=B
X=0 : Y=0 : SCR=0
B$=A$(0) : PRES[0] : SLID : Home : BR
End Proc
Procedure SELECT[A$]
Shared FILE$,DR$
MSG["Select a File."] : A$=Fsel$(DR$,FILE$,A$)
If A$<>"" Then If Exist(A$)=0 Then A$=""
If A$="" Then MSG["Not Done."]
For I=Len(A$) To 1 Step -1
B$=Mid$(A$,I,1) : If B$=":" Then Exit
If B$="/" Then Exit
Next
FILE$=Mid$(A$,I+1)
DR$=Left$(A$,I) : If DR$<>"" Then Dir$=DR$
End Proc[A$]
Procedure FINDT
Shared A$(),MX,FIND$
REQUEST["Enter String To Search:"] : FIND$=Param$
If FIND$="" Then Pop Proc Else MSG["Searching ..."]
For I=0 To MX
A=Instr(A$(I),FIND$,1)
If A>0 Then POSA[A-1,I] : MSG["Found."] : Pop Proc
Next : MSG["Not Found."]
End Proc
Procedure FINDN
Shared A$(),MX,FIND$,X,Y,SCR
DB=X+2 : MSG["Searching ..."] : For I=Y+SCR To MX
A=Instr(A$(I),FIND$,DB) : DB=1
If A>0 Then POSA[A-1,I] : MSG["Found."] : Pop Proc
Next : MSG["Not Found."]
End Proc
Procedure FIND
Shared A$(),MX,FIND$,X,Y,SCR
REQUEST["Enter String To Search:"] : FIND$=Param$
If FIND$="" Then Pop Proc Else MSG["Searching ..."]
DB=X : For I=Y+SCR To MX
A=Instr(A$(I),FIND$,DB+1) : DB=0
If A>0 Then POSA[A-1,I] : MSG["Found."] : Pop Proc
Next : MSG["Not Found."]
End Proc
Procedure REQUEST[A$]
Ink 2 : Bar 0,0 To 640,9 : Ink 0 : Memorize X : Memorize Y
Text 2,7,A$ : Locate Len(A$),0 : Pen 0 : Paper 2
Wind Open 2,Len(A$)*8+8,1,79-Len(A$),1
Line Input "";A$ : Wind Close : Window 1 : Paper 1 : Pen 2
If A$="" Then MSG["Not Done."] Else BR
Remember X : Remember Y
End Proc[A$]
Procedure BR
Shared FILE$,FLG
Ink 2 : Bar 0,0 To 640,9 : Ink 0 : Gr Writing 0 : FLG=0
Text 2,7,"Anthrax Editor vs 1.0 by Junkie Source:"+FILE$ : COOR
End Proc
Procedure MSG[A$]
Shared FLG
Ink 2 : Bar 0,0 To 640,9 : Ink 0
Text 8,7,A$ : FLG=1
End Proc
Procedure QUIT
REQUEST["Are you sure Y/N ?"] : FIND$=Param$
If FIND$="Y" Then End
If FIND$="y" Then End
End Proc