seem to be having trouble editing my last post!
here's slightly more tested code
here's slightly more tested code
Code:
#PBFORMS CREATED V1.51 #COMPILE EXE #DIM ALL #PBFORMS BEGIN INCLUDES #IF NOT %DEF(%WINAPI) #INCLUDE "WIN32API.INC" #ENDIF #PBFORMS END INCLUDES #PBFORMS BEGIN CONSTANTS %IDD_DIALOG1 = 101 %IDC_LABEL1 = 1001 %IDC_LABEL2 = 1002 %IDC_LISTBOX1 = 1003 %IDC_CURRFILE_TB = 1005 %IDC_lastfile_tb = 1004 %IDC_BUTTON1 = 1007 %IDC_LABEL4 = 1008 %IDC_MINCHUNK_TB = 1009 %IDC_F1SIZE_TB = 1010 %IDC_LABEL3 = 1011 %IDC_F2SIZE_TB = 1012 %IDC_LABEL5 = 1013 #PBFORMS END CONSTANTS #PBFORMS DECLARATIONS GLOBAL gsLast, gsCurr AS STRING GLOBAL ghDlg AS DWORD GLOBAL gminchunksize AS LONG GLOBAL gstack() AS LONG GLOBAL gstackptr AS LONG '----------------------------------------------------------------------------------- SUB pop ( BYREF l AS LONG) IF gstackptr -1 < 0 THEN l = 0 ELSE DECR gstackptr l = gstack(gstackptr) END IF END SUB '----------------------------------------------------------------------------------- SUB push ( BYVAL l AS LONG) gstack(gstackptr) = l INCR gstackptr END SUB '----------------------------------------------------------------------------------- ' try to find chunks of gsCurr delimited by llow & lhigh, in gsLast FUNCTION compare ( lhigh AS LONG ) AS LONG LOCAL i, n AS LONG LOCAL s AS STRING n = lhigh/gminchunksize REDIM glptrs ( 0 TO n -1, 2) AS LONG FOR i = 0 TO n-1 glptrs(i, 0) = 1 + (i * gminchunksize) ' pos in current file s = MID$(gsCurr,i*gminchunksize +1 , gminchunksize ) glptrs(i, 1) = INSTR(gsLast, s) ' pos in last known file glptrs(i, 2) = gminchunksize ' chunksize IF glptrs(i, 1) <> 0 THEN LISTBOX ADD ghDlg, %IDC_LISTBOX1, "curr: " + STR$(glptrs(i, 0)) + " last: " + STR$(glptrs(i, 1)) + " len: " + STR$(glptrs(i, 2)) END IF NEXT END FUNCTION '----------------------------------------------------------------------------------- CALLBACK FUNCTION ShowDIALOG1Proc() STATIC sLastFile, sCurrFile AS STRING LOCAL s AS STRING LOCAL l AS LONG SELECT CASE AS LONG CBMSG CASE %WM_INITDIALOG ghDlg = CBHNDL DIM gstack(0 TO 31) AS GLOBAL LONG CASE %WM_COMMAND SELECT CASE AS LONG CBCTL CASE %IDC_BUTTON1 IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN LISTBOX RESET CBHNDL, %IDC_LISTBOX1 CONTROL GET TEXT CBHNDL, %IDC_LASTFILE_TB TO sLastFile CONTROL GET TEXT CBHNDL, %IDC_CURRFILE_TB TO sCurrFile CONTROL GET TEXT CBHNDL, %IDC_MINCHUNK_TB TO s gMinChunksize = VAL(TRIM$(s)) OPEN sCurrFile FOR BINARY AS #1 l = LOF(1) gsCurr = STRING$(l,0) CONTROL SET TEXT CBHNDL, %IDC_F1SIZE_TB, STR$(LOF(1)) GET #1, 1, gsCurr CLOSE #1 OPEN sLastfile FOR BINARY AS #1 gsLast = STRING$(LOF(1),0) CONTROL SET TEXT CBHNDL, %IDC_F2SIZE_TB, STR$(l) GET #1, 1, gsLast CLOSE #1 compare ( l) END IF END SELECT END SELECT END FUNCTION '---------------------------------------------------------------------- FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG LOCAL lRslt AS LONG #PBFORMS BEGIN DIALOG %IDD_DIALOG1->-> LOCAL hDlg AS DWORD DIALOG NEW hParent, "file differences by Sancho Panza's ***", 33, 81, 528, 121, %WS_POPUP OR %WS_BORDER OR %WS_DLGFRAME OR _ %WS_SYSMENU OR %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR %DS_3DLOOK OR %DS_NOFAILCREATE OR %DS_SETFONT, _ %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg CONTROL ADD LABEL, hDlg, %IDC_LABEL1, "name of last known file", 5, 5, 85, 15, %WS_CHILD OR %WS_VISIBLE OR %SS_LEFT OR _ %SS_CENTERIMAGE, %WS_EX_LEFT OR %WS_EX_LTRREADING CONTROL ADD LABEL, hDlg, %IDC_LABEL2, "name of current file", 5, 40, 85, 15, %WS_CHILD OR %WS_VISIBLE OR %SS_LEFT OR _ %SS_CENTERIMAGE, %WS_EX_LEFT OR %WS_EX_LTRREADING CONTROL ADD LISTBOX, hDlg, %IDC_LISTBOX1, , 180, 15, 340, 100, %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %WS_HSCROLL OR _ %WS_VSCROLL OR %LBS_HASSTRINGS, %WS_EX_CLIENTEDGE OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR CONTROL ADD TEXTBOX, hDlg, %IDC_lastfile_tb, "1.txt", 5, 20, 60, 15 CONTROL ADD TEXTBOX, hDlg, %IDC_CURRFILE_TB, "2.txt", 5, 55, 60, 15 CONTROL ADD TEXTBOX, hDlg, %IDC_MINCHUNK_TB, "64", 5, 90, 25, 15, %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %ES_LEFT OR _ %ES_AUTOHSCROLL OR %ES_NUMBER, %WS_EX_CLIENTEDGE OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR CONTROL ADD LABEL, hDlg, %IDC_LABEL4, "minimum chunk size", 5, 75, 85, 15 CONTROL ADD BUTTON, hDlg, %IDC_BUTTON1, "start", 125, 105, 45, 15 CONTROL ADD TEXTBOX, hDlg, %IDC_F1SIZE_TB, "", 70, 20, 80, 15, %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %ES_LEFT OR _ %ES_AUTOHSCROLL OR %ES_READONLY, %WS_EX_CLIENTEDGE OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR CONTROL ADD LABEL, hDlg, %IDC_LABEL3, "bytes", 150, 20, 20, 15, %WS_CHILD OR %WS_VISIBLE OR %SS_LEFT OR %SS_CENTERIMAGE, _ %WS_EX_LEFT OR %WS_EX_LTRREADING CONTROL ADD TEXTBOX, hDlg, %IDC_F2SIZE_TB, "", 70, 55, 80, 15, %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %ES_LEFT OR _ %ES_AUTOHSCROLL OR %ES_READONLY, %WS_EX_CLIENTEDGE OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR CONTROL ADD LABEL, hDlg, %IDC_LABEL5, "bytes", 150, 55, 20, 15, %WS_CHILD OR %WS_VISIBLE OR %SS_LEFT OR %SS_CENTERIMAGE, _ %WS_EX_LEFT OR %WS_EX_LTRREADING #PBFORMS END DIALOG DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt #PBFORMS BEGIN CLEANUP %IDD_DIALOG1 #PBFORMS END CLEANUP FUNCTION = lRslt END FUNCTION '================================================================================================================================== FUNCTION PBMAIN() ShowDIALOG1 %HWND_DESKTOP END FUNCTION
Comment