/* 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 /*