home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / sourcecode / utilities / texed.amos / texed.amosSourceCode
AMOS Source Code  |  1990-10-26  |  20KB  |  794 lines

  1. '    Texed v1.2,  Text Editor  
  2. '
  3. '  by Jason Anthony
  4. '
  5. '
  6. '   converted from Francois Lionet's Amal ed program 
  7. '
  8. '
  9. '    started 25:08:90 12:05PM
  10. '
  11. '
  12. Set Buffer 90
  13. If Chip Free<250000 : Close Editor : End If 
  14. '
  15. '
  16. MXLINE=2000
  17. NOC=1
  18. HSC=200
  19. SCY=50
  20. RC=False
  21. TW=8
  22. '
  23. Dim ED$(MXLINE)
  24. Global TEX$,ED$(),MXLINE,LIM$
  25. Global CST,CUX,CUY,WIY,BLS,BLE,WSY,LLAST,CCH
  26. Global NBMOVE,CPL,MN1$,MN2$,RC
  27. Global EDHID,ALARM,ALARM$,NAME$
  28. Global HSC,SCY,TW,WR
  29. '
  30. Screen Open 0,640,HSC,4,Hires
  31. Screen Display 0,,350,, : EDHID=1
  32. Reserve Zone 120
  33. WSY=HSC/8-5
  34. Wind Open 1,0,32,80,WSY : Scroll Off 
  35. Set Zone 1,0,0 To 640,15
  36. Set Zone 2,0,HSC-7 To 640,HSC
  37. Set Paint 1 : Set Pattern 0 : Ink 0,0,2 : Bar 0,HSC-7 To 639,HSC-1
  38. Limit Mouse 112,0 To 450,311
  39. '
  40. CPL=1 : CST=1 : CCH=1
  41. LIM$=Chr$(10) : LLAST=0
  42. '------------------------------------------------------------------------- 
  43. _EDIT:
  44. ED_SHOW
  45. ED_INFO : DISP_WIND
  46. MAKE_EDIT
  47. Set Zone 3,0,32 To 640,HSC
  48. Show On : Sprite Off : Clear Key 
  49. Do 
  50.    Menu On 
  51.    Repeat 
  52.       Wait Vbl 
  53.       If ALARM
  54.          Dec ALARM
  55.          If ALARM=0 : ED_INFO : End If 
  56.       End If 
  57.       Z=Mouse Zone : K=Mouse Key and 1 : C=Choice : K$=Inkey$ : S=Scancode : SS=Scanshift
  58.    Until K$<>"" or K<>0 or C<>0
  59.    If C
  60.       TK_CUR
  61.       On Choice(1) Gosub ED_AMOS,ED_EDIT,ED_DISK,ED_OPT,ED_BLOCK
  62.       K=0 : K$="" : S=0
  63.    End If 
  64.    Menu Off 
  65.    P=0 : P$="" : CY=CUY+WIY
  66.    If K
  67.       If Z>0
  68.          If Z=3
  69.             X=X Screen(X Mouse)/8 : Y=(Y Screen(Y Mouse)-32)/8
  70.             If WIY<=LLAST and Y<20
  71.                TK_CUR
  72.                If WIY+Y<=LLAST
  73.                   CUX=Min(Len(ED$(Y+WIY)),X) : CUY=Y : Locate CUX,CUY
  74.                   INF_X : INF_Y
  75.                End If 
  76.             End If 
  77.          End If 
  78.       End If 
  79.    End If 
  80.    If K$<" "
  81.       D=1 : If SS and %1011 : D=WSY-1 : End If 
  82.       If S=$42
  83.          Clear Key : N=4-(CUX mod 4) : Put Key Space$(N) : S=0
  84.       End If 
  85.       If S=79
  86.             S=0 : Add CUX,-D : CUX=Max(0,CUX) : Locate CUX, : INF_X
  87.       End If 
  88.       If S=78
  89.             S=0 : Add CUX,D : CUX=Min(Min(Len(ED$(CY)),CUX),79) : Locate CUX, : INF_X
  90.       End If 
  91.       If S
  92.          TK_CUR
  93.          If K$=Chr$(13)
  94.             If CY<MXLINE
  95.                I_LINE[CY+1]
  96.                If Param
  97.                   If WR and CUX<Len(ED$(CY)) : CX=CUX : LAST_SP[CY,CUX] : CUX=Param
  98.                      If CUX<0 : CUX=CX : End If 
  99.                   End If 
  100.                   ED$(CY+1)=Mid$(ED$(CY),CUX+1)
  101.                   ED$(CY)=Left$(ED$(CY),CUX) : DISP_WIND
  102.                   CUX=0
  103.                   S=77 : SS=0
  104.                End If 
  105.             End If 
  106.          End If 
  107.          If S=76
  108.             Add CUY,-D
  109.             If CUY>=0
  110.                CUX=Min(Len(ED$(CUY+WIY)),CUX) : Locate CUX,CUY : INF_X : INF_Y
  111.             Else 
  112.                E=CUY : CUY=0
  113.                If D=1
  114.                   If WIY : Dec WIY : Vscroll 1 : DISP_LINE[WIY] : End If 
  115.                Else 
  116.                   Add WIY,E : WIY=Max(0,WIY) : DISP_WIND
  117.                End If 
  118.                CUX=Min(Len(ED$(CUY+WIY)),CUX) : Locate CUX,CUY : INF_X : INF_Y
  119.             End If 
  120.             K$=""
  121.          End If 
  122.          If S=77
  123.             If WIY+CUY+D=>LLAST : D=LLAST-CUY-WIY-1 : End If 
  124.             Add CUY,D
  125.             If CUY<WSY
  126.                CUX=Min(Len(ED$(CUY+WIY)),CUX) : Locate CUX,CUY : INF_X : INF_Y
  127.             Else 
  128.                Add WIY,CUY-WSY+1 : CUY=WSY-1
  129.                If D=1
  130.                   Vscroll 3 : DISP_LINE[WIY+CUY]
  131.                Else 
  132.                   DISP_WIND
  133.                End If 
  134.                CUX=Min(Len(ED$(CUY+WIY)),CUX) : Locate CUX,CUY : INF_X : INF_Y
  135.             End If 
  136.             K$=""
  137.          End If 
  138.          If S=65
  139.             If CUX
  140.                ED$(CY)=Left$(ED$(CY),CUX-1)+Mid$(ED$(CY),CUX+1)
  141.                Dec CUX : Inc P : P$=" "
  142.                INF_X
  143.             Else 
  144.                If CY and CUY<>0
  145.                   CUX=Min(Len(ED$(CY-1)),79)
  146.                   ED$(CY-1)=ED$(CY-1)+ED$(CY) : D_LINE[CY] : Dec CUY
  147.                   DISP_WIND
  148.                End If 
  149.             End If 
  150.          End If 
  151.          If S=70
  152.             ED$(CY)=Left$(ED$(CY),CUX)+Mid$(ED$(CY),CUX+2)
  153.             Inc P : P$=" "
  154.             If SS and 3 : ED$(CY)="" : Inc P : P$=Chr$(26) : CUX=0 : End If 
  155.          End If 
  156.       End If 
  157.    End If 
  158.    U$=Upper$(K$)
  159.    If SS=%1000
  160.       If U$="Y"
  161.          If CY<LLAST : D_LINE[CY] : End If 
  162.          DISP_WIND: K$=""
  163.       End If 
  164.       K$=""
  165.    End If 
  166.    If K$>=" "
  167.       ED$(CY)=Left$(ED$(CY),CUX)+K$+Mid$(ED$(CY),CUX+1)
  168.       If CUX<79 : Inc CUX : End If 
  169.       If WR and CUX=>79 : CY=CUY+WIY : LAST_SP[CY,79]
  170.          PP=Param : If PP<49 : PP=79 : End If 
  171.          I_LINE[CY+1] : ED$(CY+1)=Mid$(ED$(CY),PP+1)
  172.          ED$(CY)=Left$(ED$(CY),PP)
  173.          Inc CY : CUX=Len(ED$(CY))
  174.          Y_CENTRE[CY] : DISP_WIND
  175.       End If 
  176.       INF_X
  177.       Inc P
  178.    End If 
  179.    If P
  180.       CY=CUY+WIY : Locate 0,
  181.       Inverse Off : If CY>=BLS and CY<BLE : Inverse On : End If 
  182.       Print Left$(ED$(CY),79); : Inverse Off : Print P$;
  183.       Locate CUX,CUY
  184.    End If 
  185. Loop 
  186. '
  187. ED_DISK: Pop 
  188. On Choice(2) Goto _LOAD,_LOAD,_SAVE,_SAVEAS
  189. '
  190. ED_EDIT:
  191. On Choice(2) Proc _STARTNEW,_GOTOLINE,DETAB
  192. Return 
  193. '
  194. ED_OPT:
  195. On Choice(2) Proc _FIND_TOP,_NEXT,_REPLACE,_CASE,_CASE
  196. Return 
  197. '
  198. ED_BLOCK:
  199. On Choice(2) Proc BL_S,BL_E,BL_HIDE,BL_S,BL_CUT,BL_PASTE,BL_S,BL_PRINT,ST_PRINT,BL_S,WORD_WRAP,CHECK_OK,NO_COPS
  200. Return 
  201. '
  202. ED_AMOS:
  203. On Choice(2) Proc AM_ABOUT,AM_ABOUT,AM_QUIT,AM_SYSTEM,SP_CHECK
  204. Return 
  205. '
  206. Procedure NO_COPS
  207. Shared NOC
  208. Wind Open 2,32,14,70,3,1
  209. Clw 
  210. Print "Please Enter number of Copies: "; : INP_TEXT[(Str$(NOC)-" "),2] : NOC=Val(Param$)
  211. Wind Close 
  212. DISP_WIND
  213. End Proc
  214. Procedure SP_CHECK
  215. ED_ALARM["Did you save data [Y:N]",1]
  216. Clear Key 
  217.    Do 
  218.       K$=Upper$(Inkey$)
  219.       If K$="Y"
  220.          Run "TX:Applications/Spell.amos"
  221.       End If 
  222.       If K$="N" : Exit 
  223.       End If 
  224.    Loop 
  225. End Proc
  226. Procedure DETAB
  227.    Wind Open 2,160,32,14,10,1
  228.    Clw 
  229.    Print "Please Enter";
  230.    Print " Tab width  "
  231.    Centre At(,6)+Border$(Left$(Mid$(Str$(TW),2)+Space$(6),6),1)
  232.    For J=1 To 6 : Cleft : Next J
  233.    T$=Mid$(Str$(TW),2)
  234.    INP_TEXT[T$,5]
  235.    TW=Val(Param$)
  236.    Wind Close : DISP_WIND
  237.    For J=0 To LLAST
  238.       Do 
  239.          Q=Instr(ED$(J),Chr$(9))
  240.          If Q<>0
  241.             ED$(J)=Left$(ED$(J),Q-1)+Space$(TW)+Mid$(ED$(J),Q+1)
  242.          Else 
  243.             Exit 
  244.          End If 
  245.       Loop 
  246.    Next J
  247.    Bell : ED_ALARM["All tabs have been removed!!",100]
  248. End Proc
  249. Procedure _NEXT
  250.    Shared BS,S$,FO,F2,TY,CO$
  251.    ED_ALARM["Searching for ["+CO$+"] Please Wait",1]
  252.    FO=False : F2=False : TY=True : _FIND_NEXT
  253. End Proc
  254. Procedure _FIND_TOP
  255.    Shared BS,S$,CO$,TY,F2,RC,FO
  256.    Wind Open 2,32,14,70,3,1
  257.    Clw 
  258.    S$=CO$
  259.    Print "     Search string: "; : INP_TEXT[S$,20] : S$=Param$
  260.    Wind Close : DISP_WIND
  261.    CO$=S$
  262.    ED_ALARM["Searching for ["+CO$+"]... please wait!",1]
  263.    If RC=False : S$=Upper$(S$) : End If 
  264.    FO=False : BS=0 : F2=False : TY=True : CUX=0
  265.    _FIND_NEXT
  266. End Proc
  267. Procedure _FIND_NEXT
  268.    Shared CO$,BS,S$,FO,F2,TY,ZZ
  269.    If CUX=0 and ZZ=False : CUX=-1 : End If 
  270.    ZZ=False
  271.    Add CUX,2 : If CUX>Len(ED$(BS)) : CUX=1 : Inc BS : End If 
  272.    Do 
  273.       TEMP$=ED$(BS) : If RC=False : TEMP$=Upper$(TEMP$) : End If 
  274.       If Left$(TEMP$,Len(S$))=S$ : ZZ=True : End If 
  275.       Repeat 
  276.          I=Instr(TEMP$,S$,CUX)
  277.          If I=0
  278.             CUX=0
  279.          Else 
  280.             CUX=I-1 : FO=True : I=0
  281.          End If 
  282.       Until I=0
  283.       If FO=True : Exit : End If 
  284.       Inc BS : If BS>LLAST : FO=False : Exit : End If 
  285.    Loop 
  286.    CY=BS
  287.    If FO
  288.       If TY=True
  289.          Y_CENTRE[CY]
  290.          DISP_WIND
  291.       End If 
  292.       F2=True
  293.    Else 
  294.       If F2=False
  295.          Bell 
  296.          ED_ALARM["Cannot find "+CO$+" ,sorry!",50]
  297.          Clear Key 
  298.       End If 
  299.       DISP_WIND
  300.    End If 
  301.    Curs On 
  302.    X=Free
  303. End Proc
  304. Procedure _REPLACE
  305.    Shared BS,S$,CO$,R$,CR$,FO,TY
  306.    Wind Open 2,32,14,70,3,1
  307.    Clw 
  308.    S$=CO$ : R$=CR$
  309.    Print "Replace:  "; : INP_TEXT[S$,20] : S$=Param$
  310.    Print "   With:  "; : INP_TEXT[R$,20] : R$=Param$
  311.    Wind Close 
  312.    DISP_WIND : ED_ALARM["Replacing...Wait!",1]
  313.    CO$=S$ : CR$=R$
  314.    If RC=False
  315.       S$=Upper$(S$)
  316.    End If 
  317.    BS=0 : TY=False : CUX=0
  318.    Do 
  319.       FO=False
  320.       _FIND_NEXT
  321.       Exit If FO=False
  322.       TEMP$=ED$(BS)
  323.       TEMP$=Left$(TEMP$,CUX)+R$+Mid$(TEMP$,CUX+Len(S$)+1)
  324.       ED$(BS)=TEMP$
  325.    Loop 
  326.    ED_ALARM["Replaced all ("+CO$+") with ("+CR$+")",100]
  327.    Y_CENTRE[0] : DISP_WIND
  328. End Proc
  329. Procedure _CASE
  330.    If RC=False
  331.       RC=True
  332.       MN2$=" Ignore case  F10"
  333.       MN1$=" Respect case F10"
  334.    Else 
  335.       RC=False
  336.       Swap MN1$,MN2$
  337.    End If 
  338.    Paper 2 : Pen 0
  339.    Menu$(4,5)=MN1$,MN2$
  340.    Paper 1 : Pen 2
  341. End Proc
  342. Procedure INP_TEXT[T$,L]
  343.    X=X Curs : Y=Y Curs
  344.    Locate X,Y : Print T$;
  345.    Do 
  346.       Repeat 
  347.          A$=Inkey$
  348.       Until A$<>""
  349.       Exit If A$=Chr$(13)
  350.       If A$=Chr$(8) : T$=Left$(T$,Len(T$)-1) : End If 
  351.       If A$=Chr$(27) : T$="" : Exit : End If 
  352.       If A$=>" " : T$=T$+A$ : End If 
  353.       T$=Left$(T$,L) : Locate X,Y : Print T$;" "; : Cleft 
  354.    Loop 
  355. End Proc[T$]
  356. Procedure _STARTNEW
  357.    ED_ALARM["Do you want to Reset File [Y:N]",1]
  358.    Clear Key 
  359.    Repeat : K$=Upper$(Inkey$) : Until(K$="Y") or(K$="N")
  360.    If K$="Y" : 
  361.       For J=0 To MXLINE : ED$(J)="" : Next J : NAME$="" : CUX=0 : CUY=0
  362.       WIY=0 : BLS=0 : BLE=0 : LLAST=0
  363.       Clw : DISP_WIND
  364.       ED_ALARM["File Reset .. Thankyou!",70] : Bell 
  365.    Else 
  366.       ED_ALARM["Reset Aborted .. File Safe for now!!",70] : Bell 
  367.    End If 
  368. End Proc
  369. Procedure _GOTOLINE
  370.    Shared CY
  371.    Wind Open 2,32,32,30,10,1
  372.    Clw 
  373.    Centre At(,2)+"Enter line number."
  374.    A$="Start: 0  End:"+Str$(LLAST-1)
  375.    Centre At(,4)+A$
  376.    Centre At(,6)+Border$("        ",1)
  377.    A$=Left$(Mid$(Str$(CY),2)+"          ",8)
  378.    Centre At(,6)+A$ : For J=1 To 8 : Cleft : Next J
  379.    A$=Str$(CY)-" "
  380.    INP_TEXT[A$,7]
  381.    Wind Close 
  382.    A$=Param$ : CY=Val(A$)
  383.    If CY<LLAST and CY>=0 and CY<=MXLINE
  384.       Y_CENTRE[CY]
  385.    Else 
  386.       Bell : ED_ALARM["Beyond Limits of File!",55]
  387.    End If 
  388.    DISP_WIND
  389. End Proc
  390. Procedure BL_S
  391.    BLS=CUY+WIY : DISP_WIND
  392. End Proc
  393. Procedure BL_E
  394.    BLE=CUY+WIY : DISP_WIND
  395. End Proc
  396. Procedure BL_CLR
  397.    TEX$=""
  398. End Proc
  399. Procedure BL_HIDE
  400.    TEX$=""
  401.    BLS=BLE : DISP_WIND
  402. End Proc
  403. Procedure BL_CUT
  404.    X=Free
  405.    If BLE>BLS and BLE<=LLAST
  406.       MAKE_AM[BLS,BLE-1]
  407.       D=BLE-BLS
  408.       For N=BLS To LLAST-D : ED$(N)=ED$(N+D) : Next 
  409.       Add LLAST,-D
  410.       CUX=0 : Y_CENTRE[BLS] : BLS=0 : BLE=0 : DISP_WIND
  411.    End If 
  412. End Proc
  413. Procedure BL_PASTE
  414.    X=Free
  415.    If TEX$<>""
  416.       P=21 : S=CUY+WIY
  417.       Do 
  418.          Q=Instr(TEX$,LIM$,P)
  419.          Exit If Q=0 or S>=MXLINE or LLAST>=MXLINE-1
  420.          If LLAST : For N=LLAST To S+1 Step -1 : ED$(N)=ED$(N-1) : Next : End If 
  421.          ED$(S)=Mid$(TEX$,P,Q-P)
  422.          P=Q+1 : Inc S : Inc LLAST
  423.       Loop 
  424.       DISP_WIND
  425.       ED$(LLAST)=""
  426.    End If 
  427. End Proc
  428. Procedure BL_PRINT
  429. Shared NOC
  430.    If BLE=BLS : ED_ALARM["What block?",60] : Bell : Pop Proc : End If 
  431.    On Error Goto E_PRINT
  432.    ED_ALARM["Printing... Press any key to stop.",1]
  433.    If BLE>BLS and BLE<=LLAST
  434.    Clear Key : PO=False
  435.    For XXXX=1 To NOC
  436.     If Not PO
  437.    Open Port 2,"PRT:"
  438.       For N=BLS To BLE-1
  439.          Print #2,ED$(N)
  440.       Next N : Print #2,Chr$(12)
  441.    Close 2
  442.     End If 
  443.       K$=Inkey$ : If K$<>"" : PO=True : End If 
  444.    Next XXXX
  445.    End If 
  446.    E_PR: On Error 
  447.    Pop Proc
  448.    E_PRINT: ED_ALARM["Printer Strike!",250] : Bell 
  449.    Resume E_PR
  450. End Proc
  451. Procedure ST_PRINT
  452.    S=BLS : E=BLE
  453.    BLS=0 : BLE=LLAST
  454.    BL_PRINT
  455.    BLS=S : BLE=E
  456. End Proc
  457. Procedure Y_CENTRE[Y]
  458.    If Y>=WIY and Y<WIY+WSY
  459.       CUY=Y-WIY
  460.    Else 
  461.       CUY=(WSY/2) : WIY=Y-(WSY/2)
  462.    End If 
  463.    If Y<(WSY/2) : WIY=0 : CUY=Y : End If 
  464. End Proc
  465. Procedure TK_CUR
  466.    Shared CY
  467.    For L=1 To Len(ED$(CY))
  468.       If Mid$(ED$(CY),L,1)<>" " : F=1 : Exit : End If 
  469.    Next L
  470.    If CY=LLAST
  471.       If LLAST<MXLINE
  472.          Inc LLAST
  473.          ED$(LLAST)=""
  474.       Else 
  475.          Bell : ED$(CY)="" : CUX=0 : DISP_WIND
  476.       End If 
  477.    End If 
  478. End Proc[F]
  479. Procedure D_LINE[N]
  480.    For M=N To LLAST-1 : ED$(M)=ED$(M+1) : Next M
  481.    ED$(LLAST)=""
  482.    Dec LLAST
  483.    If BLS>N : Dec BLS : End If 
  484.    If BLE>N : Dec BLE : End If 
  485. End Proc
  486. Procedure I_LINE[L]
  487.    If LLAST<MXLINE
  488.       If L<MXLINE
  489.          For N=LLAST+1 To L Step -1
  490.             ED$(N+1)=ED$(N)
  491.          Next N
  492.          Inc LLAST
  493.          If BLS>L : Inc BLS : End If 
  494.          If BLE>L : Inc BLE : End If 
  495.       End If 
  496.       ED$(L)=""
  497.       F=-1
  498.    End If 
  499. End Proc[F]
  500. Procedure MAKE_AM[Y1,Y2]
  501.    X=Free
  502.    TEX$=Hex$(CUX,3)+Hex$(CUY,3)+Hex$(WIY,3)+Hex$(BLS,3)+Hex$(BLE,3)
  503.    For S=Y1 To Y2
  504.       TEX$=TEX$+ED$(S)+LIM$
  505.    Next S
  506.    X=Free
  507. End Proc
  508. Procedure DISP_WIND
  509.    Curs Off 
  510.    For N=WIY To WIY+WSY-1 : DISP_LINE[N] : Next 
  511.    Locate CUX,CUY
  512.    Curs On 
  513.    INF_X : INF_Y
  514. End Proc
  515. Procedure DISP_LINE[N]
  516.    Locate 0,N-WIY : Inverse Off : Cline 
  517.    If N>=BLS and N<BLE
  518.       Inverse On 
  519.    End If 
  520.    If N<=LLAST : Print Left$(ED$(N),79); : End If 
  521. End Proc
  522. Procedure ED_INFO
  523.    Cls 0,0,0 To 640,12
  524.    Set Paint 1 : Set Pattern 0 : Ink 0,0,2 : Bar 0,0 To 639,12
  525.    If ALARM
  526.       Ink 3,0 : Text 16,3+Text Base,ALARM$
  527.    Else 
  528.       Ink 2,0 : Text 16,3+Text Base,"AMOS Text editor"
  529.       INF_X : INF_Y
  530.       If CST=0
  531.          A$="Untitled file"
  532.       Else 
  533.          A$=Upper$(NAME$)
  534.       End If 
  535.       Text 54*8,3+Text Base,A$
  536.    End If 
  537. End Proc
  538. Procedure INF_X
  539.    If ALARM=0
  540.       X=30*8
  541.       Cls 0,X,3 To X+48,11
  542.       Ink 2,0 : Text X,3+Text Base,"C:"+Str$(CUX)
  543.    End If 
  544. End Proc
  545. Procedure INF_Y
  546.    If ALARM=0
  547.       X=38*8
  548.       Cls 0,X,3 To X+56,11
  549.       Ink 2,0 : Text X,3+Text Base,"L:"+Left$(Str$(CUY+WIY)+"    ",5)
  550.    End If 
  551. End Proc
  552. Procedure ED_HIDE
  553.    If EDHID=0
  554.       For Y=SCY To 350 Step 16
  555.          Screen Display 0,,Y,,
  556.          Wait Vbl 
  557.       Next 
  558.       EDHID=-1
  559.    End If 
  560. End Proc
  561. Procedure ED_SHOW
  562.    Wait 2 : Screen To Front 0
  563.    If EDHID
  564.       For Y=350 To SCY Step -16
  565.          Screen Display 0,,Y,,
  566.          Wait Vbl 
  567.       Next 
  568.       EDHID=0
  569.    End If 
  570.    Screen Display 0,,SCY,,
  571.    Screen 0 : Colour 3,$FF0
  572.    Wait Vbl 
  573.    X=Free
  574. End Proc
  575. Procedure MAKE_EDIT
  576.    Menu Del 
  577.    Paper 2 : Pen 0
  578.    '  
  579.    Menu$(1)=" AMOS "
  580.    Menu$(1,1)=" About Text Editor  Help " : Menu Key(1,1) To 95
  581.    Menu$(1,2)="-------------------------" : Menu Inactive(1,2)
  582.    Menu$(1,3)=" Quit                Esc " : Menu Key(1,3) To 69
  583.    Menu$(1,4)=" Back to system          " : Menu$(1,4,1)=" Really? "
  584.    Menu$(1,5)=" Load Spelling Checker   "
  585.    '
  586.    Menu$(2)=" Edit "
  587.    Menu$(2,1)=" Reset File F1" : Menu Key(2,1) To 80
  588.    Menu$(2,2)=" Goto Line  F2" : Menu Key(2,2) To 81
  589.    Menu$(2,3)=" Detab File F3" : Menu Key(2,3) To 82
  590.    '
  591.    Menu$(3)=" Disc "
  592.    Menu$(3,1)=" Load Text File F4" : Menu Key(3,1) To 83
  593.    Menu$(3,2)="------------------" : Menu Inactive(3,2)
  594.    Menu$(3,3)=" Save Text File F5" : Menu Key(3,3) To 84
  595.    Menu$(3,4)=" Save As        F6" : Menu Key(3,4) To 85
  596.    '
  597.    Menu$(4)=" Search/Replace "
  598.    Menu$(4,1)=" Find top      F7" : Menu Key(4,1) To 86
  599.    Menu$(4,2)=" Find next     F8" : Menu Key(4,2) To 87
  600.    Menu$(4,3)=" Replace       F9" : Menu Key(4,3) To 88
  601.    Menu$(4,4)="----------------" : Menu Inactive(4,4)
  602.    MN1$=" Ignore Case  F10"
  603.    MN2$=" Respect Case F10"
  604.    Menu$(4,5)=MN1$,MN2$ : Menu Key(4,5) To 89
  605.    '
  606.    Menu$(5)=" Block "
  607.    Menu$(5,1)=" Block start  ^F1" : Menu Key(5,1) To 80,8
  608.    Menu$(5,2)=" Block end    ^F2" : Menu Key(5,2) To 81,8
  609.    Menu$(5,3)=" Block hide   ^F3" : Menu Key(5,3) To 82,8
  610.    Menu$(5,4)="-----------------"
  611.    Menu$(5,5)=" Block cut    ^F4" : Menu Key(5,5) To 83,8
  612.    Menu$(5,6)=" Block paste  ^F5" : Menu Key(5,6) To 84,8
  613.    Menu$(5,7)="-----------------"
  614.    Menu$(5,8)=" Block print  ^F6" : Menu Key(5,8) To 85,8
  615.    Menu$(5,9)=" File print   ^F7" : Menu Key(5,9) To 86,8
  616.    Menu$(5,10)="-----------------" : Menu Inactive(4,4)
  617.    Menu$(5,11)="Word Wrap on  ^F8","Word Wrap off ^F8" : Menu Key(5,11) To 87,8
  618.    Menu$(5,12)="Re-Work File  ^F9" : Menu Key(5,12) To 88,8
  619.    Menu$(5,13)="No Of Copies ^F10" : Menu Key(5,13) To 89,8
  620.    WR=True
  621.    '
  622.    Paper 1 : Pen 2
  623. End Proc
  624. Procedure BANK_SAVE
  625.    ED_ALARM["Saving "+NAME$+"....",1]
  626.    On Error Goto E_SAVE
  627.    Open Out 1,NAME$
  628.    For J=0 To LLAST
  629.       Print #1,ED$(J)+Chr$(10);
  630.    Next J
  631.    Close 1
  632.    E_SV: On Error 
  633.    Pop Proc
  634.    E_SAVE: ED_ALARM["Disc error!",200] : Bell : Resume E_SV
  635. End Proc
  636. Procedure ED_ALARM[A$,L]
  637.    Shared ALARM$,ALARM
  638.    ALARM$=A$
  639.    ALARM=L
  640.    ED_INFO
  641. End Proc
  642. Procedure AM_ABOUT
  643.    Clw 
  644.    Print At(20,3)+Border$(At(60,9),1)
  645.    Centre At(,4)+"Text Editor"
  646.    Centre At(,5)+"-----------"
  647.    Centre At(,6)+"By Jason Anthony"
  648.    Centre At(,7)+"based on Francois Lionet's Amal Editor"
  649.    Centre At(,8)+"(c) J.Anthony 1990, written using AMOS"
  650.    Centre At(,14)+"Text buffer free space:"+Str$(Free)
  651.    Centre At(,15)+"Free Chip memory:"+Str$(Chip Free)
  652.    Centre At(,16)+"Free Fast memory:"+Str$(Fast Free)
  653.    Print At(20,14)+Border$(At(60,16),1)
  654.    Clear Key : Curs Off : Repeat : Until Inkey$<>"" or Mouse Key<>0
  655.    DISP_WIND : Curs On 
  656. End Proc
  657. Procedure AM_QUIT
  658.    A$="Quit Editor (Y/N) ?"
  659.    ED_ALARM[A$,1]
  660.    Clear Key : Repeat : A$=Inkey$ : Until A$<>""
  661.    If Upper$(A$)="Y"
  662.       Edit 
  663.    End If 
  664. End Proc
  665. Procedure AM_SYSTEM
  666.    System 
  667. End Proc
  668. Procedure LAST_SP[J,P]
  669. TEMP$=ED$(J)
  670. Do 
  671.    If Mid$(TEMP$,P,1)=" "
  672.       Exit 
  673.    Else 
  674.       Dec P
  675.    End If 
  676.    If P<1 : P=-3 : Exit : End If 
  677. Loop 
  678. End Proc[P]
  679. Procedure CHECK_OK
  680. ER=False
  681. For J=0 To LLAST
  682.    If Len(ED$(J))>79 : ER=True : End If 
  683. Next J
  684. If ER
  685.    Wind Open 2,160,32,22,16,1
  686.    Curs Off 
  687.    Clw 
  688.    Centre At(,2)+"Some Lines in this"
  689.    Centre At(,3)+"file, are longer"
  690.    Centre At(,4)+"than 80 characters"
  691.    Centre At(,6)+Zone$(Border$("Ignore",1),1)
  692.    Centre At(,9)+Zone$(Border$("Break line at 79",1),2)
  693.    Centre At(,12)+Zone$(Border$("Break at word",1),3)
  694. Do 
  695.    Z=Mouse Zone
  696.    Inverse On 
  697.    If Z=1 : Centre At(,6)+Border$("IGNORE",1) : End If 
  698.    If Z=2 : Centre At(,9)+Border$("BREAK LINE AT 79",1) : End If 
  699.    If Z=3 : Centre At(,12)+Border$("BREAK AT WORD",1) : End If 
  700.    Repeat : Until Mouse Zone<>Z or Mouse Key<>0
  701.    Inverse Off 
  702.    If Z=1 : Centre At(,6)+Border$("Ignore",1) : End If 
  703.    If Z=2 : Centre At(,9)+Border$("Break line at 79",1) : End If 
  704.    If Z=3 : Centre At(,12)+Border$("Break at word",1) : End If 
  705. If Z<>0 and Mouse Key<>0 : Exit : End If 
  706. Loop 
  707. Wind Close : Curs On : DISP_WIND
  708. End If 
  709. If Z=1 : X=Free : Pop Proc : End If 
  710. ED_ALARM["Correcting File.. Please wait!",1]
  711. J=0
  712. Do 
  713. If Len(ED$(J))>79
  714.    I_LINE[J+1]
  715.    If Z=2 : BP=79 : End If 
  716.    If Z=3 : LAST_SP[J,79] : BP=Param : End If 
  717.    If BP<49 : BP=79 : End If 
  718.    ED$(J+1)=Mid$(ED$(J),BP+1)
  719.    ED$(J)=Left$(ED$(J),BP)
  720. Else 
  721.    Inc J
  722. End If 
  723. If J>LLAST : Exit : End If 
  724. Loop 
  725. DISP_WIND
  726. X=Free
  727. End Proc
  728. Procedure WORD_WRAP
  729. M$="Word Wrap on  ^F8"
  730. N$="Word Wrap off ^F8"
  731. If WR
  732.    WR=False : Swap M$,N$
  733. Else 
  734.    WR=True
  735. End If 
  736. Paper 2 : Pen 0
  737. Menu$(5,11)=M$,N$
  738. Paper 1 : Pen 2
  739. End Proc
  740. '
  741. '
  742. _LOAD:
  743. If LLAST>1 : ED_ALARM["File in memory! Please reset",70] : Bell : Goto _EDIT : End If 
  744. F$=Fsel$("*.Asc","","Load a text file")
  745.    ED_ALARM["Loading "+F$+"...",1]
  746.    On Error Goto E_LOAD
  747.    Open In 1,F$
  748.    LE=Lof(1) : LONG=LE
  749.    LS=512
  750.    S=0 : TEX$=""
  751.    Repeat 
  752.       NL=LONG/LS
  753.       If NL
  754.          For N=1 To NL
  755.             TEX$=TEX$+Input$(1,LS)
  756.          P=1
  757.          Do 
  758.             Q=Instr(TEX$,LIM$,P)
  759.             Exit If Q=0
  760.             ED$(S)=Mid$(TEX$,P,Q-P)
  761.             P=Q+1 : Inc S
  762.          Loop 
  763.          TEX$=Mid$(TEX$,P)
  764.          Next N
  765.          Add LONG,-LS*NL
  766.       End If 
  767.       LS=LS/2
  768.    Until LONG=0
  769.    Close 1
  770.    NAME$=F$
  771.    LLAST=S
  772.    TEX$=""
  773.    X=Free
  774. E_LD: On Error 
  775. CHECK_OK
  776. Goto _EDIT
  777. E_LOAD: ED_ALARM["Disc Error!",200] : Bell : Resume E_LD
  778. '
  779. '
  780. _SAVE:
  781. If NAME$<>""
  782.    BANK_SAVE : Goto _EDIT
  783. End If 
  784. '
  785. '
  786. _SAVEAS:
  787. F$=Fsel$("*.Asc","","Save text file")
  788. If Upper$(Right$(F$,4))=".ASC"
  789.    NAME$=F$
  790.    BANK_SAVE
  791. Else 
  792.    Bell 
  793. End If 
  794. Goto _EDIT