/* GFA DLL Test for v3.0
/* by Bev Brown
/* Jan.16/97
'
DLL #1,"GfaDll3.dll"
  DECL WORD drvsel(l,l,l,l)
  DECL WORD free(l,l,l)
  DECL WORD input_string(l,l,l,l,w,l,l)
  DECL BOOL chk_valu(l,l,l)
  DECL WORD fileselect(l,l,l,l,l,l,w)
  DECL WORD meter(w,w,w,w,l,l,l,w,l)
  DECL WORD list(l,l,l,l,l,l,l,l)
  DECL WORD copy(l,l,l)
  DECL WORD kill(l,l,l)
  DECL WORD rename(l,l,l)
  DECL WORD make(l,l,l)
  DECL WORD dir(l,l,l)
ENDDLL
'
DLL #2,"shell"
  DECL WORD ShellAbout(w,l,l,w)
ENDDLL
'
DEFMOUSE 0
DEFINT "a-z"
title$ = "GFW DLL v3.0"
ver$ = @winver$()
IF VAL(ver$) < 3.95
  BEEP
  mess$ = "Written for Windows95 only!"
  MESSAGE mess$,title$,style1%,j%
  FREEDLL 1
  EDIT
ENDIF
@init
@create_menubar
@create_hot_buttons
@about
@menu_handler
CLOSEW #pw|
/*
PROCEDURE init
  DIM main&(3),bttnup&(4),bttndn&(4),hot_bttn&(4)
  b% = _X,h% = 0.94 * _Y,w& = 32,h& = w&,z& = (b% - (5 * (w& + 16))) \ 2
  pw| = 1,bflg! = TRUE
  gray% = RGB(128,128,128),ltgray% = RGB(192,192,192)
  ltblue% = RGB(0,255,255),blue% = RGB(0,0,255)
  black% = RGB(0,0,0),yellow% = RGB(255,255,0),white% = RGB(255,255,255)
  red% = RGB(128,0,0),ltred% = RGB(255,0,0),green% = RGB(0,255,0)
  ltgray& = GETNEAREST(192,192,192),gray& = GETNEAREST(128,128,128)
  blue& = GETNEAREST(0,0,255),ltblue& = GETNEAREST(0,255,255)
  ltred& = GETNEAREST(255,0,0),red& = GETNEAREST(128,0,0)
  black& = GETNEAREST(0,0,0),white& = GETNEAREST(255,255,255)
  green& = GETNEAREST(0,255,0)
  drv% = _DRIVE
  path$ = CHR$(drv%) + ":" + DIR$(0)
  IF RIGHT$(path$,1) <> "\" THEN path$ = path$ + "\"
  orig_drv% = drv%,orig_path$ = path$
  tdate$ = @get_date$()
  IconInfoHandle& = LoadIcon(NULL,IDI_ASTERISK)
  IconStopHandle& = LoadIcon(NULL,IDI_HAND)
  IconExclHandle& = LoadIcon(NULL,IDI_EXCLAMATION)
  IconQuesHandle& = LoadIcon(NULL,IDI_QUESTION)
  temp% = MB_APPLMODAL | MB_DEFBUTTON1
  style1% = temp% | MB_ICONINFORMATION | MB_OK
  temp% = temp% | MB_ICONQUESTION
  style2% = temp% | MB_YESNO
  style5% = DT_CENTER | DT_VCENTER | DT_SINGLELINE
  @SetFonts
  TITLEW #pw|,title$
  OPENW #pw|,0,0,b%,h%,%011110000
  @get_bitmaps
RETURN
/*
PROCEDURE SetFonts
  FONT "courier new",WEIGHT FW_NORMAL,HEIGHT 65523,WIDTH 7
  FONT FAMILY FF_ROMAN,CHARSET ANSI_CHARSET
  FONT TO fnt&
  FONT "courier new",WEIGHT FW_BOLD,HEIGHT 65523,WIDTH 7
  FONT FAMILY FF_ROMAN,CHARSET ANSI_CHARSET
  FONT TO fntbold&
  FONT "courier new",WEIGHT FW_NORMAL,HEIGHT 65528,WIDTH 7
  FONT FAMILY FF_ROMAN,CHARSET ANSI_CHARSET
  FONT TO fntshrt&
RETURN
'
FUNCTION winver$()
  LOCAL ver%=GetVersion()
  RETURN STR$(LOBYTE(ver%)) + "." + STR$(HIBYTE(ver%))
ENDFUNC
'
PROCEDURE react_to_buttons
  xpos% = MENU(2),ypos% = MENU(3)
  IF ypos% >= wy% + 4 AND ypos% <= wy% + h& + 4
    RESTORE bttn_data
    FOR i% = 0 TO 4
      x& = z& + (i% * (w& + 16) + 8),y& = h& + 10
      READ temp$
      IF xpos% >= x& AND xpos% <= x& + w&
        IF bflg!
          SETFONT fntshrt&
          RGBCOLOR yellow%,yellow%
          PBOX x& - 2,y&,x& + TXTLEN(temp$) + 2,y& + 12
          RGBCOLOR black%,yellow%
          BOX x& - 2,y&,x& + TXTLEN(temp$) + 2,y& + 12
          ~TextOut(_DC(pw|),x&,y& + 2,V:temp$,LEN(temp$))
          PAUSE 6
          RGBCOLOR white%,white%
          PBOX x& - 2,y&,x& + TXTLEN(temp$) + 2,y& + 12
        ELSE
          @draw_status(temp$,blue%,18,IconInfoHandle&)
        ENDIF
      ENDIF
    NEXT i%
  ENDIF
RETURN
'
FUNCTION get_date$()
  LOCAL ctr%,i%,j%
  LOCAL mon$="JanFebMarAprMayJunJulAugSepOctNovDec"
  LOCAL day$="SunMonTueWedThuFriSat"
  ~INTR($21,_AH = $2A)
  temp$ = MID$(day$,3 * _AL + 1,3) + ", " + MID$(mon$,3 * _DH - 2,3) + " " + STR$(_DL)
  temp$ = temp$ + "/" + RIGHT$(STR$(_CX),2)
  RETURN temp$
ENDFUNC
'
PROCEDURE paint
  SETDC _DC(pw|)
  WINDGET 4,wx%,wy%,wb%,wh%
  @draw_messagebox(wx%,wy% - 40,wx% + wb% - 3,wy%,2)
  @draw_messagebox(wx%,wh% - 29,wb% - 200,wh%,2)
  @draw_messagebox(wb% - 200,wh% - 29,wb% - 80,wh%,2)
  @draw_messagebox(wb% - 80,wh% - 29,wb%,wh%,2)
  @draw_time
RETURN
'
PROCEDURE draw_messagebox(ux%,uy%,lx%,ly%,bord|)
  LOCAL col1%=gray%,col2%=white%
  DEFLINE PS_SOLID,1
  RGBCOLOR ltgray%,ltgray%
  PBOX ux%,uy%,lx%,ly%
  IF bord| < 3         /* 1=raised area  2=inset area
    IF bord| = 2 THEN SWAP col1%,col2%
    RGBCOLOR col1%
    DRAW ux% + 3,ly% - 3 TO lx% - 3,ly% - 3 TO lx% - 3,uy% + 3
    RGBCOLOR col2%
    DRAW ux% + 3,ly% - 3 TO ux% + 3,uy% + 3 TO lx% - 3,uy% + 3
  ELSE IF bord| > 2    /* 3=raised border 4=inset border
    IF bord| = 4 THEN SWAP col1%,col2%
    RGBCOLOR col1%
    BOX ux% + 3,uy% + 3,lx%,ly%
    RGBCOLOR col2%
    BOX ux%,uy%,lx% - 3,ly% - 3
  ENDIF
  RGBCOLOR black%
  LINE ux%,uy%,lx%,uy%
  LINE ux%,ly%,lx%,ly%
RETURN
'
PROCEDURE draw_status(temp$,colr%,temp%,handle&)
  ~DrawIcon(_DC(pw|),wx% + 4,wh% - 29,handle&)
  SETFONT fnt&
  RGBCOLOR colr%
  DRAWTEXT wx%,wh% - 29,wb% - 200,wh%,temp$,style5%
  PAUSE temp%
  @draw_messagebox(wx%,wh% - 29,wb% - 200,wh%,2)
RETURN
'
PROCEDURE draw_time
  LOCAL temp$ = tdate$ + "  " + TIME$
  SETFONT fntbold&
  RGBCOLOR blue%,ltgray%
  DRAWTEXT wb% - 200,wh% - 29,wb% - 80,wh%,tdate$,style5%
  DRAWTEXT wb% - 80,wh% - 29,wb%,wh%,TIME$,style5%
RETURN
'
PROCEDURE beep
  BEEP
RETURN
'
PROCEDURE bell
  LOCAL i%
  FOR i% = 0 TO 2
    SOUND 3000,0.5
    PAUSE 1
  NEXT i%
RETURN
/*
PROCEDURE get_bitmaps
  LOCAL i%,temp$,temp1$,temp2$
  RESTORE bitmap
  FOR i% = 0 TO 4
    READ temp$
    temp1$ = path$ + "bmp\" + temp$ + "up.bmp"
    temp2$ = path$ + "bmp\" + temp$ + "dn.bmp"
    IF EXIST(temp1$) AND EXIST(temp2$)
      bttnup&(i%) = LOADBMP(temp1$)
      bttndn&(i%) = LOADBMP(temp2$)
    ELSE
      mess$ = "ALL BMP-files must be in " + UPPER$(path$) + "BMP\!"
      MESSAGE mess$,title$ + " - Load BMPs",style1%,j%
      @progend(FALSE)
    ENDIF
  NEXT i%
  bitmap:
  DATA dll,utils,help,about,exit
RETURN
'
PROCEDURE create_hot_buttons
  style% = WS_VISIBLE | WS_CHILDWINDOW | BS_OWNERDRAW
  FOR i% = 0 TO 4
    x& = z& + (i% * (w& + 16) + 8)
    hot_bttn&(i%) = CreateWindow("button","",style%,x&,wy% + 4,w&,h&,WIN(pw|),900 + i%,_INSTANCE,0)
    _WIN$(hot_bttn&(i%)) = STR$(bttnup&(i%)) + "," + STR$(bttndn&(i%))
  NEXT i%
RETURN
/*
PROCEDURE error_handler
  DEFMOUSE 0
  BEEP
  mess$ = "Error #" + STR$(ERR) + "/" + ERR$(ERR)
  MESSAGE mess$,title$,style1%,j%
RETURN
/*
PROCEDURE progend(flg!)
  LOCAL j%=IDYES
  @bell
  IF flg!
    mess$ = "Exit program! Are you sure?"
    MESSAGE mess$,title$,style2%,j%
  ENDIF
  IF j% = IDYES
    KILLTIMER pw|,1
    CLOSEW #pw|
    FOR i% = 0 TO 4
      FREEBMP bttnup&(i%)
      FREEBMP bttndn&(i%)
    NEXT i%
    FOR i% = 0 TO 3
      ~DestroyMenu(main&(i%))
    NEXT i%
    FREEFONT fnt&
    FREEFONT fntbold&
    FREEFONT fntshrt&
    CHDRIVE orig_drv%
    CHDIR orig_path$
    FREEDLL 1
    EDIT
  ENDIF
  FOR i% = 0 TO 3
    FLASH pw|
    PAUSE 1
  NEXT i%
RETURN
/*
PROCEDURE about
  LOCAL temp$,hold$
  @bell
  temp$ = title$ + "#" + title$ + " (c)  Nov.04/96" + CHR$(0)
  hold$ = tdate$ + CHR$(0)
  ~^ShellAbout(WIN(pw|),V:temp$,V:hold$,"")
RETURN
/*
PROCEDURE create_menubar
  LOCAL s0%=MF_SEPARATOR
  LOCAL s1%=MF_STRING
  LOCAL s2%=s1% | MF_POPUP
  LOCAL s3%=s2% | MF_HELP
  main&(1) = CreateMenu()
  ~AppendMenu(main&(1),s1%,1,"&Drive Select")
  ~AppendMenu(main&(1),s1%,2,"&String Input")
  ~AppendMenu(main&(1),s1%,3,"&Number Input")
  ~AppendMenu(main&(1),s1%,4,"&Write (Save)")
  ~AppendMenu(main&(1),s1%,5,"&Read  (Load)")
  ~AppendMenu(main&(1),s1%,6,"File &Info")
  ~AppendMenu(main&(1),s1%,7,"&Meter Check")
  ~AppendMenu(main&(1),s1%,8,"&List any file")
  ~AppendMenu(main&(1),s0%,NULL,NULL)
  ~AppendMenu(main&(1),s1%,9,"<&Q>uit")
  main&(2) = CreateMenu()
  ~AppendMenu(main&(2),s1%,10,"&Free Space")
  ~AppendMenu(main&(2),s1%,11,"&Copy File(s)")
  ~AppendMenu(main&(2),s1%,12,"&Kill File(s)")
  ~AppendMenu(main&(2),s1%,13,"Re&Name File")
  ~AppendMenu(main&(2),s1%,14,"&Make Folder")
  ~AppendMenu(main&(2),s1%,15,"&Directory")
  main&(3) = CreateMenu()
  ~AppendMenu(main&(3),s1%,20,"<&H>elp using List")
  ~AppendMenu(main&(3),s1%,21,"<&A>bout")
  ~AppendMenu(main&(3),s1%,22,"<&B>ubble on")
  ~AppendMenu(main&(3),s0%,NULL,NULL)
  ~AppendMenu(main&(3),s1%,8,"e<&X>it")
  main&(0) = CreateMenu()
  ~AppendMenu(main&(0),s2%,main&(1),"<&D>LLs")
  ~AppendMenu(main&(0),s2%,main&(2),"<&U>tilities")
  ~AppendMenu(main&(0),s3%,main&(3),"&Help")
  ~CheckMenuItem(main&(3),22,MF_CHECKED)
  ~SetMenu(WIN(pw|),main&(0))
  SETTIMER pw|,1,100
RETURN
'
PROCEDURE menu_handler()
  TRY
    DO
      SETDC _DC(pw|)
      WINDGET 4,wx%,wy%,wb%,wh%
      PEEKEVENT
      SELECT MENU(1)
      CASE 4
        @progend(TRUE)
      ENDSELECT
      SELECT _Mess
      CASE WM_RBUTTONDOWN
        @progend(FALSE)
      CASE WM_TIMER
        @draw_time
        @react_to_buttons
      CASE WM_PAINT
        @paint
      CASE WM_CHAR
        sel% = _wParam
        /* @draw_status("Key: " + STR$(sel),black,35,IconExclHandle&)
        @eval_menu
      CASE WM_COMMAND
        SELECT LOBYTE(_lParam)
        CASE 0
          sel% = _wParam
          /* @draw_status("Menu: " + STR$(sel),black,35,IconExclHandle&)
          @eval_menu
        CASE ELSE
          sel% = _wParam
          /* @draw_status("Button: " + STR$(sel),black,35,IconExclHandle&)
          @eval_menu
        ENDSELECT
      ENDSELECT
    LOOP
    '
    bttn_data:
    DATA DLL,Utils,Help,About,Exit
  CATCH
  @error_handler
  @progend(FALSE)
RETURN
'
PROCEDURE eval_menu
  SELECT sel%
  CASE 68,100,900
    @bell
    temp$ = "DLLs|&Drive Select|&String Input|&Number Input|&Write (Save)|"
    temp$ = temp$ + "&Read (Load)|File &Info|&Meter Check|&List any file"
    x| = POPUP(temp$,b% \ 2,h% \ 2,1)
    ON x| + 1 GOSUB beep,get_drv,string,number,write,read,info,meter,list
  CASE 1
    @get_drv
  CASE 2
    @string
  CASE 3
    @number
  CASE 4
    @write
  CASE 5
    @read
  CASE 6
    @info
  CASE 7
    @meter
  CASE 8
    @list
  CASE 9,81,88,113,120,904
    @progend(TRUE)
  CASE 85,117,901
    @bell
    temp$ = "UTILs|&Free space|&Copy file(s)|&Kill file(s)|re&Name file|"
    temp$ = temp$ + "&Make folder|&Directory"
    x| = POPUP(temp$,b% \ 2,h% \ 2,1)
    ON x| + 1 GOSUB beep,free_space,copy,kill,rename,make,dir
  CASE 10
    @free_space
  CASE 11
    @copy
  CASE 12
    @kill
  CASE 13
    @rename
  CASE 14
    @make
  CASE 15
    @dir
  CASE 20,72,104,902
    temp$ = "dll_help.lst"
    IF EXIST(temp$)
      temp$ = orig_path$ + temp$ + CHR$(0)
      ~^list(240,0,b% - 240,h%,yellow%,black%,V:temp$,200)
    ELSE
      @paint
      temp$ = UPPER$(temp$) + " must be in same directory!"
      @draw_status(temp$,red%,35,IconStopHandle&)
    ENDIF
  CASE 21,65,97,903
    @about
  CASE 22,66,98
    @bell
    bflg! = !bflg!
    IF bflg!
      ~CheckMenuItem(main&(3),22,MF_CHECKED)
    ELSE
      ~CheckMenuItem(main&(3),22,MF_UNCHECKED)
    ENDIF
  ENDSELECT
RETURN
/*
PROCEDURE get_drv
  temp$ = "Drive Select" + CHR$(0)
  ptr% = V:temp$
  drv% = ^drvsel(temp$,b%,wy% + 39,drv%)
  CLS
  @paint
  IF drv% = -1
    BEEP
    temp$ = "No drive selected!"
    @draw_status(temp$,red%,35,IconStopHandle&)
  ELSE
    @bell
    temp$ = "Drive " + CHR$(drv%) + " selected!"
    @draw_status(temp$,blue%,35,IconInfoHandle&)
  ENDIF
RETURN
/*
PROCEDURE free_space
  ~^free(b%,wy% + 39,drv%)
RETURN
/*
PROCEDURE string
  subtit$ = "String Input"
  temp$ = subtit$ + CHR$(0)
  info$ = "Enter your Name" + CHR$(0)
  prompt$ = "[24 CHR$ max]: " + CHR$(0)
  ln& = 24,strng$ = SPACE$(ln&)
  LSET strng$ = "Bev" + CHR$(0)
  sptr% = V:strng$
  ~^input_string(V:temp$,V:info$,V:prompt$,sptr%,ln& + 1,(LEN(prompt$) + ln&) * 8,wy% + 39)
  strng$ = CHAR{sptr%}
  CLS
  @paint
  IF strng$ = ""
    temp$ = "Nothing entered or Input aborted!"
    @draw_status(temp$,red%,35,IconStopHandle&)
  ELSE
    temp$ = "Name is " + strng$ + "!"
    @draw_status(temp$,blue%,35,IconInfoHandle&)
  ENDIF
RETURN
/*
PROCEDURE number
  subtit$ = "Number Input"
  temp$ = subtit$ + CHR$(0)
  info$ = "Enter your Age" + CHR$(0)
  prompt$ = "[1-120] => " + CHR$(0)
  ln& = 3,strng$ = CHR$(0) + SPACE$(ln&)
  sptr% = V:strng$
  ~^input_string(V:temp$,V:info$,V:prompt$,sptr%,ln&,(LEN(prompt$) + ln&) * 8,wy% + 39)
  strng$ = CHAR{sptr%}
  CLS
  @paint
  IF strng$ = ""
    BEEP
    temp$ = "Nothing entered or Input aborted!"
    @draw_status(temp$,red%,35,IconStopHandle&)
  ELSE
    sptr% = V:strng$
    flg! = ^chk_valu(0,120,sptr%)
    IF flg! THEN @draw_status("Age is " + strng$ + "!",blue%,35,IconExclHandle&)
  ENDIF
RETURN
/*
PROCEDURE write
  @bell
  subtit$ = "Write File"
  temp$ = subtit$ + CHR$(0)
  filter$ = "*" + CHR$(0)        /* or any extension up to 3-letters
  xpath$ = path$ + CHR$(0)
  filename$ = CHR$(0) + SPACE$(256)
  ptr% = V:xpath$,fptr% = V:filename$
  test| = ^fileselect(ptr%,fptr%,V:temp$,V:filter$,b%,wy% + 39,1)
  xpath$ = CHAR{ptr%}
  filename$ = CHAR{fptr%}
  CLS
  @paint
  IF filename$ = ""
    colr% = red%,icn& = IconStopHandle&
    strng$ = "Nothing entered or " + subtit$ + " aborted!"
  ELSE
    /* check for EXISTance & type of file
    /* give chance to Backup
    IF test|
      RESTORE mess_data
      FOR i% = 1 TO test|
        READ temp$
      NEXT i%
      colr% = red%,icn& = IconStopHandle&
      strng$ = filename$ + "is a " + temp$ + "!"
      /* write only at your risk
    ELSE
      colr% = blue%,icn& = IconInfoHandle&
      strng$ = "Writing ... " + filename$ + "!"
    ENDIF
  ENDIF
  @draw_status(strng$,colr%,35,icn&)
  ' type of file
  mess_data:
  DATA read only file,hidden file,system file,disk name,directory
RETURN
/*
PROCEDURE read
  @bell
  subtit$ = "Read File"
  temp$ = subtit$ + CHR$(0)
  filter$ = "*" + CHR$(0)        /* or any extension up to 3-letters
  xpath$ = path$ + CHR$(0)
  filename$ = CHR$(0) + SPACE$(256)
  ptr% = V:xpath$,fptr% = V:filename$
  test| = ^fileselect(ptr%,fptr%,V:temp$,V:filter$,b%,wy% + 39,2)
  xpath$ = CHAR{ptr%}
  filename$ = CHAR{fptr%}
  CLS
  @paint
  IF filename$ = ""
    colr% = red%,icn& = IconStopHandle&
    strng$ = "Nothing marked or " + subtit$ + " aborted!"
  ELSE
    /* check for EXISTance & type of file
    IF test|
      RESTORE mess_data
      FOR i% = 1 TO test|
        READ temp$
      NEXT i%
      IF test| < 4
        colr% = blue%,icn& = IconInfoHandle&
        strng$ = "Reading ... " + filename$ + "!"
      ELSE
        colr% = red%,icn& = IconStopHandle&
        strng$ = filename$ + " is a " + temp$ + "!"
      ENDIF
    ELSE
      colr% = blue%,icn& = IconInfoHandle&
      strng$ = "Reading ... " + filename$ + "!"
    ENDIF
  ENDIF
  @draw_status(strng$,colr%,35,icn&)
RETURN
/*
PROCEDURE info
  @bell
  subtit$ = "File Info"
  temp$ = subtit$ + CHR$(0)
  filter$ = "*" + CHR$(0)        /* or any extension up to 3-letters
  xpath$ = path$ + CHR$(0)
  filename$ = CHR$(0) + SPACE$(310)
  ptr% = V:xpath$,fptr% = V:filename$
  ~^fileselect(ptr%,fptr%,V:temp$,V:filter$,b%,wy% + 39,3)
  xpath$ = CHAR{ptr%}
  filename$ = CHAR{fptr%}
  CLS
  @paint
  IF filename$ = ""
    temp$ = "Nothing marked or File Info aborted!"
    @draw_status(temp$,red%,35,IconInfoHandle&)
  ELSE
    SETFONT fntbold&
    RGBCOLOR blue%,white%
    ? AT(3,4);UPPER$(subtit$)
    ?
    ? "  DOS Name: " + TRIM$(LEFT$(filename$,12))
    ? " Long Name: " + TRIM$(MID$(filename$,50))
    ? "      Path: " + xpath$
    ? "      Size: " + TRIM$(MID$(filename$,13,9))
    ? "      Date: " + MID$(filename$,23,8)
    ? "      Time: " + MID$(filename$,32,8)
    ?
    ? "Attributes"
    attr% = VAL("&X" + MID$(filename$,42,6))
    @chk_attr(5)
    ? "       Archive: " + temp$
    @chk_attr(4)
    ? "        Subdir: " + temp$
    @chk_attr(3)
    ? "         Label: " + temp$
    @chk_attr(2)
    ? "        System: " + temp$
    @chk_attr(1)
    ? "        Hidden: " + temp$
    @chk_attr(0)
    ? "     Read Only: " + temp$
    ?
    ? "=>Press left button; right exits<="
    REPEAT
      @draw_time
    UNTIL MOUSEK = 1
    REPEAT
    UNTIL !MOUSEK
    CLS
    @paint
  ENDIF
RETURN
'
PROCEDURE chk_attr(i%)
  temp$ = "cleared"
  IF BTST(attr%,i%) THEN temp$ = "set"
RETURN
/*
PROCEDURE meter
  msg$ = "Testing ... Meter|[by Bev Brown]" + CHR$(0)
  mw& = 400,x& = (b% - mw&) \ 2
  FOR percent& = 0 TO 100
    ~^meter(x&,wy% + 39,mw&,24,ltblue%,ltgray%,red%,percent&,V:msg$)
    PAUSE 1
  NEXT percent&
RETURN
/*
PROCEDURE list
  @bell
  subtit$ = "List File"
  temp$ = subtit$ + CHR$(0)
  filter$ = "*" + CHR$(0)
  xpath$ = path$ + CHR$(0)
  filename$ = CHR$(0) + SPACE$(256)
  ptr% = V:xpath$,fptr% = V:filename$
  test| = ^fileselect(ptr%,fptr%,V:temp$,V:filter$,b%,wy% + 39,2)
  xpath$ = CHAR{ptr%}
  filename$ = CHAR{fptr%}
  CLS
  @paint
  IF filename$ = ""
    temp$ = "Nothing marked or " + subtit$ + " aborted!"
    @draw_status(temp$,red%,35,IconInfoHandle&)
  ELSE
    IF test| < 4
      temp$ = xpath$ + filename$ + CHR$(0)
      ~^list(240,0,b% - 240,h%,yellow%,black%,V:temp$,200)
    ELSE
      RESTORE mess_data
      FOR i% = 1 TO test|
        READ temp$
      NEXT i%
      colr% = red%,icn& = IconStopHandle&
      strng$ = filename$ + " is a " + temp$ + "!"
      @draw_status(strng$,colr%,35,icn&)
    ENDIF
  ENDIF
RETURN
/*
PROCEDURE dir
  path$ = path$ + CHR$(0)
  ptr% = V:path$
  ~^dir(ptr%,b%,wy% + 39)
  path$ = TRIM$(CHAR{ptr%})
  CLS
  @paint
  temp$ = "Path: " + path$
  @draw_status(temp$,blue%,35,IconInfoHandle&)
RETURN
/*
PROCEDURE make
  @bell
  xpath$ = path$ + CHR$(0)
  ~^make(V:xpath$,b%,wy% + 39)
RETURN
/*
PROCEDURE kill
  @bell
  xpath$ = path$ + CHR$(0)
  ptr% = V:xpath$
  ~^kill(ptr%,b%,wy% + 39)
RETURN
/*
PROCEDURE rename
  @bell
  xpath$ = path$ + CHR$(0)
  ptr% = V:xpath$
  ~^rename(ptr%,b%,wy% + 39)
RETURN
/*
PROCEDURE copy
  @bell
  xpath$ = path$ + CHR$(0)
  ptr% = V:xpath$
  ~^copy(ptr%,b%,wy% + 39)
RETURN
/*