home *** CD-ROM | disk | FTP | other *** search
/ 17 Bit Software 4: Phase Four / 17Bit_Phase_Four.iso / files / 3034.dms / 3034.adf / text_ed.AMOS / text_ed.amosSourceCode
Encoding:
AMOS Source Code  |  1993-02-25  |  10.3 KB  |  349 lines

  1. Set Buffer 100
  2. NC=31
  3. Dim TB$(NC),FX(NC),A$(999),C$(15),C(15),B$(9)
  4. INIT : Set Tab 8
  5. Do 
  6.    Clear Key : A$="" : Repeat : Multi Wait : A$=Inkey$ : Until A$<>""
  7.    A=Scancode : B=Key Shift and 251
  8.    If A=95 Then B$=A$(Y) : IMP[Y,B$] : X=0 : Locate 0,Y : COOR
  9.    If A=65 and B=0 Then DEL[1]
  10.    If A=65 and(B and 3) Then B$="" : DEL[0]
  11.    If A=70 Then DEL[0]
  12.    If A=68 Then VAID
  13.    If A=79 and B=0 Then LEFT
  14.    If A=78 and B=0 Then RIGHT
  15.    If A=79 and(B and 3) Then X=0 : Locate 0,Y : COOR
  16.    If A=78 and(B and 3) Then X=Len(B$) : POS[X,B$] : Locate Param,Y : COOR
  17.    If A=76 and(B and 8) Then POSA[0,0]
  18.    If A=77 and(B and 8) Then POSA[0,MX]
  19.    If A=77 Then ENBAS
  20.    If A=76 Then ENHAUT
  21.    B=Asc(A$) : If B=9 or(B>31 and B<128) Then WRITE
  22. Loop 
  23. Procedure POSA[A,B]
  24.    Shared A$(),Y,SCR,X,MX,B$
  25.    A$(Y+SCR)=B$
  26.    If B=<14 Then SCR=0 : Y=B Else SCR=B-14 : Y=14
  27.    If SCR<0 Then Y=B : SCR=0
  28.    PRES[SCR] : B$=A$(Y+SCR)
  29.    POS[A,B$] : Locate Param,Y : X=A : SLID : COOR
  30. End Proc
  31. Procedure ABOUT
  32.    MSG["About ..."]
  33.    Screen Open 1,336,40,2,0 : Screen Hide 1
  34.    Screen Display 1,128,150,320,1
  35.    Paper 0 : Cls 
  36.    Flash Off : Curs Off 
  37.    Print : Centre "Anthrax Editor vs 1.0"
  38.    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    "
  39.    Def Scroll 1,0,24 To 336,32,-1,0
  40.    Screen Show 1 : For I=1 To 20 : Screen Display 1,128,150-I,320,I*2 : Wait Vbl : Next : T=1
  41.    Repeat 
  42.       For I=0 To 7 : Scroll 1 : Wait Vbl : Next 
  43.       Print At(40,3);Mid$(A$,T,1);
  44.       Add T,1,1 To Len(A$)
  45.    Until Mouse Click
  46.    For I=20 To 1 Step -1 : Screen Display 1,128,150-I,320,I*2 : Wait Vbl : Next 
  47.    Screen Close 1
  48. End Proc
  49. Procedure PRES[SCR]
  50.    Shared X,Y,A$(),B$,MX
  51.    D=29 : If D+SCR>MX Then D=MX-SCR
  52.    For I=0 To D : IMP[I,A$(I+SCR)] : Next 
  53. End Proc
  54. Procedure INIT
  55.    Shared TB$(),FX(),NC,MX,X,Y
  56.    Screen Open 0,640,256,4,Hires
  57.    Screen Display 0,128,40,320,256
  58.    Paper 1 : Cls : Pen 2 : Curs Pen 3
  59.    Flash Off : Colour 0,0 : Colour 1,2 : Colour 2,$888 : Colour 3,$80
  60.    MX=0 : Home : Limit Mouse 128,40 To 448,296
  61.    Wind Open 1,16,11,78,30 : PRES[0] : X=0 : Y=0 : Locate X,Y : BR
  62.    Gr Writing 1 : Vslider 0,11 To 14,255,1,0,240 : Set Pattern 0 : Gr Writing 0
  63.    Read A$ : Repeat 
  64.       Inc A : Menu$(A)=A$ : Read C,A$ : B=1
  65.       Repeat 
  66.          If A$<>"" Then Menu$(A,B)=A$+Space$(C-Len(A$)) Else Menu$(A,B)=String$("-",C) : Menu Inactive(A,B)
  67.       Read A$ : Inc B : Until A$="FIN"
  68.    Read A$ : Until A$="FIN" : Menu On : On Menu Proc MENU,MENU : On Menu On 
  69.    Data "Project ",9,"About","","Clear","Load","Save","Save As","FIN"
  70.    Data "Search ",9,"Find","Find Next","Find Top","FIN"
  71.    Data "FIN"
  72. End Proc
  73. Procedure MENU
  74.    A=Choice(1) : B=Choice(2)
  75.    If A=1 Then On B Proc ABOUT,RIEN,CLEAR,XLOAD,XSAVE,XSAVEAS
  76.    If A=2 Then On B Proc FIND,FINDN,FINDT
  77.    On Menu On 
  78. End Proc
  79. Procedure RIEN
  80. End Proc
  81. Procedure CLEAR
  82.    Shared MX,SCR,Y,X,A$(),B$
  83.    MX=0 : Y=0 : SCR=0 : X=0 : Clw : B$="" : MSG["Cleared."]
  84. End Proc
  85. Procedure DEL[V]
  86.    Shared X,B$,A$(),Y,MX,SCR
  87.    If V
  88.       If X>0
  89.          B$=Left$(B$,X-1)+Mid$(B$,X+1) : Dec X : IMP[Y,B$+"        "] : POS[X,B$] : Locate Param, : COOR : Pop Proc
  90.       End If : Gosub DEL : PREVLINE : COOR : Pop Proc
  91.       DEL:
  92.       If B$<>""
  93.          Pop Proc
  94.       End If 
  95.       SCR : B$=A$(Y+SCR)
  96.       Clw : PRES[SCR] : SLID : Return 
  97.    End If 
  98.    If B$<>""
  99.       B$=Left$(B$,X)+Mid$(B$,X+2) : IMP[Y,B$+"        "] : POS[X,B$] : Locate Param,Y : COOR : Pop Proc
  100.    End If 
  101.    Gosub DEL : X=0 : Locate 0,Y : COOR
  102. End Proc
  103. Procedure SCR
  104.    Shared A$(),Y,MX,SCR
  105.    If MX=0 Then A$(0)="" : Pop Proc
  106.    For I=Y+SCR To MX
  107.       A$(I)=A$(I+1)
  108.    Next : A$(I)="" : Dec MX
  109. End Proc
  110. Procedure PREVLINE
  111.    Shared Y,B$,X,SCR
  112.    If Y+SCR=0 Then Pop Proc
  113.    ENHAUT
  114.    X=Len(B$) : POS[X,B$]
  115.    Locate Param,Y
  116. End Proc
  117. Procedure VAID
  118.    Shared A$(),B$,X,Y,MX,SCR
  119.    A$(Y+SCR)=Left$(B$,X)
  120.    IMP[Y,A$(Y+SCR)+Chr$(0)]
  121.    If Y=29 Then Inc SCR Else Inc Y
  122.    Inc MX
  123.    If Y+SCR<MX
  124.       Locate 0,Y : Vscroll 1
  125.       For I=MX To Y+SCR Step -1
  126.          A$(I)=A$(I-1)
  127.       Next 
  128.    End If 
  129.    A$(Y+SCR)=Mid$(B$,X+1) : B$=A$(Y+SCR) : X=0
  130.    IMP[Y,B$] : Locate 0,Y : COOR : SLID
  131. End Proc
  132. Procedure LEFT
  133.    Shared X,B$
  134.    If X=0 Then PREVLINE : COOR : Pop Proc
  135.    If Mid$(B$,X,1)=Chr$(9) Then POS[X-1,B$] : Locate Param, Else Cleft 
  136.    Dec X : COOR
  137. End Proc
  138. Procedure RIGHT
  139.    Shared X,B$
  140.    If X=Len(B$) Then NXTLINE : COOR : Pop Proc
  141.    If Mid$(B$,X+1,1)=Chr$(9) Then Locate(X Curs/8)*8+8, Else Cright 
  142.    Inc X : COOR
  143. End Proc
  144. Procedure NXTLINE
  145.    Shared X,Y,SCR,MX
  146.    If Y+SCR=MX Then Pop Proc
  147.    X=0 : ENBAS
  148. End Proc
  149. Procedure ENBAS
  150.    Shared X,Y,B$,A$(),MX,SCR,B
  151.    If Y+SCR=MX Then Pop Proc
  152.    If B and 3 Then PGD : Pop Proc
  153.    A$(Y+SCR)=B$
  154.    If Y=29 Then Vscroll 3 : Inc SCR : IMP[29,A$(Y+SCR)] Else Inc Y
  155.    POS[X,B$]
  156.    B$=A$(Y+SCR)
  157.    POS2[Param,B$] : X=Param : If X>Len(B$) Then X=Len(B$)
  158.    POS[X,B$]
  159.    Locate Param,Y : COOR : SLID
  160. End Proc
  161. Procedure SLID
  162.    Shared MX,SCR,Y
  163.    Gr Writing 1
  164.    Vslider 0,11 To 14,255,MX+28,SCR+Y,29
  165.    Gr Writing 0 : Set Pattern 0
  166. End Proc
  167. Procedure PGD
  168.    Shared X,Y,B$,A$(),MX,SCR
  169.    A$(Y+SCR)=B$
  170.    If Y+SCR+28>=MX Then SCR=MX-29 : Y=0
  171.    SCR=SCR+Y : Y=29 : PRES[SCR]
  172.    POS[X,B$]
  173.    B$=A$(Y+SCR)
  174.    POS2[Param,B$] : X=Param : If X>Len(B$) Then X=Len(B$)
  175.    POS[X,B$]
  176.    Locate Param,Y : COOR : SLID
  177. End Proc
  178. Procedure PGU
  179.    Shared X,Y,B$,A$(),MX,SCR
  180.    A$(Y+SCR)=B$
  181.    If Y+SCR-29<=0 Then SCR=0 : Y=29
  182.    SCR=SCR-29+Y : Y=0 : PRES[SCR]
  183.    POS[X,B$]
  184.    B$=A$(Y+SCR)
  185.    POS2[Param,B$] : X=Param : If X>Len(B$) Then X=Len(B$)
  186.    POS[X,B$]
  187.    Locate Param,Y : COOR : SLID
  188. End Proc
  189. Procedure ENHAUT
  190.    Shared X,Y,B$,A$(),SCR,B
  191.    If SCR+Y=0 Then Pop Proc
  192.    If B and 3 Then PGU : Pop Proc
  193.    A$(Y+SCR)=B$
  194.    If Y=0 Then Vscroll 1 : Dec SCR : IMP[0,A$(SCR)] Else Dec Y
  195.    POS[X,B$]
  196.    B$=A$(Y+SCR)
  197.    POS2[Param,B$] : X=Param : If X>Len(B$) Then X=Len(B$)
  198.    POS[X,B$]
  199.    Locate Param,Y : COOR : SLID
  200. End Proc
  201. Procedure POS[X,A$]
  202.    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 
  203. End Proc[J]
  204. Procedure POS2[X,A$]
  205.    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 
  206. End Proc[I]
  207. Procedure WRITE
  208.    Shared B$,X,Y,A$
  209.    If Len(B$)=79 Then Pop Proc
  210.    B$=Left$(B$,X)+A$+Mid$(B$,X+1)
  211.    Inc X : CX=X Curs
  212.    IMP[Y,B$]
  213.    If A$=Chr$(9) Then Locate(CX/8)*8+8, Else Locate CX+1,
  214.    COOR
  215. End Proc
  216. Procedure IMP[Y,B$]
  217.    Shared SCR
  218.    Locate 0,Y
  219.    Cline : Print Left$(B$,77);
  220. End Proc
  221. Procedure COOR
  222.    Shared SCR,MX,FLG
  223.    If FLG Then FLG=0 : BR
  224.    Ink 2 : Bar 450,0 To 640,9 : Ink 0
  225.    Text 450,7,"X:"+Str$(X Curs)+" Y:"+Str$(Y Curs+SCR)+" Mx:"+Str$(MX)
  226. End Proc
  227. Procedure ANTIVIRUS
  228.    A=Leek(4)
  229.    If Leek(A+42)<>0 Then A=1 : Goto ALERT
  230.    If Leek(A+46)<>0 Then A=2 : Goto ALERT
  231.    If Leek(A+546)<>0 Then A=3 : Goto ALERT
  232.    If Leek(A+550)<>0 Then A=4 : Goto ALERT
  233.    Every On : Pop Proc
  234.    ALERT:
  235.    Loke Leek(4)+42,0
  236.    Loke Leek(4)+46,0
  237.    Loke Leek(4)+546,0
  238.    Loke Leek(4)+550,0
  239.    Amos To Front 
  240.    Screen Open 7,320,200,2,0
  241.    Paper 0 : Cls 
  242.    Flash Off : Curs Off 
  243.    Flash 1,"(FFF,30)(000,30)"
  244.    Flash 0,"(000,30)(f00,30)" : Pen 1
  245.    Home : Print "VIRUS FOUND TP"+Str$(A)
  246.    Print "PLEASE STOP WORK"
  247.    Zoom 7,0,0,128,16 To 7,0,16,320,184
  248.    Home : Print "                " : Print "                "
  249.    Clear Key : Wait Key : Screen Close 7 : Every On 
  250. End Proc
  251. Procedure EXECUTE[A$]
  252.    If Intcall(-210)=0 Then Print "WorkBench Not Open" : Pop Proc
  253.    Amos To Back 
  254.    A$=A$+Chr$(0) : B$="CON:0/0/640/200/Amos Basic"+Chr$(0)
  255.    Dreg(1)=Varptr(B$) : Dreg(2)=1005 : D=Doscall(-30)
  256.    If D=0 Then Print "Can't Open A Window" : Pop Proc
  257.    Dreg(1)=Varptr(A$) : Dreg(2)=D : Dreg(3)=D
  258.    A=Doscall(-222) : Dreg(1)=D : A=Doscall(-36) : Amos To Front 
  259. End Proc
  260. Procedure XSAVE
  261.    Shared MX,A$(),FILE$,DR$
  262.    If FILE$="" Then XSAVEAS : Pop Proc
  263.    MSG["Saving ... "+FILE$]
  264.    Open Out 1,DR$+FILE$
  265.    For I=0 To MX-1
  266.       Print #1,A$(I)+Chr$(10);
  267.    Next 
  268.    Close 1 : BR
  269. End Proc
  270. Procedure XSAVEAS
  271.    Shared MX,A$(),FILE$
  272.    SELECT["Save a File"] : A$=Param$ : If A$="" Then Pop Proc
  273.    MSG["Saving ... "+FILE$]
  274.    Open Out 1,A$
  275.    For I=0 To MX-1
  276.       Print #1,A$(I)+Chr$(10);
  277.    Next 
  278.    Close 1 : BR
  279. End Proc
  280. Procedure XLOAD
  281.    Shared MX,A$(),X,Y,SCR,FILE$,B$
  282.    SELECT["Load a File"] : A$=Param$ : If A$="" Then Pop Proc
  283.    Set Input 10,-1 : Open In 1,A$ : Clw : MX=0
  284.    MSG["Loading ... "+FILE$]
  285.    B=Lof(1) : Close 1 : C$=Space$(B)
  286.    Bload A$,Varptr(C$) : PX=1
  287.    Repeat 
  288.       AX=Instr(C$,Chr$(10),PX)
  289.       If AX Then A$(MX)=Mid$(C$,PX,AX-PX)
  290.       PX=AX+1 : Inc MX
  291.    Until PX>=B
  292.    X=0 : Y=0 : SCR=0
  293.    B$=A$(0) : PRES[0] : SLID : Home : BR
  294. End Proc
  295. Procedure SELECT[A$]
  296.    Shared FILE$,DR$
  297.    MSG["Select a File."] : A$=Fsel$(DR$,FILE$,A$)
  298.    If A$<>"" Then If Exist(A$)=0 Then A$=""
  299.    If A$="" Then MSG["Not Done."]
  300.    For I=Len(A$) To 1 Step -1
  301.       B$=Mid$(A$,I,1) : If B$=":" Then Exit 
  302.       If B$="/" Then Exit 
  303.    Next 
  304.    FILE$=Mid$(A$,I+1)
  305.    DR$=Left$(A$,I) : If DR$<>"" Then Dir$=DR$
  306. End Proc[A$]
  307. Procedure FINDT
  308.    Shared A$(),MX,FIND$
  309.    REQUEST["Enter String To Search:"] : FIND$=Param$
  310.    If FIND$="" Then Pop Proc Else MSG["Searching ..."]
  311.    For I=0 To MX
  312.       A=Instr(A$(I),FIND$,1)
  313.       If A>0 Then POSA[A-1,I] : MSG["Found."] : Pop Proc
  314.    Next : MSG["Not Found."]
  315. End Proc
  316. Procedure FINDN
  317.    Shared A$(),MX,FIND$,X,Y,SCR
  318.    DB=X+2 : MSG["Searching ..."] : For I=Y+SCR To MX
  319.       A=Instr(A$(I),FIND$,DB) : DB=1
  320.       If A>0 Then POSA[A-1,I] : MSG["Found."] : Pop Proc
  321.    Next : MSG["Not Found."]
  322. End Proc
  323. Procedure FIND
  324.    Shared A$(),MX,FIND$,X,Y,SCR
  325.    REQUEST["Enter String To Search:"] : FIND$=Param$
  326.    If FIND$="" Then Pop Proc Else MSG["Searching ..."]
  327.    DB=X : For I=Y+SCR To MX
  328.       A=Instr(A$(I),FIND$,DB+1) : DB=0
  329.       If A>0 Then POSA[A-1,I] : MSG["Found."] : Pop Proc
  330.    Next : MSG["Not Found."]
  331. End Proc
  332. Procedure REQUEST[A$]
  333.    Ink 2 : Bar 0,0 To 640,9 : Ink 0 : Memorize X : Memorize Y 
  334.    Text 2,7,A$ : Locate Len(A$),0 : Pen 0 : Paper 2
  335.    Wind Open 2,Len(A$)*8+8,1,79-Len(A$),1
  336.    Line Input "";A$ : Wind Close : Window 1 : Paper 1 : Pen 2
  337.    If A$="" Then MSG["Not Done."] Else BR
  338.    Remember X : Remember Y 
  339. End Proc[A$]
  340. Procedure BR
  341.    Shared FILE$,FLG
  342.    Ink 2 : Bar 0,0 To 640,9 : Ink 0 : Gr Writing 0 : FLG=0
  343.    Text 2,7,"Anthrax Editor vs 1.0 by Junkie  Source:"+FILE$ : COOR
  344. End Proc
  345. Procedure MSG[A$]
  346.    Shared FLG
  347.    Ink 2 : Bar 0,0 To 640,9 : Ink 0
  348.    Text 8,7,A$ : FLG=1
  349. End Proc