home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 85 / af085a.adf / archives / af85a1.lzx / Dialog_Procedures / Source / AllProcs.AMOS / AllProcs.amosSourceCode
Encoding:
AMOS Source Code  |  1978-07-26  |  42.2 KB  |  2,192 lines

  1. Set Buffer 30
  2. '
  3. ' ***********************************  
  4. ' *** AMOS Dialog Procedures V3.6 ***  Written By John.A.Kinsella  
  5. ' ***********************************  
  6. '
  7. ' *** SET VARIABLES HERE ****************************************************
  8. '
  9. _DIALOGBUTTON$=""
  10. A#=0.0 : Rem Compiler Fix.
  11. _WINOX=-1
  12. _WINOY=-1
  13. '
  14. _MAXFILES=200
  15. _FILES=0
  16. _PATH$="Ram:"
  17. _WILD$="**"
  18. _FILE$=""
  19. Dim _FILENAME$(_MAXFILES)
  20. '
  21. ' *** SET GLOBAL VARIABLES HERE *********************************************
  22. '
  23. Global A#,_WINX1,_WINY1,_WINX2,_WINY2,_WINOX,_WINOY
  24. '
  25. ' *** Open Default Screen & Set Font.
  26. '
  27. _OPENDIALOGSCREEN[0,256,44]
  28. '
  29. Limit Mouse 128,44 To 447,298
  30. '
  31. Get Rom Fonts 
  32. _SETFONT["Topaz",8]
  33. '
  34. ' *** INSERT PROGRAM BELOW THIS LINE ****************************************
  35. '
  36. '
  37. ' *** INSERT PROGRAM ABOVE THIS LINE ****************************************
  38. '
  39. Screen Close 0
  40. End 
  41. '
  42. Procedure _OPENDIALOGSCREEN[N,H,Y]
  43.    '
  44.    Shared _BACK,_SHADOW,_LIGHT,_COLOUR,_TEXT
  45.    '
  46.    Screen Open N,640,H,4,Hires
  47.    Screen Display N,130,Y,,
  48.    Curs Off 
  49.    Flash Off 
  50.    Cls 0
  51.    Palette $AAA,$0,$FFF,$58B
  52.    '
  53.    Colour Back Colour(0)
  54.    '
  55.    _BACK=0
  56.    _SHADOW=1
  57.    _LIGHT=2
  58.    _COLOUR=3
  59.    _TEXT=1
  60.    '
  61.    Pen _TEXT
  62.    Paper _BACK
  63.    Ink _TEXT,_BACK
  64.    '
  65.    ' *** Set Mouse Colours. 
  66.    '
  67.    Colour 17,$EEC
  68.    Colour 18,$0
  69.    Colour 19,$E44
  70.    '
  71. End Proc
  72. '
  73. Procedure _DRAW3DBOX[X1,Y1,X2,Y2,T$,IN,FC,BC]
  74.    '
  75.    Shared _SHADOW,_LIGHT
  76.    '
  77.    If IN=0 or IN=3
  78.       C1=_SHADOW
  79.       C2=_LIGHT
  80.    Else 
  81.       C1=_LIGHT
  82.       C2=_SHADOW
  83.    End If 
  84.    '
  85.    If IN<>2
  86.       Ink BC,FC
  87.       Bar X1,Y1 To X2,Y2
  88.       Ink C1
  89.       Box X1,Y1 To X2,Y2
  90.       If IN<3
  91.          Box X1+1,Y1 To X2-1,Y2
  92.       End If 
  93.       Ink C2
  94.       Polyline X1+1,Y2 To X2,Y2 To X2,Y1
  95.       If IN<3
  96.          Polyline X1+1,Y2 To X2-1,Y2 To X2-1,Y1+1
  97.       End If 
  98.    Else 
  99.       Cls BC,X1+2,Y1+1 To X2-1,Y2
  100.    End If 
  101.    '
  102.    I=0
  103.    J=0
  104.    B=0
  105.    While I<Len(T$)
  106.       I=Instr(T$,"|",I+1)
  107.       If I=0
  108.          I=Len(T$)+1
  109.       End If 
  110.       J=I
  111.       Inc B
  112.    Wend 
  113.    '
  114.    If Upper$(Left$(T$,3))="(S)"
  115.       _DRAWUSEROBJECT[X1,Y1,X2,Y2,Mid$(T$,4)]
  116.       Goto FIN
  117.    End If 
  118.    '
  119.    H#=((Y2-Y1)-(B*Text Base))/(B+1)
  120.    Y#=Y1+H#+Text Base
  121.    '
  122.    Ink FC,BC
  123.    Gr Writing 0
  124.    '
  125.    I=0
  126.    J=0
  127.    LOP=0
  128.    While LOP<B
  129.       I=Instr(T$,"|",I+1)
  130.       If I=0
  131.          I=Len(T$)+1
  132.       End If 
  133.       A$=Mid$(T$,J+1,I-J-1)
  134.       '
  135.       If Left$(A$,1)="'"
  136.          A$=Mid$(A$,2)
  137.          X7=X1+4
  138.          Goto NXT
  139.       End If 
  140.       '
  141.       If Left$(A$,1)="^"
  142.          A$=Mid$(A$,2)
  143.          X7=(X2-Text Length(A$))-4
  144.          Goto NXT
  145.       End If 
  146.       '
  147.       WID=Text Length(A$)
  148.       X7=(((X2-X1)/2)+X1)-(WID/2)+1
  149.       '
  150.       NXT:
  151.       Text X7,Y#,A$
  152.       '
  153.       Y#=Y#+Text Base+H#
  154.       '
  155.       J=I
  156.       Inc LOP
  157.    Wend 
  158.    '
  159.    Gr Writing 1
  160.    '
  161.    FIN:
  162.    '
  163. End Proc
  164. '
  165. Procedure _CHECKZONE[X1,Y1,X2,Y2,WT]
  166.    '
  167.    X=X Screen(X Mouse)
  168.    Y=Y Screen(Y Mouse)
  169.    M=Mouse Key
  170.    AN=0
  171.    '
  172.    If X<X1 or X>X2 or Y<Y1 or Y>Y2 or M=0
  173.       Goto FIN2
  174.    End If 
  175.    '
  176.    AN=M
  177.    '
  178.    If WT=0
  179.       Goto FIN2
  180.    End If 
  181.    '
  182.    If WT=1
  183.       Gr Writing 2
  184.       Bar X1,Y1 To X2,Y2
  185.    End If 
  186.    '
  187.    While X>=X1 and X<=X2 and Y>=Y1 and Y<=Y2
  188.       X=X Screen(X Mouse)
  189.       Y=Y Screen(Y Mouse)
  190.       If Mouse Key=0
  191.          Goto FIN
  192.       End If 
  193.    Wend 
  194.    '
  195.    AN=0
  196.    '
  197.    FIN:
  198.    If WT=1
  199.       Bar X1,Y1 To X2,Y2
  200.       Gr Writing 1
  201.    End If 
  202.    '
  203.    FIN2:
  204.    '
  205. End Proc[AN]
  206. '
  207. Procedure _SETFONT[FT$,FS]
  208.    '
  209.    Shared _FONTNAME$,_FONTSIZE
  210.    '
  211.    FT$=Upper$(FT$)
  212.    '
  213.    OK=0
  214.    POS=1
  215.    '
  216.    While Font$(POS)<>""
  217.       If Upper$(Left$(Font$(POS),Len(FT$)+5))=(FT$+".FONT")
  218.          If Val(Mid$(Font$(POS),30,3))=FS
  219.             Set Font POS
  220.             OK=1
  221.             _FONTNAME$=FT$
  222.             _FONTSIZE=FS
  223.          End If 
  224.       End If 
  225.       Inc POS
  226.    Wend 
  227.    '
  228. End Proc[OK]
  229. '
  230. Procedure _ADDBUTTON[X1,Y1,X2,Y2,T$,BZ]
  231.    '
  232.    Shared _TEXT,_BACK
  233.    '
  234.    _DRAW3DBOX[X1,Y1,X2,Y2,T$,1,_TEXT,_BACK]
  235.    '
  236.    If BZ<>0
  237.       _ADDZONE[X1,Y1,X2,Y2,BZ,"B"]
  238.    End If 
  239.    '
  240. End Proc
  241. '
  242. Procedure _CHECKBUTTONS
  243.    '
  244.    Shared _DIALOGBUTTON$
  245.    '
  246.    ZN=0
  247.    I1=1
  248.    I2=1
  249.    '
  250.    While I2<Len(_DIALOGBUTTON$)
  251.       '
  252.       I2=Instr(_DIALOGBUTTON$,";",I1)
  253.       L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
  254.       '
  255.       AC=Asc(Mid$(L$,1,1))
  256.       X1=Val(Mid$(L$,3,3))
  257.       Y1=Val(Mid$(L$,7,3))
  258.       X2=Val(Mid$(L$,11,3))
  259.       Y2=Val(Mid$(L$,15,3))
  260.       BZ=Val(Mid$(L$,19,4))
  261.       '
  262.       WT=1
  263.       If BZ<0
  264.          BZ=-BZ
  265.          WT=0
  266.       End If 
  267.       '
  268.       _CHECKZONE[X1,Y1,X2,Y2,WT]
  269.       If Param and(AC>64 and AC<91) : Rem A to Z.
  270.          ZN=BZ
  271.          Goto FIN
  272.       End If 
  273.       '
  274.       I1=I2+1
  275.       '
  276.    Wend 
  277.    '
  278.    FIN:
  279.    '
  280. End Proc[ZN]
  281. '
  282. Procedure _CHECKWINBUTTONS
  283.    '
  284.    Shared _DIALOGBUTTON$
  285.    '
  286.    MX=X Screen(X Mouse)
  287.    MY=Y Screen(Y Mouse)
  288.    If(MX<_WINX1 or MX>_WINX2 or MY<_WINY1 or MY>_WINY2) and Mouse Key>0
  289.       _FLASH
  290.    End If 
  291.    '
  292.    ZN=0
  293.    I1=1
  294.    I2=1
  295.    '
  296.    While I2<Len(_DIALOGBUTTON$)
  297.       '
  298.       I2=Instr(_DIALOGBUTTON$,";",I1)
  299.       L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
  300.       '
  301.       AC=Asc(Mid$(L$,1,1))
  302.       X1=Val(Mid$(L$,3,3))
  303.       Y1=Val(Mid$(L$,7,3))
  304.       X2=Val(Mid$(L$,11,3))
  305.       Y2=Val(Mid$(L$,15,3))
  306.       BZ=Val(Mid$(L$,19,4))
  307.       '
  308.       WT=1
  309.       If BZ<0
  310.          BZ=-BZ
  311.          WT=0
  312.       End If 
  313.       '
  314.       If BZ<>1
  315.          WX=(X1-_WINOX)
  316.          WY=(Y1-_WINOY)
  317.          '
  318.          BW=(X2-X1)
  319.          BH=(Y2-Y1)
  320.          '
  321.          X1=_WINX1+WX
  322.          Y1=_WINY1+WY
  323.          X2=_WINX1+WX+BW
  324.          Y2=_WINY1+WY+BH
  325.          '
  326.       End If 
  327.       '
  328.       _CHECKZONE[X1,Y1,X2,Y2,WT]
  329.       If Param and(AC>64 and AC<91) : Rem A to Z.
  330.          ZN=BZ
  331.          Goto FIN
  332.       End If 
  333.       '
  334.       I1=I2+1
  335.       '
  336.    Wend 
  337.    '
  338.    FIN:
  339.    '
  340. End Proc[ZN]
  341. '
  342. Procedure _DELETEBUTTON[NO,BC]
  343.    '
  344.    Shared _DIALOGBUTTON$
  345.    '
  346.    I1=1
  347.    I2=1
  348.    '
  349.    If NO<0
  350.       NO=-NO
  351.    End If 
  352.    '
  353.    While I2<Len(_DIALOGBUTTON$)
  354.       '
  355.       I2=Instr(_DIALOGBUTTON$,";",I1)
  356.       L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
  357.       '
  358.       BZ=Val(Mid$(L$,19,3))
  359.       If BZ<0
  360.          BZ=-BZ
  361.       End If 
  362.       '
  363.       If BZ=NO
  364.          '
  365.          X1=Val(Mid$(L$,3,3))
  366.          Y1=Val(Mid$(L$,7,3))
  367.          X2=Val(Mid$(L$,11,3))
  368.          Y2=Val(Mid$(L$,15,3))
  369.          '
  370.          _DIALOGBUTTON$=Left$(_DIALOGBUTTON$,I1-1)+Mid$(_DIALOGBUTTON$,I2+1)
  371.          '
  372.          If BC>-1
  373.             Ink BC
  374.             Bar X1,Y1 To X2,Y2
  375.          End If 
  376.          '
  377.       End If 
  378.       '
  379.       I1=I2+1
  380.       '
  381.    Wend 
  382.    '
  383. End Proc
  384. '
  385. Procedure _ADDTICKBOX[X1,Y1,PO,BZ]
  386.    '
  387.    Shared _SHADOW,_TEXT,_BACK
  388.    '
  389.    _DRAW3DBOX[X1,Y1,X1+26,Y1+11,"",1,_TEXT,_BACK]
  390.    '
  391.    If BZ=0
  392.       PO=1-PO
  393.    End If 
  394.    '
  395.    If BZ<>0
  396.       _ADDZONE[X1,Y1,X1+26,Y1+11,BZ,"T"]
  397.    End If 
  398.    '
  399.    If PO=1
  400.       Ink _SHADOW
  401.       X1=X1+7
  402.       Y1=Y1+2
  403.       Draw X1,Y1+3 To X1+3,Y1+6
  404.       Draw X1+1,Y1+3 To X1+4,Y1+6
  405.       Draw X1+2,Y1+3 To X1+5,Y1+6
  406.       Draw X1+10,Y1 To X1+12,Y1
  407.       Draw X1+10,Y1+1 To X1+6,Y1+5
  408.       Draw X1+9,Y1+1 To X1+5,Y1+5
  409.    End If 
  410.    '
  411. End Proc[PO]
  412. '
  413. Procedure _ADDTICKBUTTON[X1,Y1,X2,Y2,T$,PO,BZ]
  414.    '
  415.    Shared _TEXT,_BACK
  416.    '
  417.    _DRAW3DBOX[X1,Y1,X2,Y2,T$,1,_TEXT,_BACK]
  418.    '
  419.    If BZ=0
  420.       PO=1-PO
  421.    End If 
  422.    '
  423.    If BZ<>0
  424.       _ADDZONE[X1,Y1,X2,Y2,BZ,"U"]
  425.    End If 
  426.    '
  427.    If PO=1
  428.       Gr Writing 2
  429.       Bar X1,Y1 To X2,Y2
  430.       Gr Writing 1
  431.    End If 
  432.    '
  433. End Proc[PO]
  434. '
  435. Procedure _ADDCYCLEBUTTON[X1,Y1,X2,Y2,T$,PO,BZ]
  436.    '
  437.    Shared _SHADOW,_LIGHT,_TEXT,_BACK
  438.    '
  439.    T$=T$+"|"
  440.    I1=1
  441.    I2=1
  442.    P=1
  443.    '
  444.    I=0
  445.    IO=0
  446.    B=0
  447.    While I<Len(T$)
  448.       I=Instr(T$,"|",I+1)
  449.       If I=0
  450.          I=Len(T$)+1
  451.       End If 
  452.       IO=I
  453.       B=B+1
  454.    Wend 
  455.    '
  456.    If BZ=0
  457.       Add PO,1,1 To B
  458.    End If 
  459.    '
  460.    While I2<Len(T$)
  461.       I2=Instr(T$,"|",I1)
  462.       If P=PO
  463.          L$=Mid$(T$,I1,I2-I1)
  464.          Exit 
  465.       End If 
  466.       I1=I2+1
  467.       Inc P
  468.    Wend 
  469.    '
  470.    _DRAW3DBOX[X1,Y1,X2,Y2,"",1,_TEXT,_BACK]
  471.    If BZ<>0
  472.       _ADDZONE[X1,Y1,X2,Y2,BZ,"C"]
  473.    End If 
  474.    '
  475.    Ink _SHADOW
  476.    X1=X1+6
  477.    Y1=Y1+2
  478.    Y2=Y2-3
  479.    Draw X1+1,Y1 To X1+7,Y1
  480.    Draw X1,Y1+1 To X1,Y2-1
  481.    Draw X1+1,Y1+1 To X1+1,Y2-1
  482.    Draw X1+1,Y2 To X1+7,Y2
  483.    Draw X1+7,Y2-1 To X1+8,Y2-1
  484.    Draw X1+7,Y1+1 To X1+7,Y1+5
  485.    Draw X1+8,Y1+1 To X1+8,Y1+5
  486.    Draw X1+5,Y1+3 To X1+10,Y1+3
  487.    Draw X1+6,Y1+4 To X1+9,Y1+4
  488.    Draw X1+14,Y1 To X1+14,Y2+1
  489.    Ink _LIGHT
  490.    Draw X1+15,Y1 To X1+15,Y2+1
  491.    '
  492.    _DRAW3DBOX[X1+16,Y1-2,X2,Y2+3,L$,2,_TEXT,_BACK]
  493.    '
  494. End Proc[PO]
  495. '
  496. Procedure _ADDINPUTBUTTON[X1,Y1,TXT$,L,ML,BZ]
  497.    '
  498.    Shared _TEXT,_BACK,_FONTNAME$,_FONTSIZE
  499.    '
  500.    XX=X1+2
  501.    YY=Y1+1
  502.    ED$=TXT$
  503.    SX=L
  504.    '
  505.    Ink _TEXT,_BACK
  506.    '
  507.    X1=X1-4
  508.    Y1=Y1-3
  509.    X2=X1+(L*8)+8+4
  510.    Y2=Y1+13
  511.    '
  512.    TEMP2$=_FONTNAME$
  513.    TEMP3=_FONTSIZE
  514.    _SETFONT["Topaz",8]
  515.    '
  516.    If BZ<>0
  517.       If BZ<>999
  518.          _ADDZONE[X1,Y1,X2,Y2,BZ,"I"]
  519.       End If 
  520.       _DRAW3DBOX[X1,Y1,X2,Y2,"",1,_TEXT,_BACK]
  521.       _DRAW3DBOX[X1+2,Y1+1,X2-2,Y2-1,"",0,_TEXT,_BACK]
  522.       Gosub _DED
  523.       Goto _END
  524.    End If 
  525.    '
  526.    XC=Len(ED$)
  527.    MN=0
  528.    PX=0
  529.    L=XC
  530.    '
  531.    Clear Key 
  532.    '
  533.    Do 
  534.       Gosub _DED
  535.       '
  536.       If Mouse Key=1
  537.          X=((X Screen(X Mouse)-(X1+5))/8)
  538.          If X>=0 and X<=L
  539.             XC=X
  540.             Gosub _DED
  541.          End If 
  542.       End If 
  543.       '
  544.       Gr Writing 2
  545.       Bar GRX,GRY To GRX+7,GRY+7
  546.       '
  547.       If Mouse Key
  548.          Repeat 
  549.          Until Mouse Key=0
  550.       End If 
  551.       '
  552.       Repeat 
  553.          A$=Inkey$
  554.          S=Scancode
  555.          K=Key Shift
  556.       Until A$<>"" or Mouse Key or(A$<>"" and K)
  557.       '
  558.       XM=X Screen(X Mouse)
  559.       YM=Y Screen(Y Mouse)
  560.       If Mouse Key and(XM<X1 or XM>X2 or YM<Y1 or YM>Y2)
  561.          A$=Chr$(13)
  562.       End If 
  563.       '
  564.       Bar GRX,GRY To GRX+7,GRY+7
  565.       Gr Writing 1
  566.       '
  567.       F=1
  568.       '
  569.       If A$=Chr$(13)
  570.          Exit 
  571.       End If 
  572.       '
  573.       If A$=Chr$(27)
  574.          ED$=TXT$
  575.          TXT$=""
  576.          Gosub _DED
  577.          Exit 
  578.       End If 
  579.       '
  580.       If S=65 and K=0 and XC+PX>MN
  581.          ED$=Left$(ED$,XC+PX-1)+Mid$(ED$,PX+XC+1)
  582.          E=1
  583.          Dec L
  584.          S=79
  585.       End If 
  586.       '
  587.       If S=65 and K>0 and K<4
  588.          ED$=Mid$(ED$,PX+XC+1)
  589.          L=Len(ED$)
  590.          PX=0
  591.          XC=0
  592.       End If 
  593.       '
  594.       If S=70 and K=0 and XC+PX<L
  595.          ED$=Left$(ED$,XC+PX)+Mid$(ED$,PX+XC+2)
  596.          E=1
  597.          Dec L
  598.       End If 
  599.       '
  600.       If S=70 and K>0 and K<4
  601.          ED$=Left$(ED$,XC+PX)
  602.          L=Len(ED$)
  603.          F=0
  604.       End If 
  605.       '
  606.       If S=79 and PX+XC>MN
  607.          F=0
  608.          If XC=0
  609.             Dec PX
  610.          Else 
  611.             Dec XC
  612.          End If 
  613.       End If 
  614.       '
  615.       If S=79 and K>0 and K<4
  616.          F=0
  617.          PX=0
  618.          XC=0
  619.       End If 
  620.       '
  621.       If S=78 and PX+XC<L
  622.          F=0
  623.          If XC=SX
  624.             Inc PX
  625.          Else 
  626.             Inc XC
  627.          End If 
  628.       End If 
  629.       '
  630.       If S=78 and K>0 and K<4
  631.          F=0
  632.          XC=L
  633.          If XC>SX
  634.             XC=SX
  635.          End If 
  636.          PX=L-SX
  637.          If PX<0
  638.             PX=0
  639.          End If 
  640.       End If 
  641.       '
  642.       If F
  643.          If A$>=" " and L<ML
  644.             ED$=Left$(ED$,PX+XC)+A$+Mid$(ED$,PX+XC+1)
  645.             Inc L
  646.             If L>SX
  647.                If XC>=SX
  648.                   Inc PX
  649.                Else 
  650.                   Inc XC
  651.                End If 
  652.             Else 
  653.                Inc XC
  654.             End If 
  655.          End If 
  656.       End If 
  657.       '
  658.    Loop 
  659.    '
  660.    Goto _END
  661.    '
  662.    _DED:
  663.    _DRAW3DBOX[X1+2,Y1+1,X2-2,Y2-1,"'"+Mid$(ED$,PX+1,SX),2,_TEXT,_BACK]
  664.    GRX=X1+(XC*8)+6
  665.    GRY=Y1+3
  666.    Return 
  667.    '
  668.    _END:
  669.    _DRAW3DBOX[X1+2,Y1+1,X2-2,Y2-1,"'"+Left$(ED$,SX),2,_TEXT,_BACK]
  670.    '
  671.    _SETFONT[TEMP2$,TEMP3]
  672.    '
  673. End Proc[ED$]
  674. '
  675. Procedure _DRAWUSEROBJECT[X1,Y1,X2,Y2,T$]
  676.    '
  677.    Shared _FONTNAME$,_FONTSIZE,_SHADOW,_LIGHT,_TEXT,_BACK,_COLOUR
  678.    '
  679.    Left$(T$,3)=Upper$(Left$(T$,3))
  680.    '
  681.    ' *** Paste Icon.
  682.    '
  683.    If Mid$(T$,1,3)="ICO"
  684.       NO=Val(Mid$(T$,4,3))
  685.       If Length(2)>=NO
  686.          Paste Icon X1+Val(Mid$(T$,7,3)),Y1+Val(Mid$(T$,10,3)),NO
  687.       End If 
  688.    End If 
  689.    '
  690.    ' *** Paste Bob. 
  691.    '
  692.    If Mid$(T$,1,3)="BOB"
  693.       NO=Val(Mid$(T$,4,3))
  694.       If Length(1)>=NO
  695.          Paste Bob X1+Val(Mid$(T$,7,3)),Y1+Val(Mid$(T$,10,3)),NO
  696.       End If 
  697.    End If 
  698.    '
  699.    ' *** Up Arrow.
  700.    '
  701.    If T$="UAR"
  702.       Ink _SHADOW
  703.       X=X1+(X2-X1)/2
  704.       Y=Y1+(Y2-Y1)/2
  705.       Polygon X,Y1+2 To X1+4,Y2-2 To X,Y To X2-4,Y2-2 To X,Y1+2
  706.    End If 
  707.    '
  708.    ' *** Down Arrow.
  709.    '
  710.    If T$="DAR"
  711.       Ink _SHADOW
  712.       X=X1+(X2-X1)/2
  713.       Y=Y1+(Y2-Y1)/2
  714.       Polygon X,Y2-2 To X1+4,Y1+2 To X,Y To X2-4,Y1+2 To X,Y2-2
  715.    End If 
  716.    '
  717.    ' *** Left Arrow.
  718.    '
  719.    If T$="LAR"
  720.       Ink _SHADOW
  721.       X=X1+(X2-X1)/2
  722.       Y=Y1+(Y2-Y1)/2
  723.       Polygon X1+4,Y To X2-4,Y1+2 To X,Y To X2-4,Y2-2 To X1+4,Y
  724.    End If 
  725.    '
  726.    ' *** Right Arrow. 
  727.    '
  728.    If T$="RAR"
  729.       Ink _SHADOW
  730.       X=X1+(X2-X1)/2
  731.       Y=Y1+(Y2-Y1)/2
  732.       Polygon X2-4,Y To X1+4,Y1+2 To X,Y To X1+4,Y2-2 To X2-4,Y
  733.    End If 
  734.    '
  735.    ' *** Group Box. 
  736.    '
  737.    If T$="GBX"
  738.       _DRAW3DBOX[X1,Y1,X2,Y2,"",0,0,_BACK]
  739.       _DRAW3DBOX[X1+2,Y1+1,X2-2,Y2-1,"",1,0,_BACK]
  740.    End If 
  741.    '
  742.    ' *** Window.
  743.    '
  744.    If Mid$(T$,1,3)="WIN"
  745.       _DRAW3DBOX[X1,Y1,X2,Y2,"",4,0,_COLOUR]
  746.       _DRAW3DBOX[X1+3,Y1+10,X2-3,Y2-1,"",3,_LIGHT,_BACK]
  747.       _DRAW3DBOX[X1,Y1,X2,Y1+10,Mid$(T$,4),4,_LIGHT,_COLOUR]
  748.    End If 
  749.    '
  750.    ' *** File Icon. 
  751.    '
  752.    If Mid$(T$,1,3)="FIL"
  753.       X1=X1+4
  754.       Y1=Y1+2
  755.       Ink _SHADOW
  756.       Draw X1,Y1+2 To X1,Y1+8
  757.       Draw X1+1,Y1+2 To X1+1,Y1+8
  758.       Draw X1+2,Y1+8 To X1+11,Y1+8
  759.       Draw X1+11,Y1+8 To X1+11,Y1+2
  760.       Plot X1+10,Y1+1
  761.       Plot X1+5,Y1+1
  762.       Draw X1+6,Y1 To X1+9,Y1
  763.       Draw X1+2,Y1+2 To X1+4,Y1+2
  764.       Draw X1+2,Y1+3 To X1+5,Y1+3
  765.       Draw X1+6,Y1+4 To X1+10,Y1+4
  766.    End If 
  767.    '
  768. End Proc
  769. '
  770. Procedure _ADDRADIOBUTTON[X,Y,GP,BN,PO,BZ]
  771.    '
  772.    Shared _LIGHT,_SHADOW,_COLOUR,_BACK
  773.    '
  774.    X1=X
  775.    Y1=Y
  776.    '
  777.    If PO=0
  778.       C1=_LIGHT
  779.       C2=_SHADOW
  780.       C3=_COLOUR
  781.    Else 
  782.       C1=_SHADOW
  783.       C2=_LIGHT
  784.       C3=_BACK
  785.    End If 
  786.    '
  787.    Ink C1
  788.    Draw X1+14,Y1 To X1+14,Y1+1
  789.    Draw X1+15,Y1+1 To X1+15,Y1+7
  790.    Draw X1+16,Y1+2 To X1+16,Y1+6
  791.    Draw X1+14,Y1+7 To X1+15,Y1+7
  792.    Draw X1+14,Y1+8 To X1+3,Y1+8
  793.    Ink C2
  794.    Draw X1+13,Y1 To X1+2,Y1
  795.    Draw X1+2,Y1+1 To X1+1,Y1+1
  796.    Draw X1,Y1+2 To X1,Y1+6
  797.    Draw X1+1,Y1+2 To X1+1,Y1+7
  798.    Draw X1+2,Y1+7 To X1+2,Y1+8
  799.    Ink C3
  800.    Draw X1+4,Y1+3 To X1+4,Y1+5
  801.    Draw X1+12,Y1+3 To X1+12,Y1+5
  802.    Bar X1+5,Y1+2 To X1+11,Y1+6
  803.    '
  804.    If BZ<>0
  805.       '
  806.       L$=Space$(8)
  807.       '
  808.       Mid$(L$,2,2)=Str$(GP)-" "
  809.       Mid$(L$,5,2)=Str$(BN)-" "
  810.       Mid$(L$,8,1)=Str$(PO)-" "
  811.       '
  812.       _ADDZONE[X,Y,X+16,Y+8,BZ,"R"+L$]
  813.       '
  814.    End If 
  815.    '
  816. End Proc
  817. '
  818. Procedure _SETRADIO[BZ]
  819.    '
  820.    Shared _DIALOGBUTTON$
  821.    '
  822.    _GETBUTTONSTRING[BZ]
  823.    F$=Param$
  824.    '
  825.    GN=Val(Mid$(F$,24,2))
  826.    BA=Val(Mid$(F$,27,2))
  827.    '
  828.    I1=1
  829.    I2=1
  830.    '
  831.    While I2<Len(_DIALOGBUTTON$)
  832.       '
  833.       I2=Instr(_DIALOGBUTTON$,";",I1)
  834.       L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
  835.       '
  836.       A$=Left$(L$,1)
  837.       GP=Val(Mid$(L$,24,2))
  838.       '
  839.       If((GP=GN) and((A$="R") or(A$="R")))
  840.          '
  841.          X1=Val(Mid$(L$,3,3))
  842.          Y1=Val(Mid$(L$,7,3))
  843.          BN=Val(Mid$(L$,27,2))
  844.          '
  845.          If BN=BA
  846.             _ADDRADIOBUTTON[X1,Y1,BN,GP,0,0]
  847.          Else 
  848.             _ADDRADIOBUTTON[X1,Y1,BN,GP,1,0]
  849.          End If 
  850.       End If 
  851.       '
  852.       I1=I2+1
  853.       '
  854.    Wend 
  855.    '
  856. End Proc
  857. '
  858. Procedure _VERTICALSLIDER[X,Y,W,H,S,P,T$]
  859.    '
  860.    Shared _TEXT,_BACK,_TEXT
  861.    '
  862.    _DRAW3DBOX[X,Y,X+W,Y+H,"",4,_TEXT,_BACK]
  863.    HIG=0
  864.    '
  865.    If S>=1
  866.       T=Y+(H*(P-1))/S
  867.       B=Min(Y+H,T+H/S)
  868.       If B-T<3
  869.          T=Y+((H-3)*(P-1))/S
  870.          B=Min(Y+(H-3),T+(H-3)/S)
  871.          HIG=3
  872.       End If 
  873.       Cls _TEXT,X+3,T+1 To X+W-2,B+1+HIG
  874.    End If 
  875.    '
  876.    If T$<>""
  877.       _SLIDERROUTINE[T$,P]
  878.    End If 
  879.    '
  880. End Proc
  881. '
  882. Procedure _GRABVERTICALSLIDER[X,Y,W,H,S,P,T$]
  883.    '
  884.    If S<1 Then Pop Proc
  885.    '
  886.    T=Y+(H*(P-1))/S
  887.    B=Min(Y+H,T+H/S)
  888.    '
  889.    _CHECKZONE[X,Y,X+W,T-1,2]
  890.    If Param>0 and P>1
  891.       Dec P
  892.       Gosub _DRAWSLIDER
  893.       Goto FIN
  894.    End If 
  895.    '
  896.    _CHECKZONE[X,B+1,X+W,Y+H,2]
  897.    If Param and P<S
  898.       Inc P
  899.       Gosub _DRAWSLIDER
  900.       Goto FIN
  901.    End If 
  902.    '
  903.    _CHECKZONE[X,T,X+W,B,0]
  904.    If Param>0
  905.       '
  906.       PO=P
  907.       DY=Y Screen(Y Mouse)-T
  908.       '
  909.       Repeat 
  910.          '
  911.          YY=Y Screen(Y Mouse)-Y-DY
  912.          PO=((YY*(S+1))/H+1)
  913.          '
  914.          If PO<1
  915.             PO=1
  916.          End If 
  917.          If PO>S
  918.             PO=S
  919.          End If 
  920.          '  
  921.          If PO<>P
  922.             P=PO
  923.             Gosub _DRAWSLIDER
  924.          End If 
  925.          '
  926.       Until Mouse Key=0
  927.    End If 
  928.    '
  929.    Goto FIN
  930.    '
  931.    _DRAWSLIDER:
  932.    _VERTICALSLIDER[X,Y,W,H,S,P,""]
  933.    Return 
  934.    '
  935.    FIN:
  936.    '
  937. End Proc[P]
  938. '
  939. Procedure _HORIZONTALSLIDER[X,Y,W,H,S,P,T$]
  940.    '
  941.    Shared _TEXT,_BACK,_TEXT
  942.    '
  943.    _DRAW3DBOX[X,Y,X+W,Y+H,"",4,_TEXT,_BACK]
  944.    WID=0
  945.    '
  946.    If S>=1
  947.       T=X+(W*(P-1))/S
  948.       B=Min(X+W,T+W/S)
  949.       If B-T<6
  950.          T=X+((W-6)*(P-1))/S
  951.          B=Min(X+(W-6),T+(W-6)/S)
  952.          WID=6
  953.       End If 
  954.       Cls _TEXT,T+1,Y+2 To B+1+WID,Y+H-1
  955.    End If 
  956.    '
  957.    If T$<>""
  958.       _SLIDERROUTINE[T$,P]
  959.    End If 
  960.    '
  961. End Proc
  962. '
  963. Procedure _GRABHORIZONTALSLIDER[X,Y,W,H,S,P,T$]
  964.    '
  965.    If S<1 Then Pop Proc
  966.    '
  967.    T=X+(W*(P-1))/S
  968.    B=Min(X+W,T+W/S)
  969.    '
  970.    _CHECKZONE[X,Y,T-1,Y+H,2]
  971.    If Param>0 and P>1
  972.       Dec P
  973.       Gosub _DRAWSLIDER
  974.       Goto FIN
  975.    End If 
  976.    '
  977.    _CHECKZONE[B+1,Y,X+W,Y+H,2]
  978.    If Param>0 and P<S
  979.       Inc P
  980.       Gosub _DRAWSLIDER
  981.       Goto FIN
  982.    End If 
  983.    '
  984.    _CHECKZONE[T,Y,B,Y+H,0]
  985.    If Param>0
  986.       '
  987.       PO=P
  988.       DX=X Screen(X Mouse)-T
  989.       '
  990.       Repeat 
  991.          '
  992.          XX=X Screen(X Mouse)-X-DX
  993.          PO=((XX*(S+1))/W+1)
  994.          '
  995.          If PO<1
  996.             PO=1
  997.          End If 
  998.          If PO>S
  999.             PO=S
  1000.          End If 
  1001.          '  
  1002.          If PO<>P
  1003.             P=PO
  1004.             Gosub _DRAWSLIDER
  1005.          End If 
  1006.          '
  1007.       Until Mouse Key=0
  1008.    End If 
  1009.    '
  1010.    Goto FIN
  1011.    '
  1012.    _DRAWSLIDER:
  1013.    _HORIZONTALSLIDER[X,Y,W,H,S,P,""]
  1014.    Return 
  1015.    '
  1016.    FIN:
  1017.    '
  1018. End Proc[P]
  1019. '
  1020. Procedure _SLIDERROUTINE[T$,P]
  1021.    '
  1022.    Shared _FONTNAME$,_FONTSIZE,_COLOUR,_SHADOW,_LIGHT,_BACK,_TEXT
  1023.    '
  1024.    Goto T$
  1025.    Goto FIN
  1026.    '
  1027.    '
  1028.    FIN:
  1029.    '
  1030. End Proc
  1031. '
  1032. Procedure _DRAWTITLEBAR[T$]
  1033.    '
  1034.    Shared _FONTNAME$,_FONTSIZE,_SHADOW,_LIGHT
  1035.    '
  1036.    B_FT$=_FONTNAME$
  1037.    B_FS=_FONTSIZE
  1038.    '
  1039.    _SETFONT["Topaz",8]
  1040.    '
  1041.    If T$=""
  1042.       T$=T$+"'Amiga Workbench  "+Str$(Chip Free)-" "+" graphics mem  "
  1043.       T$=T$+Str$(Fast Free)-" "+" other mem"
  1044.    End If 
  1045.    _DRAW3DBOX[-1,-1,640,10,T$,1,_SHADOW,_LIGHT]
  1046.    '
  1047.    _SETFONT[B_FT$,B_FS]
  1048.    '
  1049. End Proc
  1050. '
  1051. Procedure _GETBUTTONSTRING[NO]
  1052.    '
  1053.    Shared _DIALOGBUTTON$
  1054.    '
  1055.    I1=1
  1056.    I2=1
  1057.    P=0
  1058.    '
  1059.    If NO<0
  1060.       NO=-NO
  1061.    End If 
  1062.    '
  1063.    While I2<Len(_DIALOGBUTTON$) and P<>NO
  1064.       '
  1065.       I2=Instr(_DIALOGBUTTON$,";",I1)
  1066.       L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
  1067.       '
  1068.       BZ=Val(Mid$(L$,19,4))
  1069.       If BZ<0
  1070.          BZ=-BZ
  1071.       End If 
  1072.       '
  1073.       If BZ=NO
  1074.          Exit 
  1075.       End If 
  1076.       '
  1077.       I1=I2+1
  1078.       '
  1079.       Inc P
  1080.    Wend 
  1081.    '
  1082. End Proc[L$]
  1083. '
  1084. Procedure _ENABLEBUTTON[NO]
  1085.    '
  1086.    Shared _DIALOGBUTTON$
  1087.    '
  1088.    I1=1
  1089.    I2=1
  1090.    P=0
  1091.    '
  1092.    While I2<Len(_DIALOGBUTTON$) and P<>NO
  1093.       '
  1094.       I2=Instr(_DIALOGBUTTON$,";",I1)
  1095.       L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
  1096.       '
  1097.       BZ=Val(Mid$(L$,19,4))
  1098.       If BZ<0
  1099.          BZ=-BZ
  1100.       End If 
  1101.       '
  1102.       If BZ=NO
  1103.          Mid$(_DIALOGBUTTON$,I1,1)=Upper$(Mid$(_DIALOGBUTTON$,I1,1))
  1104.       End If 
  1105.       '
  1106.       I1=I2+1
  1107.       '
  1108.       Inc P
  1109.    Wend 
  1110.    '
  1111. End Proc
  1112. '
  1113. Procedure _DISABLEBUTTON[NO]
  1114.    '
  1115.    Shared _DIALOGBUTTON$
  1116.    '
  1117.    I1=1
  1118.    I2=1
  1119.    P=0
  1120.    '
  1121.    While I2<Len(_DIALOGBUTTON$) and P<>NO
  1122.       '
  1123.       I2=Instr(_DIALOGBUTTON$,";",I1)
  1124.       L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
  1125.       '
  1126.       BZ=Val(Mid$(L$,19,4))
  1127.       If BZ<0
  1128.          BZ=-BZ
  1129.       End If 
  1130.       '
  1131.       If BZ=NO
  1132.          Mid$(_DIALOGBUTTON$,I1,1)=Lower$(Mid$(_DIALOGBUTTON$,I1,1))
  1133.       End If 
  1134.       '
  1135.       I1=I2+1
  1136.       '
  1137.       Inc P
  1138.    Wend 
  1139.    '
  1140. End Proc
  1141. '
  1142. Procedure _ADDZONE[X1,Y1,X2,Y2,BZ,TP$]
  1143.    '
  1144.    Shared _DIALOGBUTTON$
  1145.    '
  1146.    L$=Space$(22)+Mid$(TP$,2)+";"
  1147.    '
  1148.    Mid$(L$,1,1)=Mid$(TP$,1,1)
  1149.    Mid$(L$,3,3)=Str$(X1)-" "
  1150.    Mid$(L$,7,3)=Str$(Y1)-" "
  1151.    Mid$(L$,11,3)=Str$(X2)-" "
  1152.    Mid$(L$,15,3)=Str$(Y2)-" "
  1153.    Mid$(L$,19,4)=Str$(BZ)-" "
  1154.    '
  1155.    _DIALOGBUTTON$=_DIALOGBUTTON$+L$
  1156.    '
  1157. End Proc
  1158. '
  1159. Procedure _ADDWINDOW[X1,Y1,W,H,T$,BZ]
  1160.    '
  1161.    Shared _DIALOGBUTTON$
  1162.    '
  1163.    Get Block 1,X1,Y1,(W*8),(H*8)
  1164.    '
  1165.    _DRAWUSEROBJECT[X1,Y1,X1+(W*8)-1,Y1+(H*8)-1,"WIN"+T$]
  1166.    '
  1167.    If BZ<>0
  1168.       '      
  1169.       _DELETEBUTTON[1,-1]
  1170.       '
  1171.       L$=Space$(22)+Str$(Y1+(H*8))-" "+";"
  1172.       '
  1173.       Mid$(L$,1,1)="W"
  1174.       Mid$(L$,3,3)=Str$(X1)-" "
  1175.       Mid$(L$,7,3)=Str$(Y1)-" "
  1176.       Mid$(L$,11,3)=Str$(X1+(W*8)-1)-" "
  1177.       Mid$(L$,15,3)=Str$(Y1+10)-" "
  1178.       Mid$(L$,19,4)=Str$(BZ)-" "
  1179.       '
  1180.       _DIALOGBUTTON$=L$+_DIALOGBUTTON$
  1181.       '
  1182.       If _WINOX=-1 and _WINOY=-1
  1183.          _WINOX=X1
  1184.          _WINOY=Y1
  1185.       End If 
  1186.    End If 
  1187.    '
  1188.    _WINX1=X1
  1189.    _WINY1=Y1
  1190.    _WINX2=X1+(W*8)-1
  1191.    _WINY2=Y1+(H*8)-1
  1192.    '
  1193. End Proc
  1194. '
  1195. Procedure _CLOSEWINDOW[BZ]
  1196.    '
  1197.    Put Block 1
  1198.    Del Block 1
  1199.    '
  1200.    If BZ<>0
  1201.       _DELETEBUTTON[BZ,-1]
  1202.       If A#=0.0
  1203.          _WINOX=-1
  1204.          _WINOY=-1
  1205.       End If 
  1206.    End If 
  1207.    '
  1208. End Proc
  1209. '
  1210. Procedure _MOVEWINDOW[T$,BZ]
  1211.    '
  1212.    _GETBUTTONSTRING[BZ]
  1213.    ED$=Param$
  1214.    '
  1215.    X1=Val(Mid$(ED$,3,3))
  1216.    Y1=Val(Mid$(ED$,7,3))
  1217.    W=((Val(Mid$(ED$,11,3))-X1)/8)+1
  1218.    H=((Val(Mid$(ED$,23,3))-Y1)/8)
  1219.    '
  1220.    Get Block 2,X1,Y1,W*8,H*8
  1221.    '
  1222.    XX=X Screen(X Mouse)-X1
  1223.    YY=Y Screen(Y Mouse)-Y1
  1224.    '
  1225.    Gr Writing 2
  1226.    While Mouse Key>0
  1227.       '
  1228.       X=X Screen(X Mouse)
  1229.       Y=Y Screen(Y Mouse)
  1230.       '
  1231.       If X-XX<0
  1232.          X=XX
  1233.          X Mouse=X Hard(XX)
  1234.       End If 
  1235.       '
  1236.       If Y-YY<0
  1237.          Y=YY
  1238.          Y Mouse=Y Hard(YY)
  1239.       End If 
  1240.       '
  1241.       If(X-XX)+(W*8)>Screen Width-1
  1242.          X=XX+(Screen Width-(W*8))-1
  1243.          X Mouse=X Hard(XX+(Screen Width-(W*8))-1)
  1244.       End If 
  1245.       '
  1246.       If(Y-YY)+(H*8)>Screen Height-1
  1247.          Y=YY+(Screen Height-(Y*8))-1
  1248.          Y Mouse=Y Hard(YY+(Screen Height-(H*8))-1)
  1249.       End If 
  1250.       '
  1251.       Box X-XX,Y-YY To(X-XX)+(W*8)-1,(Y-YY)+(H*8)-1
  1252.       '
  1253.       Repeat 
  1254.       Until X<>X Screen(X Mouse) or Y<>Y Screen(Y Mouse) or Mouse Key=0
  1255.       '
  1256.       Box X-XX,Y-YY To(X-XX)+(W*8)-1,(Y-YY)+(H*8)-1
  1257.       '
  1258.    Wend 
  1259.    Gr Writing 1
  1260.    '
  1261.    A#=1.0
  1262.    _CLOSEWINDOW[BZ]
  1263.    A#=0.0
  1264.    '
  1265.    _ADDWINDOW[X-XX,Y-YY,W,H,T$,-BZ]
  1266.    '
  1267.    Put Block 2,X-XX,Y-YY
  1268.    Del Block 2
  1269.    '
  1270. End Proc
  1271. '
  1272. Procedure _FLASH
  1273.    '
  1274.    Shared _BACK
  1275.    '
  1276.    C=Colour(_BACK)
  1277.    '
  1278.    R=(Colour(_BACK)/256)/2
  1279.    G=(Colour(_BACK)/16 mod 16)/2
  1280.    B=(Colour(_BACK) mod 16)/2
  1281.    '
  1282.    Colour _BACK,R*256+G*16+B
  1283.    '
  1284.    Wait 10
  1285.    '
  1286.    Colour _BACK,C
  1287.    '
  1288. End Proc
  1289. '
  1290. Procedure _ALERTREQUESTER[M$,BT$]
  1291.    '
  1292.    Shared _DIALOGBUTTON$,_BACK,_COLOUR,_TEXT,_LIGHT,_SHADOW
  1293.    '
  1294.    If M$="_Cc_"
  1295.       Goto FIN
  1296.    End If 
  1297.    '
  1298.    I=0
  1299.    J=0
  1300.    L=0
  1301.    While I<Len(M$)
  1302.       I=Instr(M$,"|",I+1)
  1303.       If I=0
  1304.          I=Len(M$)+1
  1305.       End If 
  1306.       J=I
  1307.       Inc L
  1308.    Wend 
  1309.    '
  1310.    I=0
  1311.    J=0
  1312.    B=0
  1313.    While I<Len(BT$)
  1314.       I=Instr(BT$,"|",I+1)
  1315.       If I=0
  1316.          I=Len(BT$)+1
  1317.       End If 
  1318.       J=I
  1319.       Inc B
  1320.    Wend 
  1321.    '
  1322.    B_DLG$=_DIALOGBUTTON$
  1323.    _DIALOGBUTTON$=""
  1324.    '
  1325.    _OPENDIALOGSCREEN[7,50+(L*8),50]
  1326.    Get Palette 0
  1327.    H=50+(L*8)-1
  1328.    '
  1329.    _DRAW3DBOX[0,0,639,H-1,"",4,0,_COLOUR]
  1330.    Set Pattern 2
  1331.    _DRAW3DBOX[3,10,636,H-2,"",3,_LIGHT,_BACK]
  1332.    Set Pattern 0
  1333.    '
  1334.    If BT$=""
  1335.       _DRAW3DBOX[0,0,639,10,"",4,0,_COLOUR]
  1336.       Ink _TEXT,_COLOUR
  1337.       Text 5,7,"Information Requester"
  1338.       _DRAW3DBOX[8,13,632,H-3,M$,3,_TEXT,_BACK]
  1339.       Goto FIN2
  1340.    End If 
  1341.    '
  1342.    _DRAW3DBOX[0,0,18,10,"",4,1,_COLOUR]
  1343.    _ADDZONE[0,0,18,10,1,"B"]
  1344.    Ink _LIGHT
  1345.    Bar 7,3 To 11,7
  1346.    Ink _SHADOW
  1347.    Box 7,3 To 11,7
  1348.    _DRAW3DBOX[19,0,639,10,"",4,0,_COLOUR]
  1349.    Ink _TEXT,_COLOUR
  1350.    Text 24,7,"Button Requester"
  1351.    _DRAW3DBOX[8,13,632,H-20,M$,3,_TEXT,_BACK]
  1352.    '
  1353.    BB#=B
  1354.    D2#=326.0-((BB#*100.0)/2.0)
  1355.    '
  1356.    I=0
  1357.    J=0
  1358.    A=0
  1359.    While A<B
  1360.       I=Instr(BT$,"|",I+1)
  1361.       If I=0
  1362.          I=Len(BT$)+1
  1363.       End If 
  1364.       _ADDBUTTON[D2#+100*A,H-18,D2#+100*A+86,H-5,Left$(Mid$(BT$,J+1,I-J-1),10),A+2]
  1365.       J=I
  1366.       Inc A
  1367.    Wend 
  1368.    '
  1369.    Repeat 
  1370.       _CHECKBUTTONS
  1371.       Q=Param
  1372.    Until Q
  1373.    '
  1374.    _DIALOGBUTTON$=B_DLG$
  1375.    B_DLG$=""
  1376.    ZN=0
  1377.    '
  1378.    FIN:
  1379.    Screen Close 7
  1380.    '
  1381.    FIN2:
  1382.    '
  1383. End Proc[Q-1]
  1384. '
  1385. Procedure _EXAMINEFILE[F$]
  1386.    '
  1387.    Open In 1,F$
  1388.    L=Lof(1)
  1389.    H$=Input$(1,Min(L,1088))
  1390.    Close 1
  1391.    '
  1392.    Restore DAT
  1393.    '
  1394.    Repeat 
  1395.       Read S1,H1$,S2,H2$,FT$
  1396.       If(Mid$(H$,S1,Len(H1$))=H1$) and(Mid$(H$,S2,Len(H2$))=H2$)
  1397.          OK=1
  1398.          Exit 
  1399.       End If 
  1400.    Until H1$="END"
  1401.    '
  1402.    If H1$="END"
  1403.       C=0
  1404.       For N=1 To Len(H$)
  1405.          A=Asc(Mid$(H$,N,1))
  1406.          If A>=32 or A=10 or A=9
  1407.             Inc C
  1408.          End If 
  1409.       Next N
  1410.       P=(C*100)/Len(H$)
  1411.       If P>95
  1412.          FT$="ASCII TEXT"
  1413.       End If 
  1414.    End If 
  1415.    '
  1416.    DAT:
  1417.    Data 1,"FORM",9,"ILBM","IFF PICTURE"
  1418.    Data 1,"FORM",9,"SMUS","IFF MUSIC (AEGIS SONIX)"
  1419.    Data 1,"FORM",9,"8SVX","IFF SAMPLE"
  1420.    Data 1,"FORM",9,"ANIM","IFF ANIMATION"
  1421.    Data 1,"FORM",9,"SC3D","SCULPT 3D SCENE"
  1422.    Data 1,"AmSp",1,"","AMOS BOB BANK"
  1423.    Data 1,"AmIc",1,"","AMOS ICON BANK"
  1424.    Data 1,"AmBk",13,"Music","AMOS MUSIC BANK"
  1425.    Data 1081,"M.K.",1,"","NOISE/SOUND/PRO TRACKER MODULE"
  1426.    Data 1081,"FLT4",1,"","NOISE/SOUND/PRO TRACKER MODULE"
  1427.    Data 1,"BeEp",1,"","JAMCRACKER MODULE"
  1428.    Data 1,Chr$(65)+Chr$(250)+Chr$(15)+Chr$(250),1,"","SIDMON V1.0 MODULE"
  1429.    Data 27,"V.2",1,"","BPSOUNDMON MODULE"
  1430.    Data 1,"SMOD",1,"","FUTURE COMPOSER V1.0-V1.3"
  1431.    Data 365,"DELTA MUSIC V2.0",0,"","DELTA MUSIC V2.0"
  1432.    Data 1,"MMD1",1,"","MED MODULE"
  1433.    Data 1,"MMD0",6,Chr$(2),"MED MODULE (4 CHANNELS)"
  1434.    Data 1,"MMD0",6,Chr$(1),"MED MODULE (8 CHANNELS)"
  1435.    Data 1,"AmBk",13,"Tracker","SOUNDTRACKER MODULE IN AN AMOS BANK"
  1436.    Data 1,"AmBk",13,"Pac.Pic","AMOS PAC PIC"
  1437.    Data 1,"AmBk",13,"Samples","AMOS SAMPLE BANK"
  1438.    Data 1,"AmBk",13,"Menu","AMOS MENU BANK"
  1439.    Data 1,"AmBk",13,"Amal","AMOS AMAL BANK"
  1440.    Data 1,"AmBk",13,"Data","AMOS DATA BANK"
  1441.    Data 1,"AmBk",13,"Resource","AMOS RESOURCE BANK"
  1442.    Data 1,"AmBk",1,"","AMOS BANK"
  1443.    Data 1,"AmBs",1,"","SET OF AMOS BANKS"
  1444.    Data 1,"AMOS Basic",1,"","AMOS 1.3 PROGRAM"
  1445.    Data 1,"AMOS Pro",1,"","AMOS PROFESSIONAL PROGRAM"
  1446.    Data 1,Chr$(15)+Chr$(0)+Chr$(0),1,"","FONT DATA FILE"
  1447.    Data 1,Chr$(0)+Chr$(0)+Chr$(3)+Chr$($F3),33,"pdNu","WORKBENCH FONT"
  1448.    Data 1,Chr$(0)+Chr$(0)+Chr$(3)+Chr$($F3),1,"","EXECUTABLE PROGRAM"
  1449.    Data 1,"PP20",1,"","POWERPACKEDDATA FILE"
  1450.    Data 1,"MED"+Chr$(4),1,"","OCTAMED MODULE"
  1451.    Data 1,"MSH"+Chr$(0),1,"","OCTAMED SYNTHSOUND"
  1452.    Data 1,Chr$(227)+Chr$(16)+Chr$(0)+Chr$(1),1,"","WORKBENCH ICON"
  1453.    Data 1,"PPbk",1,"","AMOS POWERPACKED BANK"
  1454.    Data 1,Chr$(255)+Chr$(216)+Chr$(255)+Chr$(224),7,"JFIF","JPEG PICTURE"
  1455.    Data 1,"DMS!",1,"","DISKMASHER FILE"
  1456.    Data 1,"xSceneEditor",1,"","MOVIESETTER MOVIE WITH DATA"
  1457.    Data 1,"FILM",1,"","MOVIESETTER MOVIE WITHOUT DATA"
  1458.    Data 1,"DM20",1,"","DATAMASTER V2.0 DATABASE"
  1459.    Data 1,"MM"+Chr$(0)+"*",1,"","TIFF PICTURE"
  1460.    Data 5,"DEBR",27,"CHAG","FREELANCE V2.0 PRESENTATION"
  1461.    Data 1,Chr$(10)+Chr$(5)+Chr$(1),1,"","PCX PICTURE"
  1462.    Data 1,"BM",15,"(","BMP PICTURE"
  1463.    Data 1,Chr$(0)+Chr$(32)+Chr$(16)+Chr$(34),1,"","CGM METAFILE"
  1464.    Data 1,"GIF87",1,"","GIF PICTURE"
  1465.    Data 1,"GIF89",1,"","GIF PICTURE"
  1466.    Data 1,"/*",1,"","AREXX PROGRAM"
  1467.    Data 1,Chr$(0)+Chr$(0)+Chr$(0)+Chr$(0),49,Chr$(128)+Chr$(30),"NEOCHOME PICTURE"
  1468.    Data 1,"@D",1,"","AMIGAGUIDE DOCUMENT"
  1469.    Data 1,"@d",1,"","AMIGAGUIDE DOCUMENT"
  1470.    Data 1,"END",1,"","UNKNOWN FILE TYPE"
  1471.    '
  1472. End Proc[FT$]
  1473. '
  1474. Procedure _GETWBPALETTE
  1475.    '
  1476.    F$=""
  1477.    F=0
  1478.    '
  1479.    If Exist("Env:Sys/Palette.prefs")
  1480.       F$="Env:Sys/Palette.prefs"
  1481.       F=1
  1482.    End If 
  1483.    '
  1484.    If F=0 and Exist("ENVARC:Sys/Palette.prefs")
  1485.       F$="EnvArc:Sys/Palette.prefs"
  1486.       F=1
  1487.    End If 
  1488.    '
  1489.    If F=0 and Exist("Devs:System-Configuration")
  1490.       F$="Devs:System-Configuration"
  1491.       F=2
  1492.    End If 
  1493.    '
  1494.    If F=0
  1495.       Palette $999,$0,$FFF,$58A,$F00,$F0,$F,$FF0
  1496.    End If 
  1497.    '
  1498.    ' *** Change To WB Colours.
  1499.    '
  1500.    If F=1
  1501.       Open In 1,F$
  1502.       L=Lof(1)
  1503.       Close 1
  1504.       A$=String$(" ",L)
  1505.       Bload F$,Varptr(A$)
  1506.       For A=0 To 7
  1507.          R=Peek(Varptr(A$)+180+A*8)/16
  1508.          G=Peek(Varptr(A$)+182+A*8)/16
  1509.          B=Peek(Varptr(A$)+184+A*8)/16
  1510.          Colour A,(R*256+G*16+B)
  1511.       Next A
  1512.       A$=""
  1513.    End If 
  1514.    '
  1515.    If F=2
  1516.       Open In 1,F$
  1517.       L=Lof(1)
  1518.       Close 1
  1519.       A$=Space$(L)
  1520.       Bload F$,Varptr(A$)
  1521.       For A=0 To 3
  1522.          Colour A,Deek(Varptr(A$)+110+A*2)
  1523.          Colour A+16,Deek(Varptr(A$)+102+A*2)
  1524.       Next A
  1525.       A$=""
  1526.    End If 
  1527.    '
  1528.    Colour Back Colour(0)
  1529.    '
  1530. End Proc
  1531. '
  1532. Procedure _PALETTEREQUESTER[S]
  1533.    '
  1534.    Shared _DIALOGBUTTON$,_BACK,_SHADOW,_LIGHT,_COLOUR,_TEXT,_FONTNAME$,_FONTSIZE
  1535.    '
  1536.    _TEMP1$=_DIALOGBUTTON$
  1537.    _TEMP2$=_FONTNAME$
  1538.    _TEMP3=_FONTSIZE
  1539.    _DIALOGBUTTON$=""
  1540.    '
  1541.    SY=70
  1542.    _OPENDIALOGSCREEN[7,80,SY]
  1543.    Get Palette 0
  1544.    '
  1545.    _SETFONT["Topaz",8]
  1546.    '
  1547.    Screen S
  1548.    SC=Screen Colour
  1549.    If SC>64
  1550.       SC=16
  1551.       FF=16
  1552.    Else 
  1553.       FF=SC
  1554.    End If 
  1555.    C=1
  1556.    '
  1557.    Screen Open 6,320,20,SC,Lowres
  1558.    Screen Display 6,,SY+81,,
  1559.    Curs Off 
  1560.    Flash Off 
  1561.    Cls 0
  1562.    Get Palette S
  1563.    '
  1564.    STP=320/SC
  1565.    LOP=0
  1566.    While LOP<SC+1
  1567.       Ink LOP
  1568.       Bar LOP*STP,2 To LOP*STP+STP,20
  1569.       Inc LOP
  1570.    Wend 
  1571.    Gosub _LINE
  1572.    Screen 7
  1573.    '
  1574.    _DRAW3DBOX[0,0,639,79,"",,0,3]
  1575.    _DRAWTITLEBAR["Palette Requester V1.1"]
  1576.    _ADDBUTTON[0,0,44,10,"OK",11]
  1577.    '
  1578.    _DRAW3DBOX[10,16,38,34,"R",1,_TEXT,_BACK]
  1579.    _DRAW3DBOX[10,36,38,54,"G",1,_TEXT,_BACK]
  1580.    _DRAW3DBOX[10,56,38,74,"B",1,_TEXT,_BACK]
  1581.    '
  1582.    _HORIZONTALSLIDER[42,16,418,18,16,1,""]
  1583.    _HORIZONTALSLIDER[42,36,418,18,16,1,""]
  1584.    _HORIZONTALSLIDER[42,56,418,18,16,1,""]
  1585.    '
  1586.    _ADDBUTTON[462,19,476,31,"(S)LAR",1]
  1587.    _ADDBUTTON[462,39,476,51,"(S)LAR",2]
  1588.    _ADDBUTTON[462,59,476,71,"(S)LAR",3]
  1589.    _ADDBUTTON[478,19,492,31,"(S)RAR",4]
  1590.    _ADDBUTTON[478,39,492,51,"(S)RAR",5]
  1591.    _ADDBUTTON[478,59,492,71,"(S)RAR",6]
  1592.    '
  1593.    _DRAW3DBOX[495,16,521,34,"",0,,_COLOUR]
  1594.    _DRAW3DBOX[495,36,521,54,"",0,,_COLOUR]
  1595.    _DRAW3DBOX[495,56,521,74,"",0,,_COLOUR]
  1596.    _DRAW3DBOX[497,17,519,33,"",1,,_BACK]
  1597.    _DRAW3DBOX[497,37,519,53,"",1,,_BACK]
  1598.    _DRAW3DBOX[497,57,519,73,"",1,,_BACK]
  1599.    '
  1600.    _ADDBUTTON[525,16,629,30,"Spread",7]
  1601.    _ADDBUTTON[525,31,629,45,"Swap",8]
  1602.    _ADDBUTTON[525,46,629,60,"Copy",9]
  1603.    _ADDBUTTON[525,61,629,75,"Reset",10]
  1604.    '
  1605.    Gosub _GET
  1606.    Gosub _LINE
  1607.    Gosub _R_SLIDER
  1608.    Gosub _G_SLIDER
  1609.    Gosub _B_SLIDER
  1610.    '
  1611.    Do 
  1612.       '
  1613.       _CHECKBUTTONS
  1614.       ZN=Param
  1615.       '
  1616.       _CHECKZONE[46,0,639,10,0]
  1617.       If Param
  1618.          YY=Y Screen(Y Mouse)
  1619.          While Mouse Key
  1620.             If Y Mouse>42 and Y Mouse<200
  1621.                SY=Y Mouse
  1622.                Screen Display 7,,SY-YY,,
  1623.                Screen Display 6,,SY-YY+81,,
  1624.             End If 
  1625.          Wend 
  1626.       End If 
  1627.       '
  1628.       If ZN=11
  1629.          Goto FIN
  1630.       End If 
  1631.       '
  1632.       If ZN=1 and R>0
  1633.          Dec R
  1634.          Gosub _R_SLIDER
  1635.          Gosub _CHANGE
  1636.       End If 
  1637.       '
  1638.       If ZN=4 and R<15
  1639.          Inc R
  1640.          Gosub _R_SLIDER
  1641.          Gosub _CHANGE
  1642.       End If 
  1643.       '
  1644.       If ZN=2 and G>0
  1645.          Dec G
  1646.          Gosub _G_SLIDER
  1647.          Gosub _CHANGE
  1648.       End If 
  1649.       '
  1650.       If ZN=5 and G<15
  1651.          Inc G
  1652.          Gosub _G_SLIDER
  1653.          Gosub _CHANGE
  1654.       End If 
  1655.       '
  1656.       If ZN=3 and B>0
  1657.          Dec B
  1658.          Gosub _B_SLIDER
  1659.          Gosub _CHANGE
  1660.       End If 
  1661.       '
  1662.       If ZN=6 and B<15
  1663.          Inc B
  1664.          Gosub _B_SLIDER
  1665.          Gosub _CHANGE
  1666.       End If 
  1667.       '
  1668.       If ZN=7
  1669.          '
  1670.          _DRAWTITLEBAR["Select Colour To Spread To (ESC Exits)"]
  1671.          CC=C
  1672.          Screen 6
  1673.          Repeat 
  1674.             If Mouse Key
  1675.                CC=Point(X Screen(6,X Mouse),Y Screen(6,Y Mouse))
  1676.             End If 
  1677.          Until Inkey$=Chr$(27) or(CC<>C and CC<FF)
  1678.          '
  1679.          If CC<>C
  1680.             FIRST=C
  1681.             LAST=CC
  1682.             Screen 6
  1683.             If FIRST>LAST
  1684.                Swap FIRST,LAST
  1685.             End If 
  1686.             CF=Colour(FIRST)
  1687.             CL=Colour(LAST)
  1688.             NCOLS#=LAST-FIRST
  1689.             '
  1690.             DR#=(((CL/256) mod 16)-((CF/256) mod 16))/NCOLS#
  1691.             DG#=(((CL/16) mod 16)-((CF/16) mod 16))/NCOLS#
  1692.             DB#=((CL mod 16)-(CF mod 16))/NCOLS#
  1693.             '
  1694.             N=0
  1695.             While N<(LAST-FIRST)+1
  1696.                R=((CF/256) mod 16)+DR#*N
  1697.                G=((CF/16) mod 16)+DG#*N
  1698.                B=(CF mod 16)+DB#*N
  1699.                Colour FIRST+N,R*256+G*16+B
  1700.                Inc N
  1701.             Wend 
  1702.          End If 
  1703.          '
  1704.          Screen 7
  1705.          _DRAWTITLEBAR["Palette Requester V1.1"]
  1706.          _ADDBUTTON[0,0,44,10,"OK",0]
  1707.          Gosub _GET
  1708.          Gosub _R_SLIDER
  1709.          Gosub _G_SLIDER
  1710.          Gosub _B_SLIDER
  1711.          '
  1712.       End If 
  1713.       '
  1714.       If ZN=8
  1715.          '
  1716.          _DRAWTITLEBAR["Select Colour To Swap With (ESC Exits)"]
  1717.          CC=C
  1718.          Screen 6
  1719.          Repeat 
  1720.             If Mouse Key
  1721.                CC=Point(X Screen(6,X Mouse),Y Screen(6,Y Mouse))
  1722.             End If 
  1723.          Until Inkey$=Chr$(27) or(CC<>C and CC<FF)
  1724.          '
  1725.          TMP=Colour(C)
  1726.          Colour C,Colour(CC)
  1727.          Colour CC,TMP
  1728.          Screen 7
  1729.          _DRAWTITLEBAR["Palette Requester V1.1"]
  1730.          _ADDBUTTON[0,0,44,10,"OK",0]
  1731.          Gosub _GET
  1732.          Gosub _R_SLIDER
  1733.          Gosub _G_SLIDER
  1734.          Gosub _B_SLIDER
  1735.          '
  1736.       End If 
  1737.       '
  1738.       If ZN=9
  1739.          '
  1740.          _DRAWTITLEBAR["Select Colour To Copy To (ESC Exits)"]
  1741.          CC=C
  1742.          Screen 6
  1743.          Repeat 
  1744.             If Mouse Key
  1745.                CC=Point(X Screen(6,X Mouse),Y Screen(6,Y Mouse))
  1746.             End If 
  1747.          Until Inkey$=Chr$(27) or(CC<>C and CC<FF)
  1748.          '
  1749.          Colour CC,Colour(C)
  1750.          Screen 7
  1751.          _DRAWTITLEBAR["Palette Requester V1.1"]
  1752.          _ADDBUTTON[0,0,44,10,"OK",0]
  1753.          Gosub _GET
  1754.          Gosub _R_SLIDER
  1755.          Gosub _G_SLIDER
  1756.          Gosub _B_SLIDER
  1757.          '
  1758.       End If 
  1759.       '
  1760.       If ZN=10
  1761.          Screen 6
  1762.          Get Palette S
  1763.          Screen 7
  1764.          Gosub _GET
  1765.          Gosub _R_SLIDER
  1766.          Gosub _G_SLIDER
  1767.          Gosub _B_SLIDER
  1768.       End If 
  1769.       '
  1770.       If Scin(X Mouse,Y Mouse)=6
  1771.          Gosub _PICK
  1772.       End If 
  1773.       '
  1774.       _CHECKZONE[42+(R*26),16,42+(R*26)+24,34,0]
  1775.       If Param
  1776.          While Mouse Key and X Screen(X Mouse)>46 and X Screen(X Mouse)<454
  1777.             R=(X Screen(X Mouse)-42)/26
  1778.             Gosub _R_SLIDER
  1779.             Gosub _CHANGE
  1780.          Wend 
  1781.       End If 
  1782.       '
  1783.       _CHECKZONE[42+(G*26),36,42+(G*26)+24,54,0]
  1784.       If Param
  1785.          While Mouse Key and X Screen(X Mouse)>46 and X Screen(X Mouse)<454
  1786.             G=(X Screen(X Mouse)-42)/26
  1787.             Gosub _G_SLIDER
  1788.             Gosub _CHANGE
  1789.          Wend 
  1790.       End If 
  1791.       '
  1792.       _CHECKZONE[42+(B*26),56,42+(B*26)+24,74,0]
  1793.       If Param
  1794.          While Mouse Key and X Screen(X Mouse)>46 and X Screen(X Mouse)<454
  1795.             B=(X Screen(X Mouse)-42)/26
  1796.             Gosub _B_SLIDER
  1797.             Gosub _CHANGE
  1798.          Wend 
  1799.       End If 
  1800.       '
  1801.    Loop 
  1802.    '
  1803.    FIN:
  1804.    Screen S
  1805.    Get Palette 6
  1806.    Screen Close 7
  1807.    Screen Close 6
  1808.    _SETFONT[_TEMP2$,_TEMP3]
  1809.    _DIALOGBUTTON$=_TEMP1$
  1810.    Pop Proc
  1811.    '
  1812.    _PICK:
  1813.    While Scin(X Mouse,Y Mouse)=6
  1814.       Screen 6
  1815.       If Mouse Key
  1816.          C=Point(X Screen(6,X Mouse),Y Screen(6,Y Mouse))
  1817.          Gosub _GET
  1818.          Gosub _LINE
  1819.          Gosub _R_SLIDER
  1820.          Gosub _G_SLIDER
  1821.          Gosub _B_SLIDER
  1822.       End If 
  1823.    Wend 
  1824.    Screen 7
  1825.    Return 
  1826.    '
  1827.    _LINE:
  1828.    Screen 6
  1829.    Ink 0
  1830.    Draw 0,0 To 319,0
  1831.    Ink 1
  1832.    Draw C*STP,0 To C*STP+STP,0
  1833.    Screen 7
  1834.    Return 
  1835.    '
  1836.    _GET:
  1837.    R=Colour(C)/256
  1838.    G=Colour(C)/16 mod 16
  1839.    B=Colour(C) mod 16
  1840.    Return 
  1841.    '
  1842.    _R_SLIDER:
  1843.    _HORIZONTALSLIDER[42,16,418,18,16,R+1,""]
  1844.    _DRAW3DBOX[497,17,519,33,Str$(R)-" ",2,_TEXT,_BACK]
  1845.    Return 
  1846.    '
  1847.    _G_SLIDER:
  1848.    _HORIZONTALSLIDER[42,36,418,18,16,G+1,""]
  1849.    _DRAW3DBOX[496,37,519,53,Str$(G)-" ",2,_TEXT,_BACK]
  1850.    Return 
  1851.    '
  1852.    _B_SLIDER:
  1853.    _HORIZONTALSLIDER[42,56,418,18,16,B+1,""]
  1854.    _DRAW3DBOX[497,57,519,73,Str$(B)-" ",2,_TEXT,_BACK]
  1855.    Return 
  1856.    '
  1857.    _CHANGE:
  1858.    R$=Hex$(R)
  1859.    G$=Mid$(Hex$(G),2,1)
  1860.    B$=Mid$(Hex$(B),2,1)
  1861.    Screen 6
  1862.    Colour C,Val(R$+G$+B$)
  1863.    Screen 7
  1864.    Return 
  1865.    '
  1866. End Proc
  1867. '
  1868. Procedure _FILEREQUESTER[H$]
  1869.    '
  1870.    Shared _DIALOGBUTTON$,_FONTNAME$,_FONTSIZE,_TEXT,_COLOUR,_LIGHT,_BACK
  1871.    Shared _MAXFILES,_FILES,_PATH$,_WILD$,_FILENAME$(),_FILE$
  1872.    '
  1873.    TEMP1$=_DIALOGBUTTON$
  1874.    _DIALOGBUTTON$=""
  1875.    '
  1876.    TEMP2$=_FONTNAME$
  1877.    TEMP3=_FONTSIZE
  1878.    '
  1879.    _SETFONT["Topaz",8]
  1880.    '
  1881.    _OPENDIALOGSCREEN[7,110,44]
  1882.    Get Palette 0
  1883.    _DRAWTITLEBAR[H$]
  1884.    '
  1885.    _DRAW3DBOX[0,11,639,108,"",1,,_COLOUR]
  1886.    _DRAW3DBOX[8,13,334,106,"",1,,_BACK]
  1887.    '
  1888.    _ADDBUTTON[337,89,352,97,"(S)UAR",-1]
  1889.    _DRAW3DBOX[337,13,352,87,"",1,,_BACK]
  1890.    _ADDBUTTON[337,98,352,106,"(S)DAR",-2]
  1891.    '
  1892.    _DRAW3DBOX[356,45,440,59,"File",1,_TEXT,_BACK]
  1893.    _ADDINPUTBUTTON[360,64,_FILE$,31,31,-3]
  1894.    _DRAW3DBOX[356,13,440,27,"Drawer",1,_TEXT,_BACK]
  1895.    _ADDINPUTBUTTON[360,32,_PATH$+_WILD$,31,120,-4]
  1896.    '
  1897.    _ADDBUTTON[356,77,490,91,"Parent",5]
  1898.    _ADDBUTTON[356,92,490,106,"Volumes",6]
  1899.    _ADDBUTTON[497,77,631,91,"Cancel",7]
  1900.    _ADDBUTTON[497,92,631,106,"OK",8]
  1901.    '
  1902.    _BPATH$=_PATH$+_WILD$
  1903.    _SWITCH=0
  1904.    _POSITION=1
  1905.    '
  1906.    If _FILES=0
  1907.       Gosub _GETDIRECTORY
  1908.    End If 
  1909.    '
  1910.    Gosub _DISPLAYLIST
  1911.    Gosub _DISPLAYPATH
  1912.    Gosub _DISPLAYFILE
  1913.    '
  1914.    Do 
  1915.       '
  1916.       _CHECKBUTTONS
  1917.       _BUTTONZONE=Param
  1918.       '
  1919.       If _BUTTONZONE=1 and _POSITION>1
  1920.          Dec _POSITION
  1921.          Gosub _DISPLAYLIST
  1922.       End If 
  1923.       '
  1924.       If _BUTTONZONE=2 and _POSITION<_FILES-11
  1925.          Inc _POSITION
  1926.          Gosub _DISPLAYLIST
  1927.       End If 
  1928.       '
  1929.       If _BUTTONZONE=3
  1930.          _ADDINPUTBUTTON[360,64,_FILE$,31,31,0]
  1931.          _FILE$=Param$
  1932.       End If 
  1933.       '
  1934.       If _BUTTONZONE=4
  1935.          _BPATH$=_PATH$
  1936.          _ADDINPUTBUTTON[360,32,_PATH$+_WILD$,31,120,0]
  1937.          _PATH$=Param$
  1938.          Gosub _CUTWILD
  1939.          _TEMP$=_PATH$
  1940.          Gosub _CHECKFILE
  1941.       End If 
  1942.       '
  1943.       If _BUTTONZONE=5
  1944.          Gosub _PARENT
  1945.       End If 
  1946.       '
  1947.       If _BUTTONZONE=6
  1948.          SWITCH=1
  1949.          Gosub _GETDIRECTORY
  1950.          Gosub _DISPLAYLIST
  1951.          Gosub _DISPLAYPATH
  1952.          Gosub _DISPLAYFILE
  1953.       End If 
  1954.       '
  1955.       If _BUTTONZONE=7
  1956.          _FILE$=""
  1957.          Goto FIN
  1958.       End If 
  1959.       '
  1960.       If _BUTTONZONE=8
  1961.          _TEMP$=_PATH$+_FILE$
  1962.          Goto FIN
  1963.       End If 
  1964.       '
  1965.       _COUNT=0
  1966.       While _COUNT<11
  1967.          _CHECKZONE[10,16+(_COUNT*8),332,23+(_COUNT*8),1]
  1968.          If(Param>0) and(_FILENAME$(_POSITION+_COUNT)<>"")
  1969.             _TEMP$=_FILENAME$(_POSITION+_COUNT)
  1970.             Gosub _CHECKFILE
  1971.             Gosub _DISPLAYFILE
  1972.          End If 
  1973.          Inc _COUNT
  1974.       Wend 
  1975.       '
  1976.       _GRABVERTICALSLIDER[337,13,15,74,Min(_FILES,_FILES-11),_POSITION,""]
  1977.       If Param<>_POSITION
  1978.          _POSITION=Param
  1979.          Gosub _DISPLAYLIST
  1980.       End If 
  1981.       '
  1982.    Loop 
  1983.    '
  1984.    _GETDIRECTORY:
  1985.    '
  1986.    If Not Exist(_PATH$)
  1987.       _PATH$=_BPATH$
  1988.    End If 
  1989.    '
  1990.    _COUNT=1
  1991.    While _COUNT<_MAXFILES+1
  1992.       _FILENAME$(_COUNT)=""
  1993.       Inc _COUNT
  1994.    Wend 
  1995.    '
  1996.    Set Dir 31
  1997.    _FILES=1
  1998.    '
  1999.    If SWITCH=0
  2000.       '
  2001.       _FILENAME$(_FILES)=Dir First$(_PATH$+_WILD$)
  2002.       While _FILENAME$(_FILES)<>"" and _FILES<_MAXFILES
  2003.          If Mid$(_FILENAME$(_FILES),1,1)="*"
  2004.             Mid$(_FILENAME$(_FILES),31,5)="(Dir)"
  2005.          End If 
  2006.          Inc _FILES
  2007.          _FILENAME$(_FILES)=Dir Next$
  2008.       Wend 
  2009.       '
  2010.    Else 
  2011.       '
  2012.       _FILENAME$(_FILES)=Dev First$("**")
  2013.       While _FILENAME$(_FILES)<>"" and _FILES<_MAXFILES
  2014.          Mid$(_FILENAME$(_FILES),31,5)="(Dev)"
  2015.          Inc _FILES
  2016.          _FILENAME$(_FILES)=Dev Next$
  2017.       Wend 
  2018.       '
  2019.    End If 
  2020.    '
  2021.    _BPATH$=_PATH$
  2022.    _POSITION=1
  2023.    SWITCH=0
  2024.    '
  2025.    Return 
  2026.    '
  2027.    _DISPLAYPATH:
  2028.    _ADDINPUTBUTTON[360,32,_PATH$+_WILD$,31,31,999]
  2029.    Return 
  2030.    '
  2031.    _DISPLAYFILE:
  2032.    _ADDINPUTBUTTON[360,64,_FILE$,31,31,999]
  2033.    Return 
  2034.    '
  2035.    _DISPLAYLIST:
  2036.    '
  2037.    _COUNT=_POSITION
  2038.    While _COUNT<_POSITION+11
  2039.       Locate 2,(_COUNT-_POSITION)+2
  2040.       If _FILENAME$(_COUNT)<>""
  2041.          If Left$(_FILENAME$(_COUNT),1)="*"
  2042.             Pen _LIGHT
  2043.          Else 
  2044.             Pen _TEXT
  2045.          End If 
  2046.          Print _FILENAME$(_COUNT);
  2047.       Else 
  2048.          Print Space$(38);
  2049.       End If 
  2050.       Inc _COUNT
  2051.    Wend 
  2052.    '
  2053.    _VERTICALSLIDER[337,13,15,74,Min(_FILES,_FILES-11),_POSITION,""]
  2054.    '
  2055.    Return 
  2056.    '
  2057.    _PARENT:
  2058.    '
  2059.    If Len(_PATH$)>2
  2060.       _COUNT=Len(_PATH$)-1
  2061.       While _COUNT>1
  2062.          A$=Mid$(_PATH$,_COUNT,1)
  2063.          If(A$="/") or(A$=":")
  2064.             _PATH$=Left$(_PATH$,_COUNT)
  2065.             Gosub _GETDIRECTORY
  2066.             Gosub _DISPLAYPATH
  2067.             Gosub _DISPLAYLIST
  2068.             Exit 
  2069.          End If 
  2070.          Dec _COUNT
  2071.       Wend 
  2072.    End If 
  2073.    Return 
  2074.    '
  2075.    _CUTWILD:
  2076.    '
  2077.    _COUNT=Len(_PATH$)
  2078.    While _COUNT>1
  2079.       A$=Mid$(_PATH$,_COUNT,1)
  2080.       If(A$="/") or(A$=":")
  2081.          _WILD$=Right$(_PATH$,Len(_PATH$)-_COUNT)
  2082.          _PATH$=Left$(_PATH$,_COUNT)
  2083.          Exit 
  2084.       End If 
  2085.       Dec _COUNT
  2086.    Wend 
  2087.    Return 
  2088.    '
  2089.    _CHECKFILE:
  2090.    '
  2091.    _COUNT=30
  2092.    While _COUNT>1
  2093.       If Mid$(_TEMP$,_COUNT,1)<>" "
  2094.          _TEMP$=Left$(_TEMP$,_COUNT)
  2095.          Exit 
  2096.       End If 
  2097.       Dec _COUNT
  2098.    Wend 
  2099.    '
  2100.    If(Right$(_TEMP$,1)=":") or(Right$(_TEMP$,1)="/")
  2101.       If Left$(_TEMP$,1)=" "
  2102.          _PATH$=Mid$(_TEMP$,2)
  2103.       Else 
  2104.          _PATH$=_TEMP$
  2105.       End If 
  2106.       Gosub _GETDIRECTORY
  2107.       SWITCH=0
  2108.       Gosub _DISPLAYPATH
  2109.       Gosub _DISPLAYLIST
  2110.       Goto OK1
  2111.    End If 
  2112.    '
  2113.    A$=Left$(_TEMP$,1)
  2114.    _TEMP$=Mid$(_TEMP$,2)
  2115.    '
  2116.    If A$="*"
  2117.       _PATH$=_PATH$+_TEMP$+"/"
  2118.       Gosub _GETDIRECTORY
  2119.       Gosub _DISPLAYPATH
  2120.       Gosub _DISPLAYLIST
  2121.       Goto OK1
  2122.    End If 
  2123.    '
  2124.    _FILE$=_TEMP$
  2125.    Gosub _DISPLAYFILE
  2126.    '
  2127.    OK1:
  2128.    Return 
  2129.    '
  2130.    FIN:
  2131.    '
  2132.    _SETFONT[TEMP2$,TEMP3]
  2133.    _DIALOGBUTTON$=TEMP1$
  2134.    Screen Close 7
  2135.    '
  2136. End Proc[_TEMP$]
  2137. '
  2138. Procedure _INPUTREQUESTER[M$,TXT$,L,ML]
  2139.    '
  2140.    Shared _DIALOGBUTTON$,_BACK,_COLOUR,_TEXT,_LIGHT,_SHADOW
  2141.    '
  2142.    _TEMP1$=_DIALOGBUTTON$
  2143.    _TEMP2$=_FONTNAME$
  2144.    _TEMP3=_FONTSIZE
  2145.    _DIALOGBUTTON$=""
  2146.    _OLDTXT$=TXT$
  2147.    '
  2148.    _OPENDIALOGSCREEN[7,58,50]
  2149.    Get Palette 0
  2150.    H=57
  2151.    '
  2152.    _DRAW3DBOX[0,0,639,H-1,"",4,0,_COLOUR]
  2153.    Set Pattern 2
  2154.    _DRAW3DBOX[3,10,636,H-2,"",3,_LIGHT,_BACK]
  2155.    Set Pattern 0
  2156.    '
  2157.    _DRAW3DBOX[2,1,637,9,M$,2,_TEXT,_COLOUR]
  2158.    _DRAW3DBOX[8,13,632,H-20,"",3,,_BACK]
  2159.    '
  2160.    _ADDBUTTON[20,H-18,120,H-5,"Cancel",1]
  2161.    _ADDBUTTON[519,H-18,619,H-5,"OK",2]
  2162.    '
  2163.    L=Min(L,76)
  2164.    XX=(Screen Width/2)-(L*8/2)
  2165.    _ADDINPUTBUTTON[XX,24,TXT$,L,ML,-3]
  2166.    '
  2167.    Do 
  2168.       '
  2169.       _CHECKBUTTONS
  2170.       _BUTTONZONE=Param
  2171.       '
  2172.       If _BUTTONZONE=1
  2173.          TXT$=_OLDTXT$
  2174.          Exit 
  2175.       End If 
  2176.       '
  2177.       If _BUTTONZONE=2
  2178.          Exit 
  2179.       End If 
  2180.       '
  2181.       If _BUTTONZONE=3
  2182.          _ADDINPUTBUTTON[XX,24,TXT$,L,ML,0]
  2183.          TXT$=Param$
  2184.       End If 
  2185.       '
  2186.    Loop 
  2187.    '
  2188.    _DIALOGBUTTON$=_TEMP1$
  2189.    _SETFONT[_TEMP2$,_TEMP3]
  2190.    Screen Close 7
  2191.    '
  2192. End Proc[TXT$]