home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1993-02-25 | 10.3 KB | 349 lines |
- 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$=" Bon voila je commence un nouvel Editeur de texte . Eh bien ! Esperons que ce ne sera pas une nullite !!!! Auteur : Francois merlin alias mr Dos "
- 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","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
- 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