home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 85 / af085a.adf / archives / af85a1.lzx / Dialog_Procedures / Source / DialogProcedures.ASC < prev    next >
Encoding:
Text File  |  1978-07-26  |  18.8 KB  |  1,096 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. '
  12. _MAXFILES=200
  13. _FILES=0
  14. _PATH$="Ram:"
  15. _WILD$="**"
  16. _FILE$=""
  17. Dim _FILENAME$(_MAXFILES)
  18. '
  19. ' *** SET GLOBAL VARIABLES HERE *********************************************
  20. '
  21. Global A#
  22. '
  23. ' *** Open Default Screen & Set Font.
  24. '
  25. _OPENDIALOGSCREEN[0,256,44]
  26. '
  27. Limit Mouse 128,44 To 447,298
  28. '
  29. Get Rom Fonts 
  30. _SETFONT["Topaz",8]
  31. '
  32. ' *** INSERT PROGRAM BELOW THIS LINE ****************************************
  33. '
  34. '
  35. ' *** INSERT PROGRAM ABOVE THIS LINE ****************************************
  36. '
  37. Screen Close 0
  38. End 
  39. '
  40. Procedure _OPENDIALOGSCREEN[N,H,Y]
  41.    '
  42.    Shared _BACK,_SHADOW,_LIGHT,_COLOUR,_TEXT
  43.    '
  44.    Screen Open N,640,H,4,Hires
  45.    Screen Display N,130,Y,,
  46.    Curs Off 
  47.    Flash Off 
  48.    Cls 0
  49.    Palette $AAA,$0,$FFF,$58B
  50.    '
  51.    Colour Back Colour(0)
  52.    '
  53.    _BACK=0
  54.    _SHADOW=1
  55.    _LIGHT=2
  56.    _COLOUR=3
  57.    _TEXT=1
  58.    '
  59.    Pen _TEXT
  60.    Paper _BACK
  61.    Ink _TEXT,_BACK
  62.    '
  63.    ' *** Set Mouse Colours. 
  64.    '
  65.    Colour 17,$EEC
  66.    Colour 18,$0
  67.    Colour 19,$E44
  68.    '
  69. End Proc
  70. '
  71. Procedure _DRAW3DBOX[X1,Y1,X2,Y2,T$,IN,FC,BC]
  72.    '
  73.    Shared _SHADOW,_LIGHT
  74.    '
  75.    If IN=0 or IN=3
  76.       C1=_SHADOW
  77.       C2=_LIGHT
  78.    Else 
  79.       C1=_LIGHT
  80.       C2=_SHADOW
  81.    End If 
  82.    '
  83.    If IN<>2
  84.       Ink BC,FC
  85.       Bar X1,Y1 To X2,Y2
  86.       Ink C1
  87.       Box X1,Y1 To X2,Y2
  88.       If IN<3
  89.          Box X1+1,Y1 To X2-1,Y2
  90.       End If 
  91.       Ink C2
  92.       Polyline X1+1,Y2 To X2,Y2 To X2,Y1
  93.       If IN<3
  94.          Polyline X1+1,Y2 To X2-1,Y2 To X2-1,Y1+1
  95.       End If 
  96.    Else 
  97.       Cls BC,X1+2,Y1+1 To X2-1,Y2
  98.    End If 
  99.    '
  100.    I=0
  101.    J=0
  102.    B=0
  103.    While I<Len(T$)
  104.       I=Instr(T$,"|",I+1)
  105.       If I=0
  106.          I=Len(T$)+1
  107.       End If 
  108.       J=I
  109.       Inc B
  110.    Wend 
  111.    '
  112.    If Upper$(Left$(T$,3))="(S)"
  113.       _DRAWUSEROBJECT[X1,Y1,X2,Y2,Mid$(T$,4)]
  114.       Goto FIN
  115.    End If 
  116.    '
  117.    H#=((Y2-Y1)-(B*Text Base))/(B+1)
  118.    Y#=Y1+H#+Text Base
  119.    '
  120.    Ink FC,BC
  121.    Gr Writing 0
  122.    '
  123.    I=0
  124.    J=0
  125.    LOP=0
  126.    While LOP<B
  127.       I=Instr(T$,"|",I+1)
  128.       If I=0
  129.          I=Len(T$)+1
  130.       End If 
  131.       A$=Mid$(T$,J+1,I-J-1)
  132.       '
  133.       If Left$(A$,1)="'"
  134.          A$=Mid$(A$,2)
  135.          X7=X1+4
  136.          Goto NXT
  137.       End If 
  138.       '
  139.       If Left$(A$,1)="^"
  140.          A$=Mid$(A$,2)
  141.          X7=(X2-Text Length(A$))-4
  142.          Goto NXT
  143.       End If 
  144.       '
  145.       WID=Text Length(A$)
  146.       X7=(((X2-X1)/2)+X1)-(WID/2)+1
  147.       '
  148.       NXT:
  149.       Text X7,Y#,A$
  150.       '
  151.       Y#=Y#+Text Base+H#
  152.       '
  153.       J=I
  154.       Inc LOP
  155.    Wend 
  156.    '
  157.    Gr Writing 1
  158.    '
  159.    FIN:
  160.    '
  161. End Proc
  162. '
  163. Procedure _CHECKZONE[X1,Y1,X2,Y2,WT]
  164.    '
  165.    X=X Screen(X Mouse)
  166.    Y=Y Screen(Y Mouse)
  167.    M=Mouse Key
  168.    AN=0
  169.    '
  170.    If X<X1 or X>X2 or Y<Y1 or Y>Y2 or M=0
  171.       Goto FIN2
  172.    End If 
  173.    '
  174.    AN=M
  175.    '
  176.    If WT=0
  177.       Goto FIN2
  178.    End If 
  179.    '
  180.    If WT=1
  181.       Gr Writing 2
  182.       Bar X1,Y1 To X2,Y2
  183.    End If 
  184.    '
  185.    While X>=X1 and X<=X2 and Y>=Y1 and Y<=Y2
  186.       X=X Screen(X Mouse)
  187.       Y=Y Screen(Y Mouse)
  188.       If Mouse Key=0
  189.          Goto FIN
  190.       End If 
  191.    Wend 
  192.    '
  193.    AN=0
  194.    '
  195.    FIN:
  196.    If WT=1
  197.       Bar X1,Y1 To X2,Y2
  198.       Gr Writing 1
  199.    End If 
  200.    '
  201.    FIN2:
  202.    '
  203. End Proc[AN]
  204. '
  205. Procedure _SETFONT[FT$,FS]
  206.    '
  207.    Shared _FONTNAME$,_FONTSIZE
  208.    '
  209.    FT$=Upper$(FT$)
  210.    '
  211.    OK=0
  212.    POS=1
  213.    '
  214.    While Font$(POS)<>""
  215.       If Upper$(Left$(Font$(POS),Len(FT$)+5))=(FT$+".FONT")
  216.          If Val(Mid$(Font$(POS),30,3))=FS
  217.             Set Font POS
  218.             OK=1
  219.             _FONTNAME$=FT$
  220.             _FONTSIZE=FS
  221.          End If 
  222.       End If 
  223.       Inc POS
  224.    Wend 
  225.    '
  226. End Proc[OK]
  227. '
  228. Procedure _ADDBUTTON[X1,Y1,X2,Y2,T$,BZ]
  229.    '
  230.    Shared _TEXT,_BACK
  231.    '
  232.    _DRAW3DBOX[X1,Y1,X2,Y2,T$,1,_TEXT,_BACK]
  233.    '
  234.    If BZ<>0
  235.       _ADDZONE[X1,Y1,X2,Y2,BZ,"B"]
  236.    End If 
  237.    '
  238. End Proc
  239. '
  240. Procedure _CHECKBUTTONS
  241.    '
  242.    Shared _DIALOGBUTTON$
  243.    '
  244.    ZN=0
  245.    I1=1
  246.    I2=1
  247.    '
  248.    While I2<Len(_DIALOGBUTTON$)
  249.       '
  250.       I2=Instr(_DIALOGBUTTON$,";",I1)
  251.       L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
  252.       '
  253.       AC=Asc(Mid$(L$,1,1))
  254.       X1=Val(Mid$(L$,3,3))
  255.       Y1=Val(Mid$(L$,7,3))
  256.       X2=Val(Mid$(L$,11,3))
  257.       Y2=Val(Mid$(L$,15,3))
  258.       BZ=Val(Mid$(L$,19,4))
  259.       '
  260.       WT=1
  261.       If BZ<0
  262.          BZ=-BZ
  263.          WT=0
  264.       End If 
  265.       '
  266.       _CHECKZONE[X1,Y1,X2,Y2,WT]
  267.       If Param and(AC>64 and AC<91) : Rem A to Z.
  268.          ZN=BZ
  269.          Goto FIN
  270.       End If 
  271.       '
  272.       I1=I2+1
  273.       '
  274.    Wend 
  275.    '
  276.    FIN:
  277.    '
  278. End Proc[ZN]
  279. '
  280. Procedure _DELETEBUTTON[NO,BC]
  281.    '
  282.    Shared _DIALOGBUTTON$
  283.    '
  284.    I1=1
  285.    I2=1
  286.    '
  287.    If NO<0
  288.       NO=-NO
  289.    End If 
  290.    '
  291.    While I2<Len(_DIALOGBUTTON$)
  292.       '
  293.       I2=Instr(_DIALOGBUTTON$,";",I1)
  294.       L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
  295.       '
  296.       BZ=Val(Mid$(L$,19,3))
  297.       If BZ<0
  298.          BZ=-BZ
  299.       End If 
  300.       '
  301.       If BZ=NO
  302.          '
  303.          X1=Val(Mid$(L$,3,3))
  304.          Y1=Val(Mid$(L$,7,3))
  305.          X2=Val(Mid$(L$,11,3))
  306.          Y2=Val(Mid$(L$,15,3))
  307.          '
  308.          _DIALOGBUTTON$=Left$(_DIALOGBUTTON$,I1-1)+Mid$(_DIALOGBUTTON$,I2+1)
  309.          '
  310.          If BC>-1
  311.             Ink BC
  312.             Bar X1,Y1 To X2,Y2
  313.          End If 
  314.          '
  315.       End If 
  316.       '
  317.       I1=I2+1
  318.       '
  319.    Wend 
  320.    '
  321. End Proc
  322. '
  323. Procedure _ADDTICKBOX[X1,Y1,PO,BZ]
  324.    '
  325.    Shared _SHADOW,_TEXT,_BACK
  326.    '
  327.    _DRAW3DBOX[X1,Y1,X1+26,Y1+11,"",1,_TEXT,_BACK]
  328.    '
  329.    If BZ=0
  330.       PO=1-PO
  331.    End If 
  332.    '
  333.    If BZ<>0
  334.       _ADDZONE[X1,Y1,X1+26,Y1+11,BZ,"T"]
  335.    End If 
  336.    '
  337.    If PO=1
  338.       Ink _SHADOW
  339.       X1=X1+7
  340.       Y1=Y1+2
  341.       Draw X1,Y1+3 To X1+3,Y1+6
  342.       Draw X1+1,Y1+3 To X1+4,Y1+6
  343.       Draw X1+2,Y1+3 To X1+5,Y1+6
  344.       Draw X1+10,Y1 To X1+12,Y1
  345.       Draw X1+10,Y1+1 To X1+6,Y1+5
  346.       Draw X1+9,Y1+1 To X1+5,Y1+5
  347.    End If 
  348.    '
  349. End Proc[PO]
  350. '
  351. Procedure _ADDTICKBUTTON[X1,Y1,X2,Y2,T$,PO,BZ]
  352.    '
  353.    Shared _TEXT,_BACK
  354.    '
  355.    _DRAW3DBOX[X1,Y1,X2,Y2,T$,1,_TEXT,_BACK]
  356.    '
  357.    If BZ=0
  358.       PO=1-PO
  359.    End If 
  360.    '
  361.    If BZ<>0
  362.       _ADDZONE[X1,Y1,X2,Y2,BZ,"U"]
  363.    End If 
  364.    '
  365.    If PO=1
  366.       Gr Writing 2
  367.       Bar X1,Y1 To X2,Y2
  368.       Gr Writing 1
  369.    End If 
  370.    '
  371. End Proc[PO]
  372. '
  373. Procedure _ADDCYCLEBUTTON[X1,Y1,X2,Y2,T$,PO,BZ]
  374.    '
  375.    Shared _SHADOW,_LIGHT,_TEXT,_BACK
  376.    '
  377.    T$=T$+"|"
  378.    I1=1
  379.    I2=1
  380.    P=1
  381.    '
  382.    I=0
  383.    IO=0
  384.    B=0
  385.    While I<Len(T$)
  386.       I=Instr(T$,"|",I+1)
  387.       If I=0
  388.          I=Len(T$)+1
  389.       End If 
  390.       IO=I
  391.       B=B+1
  392.    Wend 
  393.    '
  394.    If BZ=0
  395.       Add PO,1,1 To B
  396.    End If 
  397.    '
  398.    While I2<Len(T$)
  399.       I2=Instr(T$,"|",I1)
  400.       If P=PO
  401.          L$=Mid$(T$,I1,I2-I1)
  402.          Exit 
  403.       End If 
  404.       I1=I2+1
  405.       Inc P
  406.    Wend 
  407.    '
  408.    _DRAW3DBOX[X1,Y1,X2,Y2,"",1,_TEXT,_BACK]
  409.    If BZ<>0
  410.       _ADDZONE[X1,Y1,X2,Y2,BZ,"C"]
  411.    End If 
  412.    '
  413.    Ink _SHADOW
  414.    X1=X1+6
  415.    Y1=Y1+2
  416.    Y2=Y2-3
  417.    Draw X1+1,Y1 To X1+7,Y1
  418.    Draw X1,Y1+1 To X1,Y2-1
  419.    Draw X1+1,Y1+1 To X1+1,Y2-1
  420.    Draw X1+1,Y2 To X1+7,Y2
  421.    Draw X1+7,Y2-1 To X1+8,Y2-1
  422.    Draw X1+7,Y1+1 To X1+7,Y1+5
  423.    Draw X1+8,Y1+1 To X1+8,Y1+5
  424.    Draw X1+5,Y1+3 To X1+10,Y1+3
  425.    Draw X1+6,Y1+4 To X1+9,Y1+4
  426.    Draw X1+14,Y1 To X1+14,Y2+1
  427.    Ink _LIGHT
  428.    Draw X1+15,Y1 To X1+15,Y2+1
  429.    '
  430.    _DRAW3DBOX[X1+16,Y1-2,X2,Y2+3,L$,2,_TEXT,_BACK]
  431.    '
  432. End Proc[PO]
  433. '
  434. Procedure _ADDINPUTBUTTON[X1,Y1,TXT$,L,ML,BZ]
  435.    '
  436.    Shared _TEXT,_BACK,_FONTNAME$,_FONTSIZE
  437.    '
  438.    XX=X1+2
  439.    YY=Y1+1
  440.    ED$=TXT$
  441.    SX=L
  442.    '
  443.    Ink _TEXT,_BACK
  444.    '
  445.    X1=X1-4
  446.    Y1=Y1-3
  447.    X2=X1+(L*8)+8+4
  448.    Y2=Y1+13
  449.    '
  450.    TEMP2$=_FONTNAME$
  451.    TEMP3=_FONTSIZE
  452.    _SETFONT["Topaz",8]
  453.    '
  454.    If BZ<>0
  455.       If BZ<>999
  456.          _ADDZONE[X1,Y1,X2,Y2,BZ,"I"]
  457.       End If 
  458.       _DRAW3DBOX[X1,Y1,X2,Y2,"",1,_TEXT,_BACK]
  459.       _DRAW3DBOX[X1+2,Y1+1,X2-2,Y2-1,"",0,_TEXT,_BACK]
  460.       Gosub _DED
  461.       Goto _END
  462.    End If 
  463.    '
  464.    XC=Len(ED$)
  465.    MN=0
  466.    PX=0
  467.    L=XC
  468.    '
  469.    Clear Key 
  470.    '
  471.    Do 
  472.       Gosub _DED
  473.       '
  474.       If Mouse Key=1
  475.          X=((X Screen(X Mouse)-(X1+5))/8)
  476.          If X>=0 and X<=L
  477.             XC=X
  478.             Gosub _DED
  479.          End If 
  480.       End If 
  481.       '
  482.       Gr Writing 2
  483.       Bar GRX,GRY To GRX+7,GRY+7
  484.       '
  485.       If Mouse Key
  486.          Repeat 
  487.          Until Mouse Key=0
  488.       End If 
  489.       '
  490.       Repeat 
  491.          A$=Inkey$
  492.          S=Scancode
  493.          K=Key Shift
  494.       Until A$<>"" or Mouse Key or(A$<>"" and K)
  495.       '
  496.       XM=X Screen(X Mouse)
  497.       YM=Y Screen(Y Mouse)
  498.       If Mouse Key and(XM<X1 or XM>X2 or YM<Y1 or YM>Y2)
  499.          A$=Chr$(13)
  500.       End If 
  501.       '
  502.       Bar GRX,GRY To GRX+7,GRY+7
  503.       Gr Writing 1
  504.       '
  505.       F=1
  506.       '
  507.       If A$=Chr$(13)
  508.          Exit 
  509.       End If 
  510.       '
  511.       If A$=Chr$(27)
  512.          ED$=TXT$
  513.          TXT$=""
  514.          Gosub _DED
  515.          Exit 
  516.       End If 
  517.       '
  518.       If S=65 and K=0 and XC+PX>MN
  519.          ED$=Left$(ED$,XC+PX-1)+Mid$(ED$,PX+XC+1)
  520.          E=1
  521.          Dec L
  522.          S=79
  523.       End If 
  524.       '
  525.       If S=65 and K>0 and K<4
  526.          ED$=Mid$(ED$,PX+XC+1)
  527.          L=Len(ED$)
  528.          PX=0
  529.          XC=0
  530.       End If 
  531.       '
  532.       If S=70 and K=0 and XC+PX<L
  533.          ED$=Left$(ED$,XC+PX)+Mid$(ED$,PX+XC+2)
  534.          E=1
  535.          Dec L
  536.       End If 
  537.       '
  538.       If S=70 and K>0 and K<4
  539.          ED$=Left$(ED$,XC+PX)
  540.          L=Len(ED$)
  541.          F=0
  542.       End If 
  543.       '
  544.       If S=79 and PX+XC>MN
  545.          F=0
  546.          If XC=0
  547.             Dec PX
  548.          Else 
  549.             Dec XC
  550.          End If 
  551.       End If 
  552.       '
  553.       If S=79 and K>0 and K<4
  554.          F=0
  555.          PX=0
  556.          XC=0
  557.       End If 
  558.       '
  559.       If S=78 and PX+XC<L
  560.          F=0
  561.          If XC=SX
  562.             Inc PX
  563.          Else 
  564.             Inc XC
  565.          End If 
  566.       End If 
  567.       '
  568.       If S=78 and K>0 and K<4
  569.          F=0
  570.          XC=L
  571.          If XC>SX
  572.             XC=SX
  573.          End If 
  574.          PX=L-SX
  575.          If PX<0
  576.             PX=0
  577.          End If 
  578.       End If 
  579.       '
  580.       If F
  581.          If A$>=" " and L<ML
  582.             ED$=Left$(ED$,PX+XC)+A$+Mid$(ED$,PX+XC+1)
  583.             Inc L
  584.             If L>SX
  585.                If XC>=SX
  586.                   Inc PX
  587.                Else 
  588.                   Inc XC
  589.                End If 
  590.             Else 
  591.                Inc XC
  592.             End If 
  593.          End If 
  594.       End If 
  595.       '
  596.    Loop 
  597.    '
  598.    Goto _END
  599.    '
  600.    _DED:
  601.    _DRAW3DBOX[X1+2,Y1+1,X2-2,Y2-1,"'"+Mid$(ED$,PX+1,SX),2,_TEXT,_BACK]
  602.    GRX=X1+(XC*8)+6
  603.    GRY=Y1+3
  604.    Return 
  605.    '
  606.    _END:
  607.    _DRAW3DBOX[X1+2,Y1+1,X2-2,Y2-1,"'"+Left$(ED$,SX),2,_TEXT,_BACK]
  608.    '
  609.    _SETFONT[TEMP2$,TEMP3]
  610.    '
  611. End Proc[ED$]
  612. '
  613. Procedure _DRAWUSEROBJECT[X1,Y1,X2,Y2,T$]
  614.    '
  615.    Shared _FONTNAME$,_FONTSIZE,_SHADOW,_LIGHT,_TEXT,_BACK,_COLOUR
  616.    '
  617.    Left$(T$,3)=Upper$(Left$(T$,3))
  618.    '
  619.    ' *** Paste Icon.
  620.    '
  621.    If Mid$(T$,1,3)="ICO"
  622.       NO=Val(Mid$(T$,4,3))
  623.       If Length(2)>=NO
  624.          Paste Icon X1+Val(Mid$(T$,7,3)),Y1+Val(Mid$(T$,10,3)),NO
  625.       End If 
  626.    End If 
  627.    '
  628.    ' *** Paste Bob. 
  629.    '
  630.    If Mid$(T$,1,3)="BOB"
  631.       NO=Val(Mid$(T$,4,3))
  632.       If Length(1)>=NO
  633.          Paste Bob X1+Val(Mid$(T$,7,3)),Y1+Val(Mid$(T$,10,3)),NO
  634.       End If 
  635.    End If 
  636.    '
  637.    ' *** Up Arrow.
  638.    '
  639.    If T$="UAR"
  640.       Ink _SHADOW
  641.       X=X1+(X2-X1)/2
  642.       Y=Y1+(Y2-Y1)/2
  643.       Polygon X,Y1+2 To X1+4,Y2-2 To X,Y To X2-4,Y2-2 To X,Y1+2
  644.    End If 
  645.    '
  646.    ' *** Down Arrow.
  647.    '
  648.    If T$="DAR"
  649.       Ink _SHADOW
  650.       X=X1+(X2-X1)/2
  651.       Y=Y1+(Y2-Y1)/2
  652.       Polygon X,Y2-2 To X1+4,Y1+2 To X,Y To X2-4,Y1+2 To X,Y2-2
  653.    End If 
  654.    '
  655.    ' *** Left Arrow.
  656.    '
  657.    If T$="LAR"
  658.       Ink _SHADOW
  659.       X=X1+(X2-X1)/2
  660.       Y=Y1+(Y2-Y1)/2
  661.       Polygon X1+4,Y To X2-4,Y1+2 To X,Y To X2-4,Y2-2 To X1+4,Y
  662.    End If 
  663.    '
  664.    ' *** Right Arrow. 
  665.    '
  666.    If T$="RAR"
  667.       Ink _SHADOW
  668.       X=X1+(X2-X1)/2
  669.       Y=Y1+(Y2-Y1)/2
  670.       Polygon X2-4,Y To X1+4,Y1+2 To X,Y To X1+4,Y2-2 To X2-4,Y
  671.    End If 
  672.    '
  673.    ' *** Group Box. 
  674.    '
  675.    If T$="GBX"
  676.       _DRAW3DBOX[X1,Y1,X2,Y2,"",0,0,_BACK]
  677.       _DRAW3DBOX[X1+2,Y1+1,X2-2,Y2-1,"",1,0,_BACK]
  678.    End If 
  679.    '
  680.    ' *** Window.
  681.    '
  682.    If Mid$(T$,1,3)="WIN"
  683.       _DRAW3DBOX[X1,Y1,X2,Y2,"",4,0,_COLOUR]
  684.       _DRAW3DBOX[X1+3,Y1+10,X2-3,Y2-1,"",3,_LIGHT,_BACK]
  685.       _DRAW3DBOX[X1,Y1,X2,Y1+10,Mid$(T$,4),4,_LIGHT,_COLOUR]
  686.    End If 
  687.    '
  688.    ' *** File Icon. 
  689.    '
  690.    If Mid$(T$,1,3)="FIL"
  691.       X1=X1+4
  692.       Y1=Y1+2
  693.       Ink _SHADOW
  694.       Draw X1,Y1+2 To X1,Y1+8
  695.       Draw X1+1,Y1+2 To X1+1,Y1+8
  696.       Draw X1+2,Y1+8 To X1+11,Y1+8
  697.       Draw X1+11,Y1+8 To X1+11,Y1+2
  698.       Plot X1+10,Y1+1
  699.       Plot X1+5,Y1+1
  700.       Draw X1+6,Y1 To X1+9,Y1
  701.       Draw X1+2,Y1+2 To X1+4,Y1+2
  702.       Draw X1+2,Y1+3 To X1+5,Y1+3
  703.       Draw X1+6,Y1+4 To X1+10,Y1+4
  704.    End If 
  705.    '
  706. End Proc
  707. '
  708. Procedure _ADDRADIOBUTTON[X,Y,GP,BN,PO,BZ]
  709.    '
  710.    Shared _LIGHT,_SHADOW,_COLOUR,_BACK
  711.    '
  712.    X1=X
  713.    Y1=Y
  714.    '
  715.    If PO=0
  716.       C1=_LIGHT
  717.       C2=_SHADOW
  718.       C3=_COLOUR
  719.    Else 
  720.       C1=_SHADOW
  721.       C2=_LIGHT
  722.       C3=_BACK
  723.    End If 
  724.    '
  725.    Ink C1
  726.    Draw X1+14,Y1 To X1+14,Y1+1
  727.    Draw X1+15,Y1+1 To X1+15,Y1+7
  728.    Draw X1+16,Y1+2 To X1+16,Y1+6
  729.    Draw X1+14,Y1+7 To X1+15,Y1+7
  730.    Draw X1+14,Y1+8 To X1+3,Y1+8
  731.    Ink C2
  732.    Draw X1+13,Y1 To X1+2,Y1
  733.    Draw X1+2,Y1+1 To X1+1,Y1+1
  734.    Draw X1,Y1+2 To X1,Y1+6
  735.    Draw X1+1,Y1+2 To X1+1,Y1+7
  736.    Draw X1+2,Y1+7 To X1+2,Y1+8
  737.    Ink C3
  738.    Draw X1+4,Y1+3 To X1+4,Y1+5
  739.    Draw X1+12,Y1+3 To X1+12,Y1+5
  740.    Bar X1+5,Y1+2 To X1+11,Y1+6
  741.    '
  742.    If BZ<>0
  743.       '
  744.       L$=Space$(8)
  745.       '
  746.       Mid$(L$,2,2)=Str$(GP)-" "
  747.       Mid$(L$,5,2)=Str$(BN)-" "
  748.       Mid$(L$,8,1)=Str$(PO)-" "
  749.       '
  750.       _ADDZONE[X,Y,X+16,Y+8,BZ,"R"+L$]
  751.       '
  752.    End If 
  753.    '
  754. End Proc
  755. '
  756. Procedure _SETRADIO[BZ]
  757.    '
  758.    Shared _DIALOGBUTTON$
  759.    '
  760.    _GETBUTTONSTRING[BZ]
  761.    F$=Param$
  762.    '
  763.    GN=Val(Mid$(F$,24,2))
  764.    BA=Val(Mid$(F$,27,2))
  765.    '
  766.    I1=1
  767.    I2=1
  768.    '
  769.    While I2<Len(_DIALOGBUTTON$)
  770.       '
  771.       I2=Instr(_DIALOGBUTTON$,";",I1)
  772.       L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
  773.       '
  774.       A$=Left$(L$,1)
  775.       GP=Val(Mid$(L$,24,2))
  776.       '
  777.       If((GP=GN) and((A$="R") or(A$="R")))
  778.          '
  779.          X1=Val(Mid$(L$,3,3))
  780.          Y1=Val(Mid$(L$,7,3))
  781.          BN=Val(Mid$(L$,27,2))
  782.          '
  783.          If BN=BA
  784.             _ADDRADIOBUTTON[X1,Y1,BN,GP,0,0]
  785.          Else 
  786.             _ADDRADIOBUTTON[X1,Y1,BN,GP,1,0]
  787.          End If 
  788.       End If 
  789.       '
  790.       I1=I2+1
  791.       '
  792.    Wend 
  793.    '
  794. End Proc
  795. '
  796. Procedure _VERTICALSLIDER[X,Y,W,H,S,P,T$]
  797.    '
  798.    Shared _TEXT,_BACK,_TEXT
  799.    '
  800.    _DRAW3DBOX[X,Y,X+W,Y+H,"",4,_TEXT,_BACK]
  801.    HIG=0
  802.    '
  803.    If S>=1
  804.       T=Y+(H*(P-1))/S
  805.       B=Min(Y+H,T+H/S)
  806.       If B-T<3
  807.          T=Y+((H-3)*(P-1))/S
  808.          B=Min(Y+(H-3),T+(H-3)/S)
  809.          HIG=3
  810.       End If 
  811.       Cls _TEXT,X+3,T+1 To X+W-2,B+1+HIG
  812.    End If 
  813.    '
  814.    If T$<>""
  815.       _SLIDERROUTINE[T$,P]
  816.    End If 
  817.    '
  818. End Proc
  819. '
  820. Procedure _GRABVERTICALSLIDER[X,Y,W,H,S,P,T$]
  821.    '
  822.    If S<1 Then Pop Proc
  823.    '
  824.    T=Y+(H*(P-1))/S
  825.    B=Min(Y+H,T+H/S)
  826.    '
  827.    _CHECKZONE[X,Y,X+W,T-1,2]
  828.    If Param>0 and P>1
  829.       Dec P
  830.       Gosub _DRAWSLIDER
  831.       Goto FIN
  832.    End If 
  833.    '
  834.    _CHECKZONE[X,B+1,X+W,Y+H,2]
  835.    If Param and P<S
  836.       Inc P
  837.       Gosub _DRAWSLIDER
  838.       Goto FIN
  839.    End If 
  840.    '
  841.    _CHECKZONE[X,T,X+W,B,0]
  842.    If Param>0
  843.       '
  844.       PO=P
  845.       DY=Y Screen(Y Mouse)-T
  846.       '
  847.       Repeat 
  848.          '
  849.          YY=Y Screen(Y Mouse)-Y-DY
  850.          PO=((YY*(S+1))/H+1)
  851.          '
  852.          If PO<1
  853.             PO=1
  854.          End If 
  855.          If PO>S
  856.             PO=S
  857.          End If 
  858.          '  
  859.          If PO<>P
  860.             P=PO
  861.             Gosub _DRAWSLIDER
  862.          End If 
  863.          '
  864.       Until Mouse Key=0
  865.    End If 
  866.    '
  867.    Goto FIN
  868.    '
  869.    _DRAWSLIDER:
  870.    _VERTICALSLIDER[X,Y,W,H,S,P,""]
  871.    Return 
  872.    '
  873.    FIN:
  874.    '
  875. End Proc[P]
  876. '
  877. Procedure _HORIZONTALSLIDER[X,Y,W,H,S,P,T$]
  878.    '
  879.    Shared _TEXT,_BACK,_TEXT
  880.    '
  881.    _DRAW3DBOX[X,Y,X+W,Y+H,"",4,_TEXT,_BACK]
  882.    WID=0
  883.    '
  884.    If S>=1
  885.       T=X+(W*(P-1))/S
  886.       B=Min(X+W,T+W/S)
  887.       If B-T<6
  888.          T=X+((W-6)*(P-1))/S
  889.          B=Min(X+(W-6),T+(W-6)/S)
  890.          WID=6
  891.       End If 
  892.       Cls _TEXT,T+1,Y+2 To B+1+WID,Y+H-1
  893.    End If 
  894.    '
  895.    If T$<>""
  896.       _SLIDERROUTINE[T$,P]
  897.    End If 
  898.    '
  899. End Proc
  900. '
  901. Procedure _GRABHORIZONTALSLIDER[X,Y,W,H,S,P,T$]
  902.    '
  903.    If S<1 Then Pop Proc
  904.    '
  905.    T=X+(W*(P-1))/S
  906.    B=Min(X+W,T+W/S)
  907.    '
  908.    _CHECKZONE[X,Y,T-1,Y+H,2]
  909.    If Param>0 and P>1
  910.       Dec P
  911.       Gosub _DRAWSLIDER
  912.       Goto FIN
  913.    End If 
  914.    '
  915.    _CHECKZONE[B+1,Y,X+W,Y+H,2]
  916.    If Param>0 and P<S
  917.       Inc P
  918.       Gosub _DRAWSLIDER
  919.       Goto FIN
  920.    End If 
  921.    '
  922.    _CHECKZONE[T,Y,B,Y+H,0]
  923.    If Param>0
  924.       '
  925.       PO=P
  926.       DX=X Screen(X Mouse)-T
  927.       '
  928.       Repeat 
  929.          '
  930.          XX=X Screen(X Mouse)-X-DX
  931.          PO=((XX*(S+1))/W+1)
  932.          '
  933.          If PO<1
  934.             PO=1
  935.          End If 
  936.          If PO>S
  937.             PO=S
  938.          End If 
  939.          '  
  940.          If PO<>P
  941.             P=PO
  942.             Gosub _DRAWSLIDER
  943.          End If 
  944.          '
  945.       Until Mouse Key=0
  946.    End If 
  947.    '
  948.    Goto FIN
  949.    '
  950.    _DRAWSLIDER:
  951.    _HORIZONTALSLIDER[X,Y,W,H,S,P,""]
  952.    Return 
  953.    '
  954.    FIN:
  955.    '
  956. End Proc[P]
  957. '
  958. Procedure _SLIDERROUTINE[T$,P]
  959.    '
  960.    Shared _FONTNAME$,_FONTSIZE,_COLOUR,_SHADOW,_LIGHT,_BACK,_TEXT
  961.    '
  962.    Goto T$
  963.    Goto FIN
  964.    '
  965.    '
  966.    FIN:
  967.    '
  968. End Proc
  969. '
  970. Procedure _DRAWTITLEBAR[T$]
  971.    '
  972.    Shared _FONTNAME$,_FONTSIZE,_SHADOW,_LIGHT
  973.    '
  974.    B_FT$=_FONTNAME$
  975.    B_FS=_FONTSIZE
  976.    '
  977.    _SETFONT["Topaz",8]
  978.    '
  979.    If T$=""
  980.       T$=T$+"'Amiga Workbench  "+Str$(Chip Free)-" "+" graphics mem  "
  981.       T$=T$+Str$(Fast Free)-" "+" other mem"
  982.    End If 
  983.    _DRAW3DBOX[-1,-1,640,10,T$,1,_SHADOW,_LIGHT]
  984.    '
  985.    _SETFONT[B_FT$,B_FS]
  986.    '
  987. End Proc
  988. '
  989. Procedure _GETBUTTONSTRING[NO]
  990.    '
  991.    Shared _DIALOGBUTTON$
  992.    '
  993.    I1=1
  994.    I2=1
  995.    P=0
  996.    '
  997.    If NO<0
  998.       NO=-NO
  999.    End If 
  1000.    '
  1001.    While I2<Len(_DIALOGBUTTON$) and P<>NO
  1002.       '
  1003.       I2=Instr(_DIALOGBUTTON$,";",I1)
  1004.       L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
  1005.       '
  1006.       BZ=Val(Mid$(L$,19,4))
  1007.       If BZ<0
  1008.          BZ=-BZ
  1009.       End If 
  1010.       '
  1011.       If BZ=NO
  1012.          Exit 
  1013.       End If 
  1014.       '
  1015.       I1=I2+1
  1016.       '
  1017.       Inc P
  1018.    Wend 
  1019.    '
  1020. End Proc[L$]
  1021. '
  1022. Procedure _ENABLEBUTTON[NO]
  1023.    '
  1024.    Shared _DIALOGBUTTON$
  1025.    '
  1026.    I1=1
  1027.    I2=1
  1028.    P=0
  1029.    '
  1030.    While I2<Len(_DIALOGBUTTON$) and P<>NO
  1031.       '
  1032.       I2=Instr(_DIALOGBUTTON$,";",I1)
  1033.       L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
  1034.       '
  1035.       BZ=Val(Mid$(L$,19,4))
  1036.       If BZ<0
  1037.          BZ=-BZ
  1038.       End If 
  1039.       '
  1040.       If BZ=NO
  1041.          Mid$(_DIALOGBUTTON$,I1,1)=Upper$(Mid$(_DIALOGBUTTON$,I1,1))
  1042.       End If 
  1043.       '
  1044.       I1=I2+1
  1045.       '
  1046.       Inc P
  1047.    Wend 
  1048.    '
  1049. End Proc
  1050. '
  1051. Procedure _DISABLEBUTTON[NO]
  1052.    '
  1053.    Shared _DIALOGBUTTON$
  1054.    '
  1055.    I1=1
  1056.    I2=1
  1057.    P=0
  1058.    '
  1059.    While I2<Len(_DIALOGBUTTON$) and P<>NO
  1060.       '
  1061.       I2=Instr(_DIALOGBUTTON$,";",I1)
  1062.       L$=Mid$(_DIALOGBUTTON$,I1,I2-I1)
  1063.       '
  1064.       BZ=Val(Mid$(L$,19,4))
  1065.       If BZ<0
  1066.          BZ=-BZ
  1067.       End If 
  1068.       '
  1069.       If BZ=NO
  1070.          Mid$(_DIALOGBUTTON$,I1,1)=Lower$(Mid$(_DIALOGBUTTON$,I1,1))
  1071.       End If 
  1072.       '
  1073.       I1=I2+1
  1074.       '
  1075.       Inc P
  1076.    Wend 
  1077.    '
  1078. End Proc
  1079. '
  1080. Procedure _ADDZONE[X1,Y1,X2,Y2,BZ,TP$]
  1081.    '
  1082.    Shared _DIALOGBUTTON$
  1083.    '
  1084.    L$=Space$(22)+Mid$(TP$,2)+";"
  1085.    '
  1086.    Mid$(L$,1,1)=Mid$(TP$,1,1)
  1087.    Mid$(L$,3,3)=Str$(X1)-" "
  1088.    Mid$(L$,7,3)=Str$(Y1)-" "
  1089.    Mid$(L$,11,3)=Str$(X2)-" "
  1090.    Mid$(L$,15,3)=Str$(Y2)-" "
  1091.    Mid$(L$,19,4)=Str$(BZ)-" "
  1092.    '
  1093.    _DIALOGBUTTON$=_DIALOGBUTTON$+L$
  1094.    '
  1095. End Proc
  1096.