home *** CD-ROM | disk | FTP | other *** search
/ Sauce 'n' Code 1 / sauce-n-code-01.adf / AMOS_Source / RainbowED.amos / RainbowED.amosSourceCode < prev    next >
AMOS Source Code  |  1995-05-06  |  35KB  |  1,444 lines

  1. ' *************************************************  
  2. ' ***                                           ***
  3. ' ***          --- Rainbow Editor ---           ***
  4. ' ***                                           ***
  5. ' ***              Version:  1.01               ***
  6. ' ***                                           ***
  7. ' ***      ï¿½ by Markus Steinlein Oct/1993       ***  
  8. ' ***                                           ***
  9. ' ***  this program is distributed as CardWare  ***  
  10. ' ***  so if you use it, don`t forget to write  ***  
  11. ' ***              me a postcard!               ***
  12. ' ***   click on the ï¿½ message at top of the    ***
  13. ' ***       screen to get my address.           ***
  14. ' ***                                           ***  
  15. ' ***     you are not allowed to change the     ***
  16. ' ***          source code without my           ***
  17. ' ***            written permission!            ***  
  18. ' ***                                           ***
  19. ' *************************************************  
  20.  
  21. Set Buffer 18
  22. Set Accessory 
  23. Resource Bank 16
  24.  
  25. Data "$VER: RainbowEditor 1.01 (Oct/1993)"
  26.  
  27. If Prg State=-1
  28.    If Not Amos Here
  29.       Amos To Front 
  30.    End If 
  31.    Amos Lock 
  32.    Break Off 
  33.    Request On 
  34. End If 
  35.  
  36. Dim LIST$(31),CL$(3,2,32),_COLOUR(3),_OFFSET(3),_VERTPOS(3),_HEIGHT(3)
  37. Dim PAT(3,2,2,30),_SAVE(12,1),_ON(2),_RB_HEIGHT(3)
  38. Global B,LIST_LENGTH,LIST$(),CL$(),_COLOUR(),_OFFSET(),_VERTPOS(),_HEIGHT()
  39. Global _SCREEN_HEIGHT,_RB_HEIGHT(),_RAINBOW,PAT(),HELP,_SAVE(),PATTERNPOS
  40. Global _COL,_ON(),_MODE,_SO
  41.  
  42. _INIT_VARIABLES
  43.  
  44. Resource Screen Open 0,640,129,0
  45. Ink 6 : Bar 0,0 To 640,32
  46. Resource Unpack 1,0,16
  47.  
  48. _INIT_DIALOG
  49.  
  50. Vdialog(1,0)=Array(LIST$(0))
  51. Vdialog(1,1)=LIST_LENGTH
  52. BUTTON=Dialog Run(1)
  53. _UPDATE_LIST
  54. _DRAW_ALL_VARIABLES
  55. _STATUS_LINE[Resource$(68)]
  56.  
  57. Do 
  58.    _WAIT_EVENT[0]
  59.    _SET_RAINBOW
  60. Loop 
  61.  
  62. Procedure _WAIT_EVENT[B]
  63.    While B=0
  64.       B=Dialog(1)
  65.       If Inkey$=" "
  66.          Dialog Freeze 1
  67.          Screen To Back 0
  68.          Hide 
  69.          Clear Key 
  70.          Repeat 
  71.             Multi Wait 
  72.          Until Mouse Click<>0 or Inkey$=" "
  73.          Screen To Front 0
  74.          Show 
  75.          Screen 0
  76.          Dialog Unfreeze 1
  77.       End If 
  78.    Wend 
  79.    _STATUS_LINE[""]
  80.    If B=4
  81.       If Rdialog(1,4)=1
  82.          _HELP[True]
  83.          Pop Proc
  84.       Else 
  85.          _HELP[False]
  86.       End If 
  87.    End If 
  88.    
  89.    If HELP=True
  90.       _STATUS_LINE[Resource$(B)]
  91.       Pop Proc
  92.    End If 
  93.    
  94.    If B=1
  95.       _QUIT
  96.    End If 
  97.    If B=3
  98.       _COPYRIGHT
  99.    End If 
  100.    If B>4 or B<31
  101.       If B=5
  102.          _TO_PRG
  103.       End If 
  104.       If B=6
  105.          _SAVE_ASCII
  106.       End If 
  107.       If B=7
  108.          _LOAD
  109.       End If 
  110.       If B=8
  111.          _SAVE
  112.       End If 
  113.       If B=9 or B=10
  114.          _PAL_NTSC
  115.       End If 
  116.       If B=11 or B=12
  117.          _CHANGE_SCREEN
  118.       End If 
  119.       If B=13
  120.          _CLEAR_BACK_SCREEN
  121.       End If 
  122.       If B=14
  123.          _LOADIFF
  124.       End If 
  125.       If B=15 or B=16
  126.          _ALTER_SCREEN_HEIGHT[B-15]
  127.       End If 
  128.       If B=17 or B=18
  129.          _ALTER_RB_HEIGHT[B-17]
  130.       End If 
  131.       If B>18 and B<25
  132.          _INSTALL_PRESET[B-18]
  133.       End If 
  134.       If B=25 or B=26
  135.          _ALTER_RAINBOW[B-25]
  136.       End If 
  137.       If B=27 or B=28
  138.          _ALTER_COLOUR[B-27]
  139.       End If 
  140.       If B=29 or B=30
  141.          _ALTER_OFFSET[B-29]
  142.       End If 
  143.    End If 
  144.    If B>30 and B<40
  145.       If B=31 or B=32
  146.          _ALTER_VERTPOS[B-31]
  147.       End If 
  148.       If B=33 or B=34
  149.          _ALTER_HEIGHT[B-33]
  150.       End If 
  151.       If B=35
  152.          _CHANGE_COL
  153.       End If 
  154.       If B=36 or B=37 or B=38
  155.          _SWITCH_COLS[B-36]
  156.       End If 
  157.       If B=39
  158.          _COPY_PATTERN
  159.       End If 
  160.    End If 
  161.    If B>39 and B<52
  162.       If B=40
  163.          _EXCHANGE_PATTERN
  164.       End If 
  165.       If B=41
  166.          _GRAB_PATTERN
  167.       End If 
  168.       If B=42
  169.          _ADD_PATTERN
  170.       End If 
  171.       If B=43
  172.          _REMOVE_PATTERN
  173.       End If 
  174.       If B=44
  175.          _INSERT_PATTERN
  176.       End If 
  177.       If B=45
  178.          _LIST_UP
  179.       End If 
  180.       If B=46
  181.          _LIST_DOWN
  182.       End If 
  183.       If B=47
  184.          _ALTER_N[0]
  185.       End If 
  186.       If B=48
  187.          _ALTER_S[0]
  188.       End If 
  189.       If B=49
  190.          _ALTER_C[0]
  191.       End If 
  192.       If B=50
  193.          _ALTER_N[1]
  194.       End If 
  195.       If B=51
  196.          _ALTER_S[1]
  197.       End If 
  198.    End If 
  199.    If B>51 and B<60
  200.       If B=52
  201.          _ALTER_C[1]
  202.       End If 
  203.       If B=53
  204.          _ANIM
  205.       End If 
  206.       If B>53 and B<59
  207.          Dialog Freeze 1
  208.          If B=54
  209.             _ENTER_SCREEN_HEIGHT
  210.          End If 
  211.          If B=55
  212.             _ENTER_RB_HEIGHT
  213.          End If 
  214.          If B=56
  215.             _ENTER_OFFSET
  216.          End If 
  217.          If B=57
  218.             _ENTER_VERTPOS
  219.          End If 
  220.          If B=58
  221.             _ENTER_HEIGHT
  222.          End If 
  223.          Dialog Unfreeze 1
  224.       End If 
  225.       If B=59
  226.          _LIST_SELECTED
  227.       End If 
  228.    End If 
  229. End Proc
  230. Procedure _QUIT
  231.    Rainbow Del 
  232.    Screen Close 0
  233.    Screen Close 1
  234.    End 
  235. End Proc
  236. Procedure _INSTALL_PRESET[NR]
  237.  
  238.   If NR<4
  239.     SC=_COL
  240.     If NR=1
  241.        _LINES=1
  242.     End If 
  243.     If NR=2
  244.        _LINES=3
  245.     End If 
  246.     If NR=3
  247.        _LINES=9
  248.     End If 
  249.     For I=0 To 2
  250.        CL$(_RAINBOW,I,32)=Str$(1)
  251.        PAT(_RAINBOW,I,0,0)=_LINES
  252.        PAT(_RAINBOW,I,1,0)=1
  253.        PAT(_RAINBOW,I,2,0)=15
  254.        PAT(_RAINBOW,I,0,1)=_LINES
  255.        PAT(_RAINBOW,I,1,1)=-1
  256.        PAT(_RAINBOW,I,2,1)=15
  257.        _COL=I
  258.        _COPY_NSC_TO_COL[0]
  259.        _COPY_NSC_TO_COL[1]
  260.     Next I
  261.     _COL=SC
  262.   End If 
  263.   If NR>3
  264.     If NR=4
  265.        _LINES=1
  266.     End If 
  267.     If NR=5
  268.        _LINES=3
  269.     End If 
  270.     If NR=6
  271.        _LINES=9
  272.     End If 
  273.        CL$(_RAINBOW,_COL,32)=Str$(1)
  274.        PAT(_RAINBOW,_COL,0,0)=_LINES
  275.        PAT(_RAINBOW,_COL,1,0)=1
  276.        PAT(_RAINBOW,_COL,2,0)=15
  277.        PAT(_RAINBOW,_COL,0,1)=_LINES
  278.        PAT(_RAINBOW,_COL,1,1)=-1
  279.        PAT(_RAINBOW,_COL,2,1)=15
  280.        _COPY_NSC_TO_COL[0]
  281.        _COPY_NSC_TO_COL[1]
  282.    End If 
  283.     PATTERNPOS=0
  284.     _DRAW_NSC
  285.     _COPY_COL_TO_LIST[_COL]
  286.     _UPDATE_LIST
  287. End Proc
  288. Procedure _HELP[FLAG]
  289.   If FLAG
  290.     _SAVE(0,0)=9 : _SAVE(0,1)=Rdialog(1,9)
  291.     _SAVE(1,0)=10 : _SAVE(1,1)=Rdialog(1,10)
  292.     _SAVE(2,0)=11 : _SAVE(2,1)=Rdialog(1,11)
  293.     _SAVE(3,0)=12 : _SAVE(3,1)=Rdialog(1,12)
  294.     _SAVE(4,0)=35 : _SAVE(4,1)=Rdialog(1,35)
  295.     _SAVE(5,0)=36 : _SAVE(5,1)=Rdialog(1,36)
  296.     _SAVE(6,0)=37 : _SAVE(6,1)=Rdialog(1,37)
  297.     _SAVE(7,0)=38 : _SAVE(7,1)=Rdialog(1,38)
  298.     _SAVE(8,0)=60 : _SAVE(8,1)=Rdialog(1,60)
  299.     _SAVE(9,0)=39 : _SAVE(9,1)=0
  300.     _SAVE(10,0)=40 : _SAVE(10,1)=0
  301.     _SAVE(11,0)=53 : _SAVE(11,1)=Rdialog(1,53)
  302.     _SAVE(12,0)=5 : _SAVE(12,1)=0
  303.     _CHANGE_MOUSE
  304.        HELP=True
  305.        _STATUS_LINE[Resource$(87)]
  306.   Else 
  307.     For I=0 To 12
  308.       Dialog Update 1,_SAVE(I,0),_SAVE(I,1)
  309.     Next I
  310.       HELP=False
  311.      _STATUS_LINE[Resource$(88)]
  312.     Amal Off 0
  313.     Show 
  314.   End If 
  315. End Proc
  316. Procedure _CHANGE_MOUSE
  317.    Hide 
  318.    Channel 0 To Sprite 0
  319.    Amal 0,"A 0,(1,5)(2,2)(3,2)(4,5)(3,2)(2,2) ;L: Let X=XM; Let Y=YM; Jump L;"
  320.    Amal On 
  321. End Proc
  322. Procedure _CHANGE_SCREEN
  323.    BT=Rdialog(1,11)
  324.    If BT=1
  325.       Screen Open 1,640,290,16,Hires
  326.       Curs Off : Flash Off : Cls 0
  327.       Screen Display 1,,,,_SCREEN_HEIGHT
  328.       _STATUS_LINE[Resource$(83)]
  329.       If _COLOUR(_RAINBOW)>15
  330.          _COLOUR(_RAINBOW)=15
  331.       End If 
  332.       _DRAW_ALL_VARIABLES
  333.    Else 
  334.       Screen Open 1,320,290,32,Lowres
  335.       Curs Off : Flash Off : Cls 0
  336.       Screen Display 1,,,,_SCREEN_HEIGHT
  337.       _STATUS_LINE[Resource$(84)]
  338.    End If 
  339.    Screen To Back 1
  340.    Screen 0
  341. End Proc
  342. Procedure _STATUS_LINE[T$]
  343.    Screen 0
  344.    Ink 6
  345.    Bar 6,116 To 634,124
  346.    Ink 3,6
  347.    Text(640-(Len(T$)*8))/2,123,T$
  348. End Proc
  349. Procedure _COPYRIGHT
  350.    Dialog Freeze 1
  351.    I$=I$+"BAse 0,17; SIze 640,111; SAve 1;"
  352.    I$=I$+"BOx 0,0,79,640,111;"
  353.    I$=I$+"UNpack 426,80,77;"
  354.    I$=I$+"UNpack 28,16,78;"
  355.    I$=I$+"PRint 190,6,69 MEssage,3;"
  356.    I$=I$+"PRint 190,14,61 MEssage,3;"
  357.    I$=I$+"INk 2,0,0; GraphicLine 190,24,612,24;"
  358.    I$=I$+"PRint 190,28,62 MEssage,3;"
  359.    I$=I$+"PRint 190,36,63 MEssage,3;"
  360.    I$=I$+"PRint 190,44,64 MEssage,3;"
  361.    I$=I$+"INk 2,0,0; GraphicLine 190,56,612,56;"
  362.    I$=I$+"PRint 190,60,65 MEssage,3;"
  363.    I$=I$+"PRint 190,68,66 MEssage,3;"
  364.    I$=I$+"PRint 190,76,67 MEssage,3;"
  365.    I$=I$+"BUtton 1,272,98,96,11,0,0,1;[UNpack 0,0,BPos 88+;][ButtonQuit;]"
  366.    I$=I$+"EXit;"
  367.    Dialog Open 2,I$
  368.    DUMMY=Dialog Run(2)
  369.    While Dialog(2)=0
  370.    Wend 
  371.    Dialog Close 2
  372.    Dialog Unfreeze 1
  373. End Proc
  374. Procedure _CLEAR_BACK_SCREEN
  375.    Screen 1
  376.    Cls 0
  377.    Screen 0
  378. End Proc
  379.  
  380. Procedure _PAL_NTSC
  381.    BT=Rdialog(1,9)
  382.    If BT=1
  383.       _SCREEN_HEIGHT=282
  384.       _STATUS_LINE[Resource$(85)]
  385.    Else 
  386.       _SCREEN_HEIGHT=200
  387.       _STATUS_LINE[Resource$(86)]
  388.    End If 
  389.    Ink 6 : Bar 116,91 To 140,99
  390.    _VAR_TO_STRING[_SCREEN_HEIGHT]
  391.    Ink 3,6 : Text 116,98,Param$
  392.    Screen Display 1,,,,_SCREEN_HEIGHT
  393. End Proc
  394. Procedure _ALTER_SCREEN_HEIGHT[FLAG]
  395.    If FLAG=0
  396.       If _SCREEN_HEIGHT<480
  397.          Inc _SCREEN_HEIGHT
  398.       End If 
  399.    End If 
  400.    If FLAG=1
  401.       If _SCREEN_HEIGHT>16
  402.          Dec _SCREEN_HEIGHT
  403.       End If 
  404.    End If 
  405.    Ink 6 : Bar 116,91 To 140,99
  406.    _VAR_TO_STRING[_SCREEN_HEIGHT]
  407.    Ink 3,6 : Text 116,98,Param$
  408.    Screen Display 1,,,,_SCREEN_HEIGHT
  409.    Screen 0
  410. End Proc
  411. Procedure _ALTER_RB_HEIGHT[FLAG]
  412.    If FLAG=0
  413.       If _RB_HEIGHT(_RAINBOW)<480
  414.          Inc _RB_HEIGHT(_RAINBOW)
  415.       End If 
  416.    End If 
  417.    If FLAG=1
  418.       If _RB_HEIGHT(_RAINBOW)>16
  419.          Dec _RB_HEIGHT(_RAINBOW)
  420.       End If 
  421.    End If 
  422.    Screen 0
  423.    Ink 6 : Bar 116,103 To 140,111
  424.    _VAR_TO_STRING[_RB_HEIGHT(_RAINBOW)]
  425.    Ink 3,6 : Text 116,110,Param$
  426. End Proc
  427. Procedure _ALTER_COLOUR[FLAG]
  428.    If FLAG=0
  429.       If Screen Width(1)>600
  430.          _LIMIT=15
  431.         Else 
  432.          _LIMIT=31
  433.       End If 
  434.       If _COLOUR(_RAINBOW)<_LIMIT
  435.          Inc _COLOUR(_RAINBOW)
  436.       End If 
  437.     Else 
  438.       If _COLOUR(_RAINBOW)>-1
  439.          Dec _COLOUR(_RAINBOW)
  440.       End If 
  441.    End If 
  442.    Screen 0
  443.    Ink 6 : Bar 269,67 To 293,75
  444.    _VAR_TO_STRING[_COLOUR(_RAINBOW)]
  445.    Ink 3,6 : Text 269,74,Param$
  446.    If _COLOUR(_RAINBOW)=-1
  447.      _STATUS_LINE[Resource$(90)]
  448.    End If 
  449. End Proc
  450. Procedure _ALTER_OFFSET[FLAG]
  451.    If _SO=-1
  452.       If FLAG=0
  453.          If _OFFSET(_RAINBOW)<_HEIGHT(_RAINBOW)
  454.             Inc _OFFSET(_RAINBOW)
  455.          End If 
  456.       Else 
  457.          If _OFFSET(_RAINBOW)>0
  458.             Dec _OFFSET(_RAINBOW)
  459.          End If 
  460.       End If 
  461.       Screen 0
  462.       Ink 6 : Bar 269,79 To 293,87
  463.       _VAR_TO_STRING[_OFFSET(_RAINBOW)]
  464.       Ink 3,6 : Text 269,86,Param$
  465.    Else 
  466.       _STATUS_LINE[Resource$(113)]
  467.    End If 
  468. End Proc
  469. Procedure _ALTER_VERTPOS[FLAG]
  470.    If FLAG=0
  471.       If _VERTPOS(_RAINBOW)<312
  472.          Inc _VERTPOS(_RAINBOW)
  473.       End If 
  474.     Else 
  475.       If _VERTPOS(_RAINBOW)>20
  476.          Dec _VERTPOS(_RAINBOW)
  477.       End If 
  478.    End If 
  479.    Screen 0
  480.    Ink 6 : Bar 269,91 To 293,99
  481.    _VAR_TO_STRING[_VERTPOS(_RAINBOW)]
  482.    Ink 3,6 : Text 269,98,Param$
  483. End Proc
  484. Procedure _ALTER_HEIGHT[FLAG]
  485.    _SWITCH_OFF_ANIM
  486.    If FLAG=0
  487.       If _HEIGHT(_RAINBOW)<9999
  488.          Inc _HEIGHT(_RAINBOW)
  489.       End If 
  490.    Else 
  491.       If _HEIGHT(_RAINBOW)>16
  492.          Dec _HEIGHT(_RAINBOW)
  493.       End If 
  494.    End If 
  495.    If _OFFSET(_RAINBOW)>_HEIGHT(_RAINBOW)
  496.       _OFFSET(_RAINBOW)=_HEIGHT(_RAINBOW)
  497.    End If 
  498.    Screen 0
  499.    Ink 6 : Bar 269,103 To 293,111
  500.    _VAR_TO_STRING[_HEIGHT(_RAINBOW)]
  501.    Ink 3,6 : Text 269,110,Param$
  502.       Ink 6 : Bar 269,79 To 293,87
  503.       _VAR_TO_STRING[_OFFSET(_RAINBOW)]
  504.       Ink 3,6 : Text 269,86,Param$
  505. End Proc
  506. Procedure _ALTER_RAINBOW[FLAG]
  507.    If FLAG=0
  508.       If _RAINBOW<3
  509.          Inc _RAINBOW
  510.       End If 
  511.    End If 
  512.    If FLAG=1
  513.       If _RAINBOW>0
  514.          Dec _RAINBOW
  515.       End If 
  516.    End If 
  517.    L=Val(CL$(_RAINBOW,_COL,32))
  518.    If PATTERNPOS>L
  519.       PATTERNPOS=L
  520.    End If 
  521.    _DRAW_ALL_VARIABLES
  522.    _CHANGE_NSC
  523. End Proc
  524. Procedure _ALTER_N[FLAG]
  525.    If FLAG=0
  526.       If PAT(_RAINBOW,_COL,0,PATTERNPOS)<999
  527.          Inc PAT(_RAINBOW,_COL,0,PATTERNPOS)
  528.       End If 
  529.    Else 
  530.       If PAT(_RAINBOW,_COL,0,PATTERNPOS)>1
  531.          Dec PAT(_RAINBOW,_COL,0,PATTERNPOS)
  532.       End If 
  533.    End If 
  534.    Screen 0
  535.    Ink 6 : Bar 365,73 To 389,81
  536.    _VAR_TO_STRING[PAT(_RAINBOW,_COL,0,PATTERNPOS)]
  537.    Ink 3,6 : Text 365,80,Param$
  538.    _CHANGE_NSC
  539. End Proc
  540. Procedure _ALTER_S[FLAG]
  541.    If FLAG=0
  542.       If PAT(_RAINBOW,_COL,1,PATTERNPOS)<15
  543.          Inc PAT(_RAINBOW,_COL,1,PATTERNPOS)
  544.       End If 
  545.    Else 
  546.       If PAT(_RAINBOW,_COL,1,PATTERNPOS)>-15
  547.          Dec PAT(_RAINBOW,_COL,1,PATTERNPOS)
  548.       End If 
  549.    End If 
  550.    Screen 0
  551.    Ink 6 : Bar 397,73 To 421,81
  552.    _VAR_TO_STRING[PAT(_RAINBOW,_COL,1,PATTERNPOS)]
  553.    Ink 3,6 : Text 397,80,Param$
  554.    _CHANGE_NSC
  555. End Proc
  556. Procedure _ALTER_C[FLAG]
  557.    If FLAG=0
  558.       If PAT(_RAINBOW,_COL,2,PATTERNPOS)<15
  559.          Inc PAT(_RAINBOW,_COL,2,PATTERNPOS)
  560.       End If 
  561.    Else 
  562.       If PAT(_RAINBOW,_COL,2,PATTERNPOS)>1
  563.          Dec PAT(_RAINBOW,_COL,2,PATTERNPOS)
  564.       End If 
  565.    End If 
  566.    Screen 0
  567.    Ink 6 : Bar 429,73 To 453,81
  568.    _VAR_TO_STRING[PAT(_RAINBOW,_COL,2,PATTERNPOS)]
  569.    Ink 3,6 : Text 429,80,Param$
  570.    _CHANGE_NSC
  571. End Proc
  572. Procedure _ENTER_SCREEN_HEIGHT
  573.    _STATUS_LINE[""]
  574.    Text 10,123,Resource$(114)
  575.    Text 500,123,(Str$(_SCREEN_HEIGHT)-" ")+"  (16-480)"
  576.    _INPUT[3]
  577.    C=Val(Param$)
  578.    _STATUS_LINE[""]
  579.    If C<16
  580.       C=16
  581.       _STATUS_LINE[Resource$(119)]
  582.    End If 
  583.    If C>480
  584.       C=480
  585.       _STATUS_LINE[Resource$(120)]
  586.    End If 
  587.    _SCREEN_HEIGHT=C
  588.    _ALTER_SCREEN_HEIGHT[2]
  589. End Proc
  590. Procedure _ENTER_RB_HEIGHT
  591.    _STATUS_LINE[""]
  592.    Text 10,123,Resource$(115)
  593.    Text 500,123,(Str$(_RB_HEIGHT(_RAINBOW))-" ")+"  (16-480)"
  594.    _INPUT[3]
  595.    C=Val(Param$)
  596.    _STATUS_LINE[""]
  597.    If C<16
  598.       C=16
  599.       _STATUS_LINE[Resource$(119)]
  600.    End If 
  601.    If C>480
  602.       C=480
  603.       _STATUS_LINE[Resource$(120)]
  604.    End If 
  605.    _RB_HEIGHT(_RAINBOW)=C
  606.    _ALTER_RB_HEIGHT[2]
  607. End Proc
  608. Procedure _ENTER_OFFSET
  609.    _STATUS_LINE[""]
  610.    Text 10,123,Resource$(116)
  611.    Text 500,123,(Str$(_OFFSET(_RAINBOW))-" ")+"  (0-LENGTH)"
  612.    _INPUT[4]
  613.    C=Val(Param$)
  614.    _STATUS_LINE[""]
  615.    If C>_HEIGHT(_RAINBOW)
  616.       C=_HEIGHT(_RAINBOW)
  617.       _STATUS_LINE[Resource$(121)]
  618.    End If 
  619.    _OFFSET(_RAINBOW)=C
  620.    _DRAW_ALL_VARIABLES
  621. End Proc
  622. Procedure _ENTER_VERTPOS
  623.    _STATUS_LINE[""]
  624.    Text 10,123,Resource$(117)
  625.    Text 500,123,(Str$(_VERTPOS(_RAINBOW))-" ")+"  (20-270)"
  626.    _INPUT[3]
  627.    C=Val(Param$)
  628.    _STATUS_LINE[""]
  629.    If C<20
  630.       C=20
  631.       _STATUS_LINE[Resource$(122)]
  632.    End If 
  633.    If C>312
  634.       C=312
  635.       _STATUS_LINE[Resource$(123)]
  636.    End If 
  637.    _VERTPOS(_RAINBOW)=C
  638.    _DRAW_ALL_VARIABLES
  639. End Proc
  640. Procedure _ENTER_HEIGHT
  641.    _STATUS_LINE[""]
  642.    Text 10,123,Resource$(118)
  643.    Text 500,123,(Str$(_HEIGHT(_RAINBOW))-" ")+"  (0-9999)"
  644.    _INPUT[4]
  645.    C=Val(Param$)
  646.    If C<16
  647.       C=16
  648.       _STATUS_LINE[Resource$(119)]
  649.    Else 
  650.       _STATUS_LINE[""]
  651.    End If 
  652.    _HEIGHT(_RAINBOW)=C
  653.    If _OFFSET(_RAINBOW)>_HEIGHT(_RAINBOW)
  654.       _OFFSET(_RAINBOW)=_HEIGHT(_RAINBOW)
  655.    End If 
  656.    _DRAW_ALL_VARIABLES
  657. End Proc
  658. Procedure _INPUT[L]
  659.    T$="" : C=0
  660.    LAB:
  661.    Ink 5
  662.    Bar 340+(Len(T$)*8),117 To 348+(Len(T$)*8),123
  663.    A$=""
  664.    While A$=""
  665.       A$=Inkey$
  666.    Wend 
  667.    If Asc(A$)>47 and Asc(A$)<58
  668.       Inc C
  669.       If C<=L
  670.          T$=T$+A$
  671.         Else 
  672.          Dec C
  673.       End If 
  674.    End If 
  675.    If Asc(A$)=8
  676.       Dec C
  677.       If C>-1
  678.         T$=Left$(T$,C)
  679.        Else 
  680.         Inc C
  681.       End If 
  682.    End If 
  683.    If Asc(A$)=13
  684.       Pop Proc[T$]
  685.    End If 
  686.    Ink 6
  687.    Bar 340,116 To 410,124
  688.    Ink 3,6
  689.    Text 340,123,T$
  690.    Goto LAB
  691. End Proc
  692.  
  693. Procedure _LIST_UP
  694.    SP=Rdialog(1,60)
  695.    If SP>0
  696.       Dialog Update 1,60,SP-1
  697.    End If 
  698. End Proc
  699. Procedure _LIST_DOWN
  700.    SP=Rdialog(1,60)
  701.    If SP<LIST_LENGTH-6
  702.       Dialog Update 1,60,SP+1
  703.    End If 
  704. End Proc
  705. Procedure _LIST_SELECTED
  706.    P=Rdialog(1,59)
  707.    PATTERNPOS=P
  708.    If PATTERNPOS=-1
  709.      Wait 1
  710.      _LIST_SELECTED
  711.    End If 
  712.    _DRAW_NSC
  713.    _CHANGE_NSC
  714. End Proc
  715.  
  716. Procedure _INIT_DIALOG
  717.    
  718.    ' Dieses Interface Programm enth�lt die Definitionen aller Kn�pfe
  719.    
  720.    I$=""
  721.    I$=I$+"BUtton  1,0,0,32,16,0,0,1;"
  722.    I$=I$+"          [UNpack 0,0,BPos 2+;][BReturn 0;]"
  723.    I$=I$+"BUtton  2,32,0,376,16,0,0,1;"
  724.    I$=I$+"          [UNpack 0,0,6;][ScreenMove;BReturn 0;]"
  725.    I$=I$+"BUtton  3,408,0,152,16,0,0,1;"
  726.    I$=I$+"          [UNpack 0,0,7;][]"
  727.    I$=I$+"BUtton  4,584,0,56,16,0,0,1;"
  728.    I$=I$+"          [UNpack 0,0,BPos 4+;][]"
  729.    
  730.    I$=I$+"BUtton  5,64,21,64,11,0,0,1;  [UNpack 0,0,BPos 8+;]  []"
  731.    I$=I$+"BUtton  6,64,32,64,11,0,0,1;  [UNpack 0,0,BPos 10+;] [BReturn 0;]"
  732.    I$=I$+"BUtton  7,128,21,64,11,0,0,1; [UNpack 0,0,BPos 12+;] [BReturn 0;] KY 76,0;"
  733.    I$=I$+"BUtton  8,128,32,64,11,0,0,1; [UNpack 0,0,BPos 14+;] [BReturn 0;] KY 83,0;"
  734.    
  735.    I$=I$+"BUtton  9,64,55,64,11,1,0,1;  [UNpack 0,0,BPos 16+;] "
  736.    I$=I$+"          [NoWait; IF BPos 0=; [BReturn 1;] BChange 10,0;]"
  737.    I$=I$+"BUtton 10,128,55,64,11,0,0,1; [UNpack 0,0,BPos 18+;] "
  738.    I$=I$+"          [NoWait; IF BPos 0=; [BReturn 1;] BChange 9,0;]"
  739.    I$=I$+"BUtton 11,64,66,64,11,0,0,1;  [UNpack 0,0,BPos 20+;] "
  740.    I$=I$+"          [NoWait; IF BPos 0=; [BReturn 1;] BChange 12,0;]"
  741.    I$=I$+"BUtton 12,128,66,64,11,1,0,1; [UNpack 0,0,BPos 22+;] "
  742.    I$=I$+"          [NoWait; IF BPos 0=; [BReturn 1;] BChange 11,0;]"
  743.    I$=I$+"BUtton 13,64,77,64,11,0,0,1;  [UNpack 0,0,BPos 24+;] [BReturn 0;]"
  744.    I$=I$+"BUtton 14,128,77,64,11,0,0,1; [UNpack 0,0,BPos 26+;] [BReturn 0;]"
  745.    
  746.    I$=I$+"UNpack 112,90,28;"
  747.    I$=I$+"BUtton 15,144,90,24,11,0,0,1; [UNpack 0,0,BPos 29+;] [NoWait; BReturn 0;]"
  748.    I$=I$+"BUtton 16,168,90,24,11,0,0,1; [UNpack 0,0,BPos 31+;] [NoWait; BReturn 0;]"
  749.    I$=I$+"UNpack 112,102,28;"
  750.    I$=I$+"BUtton 17,144,102,24,11,0,0,1; [UNpack 0,0,BPos 29+;] [NoWait; BReturn 0;]"
  751.    I$=I$+"BUtton 18,168,102,24,11,0,0,1; [UNpack 0,0,BPos 31+;] [NoWait; BReturn 0;]"
  752.    
  753.    I$=I$+"BUtton 19,296,32,16,8,0,0,1;  [UNpack 0,0,BPos 33+;] [BReturn 0;]"
  754.    I$=I$+"BUtton 20,312,32,16,8,0,0,1;  [UNpack 0,0,BPos 35+;] [BReturn 0;]"
  755.    I$=I$+"BUtton 21,328,32,16,8,0,0,1;  [UNpack 0,0,BPos 37+;] [BReturn 0;]"
  756.    I$=I$+"BUtton 22,296,40,16,8,0,0,1;  [UNpack 0,0,BPos 39+;] [BReturn 0;]"
  757.    I$=I$+"BUtton 23,312,40,16,8,0,0,1;  [UNpack 0,0,BPos 41+;] [BReturn 0;]"
  758.    I$=I$+"BUtton 24,328,40,16,8,0,0,1;  [UNpack 0,0,BPos 43+;] [BReturn 0;]"
  759.    
  760.    I$=I$+"UNpack 264,54,28;"
  761.    I$=I$+"BUtton 25,296,54,24,11,0,0,1; [UNpack 0,0,BPos 29+;] [BReturn 0;]"
  762.    I$=I$+"BUtton 26,320,54,24,11,0,0,1; [UNpack 0,0,BPos 31+;] [BReturn 0;]"
  763.    I$=I$+"UNpack 264,66,28;"
  764.    I$=I$+"BUtton 27,296,66,24,11,0,0,1; [UNpack 0,0,BPos 29+;] [NoWait; BReturn 0;]"
  765.    I$=I$+"BUtton 28,320,66,24,11,0,0,1; [UNpack 0,0,BPos 31+;] [NoWait; BReturn 0;]"
  766.    I$=I$+"UNpack 264,78,28;"
  767.    I$=I$+"BUtton 29,296,78,24,11,0,0,1; [UNpack 0,0,BPos 29+;] [NoWait; BReturn 0;]"
  768.    I$=I$+"BUtton 30,320,78,24,11,0,0,1; [UNpack 0,0,BPos 31+;] [NoWait; BReturn 0;]"
  769.    I$=I$+"UNpack 264,90,28;"
  770.    I$=I$+"BUtton 31,296,90,24,11,0,0,1; [UNpack 0,0,BPos 29+;] [NoWait; BReturn 0;]"
  771.    I$=I$+"BUtton 32,320,90,24,11,0,0,1; [UNpack 0,0,BPos 31+;] [NoWait; BReturn 0;]"
  772.    I$=I$+"UNpack 264,102,28;"
  773.    I$=I$+"BUtton 33,296,102,24,11,0,0,1;[UNpack 0,0,BPos 29+;] [NoWait; BReturn 0;]"
  774.    I$=I$+"BUtton 34,320,102,24,11,0,0,1;[UNpack 0,0,BPos 31+;] [NoWait; BReturn 0;]"
  775.    
  776.    I$=I$+"BUtton 35,440,17,96,11,1,0,5; [UNpack 0,0,BPos 45+;] [BReturn BPos 1+;]"
  777.    
  778.    I$=I$+"BUtton 36,536,17,32,11,0,0,1; [UNpack 0,0,BPos 51+;] []"
  779.    I$=I$+"BUtton 37,568,17,32,11,0,0,1; [UNpack 0,0,BPos 53+;] []"
  780.    I$=I$+"BUtton 38,600,17,32,11,0,0,1; [UNpack 0,0,BPos 55+;] []"
  781.    
  782.    I$=I$+"BUtton 39,440,29,64,11,0,0,1; [UNpack 0,0,BPos 57+;] [] KY 67,0;"
  783.    I$=I$+"BUtton 40,504,29,64,11,0,0,1; [UNpack 0,0,BPos 59+;] [] KY 69,0;"
  784.    I$=I$+"BUtton 41,568,29,64,11,0,0,1; [UNpack 0,0,BPos 61+;] [] KY 71,0;"
  785.    I$=I$+"BUtton 42,440,40,64,11,0,0,1; [UNpack 0,0,BPos 63+;] [BReturn 0;] KY 65,0;"
  786.    I$=I$+"BUtton 43,504,40,64,11,0,0,1; [UNpack 0,0,BPos 65+;] [BReturn 0;] KY 82,0;"
  787.    I$=I$+"BUtton 44,568,40,64,11,0,0,1; [UNpack 0,0,BPos 67+;] [BReturn 0;] KY 73,0;"
  788.    
  789.    I$=I$+"BUtton 45,616,53,16,8,0,0,1;  [UNpack 0,0,BPos 73+;] [BReturn 0;] KY 30,0;"
  790.    I$=I$+"BUtton 46,616,61,16,8,0,0,1;  [UNpack 0,0,BPos 75+;] [BReturn 0;] KY 31,0;"
  791.    
  792.    I$=I$+"BUtton 47,360,56,32,16,0,0,1; [UNpack 0,0,BPos 71+;] [NoWait; BReturn 0;]"
  793.    I$=I$+"BUtton 48,392,56,32,16,0,0,1; [UNpack 0,0,BPos 71+;] [NoWait; BReturn 0;]"
  794.    I$=I$+"BUtton 49,424,56,32,16,0,0,1; [UNpack 0,0,BPos 71+;] [NoWait; BReturn 0;]"
  795.    I$=I$+"UNpack 360,72,28;"
  796.    I$=I$+"UNpack 392,72,28;"
  797.    I$=I$+"UNpack 424,72,28;"
  798.    I$=I$+"BUtton 50,360,83,32,16,0,0,1; [UNpack 0,0,BPos 69+;] [NoWait; BReturn 0;]"
  799.    I$=I$+"BUtton 51,392,83,32,16,0,0,1; [UNpack 0,0,BPos 69+;] [NoWait; BReturn 0;]"
  800.    I$=I$+"BUtton 52,424,83,32,16,0,0,1; [UNpack 0,0,BPos 69+;] [NoWait; BReturn 0;]"
  801.    I$=I$+"BUtton 53,408,40,32,11,1,0,3; [UNpack 0,0,BPos 90+;] [BReturn BPos 1+;] KY 89,0;"
  802.    I$=I$+"BUtton 54,7,90,136,11,0,0,1;   [] [BReturn 0;]"
  803.    I$=I$+"BUtton 55,7,102,136,11,0,0,1;  [] [BReturn 0;]"
  804.    I$=I$+"BUtton 56,203,78,92,11,0,0,1;  [] [BReturn 0;]"
  805.    I$=I$+"BUtton 57,203,90,92,11,0,0,1;  [] [BReturn 0;]"
  806.    I$=I$+"BUtton 58,203,102,92,11,0,0,1; [] [BReturn 0;]"
  807.  
  808.    ' 0 VA enth�lt die Addresse der Liste
  809.    ' 1 VA die Anzahl der zug�nglichen Elemente
  810.    
  811.    I$=I$+"ActiveList 59,480,55,15,7,0 VA,0,0,2,3;[]"
  812.    
  813.    I$=I$+"VerticalSlider 60,618,71,12,42,0,0,1 VA 6-,1;"
  814.    I$=I$+"               [ZoneChange 59,ZonePosition;]"
  815.  
  816.    I$=I$+"EXit;"
  817.    
  818.    ' Dialog Channel ï¿½ffnen, aber nicht starten! 
  819.    ' Starten ï¿½bernimmt Hauptprogramm
  820.    
  821.  
  822.    Dialog Open 1,I$,8,3072
  823.    
  824. End Proc
  825. Procedure _INIT_VARIABLES
  826.    If Ntsc
  827.       _SCREEN_HEIGHT=200
  828.    Else 
  829.       _SCREEN_HEIGHT=282
  830.    End If 
  831.    For I=0 To 3
  832.       CL$(I,0,0)="(  1,  0,  1)"
  833.       CL$(I,1,0)="(  1,  0,  1)"
  834.       CL$(I,2,0)="(  1,  0,  1)"
  835.       CL$(I,0,32)=Str$(0)-" "
  836.       CL$(I,1,32)=Str$(0)-" "
  837.       CL$(I,2,32)=Str$(0)-" "
  838.       _COLOUR(I)=-1
  839.       _OFFSET(I)=0
  840.       _VERTPOS(I)=20
  841.       _HEIGHT(I)=_SCREEN_HEIGHT
  842.       _RB_HEIGHT(I)=_SCREEN_HEIGHT
  843.    Next I
  844.    _COLOUR(0)=0
  845.    _RAINBOW=0
  846.    _COL=0
  847.    HELP=False
  848.    _SO=-1
  849.    _ON(0)=True
  850.    _ON(1)=True
  851.    _ON(2)=True
  852.    For I=0 To 3
  853.       PAT(I,0,0,0)=1
  854.       PAT(I,0,1,0)=0
  855.       PAT(I,0,2,0)=1
  856.       PAT(I,1,0,0)=1
  857.       PAT(I,1,1,0)=0
  858.       PAT(I,1,2,0)=1
  859.       PAT(I,2,0,0)=1
  860.       PAT(I,2,1,0)=0
  861.       PAT(I,2,2,0)=1
  862.    Next I
  863.    PATTERNPOS=0
  864.    Screen Open 1,320,290,32,LORES
  865.    Curs Off : Flash Off : Cls 0
  866.    Screen Display 1,,30,,_SCREEN_HEIGHT
  867.    _COPY_COL_TO_LIST[_COL]
  868. End Proc
  869.  
  870. Procedure _DRAW_ALL_VARIABLES
  871.    Ink 6 : Bar 116,91 To 140,99
  872.    _VAR_TO_STRING[_SCREEN_HEIGHT]
  873.    Ink 3,6 : Text 116,98,Param$
  874.    Ink 6 : Bar 116,103 To 140,111
  875.    _VAR_TO_STRING[_RB_HEIGHT(_RAINBOW)]
  876.    Ink 3,6 : Text 116,110,Param$
  877.    Ink 6 : Bar 269,55 To 293,63
  878.    _VAR_TO_STRING[_RAINBOW]
  879.    Ink 3,6 : Text 269,62,Param$
  880.    Ink 6 : Bar 269,67 To 293,75
  881.    _VAR_TO_STRING[_COLOUR(_RAINBOW)]
  882.    Ink 3,6 : Text 269,74,Param$
  883.    Ink 6 : Bar 269,79 To 293,87
  884.    _VAR_TO_STRING[_OFFSET(_RAINBOW)]
  885.    Ink 3,6 : Text 269,86,Param$
  886.    Ink 6 : Bar 269,91 To 293,99
  887.    _VAR_TO_STRING[_VERTPOS(_RAINBOW)]
  888.    Ink 3,6 : Text 269,98,Param$
  889.    Ink 6 : Bar 269,103 To 293,111
  890.    _VAR_TO_STRING[_HEIGHT(_RAINBOW)]
  891.    Ink 3,6 : Text 269,110,Param$
  892.    _DRAW_NSC
  893. End Proc
  894. Procedure _DRAW_NSC
  895.    Screen 0
  896.    Ink 6 : Bar 365,73 To 389,81
  897.    _VAR_TO_STRING[PAT(_RAINBOW,_COL,0,PATTERNPOS)]
  898.    Ink 3,6 : Text 365,80,Param$
  899.    Ink 6 : Bar 397,73 To 421,81
  900.    _VAR_TO_STRING[PAT(_RAINBOW,_COL,1,PATTERNPOS)]
  901.    Ink 3,6 : Text 397,80,Param$
  902.    Ink 6 : Bar 429,73 To 453,81
  903.    _VAR_TO_STRING[PAT(_RAINBOW,_COL,2,PATTERNPOS)]
  904.    Ink 3,6 : Text 429,80,Param$
  905. End Proc
  906.  
  907. Procedure _VAR_TO_STRING[NR]
  908.    S$=Str$(NR)-" "
  909.    If NR<10 and NR>-1
  910.       S$="  "+S$
  911.    End If 
  912.    If NR<100 and NR>9
  913.       S$=" "+S$
  914.    End If 
  915.    If NR>999
  916.       S$="^"+Right$(S$,2)
  917.    End If 
  918.    If NR<0 and NR>-10
  919.       S$=" "+S$
  920.    End If 
  921. End Proc[S$]
  922. Procedure _UPDATE_LIST
  923.   Dialog Update 1,59,,,LIST_LENGTH+1
  924.   If LIST_LENGTH>6
  925.     Dialog Update 1,60,,,LIST_LENGTH-6
  926.    Else 
  927.     Dialog Update 1,60,,,0
  928.   End If 
  929. End Proc
  930. Procedure _COPY_COL_TO_LIST[NR]
  931.    L=Val(CL$(_RAINBOW,NR,32))
  932.    For I=0 To L
  933.       S$=Str$(I)-" "
  934.       If I<10
  935.         S$="0"+S$
  936.       End If 
  937.       LIST$(I)=S$+" "+CL$(_RAINBOW,NR,I)
  938.    Next I
  939.    For I=L+1 To 30
  940.       LIST$(I)="                "
  941.    Next I
  942.    If PATTERNPOS>L
  943.       PATTERNPOS=L
  944.    End If 
  945.    LIST$(PATTERNPOS)=">>"+Right$(LIST$(PATTERNPOS),14)
  946.    LIST_LENGTH=L
  947. End Proc
  948. Procedure _COPY_NSC_TO_COL[POS]
  949.    _VAR_TO_STRING[PAT(_RAINBOW,_COL,0,POS)]
  950.      S1$=Param$
  951.    _VAR_TO_STRING[PAT(_RAINBOW,_COL,1,POS)]
  952.      S2$=Param$
  953.    _VAR_TO_STRING[PAT(_RAINBOW,_COL,2,POS)]
  954.      S3$=Param$
  955.    CL$(_RAINBOW,_COL,POS)="("+S1$+","+S2$+","+S3$+")"
  956. End Proc
  957. Procedure _CHANGE_NSC
  958.   _COPY_NSC_TO_COL[PATTERNPOS]
  959.   _COPY_COL_TO_LIST[_COL]
  960.   _UPDATE_LIST
  961. End Proc
  962. Procedure _CHANGE_COL
  963.     S=Rdialog(1,35)
  964.     If S=1
  965.       _COL=0
  966.     End If 
  967.     If S=3
  968.       _COL=1
  969.     End If 
  970.     If S=5
  971.       _COL=2
  972.     End If 
  973.     S=Val(CL$(_RAINBOW,_COL,32))
  974.     If PATTERNPOS>S
  975.        PATTERNPOS=S
  976.     End If 
  977.     _DRAW_NSC
  978.     _CHANGE_NSC
  979. End Proc
  980. Procedure _SWITCH_COLS[NR]
  981.   If _ON(NR)
  982.      _ON(NR)=False
  983.    Else 
  984.      _ON(NR)=True
  985.   End If 
  986. End Proc
  987. Procedure _ANIM
  988.   If Rdialog(1,53)=3
  989.      _SO=_OFFSET(_RAINBOW)
  990.      _OFFSET(_RAINBOW)=0
  991.      Ink 6 : Bar 269,79 To 293,87
  992.      Ink 3,6 : Text 269,86,"cyc"
  993.      A$="Lo: Let X=0;For R0=0 To "+Str$(_HEIGHT(_RAINBOW))+";Let X=X+1; Next R0; Jump Lo;"
  994.      Channel 1 To Rainbow _RAINBOW
  995.      Amal 1,A$
  996.      Amal On 1
  997.    Else 
  998.      _OFFSET(_RAINBOW)=_SO
  999.      _SO=-1
  1000.      _DRAW_ALL_VARIABLES
  1001.      Amal Off 1
  1002.   End If 
  1003. End Proc
  1004. Procedure _SWITCH_OFF_ANIM
  1005.    If _SO=-1
  1006.       _SO=_OFFSET(_RAINBOW)
  1007.    End If 
  1008.    Dialog Update 1,53,1
  1009.    _ANIM
  1010. End Proc
  1011.  
  1012. Procedure _SET_RAINBOW
  1013.    For I=0 To 3
  1014.       R$="" : G$="" : B$=""
  1015.       If _ON(0)
  1016.          For J=0 To Val(CL$(I,0,32))
  1017.             R$=R$+CL$(I,0,J)
  1018.          Next J
  1019.       End If 
  1020.       If _ON(1)
  1021.          For J=0 To Val(CL$(I,1,32))
  1022.             G$=G$+CL$(I,1,J)
  1023.          Next J
  1024.       End If 
  1025.       If _ON(2)
  1026.          For J=0 To Val(CL$(I,2,32))
  1027.             B$=B$+CL$(I,2,J)
  1028.          Next J
  1029.       End If 
  1030.       R$=R$-" "
  1031.       G$=G$-" "
  1032.       B$=B$-" "
  1033.       If _COLOUR(I)>-1
  1034.          Set Rainbow I,_COLOUR(I),_HEIGHT(I),R$,G$,B$
  1035.          If _SO=-1
  1036.             Rainbow I,_OFFSET(I),_VERTPOS(I),_RB_HEIGHT(I)
  1037.          Else 
  1038.             Rainbow I,,_VERTPOS(I),_RB_HEIGHT(I)
  1039.          End If 
  1040.       Else 
  1041.          Rainbow Del I
  1042.       End If 
  1043.    Next I
  1044. End Proc
  1045.  
  1046. Procedure _ADD_PATTERN
  1047.    L=Val(CL$(_RAINBOW,_COL,32))
  1048.    Inc L
  1049.    If L=31
  1050.       _STATUS_LINE[Resource$(89)]
  1051.       Dec L
  1052.    Else 
  1053.       CL$(_RAINBOW,_COL,L)="(  1,  0,  1)"
  1054.       PAT(_RAINBOW,_COL,0,L)=1
  1055.       PAT(_RAINBOW,_COL,1,L)=0
  1056.       PAT(_RAINBOW,_COL,2,L)=1
  1057.       CL$(_RAINBOW,_COL,32)=Str$(L)
  1058.       PATTERNPOS=L
  1059.       _DRAW_NSC
  1060.       _COPY_COL_TO_LIST[_COL]
  1061.       _UPDATE_LIST
  1062.    End If 
  1063. End Proc
  1064. Procedure _REMOVE_PATTERN
  1065.    L=Val(CL$(_RAINBOW,_COL,32))
  1066.    Dec L
  1067.    If L>-1
  1068.       For I=PATTERNPOS+1 To L+1
  1069.          CL$(_RAINBOW,_COL,I-1)=CL$(_RAINBOW,_COL,I)
  1070.          For J=0 To 2
  1071.             PAT(_RAINBOW,_COL,J,I+1)=PAT(_RAINBOW,_COL,J,I)
  1072.          Next J
  1073.       Next I
  1074.       CL$(_RAINBOW,_COL,32)=Str$(L)
  1075.       CL$(_RAINBOW,_COL,L+1)="(  1,  0,  1)"
  1076.       PAT(_RAINBOW,_COL,0,L+1)=1
  1077.       PAT(_RAINBOW,_COL,1,L+1)=0
  1078.       PAT(_RAINBOW,_COL,2,L+1)=1
  1079.       If PATTERNPOS>L
  1080.          PATTERNPOS=L
  1081.       End If 
  1082.       If L>5
  1083.          Dialog Update 1,60,L-6
  1084.       End If 
  1085.    Else 
  1086.       Inc L
  1087.       CL$(_RAINBOW,_COL,0)="(  1,  0,  1)"
  1088.       PAT(_RAINBOW,_COL,0,0)=1
  1089.       PAT(_RAINBOW,_COL,1,0)=0
  1090.       PAT(_RAINBOW,_COL,2,0)=1
  1091.    End If 
  1092.    _DRAW_NSC
  1093.    _COPY_COL_TO_LIST[_COL]
  1094.    _UPDATE_LIST
  1095. End Proc
  1096. Procedure _INSERT_PATTERN
  1097.    L=Val(CL$(_RAINBOW,_COL,32))
  1098.    Inc L
  1099.    If L=31
  1100.       _STATUS_LINE[Resource$(89)]
  1101.       Dec L
  1102.    Else 
  1103.       For I=L-1 To PATTERNPOS Step -1
  1104.          CL$(_RAINBOW,_COL,I+1)=CL$(_RAINBOW,_COL,I)
  1105.          For J=0 To 2
  1106.             PAT(_RAINBOW,_COL,J,I+1)=PAT(_RAINBOW,_COL,J,I)
  1107.          Next J
  1108.       Next I
  1109.       CL$(_RAINBOW,_COL,32)=Str$(L)
  1110.       CL$(_RAINBOW,_COL,PATTERNPOS)="(  1,  0,  1)"
  1111.       PAT(_RAINBOW,_COL,0,PATTERNPOS)=1
  1112.       PAT(_RAINBOW,_COL,1,PATTERNPOS)=0
  1113.       PAT(_RAINBOW,_COL,2,PATTERNPOS)=1
  1114.       _DRAW_NSC
  1115.       _COPY_COL_TO_LIST[_COL]
  1116.       _UPDATE_LIST
  1117.    End If 
  1118. End Proc
  1119. Procedure _COPY_PATTERN
  1120.    Change Mouse 8
  1121.  LAB:
  1122.    D=0
  1123.    While D=0
  1124.      D=Dialog(1)
  1125.    Wend 
  1126.    If D=45
  1127.      _LIST_UP
  1128.      Goto LAB
  1129.    End If 
  1130.    If D=46
  1131.      _LIST_DOWN
  1132.      Goto LAB
  1133.    End If 
  1134.    If D=60
  1135.      Goto LAB
  1136.    End If 
  1137.    If D=59
  1138.      POS=Rdialog(1,D)
  1139.      If POS<>PATTERNPOS
  1140.         CL$(_RAINBOW,_COL,POS)=CL$(_RAINBOW,_COL,PATTERNPOS)
  1141.         For I=0 To 2
  1142.             PAT(_RAINBOW,_COL,I,POS)=PAT(_RAINBOW,_COL,I,PATTERNPOS)
  1143.         Next I
  1144.      End If 
  1145.      PATTERNPOS=POS
  1146.      _DRAW_NSC
  1147.      _COPY_COL_TO_LIST[_COL]
  1148.      _UPDATE_LIST
  1149.    Else 
  1150.      _STATUS_LINE[Resource$(92)]
  1151.      Change Mouse 1
  1152.      Dialog Update 1,39,0
  1153.      _WAIT_EVENT[D]
  1154.    End If 
  1155.    Change Mouse 1
  1156.    Dialog Update 1,39,0
  1157. End Proc
  1158. Procedure _EXCHANGE_PATTERN
  1159.    Change Mouse 8
  1160.  LAB:
  1161.    D=0
  1162.    While D=0
  1163.      D=Dialog(1)
  1164.    Wend 
  1165.    If D=45
  1166.      _LIST_UP
  1167.      Goto LAB
  1168.    End If 
  1169.    If D=46
  1170.      _LIST_DOWN
  1171.      Goto LAB
  1172.    End If 
  1173.    If D=60
  1174.      Goto LAB
  1175.    End If 
  1176.    If D=59
  1177.      POS=Rdialog(1,D)
  1178.      If POS<>PATTERNPOS
  1179.         Swap CL$(_RAINBOW,_COL,POS),CL$(_RAINBOW,_COL,PATTERNPOS)
  1180.         For I=0 To 2
  1181.             Swap PAT(_RAINBOW,_COL,I,POS),PAT(_RAINBOW,_COL,I,PATTERNPOS)
  1182.         Next I
  1183.      End If 
  1184.      PATTERNPOS=POS
  1185.      _DRAW_NSC
  1186.      _COPY_COL_TO_LIST[_COL]
  1187.      _UPDATE_LIST
  1188.    Else 
  1189.      _STATUS_LINE[Resource$(93)]
  1190.      Change Mouse 1
  1191.      Dialog Update 1,40,0
  1192.      _WAIT_EVENT[D]
  1193.    End If 
  1194.    Change Mouse 1
  1195.    Dialog Update 1,40,0
  1196. End Proc
  1197. Procedure _GRAB_PATTERN
  1198.    For I=0 To 2
  1199.       NR=_ON(I)
  1200.       Exit If NR=False
  1201.    Next I
  1202.    If NR=True
  1203.       _STATUS_LINE[Resource$(94)]
  1204.       Dialog Update 1,41,0
  1205.       Pop Proc
  1206.    End If 
  1207.    If I=_COL
  1208.       _STATUS_LINE[Resource$(95)]
  1209.       Dialog Update 1,41,0
  1210.       Pop Proc
  1211.    End If 
  1212.    NR=I
  1213.    _COPY_COL_TO_LIST[NR]
  1214.    _UPDATE_LIST
  1215.    Change Mouse 9
  1216.    A$="L:Let X=XM+16; Let Y=YM; Jump L;"
  1217.    Sprite 1,0,0,7
  1218.    Channel 2 To Sprite 1
  1219.    Amal 2,A$
  1220.    Amal On 2
  1221.    LAB:
  1222.    D=0
  1223.    While D=0
  1224.       D=Dialog(1)
  1225.    Wend 
  1226.    If D=45
  1227.       _LIST_UP
  1228.       Goto LAB
  1229.    End If 
  1230.    If D=46
  1231.       _LIST_DOWN
  1232.       Goto LAB
  1233.    End If 
  1234.    If D=60
  1235.       Goto LAB
  1236.    End If 
  1237.    If D=59
  1238.       POS=Rdialog(1,D)
  1239.       CL$(_RAINBOW,_COL,PATTERNPOS)=CL$(_RAINBOW,NR,POS)
  1240.       For I=0 To 2
  1241.          PAT(_RAINBOW,_COL,I,PATTERNPOS)=PAT(_RAINBOW,NR,I,POS)
  1242.       Next I
  1243.       _DRAW_NSC
  1244.       _COPY_COL_TO_LIST[_COL]
  1245.       _UPDATE_LIST
  1246.    Else 
  1247.       _STATUS_LINE[Resource$(96)]
  1248.       Change Mouse 1
  1249.       Amal Off 2 : Sprite Off 1
  1250.       Dialog Update 1,41,0
  1251.       _WAIT_EVENT[D]
  1252.    End If 
  1253.    Change Mouse 1
  1254.    Amal Off 2 : Sprite Off 1
  1255.    Dialog Update 1,41,0
  1256. End Proc
  1257.  
  1258. Procedure _SAVE
  1259.    _SWITCH_OFF_ANIM
  1260.    F$=Fsel$("*.RBD","",Resource$(98),Resource$(99))
  1261.    If F$=""
  1262.      _STATUS_LINE[Resource$(101)]
  1263.      Pop Proc
  1264.    End If 
  1265.    Open Out 1,F$
  1266.    Print #1,"AMOSPro Rainbow Editor ï¿½ by Markus Steinlein"
  1267.    For I=0 To 3
  1268.       Print #1,_RB_HEIGHT(I)
  1269.       Print #1,_COLOUR(I)
  1270.       Print #1,_OFFSET(I)
  1271.       Print #1,_VERTPOS(I)
  1272.       Print #1,_HEIGHT(I)
  1273.       For J=0 To 2
  1274.          Print #1,Val(CL$(I,J,32))
  1275.          For K=0 To Val(CL$(I,J,32))
  1276.             For L=0 To 2
  1277.                Print #1,PAT(I,J,L,K)
  1278.             Next L
  1279.          Next K
  1280.       Next J
  1281.    Next I
  1282.    Close 1
  1283.    _STATUS_LINE[Resource$(100)]
  1284. End Proc
  1285. Procedure _LOAD
  1286.    _SWITCH_OFF_ANIM
  1287.    F$=Fsel$("*.RBD","",Resource$(97),Resource$(99))
  1288.    If F$=""
  1289.       _STATUS_LINE[Resource$(102)]
  1290.       Pop Proc
  1291.    End If 
  1292.    If Exist(F$)
  1293.       Open In 1,F$
  1294.       Trap Input #1,K$
  1295.       If Errtrap or K$<>"AMOSPro Rainbow Editor ï¿½ by Markus Steinlein"
  1296.          _STATUS_LINE[Resource$(104)]
  1297.          Close 1
  1298.          Pop Proc
  1299.       End If 
  1300.       For I=0 To 3
  1301.          Input #1,_RB_HEIGHT(I)
  1302.          Input #1,_COLOUR(I)
  1303.          Input #1,_OFFSET(I)
  1304.          Input #1,_VERTPOS(I)
  1305.          Input #1,_HEIGHT(I)
  1306.          For J=0 To 2
  1307.             Input #1,L
  1308.             CL$(I,J,32)=Str$(L)
  1309.             For K=0 To L
  1310.                For M=0 To 2
  1311.                   Input #1,PAT(I,J,M,K)
  1312.                   _RAINBOW=I
  1313.                   _COL=J
  1314.                Next M
  1315.                _COPY_NSC_TO_COL[K]
  1316.             Next K
  1317.          Next J
  1318.       Next I
  1319.       _RAINBOW=0
  1320.       _COL=0
  1321.       _DRAW_ALL_VARIABLES
  1322.       _DRAW_NSC
  1323.       _COPY_COL_TO_LIST[_COL]
  1324.       _UPDATE_LIST
  1325.       Close 1
  1326.    Else 
  1327.       _STATUS_LINE[Resource$(103)]
  1328.       Pop Proc
  1329.    End If 
  1330. End Proc
  1331. Procedure _SAVE_ASCII
  1332.    _SWITCH_OFF_ANIM
  1333.    F$=Fsel$("*.ASC","",Resource$(106),Resource$(107))
  1334.    If F$=""
  1335.       _STATUS_LINE[Resource$(108)]
  1336.       Pop Proc
  1337.    End If 
  1338.    Open Out 1,F$
  1339.    _MODE=0
  1340.    _PUTTER
  1341.    Close 1
  1342.    _STATUS_LINE[Resource$(109)]
  1343. End Proc
  1344. Procedure _TO_PRG
  1345.    _SWITCH_OFF_ANIM
  1346.    If Prg Under<>1
  1347.       _STATUS_LINE[Resource$(110)]
  1348.       Dialog Update 1,5,0
  1349.       Pop Proc
  1350.    End If 
  1351.    Call Editor 10
  1352.    _MODE=1
  1353.    Dialog Freeze 1
  1354.    _STATUS_LINE[Resource$(112)]
  1355.    _PUTTER
  1356.    Dialog Unfreeze 1
  1357.    Dialog Update 1,5,0
  1358.    _STATUS_LINE[Resource$(111)]
  1359. End Proc
  1360. Procedure _OUTPUT[T$]
  1361.    If _MODE=0
  1362.       Print #1,T$
  1363.     Else 
  1364.       Call Editor 29
  1365.       Call Editor 71,,T$
  1366.       Call Editor 10
  1367.    End If 
  1368. End Proc
  1369. Procedure _PUTTER
  1370.    _OUTPUT["Procedure _set_rainbow"]
  1371.    For I=0 To 3
  1372.       R$="" : G$="" : B$=""
  1373.       If _ON(0)
  1374.          For J=0 To Val(CL$(I,0,32))
  1375.             R$=R$+CL$(I,0,J)
  1376.          Next J
  1377.       End If 
  1378.       If _ON(1)
  1379.          For J=0 To Val(CL$(I,1,32))
  1380.             G$=G$+CL$(I,1,J)
  1381.          Next J
  1382.       End If 
  1383.       If _ON(2)
  1384.          For J=0 To Val(CL$(I,2,32))
  1385.             B$=B$+CL$(I,2,J)
  1386.          Next J
  1387.       End If 
  1388.       R$=R$-" "
  1389.       G$=G$-" "
  1390.       B$=B$-" "
  1391.       If _COLOUR(I)>-1
  1392.          If Len(R$)>200
  1393.             _SPLIT[0,R$]
  1394.          Else 
  1395.             _OUTPUT['   R$="'+R$+'"']
  1396.          End If 
  1397.          If Len(G$)>200
  1398.             _SPLIT[1,G$]
  1399.          Else 
  1400.             _OUTPUT['   G$="'+G$+'"']
  1401.          End If 
  1402.          If Len(B$)>200
  1403.             _SPLIT[2,B$]
  1404.          Else 
  1405.             _OUTPUT['   B$="'+B$+'"']
  1406.          End If 
  1407.          _OUTPUT["   Set Rainbow "+Str$(I)+","+Str$(_COLOUR(I))+","+Str$(_HEIGHT(I))+",R$,G$,B$"]
  1408.          _OUTPUT["   Rainbow "+Str$(I)+","+Str$(_OFFSET(I))+","+Str$(_VERTPOS(I))+","+Str$(_RB_HEIGHT(I))]
  1409.          _OUTPUT['   R$="" : G$="" : B$=""']
  1410.       End If 
  1411.    Next I
  1412.    _OUTPUT["End Proc"]
  1413. End Proc
  1414. Procedure _SPLIT[NR,T$]
  1415.    If NR=0
  1416.      S$='   R$=R$+"'
  1417.    End If 
  1418.    If NR=1
  1419.      S$='   G$=G$+"'
  1420.    End If 
  1421.    If NR=2
  1422.      S$='   B$=B$+"'
  1423.    End If 
  1424.    _OUTPUT[S$+Left$(T$,200)+'"']
  1425.    R$=Right$(T$,Len(T$)-200)
  1426.    If Len(R$)>200
  1427.       _SPLIT[NR,R$]
  1428.    End If 
  1429.    _OUTPUT[S$+R$+'"']
  1430. End Proc
  1431. Procedure _LOADIFF
  1432.    Screen 1
  1433.    Cls 0
  1434.    If Screen Width=320
  1435.       Trap Load Iff Fsel$("*.IFF","",Resource$(80),Resource$(81))
  1436.    Else 
  1437.       Trap Load Iff Fsel$("*.IFF","",Resource$(80),Resource$(82))
  1438.    End If 
  1439.    Screen 0
  1440.    E=Errtrap
  1441.    If E
  1442.       _STATUS_LINE[Err$(E)]
  1443.    End If 
  1444. End Proc