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

  1. '
  2. Procedure _FILEREQUESTER[H$]
  3.    '
  4.    Shared _DIALOGBUTTON$,_FONTNAME$,_FONTSIZE,_TEXT,_COLOUR,_LIGHT,_BACK
  5.    Shared _MAXFILES,_FILES,_PATH$,_WILD$,_FILENAME$(),_FILE$
  6.    '
  7.    TEMP1$=_DIALOGBUTTON$
  8.    _DIALOGBUTTON$=""
  9.    '
  10.    TEMP2$=_FONTNAME$
  11.    TEMP3=_FONTSIZE
  12.    '
  13.    _SETFONT["Topaz",8]
  14.    '
  15.    _OPENDIALOGSCREEN[7,110,44]
  16.    Get Palette 0
  17.    _DRAWTITLEBAR[H$]
  18.    '
  19.    _DRAW3DBOX[0,11,639,108,"",1,,_COLOUR]
  20.    _DRAW3DBOX[8,13,334,106,"",1,,_BACK]
  21.    '
  22.    _ADDBUTTON[337,89,352,97,"(S)UAR",-1]
  23.    _DRAW3DBOX[337,13,352,87,"",1,,_BACK]
  24.    _ADDBUTTON[337,98,352,106,"(S)DAR",-2]
  25.    '
  26.    _DRAW3DBOX[356,45,440,59,"File",1,_TEXT,_BACK]
  27.    _ADDINPUTBUTTON[45,8,_FILE$,31,31,-3]
  28.    _DRAW3DBOX[356,13,440,27,"Drawer",1,_TEXT,_BACK]
  29.    _ADDINPUTBUTTON[45,4,_PATH$+_WILD$,31,120,-4]
  30.    '
  31.    _ADDBUTTON[356,77,490,91,"Parent",5]
  32.    _ADDBUTTON[356,92,490,106,"Volumes",6]
  33.    _ADDBUTTON[497,77,631,91,"Cancel",7]
  34.    _ADDBUTTON[497,92,631,106,"OK",8]
  35.    '
  36.    _BPATH$=_PATH$+_WILD$
  37.    _SWITCH=0
  38.    _POSITION=1
  39.    '
  40.    If _FILES=0
  41.       Gosub _GETDIRECTORY
  42.    End If 
  43.    '
  44.    Gosub _DISPLAYLIST
  45.    Gosub _DISPLAYPATH
  46.    Gosub _DISPLAYFILE
  47.    '
  48.    Do 
  49.       '
  50.       _CHECKBUTTONS
  51.       _BUTTONZONE=Param
  52.       '
  53.       If _BUTTONZONE=1 and _POSITION>1
  54.          Dec _POSITION
  55.          Gosub _DISPLAYLIST
  56.       End If 
  57.       '
  58.       If _BUTTONZONE=2 and _POSITION<_FILES-11
  59.          Inc _POSITION
  60.          Gosub _DISPLAYLIST
  61.       End If 
  62.       '
  63.       If _BUTTONZONE=3
  64.          _ADDINPUTBUTTON[45,8,_FILE$,31,31,0]
  65.          _FILE$=Param$
  66.       End If 
  67.       '
  68.       If _BUTTONZONE=4
  69.          _BPATH$=_PATH$
  70.          _ADDINPUTBUTTON[45,4,_PATH$+_WILD$,31,120,0]
  71.          _PATH$=Param$
  72.          Gosub _CUTWILD
  73.          _TEMP$=_PATH$
  74.          Gosub _CHECKFILE
  75.       End If 
  76.       '
  77.       If _BUTTONZONE=5
  78.          Gosub _PARENT
  79.       End If 
  80.       '
  81.       If _BUTTONZONE=6
  82.          SWITCH=1
  83.          Gosub _GETDIRECTORY
  84.          Gosub _DISPLAYLIST
  85.          Gosub _DISPLAYPATH
  86.          Gosub _DISPLAYFILE
  87.       End If 
  88.       '
  89.       If _BUTTONZONE=7
  90.          _FILE$=""
  91.          Goto FIN
  92.       End If 
  93.       '
  94.       If _BUTTONZONE=8
  95.          _TEMP$=_PATH$+_FILE$
  96.          Goto FIN
  97.       End If 
  98.       '
  99.       _COUNT=0
  100.       While _COUNT<11
  101.          _CHECKZONE[10,16+(_COUNT*8),332,23+(_COUNT*8),1]
  102.          If(Param>0) and(_FILENAME$(_POSITION+_COUNT)<>"")
  103.             _TEMP$=_FILENAME$(_POSITION+_COUNT)
  104.             Gosub _CHECKFILE
  105.             Gosub _DISPLAYFILE
  106.          End If 
  107.          Inc _COUNT
  108.       Wend 
  109.       '
  110.       _GRABVERTICALSLIDER[337,13,15,74,Min(_FILES,_FILES-11),_POSITION,""]
  111.       If Param<>_POSITION
  112.          _POSITION=Param
  113.          Gosub _DISPLAYLIST
  114.       End If 
  115.       '
  116.    Loop 
  117.    '
  118.    _GETDIRECTORY:
  119.    '
  120.    If Not Exist(_PATH$)
  121.       _PATH$=_BPATH$
  122.    End If 
  123.    '
  124.    _COUNT=1
  125.    While _COUNT<_MAXFILES+1
  126.       _FILENAME$(_COUNT)=""
  127.       Inc _COUNT
  128.    Wend 
  129.    '
  130.    Set Dir 31
  131.    _FILES=0
  132.    '
  133.    If SWITCH=0
  134.       '
  135.       _FILENAME$(FILES)=Dir First$(_PATH$+_WILD$)
  136.       While _FILENAME$(_FILES)<>"" and _FILES<_MAXFILES
  137.          If Mid$(_FILENAME$(_FILES),1,1)="*"
  138.             Mid$(_FILENAME$(_FILES),31,5)="(Dir)"
  139.          End If 
  140.          Inc _FILES
  141.          _FILENAME$(_FILES)=Dir Next$
  142.       Wend 
  143.       '
  144.    Else 
  145.       '
  146.       _FILENAME$(FILES)=Dev First$("**")
  147.       While _FILENAME$(_FILES)<>"" and _FILES<_MAXFILES
  148.          Mid$(_FILENAME$(_FILES),31,5)="(Dev)"
  149.          Inc _FILES
  150.          _FILENAME$(_FILES)=Dev Next$
  151.       Wend 
  152.       '
  153.    End If 
  154.    '
  155.    _BPATH$=_PATH$
  156.    _POSITION=1
  157.    SWITCH=0
  158.    '
  159.    Return 
  160.    '
  161.    _DISPLAYPATH:
  162.    '
  163.    Pen _TEXT
  164.    Print At(45,4)+Space$(31);
  165.    Print At(45,4)+Left$(_PATH$+_WILD$,31);
  166.    Return 
  167.    '
  168.    _DISPLAYFILE:
  169.    '
  170.    Pen _TEXT
  171.    Print At(45,8)+Space$(31);
  172.    Print At(45,8)+Left$(_FILE$,31);
  173.    Return 
  174.    '
  175.    _DISPLAYLIST:
  176.    '
  177.    _COUNT=_POSITION
  178.    While _COUNT<_POSITION+11
  179.       Locate 2,_COUNT-_POSITION+2
  180.       If _FILENAME$(_COUNT)<>""
  181.          If Left$(_FILENAME$(_COUNT),1)="*"
  182.             Pen _LIGHT
  183.          Else 
  184.             Pen _TEXT
  185.          End If 
  186.          Print _FILENAME$(_COUNT);
  187.       Else 
  188.          Print Space$(38);
  189.       End If 
  190.       Inc _COUNT
  191.    Wend 
  192.    '
  193.    _VERTICALSLIDER[337,13,15,74,Min(_FILES,_FILES-11),_POSITION,""]
  194.    '
  195.    Return 
  196.    '
  197.    _PARENT:
  198.    '
  199.    If Len(_PATH$)>2
  200.       _COUNT=Len(_PATH$)-1
  201.       While _COUNT>1
  202.          A$=Mid$(_PATH$,_COUNT,1)
  203.          If(A$="/") or(A$=":")
  204.             _PATH$=Left$(_PATH$,_COUNT)
  205.             Gosub _GETDIRECTORY
  206.             Gosub _DISPLAYPATH
  207.             Gosub _DISPLAYLIST
  208.             Exit 
  209.          End If 
  210.          Dec _COUNT
  211.       Wend 
  212.    End If 
  213.    Return 
  214.    '
  215.    _CUTWILD:
  216.    '
  217.    _COUNT=Len(_PATH$)
  218.    While _COUNT>1
  219.       A$=Mid$(_PATH$,_COUNT,1)
  220.       If(A$="/") or(A$=":")
  221.          _WILD$=Right$(_PATH$,Len(_PATH$)-_COUNT)
  222.          _PATH$=Left$(_PATH$,_COUNT)
  223.          Exit 
  224.       End If 
  225.       Dec _COUNT
  226.    Wend 
  227.    Return 
  228.    '
  229.    _CHECKFILE:
  230.    '
  231.    _COUNT=30
  232.    While _COUNT>1
  233.       If Mid$(_TEMP$,_COUNT,1)<>" "
  234.          _TEMP$=Left$(_TEMP$,_COUNT)
  235.          Exit 
  236.       End If 
  237.       Dec _COUNT
  238.    Wend 
  239.    '
  240.    If(Right$(_TEMP$,1)=":") or(Right$(_TEMP$,1)="/")
  241.       If Left$(_TEMP$,1)=" "
  242.          _PATH$=Mid$(_TEMP$,2)
  243.       Else 
  244.          _PATH$=_TEMP$
  245.       End If 
  246.       Gosub _GETDIRECTORY
  247.       SWITCH=0
  248.       Gosub _DISPLAYPATH
  249.       Gosub _DISPLAYLIST
  250.       Goto OK1
  251.    End If 
  252.    '
  253.    A$=Left$(_TEMP$,1)
  254.    _TEMP$=Mid$(_TEMP$,2)
  255.    '
  256.    If A$="*"
  257.       _PATH$=_PATH$+_TEMP$+"/"
  258.       Gosub _GETDIRECTORY
  259.       Gosub _DISPLAYPATH
  260.       Gosub _DISPLAYLIST
  261.       Goto OK1
  262.    End If 
  263.    '
  264.    _FILE$=_TEMP$
  265.    Gosub _DISPLAYFILE
  266.    '
  267.    OK1:
  268.    Return 
  269.    '
  270.    FIN:
  271.    '
  272.    _SETFONT[TEMP2$,TEMP3]
  273.    _DIALOGBUTTON$=TEMP1$
  274.    Screen Close 7
  275.    '
  276. End Proc[_TEMP$]