home *** CD-ROM | disk | FTP | other *** search
/ Amiga Computing 66 / ac066b.adf / AMOS.DMS / AMOS.adf / Sprite_Editor1_3.AMOS / Sprite_Editor1_3.amosSourceCode < prev   
AMOS Source Code  |  1993-03-15  |  40KB  |  1,986 lines

  1. Set Buffer 11
  2. Bgrab 1
  3. A#=1.0
  4. 'Break Off 
  5. On Error Goto GENERALERROR
  6. ' do a Close Editor here if you desperately want more memory, but be 
  7. ' warned, there is then no memory checking, so it could bomb out ! 
  8. _NTSC=0 : Rem for NTSC version, set NTSC to 1  
  9. Dim C(7),C2(7),C3(7),SX(7),ST(7),NC(7),RGB(63),REZ$(7),OK$(1)
  10. Dim LINE$(5),BUTTON$(2) : Rem for use with alert box routine 
  11. OK$(0)=" " : OK$(1)="*"
  12. NCOLS=16 : XSIZE=32 : YSIZE=32
  13. CVOL=62 : Rem click volume 
  14. APRD=6
  15. AIR=4
  16. STXSIZE=32 : STYSIZE=32 : STNCOLS=16
  17. TPWIN=0
  18. LFTWIN=0
  19. REZ=1
  20. XS=1
  21. IN=1
  22. FC=15
  23. BC=2
  24. FP=0
  25. LEFTC=1 : RIGHTC=0
  26. MDE=0 : Rem draw mode
  27. Get Block 1,0,0,1,1 : Get Block 2,0,0,1,1
  28. Fade 1
  29. Rem Amos Sprite Editor V1.1 for AMOS1.3  
  30. Rem By Aaron Fothergill
  31. Rem Shadow Software 1990 
  32. Rem for Mandarin/Jawx Software 
  33. For A=0 To 7 : Read SX(A),NC(A),ST(A),REZ$(A) : Next A
  34. Data 320,8,Lowres,"Lowres 8 "
  35. Data 320,16,Lowres,"Lowres 16"
  36. Data 320,32,Lowres,"Lowres 32"
  37. Data 320,64,Lowres,"Lowres 64"
  38. Data 640,2,Hires,"Hires 2  "
  39. Data 640,4,Hires,"Hires 4  "
  40. Data 640,8,Hires,"Hires 8  "
  41. Data 640,16,Hires,"Hires 16 "
  42. Auto View Off 
  43. TITLEBAR
  44. Auto View Off 
  45. Gosub SHWPSTE
  46. CHANGEREZ
  47. SPDISP=0
  48. Screen To Front 1
  49. Limit Mouse 
  50. Screen 1
  51. CHANGEREZ
  52. HILITE[21]
  53. Screen 0
  54. Limit Mouse 
  55. Reserve Zone 1
  56. SETBUTZONE
  57. SHWSPRITES[IN]
  58. SHWFILL[FP]
  59. Rem set up drawing screen zones
  60. Gosub STORE
  61. Do 
  62.    Screen 1
  63.    If XSIZE mod 16>0
  64.       XSIZE=(XSIZE/16)*16+16
  65.       XSIZE=Min(96,XSIZE)
  66.    End If 
  67.    If XSIZE>32 or YSIZE>32
  68.       BIGSPR=1
  69.       TPWO=-1 : LFTWO=-1
  70.       LFTWIN=Max(0,Min(LFTWIN,XSIZE-32))
  71.       TPWIN=Max(0,Min(TPWIN,YSIZE-32))
  72.    Else 
  73.       BIGSPR=0
  74.       LFTWIN=0
  75.       TPWIN=0
  76.    End If 
  77.    If NREZ=1
  78.       If SPDISP=1
  79.          Put Block 5,160*XS,7
  80.          SPDISP=0
  81.       End If 
  82.       Get Block 1,160*XS,7,XSIZE,YSIZE
  83.    End If 
  84.    Wait Vbl 
  85.    Reserve Zone 8
  86.    Set Zone 1,278*XS,3 To 310*XS,130
  87.    FASTZOOM
  88.    BXES
  89.    FASTZOOM
  90.    BIGBARS
  91.    PALDRAW
  92.    Screen To Front 1
  93.    Auto View On 
  94.    NREZ=0
  95.    MOF=1
  96.    FXSCRN
  97.    INO=IN
  98.    While NREZ=0
  99.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse) : K=Mouse Key
  100.       SCRNCHK[X,Y]
  101.       Z=Mouse Zone : X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  102.       SHWSPO=SHWSP
  103.       If SCRN=0 and((Z>44 and Z<50) or Z=39 or Z=40 or Z=9) and SPDISP=0 and IN<=Length(1)
  104.          GMDE=0
  105.          If Z=9
  106.             GMDE=1
  107.          End If 
  108.          SHWSP=1
  109.       Else 
  110.          SHWSP=0
  111.       End If 
  112.       If SPDISP=0
  113.          If IN<>INO
  114.             SHWSPO=-1
  115.          End If 
  116.          INO=IN
  117.          If SHWSP<>SHWSPO and SPDISP=0
  118.             If SHWSP=1
  119.                Screen 1
  120.                If SHWSPO=0
  121.                   Get Block 5,160*XS,7,96,128
  122.                   B5=1
  123.                End If 
  124.                Clip 160*XS,7 To 160*XS+95,135
  125.                Ink 0 : Bar 160*XS,7 To 160*XS+95,135
  126.                If GMDE=0
  127.                   Paste Bob 160*XS,7,IN
  128.                Else 
  129.                   Sprite 8,X Hard(1,160*XS),Y Hard(1,7),IN
  130.                End If 
  131.                Screen 0
  132.             Else 
  133.                If B5
  134.                   TS=Screen
  135.                   Screen 1
  136.                   Put Block 5,160*XS,7
  137.                   Sprite Off 
  138.                   Clip 
  139.                   Screen TS
  140.                End If 
  141.             End If 
  142.          End If 
  143.       End If 
  144.       If((SCRN=0 and Z>10 and Z<19) or MDE=12) and SPDISP=0 and MDE<>13
  145.          TS=Screen
  146.          Screen 1
  147.          XT=X : YT=Y : HTX=HX : HTY=HY
  148.          X=(HX-LFTWIN)*MP+16 : Y=7+(HY-TPWIN)*MP
  149.          Gosub GTBACK
  150.          MT=MDE
  151.          LC=LEFTC : RC=RIGHTC : LEFTC=NCOLS-1-Point(160*XS+HX,7+HY) : RIGHTC=LEFTC : MDE=0
  152.          Gosub PLTPNT
  153.          Wait Vbl 
  154.          Put Block 1,160*XS,7
  155.          X=XT : Y=YT : HX=HTX : HY=HTY
  156.          MDE=MT : LEFTC=LC : RIGHTC=RC
  157.          FASTZOOM
  158.          Screen TS
  159.       End If 
  160.       A$=Inkey$
  161.       If A$<>""
  162.  SC=Scancode
  163. SH=Scanshift
  164.          Gosub KEYIN
  165.       End If 
  166.       K=Mouse Key
  167.       If K=0
  168.          MOF=1 : TICK=0
  169.       Else 
  170.          KPR=1
  171.       End If 
  172.       If K=2 and MDE<>10
  173.          DRG=1
  174.       End If 
  175.       If(X<>XMSO or Y<>YMSO) and KPR=0 and SHWSP=0
  176.          SC=Screen
  177.          Screen 1
  178.          Put Block 1,160*XS,7
  179.          FASTZOOM
  180.          Screen SC
  181.       End If 
  182.       If SCRN=1 and SHWSP=0 and K=0 and Z=2 and DRG=0 and MDE>0 and SPDISP=0 and MDE<>8 and MDE<>13
  183.          LPLT=1
  184.          TIM=Timer
  185.          If X<>XMSO or Y<>YMSO or(TIM mod 10<=4 and FLSH=0)
  186.             FLSH=1
  187.             If KPR=0
  188.                Put Block 1,160*XS,7
  189.             End If 
  190.             Gosub GTBACK
  191.             KPR=0
  192.             XT=X : YT=Y
  193.             Gosub PLTPNT
  194.             Wait Vbl 
  195.             Y=YT : X=XT
  196.             FASTZOOM
  197.          Else 
  198.             If TIM mod 10>4
  199.                FLSH=0
  200.             End If 
  201.          End If 
  202.       Else 
  203.          If LPLT=1
  204.             LPLT=0
  205.             SC=Screen
  206.             Screen 1
  207.             Put Block 1,160*XS,7
  208.             FASTZOOM
  209.             Screen SC
  210.          End If 
  211.       End If 
  212.       YMSO=Y : XMSO=X
  213.       If SCRN=1 and K>0 and SPDISP=0
  214.          Rem see what happens when you put Z=mouse zone here !
  215.          If Z=1
  216.             Gosub STORE
  217.             PICKCOL[X,Y,K]
  218.          End If 
  219.          If Z=2
  220.             REAL=1
  221.             Gosub PLTPNT
  222.             REAL=0
  223.             Gosub GTBACK
  224.             PLT=1
  225.          End If 
  226.          If Z=3
  227.             If MDE<>13
  228.                If K=1
  229.                   RESIZE[X,Y,K]
  230.                End If 
  231.             Else 
  232.                REDUCEZOOM[X,Y,K]
  233.             End If 
  234.          End If 
  235.       End If 
  236.       If SCRN=0 and K
  237.          Gosub BUTTONS
  238.       End If 
  239.    Wend 
  240. Loop 
  241. KEYIN:
  242. A$=Upper$(A$)
  243. KEYIN$=A$
  244. SH=SH and 3
  245. If BIGSPR
  246.    FZ=0
  247.    If SC=76 and SH=0
  248.       TPWIN=Max(0,TPWIN-16)
  249.       FZ=1
  250.    End If 
  251.    If SC=77 and SH=0
  252.       TPWIN=Max(0,Min(YSIZE-32,TPWIN+16))
  253.       FZ=1
  254.    End If 
  255.    If SC=79 and SH=0
  256.       LFTWIN=Max(0,LFTWIN-16)
  257.       FZ=1
  258.    End If 
  259.    If SC=78 and SH=0
  260.       LFTWIN=Max(0,Min(XSIZE-32*XS,LFTWIN+16))
  261.       FZ=1
  262.    End If 
  263.    If FZ
  264.       FASTZOOM
  265.       BIGBARS
  266.    End If 
  267. End If 
  268. If SC=76 and SH
  269. Bell 
  270.    Gosub GEDIT
  271.    SHWSPRITES[IN]
  272. End If 
  273. If SC=77 and SH
  274. Bell 
  275.    Gosub SPGRAB
  276. End If 
  277. If SC=79 and SH
  278. Bell 
  279.    TI=IN-1
  280.    Gosub GEDIT
  281.    IN=Max(1,TI)
  282.    Gosub SPGRAB
  283.    SHWSPRITES[IN]
  284. End If 
  285. If SC=78 and SH
  286. Bell 
  287.    Gosub GEDIT
  288.    If IN<Length(1)
  289.       Inc IN
  290.       Gosub SPGRAB
  291.    End If 
  292.    SHWSPRITES[IN]
  293. End If 
  294. If MDE<>6
  295.    If SH=0 and SC>79 and SC<90
  296.       If IN+SC-80<=Length(1)
  297. Bell 
  298.          TI=IN : IN=IN+SC-80
  299.          Gosub SPGRAB
  300.          IN=TI
  301.       End If 
  302.       SHWSPRITES[IN]
  303.    End If 
  304.    If SH>0 and SC>79 and SC<90
  305.       If IN+SC-80<=Length(1)+1
  306. Bell 
  307.          TI=IN : IN=IN+SC-80
  308.          Gosub GEDIT
  309.          IN=TI
  310.       End If 
  311.       SHWSPRITES[IN]
  312.    End If 
  313.    If A$="L"
  314.       Gosub LDSPRITES : A$=""
  315.    End If 
  316.    If A$="S" and Length(1)>0
  317.       Gosub SVSPRITES : A$=""
  318.    End If 
  319. Else 
  320.    Gosub GTTXT
  321. End If 
  322. Return 
  323. LDSPRITES:
  324. Sprite Off 
  325. On Error Goto DISKERROR
  326. F$=""
  327. While F$=""
  328.    F$=Fsel$("*.ABK","","Load A Sprite Bank")
  329.    If F$<>""
  330.       A$=Upper$(F$)
  331.       If Right$(A$,4)=".ABK"
  332.          Erase 1
  333.          Load F$,1
  334.          IN=1
  335.          A$="" : For A=0 To 7 : A$=A$+Chr$(Peek(Start(1)-8+A)) : Next A
  336.          If A$<>"Sprites "
  337.             F$=""
  338.             Erase 1
  339.          End If 
  340.       Else 
  341.          F$=""
  342.       End If 
  343.    Else 
  344.       F$=" "
  345.    End If 
  346. Wend 
  347. NREZ=1
  348. If Length(1)>0
  349.    TS=Screen
  350.    Screen 1
  351.    Get Sprite Palette 
  352.    Screen TS
  353. End If 
  354. On Error Goto GENERALERROR
  355. Return 
  356. SVSPRITES:
  357. Sprite Off 
  358. On Error Goto DISKERROR
  359. F$="" : While F$=""
  360.    F$=Fsel$("*.ABK","","Save a Sprite Bank")
  361.    If F$<>""
  362.       A$=Upper$(F$)
  363.       If Right$(A$,4)=".ABK"
  364.          Save F$,1
  365.       Else 
  366.          F$=""
  367.       End If 
  368.    Else 
  369.       F$=" "
  370.    End If 
  371. Wend 
  372. NREZ=1
  373. On Error Goto GENERALERROR
  374. Return 
  375. PHONE:
  376. T1=Z mod 8+64 : T2=Z mod 8+48+(Z/3) mod 3
  377. Volume CVOL
  378. Play 1,T1,0 : Play 2,T2,0
  379. Play 3,T1,0 : Play 4,T2,0
  380. Wait 2 : Volume 0
  381. Return 
  382. BLL:
  383. Volume CVOL
  384. Bell 
  385. Wait 2 : Volume 0
  386. Return 
  387. BUTTONS:
  388. If Z>0
  389.    On BLEEP+1 Gosub PHONE,BLL
  390. End If 
  391. R=(Z-1)/10
  392. C=(Z-1) mod 10
  393. If Z=51
  394.    R=4 : C=10
  395. End If 
  396. If Z=52
  397.    R=4 : C=11
  398. End If 
  399. If(R<>2 or C<>9) and SPDISP=0 and MDE<>13
  400.    Gosub STORE
  401. End If 
  402. On R+1 Gosub ROW1,ROW2,ROW3,ROW4,ROW5
  403. While Mouse Key<>0 and TICK<550
  404.    If TICK>0
  405.       Inc TICK
  406.    End If 
  407. Wend : If TICK=550
  408.    TICK=500
  409. End If 
  410. Return 
  411. ROW1:
  412. If C=9 and MDE<>13 and SPDISP=0
  413.    SMDE=1
  414.    Gosub SCRLLER
  415. End If 
  416. If C=0
  417.    MDE=9
  418.    HILITE[Z]
  419. End If 
  420. If C=1 and BLK4=1
  421.    MDE=10
  422.    DRG=0
  423.    HILITE[Z]
  424. End If 
  425. If C=2
  426.    PSTMDE=1-PSTMDE
  427.    Gosub SHWPSTE
  428. End If 
  429. If C>2 and C<8
  430.    On C-2 Gosub HNBR,HNTL,HNTR,HNBL,HNC
  431. End If 
  432. If C=8
  433.    GMDE=1-GMDE
  434. End If 
  435. Return 
  436. HNBR:
  437. HNX=XW : HNY=YH
  438. Return 
  439. HNTL:
  440. HNX=0 : HNY=0
  441. Return 
  442. HNTR:
  443. HNX=XW : HNY=0
  444. Return 
  445. HNBL:
  446. HNX=0 : HNY=YH
  447. Return 
  448. HNC:
  449. HNX=XW/2 : HNY=YH/2
  450. Return 
  451. SHWPSTE:
  452. Ink(1-PSTMDE)*5,0
  453. Set Pattern 2*(1-PSTMDE)
  454. Bar 82,21 To 89,28
  455. Bar 77,27 To 89,28
  456. Set Pattern 0
  457. Return 
  458. ROW4:
  459. If C=8 and IN>1
  460.    TICK=Max(TICK,1)
  461.    Dec IN
  462.    SHWSPRITES[IN]
  463. End If 
  464. If C=9
  465.    IN=Max(1,Length(1))
  466.    SHWSPRITES[IN]
  467. End If 
  468. If C=0
  469.    MDE=7
  470.    DRG=1
  471.    HILITE[Z]
  472. End If 
  473. If C=4
  474.    MDE=8
  475.    HILITE[Z]
  476. End If 
  477. If C=1 Then MDE=4 : DRG=1
  478. If C=2 Then MDE=2 : DRG=1
  479. If C=3 Then MDE=6 : DRG=0
  480. If C>0 and C<4
  481.    HILITE[Z]
  482. End If 
  483. If C=5 and MDE<>13 and SPDISP=0
  484.    Gosub VFLIP
  485. End If 
  486. If C=6 and MDE<>13 and SPDISP=0
  487.    SMDE=0
  488.    Gosub SCRLLER
  489. End If 
  490. If C=7 and MDE<>13 and SPDISP=0
  491.    LINE$(0)="Clear Sprite"
  492.    LINE$(1)="Are you sure?"
  493.    BUTTON$(0)="Clear"
  494.    BUTTON$(1)="Cancel"
  495.    ALERT[26,7,1,0,2,2]
  496.    If Q=1
  497.       Gosub STORE
  498.       Screen 1
  499.       Set Paint 0
  500.       Set Pattern FP
  501.       Ink RIGHTC,LEFTC
  502.       Bar 160*XS,7 To 160*XS+XSIZE-1,6+YSIZE
  503.       Set Pattern 0
  504.       FASTZOOM
  505.       Screen 0
  506.    End If 
  507. End If 
  508. Return 
  509. ROW3:
  510. If C=9 and MDE<>13 and SPDISP=0
  511.    Gosub UNDO
  512. End If 
  513. If C=0
  514.    HILITE[Z]
  515.    MDE=0
  516.    DRG=0
  517. End If 
  518. If C=1 Then MDE=3 : MOF=1
  519. If C=2 Then MDE=1 : DRG=1
  520. If C=3 Then MDE=5 : DRG=1
  521. If C>0 and C<4
  522.    HILITE[Z]
  523. End If 
  524. If C=8
  525.    Dec FP
  526.    FP=(FP+35) mod 35
  527.    SHWFILL[FP]
  528. End If 
  529. If C=7
  530.    Gosub SELREZ
  531.    SCRN=1
  532.    NREZ=1
  533. End If 
  534. If C=4 and MDE<>13 and SPDISP=0
  535.    HILITE[Z]
  536.    MDE=13
  537.    Screen 1
  538.    Ink BC,FC,BC
  539.    Text 10,150,"Right Button Fixes,Change Mode to exit"
  540.    Ink 0
  541.    Bar 0,0 To 158*XS,138
  542.    Screen 0
  543.    Screen Copy 1,160*XS-1,6,160*XS+97,138 To 1,15,6
  544.    SC4=1
  545. End If 
  546. If C=5 and MDE<>13 and SPDISP=0
  547.    Gosub HFLIP
  548. End If 
  549. If C=6 and MDE<>13 and SPDISP=0
  550.    Gosub ROTATE
  551. End If 
  552. Return 
  553. ROW2:
  554. If C=9 and MDE<>13 and SPDISP=0
  555.    Gosub STORE
  556.    Gosub SCRUNCH1
  557. End If 
  558. If C=8 and MDE<>13 and SPDISP=0
  559.    Gosub STORE
  560.    Gosub SCRUNCH2
  561. End If 
  562. If C>=0 and C<8 and MDE<>13 and SPDISP=0
  563.    On C+1 Gosub HSTL,HSTR,HSBM,HSTM,HSBR,HSBL,HSC,HSUSER
  564. End If 
  565. Return 
  566. HSTL:
  567. HX=0 : HY=0 : Return 
  568. HSTR:
  569. HX=XSIZE-1 : HY=0 : Return 
  570. HSBM:
  571. HX=XSIZE/2 : HY=YSIZE-1 : Return 
  572. HSTM:
  573. HX=XSIZE/2 : HY=0 : Return 
  574. HSBR:
  575. HX=XSIZE-1 : HY=YSIZE-1 : Return 
  576. HSBL:
  577. HX=0 : HY=YSIZE-1 : Return 
  578. HSC:
  579. HX=XSIZE/2 : HY=YSIZE/2 : Return 
  580. HSUSER:
  581. DRG=0
  582. MDE=12
  583. HILITE[Z]
  584. Return 
  585. ROW5:
  586. If C=0
  587.    Gosub GTBACK
  588.    CHANGERGB
  589.    NREZ=1
  590. End If 
  591. If C=2 and MDE<>13
  592.    Gosub GEDIT
  593.    SHWSPRITES[IN]
  594. End If 
  595. If C=1 and MDE<>13
  596.    Gosub INSIT
  597.    SHWSPRITES[IN]
  598. End If 
  599. If C=3 and IN<=Length(1) and MDE<>13
  600.    Gosub SPGRAB
  601. End If 
  602. If C=4 and IN<=Length(1)
  603.    Del Bob IN
  604.    SHWSPRITES[IN]
  605.    INO=-1
  606. End If 
  607. If C=5 and Length(1)>0
  608.    LINE$(0)="Do you really want"
  609.    LINE$(1)="to erase all your"
  610.    LINE$(2)="Images ?"
  611.    BUTTON$(0)="ERASE"
  612.    BUTTON$(1)="CANCEL"
  613.    ALERT[30,8,6,1,2,3]
  614.    If Q=1
  615.       If SMDE<2
  616.          Erase 1
  617.          IN=1
  618.          SHWSPRITES[IN]
  619.       Else 
  620.          Erase 2
  621.       End If 
  622.    End If 
  623. End If 
  624. If C=6
  625.    IN=1
  626.    SHWSPRITES[IN]
  627. End If 
  628. If C=8 and IN<=Length(1)
  629.    Inc IN
  630.    SHWSPRITES[IN]
  631.    TICK=Max(1,TICK)
  632. End If 
  633. If C=7
  634.    If SREDO=1
  635.       SREDO=0
  636.       If SHWSP=1
  637.          Screen 1
  638.          Put Block 5,160*XS,7
  639.          SHWSP=0
  640.          SHWSPO=0
  641.          Screen 0
  642.       End If 
  643.       DISPSPRITES
  644.       Auto View On 
  645.       SPDISP=1
  646.    End If 
  647.    Clip 
  648.    SHWSPRITES[IN]
  649. End If 
  650. If C=10
  651.    Inc FP
  652.    FP=FP mod 35
  653.    SHWFILL[FP]
  654. End If 
  655. If C=11
  656.    Gosub NICENESS
  657. End If 
  658. If C=9
  659.    LINE$(0)="Are you sure you"
  660.    LINE$(1)="Want to quit"
  661.    BUTTON$(0)="Quit"
  662.    BUTTON$(1)="Cancel"
  663.    ALERT[20,7,1,2,2,2]
  664.    If Q=1
  665.       Default 
  666.       End 
  667.    End If 
  668. End If 
  669. Return 
  670. SPGRAB:
  671. If IN<=Length(1)
  672.    S=Screen
  673.    Screen 1
  674.    If SPDISP=1
  675.       Put Block 5,160*XS,7
  676.    End If 
  677.    SB=Sprite Base(IN)
  678.    XSIZE=Min(96,Deek(SB)*16)
  679.    YSIZE=Min(128,Deek(SB+2))
  680.    If XSIZE>32 or YSIZE>32
  681.       BIGSPR=1
  682.    End If 
  683.    HX=Min(95,Deek(SB+6))
  684.    HY=Min(127,Deek(SB+8))
  685.    If SPDISP=0
  686.       BXES
  687.    End If 
  688.    Ink 0 : Bar 160*XS,7 To 160*XS+XSIZE-1,6+YSIZE
  689.    Paste Bob 160*XS,7,IN
  690.    If SPDISP=0
  691.       FASTZOOM
  692.       NREZ=1
  693.    Else 
  694.       DISPSPRITES
  695.       Auto View On 
  696.    End If 
  697.    Clip 
  698.    SHWSPRITES[IN]
  699.    Screen S
  700. Else 
  701.    Bell 
  702. End If 
  703. Return 
  704. HFLIP:
  705. Screen Copy 1,160*XS,7,160*XS+XSIZE,7+YSIZE To 1,0,0
  706. A=0 : Repeat 
  707.    Screen Copy 1,XSIZE-A-1,0,XSIZE-A,YSIZE To 1,160*XS+A,7
  708.    Inc A
  709. Until A=XSIZE
  710. NREZ=1
  711. Return 
  712. VFLIP:
  713. Screen Copy 1,160*XS,7,160*XS+XSIZE,7+YSIZE To 1,0,0
  714. A=0 : Repeat 
  715.    Screen Copy 1,0,YSIZE-A-1,XSIZE,YSIZE-A To 1,160*XS,7+A
  716. Inc A : Until A=YSIZE
  717. NREZ=1
  718. Return 
  719. ROTATE:
  720. Autoback 0
  721. Screen 1
  722. Screen Copy 1,160*XS,7,160*XS+XSIZE,7+YSIZE To 1,0,0
  723. Cls 0,160*XS,7 To 160*XS+XSIZE,7+YSIZE
  724. A=0 : Repeat : Ink FC : Plot 160*XS+96,6+A : Plot 159*XS,6+A
  725.    Ink BC : Plot 160*XS+96,7+A : Plot 159*XS,7+A
  726.    B=0 : Repeat : If A<YSIZE and B<XSIZE
  727.          Ink Point(A,B) : Plot 160*XS+XSIZE-B-1,7+A
  728.       End If 
  729.    Inc B : Until B=YSIZE
  730. Inc A : Until A=XSIZE
  731. Ink FC : Box 159*XS,6 To 160*XS+96,136
  732. NREZ=1
  733. Return 
  734. SHWCURS:
  735. Gosub GTBACK
  736. X2=(X-16)/MP : Y2=(Y-7)/MP
  737. CLPIT
  738. Paste Bob X2+160*XS,Y2+7,Length(1)
  739. FASTZOOM
  740. Clip 
  741. Put Block 1,160*XS,7
  742. Return 
  743. Rem Plot point general draw routine
  744. Rem lftwin & Tpwin are used when sprite is >64x64 to determine window area 
  745. PLTPNT:
  746. X=(X-16)/MP+LFTWIN : Y=(Y-7)/MP+TPWIN
  747. Y=Min(YSIZE-1,Y) : X=Min(XSIZE-1,X)
  748. Set Paint 0
  749. Set Pattern FP
  750. If K=1 or REAL=0
  751.    Ink LEFTC,RIGHTC,LEFTC
  752.    If REAL=0 and TIM mod 20<=4
  753.       Ink RIGHTC,LEFTC,RIGHTC
  754.    End If 
  755. Else 
  756.    If K=2 or Rnd(1)=0
  757.       Ink RIGHTC,LEFTC,RIGHTC
  758.    Else 
  759.       Ink LEFTC,RIGHTC,LEFTC
  760.    End If 
  761. End If 
  762. If K<>2 or MDE=0 or MDE=3 or MDE=6 or MDE=10 or MDE=12
  763.    On MDE+1 Gosub PLT,BX,BR,DRW,AIR,ELLPS,FELLPS,LINE,FLL,CUT,PSTE,HTSPOT,HTSPOT
  764. End If 
  765. Set Pattern 0
  766. FASTZOOM
  767. Return 
  768. HTSPOT:
  769. If K>0
  770.    HX=X : HY=Y
  771. End If 
  772. Return 
  773. PLT:
  774. Plot 160*XS+X,7+Y
  775. Return 
  776. DRW:
  777. If MOF=1
  778.    LPX=X : LPY=Y
  779.    MOF=0
  780. End If 
  781. Draw 160*XS+LPX,7+LPY To 160*XS+X,7+Y : If REAL=1 Then LPX=X : LPY=Y
  782. Return 
  783. DAIR:
  784. A=0 : Repeat 
  785.    Plot 160*XS+X+Rnd(XW)-Rnd(XW),7+Y+Rnd(XW)-Rnd(XW)
  786. Inc A : Until A>AIR
  787. Return 
  788. BX:
  789. If DRG
  790.    Gosub STRETCH
  791. Else 
  792.    CLPIT
  793.    Box 160*XS+X-HNX,7+Y-HNY To 160*XS+X+XW-HNX,7+Y+YH-HNY
  794.    Clip 
  795. End If 
  796. Return 
  797. STRETCH:
  798. STX=X Mouse : STY=Y Mouse
  799. CLPIT
  800. Gosub GTBACK
  801. OK=0
  802. XO=-1 : YO=-1
  803. LX=X+160*XS : LY=Y+7
  804. Set Pattern FP
  805. While OK=0
  806.    K=Mouse Key : X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  807.    X=(X-16)/MP+LFTWIN : Y=(Y-7)/MP+TPWIN
  808.    If K=0
  809.       OK=1
  810.    End If 
  811.    If XO<>X or YO<>Y
  812.       XO=X : YO=Y
  813.       X=X+160*XS : Y=Y+7
  814.       X1=Max(LX,160*XS) : X2=Max(160*XS,Min(X,160*XS+XSIZE))
  815.       Y1=Max(LY,7) : Y2=Max(7,Min(7+YSIZE,Y))
  816.       TX=Min(X1,X2) : BX=Max(X1,X2)
  817.       TY=Min(Y1,Y2) : BY=Max(Y1,Y2)
  818.       BX=Max(TX+1,BX) : BY=Max(TY+1,BY)
  819.       Put Block 1,160*XS,7
  820.       Ink LEFTC,RIGHTC
  821.       On MDE Gosub SBX,SBR,SBR,SAIR,SELLPS,SELLPS,SLINE,SLINE,SBX
  822.       FASTZOOM
  823.    End If 
  824. Wend 
  825. Ink 0
  826. Put Block 1,160*XS,7
  827. XW=BX-TX : YH=BY-TY
  828. DRG=0
  829. Set Pattern 0
  830. Clip 
  831. X Mouse=STX : Y Mouse=STY
  832. Return 
  833. SBX:
  834. Box TX,TY To BX,BY
  835. Return 
  836. SBR:
  837. Bar TX,TY To BX,BY
  838. Return 
  839. SAIR:
  840. D=Max((BX-TX)/2,1)
  841. Circle TX+D,TY+D,D
  842. Return 
  843. SELLPS:
  844. DX=Max((BX-TX)/2,1) : DY=Max((BY-TY)/2,1)
  845. Ellipse TX+DX,TY+DY,DX,DY
  846. Return 
  847. SLINE:
  848. Draw LX,LY To X,Y
  849. Return 
  850. BR:
  851. If DRG=1
  852.    Gosub STRETCH
  853. Else 
  854.    CLPIT
  855.    Bar 160*XS+X-HNX,7+Y-HNY To 160*XS+X+XW-HNX,7+Y+YH-HNY
  856.    Clip 
  857. End If 
  858. Return 
  859. AIR:
  860. If DRG=1
  861.    Gosub STRETCH
  862.    XW=Max(1,Max(XW,YH)/2)
  863. Else 
  864.    CLPIT
  865.    Gosub DAIR
  866.    Clip 
  867. End If 
  868. Return 
  869. ELLPS:
  870. If DRG=1
  871.    Gosub STRETCH
  872.    XW=Max(1,XW/2) : YH=Max(1,YH/2)
  873. HNX=XW : HNY=YH
  874. Else 
  875.    CLPIT
  876.    Ellipse 160*XS+X+XW-HNX,7+Y-HNY+YH,XW,YH
  877.    Clip 
  878. End If 
  879. Return 
  880. FELLPS:
  881. If DRG=1
  882.    DRG=0
  883.    TXT$=""
  884. Else 
  885.    CLPIT
  886.    Autoback 0
  887.    Gr Writing 0
  888.    Text 160*XS+X,7+Y,TXT$
  889.    Gr Writing 1
  890.    Clip 
  891. End If 
  892. Return 
  893. LINE:
  894. If DRG=1
  895.    Gosub STRETCH
  896.    XW=X2-LX : YH=Y2-LY
  897. Else 
  898.    CLPIT
  899.    Draw 160*XS+X-HNX,7+Y-HNY To 160*XS+X+XW-HNX,7+Y+YH-HNY
  900.    Clip 
  901. End If 
  902. Return 
  903. FLL:
  904. Screen 1
  905. Get Block 1,158*XS,5,100,135
  906. Set Pattern FP
  907. Set Paint 0
  908. If K=2
  909.    M=0
  910. Else 
  911.    M=1
  912. End If 
  913. Ink FC
  914. Box 158*XS,5 To 160*XS+XSIZE+1,8+YSIZE
  915. Ink BC
  916. Box 159*XS,6 To 160*XS+XSIZE,7+YSIZE
  917. Ink LEFTC,RIGHTC,LEFTC
  918. Paint 160*XS+X,7+Y,M
  919. Get Block 2,160*XS,7,XSIZE,YSIZE
  920. Clip 
  921. Put Block 1,158*XS,5 : Put Block 2,160*XS,7
  922. Return 
  923. CUT:
  924. If K=1
  925.    Gosub STRETCH
  926.    Get Block 4,LX,LY,XW,YH,1
  927.    HNX=0 : HNY=0
  928.    MDE=10
  929.    Screen 0
  930.    HILITE[2]
  931.    Screen 1
  932.    BLK4=1
  933. End If 
  934. Return 
  935. PSTE:
  936. CLPIT
  937. If PSTMDE=1 or K=2
  938.    Ink 0
  939.    Bar 160*XS+X-HNX,7+Y-HNY To 160*XS+X-HNX+XW-1,6+Y-HNY+YH
  940. End If 
  941. If K<>2
  942.    Put Block 4,160*XS+X-HNX,7+Y-HNY
  943. End If 
  944. Clip 
  945. Return 
  946. GTTXT:
  947. A$=KEYIN$
  948. KEYIN$=""
  949. If A$<>""
  950.    If A$=Chr$(8)
  951.       TXT$=Left$(TXT$,Len(TXT$)-1)
  952.    End If 
  953.    If A$>=" "
  954.       TXT$=TXT$+A$
  955.    End If 
  956. End If 
  957. Return 
  958. SCRUNCH1:
  959. Screen 1
  960. SCY=-1
  961. A=0 : Repeat : B=0 : Repeat : If Point(160*XS+B,7+A)>0 Then SCY=A : B=XSIZE : A=YSIZE
  962. Inc B : Until B>=XSIZE : Inc A : Until A>=YSIZE
  963. SCX=-1
  964. A=0 : Repeat : B=0 : Repeat : If Point(160*XS+A,7+B)>0 Then SCX=A : B=YSIZE : A=XSIZE
  965. Inc B : Until B>=YSIZE : Inc A : Until A>=XSIZE
  966. If SCY>=0 and SCX>=0
  967.    Screen Copy 1,160*XS+SCX,7+SCY,160*XS+XSIZE,7+YSIZE To 1,160*XS,7
  968.    CLPIT
  969.    Ink 0 : Bar 160*XS,7+YSIZE-SCY To 160*XS+XSIZE+1,7+YSIZE+1
  970.    Bar 160*XS+XSIZE-SCX,7 To 160*XS+XSIZE+1,7+YSIZE+1
  971.    FASTZOOM
  972.    Clip 
  973. End If 
  974. Screen 0
  975. SREDO=1
  976. Return 
  977. SCRUNCH2:
  978. Gosub SCRUNCH1
  979. Screen 1
  980. SCX=XSIZE
  981. A=XSIZE-1 : Repeat : B=YSIZE-1 : Repeat : If Point(160*XS+A,7+B)>0 Then SCX=A : B=0 : A=0
  982. Dec B : Until B<0 : Dec A : Until A<0
  983. A=YSIZE-1 : Repeat : B=XSIZE-1 : Repeat : If Point(160*XS+B,7+A)>0 Then SCY=A : B=0 : A=0
  984. Dec B : Until B<0 : Dec A : Until A<0
  985. XSIZE=Max(16,SCX+1) : YSIZE=Max(1,SCY+1)
  986. NREZ=1
  987. Screen 0
  988. Return 
  989. Rem this routine grabs the data as a sprite,bob or icon
  990. Rem IN = image number to grab to 
  991. Rem HX & HY contain the Hot Spot location
  992. INSIT:
  993. SC=Screen
  994. Screen 1
  995. If IN<=Length(1)
  996.    Ins Sprite IN
  997. End If 
  998. Gosub GEDITBOB
  999. If IN=Length(1) and OK=1
  1000.    Inc IN
  1001. End If 
  1002. Screen SC
  1003. Return 
  1004. GEDIT:
  1005. SC=Screen
  1006. Screen 1
  1007. Gosub GEDITBOB
  1008. If IN=Length(1) and OK=1
  1009.    Inc IN
  1010. End If 
  1011. Screen SC
  1012. Return 
  1013. GEDITBOB:
  1014. On Error Goto FAIL
  1015. OK=1
  1016. If SPDISP=1 and Screen=0 and SREDO=1
  1017.    Put Block 5,160*XS,7
  1018. End If 
  1019. Get Bob IN,160*XS,7 To 160*XS+XSIZE,7+YSIZE
  1020. Hot Spot IN,HX,HY
  1021. If SPDISP=1
  1022.    DISPSPRITES
  1023.    Auto View On 
  1024. End If 
  1025. FAILSAFE:
  1026. On Error Goto GENERALERROR
  1027. Return 
  1028. FAIL:
  1029. SC=Screen
  1030. Screen 0
  1031. LINE$(0)="Not Enough Memory"
  1032. LINE$(1)="to store image..."
  1033. BUTTON$(0)="O.K"
  1034. ALERT[30,7,6,1,1,2]
  1035. Screen SC
  1036. NREZ=1
  1037. OK=0
  1038. Resume FAILSAFE
  1039. GTBACK:
  1040. Del Block 1
  1041. SC=Screen
  1042. Screen 1
  1043. Get Block 1,160*XS,7,Max(16,XSIZE),Max(16,YSIZE)
  1044. Screen SC
  1045. Return 
  1046. STORE:
  1047. XSIZE=Max(16,XSIZE) : YSIZE=Max(1,YSIZE)
  1048. S=Screen
  1049. Screen 1
  1050. Del Block 2
  1051. Get Block 2,160*XS,7,XSIZE,YSIZE
  1052. A=0 : Repeat : RGB(A)=Colour(A) : Inc A : Until A=Min(31,NCOLS)
  1053. STNCOLS=NCOLS : STXSIZE=XSIZE : STYSIZE=YSIZE
  1054. STBIG=BIGSPR : STTL=LFTWIN : STTP=TPWIN
  1055. Screen S
  1056. Return 
  1057. UNDO:
  1058. S=Screen
  1059. Screen 1
  1060. XSIZE=STXSIZE : YSIZE=STYSIZE : NCOLS=STNCOLS
  1061. BIGSPR=STBIG : LFTWIN=STTL : TPWIN=STTP
  1062. A=0 : Repeat : Colour A,RGB(A) : Inc A : Until A=Min(31,NCOLS)
  1063. BXES
  1064. Put Block 2,160*XS,7
  1065. FASTZOOM
  1066. BIGBARS
  1067. PALDRAW
  1068. Screen S
  1069. Return 
  1070. SCRLLER:
  1071. TS=Screen
  1072. Screen 0
  1073. Del Block 1
  1074. Get Block 1,208,10,80,64
  1075. Ink 0
  1076. Bar 209,11 To 274,60
  1077. Bar 214,16 To 279,65
  1078. Screen Copy 0,0,96,64,144 To 0,210,12
  1079. Reset Zone 
  1080. Reserve Zone 4
  1081. Set Zone 1,234,20 To 250,36
  1082. Set Zone 2,234,36 To 250,52
  1083. Set Zone 3,218,28 To 234,44
  1084. Set Zone 4,250,28 To 266,44
  1085. If SMDE=1
  1086.    Screen 1
  1087.    Get Block 3,160*XS,7,XSIZE,YSIZE
  1088.    Screen 0
  1089. End If 
  1090. OK=0
  1091. TMR=0
  1092. While OK=0
  1093.    K=Mouse Key : Z=Mouse Zone
  1094.    If K=0
  1095.       TMR=0
  1096.    End If 
  1097.    If K=2
  1098.       OK=1
  1099.    Else 
  1100.       If K=1
  1101.          On Z Gosub SUP,SDOWN,SLEFT,SRIGHT
  1102.          If SMDE=1
  1103.             Gosub SIZEREDO
  1104.             NREZ=1
  1105.          Else 
  1106.             FASTZOOM
  1107.          End If 
  1108.          While Mouse Key<>0 and TMR<500 : Inc TMR : Wend 
  1109.       End If 
  1110.    End If 
  1111. Wend 
  1112. Put Block 1,208,10
  1113. SETBUTZONE
  1114. Return 
  1115. SUP:
  1116. If SMDE=0
  1117.    Screen 1
  1118.    Get Block 3,160*XS,7,XSIZE,1
  1119.    Screen Copy 1,160*XS,8,160*XS+XSIZE,7+YSIZE To 1,160*XS,7
  1120.    Put Block 3,160*XS,6+YSIZE
  1121.    Del Block 3
  1122.    Screen 0
  1123. Else 
  1124.    If YSIZE>1
  1125.       Dec YSIZE
  1126.    End If 
  1127. End If 
  1128. Return 
  1129. SDOWN:
  1130. If SMDE=0
  1131.    Screen 1
  1132.    Get Block 3,160*XS,6+YSIZE,XSIZE,1
  1133.    Screen Copy 1,160*XS,7,160*XS+XSIZE,6+YSIZE To 1,160*XS,8
  1134.    Put Block 3,160*XS,7
  1135.    Del Block 3
  1136.    Screen 0
  1137. Else 
  1138.    If YSIZE<128
  1139.       Inc YSIZE
  1140.    End If 
  1141. End If 
  1142. Return 
  1143. SLEFT:
  1144. If SMDE=0
  1145.    Screen 1
  1146.    Get Block 3,160*XS,7,1,7+YSIZE
  1147.    Screen Copy 1,160*XS+1,7,160*XS+XSIZE,7+YSIZE To 1,160*XS,7
  1148.    Put Block 3,160*XS+XSIZE-1,7
  1149.    Del Block 3
  1150.    BXES2
  1151.    Screen 0
  1152. Else 
  1153.    If XSIZE>16
  1154.       Add XSIZE,-16
  1155.    End If 
  1156. End If 
  1157. Return 
  1158. SRIGHT:
  1159. If SMDE=0
  1160.    Screen 1
  1161.    Get Block 3,160*XS+XSIZE-1,7,1,YSIZE,1
  1162.    Screen Copy 1,160*XS,7,160*XS+XSIZE-1,7+YSIZE To 1,160*XS+1,7
  1163.    Ink 0
  1164.    Draw 160*XS,7 To 160*XS,6+YSIZE
  1165.    Put Block 3,160*XS,7
  1166.    Del Block 3
  1167.    BXES2
  1168.    Screen 0
  1169. Else 
  1170.    If XSIZE<96
  1171.       Add XSIZE,16
  1172.    End If 
  1173. End If 
  1174. Return 
  1175. SIZEREDO:
  1176. Screen 1
  1177. Cls 0,159*XS,7 To 160*XS+96,136
  1178. Put Block 3,160*XS,7
  1179. Ink FC,BC
  1180. Box 159*XS,6 To 160*XS+96,136
  1181. Box 159*XS,6 To 160*XS+XSIZE,7+YSIZE
  1182. Ink BC,FC,BC
  1183. Text 120*XS-(XS=2)*100,150,"Size X:"+Right$(" "+Str$(XSIZE),2)+" Y:"+Right$("  "+Str$(YSIZE),3)
  1184. Screen 0
  1185. Return 
  1186. NICENESS:
  1187. Screen 0
  1188. Reset Zone 
  1189. Reserve Zone 20
  1190. Del Block 1
  1191. Get Block 1,48,0,240,96
  1192. Ink 0 : Bar 52,4 To 274,94
  1193. Ink 2 : Bar 48,0 To 270,90
  1194. Ink 1 : Polyline 48,90 To 48,0 To 270,0
  1195. Ink 7 : Polyline 49,90 To 270,90 To 270,1
  1196. Ink 6 : Bar 49,55 To 180,89
  1197. Set Paint 1
  1198. Ink 0,0,1 : Bar 80,80 To 114,88
  1199. Set Zone 1,81,81 To 113,87
  1200. Bar 230,16 To 264,25
  1201. Set Zone 8,231,17 To 263,24
  1202. Set Paint 0
  1203. Ink 1,6
  1204. Text 54,87,"Vol"
  1205. CX=CVOL/2
  1206. AX=AIR
  1207. Gosub VOLSLIDE
  1208. Gosub AIRSLIDE
  1209. SMALLBUTTON[2,"O.K",224,70]
  1210. QUADBUTTON[3,"Niceness Page",52,4]
  1211. QUADBUTTON[3,"Background Col",52,22]
  1212. QUADBUTTON[4,"Foreground Col",52,38]
  1213. Ink 1,6
  1214. Text 52,66,"Button"
  1215. Text 52,76,"Click"
  1216. Ink 1,2
  1217. Text 185,12,"Airbrush"
  1218. Text 185,22,"Power"
  1219. TWINBUTTON[5,"Tone "+OK$(1-BLEEP),116,56]
  1220. TWINBUTTON[6,"Bell "+OK$(BLEEP),116,72]
  1221. TWINBUTTON[7,"Credits",192,52]
  1222. Ink 3,2
  1223. Text 185,36,"Free Mem"
  1224. Text 185,46,Str$(Int(((Fast Free+Chip Free)*100)/1024.0)/100.0)+" K"
  1225. OK=0
  1226. While OK=0
  1227.    While Mouse Key=0 : Wend : Z=Mouse Zone
  1228.    If Z=5
  1229.       BLEEP=0
  1230.       TWINBUTTON[5,"Tone *",116,56]
  1231.       TWINBUTTON[6,"Bell  ",116,72]
  1232.    End If 
  1233.    If Z=6
  1234.       BLEEP=1
  1235.       TWINBUTTON[5,"Tone  ",116,56]
  1236.       TWINBUTTON[6,"Bell *",116,72]
  1237.    End If 
  1238.    If Z=1
  1239.       CX=(X Screen(X Mouse)-81)
  1240.       Gosub VOLSLIDE
  1241.    End If 
  1242.    If Z=8
  1243.       AX=(X Screen(X Mouse)-231)
  1244.       Gosub AIRSLIDE
  1245.    End If 
  1246.    If Z=2
  1247.       OK=1
  1248.    End If 
  1249.    If Z=7
  1250.       CREDITS
  1251.    End If 
  1252.    If Z=3
  1253.       Inc BC
  1254.       BC=BC mod NCOLS
  1255.       If BC=FC
  1256.          Inc BC
  1257.          BC=BC mod NCOLS
  1258.       End If 
  1259.       BXES3
  1260.       PALDRAW
  1261.       Screen 0
  1262.    End If 
  1263.    If Z=4
  1264.       Inc FC
  1265.       FC=FC mod NCOLS
  1266.       If FC=BC
  1267.          Inc FC
  1268.          FC=FC mod NCOLS
  1269.       End If 
  1270.       BXES3
  1271.       PALDRAW
  1272.       Screen 0
  1273.    End If 
  1274. Wend 
  1275. Put Block 1,48,0
  1276. SETBUTZONE
  1277. Screen 0
  1278. Return 
  1279. VOLSLIDE:
  1280. Ink 0 : Bar 81+CVOL/2,81 To 82+CVOL/2,87
  1281. Bar 81,82 To 82+CVOL/2,86
  1282. CVOL=Max(0,Min(CX,31))*2
  1283. Ink 2 : Bar 81,82 To 82+CVOL/2,86
  1284. Ink 3 : Bar 81+CVOL/2,81 To 82+CVOL/2,87
  1285. Return 
  1286. AIRSLIDE:
  1287. Ink 0 : Bar 231+AIR,18 To 232+AIR,24
  1288. Bar 231,19 To 232+AIR,23
  1289. AIR=Max(0,Min(AX,31))
  1290. Ink 5 : Bar 231,19 To 232+AIR,23
  1291. Ink 3 : Bar 231+AIR,18 To 232+AIR,24
  1292. Return 
  1293. SELREZ:
  1294. Screen 0
  1295. Reset Zone 
  1296. Reserve Zone 8
  1297. Del Block 1
  1298. Get Block 1,48,0,240,96
  1299. Ink 0 : Bar 52,4 To 274,94
  1300. Ink 6 : Bar 48,0 To 270,90
  1301. Ink 1 : Polyline 48,90 To 48,0 To 270,0
  1302. Ink 7 : Polyline 49,90 To 270,90 To 270,1
  1303. Ink 1,2
  1304. A=0 : Repeat : B=0 : Repeat 
  1305.       TRIBUTTON[1+B*4+A,REZ$(B*4+A),64+B*96,A*16+20]
  1306. Inc B : Until B=2 : Inc A : Until A=4
  1307. Screen Copy 0,128,96,256,112 To 0,96,4
  1308. Ink 0,3
  1309. Text 100,14,"Select Mode"
  1310. REZ=-1
  1311. While REZ=-1
  1312.    While Mouse Key=0 : Wend : Z=Mouse Zone : While Mouse Key<>0 : Wend 
  1313.    If Z>0
  1314.       REZ=Z-1
  1315.    Else 
  1316.       Bell 
  1317.    End If 
  1318. Wend 
  1319. Put Block 1,48,0
  1320. Screen 1
  1321. Get Block 1,160*XS,7,96,128
  1322. Screen Close 1
  1323. CHANGEREZ
  1324. SETBUTZONE
  1325. Screen 1
  1326. Put Block 1,160*XS,7
  1327. Screen 0
  1328. Return 
  1329. Procedure SMALLBUTTON[BN,T$,BX,BY]
  1330.    Screen Copy 0,96,96,128,112 To 0,BX,BY
  1331.    Set Zone BN,BX,BY To BX+32,BY+16
  1332.    Ink 1,5 : Text BX+4,BY+10,T$
  1333. End Proc
  1334. Procedure TWINBUTTON[BN,T$,BX,BY]
  1335.    Screen Copy 0,96,112,160,128 To 0,BX,BY
  1336.    Set Zone BN,BX,BY To BX+64,BY+16
  1337.    Ink 1,6 : Text BX+4,BY+10,T$
  1338. End Proc
  1339. Procedure TRIBUTTON[BN,T$,BX,BY]
  1340.    Screen Copy 0,160,112,256,128 To 0,BX,BY
  1341.    Set Zone BN,BX,BY To BX+96,BY+16
  1342.    Ink 1,2 : Text BX+4,BY+10,T$
  1343. End Proc
  1344. Procedure QUADBUTTON[BN,T$,BX,BY]
  1345.    Screen Copy 0,128,96,256,112 To 0,BX,BY
  1346.    Set Zone BN,BX,BY To BX+128,BY+16
  1347.    Ink 0,3 : Text BX+4,BY+10,T$
  1348. End Proc
  1349. Procedure CHANGERGB
  1350.    Shared FC,BC,REZ,NCOLS,XS
  1351.    Dim RGB(31)
  1352.    SC=Screen
  1353.    Screen 1
  1354.    Del Block 1
  1355.    Get Block 1,8,3,256,112
  1356.    Limit Mouse 
  1357.    Reset Zone 
  1358.    Reserve Zone 40
  1359.    Ink 0,0
  1360.    Bar 13,8 To 217,112
  1361.    Ink FC,BC
  1362.    Bar 8,3 To 212,107
  1363.    Ink BC,FC
  1364.    Box 9,4 To 211,106
  1365.    Ink BC,FC
  1366.    A=0 : Repeat 
  1367.       Bar 15+A*20,6 To 30+A*20,104
  1368.       Set Zone A+1,15+A*20,6 To 30+A*20,104
  1369.       Inc A
  1370.    Until A=3
  1371.    A=0 : Repeat 
  1372.       Draw 10,6+A*6 To 75,6+A*6
  1373.       Inc A
  1374.    Until A=17
  1375.    A=0 : Repeat 
  1376.       Ink A,A : X=A mod 8 : Y=A/8
  1377.       Bar X*16+80,Y*16+8 To X*16+95,Y*16+23
  1378.       Set Zone A+4,X*16+80,Y*16+8 To X*16+95,Y*16+23
  1379.       RGB(A)=Colour(A)
  1380.    Inc A : Until A>=Min(32,NCOLS)
  1381.    Ink BC,FC
  1382.    Box 79,7 To 96+16*X,24+16*Y
  1383.    Box 80,90 To 140,100
  1384.    Text 86,98,"Cancel"
  1385.    Box 152,90 To 202,100
  1386.    Text 165,98,"O.K"
  1387.    Set Zone 36,80,90 To 140,100
  1388.    Set Zone 37,152,90 To 202,100
  1389.    Ink SELCOL
  1390.    Bar 195,78 To 201,87
  1391.    Ink BC : Box 194,77 To 202,88
  1392.   SFADERS[SELCOL]
  1393.    OK=0 : While OK=0
  1394.       While Mouse Key=0 : Wend : YM=Y Screen(Y Mouse) : Z=Mouse Zone
  1395.       If Z>0 and Z<4
  1396.          CFADERS[SELCOL,Z-1,YM]
  1397.          SFADERS[SELCOL]
  1398.       End If 
  1399.       If Z>3 and Z<36
  1400.          SELCOL=Z-4
  1401. Ink SELCOL
  1402. Bar 195,78 To 201,87
  1403.          SFADERS[SELCOL]
  1404.          Ink SELCOL
  1405.       End If 
  1406.       If Z=37
  1407.          OK=1
  1408.       End If 
  1409.       If Z=36
  1410.          A=0 : Repeat 
  1411.             Colour A,RGB(A) : SPCOL[A,RGB(A)]
  1412.          Inc A : Until A>=Min(32,NCOLS)
  1413.          OK=1
  1414.       End If 
  1415.    Wend 
  1416.    Put Block 1,8,3
  1417.    Screen SC
  1418. End Proc
  1419. Procedure CFADERS[S,F,YM]
  1420.    Dim R(2)
  1421.    C=Colour(S)
  1422.    R(0)=C/256
  1423.    R(1)=(C/16) mod 16
  1424.    R(2)=C mod 16
  1425.    V=Max(0,Min(15,15-(YM-7)/6))
  1426.    R(F)=V
  1427.    Colour S,(R(0)*256+R(1)*16+R(2))
  1428.    SPCOL[S,Colour(S)]
  1429. End Proc
  1430. Procedure SFADERS[S]
  1431.    Shared RGBO,BC,FC
  1432.    Dim R(2)
  1433.    C=RGBO
  1434.    R(0)=C/256
  1435.    R(1)=(C/16) mod 16
  1436.    R(2)=C mod 16
  1437.    Ink BC,BC
  1438.    A=0 : Repeat 
  1439.       V=(15-R(A))*6 : Bar 17+20*A,7+V To 28+20*A,12+V
  1440.       Inc A
  1441.    Until A=3
  1442.    C=Colour(S)
  1443.    RGBO=C
  1444.    R(0)=C/256
  1445.    R(1)=(C/16) mod 16
  1446.    R(2)=C mod 16
  1447. Ink BC,FC
  1448. Text 80,85,"Col"+Right$(" "+Str$(S),2)+" Val:$"+Right$("000"+Mid$(Hex$(RGBO),2),3)
  1449.    Ink FC,FC
  1450.    A=0 : Repeat 
  1451.       Ink FC,FC
  1452.       V=(15-R(A))*6 : Box 17+20*A,7+V To 28+20*A,12+V
  1453.       Ink S
  1454.       Bar 18+20*A,8+V To 27+20*A,11+V
  1455.       Inc A
  1456.    Until A=3
  1457. End Proc
  1458. Procedure SPCOL[A,B]
  1459.    If Length(1)>0
  1460.       Doke Start(1)+2+8*Length(1)+2*A,B
  1461.    End If 
  1462. End Proc
  1463. Procedure CHANGEREZ
  1464.    Shared SREDO,FC,BC,REZ,NCOLS,XS,NC(),SX(),ST()
  1465.    Auto View Off 
  1466.    Screen Open 1,SX(REZ),160,NC(REZ),ST(REZ)
  1467.    Flash Off 
  1468.    NCOLS=NC(REZ) : XS=SX(REZ)/320
  1469.    Screen Display 1,,140,,160
  1470.    Curs Off 
  1471.    FC=NCOLS-1 : BC=0 : A=0 : Repeat : If Colour(FC)=0 and Colour(A)>0 Then FC=A
  1472.       If Colour(BC)>Colour(A) Then BC=A
  1473.    Inc A : Until A=NCOLS
  1474.    Ink 0 : Bar 0,0 To 320*XS,160
  1475.    Auto View On 
  1476.    SREDO=1
  1477.    If Length(1)>0
  1478.       Get Sprite Palette 
  1479.    End If 
  1480. End Proc
  1481. Procedure SCRNUP
  1482.    Shared _NTSC
  1483.    If _NTSC=1
  1484.       Screen Display 1,,80,,160
  1485.    Else 
  1486.       Screen Display 1,,140,,160
  1487.    End If 
  1488. End Proc
  1489. Procedure SCRNDOWN
  1490.    Screen Display 1,,140,,160
  1491. End Proc
  1492. Rem alert box routine without using the window commands
  1493. Rem uses the arrays line$() and button$()
  1494. Procedure ALERT[W,H,C1,C2,NB,NL]
  1495.    Shared Q,LINE$(),BUTTON$()
  1496.    Reset Zone 
  1497.    Reserve Zone 3
  1498.    W=W*8
  1499.    H=H*8
  1500.    X=160-W/2
  1501.    Y=50-H/2
  1502.    Get Block 1,X,Y,W+16,H+16
  1503.    Ink 0
  1504.    Bar X+5,Y+5 To X+W+5,Y+H+5
  1505.    Ink C1
  1506.    Bar X,Y To X+W,Y+H
  1507.    Ink C2
  1508.    Box X+1,Y+1 To X+W-1,Y+H-1
  1509.    S=W/8/(NB+1)+1
  1510.    Paper C1
  1511.    Pen C2
  1512.    Curs Off 
  1513.    A=0 : While A<NB
  1514.       Locate X Text(X)+S/2+S*A,Y Text(Y+H)-2
  1515.       Print Border$(Zone$(BUTTON$(A),1+A),2);
  1516.    Inc A : Wend 
  1517.    A=0 : While A<NL
  1518.       Locate 0,Y Text(Y)+1+A
  1519.       Centre LINE$(A)
  1520.       Inc A
  1521.    Wend 
  1522.    Q=0
  1523.    While Q=0
  1524.       While Mouse Key=0 : Wend 
  1525.       Z=Mouse Zone
  1526.       If Z<1 or Z>1+NB
  1527.          Bell 
  1528.       Else 
  1529.          Q=Z
  1530.       End If 
  1531.    Wend 
  1532.    Put Block 1,X,Y
  1533.    SETBUTZONE
  1534. End Proc
  1535. Procedure SETBUTZONE
  1536.    Screen 0
  1537.    Reset Zone 
  1538.    Reserve Zone 60
  1539.    A=0
  1540.    Repeat 
  1541.       B=0
  1542.       Repeat 
  1543.          Set Zone A*10+B+1,B*32,A*16+16 To B*32+32,A*16+32
  1544.          Inc B
  1545.       Until B=10
  1546.       Inc A
  1547.    Until A=5
  1548.    Set Zone 29,256,48 To 272,64
  1549.    Set Zone 51,272,48 To 288,64 : Set Zone 52,288,64 To 320,80
  1550.    Set Zone 47,192,80 To 208,96 : Set Zone 39,208,80 To 224,96
  1551.    Set Zone 49,256,80 To 272,96 : Set Zone 40,272,80 To 288,96
  1552.    Set Zone 30,288,48 To 320,64
  1553. End Proc
  1554. Procedure CLPIT
  1555.    Shared XS,XSIZE,YSIZE
  1556.    Clip 160*XS,7 To 160*XS+XSIZE,7+YSIZE
  1557. End Proc
  1558. Procedure TITLEBAR
  1559.    Shared C(),C2()
  1560.    Change Mouse 3
  1561.    Auto View Off 
  1562.    Flash Off 
  1563.    Curs Off 
  1564.    Hide On 
  1565.    Unpack 6 To 2
  1566.    Screen Display 2,,40,,16
  1567.    A=0 : Repeat : C(A)=Colour(A) : C2(A)=0 : Colour A,0 : Inc A : Until A=8
  1568.    CPAUSE[1,0]
  1569.    Auto View On 
  1570.    Screen To Front 2
  1571.    B=0 : T=0
  1572.    While B<>999
  1573.       Read B,B2
  1574.       If B<>999
  1575.          C2(B)=$FFF : C2(B2)=$FFF
  1576.          OT=T
  1577.          While T<OT+2
  1578.             NEATFADE
  1579.             Inc T
  1580.          Wend 
  1581.       End If 
  1582.    Wend 
  1583.    OT=T : D=6
  1584.    While T<OT+D
  1585.       NEATFADE
  1586.       Inc T
  1587.    Wend 
  1588.    Colour 1,$FFF
  1589.    Screen 0
  1590.    Show On 
  1591.    Screen Display 0,,40,,96
  1592.    Screen Copy 2,0,0,320,144 To 0,0,0
  1593.    Fade 3 To 2
  1594.    Wait 15
  1595.    Screen Close 2
  1596.    Auto View On 
  1597.    Data 4,4,3,5,2,6,7,7,999,999
  1598. End Proc
  1599. Procedure CPAUSE[C,C2]
  1600.    While Colour(C)<>C2 : Wend 
  1601. End Proc
  1602. Procedure NEATFADE
  1603.    Shared C(),C2(),C3(),GTG
  1604.    Dim R(5)
  1605.    A=0 : Repeat 
  1606.       CO=Colour(A)
  1607.       R(0)=CO/256
  1608.       R(1)=(CO mod 256)/16
  1609.       R(2)=CO mod 16
  1610.       R(3)=C2(A)/256
  1611.       R(4)=(C2(A) mod 256)/16
  1612.       R(5)=C2(A) mod 16
  1613.       R=0 : Repeat 
  1614.          If R(R)<R(R+3)
  1615.             R(R)=R(R)+3 : R(R)=Min(R(R),R(R+3))
  1616.          End If 
  1617.          If R(R)>R(R+3)
  1618.             R(R)=R(R)-3 : R(R)=Max(R(R),R(R+3))
  1619.          End If 
  1620.          Inc R
  1621.       Until R=3
  1622.       CO=R(0)*256+R(1)*16+R(2)
  1623.       Colour A,CO
  1624.       If CO=$FFF
  1625.          C2(A)=C(A)
  1626.          C3(A)=1
  1627.       End If 
  1628.       Inc A
  1629.    Until A=8
  1630. End Proc
  1631. Procedure FXSCRN
  1632.    Shared SCRN
  1633.    Y=Y Mouse
  1634.    If Y>141
  1635.       SCRN=1
  1636.       Screen 1
  1637.       SCRNUP
  1638.       Screen To Front 1
  1639.       Change Mouse 2
  1640.    Else 
  1641.       SCRN=0
  1642.       Screen 0
  1643.       SCRNUP
  1644.       Screen To Front 0
  1645.       Change Mouse 1
  1646.    End If 
  1647.    View 
  1648.    Limit Mouse 
  1649. End Proc
  1650. Procedure SCRNCHK[X,Y]
  1651.    Shared SREDO,NREZ,SPDISP,SCRN,SCRNO
  1652.    If SCRN=0 and Y>98
  1653.       SCRN=1
  1654.       Screen 1
  1655.       SCRNUP
  1656.       If SPDISP=1
  1657.          NREZ=1
  1658.          SREDO=1
  1659.          Put Block 5,160*XS,7
  1660.       End If 
  1661.       Screen To Front 1
  1662.       Change Mouse 2
  1663.       Y=Y Hard(1,3)
  1664.    End If 
  1665.    If SCRN=1 and Y<=1
  1666.       SCRN=0
  1667.       Screen 0
  1668.       SCRNDOWN
  1669.       Screen To Front 0
  1670.       Change Mouse 1
  1671.       Y=Y Hard(0,95)
  1672.    End If 
  1673.    If SCRN<>SCRNO
  1674.       SCRNO=SCRN
  1675.       View 
  1676.       Limit Mouse 
  1677.       Y Mouse=Y
  1678.    End If 
  1679. End Proc
  1680. Procedure REDUCEZOOM[X,Y,K]
  1681.    Shared NREZ,BC,FC,XS,XSIZE,YSIZE
  1682.    Screen 1
  1683.    Zoom 1,16,7,16+XSIZE,7+YSIZE To 1,160*XS,7,Max(X,160*XS+1),Max(Y,8)
  1684.    Ink 0
  1685.    If X<160*XS+95
  1686.       Bar X,7 To 160*XS+95,135
  1687.    End If 
  1688.    If Y<135
  1689.       Bar 160*XS,Y To 160*XS+95,135
  1690.    End If 
  1691.    If K=2
  1692.       XSIZE=X-160*XS : YSIZE=Y-7
  1693.       Screen Copy 1,160*XS,7,160*XS+96,135 To 1,16,7
  1694.    Else 
  1695.       If K=0
  1696.          Screen Copy 1,16,7,112,135 To 1,160*XS,7
  1697.       End If 
  1698.    End If 
  1699. End Proc
  1700. Procedure RESIZE[X,Y,K]
  1701.    Shared NREZ,BC,FC,XS,XSIZE,YSIZE
  1702.    Screen 1
  1703.    Get Block 1,160*XS,7,XSIZE,YSIZE
  1704.    OK=0
  1705.    Ink BC,FC,BC
  1706.    Text 10,150," Press Right Button when done "
  1707.    While OK=0
  1708.       K=0
  1709.       While K=0
  1710.          Z=Mouse Zone
  1711.          K=Mouse Key
  1712.          X=X Screen(X Mouse)
  1713.          Y=Y Screen(Y Mouse)
  1714.       Wend 
  1715.       If K=1 and Z=3
  1716.          X=(X-160*XS)
  1717.          Y=(Y-7)
  1718.          X=Max(16,X)
  1719.          Y=Max(1,Y)
  1720.          XSIZE=X : YSIZE=Y
  1721.          X=X mod 16
  1722.          If X>0
  1723.             XSIZE=(XSIZE/16)*16+16
  1724.          End If 
  1725.          Cls 0,159*XS,7 To 160*XS+96,136
  1726.          Ink FC,BC
  1727.          Box 159*XS,6 To 160*XS+96,136
  1728.          Put Block 1,160*XS,7
  1729.          Ink FC,BC : Box 159*XS,6 To 160*XS+XSIZE,7+YSIZE
  1730.       Else 
  1731.          OK=1
  1732.       End If 
  1733.    Wend 
  1734.    NREZ=1
  1735. End Proc
  1736. Procedure PICKCOL[X,Y,K]
  1737.    Shared NCOLS,REZ,XS,BC,FC,LEFTC,RIGHTC
  1738.    If K=1
  1739.       LEFTC=Point(X,Y)
  1740.    Else 
  1741.       RIGHTC=Point(X,Y)
  1742.    End If 
  1743.    PALDRAW2
  1744. End Proc
  1745. Procedure PALDRAW
  1746.    Shared NCOLS,REZ,XS,BC,FC,LEFTC,RIGHTC,XSIZE,YSIZE
  1747.    If Colour(BC)/2=Colour(FC)/2
  1748.       FC=1
  1749.       BC=0
  1750.       Set Pattern 2
  1751.    End If 
  1752.    REZ$=" Low"
  1753.    If XS>1 Then REZ$="High"
  1754.    Auto View Off 
  1755.    Screen 1
  1756.    X=NCOLS/8
  1757.    If X<1 Then X=1
  1758.    Y=8 : If NCOLS<8 Then Y=NCOLS
  1759.    S=32/X*XS
  1760.    Set Paint 1
  1761.    Ink FC,BC,FC
  1762.    Bar 269*XS,2 To 319*XS,142
  1763.    Bar 0,142 To 320*XS,152
  1764.    Ink BC,FC,BC
  1765.    Text 269*XS,150,REZ$
  1766.    Set Paint 0
  1767.    Ink 0,0,0
  1768.    Bar 277*XS,6 To 279*XS+X*S-1,23+(Y-1)*16
  1769.    A=0 : Repeat : B=0 : Repeat 
  1770.          Ink A*8+B
  1771.          Bar 278*XS+A*S,7+B*16 To 278*XS+(A+1)*S-1,22+B*16
  1772.       Inc B : Until B>=Y
  1773.    Inc A : Until A=X
  1774.    Ink BC,FC,BC
  1775.    Text 120*XS-(XS=2)*100,150,"Size X:"+Right$(" "+Str$(XSIZE),2)+" Y:"+Right$("  "+Str$(YSIZE),3)
  1776.    PALDRAW2
  1777. End Proc
  1778. Procedure PALDRAW2
  1779.    Shared FC,BC,LEFTC,RIGHTC,XS,NCOLS
  1780.    Set Paint 1
  1781.    Y=8 : If NCOLS<8 Then Y=NCOLS
  1782.    Ink LEFTC,BC,BC
  1783.    Bar 272*XS,7 To 275*XS,7+Y*16
  1784.    Ink RIGHTC,BC,BC
  1785.    Bar 313*XS,7 To 316*XS,7+Y*16
  1786.    Set Paint 0
  1787. End Proc
  1788. Procedure HILITE[B]
  1789.    Shared BO,SC4,NREZ,HNX,HNY
  1790. HNX=0 : HNY=0
  1791.    If SC4=1
  1792.       SC4=0
  1793.       NREZ=1
  1794.    End If 
  1795.    Screen 0
  1796.    If B<>0
  1797.       Ink 0 : BX=(BO-1) mod 10 : BY=(BO-1)/10 : Box BX*32,BY*16+16 To BX*32+31,BY*16+31
  1798.       Ink 1 : BX=(B-1) mod 10 : BY=(B-1)/10 : Box BX*32,BY*16+16 To BX*32+31,BY*16+31
  1799.       BO=B
  1800.    End If 
  1801. End Proc
  1802. Procedure SHWFILL[F]
  1803.    Set Paint 1
  1804.    Set Pattern F
  1805.    Ink 1,0
  1806.    Bar 260,68 To 284,76
  1807.    Set Paint 0
  1808.    Set Pattern 0
  1809. End Proc
  1810. Procedure SHWSPRITES[B]
  1811.    Shared SPDISP,XS,FC,BC
  1812.    SC=Screen
  1813.    Screen 0
  1814.    Ink 0,3
  1815.    Text 228,91,Right$("000"+Mid$(Str$(B),2),3)
  1816.    If SPDISP=1
  1817.       Screen 1
  1818.       A=-1 : Repeat : S=B+A
  1819.          If S>0 and S<=Length(1)+1
  1820.             Ink FC : Box 8*XS-1+(A+1)*104*XS,15 To 104*XS+1+(A+1)*104*XS,145
  1821.             If S<=Length(1)
  1822.                SB=Sprite Base(S)
  1823.                X=Deek(SB)*16 : Y=Deek(SB+2)
  1824.                HX=Deek(SB+6) : HY=Deek(SB+8)
  1825.                XV=(52*XS)-X/2
  1826.                YV=64-Y/2
  1827.                Bob A+1,(A+1)*104*XS+8*XS+HX+XV,16+HY+YV,S
  1828.                Ink BC,FC,BC : Text(A+1)*104*XS+8*XS,8,Right$("  "+Str$(S),3)+" Plns"+Str$(Deek(SB+4))
  1829.                Text(A+1)*104*XS+8*XS,154," X:"+Right$(" "+Str$(X),2)+" Y:"+Right$("  "+Str$(Y),3)+" "
  1830.             Else 
  1831.                Bob Off A+1
  1832.                Ink BC,FC,BC : Text(A+1)*104*XS+8*XS,8,Right$("   "+Str$(S),3)+" Empty "
  1833.                Text(A+1)*104*XS+8*XS,154,"Blank Sprite"
  1834.             End If 
  1835.          Else 
  1836.             Bob Off A+1
  1837.             Ink 0 : Bar 8*XS-1+(A+1)*104*XS,0 To 104*XS+1+(A+1)*104*XS,160
  1838.          End If 
  1839.          Inc A
  1840.       Until A=2
  1841.    End If 
  1842.    Screen SC
  1843. End Proc
  1844. Procedure DISPSPRITES
  1845.    Shared SPDISP,XS,NC(),SX(),ST(),FC,REZ,XSIZE,YSIZE
  1846.    SC=Screen
  1847.    Screen 1
  1848.    Clip 
  1849.    Get Block 5,160*XS,7,XSIZE,YSIZE
  1850.    Ink 0 : Bar 0,0 To 320*XS,160
  1851.    If Length(1)>0
  1852.       Get Sprite Palette 
  1853.    End If 
  1854.    Screen SC
  1855.    Screen To Front SC
  1856. End Proc
  1857. Procedure BXES
  1858.    Shared BIGSPR,LFTO,TPWO,LFTWIN,TPWIN,NCOLS,FC,BC,XS,XSIZE,YSIZE,MP
  1859.    TXS=XSIZE : TYS=YSIZE
  1860.       XSIZE=Min(32*XS,XSIZE) : YSIZE=Min(32,YSIZE)
  1861.    FC=FC mod NCOLS
  1862.    BC=BC mod NCOLS
  1863.    If FC=BC
  1864.       FC=1
  1865.       BC=0
  1866.    End If 
  1867.    Get Block 1,160*XS,7,TXS,TYS
  1868.    Screen 1
  1869.    Ink 0
  1870.    Bar 0,0 To XS*320,160
  1871.    Ink FC,BC
  1872.    Put Block 1,160*XS,7
  1873.    Box 14,5 To 17+XSIZE*MP,8+YSIZE*MP
  1874.    Box 159*XS,6 To 160*XS+96,136
  1875.    Box 159*XS,6 To 160*XS+TXS,7+TYS
  1876.    Ink BC,FC
  1877.    Text 120*XS-(XS=2)*100,150,"Size X:"+Str$(TXS)+" Y:"+Str$(TYS)
  1878.    LFTO=-1
  1879.       XSIZE=TXS : YSIZE=TYS
  1880. End Proc
  1881. Procedure BXES2
  1882.    Shared BIGSPR,LFTO,TPWO,TPWIN,LFTWIN,FC,BC,XS,XSIZE,YSIZE,MP
  1883.    TXS=XSIZE : TYS=YSIZE
  1884.       XSIZE=Min(32*XS,XSIZE) : YSIZE=Min(32,YSIZE)
  1885.    BIGBARS
  1886.    Screen 1
  1887.    Ink FC,BC
  1888.    Draw 17+XSIZE*MP,5 To 17+XSIZE*MP,8+YSIZE*MP
  1889.    Draw 160*XS+TXS,6 To 160*XS+TXS,7+TYS
  1890.    XSIZE=TXS : YSIZE=TYS
  1891. End Proc
  1892. Procedure BXES3
  1893.    Shared BIGSPR,FC,BC,XS,XSIZE,YSIZE,MP
  1894.    TXS=XSIZE : TYS=YSIZE
  1895.    If BIGSPR
  1896.       XSIZE=Min(32*XS,XSIZE) : YSIZE=Min(32,YSIZE)
  1897.    End If 
  1898.    Screen 1
  1899.    Ink FC,BC
  1900.    Box 14,5 To 17+XSIZE*MP,8+YSIZE*MP
  1901.    Box 159*XS,6 To 160*XS+96,136
  1902.    Box 159*XS,6 To 160*XS+TXS,7+TYS
  1903.    Ink BC,FC
  1904.    Text 120*XS-(XS=2)*100,150,"Size X:"+Str$(TXS)+" Y:"+Str$(TYS)
  1905.    XSIZE=TXS : YSIZE=TYS
  1906. End Proc
  1907. Procedure BIGBARS
  1908.    Shared FC,BC,XSIZE,YSIZE,BIGSPR,TPWO,TPWIN,LFTO,LFTWIN,XS
  1909. X=Min(32*XS,XSIZE) : Y=Min(32,YSIZE)
  1910.  SC=Screen
  1911.    Screen 1
  1912.    If TPWO<>TPWIN or LFTO<>LFTWIN
  1913.       Ink 0
  1914.       Bar 154*XS,6 To 158*XS,135
  1915.       Bar 160*XS,1 To 160*XS+96,5
  1916.    End If 
  1917.    Ink FC,BC
  1918.    If BIGSPR and(TPWO<>TPWIN or LFTO<>LFTWIN)
  1919.       Draw 154*XS,6+TPWIN To 158*XS,6+TPWIN : Draw 154*XS,6+Y+TPWIN To 158*XS,6+Y+TPWIN
  1920.       Draw 160*XS+LFTWIN,1 To 160*XS+LFTWIN,5 : Draw 160*XS+LFTWIN+X,1 To 160*XS+LFTWIN+X,5
  1921.       Draw 156*XS,6+TPWIN To 156*XS,Y+6+TPWIN : Draw 160*XS+LFTWIN,3 To 160*XS+LFTWIN+X,3
  1922.       LFTO=LFTWIN : TPWO=TPWIN
  1923.    End If 
  1924.    Screen SC
  1925. End Proc
  1926. Procedure FASTZOOM
  1927.    Shared TPWIN,LFTWIN,BIGSPR,FC,BC,XS,M,XSIZE,YSIZE,MP,ST(),SX(),NC()
  1928.    SC=Screen
  1929.    Screen 1
  1930.    TXS=XSIZE
  1931.    TYS=YSIZE
  1932.       XSIZE=Min(32*XS,XSIZE)
  1933.       YSIZE=Min(32,YSIZE)
  1934. MP=4
  1935.       If BIGSPR
  1936.          Get Block 6,160*XS,7,96,128
  1937.       End If 
  1938.       Dreg(1)=MP
  1939.       Dreg(2)=160*XS+LFTWIN : Dreg(3)=7+TPWIN
  1940.       Dreg(4)=16 : Dreg(5)=7
  1941.       Dreg(6)=XSIZE : Dreg(7)=YSIZE
  1942.       Areg(0)=Screen Base
  1943.       Call 10
  1944.       If BIGSPR
  1945.          Put Block 6,160*XS,7
  1946.          Del Block 6
  1947.       End If 
  1948.    Set Zone 2,16,7 To 16+XSIZE*MP,7+YSIZE*MP
  1949.    Set Zone 3,160*XS,7 To 160*XS+96,135
  1950.       XSIZE=TXS : YSIZE=TYS
  1951.    Screen SC
  1952. End Proc
  1953. Procedure CREDITS
  1954.    Get Block 5,48,0,224,96
  1955.    Ink 2
  1956.    Bar 49,1 To 269,89
  1957.    Screen Copy 0,256,96,320,144 To 0,50,2
  1958.    Ink 1,2
  1959.    Text 120,12,"AMOS Sprite Editor"
  1960.    Text 120,22,"Copyright"
  1961.    Ink 3,2
  1962.    Text 120,32,"Mandarin/Jawx 1990"
  1963.    Text 120,42,"Written by"
  1964.    Text 120,52,"Shadow Software"
  1965.    Ink 1,2
  1966.    Text 52,62,"Program:Aaron Fothergill"
  1967.    Text 52,72,"Graphics:Adam Fothergill"
  1968.    Text 52,82,"Fast Zoom:Francois Lionet"
  1969.    While Mouse Key<>0 : Wend 
  1970.    While Mouse Key=0 and Asc(Inkey$)=0 : Wend : While Mouse Key<>0 : Wend 
  1971.    Put Block 5,48,0 : Del Block 5
  1972. End Proc
  1973. DISKERROR:
  1974. SC=Screen
  1975. Screen 0
  1976. Limit Mouse 
  1977. LSTERRN=Errn
  1978. LINE$(0)="Disk Error "+Str$(Errn)
  1979. BUTTON$(0)="O.K"
  1980. ALERT[30,5,6,1,1,1]
  1981. Screen SC
  1982. Limit Mouse 
  1983. Resume Next 
  1984. GENERALERROR:
  1985. LSTERRN=Errn
  1986. Resume Next