home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / sourcecode / procedures / dialog_procs.amos / dialog_procs.amosSourceCode < prev    next >
AMOS Source Code  |  1991-06-22  |  16KB  |  960 lines

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