/* GFA DLL v3.0.1
/* by Bev Brown
/* Jun.01/97
$LIBRARY gfadll3
$LNK EXE e:\langua~1\gfaw\dll_32\GfaDll3.dll
'
PROCEDURE libmain(inst&,dseg&,hpsz&,lpcmd#)
DEFINT "a-z"
bwcchandle& = LoadLibrary("bwcc.dll")
DLL #1,"bwcc.dll"
DECL WORD bwccMessageBox(w,l,l,w)
ENDDLL
'
DLL #2,"kernel"
DECL LONG FindFirstFile(l,l)
DECL BOOL FindNextFile(l,l)
DECL BOOL FindClose(l)
DECL BOOL SetCurrentDirectory(l)
ENDDLL
'
DIM drv_param(25)
black& = GETNEAREST(0,0,0),white& = GETNEAREST(255,255,255)
gray& = GETNEAREST(128,128,128),ltgray& = GETNEAREST(192,192,192)
blue& = GETNEAREST(0,0,255),ltblue& = GETNEAREST(0,255,255)
red& = GETNEAREST(128,0,0),ltred& = GETNEAREST(255,0,0)
black = RGB(0,0,0),white = RGB(255,255,255)
ltgray = RGB(192,192,192),gray = RGB(128,128,128)
ltblue = RGB(0,255,255),blue = RGB(0,0,255)
ltred = RGB(255,0,0),red = RGB(128,0,0)
yellow = RGB(255,255,0),green = RGB(0,128,0)
dpbstyle = BS_DEFPUSHBUTTON | WS_TABSTOP
pbstyle = BS_PUSHBUTTON | WS_TABSTOP
dis_style = pbstyle | WS_DISABLED
temp = MB_APPLMODAL | MB_DEFBUTTON1
style0 = WS_BORDER | DS_SYSMODAL | WS_THICKFRAME
style1 = temp | MB_ICONINFORMATION | MB_OK
temp = temp | MB_ICONQUESTION
style2 = temp | MB_YESNO
style3 = temp | MB_OKCANCEL
style4 = temp | MB_YESNOCANCEL
style5 = temp | MB_ABORTRETRYIGNORE
cr$ = CHR$(13) + CHR$(10)
@SetFonts
@drives
'
TYPE dta:
- CHAR*21 fs_DontTouch$
- BYTE fs_Attr
- CARD fs_Time
- CARD fs_Date
- LONG fs_Size
- CHAR*14 fs_Name$
ENDTYPE
'
TYPE FIND_DATA:
- LONG Attribute
- CHAR*40 Dummy$
- CHAR*260 FileName$ /* Win95-File Name
- CHAR*14 DOSFileName$ /* DOS-File Name
ENDTYPE
FIND_DATA:FIND_DATA.
'
FILE_ATTRIBUTE_ARCHIVE = $00000020
FILE_ATTRIBUTE_DIRECTORY = $00000010
FILE_ATTRIBUTE_HIDDEN = $00000002
FILE_ATTRIBUTE_NORMAL = $00000080
FILE_ATTRIBUTE_READONLY = $00000001
FILE_ATTRIBUTE_SYSTEM = $00000004
FILE_ATTRIBUTE_TEMPORARY = $00000100
FILE_ATTRIBUTE_ATOMIC_WRITE = $00000200
FILE_ATTRIBUTE_XACTION_WRITE = $00000400
'
RETVAL -1
RETURN
'
PROCEDURE web(flg&)
~FreeLibrary(bwcchandle&)
RETVAL 0
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&
RETVAL 0
RETURN
'
PROCEDURE set_dir(temp$)
drv = ASC(UPPER$(LEFT$(temp$)))
CHDRIVE drv
CHDIR temp$
RETURN
'
PROCEDURE lbutdown(i,j)
~SendMessage(DLGITEM(i,j),WM_LBUTTONDOWN,0,0)
PAUSE 6
RETVAL 0
RETURN
'
PROCEDURE bell
LOCAL i
FOR i = 0 TO 2
SOUND 3000,0.5
PAUSE 1
NEXT i
RETVAL 0
RETURN
'
PROCEDURE sound
LOCAL i
FOR i = 0 TO 2
SOUND 300,0.5
PAUSE 1
NEXT i
RETVAL 0
RETURN
'
PROCEDURE drives
LOCAL i
drv = _DRIVE
CLR drv_flg!
FOR i = ASC("A") TO ASC("Z")
CHDRIVE i
IF i = _DRIVE THEN drv_flg = BSET(drv_flg,i - 65)
NEXT i
CHDRIVE drv
RETURN
'
PROCEDURE status(b2,h2,pas,info$,bgrnd)
IF b2 < 558 THEN b2 = 558
DIALOG #26,(b2 - 558) \ 2,h2,558,64,subtit$,style0,65523,"courier new bold"
CTEXT "",1000,4,12,548,16
ENDDIALOG
DLG FILL 26,bgrnd
SHOWDIALOG #26
_WIN$(DLGITEM(26,1000)) = info$
~SetFocus(DLGITEM(26,1000))
PAUSE pas
CLOSEDIALOG #26
RETVAL 0
RETURN
'
PROCEDURE Box3D(x1&,y1&,w&,h&,colr,flg|)
DEFFILL 0
DEFLINE 0,1
RGBCOLOR colr
colx = white,coly = gray
IF flg| = 2 OR flg| = 4 THEN SWAP colx,coly
SELECT flg|
CASE 1,2 /* 1=raised area 2=inset area
PBOX x1&,y1&,x1& + w&,y1& + h&
RGBCOLOR colx
DRAW x1& + 3,y1& + h& - 6 TO x1& + 3,y1& + 3 TO x1& + w& - 6,y1& + 3
RGBCOLOR coly
DRAW TO x1& + w& - 6,y1& + h& - 6 TO x1& + 3,y1& + h& - 6
CASE 3,4 /* 3=raised border 4=inset border
PBOX x1& + 3,y1& + 3,x1& + w& - 6,y1& + h& - 6
RGBCOLOR colx
BOX x1& + 4,y1& + 4,x1& + w& - 7,y1& + h& - 7
RGBCOLOR coly
BOX x1& + 3,y1& + 3,x1& + w& - 6,y1& + h& - 6
ENDSELECT
RETVAL 0
RETURN
'
PROCEDURE coltext(txt$,colr,x1&,y1&,w&,h&,flg|)
GRAPHMODE R2_COPYPEN,TRANSPARENT
RGBCOLOR colr
DRAWTEXT x1&,y1&,w& + x1&,h& + y1&,txt$,flg|
RETVAL 0
RETURN
'
PROCEDURE error_handler
DEFMOUSE 0
CLOSE
BEEP
mess$ = "Error #" + STR$(ERR) + cr$ + ERR$(ERR)
~^bwccMessageBox(WIN(0),mess$,subtit$,style1)
RETVAL 0
RETURN
/*
PROCEDURE drvsel(ptr,b1,h1,a)
$EXPORT drvsel
TRY
temp$ = CHAR{ptr}
SYSCOL COLOR_GRAYTEXT,white&,0
FOR i = 0 TO 25
drv_param(i) = dis_style
IF BTST(drv_flg,i) THEN drv_param(i) = pbstyle
IF i = a - 65 THEN drv_param(i) = dpbstyle
NEXT i
DIALOG #31,(b1 - 236) \ 2,h1,236,300,temp$,style0,65520,"courier new"
FOR i = 0 TO 3
FOR j = 0 TO 6
x = i * 7 + j
IF x = 0
STATIC "Choose",100,2,15,66,20,SS_CENTER | WS_DISABLED
ELSE IF x = 27
CONTROL "",IDCANCEL,"BorBtn",pbstyle,10 + 3 * 50,10 + 6 * 36,64,49
ELSE
BUTTON "&" + CHR$(x + 64),100 + x,20 + i * 50,10 + j * 36,32,32,drv_param(x - 1)
ENDIF
NEXT j
NEXT i
ENDDIALOG
DLG FILL 31,gray
SHOWDIALOG #31
~SetFocus(DLGITEM(31,a + 100 - 64))
@bell
CLR drv
DO
PEEKEVENT
SELECT _Mess
CASE WM_RBUTTONDOWN
drv = -1
CASE WM_KEYDOWN
SELECT _wParam
CASE 65 TO 90
temp = _wParam
IF BTST(drv_flg,temp - 65)
drv = temp
@lbutdown(31,100 + drv + 65)
ENDIF
ENDSELECT
CASE WM_SYSKEYDOWN
SELECT _wParam
CASE 67,VK_F4
drv = -1
@lbutdown(31,IDCANCEL)
ENDSELECT
CASE WM_COMMAND
SELECT _wParam
CASE 101 TO 126
drv = _wParam - 100 + 64
CASE IDCANCEL
drv = -1
ENDSELECT
ENDSELECT
LOOP UNTIL drv <> 0
REPEAT
UNTIL !MOUSEK
CLOSEDIALOG #31
SYSCOL COLOR_GRAYTEXT,ltgray&,0
RETVAL drv
CATCH
@error_handler
drv = -1
CLOSEDIALOG #31
SYSCOL COLOR_GRAYTEXT,ltgray&,0
RETVAL drv
RETURN
/*
PROCEDURE free(b1,h1,a)
$EXPORT free
subtit$ = "Free Space"
temp$ = subtit$ + CHR$(0)
ptr = V:temp$
@drvsel(ptr,b1,h1,a)
IF drv = -1
BEEP
pas = 35
temp$ = "No Drive chosen!"
ELSE
IF drv < 67
@bell
mess$ = "Insert a disk in Drive " + CHR$(drv) + "!"
j = ^bwccMessageBox(WIN(0),mess$,subtit$,style3)
IF j = IDCANCEL
pas = 35
temp$ = "Aborted!"
GOTO abort_free
ENDIF
ENDIF
dfre = DFREE(drv - 64)
@change_it(dfre)
pas = 54
temp$ = "Drive " + CHR$(drv) + ": " + hold$ + " (" + STR$(dfre) + " bytes)"
ENDIF
abort_free:
DEFMOUSE 0
~^bwccMessageBox(WIN(0),temp$,subtit$,style1)
RETVAL 0
RETURN
/*
PROCEDURE input_string(tptr,iptr,pptr,sptr,ln&,b1,h1)
$EXPORT input_string
SETFONT fnt&
temp$ = CHAR{tptr}
info$ = CHAR{iptr}
prompt$ = CHAR{pptr}
prompt$ = prompt$ + " "
strng$ = CHAR{sptr}
ww = LEN(prompt$) * 8
IF b1 < 200 THEN b1 = 200
IF b1 > _X - 4 THEN b1 = _X - 4
SYSCOL COLOR_GRAYTEXT,ltred&,0
DIALOG #29,(_X - b1) \ 2,h1,b1,144,temp$,style0,65523,"courier new"
CTEXT info$,1000,10,10,b1 - 20,20
STATIC prompt$,1001,10,40,ww,20,SS_RIGHT | WS_DISABLED
temp = WS_TABSTOP | WS_BORDER | ES_AUTOVSCROLL
EDITTEXT "",1002,10 + ww,38,b1 - (20 + ww),20,temp
CONTROL "",IDOK,"BorBtn",pbstyle,b1 \ 2 - 84,70,64,40
CONTROL "",IDCANCEL,"BorBtn",pbstyle,b1 \ 2 + 20,70,64,40
ENDDIALOG
SENDMESSAGE DLGITEM(29,1002),EM_LIMITTEXT,ln&,0
_WIN$(DLGITEM(29,1002)) = strng$
SHOWDIALOG #29
DLG FILL 29,gray
@bell
~SetFocus(DLGITEM(29,1002))
finit! = FALSE
DO
PEEKEVENT
SELECT _Mess
CASE WM_RBUTTONDOWN
finit! = TRUE
_WIN$(DLGITEM(29,1002)) = ""
CASE WM_COMMAND
SELECT _wParam
CASE IDOK
finit! = TRUE
CASE IDCANCEL
finit! = TRUE
_WIN$(DLGITEM(29,1002)) = ""
ENDSELECT
CASE WM_SYSKEYDOWN
SELECT _wParam
CASE 79
finit! = TRUE
@lbutdown(29,IDOK)
CASE 67,VK_F4
finit! = TRUE
_WIN$(DLGITEM(29,1002)) = ""
@lbutdown(29,IDCANCEL)
ENDSELECT
ENDSELECT
LOOP UNTIL finit!
REPEAT
UNTIL !MOUSEK
strng$ = _WIN$(DLGITEM(29,1002))
CLOSEDIALOG #29
SYSCOL COLOR_GRAYTEXT,ltgray&,0
strng$ = strng$ + CHR$(0)
CHAR{sptr} = strng$
RETVAL 0
RETURN
/*
PROCEDURE chk_valu(lo,hi,ptr)
$EXPORT chk_valu
subtit$ = "Value Check"
temp$ = CHAR{ptr}
IF VAL?(temp$)
x = VAL(temp$)
IF x < lo OR x > hi
BEEP
temp$ = "Out of Range ..."
~^bwccMessageBox(WIN(0),mess$,subtit$,style1)
flg! = FALSE
ELSE
flg! = TRUE
ENDIF
ELSE
BEEP
temp$ = "Input Error, NOT numeric!"
~^bwccMessageBox(WIN(0),mess$,subtit$,style1)
flg! = FALSE
ENDIF
RETVAL flg!
RETURN
/*
PROCEDURE fileselect(ptr,fptr,tptr,eptr,b2,h2,flg&)
$EXPORT fileselect
TRY
IF b2 < 340 THEN b2 = 340
SELECT flg&
CASE 1
fgrnd& = red&,bgrnd = gray
CASE 2
fgrnd& = blue&,bgrnd = ltgray
CASE 3
fgrnd& = blue&,bgrnd = green
ENDSELECT
xpath$ = CHAR{ptr}
orig_path$ = xpath$
filename$ = CHAR{fptr}
subtit$ = CHAR{tptr}
filter$ = CHAR{eptr}
stylex = WS_CHILD | WS_VISIBLE
SYSCOL COLOR_GRAYTEXT,fgrnd&,0
DIALOG #30,(b2 - 340) \ 2,h2,340,308,subtit$,style0,65524,"courier new"
STATIC "Folder:",1000,4,6,52,16,WS_DISABLED
STATIC "",1001,60,4,260,18,WS_BORDER
temp = stylex | LBS_HASSTRINGS | WS_TABSTOP
temp = temp | LBS_NOTIFY | WS_BORDER | WS_VSCROLL
LISTBOX "",1002,4,48,232,236,temp
STATIC "Drives:",1003,244,54,60,16,WS_DISABLED
COMBOBOX "",1004,244,72,64,400,temp | CBS_DROPDOWNLIST
STATIC "FileName:",1005,4,28,66,16,WS_DISABLED
IF flg& = 1
temp = stylex | ES_LEFT | WS_BORDER | ES_AUTOHSCROLL | WS_TABSTOP
EDITTEXT "",1006,72,26,228,18,temp
ELSE
temp = stylex | WS_BORDER
STATIC "",1006,72,26,228,18,temp
ENDIF
CONTROL "",IDOK,"BorBtn",dpbstyle,246,156,64,40
CONTROL "",IDCANCEL,"BorBtn",pbstyle,246,200,64,40
ENDDIALOG
DLG FILL 30,bgrnd
SHOWDIALOG #30
@FillListBox(30)
~SetFocus(DLGITEM(30,1002))
CLR finit!,flg!
DO
PEEKEVENT
SELECT _Mess
CASE WM_RBUTTONDOWN
finit! = TRUE
_WIN$(DLGITEM(30,1006)) = ""
CASE WM_SYSKEYDOWN
SELECT _wParam
CASE 79
finit! = TRUE,flg! = TRUE
@lbutdown(30,IDOK)
CASE 67,VK_F4
finit! = TRUE
@lbutdown(30,IDCANCEL)
_WIN$(DLGITEM(30,1006)) = ""
ENDSELECT
CASE WM_COMMAND
SELECT _wParam
CASE 1002
SELECT HIWORD(_lParam)
CASE LBN_SELCHANGE
@get_sel(30)
_WIN$(DLGITEM(30,1006)) = MID$(txt$(lsel&),50)
CASE LBN_DBLCLK
@get_sel(30)
temp$ = TRIM$(LEFT$(temp$,12))
IF temp$ = ".."
xpath$ = LEFT$(xpath$,LEN(xpath$) - 1)
i = RINSTR(xpath$,"\")
xpath$ = LEFT$(xpath$,i)
ELSE IF BTST(temp,4)
xpath$ = xpath$ + temp$ + "\"
ENDIF
@FillListBox(30)
ENDSELECT
CASE 1004
SENDMESSAGE DLGITEM(30,1004),CB_GETCURSEL,0,0,lsel&
IF lsel& = -1
BEEP
ELSE
temp$ = SPACE$(6)
SENDMESSAGE DLGITEM(30,1004),CB_GETLBTEXT,lsel&,V:temp$
drv = ASC(UPPER$(MID$(temp$,3)))
xpath$ = CHR$(drv) + ":\"
@FillListBox(30)
ENDIF
CASE IDOK
finit! = TRUE,flg! = TRUE
CASE IDCANCEL
finit! = TRUE
_WIN$(DLGITEM(30,1006)) = ""
ENDSELECT
ENDSELECT
REPEAT
UNTIL !MOUSEK
LOOP UNTIL finit!
CLR test|
IF flg!
IF flg& = 3
filename$ = txt$(lsel&)
ELSE
filename$ = LEFT$(txt$(lsel&),12)
ENDIF
IF filename$ = ".." THEN filename$ = ""
FOR i = 0 TO 4
IF BTST(txt(lsel&),i) THEN test| = i + 1
NEXT i
ENDIF
xpath$ = xpath$ + CHR$(0)
filename$ = filename$ + CHR$(0)
CLOSEDIALOG #30
SYSCOL COLOR_GRAYTEXT,ltgray&,0
CHAR{ptr} = xpath$
CHAR{fptr} = filename$
RETVAL test|
CATCH
CLOSEDIALOG #30
SYSCOL COLOR_GRAYTEXT,ltgray&,0
@error_handler
filename$ = CHR$(0),xpath$ = orig_path$ + CHR$(0)
CHAR{ptr} = xpath$
CHAR{fptr} = filename$
RETVAL 0
RETURN
'
PROCEDURE get_sel(db&)
SENDMESSAGE DLGITEM(db&,1002),LB_GETCURSEL,0,0,lsel&
temp$ = txt$(lsel&)
temp = txt(lsel&)
RETURN
'
PROCEDURE chek_Path_len(ln&)
hold$ = LOWER$(xpath$)
IF LEN(hold$) > ln& THEN hold$ = LEFT$(hold$,3) + "..." + RIGHT$(hold$,ln& - 6)
RETVAL 0
RETURN
'
PROCEDURE FillListBox(db&)
LOCAL i
@set_dir(xpath$)
@chek_Path_len(36)
_WIN$(DLGITEM(db&,1001)) = hold$
@get_dir
SENDMESSAGE DLGITEM(db&,1002),LB_RESETCONTENT,0,0
SENDMESSAGE DLGITEM(db&,1004),CB_RESETCONTENT,0,0
FOR i = 0 TO ctr - 1
IF db& = 23
temp$ = LEFT$(txt$(i),47)
ELSE
temp$ = TRIM$(MID$(txt$(i),50))
ENDIF
~SendMessage(DLGITEM(db&,1002),LB_ADDSTRING,0,temp$)
NEXT i
~SendMessage(DLGITEM(db&,1004),CB_DIR,$4000,CHR$(0))
~SendMessage(DLGITEM(db&,1002),LB_SETCURSEL,0,0)
IF db& <> 28 THEN _WIN$(DLGITEM(db&,1006)) = TRIM$(LEFT$(txt$(0),12))
RETVAL 0
RETURN
'
PROCEDURE W95GetName(temp$)
LOCAL SearchHandle&
xName$ = temp$ + CHR$(0)
SearchHandle& = ^FindFirstFile(V:xName$,V:FIND_DATA.)
IF SearchHandle& = -1
xName$ = ""
ELSE
~^FindClose(SearchHandle&)
xName$ = ZTRIM$(FIND_DATA.FileName$)
ENDIF
RETVAL 0
RETURN
'
PROCEDURE DOSGetName(temp$)
LOCAL SearchHandle&
hold$ = temp$ + CHR$(0)
SearchHandle& = ^FindFirstFile(V:hold$,V:FIND_DATA.)
IF SearchHandle& = -1
hold$ = ""
ELSE
~^FindClose(SearchHandle&)
IF ZTRIM$(FIND_DATA.DOSFileName$) = ""
hold$ = ZTRIM$(FIND_DATA.FileName$)
ELSE
hold$ = ZTRIM$(FIND_DATA.DOSFileName$)
ENDIF
ENDIF
RETVAL 0
RETURN
'
PROCEDURE get_dir
LOCAL SearchHandle&,temp$,i
ERASE txt$(),txt()
DIM txt$(4096),txt(4096)
CLR ctr
dta = FGETDTA()
SearchHandle& = FSFIRST(xpath$ + "*.*",$3F)
WHILE !SearchHandle& AND ctr < 4096
tempName$ = {dta}.fs_Name$
temp = {dta}.fs_Attr
i = RINSTR(tempName$,".")
temp$ = RIGHT$(tempName$,i + 1)
IF tempName$ <> "."
IF tempName$ = ".." OR BTST(temp,3)
xName$ = tempName$
ELSE
@W95GetName(tempName$)
ENDIF
IF BTST(temp,4) OR BTST(temp,3)
tempName$ = UPPER$(tempName$)
xName$ = UPPER$(xName$)
flg! = FALSE
ELSE
tempName$ = LOWER$(tempName$)
xName$ = LOWER$(xName$)
flg! = TRUE
ENDIF
i = RINSTR(tempName$,".")
test$ = MID$(tempName$,i + 1)
IF filter$ <> "*" AND flg! AND LOWER$(test$) <> LOWER$(filter$) THEN GOTO bypass
txt$(ctr) = SPACE$(310)
txt(ctr) = temp
LSET txt$(ctr) = tempName$
IF tempName$ = ".."
MID$(txt$(ctr),21) = "0"
ELSE IF BTST(txt(ctr),4)
MID$(txt$(ctr),17) = "
"
ELSE IF BTST(txt(ctr),3)
MID$(txt$(ctr),16) = ""
ELSE
MID$(txt$(ctr),13) = STR$({dta}.fs_Size,9)
ENDIF
i = {dta}.fs_Date
temp$ = DEC$((i >> 5) & 15,2) + "/" + DEC$(i & 31,2) + "/" + DEC$((i >> 9) + 80,2)
MID$(txt$(ctr),23) = temp$
temp$ = DEC$((i >> 11 ),2) + ":" + DEC$((i >> 5 & 63),2) + ":" + DEC$((i & 31) * 2,2)
MID$(txt$(ctr),32) = temp$
IF BTST(txt(ctr),5) THEN MID$(txt$(ctr),42) = "A"
IF BTST(txt(ctr),4) THEN MID$(txt$(ctr),43) = "D"
IF BTST(txt(ctr),3) THEN MID$(txt$(ctr),44) = "N"
IF BTST(txt(ctr),2) THEN MID$(txt$(ctr),45) = "S"
IF BTST(txt(ctr),1) THEN MID$(txt$(ctr),46) = "H"
IF BTST(txt(ctr),0) THEN MID$(txt$(ctr),47) = "P"
MID$(txt$(ctr),50) = xName$
ctr ++
bypass:
ENDIF
SearchHandle& = FSNEXT()
WEND
IF ctr THEN QSORT txt$() OFFSET 49,ctr,txt()
IF ctr = 4096
@bell
mess$ = "First 4096 entries only!"
~^bwccMessageBox(WIN(0),mess$,subtit$,style1)
ENDIF
/* RETVAL 0
RETURN
/*
PROCEDURE meter(x&,y&,mw&,mht&,mfg,bbg,bfg,percent&,msg)
$EXPORT meter
SETFONT fntbold&
IF percent& = 0 AND WIN(20) = 0
OPENW #20,x&,y&,0,0,WS_VISIBLE
hw = GetTextExtent(_DC(20),msg,99)
ht& = HIWORD(hw)
height& = mht& + ht& / 2 + 6
CLR line1$,line2$
IF msg > 0
height& = height& + ht& * 2
msg$ = CHAR{msg}
pos& = INSTR(msg$,"|")
IF pos& > 0
height& = height& + ht&
line1$ = LEFT$(msg$,pos& - 1)
line2$ = MID$(msg$,pos& + 1)
ELSE
line1$ = msg$
ENDIF
ENDIF
~MoveWindow(WIN(20),x&,y&,mw&,height&,-1)
mode| = DT_SINGLELINE | DT_CENTER | DT_VCENTER
@Box3D(0,0,mw&,height&,bbg,1)
@Box3D(6,height& - (mht& + 3) - 10,mw& - 12,mht& + 6,ltgray,4)
IF line1$ <> "" THEN @coltext(line1$,bfg,10,ht& / 2,mw& - 20,ht&,mode|)
IF line2$ <> "" THEN @coltext(line2$,bfg,10,ht& / 2 + ht&,mw& - 20,ht&,mode|)
ENDIF
distance& = INT((mw& - 27) * (percent& / 100))
@Box3D(6,height& - (mht& + 3) - 10,6 + distance&,mht& + 6,gray,3)
@Box3D(6 + distance&,height& - (mht& + 3) - 10,mw& - 15 - distance&,mht& + 6,ltgray,4)
@coltext(STR$(percent&) + "%",mfg,9,height& - mht& - 7,mw& - 21,mht& - 6,mode|)
IF percent& = 100
@Box3D(6,height& - (mht& + 3) - 10,mw& - 12,mht& + 6,gray,3)
@coltext("100%",mfg,9,height& - mht& - 7,mw& - 21,mht& - 6,mode|)
PAUSE 18
CLOSEW #20
ENDIF
RETVAL 0
RETURN
/*
PROCEDURE list(sx,sy,sb,sh,fgrnd,bgrnd,ptr,max_lines)
$EXPORT list
filename$ = CHAR{ptr}
IF !EXIST(filename$)
BEEP
mess$ = "Can NOT find " + filename$ + "!"
~^bwccMessageBox(WIN(0),mess$,subtit$,style1)
ELSE
ERASE txt$()
DIM txt$(max_lines)
OPEN "i",#3,filename$
RECALL #3,txt$(),-1,cnt
CLOSE #3
vpos& = 1,hpos& = 1,finit! = FALSE
TITLEW #1,filename$
OPENW #1,sx,sy,sb,sh,-1
SETDC _DC(1)
SETFONT fnt&
CLS bgrnd
WINDGET 7,hb
WINDGET 14,height&
scrn_lines& = hb \ height&
CB WIN(1),0 TO -1,callback
~SetScrollRange(WIN(1),SB_VERT,1,cnt - 1,-1)
~SetScrollRange(WIN(1),SB_HORZ,1,80,-1)
RGBCOLOR fgrnd,bgrnd
@bell
@text_display
DO
PEEKEVENT
SELECT _Mess
CASE WM_RBUTTONDOWN
finit! = TRUE
REPEAT
UNTIL !MOUSEK
CASE WM_KEYDOWN
@keyboard_routine
ENDSELECT
SELECT MENU(1)
CASE 4
finit! = TRUE
CASE 21
@text_display
ENDSELECT
UNTIL finit!
CLOSEW #1
ENDIF
RETVAL 0
RETURN
'
PROCEDURE text_display
HIDEM
WINDGET 14,height&
WINDGET 20,width&
scrn_lines& = hb \ height&
y_pos = height&,text_line = vpos& - 1
WINDGET 6,wb
max_chr = wb \ width&
REPEAT
temp$ = MID$(txt$(text_line),hpos&,max_chr)
IF LEN(temp$) < wb \ width& - 1 THEN temp$ = temp$ + SPACE$(max_chr - LEN(temp$))
TEXT 2,y_pos - height&,temp$
ADD y_pos,height&
text_line ++
UNTIL y_pos > hb OR text_line = cnt
SHOWM
RETVAL 0
RETURN
'
PROCEDURE callback(handle&,mess&,wparam&,lparam)
SELECT mess&
CASE WM_VSCROLL
vpos& = GetScrollPos(handle&,SB_VERT)
SELECT wparam&
CASE SB_LINEUP
vpos& --
CASE SB_LINEDOWN
vpos& ++
CASE SB_PAGEUP
SUB vpos&,scrn_lines& - 1
CASE SB_PAGEDOWN
ADD vpos&,scrn_lines& - 1
CASE SB_THUMBTRACK
vpos& = LOWORD(lparam)
ENDSELECT
@check_vpos(handle&)
CASE WM_HSCROLL
hpos& = GetScrollPos(handle&,SB_HORZ)
SELECT wparam&
CASE SB_LINEUP
hpos& --
CASE SB_LINEDOWN
hpos& ++
CASE SB_PAGEUP
SUB hpos&,40
CASE SB_PAGEDOWN
ADD hpos&,40
CASE SB_THUMBTRACK
hpos& = LOWORD(lparam)
ENDSELECT
@check_hpos(handle&)
ENDSELECT
RETURN
'
PROCEDURE keyboard_routine
SELECT MENU(12)
CASE 33 TO 36,38,40
SELECT _wParam
CASE VK_PRIOR
SUB vpos&,scrn_lines& - 1
CASE VK_NEXT
ADD vpos&,scrn_lines& - 1
CASE VK_END
vpos& = cnt - 1
CASE VK_HOME
vpos& = 1
CASE VK_UP
vpos& --
CASE VK_DOWN
vpos& ++
ENDSELECT
@check_vpos(WIN(1))
CASE 37,39
SELECT _wParam
CASE VK_RIGHT
hpos& ++
CASE VK_LEFT
hpos& --
ENDSELECT
@check_hpos(WIN(1))
CASE VK_ESCAPE
finit! = TRUE
DEFAULT
BEEP
ENDSELECT
RETVAL 0
RETURN
'
PROCEDURE check_vpos(handle&)
vpos& = MIN(vpos&,cnt - scrn_lines& + 1)
vpos& = MAX(vpos&,1)
~SetScrollPos(handle&,SB_VERT,vpos&,-1)
@text_display
RETVAL 0
RETURN
'
PROCEDURE check_hpos(handle&)
hpos& = MAX(hpos&,1)
hpos& = MIN(hpos&,80)
~SetScrollPos(handle&,SB_HORZ,hpos&,-1)
@text_display
RETVAL 0
RETURN
/*
PROCEDURE create_Sarray
LOCAL i,j,k,a,start
ERASE stxt$(),stxt()
DIM stxt$(4096),stxt(4096)
CLR start,cnt
FOR i = 0 TO ctr - 1
IF mark!(i)
filename$ = TRIM$(LEFT$(txt$(i),12))
IF LEFT$(filename$,1) <> "." AND !BTST(txt(i),3)
stxt$(cnt) = xpath$ + filename$
stxt(cnt) = txt(i)
cnt ++
ENDIF
ENDIF
NEXT i
a = cnt - 1
next_level:
CLR saflg!
FOR k = start TO start + a
IF BTST(stxt(k),4)
xpath$ = stxt$(k)
IF RIGHT$(xpath$) <> "\" THEN xpath$ = xpath$ + "\"
@get_dir
IF ctr
FOR j = 0 TO ctr - 1
temp$ = TRIM$(LEFT$(txt$(j),12))
IF LEFT$(temp$,1) <> "." AND !BTST(txt(j),3)
stxt$(cnt) = xpath$ + temp$
stxt(cnt) = txt(j)
IF BTST(stxt(cnt),4) THEN saflg! = TRUE
cnt ++
ENDIF
NEXT j
ENDIF
ENDIF
NEXT k
IF saflg!
start = a + 1,a = cnt - start
GOTO next_level
ENDIF
RETVAL 0
RETURN
/*
PROCEDURE kill(ptr,b1,h1)
$EXPORT kill
TRY
xpath$ = CHAR{ptr}
subtit$ = "Kill File(s)"
filter$ = "*"
IF b1 < 340 THEN b1 = 340
stylex = WS_CHILD | WS_VISIBLE
SYSCOL COLOR_GRAYTEXT,white&,0
DIALOG #28,(b1 - 340) \ 2,h1,340,308,subtit$,style0,65524,"courier new"
STATIC "Folder:",1000,4,6,52,16,WS_DISABLED
STATIC "",1001,60,4,260,18,WS_BORDER
temp = stylex | LBS_NOTIFY | LBS_HASSTRINGS | WS_TABSTOP | WS_BORDER | WS_VSCROLL
LISTBOX "",1002,4,26,220,248,temp | LBS_MULTIPLESEL | LBS_EXTENDEDSEL
STATIC "Drives:",1003,256,26,72,16,WS_DISABLED
COMBOBOX "",1004,246,42,72,400,temp | CBS_DROPDOWNLIST
CONTROL "",IDOK,"BorBtn",dpbstyle,246,156,64,40
CONTROL "",IDCANCEL,"BorBtn",pbstyle,246,200,64,40
ENDDIALOG
DLG FILL 28,ltred
SHOWDIALOG #28
@FillListBox(28)
~SetFocus(DLGITEM(28,1002))
CLR finit!,flg!,all_sel!
DO
PEEKEVENT
sel = _Mess
SELECT sel
CASE WM_RBUTTONDOWN
IF _hWnd = DLGITEM(28,1002)
all_sel! = !all_sel!
FOR i = 0 TO ctr - 1
~SendMessage(DLGITEM(28,1002),LB_SETSEL,all_sel!,i)
NEXT i
ELSE
finit! = TRUE
@lbutdown(28,IDCANCEL)
ENDIF
CASE WM_SYSKEYDOWN
SELECT _wParam
CASE 79
finit! = TRUE,flg! = TRUE
@lbutdown(28,IDOK)
CASE 67,VK_F4
finit! = TRUE
@lbutdown(28,IDCANCEL)
ENDSELECT
CASE WM_COMMAND
SELECT _wParam
CASE 1002
SELECT HIWORD(_lParam)
CASE LBN_SELCHANGE
@bell
CASE LBN_DBLCLK
@get_sel(28)
temp$ = TRIM$(LEFT$(temp$,12))
IF temp$ = ".."
xpath$ = LEFT$(xpath$,LEN(xpath$) - 1)
i = RINSTR(xpath$,"\")
xpath$ = LEFT$(xpath$,i)
ELSE IF BTST(temp,4)
xpath$ = xpath$ + temp$ + "\"
ENDIF
@FillListBox(28)
ENDSELECT
CASE 1004
temp = SendMessage(DLGITEM(28,1004),CB_GETCURSEL,0,0)
IF temp = -1
BEEP
ELSE
temp$ = SPACE$(260)
~SendMessage(DLGITEM(28,1004),CB_GETLBTEXT,temp,V:temp$)
temp$ = ZTRIM$(temp$)
drv = ASC(UPPER$(MID$(temp$,3)))
xpath$ = CHR$(drv) + ":\"
@FillListBox(28)
ENDIF
CASE IDOK
finit! = TRUE,flg! = TRUE
CASE IDCANCEL
finit! = TRUE
ENDSELECT
ENDSELECT
REPEAT
UNTIL !MOUSEK
LOOP UNTIL finit!
IF flg!
CLR flg!
ERASE mark!()
DIM mark!(ctr - 1)
FOR i = 0 TO ctr - 1
status! = SendMessage(DLGITEM(28,1002),LB_GETSEL,i,0)
mark!(i) = status!
IF status! THEN flg! = TRUE
NEXT i
CLOSEDIALOG #28
IF flg!
@create_Sarray
flg! = FALSE
IF cnt > 1
@bell
mess$ = "Do you wish to confirm each kill?"
j = ^bwccMessageBox(WIN(0),mess$,subtit$,style2)
flg! = j - 7
ENDIF
FOR i = cnt - 1 DOWNTO 0
IF flg!
@bell
mess$ = "Kill '" + UPPER$(stxt$(i)) + "'? [CANCEL to abort]"
j = ^bwccMessageBox(WIN(0),mess$,subtit$,style4)
IF j = IDNO THEN GOTO next_file
IF j = IDCANCEL THEN GOTO abort_kill
ENDIF
@check_attr
IF !xflg! THEN GOTO next_file
IF BTST(stxt(i),4)
RMDIR stxt$(i)
ELSE
@reset_Attr
IF !xflg! THEN GOTO next_file
KILL stxt$(i)
ENDIF
test$ = stxt$(i)
IF LEN(test$) > 46 THEN test$ = LEFT$(test$,3) + " ... " + RIGHT$(test$,40)
@status(b1,h1,3,"Deleting ... " + UPPER$(test$) + "!",ltred)
next_file:
NEXT i
abort_kill:
ENDIF
ELSE
CLOSEDIALOG #28
mess$ = "Nothing chosen or " + subtit$ + " aborted!"
~^bwccMessageBox(WIN(0),mess$,subtit$,style1)
ENDIF
SYSCOL COLOR_GRAYTEXT,ltgray&,0
RETVAL 0
CATCH
CLOSEDIALOG #28
SYSCOL COLOR_GRAYTEXT,ltgray,0
@error_handler
RETVAL 0
RETURN
'
PROCEDURE check_attr
xflg! = TRUE
IF BTST(stxt(i),3)
mess$ = "'" + UPPER$(stxt$(i)) + "' is the disk's name. It will be ignored!"
~^bwccMessageBox(WIN(0),mess$,subtit$,style1)
xflg! = FALSE
ELSE IF BTST(stxt(i),2)
mess$ = "'" + UPPER$(stxt$(i)) + "' is a SYSTEM file. Kill anyways?"
j = ^bwccMessageBox(WIN(0),mess$,subtit$,style2)
xflg! = j - 7
ELSE IF BTST(stxt(i),1)
mess$ = "'" + UPPER$(stxt$(i)) + "' is a HIDDEN file. Kill anyways?"
j = ^bwccMessageBox(WIN(0),mess$,subtit$,style2)
xflg! = j - 7
ELSE IF BTST(stxt(i),0)
mess$ = "'" + UPPER$(stxt$(i)) + "' is a READ ONLY file. Kill anyways?"
j = ^bwccMessageBox(WIN(0),mess$,subtit$,style2)
xflg! = j - 7
ENDIF
RETVAL 0
RETURN
'
PROCEDURE reset_Attr
xflg! = TRUE
FOR k = 2 DOWNTO 0
stxt(k) = BCLR(stxt(i),k)
NEXT k
temp$ = stxt$(i) + CHR$(0)
_DS = HIWORD(V:temp$)
_DX = LOWORD(V:temp$)
~INTR($21,_AH = $43,_AL = 1,_CX = stxt(i))
IF ODD(_FL)
SELECT _AX
CASE 1
mess$ = "Invalid code!"
CASE 2
mess$ = "File not found!"
CASE 3
mess$ = "Path not found!"
CASE 4
mess$ = "Access denied!"
ENDSELECT
BEEP
~^bwccMessageBox(WIN(0),mess$,subtit$,style1)
xflg! = FALSE
ENDIF
RETVAL 0
RETURN
/*
PROCEDURE rename(ptr,b1,h1)
$EXPORT rename
TRY
fgrnd = blue,fgrnd2 = ltred,bgrnd = yellow
xpath$ = CHAR{ptr}
subtit$ = "ReName File"
temp$ = subtit$ + CHR$(0)
filter$ = "*" + CHR$(0)
xpath$ = xpath$ + CHR$(0)
filename$ = CHR$(0) + SPACE$(260)
ptr = V:xpath$,fptr = V:filename$ /* 2 v for rename */
@fileselect(ptr,fptr,V:temp$,V:filter$,b1,h1,2)
xpath$ = CHAR{ptr}
filename$ = CHAR{fptr}
IF filename$ = ""
strng$ = "Nothing chosen or " + subtit$ + " aborted!"
ELSE
IF test|
RESTORE mess_data
FOR i = 1 TO test|
READ temp$
NEXT i
mess$ = UPPER$(filename$) + " is a " + cr$ + temp$ + "." + cr$
IF test| < 3
mess$ = mess$ + "Are you sure?"
j = ^bwccMessageBox(WIN(0),mess$,subtit$,style2)
ELSE
mess$ = mess$ + "Cannot " + subtit$ + "!"
~^bwccMessageBox(WIN(0),mess$,subtit$,style1)
j = IDNO
ENDIF
IF j = IDNO THEN GOTO abort_rename
ENDIF
@chek_Path_len(36)
info$ = "Location ... " + hold$ + CHR$(0)
temp$ = subtit$ + " ... " + filename$ + CHR$(0)
prompt$ = "Enter NEW Filename [max: 12 CHR$]: " + CHR$(0)
ln& = 12
strng$ = filename$ + CHR$(0) + SPACE$(12 - LEN(filename$))
sptr = V:strng$
@input_string(V:temp$,V:info$,V:prompt$,sptr,ln&,440,h1)
strng$ = CHAR{sptr}
IF strng$ = ""
strng$ = "NO name entered or " + subtit$ + " aborted!"
ELSE
IF EXIST(xpath$ + strng$)
BEEP
mess$ = UPPER$(strng$) + " already exists! Back it up?"
j = ^bwccMessageBox(WIN(0),mess$,subtit$,style4)
DEFMOUSE 2
IF j = IDYES
i = INSTR(strng$,".")
IF i
hold$ = LEFT$(strng$,i) + "bak"
ELSE
hold$ = strng$ + ".bak"
ENDIF
IF EXIST(xpath$ + hold$) THEN KILL xpath$ + hold$
RENAME xpath$ + strng$ AS xpath$ + hold$
ELSE IF j = IDNO
KILL xpath$ + strng$
ELSE
GOTO abort_rename
ENDIF
ENDIF
RENAME xpath$ + filename$ AS xpath$ + strng$
strng$ = UPPER$(filename$) + " renamed " + UPPER$(strng$) + "!"
ENDIF
ENDIF
~^bwccMessageBox(WIN(0),strng$,subtit$,style1)
abort_rename:
DEFMOUSE 0
RETVAL 0
mess_data:
DATA read only file,hidden file,system file,disk name,directory
CATCH
@error_handler
RETVAL 0
RETURN
/*
PROCEDURE dir(ptr,b2,h2)
$EXPORT dir
TRY
IF b2 < 452 THEN b2 = 452
xpath$ = CHAR{ptr}
orig_path$ = xpath$
filter$ = "*"
subtit$ = "Directory [Change - OK in NEW directory]"
CLR finit!
stylex = WS_CHILD | WS_VISIBLE
SYSCOL COLOR_GRAYTEXT,white&,0
DIALOG #23,(b2 - 452) \ 2,h2,452,364,subtit$,style0,65524,"courier new"
STATIC "Folder:",1000,4,6,52,16,WS_DISABLED
STATIC "",1001,60,4,368,18,WS_BORDER
temp = stylex | LBS_HASSTRINGS | LBS_NOTIFY
temp = temp | WS_VSCROLL | WS_TABSTOP | WS_BORDER
LISTBOX "",1002,4,68,350,266,temp
STATIC "Drives:",1003,372,68,60,16,WS_DISABLED
COMBOBOX "",1004,372,86,64,400,temp | CBS_DROPDOWNLIST
STATIC "W95 FileName",1005,4,28,128,16,WS_DISABLED
EDITTEXT "",1006,4,44,432,18,WS_BORDER | ES_AUTOHSCROLL
CONTROL "",IDOK,"BorBtn",pbstyle,372,156,64,40
CONTROL "",IDCANCEL,"BorBtn",pbstyle,372,200,64,40
ENDDIALOG
SHOWDIALOG #23
DLG FILL 23,green
@FillListBox(23)
~SetFocus(DLGITEM(23,1002))
DO
PEEKEVENT
SELECT _Mess
CASE WM_RBUTTONDOWN
finit! = TRUE,xpath$ = orig_path$
CASE WM_SYSKEYDOWN
SELECT _wParam
CASE 79
finit! = TRUE
@lbutdown(23,IDOK)
CASE 67,VK_F4
finit! = TRUE,xpath$ = orig_path$
@lbutdown(23,IDCANCEL)
ENDSELECT
CASE WM_COMMAND
SELECT _wParam
CASE 1002
SELECT HIWORD(_lParam)
CASE LBN_SELCHANGE
@get_sel(23)
_WIN$(DLGITEM(23,1006)) = TRIM$(MID$(temp$,50))
CASE LBN_DBLCLK
@get_sel(23)
temp$ = TRIM$(LEFT$(temp$,12))
IF temp$ = ".."
xpath$ = LEFT$(xpath$,LEN(xpath$) - 1)
i = RINSTR(xpath$,"\")
xpath$ = LEFT$(xpath$,i)
ELSE IF BTST(temp,4)
xpath$ = xpath$ + temp$ + "\"
ENDIF
@FillListBox(23)
ENDSELECT
CASE 1004
temp = SendMessage(DLGITEM(23,1004),CB_GETCURSEL,0,0)
IF temp = -1
BEEP
ELSE
temp$ = SPACE$(6)
~SendMessage(DLGITEM(23,1004),CB_GETLBTEXT,temp,V:temp$)
temp$ = ZTRIM$(temp$)
drv = ASC(UPPER$(MID$(temp$,3)))
xpath$ = CHR$(drv) + ":\"
@FillListBox(23)
ENDIF
CASE IDOK
finit! = TRUE
CASE IDCANCEL
finit! = TRUE,xpath$ = orig_path$
ENDSELECT
ENDSELECT
REPEAT
UNTIL !MOUSEK
LOOP UNTIL finit!
CLOSEDIALOG #23
SYSCOL COLOR_GRAYTEXT,ltgray&,0
xpath$ = xpath$ + CHR$(0)
CHAR{ptr} = xpath$
RETVAL 0
CATCH
@error_handler
CLOSEDIALOG #23
SYSCOL COLOR_GRAYTEXT,ltgray&,0
CHAR{ptr} = orig_path$
RETVAL 0
RETURN
/*
PROCEDURE make(ptr,b1,h1)
$EXPORT make
TRY
IF b1 < 340 THEN b1 = 340
xpath$ = CHAR{ptr}
subtit$ = "Create Folder"
stylex = WS_CHILD | WS_VISIBLE
SYSCOL COLOR_GRAYTEXT,blue&,0
DIALOG #21,(b1 - 340) \ 2,h1,340,308,subtit$,style0,65524,"courier new"
STATIC "Folder:",1000,4,28,52,16,WS_DISABLED
STATIC "",1001,60,26,260,18,WS_BORDER
temp = stylex | LBS_NOTIFY | LBS_HASSTRINGS
temp = temp | WS_TABSTOP | WS_BORDER | WS_VSCROLL
LISTBOX "",1002,4,48,232,236,temp
STATIC "Drives:",1003,244,54,60,16,WS_DISABLED
COMBOBOX "",1004,244,72,64,400,temp | CBS_DROPDOWNLIST
CTEXT "[Choose a Path for NEW folder]",1005,4,6,330,16
CONTROL "",IDOK,"BorBtn",dpbstyle,246,156,64,40
CONTROL "",IDCANCEL,"BorBtn",pbstyle,246,200,64,40
ENDDIALOG
SHOWDIALOG #21
DLG FILL 21,gray
@FillPathBox
~SetFocus(DLGITEM(21,1002))
CLR finit!,flg!
DO
PEEKEVENT
SELECT _Mess
CASE WM_RBUTTONDOWN
finit! = TRUE
_WIN$(DLGITEM(21,1006)) = ""
CASE WM_SYSKEYDOWN
SELECT _wParam
CASE 79
finit! = TRUE,flg! = TRUE
@lbutdown(21,IDOK)
CASE 67,VK_F4
finit! = TRUE
@lbutdown(21,IDCANCEL)
_WIN$(DLGITEM(21,1006)) = ""
ENDSELECT
CASE WM_COMMAND
SELECT _wParam
CASE 1002
SELECT HIWORD(_lParam)
CASE LBN_SELCHANGE
@bell
CASE LBN_DBLCLK
@get_sel(21)
temp$ = TRIM$(LEFT$(temp$,12))
IF temp$ = ".."
xpath$ = LEFT$(xpath$,LEN(xpath$) - 1)
i = RINSTR(xpath$,"\")
xpath$ = LEFT$(xpath$,i)
ELSE
xpath$ = xpath$ + temp$ + "\"
ENDIF
@FillPathBox
ENDSELECT
CASE 1004
SENDMESSAGE DLGITEM(21,1004),CB_GETCURSEL,0,0,lsel&
IF lsel& = -1
BEEP
ELSE
temp$ = SPACE$(6)
SENDMESSAGE DLGITEM(21,1004),CB_GETLBTEXT,lsel&,V:temp$
drv = ASC(UPPER$(MID$(temp$,3)))
xpath$ = CHR$(drv) + ":\"
@FillPathBox
ENDIF
CASE IDOK
finit! = TRUE,flg! = TRUE
CASE IDCANCEL
finit! = TRUE
ENDSELECT
ENDSELECT
REPEAT
UNTIL !MOUSEK
LOOP UNTIL finit!
CLOSEDIALOG #21
IF flg!
temp$ = subtit$ + CHR$(0)
@chek_Path_len(62)
info$ = "Location ... " + hold$ + CHR$(0)
prompt$ = "[Enter] only aborts: " + CHR$(0)
ln& = 260
strng$ = CHR$(0) + SPACE$(ln&)
sptr = V:strng$
@input_string(V:temp$,V:info$,V:prompt$,sptr,ln&,b1,h1)
strng$ = CHAR{sptr}
IF strng$ = ""
strng$ = "NO name entered!"
ELSE
@bell
xpath$ = xpath$ + strng$
MKDIR xpath$
@chek_Path_len(26)
strng$ = UPPER$(hold$) + cr$ + " created!"
ENDIF
ELSE
strng$ = "Nothing chosen or " + cr$ + subtit$ + " aborted!"
ENDIF
~^bwccMessageBox(WIN(0),strng$,subtit$,style1)
SYSCOL COLOR_GRAYTEXT,ltgray&,0
RETVAL 0
CATCH
CLOSEDIALOG #21
SYSCOL COLOR_GRAYTEXT,ltgray&,0
@error_handler
RETVAL 0
RETURN
'
PROCEDURE FillPathBox
LOCAL i
@chek_Path_len(36)
_WIN$(DLGITEM(21,1001)) = hold$
@get_paths_only
SENDMESSAGE DLGITEM(21,1002),LB_RESETCONTENT,0,0
SENDMESSAGE DLGITEM(21,1004),CB_RESETCONTENT,0,0
FOR i = 0 TO ctr - 1
temp$ = TRIM$(MID$(txt$(i),13))
~SendMessage(DLGITEM(21,1002),LB_ADDSTRING,0,temp$)
NEXT i
~SendMessage(DLGITEM(21,1004),CB_DIR,$4000,CHR$(0))
RETVAL 0
RETURN
'
PROCEDURE get_paths_only
LOCAL SearchHandle&,tempName$,temp
ERASE txt$(),txt()
DIM txt$(4096),txt(4096)
CLR ctr
dta = FGETDTA()
SearchHandle& = FSFIRST(xpath$ + "*.*",$3F)
WHILE !SearchHandle& AND ctr < 4096
tempName$ = {dta}.fs_Name$
temp = {dta}.fs_Attr
IF tempName$ <> "." AND BTST(temp,4)
IF tempName$ = ".."
xName$ = tempName$
ELSE
@W95GetName(tempName$)
ENDIF
txt(ctr) = temp
txt$(ctr) = SPACE$(272)
LSET txt$(ctr) = UPPER$(tempName$)
MID$(txt$(ctr),13) = UPPER$(xName$)
ctr ++
ENDIF
SearchHandle& = FSNEXT()
WEND
IF ctr THEN QSORT txt$() OFFSET 12,ctr,txt()
IF ctr = 4096
@bell
mess$ = "First 4096 entries only"
~^bwccMessageBox(WIN(0),mess$,subtit$,style1)
ENDIF
RETVAL 0
RETURN
/*
PROCEDURE copy(ptr,b1,h1)
$EXPORT copy
TRY
ERASE stxt$(),stxt(),dtxt$(),dtxt()
DIM stxt$(4096),stxt(4096),dtxt$(4096),dtxt(4096)
xpath$ = CHAR{ptr}
spath$ = xpath$,dpath$ = xpath$
filter$ = "*"
retry:
subtit$ = "Copy/Move File(s)"
@copy_setup(b1,h1)
CLR finit!,flg!,all_sel!
DO
PEEKEVENT
sel = _Mess
SELECT sel
CASE WM_RBUTTONDOWN
IF _hWnd = DLGITEM(27,1003)
all_sel! = !all_sel!
FOR i = 0 TO sctr - 1
~SendMessage(DLGITEM(27,1003),LB_SETSEL,all_sel!,i)
NEXT i
@bytes_marked
ELSE
finit! = TRUE
@lbutdown(27,IDCANCEL)
ENDIF
CASE WM_SYSKEYDOWN
SELECT _wParam
CASE 79
finit! = TRUE,flg! = TRUE
@lbutdown(27,IDOK)
CASE 67,VK_F4
finit! = TRUE
@lbutdown(27,IDCANCEL)
ENDSELECT
CASE WM_COMMAND
SELECT _wParam
CASE 1003
SELECT HIWORD(_lParam)
CASE LBN_SELCHANGE
@bell
@bytes_marked
CASE LBN_DBLCLK
SENDMESSAGE DLGITEM(27,1003),LB_GETCURSEL,0,0,lsel&
temp$ = TRIM$(LEFT$(stxt$(lsel&),12))
temp = stxt(lsel&)
IF temp$ = ".."
spath$ = LEFT$(spath$,LEN(spath$) - 1)
i = RINSTR(spath$,"\")
spath$ = LEFT$(spath$,i)
@FillSrcBox
CLR all_sel!
ELSE IF BTST(temp,4)
spath$ = spath$ + temp$ + "\"
@FillSrcBox
CLR all_sel!
ENDIF
@bytes_marked
ENDSELECT
CASE 1005
SENDMESSAGE DLGITEM(27,1005),CB_GETCURSEL,0,0,lsel&
IF lsel& = -1
BEEP
ELSE
temp$ = SPACE$(6)
SENDMESSAGE DLGITEM(27,1005),CB_GETLBTEXT,lsel&,V:temp$
drv = ASC(UPPER$(MID$(temp$,3)))
spath$ = CHR$(drv) + ":\"
@FillSrcBox
CLR all_sel!
@bytes_marked
ENDIF
CASE 1009
SELECT HIWORD(_lParam)
CASE LBN_SELCHANGE
@bell
CASE LBN_DBLCLK
SENDMESSAGE DLGITEM(27,1009),LB_GETCURSEL,0,0,lsel&
temp$ = TRIM$(LEFT$(dtxt$(lsel&),12))
temp = dtxt(lsel&)
IF temp$ = ".."
dpath$ = LEFT$(dpath$,LEN(dpath$) - 1)
i = RINSTR(dpath$,"\")
dpath$ = LEFT$(dpath$,i)
@FillDstnBox
ELSE
dpath$ = dpath$ + temp$ + "\"
@FillDstnBox
ENDIF
@bytes_free
ENDSELECT
CASE 1011
SENDMESSAGE DLGITEM(27,1011),CB_GETCURSEL,0,0,lsel&
IF lsel& = -1
BEEP
ELSE
temp$ = SPACE$(6)
SENDMESSAGE DLGITEM(27,1011),CB_GETLBTEXT,lsel&,V:temp$
drv = ASC(UPPER$(MID$(temp$,3)))
dpath$ = CHR$(drv) + ":\"
@FillDstnBox
@bytes_free
ENDIF
CASE IDOK
finit! = TRUE,flg! = TRUE
@lbutdown(27,IDOK)
CASE IDCANCEL
finit! = TRUE
@lbutdown(27,IDCANCEL)
ENDSELECT
ENDSELECT
REPEAT
UNTIL !MOUSEK
LOOP UNTIL finit!
check! = CHECK?(27,1012)
CLOSEDIALOG #27
IF flg!
IF !bmark
BEEP
mess$ = "NO files marked!"
~^bwccMessageBox(WIN(0),mess$,subtit$,style1)
GOTO abort_copy
ELSE IF spath$ = dpath$
BEEP
mess$ = "Source/Destination are the same!"
~^bwccMessageBox(WIN(0),mess$,subtit$,style1)
GOTO abort_copy
ELSE IF bmark > dfre
BEEP
mess$ = "More bytes marked than space available!"
j = ^bwccMessageBox(WIN(0),mess$,subtit$,style5)
IF j = IDRETRY
GOTO retry
ELSE IF j = IDABORT
GOTO abort_copy
ENDIF
ENDIF
DEFMOUSE 2
ERASE txt$(),txt()
DIM txt$(4096),txt(4096)
SWAP stxt$(),txt$()
SWAP stxt(),txt()
xpath$ = spath$,ctr = sctr
@create_Sarray
FOR i = 0 TO cnt - 1
dfre = DFREE(ASC(UPPER$(dpath$)) - 64)
ln& = LEN(spath$)
temp$ = MID$(stxt$(i),ln& + 1)
temp1$ = LOWER$(stxt$(i)),temp2$ = LOWER$(dpath$ + temp$)
IF BTST(stxt(i),4)
CLR dflg!
FOR k = 0 TO dctr - 1
filename$ = TRIM$(LEFT$(dtxt$(k),12))
IF LOWER$(temp$) = LOWER$(filename$) THEN dflg! = TRUE
EXIT IF dflg!
NEXT k
IF !dflg!
IF dfre > 1024
test$ = temp2$
IF LEN(test$) > 46 THEN test$ = LEFT$(test$,3) + "..." + RIGHT$(test$,40)
@status(b1,h1,9,"Creating..." + UPPER$(test$) + "!",ltgray)
MKDIR temp2$
ELSE
BEEP
@status(b1,h1,35,"NOT enough room to create " + temp$ + "!",ltred)
ENDIF
ENDIF
ELSE
IF EXIST(temp2$)
DEFMOUSE 0
@bell
mess$ = "File already exists! Back it up?"
j = ^bwccMessageBox(WIN(0),mess$,subtit$,style4)
DEFMOUSE 2
IF j = IDCANCEL
GOTO next_file2
ELSE IF j = IDYES
k = INSTR(temp$,".")
IF k
hold$ = LEFT$(temp$,k) + "bak"
ELSE
hold$ = temp$ + ".bak"
ENDIF
IF EXIST(dpath$ + hold$) THEN KILL dpath$ + hold$
RENAME temp2$ AS dpath$ + hold$
ENDIF
ENDIF
OPEN "i",#2,temp1$
flen = LOF(#2)
IF flen > dfre
DEFMOUSE 0
BEEP
@status(b1,h1,35,"NOT enough room to copy " + temp$ + "!",ltred)
GOTO abort_copy
ENDIF
j = flen,buf_size = 32000
test$ = UPPER$(temp1$)
IF LEN(test$) > 42 THEN test$ = LEFT$(test$,3) + "..." + RIGHT$(test$,36)
info$ = "From: " + test$ + "|"
test$ = UPPER$(temp2$)
IF LEN(test$) > 42 THEN test$ = LEFT$(test$,3) + "..." + RIGHT$(test$,36)
info$ = info$ + "To: " + test$ + CHR$(0)
@meter((b1 - 558) \ 2,h1,558,24,blue,ltblue,ltred,0,V:info$)
temp$ = SPACE$(buf_size)
OPEN "o",#3,temp2$
WHILE flen > buf_size
BGET #2,V:temp$,buf_size
BPUT #3,V:temp$,buf_size
SUB flen,buf_size
k = (j - flen) * 100 \ j
IF k < 100 THEN @meter((b1 - 558) \ 2,h1,558,24,blue,ltblue,ltred,k,V:info$)
WEND
IF flen
BGET #2,V:temp$,flen
BPUT #3,V:temp$,flen
ENDIF
@meter((b1 - 558) \ 2,h1,558,24,blue,ltblue,ltred,100,V:info$)
CLOSE
ENDIF
next_file2:
NEXT i
IF check!
FOR i = cnt - 1 DOWNTO 0
@check_attr
IF !xflg! THEN GOTO next_file3
IF BTST(stxt(i),4)
RMDIR stxt$(i)
ELSE
@reset_Attr
IF !xflg! THEN GOTO next_file3
KILL stxt$(i)
ENDIF
test$ = UPPER$(stxt$(i))
IF LEN(test$) > 42 THEN test$ = LEFT$(test$,3) + "..." + RIGHT$(test$,36)
@status(b1,h1,1,"Deleting..." + test$ + "!",ltred)
next_file3:
NEXT i
ENDIF
bell
@status(b1,h1,18,"All Done!",ltgray)
ELSE
BEEP
ENDIF
abort_copy:
DEFMOUSE 0
RETVAL 0
CATCH
CLOSEDIALOG #27
@error_handler
RETVAL 0
RETURN
'
PROCEDURE copy_setup(b2,h2)
IF b2 < 558 THEN b2 = 558
stylex = LBS_NOTIFY | LBS_HASSTRINGS | WS_TABSTOP | WS_BORDER | WS_VSCROLL
DIALOG #27,(b2 - 558) \ 2,h2,558,308,subtit$,style0,65524,"courier new"
CTEXT "SOURCE [all files]",1000,4,4,268,16
RTEXT "Folder:",1001,8,20,52,16
STATIC "",1002,60,20,212,16,WS_BORDER
LISTBOX "",1003,4,40,268,160,stylex | LBS_MULTIPLESEL | LBS_EXTENDEDSEL
RTEXT "Drives:",1004,4,236,52,16
COMBOBOX "",1005,60,232,72,308,stylex | CBS_DROPDOWNLIST
CTEXT "DESTINATION",1006,274,4,268,16
RTEXT "Folder:",1007,278,20,52,16
STATIC "",1008,330,20,212,16,WS_BORDER
LISTBOX "",1009,278,40,268,160,stylex
RTEXT "Drives:",1010,418,236,52,16
COMBOBOX "",1011,474,232,72,308,stylex | CBS_DROPDOWNLIST
BUTTON "MOVE [Delete Source Files]",1012,(179 ),216,200,16,BS_AUTOCHECKBOX | WS_TABSTOP
STATIC "",1013,4,194,268,20,SS_CENTER | WS_BORDER
STATIC "",1014,278,194,268,20,SS_CENTER | WS_BORDER
CONTROL "",IDOK,"BorBtn",pbstyle,179,236,64,40
CONTROL "",IDCANCEL,"BorBtn",pbstyle,315,236,64,40
ENDDIALOG
DLG FILL 27,ltblue
@FillSrcBox
@FillDstnBox
@bytes_marked
@bytes_free
SHOWDIALOG #27
~SetFocus(DLGITEM(27,1003))
RETVAL 0
RETURN
'
PROCEDURE FillSrcBox
LOCAL i
xpath$ = spath$
@set_dir(spath$)
@change_dir(1003)
SWAP txt$(),stxt$()
SWAP txt(),stxt()
sctr = ctr
RETVAL 0
RETURN
'
PROCEDURE FillDstnBox
LOCAL i
xpath$ = dpath$
@set_dir(dpath$)
@change_dir(1009)
SWAP txt$(),dtxt$()
SWAP txt(),dtxt()
dctr = ctr
RETVAL 0
RETURN
'
PROCEDURE change_dir(item&)
@chek_Path_len(30)
_WIN$(DLGITEM(27,item& - 1)) = hold$
@get_dir
SENDMESSAGE DLGITEM(27,item&),LB_RESETCONTENT,0,0
SENDMESSAGE DLGITEM(27,item& + 2),CB_RESETCONTENT,0,0
FOR i = 0 TO ctr - 1
temp$ = MID$(txt$(i),50,24) + " " + MID$(txt$(i),13,9)
~SendMessage(DLGITEM(27,item&),LB_ADDSTRING,0,temp$)
NEXT i
~SendMessage(DLGITEM(27,item& + 2),CB_DIR,$4000,CHR$(0))
IF item& = 1003 THEN ~SendMessage(DLGITEM(27,item&),LB_SETCURSEL,0,0)
RETVAL 0
RETURN
'
PROCEDURE bytes_free
LOCAL temp$="Free: "
dfre = DFREE(ASC(UPPER$(dpath$)) - 64)
@change_it(dfre)
temp$ = temp$ + hold$ + " [" + STR$(dfre) + " bytes]" + CHR$(0)
~SetWindowText(DLGITEM(27,1014),V:temp$)
RETVAL 0
RETURN
'
PROCEDURE bytes_marked
LOCAL i,temp,temp$="Marked: "
CLR bmark
ERASE mark!()
DIM mark!(sctr)
FOR i = 0 TO sctr - 1
status! = SendMessage(DLGITEM(27,1003),LB_GETSEL,i,0)
mark!(i) = status!
IF status!
temp = VAL(MID$(stxt$(i),13,9))
IF MID$(stxt$(i),17,5) = "" THEN temp = 1024
ADD bmark,temp
ENDIF
NEXT i
@change_it(bmark)
temp$ = temp$ + hold$ + " [" + STR$(bmark) + " bytes]" + CHR$(0)
~SetWindowText(DLGITEM(27,1013),V:temp$)
RETVAL 0
RETURN
'
PROCEDURE change_it(temp)
temp = temp \ 1024
IF temp > 3000
temp = temp \ 1024
hold$ = STR$(temp) + "M"
ELSE
hold$ = STR$(temp) + "K"
ENDIF
RETURN
/*