home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / sourcecode / subroutines / sample-editor.amos / sample-editor.amosSourceCode < prev   
AMOS Source Code  |  1991-05-14  |  15KB  |  498 lines

  1. Unpack 1 To 0
  2. Paper 0 : Flash Off : Curs Off : Pen 2 : Led Off 
  3. Print " "
  4. Global F$,T$,CSTART,CLENGTH,CFREQ,OSTART,OLENGTH,OFREQ,BUFSTART,BUFLENGTH,FLOOP
  5. NZONES=47 : Reserve Zone NZONES
  6. Writing 1
  7. DEFZONES
  8. Repeat 
  9.    FILELOAD
  10. Until F$<>""
  11. STATS
  12. Limit Mouse 
  13. Do 
  14.    Repeat 
  15.       Repeat 
  16.          If(Inkey$<>"") and(F$<>"") Then Sam Raw 15,CSTART,CLENGTH,CFREQ
  17.       Until Mouse Key=1
  18.       ZN=Mouse Zone
  19.    Until ZN>0 and ZN<=NZONES
  20.    If ZN=1 and BUFLENGTH<>0 Then Sam Raw 15,BUFSTART,BUFLENGTH,CFREQ
  21.    If ZN=2 Then ALTLOOP
  22.    If ZN=3 Then NEWSTART
  23.    If ZN=4 Then NEWEND
  24.    If ZN=5 Then DATMERGE
  25.    If ZN=6 Then CUT
  26.    If ZN=7 Then TIDY[Dfree]
  27.    If ZN=8 Then CSTART=OSTART : CLENGTH=OLENGTH : DISPLAY
  28.    If ZN=16 Then FILELOAD
  29.    If ZN=17 Then FILESAVE
  30.    If ZN=18 Then QUIT
  31.    If ZN=19 Then Add CSTART,2,OSTART To(OSTART+OLENGTH)
  32.    If ZN=20 Then Add CSTART,-2,OSTART To(OSTART+OLENGTH)
  33.    If ZN=21 Then Add CFREQ,1,1000 To 32000
  34.    If ZN=22 Then Add CFREQ,100,1000 To 32000
  35.    If ZN=23 Then Add CFREQ,-1,1000 To 32000
  36.    If ZN=24 Then Add CFREQ,-100,1000 To 32000
  37.    If ZN=25 Then DFAULT
  38.    If ZN=26 Then Add CSTART,100,OSTART To(OSTART+CLENGTH)
  39.    If ZN=27 Then Add CSTART,-100,OSTART To(OSTART+CLENGTH)
  40.    If ZN=28 Then DISPLAY
  41.    If ZN=29 Then Add CLENGTH,1,257 To OLENGTH
  42.    If ZN=30 Then Add CLENGTH,-1,257 To OLENGTH
  43.    If ZN=31 Then Add CLENGTH,100,257 To OLENGTH
  44.    If ZN=32 Then Add CLENGTH,-100,257 To OLENGTH
  45.    If ZN=33 Then COMPRESS
  46.    If ZN=34 Then XPAND
  47.    If ZN=35 Then DIODE
  48.    If ZN=36 Then DATCOPY
  49.    If ZN=37 Then VOLPLUS
  50.    If ZN=38 Then DISTORT
  51.    If ZN=39 Then VCLIP
  52.    If ZN=41 Then INSERT
  53.    If ZN=43 Then PASTE
  54.    If ZN=44 Then VOLMINUS
  55.    If ZN=45 Then RVERSE
  56.    If ZN=46 Then RING
  57.    STATS
  58. Loop 
  59. '
  60. Procedure STATS
  61.    Wait Vbl : Paper 0 : Ink 2
  62.    Locate 4,13 : Print "Sample name: ";Left$(F$+"                             ",30)
  63.    Locate 4, : Print "Type ";T$;"   Length ";CLENGTH;"   Freq";CFREQ;"  Start";CSTART-OSTART;
  64.    If BUFLENGTH<>0 Then Print "   Buffer";BUFLENGTH;"        " Else Print "     "
  65. End Proc
  66. '
  67. Procedure FILELOAD
  68.    A$=Fsel$("") : If A$="" Then Pop Proc
  69.    Open In 1,A$
  70.    FLEN=Lof(1)
  71.    Close 
  72.    Erase 2 : Erase 3
  73.    Reserve As Chip Data 2,FLEN
  74.    Reserve As Chip Data 3,FLEN
  75.    Bload A$,Start(2) : Copy Start(2),Start(2)+Length(2) To Start(3)
  76.    BODY=Hunt(Start(2) To Start(2)+Length(2),"8SVX")
  77.    If BODY<>0 Then BODY=Hunt(Start(2) To Start(2)+Length(2),"BODY")
  78.    If BODY=0
  79.       CSTART=Start(2)
  80.       CLENGTH=FLEN
  81.       CFREQ=16000 : OFREQ=16000
  82.    Else 
  83.       CSTART=BODY+8 : OSTART=CSTART
  84.       CLENGTH=Leek(BODY+4)
  85.       CFREQ=Deek(Start(2)+32) : OFREQ=CFREQ
  86.    End If 
  87.    OLENGTH=CLENGTH
  88.    F$=A$
  89.    If CSTART=Start(2) Then T$="Raw" Else T$="IFF"
  90.    DISPLAY
  91. End Proc
  92. '
  93. Procedure FILESAVE
  94. Bsave Fsel$("",F$,"Save sample in","RAW format"),Start(2) To Start(2)+Length(2)
  95. End Proc
  96. '
  97. Procedure QUIT
  98.    For A=2 To 5
  99.       Erase A
  100.    Next 
  101.    End 
  102. End Proc
  103. '
  104. Procedure DFAULT
  105.    CFREQ=OFREQ
  106.    Erase 2 : Reserve As Chip Data 2,Length(3)
  107.    Copy Start(3),Start(3)+Length(3) To Start(2)
  108.    CSTART=Start(2) : CLENGTH=Length(2) : OSTART=CSTART : OLENGTH=CLENGTH
  109.    DISPLAY
  110. End Proc
  111. '
  112. Procedure DISPLAY
  113.    Cls 0,1,135 To 639,254
  114.    ST=CLENGTH/640 : If ST=0 Then Pop Proc
  115.    Ink 3,0 : Plot 0,180
  116.    For A=CSTART To CSTART+CLENGTH Step ST
  117.       P=Peek(A) : If P>127 Then P=P-256
  118.       P=P/2
  119.       Draw To(A-CSTART)/ST,(P*120)/128+194
  120.    Next 
  121. End Proc
  122. '
  123. Procedure DEFZONES
  124.    Paper 0
  125.    Print : Print 
  126.    Print Zone$("          Load",16);"  ";Zone$("Save",17);"  ";Zone$("Quit",18);"  ";Zone$("Display",28);
  127.    Print Zone$("  Freq+",21);"  ";Zone$("Freq++",22);"  ";Zone$("Freq-",23);"  ";Zone$("Freq--",24);"  ";Zone$("Reset",25)
  128.    Print 
  129.    Print Zone$("          Start+",19);"  ";Zone$("Start-",20);"  ";Zone$("Start++",26);"  ";Zone$("Start--",27);"  ";
  130.    Print Zone$("End+",29);"  ";Zone$("End-",30);"  ";Zone$("End++",31);"  ";Zone$("End--",32)
  131.    Print 
  132.    Print "          ";Zone$("Compress",33);"  ";Zone$("Expand",34);"  ";Zone$("Diode",35);"  ";Zone$("Copy",36);"   ";Zone$("+dB",37);"  ";Zone$("Distort",38);"  ";Zone$("Clip",39);"   ";Zone$("Full",8)
  133.    Print 
  134.    Print "          ";Zone$("Reverse",45);"   ";Zone$("Insert",41);"  ";Zone$("Echo",42);"   ";Zone$("Paste",43);"  ";Zone$("-dB",44);"  ";Zone$("Buffer ",1);"  ";Zone$("Ring",46);"   ";Zone$("Loop",2)
  135.    Print 
  136.    Print "          ";Zone$("Start",3);"  ";Zone$("End",4);"  ";Zone$("Merge",5);"  ";Zone$("Cut",6);"  ";Zone$("Tidy",7)
  137. End Proc
  138. '
  139. Procedure COMPRESS
  140.    Locate 0,0 : Print "Compress"
  141.    Reserve As Data 5,Length(2)/2
  142.    For A=0 To Length(2) Step 8
  143.       Loke Start(5)+A/2,Leek(A+Start(2))
  144.    Next 
  145.    Erase 2 : Reserve As Chip Data 2,Length(5)
  146.    Copy Start(5),Start(5)+Length(5) To Start(2) : Erase 5
  147.    CSTART=Start(2) : OSTART=CSTART : CLENGTH=Length(2) : OLENGTH=CLENGTH
  148.    Locate 0,0 : Print "        "
  149.    DISPLAY: CFREQ=CFREQ/2
  150. End Proc
  151. '
  152. Procedure XPAND
  153.    If Length(2)>32760
  154.       Screen Open 1,320,48,4,Lowres
  155.       Paper 1 : Print : Print 
  156.       Print "Length of expanded sample will be"
  157.       Print "too great to play back in one."
  158.       Print "Shall I convert anyway? (Y / N)"
  159.       Repeat 
  160.          A$=Upper$(Inkey$)
  161.       Until(A$="Y") or(A$="N")
  162.       If A$="N"
  163.          Pop Proc
  164.       End If 
  165.    End If 
  166.    Locate 0,0 : Print "Expand"
  167.    Reserve As Data 5,Length(2)*2
  168.    For A=0 To Length(2) Step 4
  169.       Loke Start(5)+A*2,Leek(Start(2)+A)
  170.       Loke Start(5)+A*2+4,Leek(Start(2)+A)
  171.    Next 
  172.    Erase 2 : Reserve As Chip Data 2,Length(5)
  173.    Copy Start(5),Start(5)+Length(5) To Start(2) : Erase 5
  174.    CSTART=Start(2) : OSTART=CSTART : CLENGTH=Length(2) : OLENGTH=CLENGTH
  175.    CFREQ=CFREQ*2 : If CFREQ>32000 Then CFREQ=32000
  176.    Locate 0,0 : Print "      "
  177. End Proc
  178. '
  179. Procedure DIODE
  180.    Locate 0,0 : Print "Diode";
  181.    For A=CSTART To CSTART+CLENGTH
  182.       If Peek(A)>127 Then Poke A,127-(Peek(A) and $7F)
  183.    Next 
  184.    Locate 0,0 : Print "     "
  185. End Proc
  186. '
  187. Procedure DATCOPY
  188.    If Length(4)<>0
  189.       Screen Open 1,320,48,4,Lowres
  190.       Paper 1 : Ink 2 : Print : Print 
  191.       Print "Erase old buffer? (Y / N)"
  192.       Repeat 
  193.          A$=Upper$(Inkey$)
  194.       Until(A$="Y") or(A$="N")
  195.       If A$="N"
  196.          Pop Proc
  197.       End If 
  198.       Erase 4
  199.    End If 
  200.    If Screen=1 Then Screen Close 1
  201.    Reserve As Chip Data 4,CLENGTH : BUFSTART=Start(4)
  202.    Copy CSTART,CSTART+CLENGTH To BUFSTART
  203.    BUFLENGTH=Length(4)
  204. End Proc
  205. '
  206. Procedure VOLPLUS
  207.    Locate 0,0 : Print "Vol+"
  208.    For A=CSTART To CSTART+CLENGTH
  209.       X#=Peek(A)
  210.       If X#>127 Then X#=X#-256
  211.       X#=X#*1.2 : Y=Int(X#)
  212.       If Y<-127 Then Y=-127
  213.       If Y>127 Then Y=127
  214.       If Y<0 Then Y=Y+256
  215.       Poke A,Y
  216.    Next 
  217.    Locate 0,0 : Print "    "
  218. End Proc
  219. '
  220. Procedure DISTORT
  221.    Limit Mouse X Hard(1),Y Hard(135) To X Hard(319),Y Hard(195)
  222.    Screen Open 1,320,48,4,Lowres
  223.    Paper 1 : Pen 2 : Repeat : Until Mouse Key=0
  224.    Print : Print : Print "Set threshold limits with mouse"
  225.    Print "and click either key to fix"
  226.    Screen 0 : Gr Writing 2
  227.    Ink 1
  228.    Repeat 
  229.       CLEV=195-Y Screen(0,Y Mouse)
  230.       Wait Vbl 
  231.       Draw 1,195-CLEV To 639,195-CLEV
  232.       Draw 1,195+CLEV To 639,195+CLEV
  233.       Wait Vbl 
  234.       Draw 1,195-CLEV To 639,195-CLEV
  235.       Draw 1,195+CLEV To 639,195+CLEV
  236.    Until Mouse Key<>0 : Screen Close 1 : Locate 0,0 : Print "Distort" : Limit Mouse 
  237.    TH=(CLEV*127)/60
  238.    For A=CSTART To CSTART+CLENGTH
  239.       NFLAG=False
  240.       BYTE=Peek(A) : If BYTE>127 Then BYTE=Abs(BYTE-256) : NFLAG=True
  241.       If(BYTE>=TH) and(BYTE<128)
  242.          TSTART=A
  243.          Repeat 
  244.             A=A+2
  245.             BYTE2=Peek(A)
  246.             If BYTE2>127
  247.                BYTE2=Abs(BYTE2-256)
  248.             End If 
  249.          Until(BYTE2<TH) or(A>=CSTART+CLENGTH)
  250.          If A>=(CSTART+CLENGTH)
  251.             Exit 
  252.          End If 
  253.          DLENGTH#=A-TSTART : THV#=TH : MP#=DLENGTH#/2 : IC#=127-TH : GR#=IC#/MP#
  254.          For B=0 To DLENGTH#/2
  255.             THV#=THV#+GR#
  256.             If THV#>127
  257.                Poke TSTART+B,127
  258.                Poke A-B,127
  259.             Else 
  260.                Poke TSTART+B,Int(THV#)
  261.                Poke A-B,Int(THV#)
  262.             End If 
  263.             If NFLAG
  264.                Poke TSTART+B,256-Peek(TSTART+B)
  265.                Poke A-B,256-Peek(A-B)
  266.             End If 
  267.          Next 
  268.       End If 
  269.    Next 
  270.    Locate 0,0 : Print "       " : DISPLAY
  271. End Proc
  272. '
  273. Procedure VCLIP
  274.    Limit Mouse X Hard(1),Y Hard(135) To X Hard(319),Y Hard(195)
  275.    Screen Open 1,320,48,4,Lowres
  276.    Paper 1 : Pen 2 : Repeat : Until Mouse Key=0
  277.    Print : Print : Print "Set clipping limits with mouse"
  278.    Print "and click either key to fix"
  279.    Screen 0 : Gr Writing 2
  280.    Ink 1
  281.    Repeat 
  282.       CLEV=195-Y Screen(0,Y Mouse)
  283.       Wait Vbl 
  284.       Draw 1,195-CLEV To 639,195-CLEV
  285.       Draw 1,195+CLEV To 639,195+CLEV
  286.       Wait Vbl 
  287.       Draw 1,195-CLEV To 639,195-CLEV
  288.       Draw 1,195+CLEV To 639,195+CLEV
  289.    Until Mouse Key<>0 : Screen Close 1 : Locate 0,0 : Print "Clip"
  290.    For A=CSTART To CSTART+CLENGTH
  291.       BYTE=Peek(A) : LEV=(CLEV*127)/60
  292.       If BYTE<128
  293.          If BYTE>LEV
  294.             BYTE=LEV
  295.          End If 
  296.       Else 
  297.          Z=Abs(BYTE-256)
  298.          If Z>LEV
  299.             Z=-LEV+256
  300.             BYTE=Z
  301.          End If 
  302.       End If 
  303.       Poke A,BYTE
  304.    Next : Screen 0 : Limit Mouse 
  305.    Locate 0,0 : Print "    " : Gr Writing 1
  306.    DISPLAY
  307. End Proc
  308. '
  309. Procedure INSERT
  310.    Reserve As Data 5,OLENGTH+BUFLENGTH
  311.    If CSTART=OSTART
  312.       Copy BUFSTART,BUFSTART+BUFLENGTH To Start(5)
  313.       Copy OSTART,OSTART+OLENGTH To Start(5)+BUFLENGTH
  314.    Else 
  315.       Copy OSTART,CSTART To Start(5)
  316.       Copy BUFSTART,BUFSTART+BUFLENGTH To Start(5)+(CSTART-OSTART)
  317.       Copy CSTART,CSTART+OLENGTH-(CSTART-OSTART) To Start(5)+BUFLENGTH+(CSTART-OSTART)
  318.    End If 
  319.    Erase 2 : Reserve As Chip Data 2,Length(5)
  320.    Copy Start(5),Start(5)+Length(5) To Start(2)
  321.    Erase 5 : CSTART=Start(2) : CLENGTH=Length(2) : OSTART=CSTART : OLENGTH=CLENGTH
  322. End Proc
  323. '
  324. Procedure PASTE
  325.    If(CSTART+BUFLENGTH)>(OSTART+OLENGTH)
  326.       Reserve As Data 5,CSTART+BUFLENGTH-OSTART
  327.       Copy OSTART,OSTART+OLENGTH To Start(5)
  328.       Copy BUFSTART,BUFSTART+BUFLENGTH To Start(5)+CSTART-OSTART
  329.       Erase 2 : Reserve As Chip Data 2,Length(5)
  330.       CSTART=Start(2) : OSTART=CSTART : CLENGTH=Length(2) : OLENGTH=CLENGTH
  331.       Copy Start(5),Start(5)+Length(5) To Start(2) : Erase 5
  332.    Else 
  333.       Copy BUFSTART,BUFSTART+BUFLENGTH To CSTART
  334.       '      CSTART=Start(2) : OSTART=CSTART : CLENGTH=Length(2) : OLENGTH=CLENGTH 
  335.    End If 
  336. End Proc
  337. '
  338. Procedure VOLMINUS
  339.    Locate 0,0 : Print "Vol-"
  340.    For A=CSTART To CSTART+CLENGTH
  341.       X#=Peek(A)
  342.       If X#>127 Then X#=X#-256
  343.       X#=X#*0.8 : Y=Int(X#)
  344.       If Y<0 Then Y=Y+256
  345.       Poke A,Y
  346.    Next 
  347.    Locate 0,0 : Print "    "
  348. End Proc
  349. '
  350. Procedure RVERSE
  351.    Locate 0,0 : Print "Reverse"
  352.    For A=0 To CLENGTH/2
  353.       BYTE1=Peek(CSTART+A)
  354.       BYTE2=Peek(CSTART+CLENGTH-A)
  355.       Poke CSTART+A,BYTE2
  356.       Poke CSTART+CLENGTH-A,BYTE1
  357.    Next 
  358.    Locate 0,0 : Print "       " : DISPLAY
  359. End Proc
  360. '
  361. Procedure RING
  362.    Screen Open 1,320,48,4,Lowres
  363.    Screen Display 1,,210,,
  364.    Pen 2 : Paper 0 : Flash Off : Colour 3,$6F2
  365.    Repeat 
  366.       Cls 1 : NEG=0 : Paper 1
  367.       Print : Print "Enter modulation frequency in 1 - 100Hz"
  368.       Pen 3 : Input ":";FR
  369.    Until FR>=1 and FR<=100
  370.    Screen Close 1 : Locate 0,0 : Print "Ring"
  371.    INF=CFREQ/FR/2 : Rem i.f. frequency!
  372.    COUNTER=0 : FLAG=True
  373.    For A=CSTART To CSTART+CLENGTH Step 4
  374.       If COUNTER>INF Then COUNTER=0 : FLAG= Not(FLAG)
  375.       If Not(FLAG) Then Loke A,0
  376.       Add COUNTER,4
  377.    Next : Locate 0,0 : Print "    "
  378.    DISPLAY
  379. End Proc
  380. '
  381. Procedure ALTLOOP
  382.    If FLOOP Then Sam Loop Off : Ink 1 : Paint 532,71 Else Sam Loop On : Ink 5 : Paint 532,71
  383.    FLOOP= Not(FLOOP)
  384. End Proc
  385. '
  386. Procedure NEWSTART
  387.    Limit Mouse X Hard(1),Y Hard(135) To X Hard(638),Y Hard(195)
  388.    Screen Open 1,320,48,4,Lowres
  389.    Paper 1 : Pen 2 : Repeat : Until Mouse Key=0
  390.    Print : Print : Print "Set new start point with mouse"
  391.    Print "and click either key to fix"
  392.    Screen 0 : Gr Writing 2
  393.    Ink 1
  394.    Repeat 
  395.       X#=X Screen(0,X Mouse)
  396.       Wait Vbl 
  397.       Draw X#,136 To X#,253
  398.       Wait Vbl 
  399.       Draw X#,136 To X#,253
  400.    Until Mouse Key<>0 : Screen Close 1
  401.    Screen 0 : Limit Mouse 
  402.    Gr Writing 1
  403.    N=CSTART+CLENGTH
  404.    FR#=X#/640 : CL#=CLENGTH : CL#=CL#*FR# : C=Int(CL#) : CSTART=CSTART+C
  405.    CLENGTH=N-CSTART
  406.    DISPLAY
  407. End Proc
  408. '
  409. Procedure NEWEND
  410.    Limit Mouse X Hard(1),Y Hard(135) To X Hard(638),Y Hard(195)
  411.    Screen Open 1,320,48,4,Lowres
  412.    Paper 1 : Pen 2 : Repeat : Until Mouse Key=0
  413.    Print : Print : Print "Set new end point with mouse"
  414.    Print "and click either key to fix"
  415.    Screen 0 : Gr Writing 2
  416.    Ink 1
  417.    Repeat 
  418.       X#=X Screen(0,X Mouse)
  419.       Wait Vbl 
  420.       Draw X#,136 To X#,253
  421.       Wait Vbl 
  422.       Draw X#,136 To X#,253
  423.    Until Mouse Key<>0 : Screen Close 1
  424.    Screen 0 : Limit Mouse 
  425.    Gr Writing 1
  426.    FR#=X#/640 : CL#=CLENGTH : CL#=CL#*FR# : CLENGTH=Int(CL#)
  427.    DISPLAY
  428. End Proc
  429. '
  430. Procedure DATMERGE
  431.    Locate 0,0 : Print "Merge"
  432.    If(CSTART+BUFLENGTH)>(OSTART+OLENGTH)
  433.       Reserve As Data 5,CSTART+BUFLENGTH-OSTART
  434.       Copy OSTART,OSTART+OLENGTH To Start(5) : RSTART=CSTART-OSTART
  435.       For A=0 To BUFLENGTH
  436.          BYTE1=Peek(Start(5)+A+RSTART)
  437.          If BYTE1>127
  438.             Add BYTE1,-256
  439.          End If 
  440.          BYTE2=Peek(BUFSTART+A)
  441.          If BYTE2>127
  442.             Add BYTE2,-256
  443.          End If 
  444.          Add BYTE3,BYTE1/2+BYTE2/2
  445.          If BYTE3<0
  446.             Add BYTE3,256
  447.          End If 
  448.          Poke Start(5)+RSTART+A,BYTE3
  449.       Next 
  450.       Erase 2 : Reserve As Chip Data 2,Length(5)
  451.       CSTART=Start(2) : OSTART=CSTART : CLENGTH=Length(2) : OLENGTH=CLENGTH
  452.       Copy Start(5),Start(5)+Length(5) To Start(2) : Erase 5
  453.    Else 
  454.       For A=0 To BUFLENGTH
  455.          BYTE1=Peek(CSTART+A)
  456.          If BYTE1>127
  457.             Add BYTE1,-256
  458.          End If 
  459.          BYTE2=Peek(BUFSTART+A)
  460.          If BYTE2>127
  461.             Add BYTE2,-256
  462.          End If 
  463.          BYTE3=BYTE1/2+BYTE2/2
  464.          If BYTE3<0
  465.             Add BYTE3,256
  466.          End If 
  467.          Poke CSTART+A,BYTE3
  468.       Next 
  469.    End If 
  470.    Locate 0,0 : Print "     "
  471. End Proc
  472. '
  473. Procedure CUT
  474. If(OSTART+OLENGTH)=(CSTART+CLENGTH) Then Pop Proc
  475. NSTART=CSTART+CLENGTH
  476. Copy NSTART,OLENGTH+OSTART To CSTART
  477. CSTART=OSTART
  478. End Proc
  479. '
  480. Procedure TIDY[A]
  481. T=Length(2)+Length(3)+Length(4)
  482. If T>A
  483. Screen Open 1,320,48,4,Lowres
  484. Paper 1 : Print : Print 
  485. Print "Not enough scratch space available"
  486. Print "on current disk. Insert another"
  487. Print "and try again!!!" : Wait 150
  488. Pop Proc
  489. End If 
  490. Bsave "b2",Start(2) To Start(2)+Length(2)
  491. Bsave "b3",Start(3) To Start(3)+Length(3)
  492. Bsave "b4",Start(4) To Start(4)+Length(4)
  493. For A=2 To 5 : Erase A : Next 
  494. Bload "b2",2
  495. Bload "b3",3
  496. Bload "b4",4
  497. Kill "b2" : Kill "b3" : Kill "b4"
  498. End Proc