Manipulate screen or file data
Keywords: Manipulate screen or file data
;***************************************************************************************
; Program Title: ScreenFileUtility *
; *
; Author Steffen Fraas, sfraas@zoo.co.uk *
; *
; Date: 30/12/2001 *
; *
; Synopsis: Manipulate screen or file data *
; *
; Functions: See panel. *
; *
; CALLed routines/modules Screenfileutility.wbt *
; *
; Input/Output files: *
; *
; Documentation File: *
; *
; Notes: Incorporates FileMath functions *
; *
; Installation Save this file in WinBatch.exe's directory *
; *
; For screen data manipulation add next two lines into wspopup.mnu *
; *
; ScreenFileUtilities \ {F7} ; must start in column 1 *
; Call(StrCat(Dirhome(),"Screenfileutility.wbt"),"") ; must start in column 5 *
; *
; To process a range of lines in WinBatch Studio, first highlight lines before *
; invoking utility. Default is all lines. *
; *
; *
; For file data manipulation add a shortcut to desktop pointing at this file *
; *
; *
;***************************************************************************************
;New Utility
vers="Utility v1.0"
gosub initudfs
gosub saveinput
gosub request
gosub processrequest
exit
;--------------------------------------------------------------------------------------------------
:request ;{{{:request}}}
Intcontrol(28,1,0,0,0) ; Fixed font.
Intcontrol(63,100,10,890,990) ; Stretch panel.
if batchu then x=AskItemList(StrCat(vers," - ","Batch Utility - UDF loaded count=",Intcontrol(77,90,0,0,0)),batch,@Tab,@Unsorted,@Single) ; Get function name selected.
else x=AskItemList(StrCat(vers," - ","Screen Utility - UDF loaded count=",Intcontrol(77,90,0,0,0)),screen,@Tab,@Unsorted,@Single) ; Get function name selected.
sf=StrTrim(StrLower(StrSub(x,1,2))) ; Get function code.
if sf=="x" || x=="" || cancel then return ; Exit/cancel - same thing here.
if StrSub(sf,1,1)==";" then goto request
function=ItemExtract(sf,functs,@Tab)
if StrTrim(function)=="" then Message("Unimplemented function",x)
then return
if !ItemLocate(function,Intcontrol(77,103,0,0,0),@Tab) then gosub %function%
file3=%function%(batchu,file1)
return
;--------------------------------------------------------------------------------------------------
:processrequest ;{{{:processrequest}}}
if file3<>""
if FileSize(file3)<>0
if !batchu
buf=BinaryAlloc(FileSize(file3))
BinaryRead(buf,file3)
if !crlf && BinaryPeekStr(buf,FileSize(file3)-2,2)==@CrLf then BinaryEodSet(buf,BinaryEodGet(buf)-2)
ClipPut("")
BinaryClipPut(buf,1)
wPaste()
BinaryFree(buf)
else
Run(StrCat(DirHome(),"Browser.exe"),FileNameShort(file3))
endif
else
Run(StrCat(DirHome(),"Browser.exe"),FileNameShort(file3))
endif
endif
if !batchu then wClearSel()
drop(batch,batchu,buf,cancel,crlf,file1,file2,file3,function,functs,logudf,screen,sf,size)
drop(udflist,udfs,vers,x,xx)
return
;--------------------------------------------------------------------------------------------------
:saveinput ;{{{:saveinput}}}
if batchu
file1=AskFileName("Select File",FilePath(Intcontrol(1004,0,0,0,0)),"All Files|*.*","*.*",1)
else
file1=FileNameLong(FileCreateTemp("UF1"))
batchu=0
if !wGetSelState() then wSelectAll()
wCopy()
size=BinaryClipGet(0,1)
buf=BinaryAlloc(size)
BinaryClipGet(buf,1)
if size<3 then crlf=0
if size>2 then if BinaryPeekStr(buf,size-2,2)<>@CrLf then crlf=0
BinaryWrite(buf,file1)
BinaryFree(buf)
endif
return
;--------------------------------------------------------------------------------------------------
:initudfs ;{{{:initudfs}}}
;@fmADD=1
;@fmSUBTRACT=2
;@fmOR=3
;@fmXOR=4
;@fmAND=5
file1=""
file2=""
file3=""
Intcontrol(72,2,0,0,0) ; Cancel and return.
cancel=0 ; Reset.
crlf=1
batchu=0
if RtStatus()==1 || RtStatus()==0 then batchu=1 ; Interpreter or .exe.
xx=0
functs=""
if batchu
xx=xx+1
functs=StrCat(functs,"Datainformation",@Tab)
batch=StrCat(StrFix(xx," ",4),"File - data information",@Tab)
xx=xx+1
functs=StrCat(functs,"Charactercount",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Character Count",@Tab)
batch=StrCat(batch,";****************************** FileMath functions ******************************",@Tab)
xx=xx+1
functs=StrCat(functs,"Sortascending",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Sort (Ascending)",@Tab)
xx=xx+1
functs=StrCat(functs,"Sortdescending",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Sort (Descending)",@Tab)
xx=xx+1
functs=StrCat(functs,"ColumnSort",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Column Sort ",@Tab)
xx=xx+1
functs=StrCat(functs,"Removeduplicatelines",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Remove Duplicate lines",@Tab)
xx=xx+1
functs=StrCat(functs,"Getduplicatelines",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Get Duplicate lines",@Tab)
xx=xx+1
functs=StrCat(functs,"Addlines",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - ADD (Makes a combination of both input files. Not sorted. Dups may exist)",@Tab)
xx=xx+1
functs=StrCat(functs,"Subtractlines",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - SUBTRACT (Subtracts line in second file from the first file. Sorted. Dups may exist)",@Tab)
xx=xx+1
functs=StrCat(functs,"Orlines",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - OR (Returns lines found in both files. Sorted. No dups)",@Tab)
xx=xx+1
functs=StrCat(functs,"Xorlines",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - XOR (Returns lines not found in both file)",@Tab)
xx=xx+1
functs=StrCat(functs,"Andlines",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - AND (Returns lines only found in both files)",@Tab)
batch=StrCat(batch,";****************************** Column manipulation functions ******************************",@Tab)
xx=xx+1
functs=StrCat(functs,"ShiftColumns",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Shift columns",@Tab)
xx=xx+1
functs=StrCat(functs,"DeleteColumns",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Delete columns",@Tab)
xx=xx+1
functs=StrCat(functs,"SaveColumns",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Save columns",@Tab)
xx=xx+1
functs=StrCat(functs,"InsertColumns",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Insert columns",@Tab)
xx=xx+1
functs=StrCat(functs,"InsertData",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Insert data",@Tab)
batch=StrCat(batch,";****************************** Line manipulation functions ******************************",@Tab)
xx=xx+1
functs=StrCat(functs,"Dropblanklines",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Drop blank lines",@Tab)
xx=xx+1
functs=StrCat(functs,"WrapLines",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Wrap lines",@Tab)
xx=xx+1
functs=StrCat(functs,"CentreLines",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Centre/Align lines",@Tab)
xx=xx+1
functs=StrCat(functs,"Appenddata",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Append data to lines",@Tab)
xx=xx+1
functs=StrCat(functs,"Prependdata",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Prepend data to lines",@Tab)
batch=StrCat(batch,";****************************** Hex manipulation functions *******************************",@Tab)
xx=xx+1
functs=StrCat(functs,"HextoHex",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Hex for Hex replacement",@Tab)
xx=xx+1
functs=StrCat(functs,"HextoString",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Hex for String replacement",@Tab)
xx=xx+1
functs=StrCat(functs,"StringtoHex",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - String for Hex replacement",@Tab)
xx=xx+1
functs=StrCat(functs,"MultipleHex",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Multiple Hex deletions",@Tab)
xx=xx+1
functs=StrCat(functs,"DisplayHex",@Tab)
batch=StrCat(batch,StrFix(xx," ",4),"File - Display Hex",@Tab)
batch=StrCat(batch,";****************************** End of function list ******************************",@Tab)
batch=StrCat(batch,@Tab,@Tab,"X Exit")
else
xx=xx+1
functs=StrCat(functs,"Datainformation",@Tab)
screen=StrCat(StrFix(xx," ",4),"Screen - data information",@Tab)
xx=xx+1
functs=StrCat(functs,"Charactercount",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Character Count",@Tab)
screen=StrCat(screen,";****************************** FileMath functions ******************************",@Tab)
xx=xx+1
functs=StrCat(functs,"Sortascending",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Sort (Ascending)",@Tab)
xx=xx+1
functs=StrCat(functs,"Sortdescending",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Sort (Descending)",@Tab)
xx=xx+1
functs=StrCat(functs,"ColumnSort",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Column Sort ",@Tab)
xx=xx+1
functs=StrCat(functs,"Removeduplicatelines",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Remove Duplicate lines",@Tab)
xx=xx+1
functs=StrCat(functs,"Getduplicatelines",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Get Duplicate lines",@Tab)
xx=xx+1
functs=StrCat(functs,"Addlines",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - ADD (Makes a combination of both input files. Not sorted. Dups may exist)",@Tab)
xx=xx+1
functs=StrCat(functs,"Subtractlines",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - SUBTRACT (Subtracts line in second file from the first file. Sorted. Dups may exist)",@Tab)
xx=xx+1
functs=StrCat(functs,"Orlines",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - OR (Returns lines found in both files. Sorted. No dups)",@Tab)
xx=xx+1
functs=StrCat(functs,"Xorlines",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - XOR (Returns lines not found in both file)",@Tab)
xx=xx+1
functs=StrCat(functs,"Andlines",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - AND (Returns lines only found in both files)",@Tab)
screen=StrCat(screen,";****************************** Column manipulation functions ******************************",@Tab)
xx=xx+1
functs=StrCat(functs,"ShiftColumns",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Shift columns",@Tab)
xx=xx+1
functs=StrCat(functs,"DeleteColumns",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Delete columns",@Tab)
xx=xx+1
functs=StrCat(functs,"SaveColumns",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Save columns",@Tab)
xx=xx+1
functs=StrCat(functs,"InsertColumns",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Insert columns",@Tab)
xx=xx+1
functs=StrCat(functs,"InsertData",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Insert Data",@Tab)
screen=StrCat(screen,";****************************** Line manipulation functions ******************************",@Tab)
xx=xx+1
functs=StrCat(functs,"DropBlankLines",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Drop blank lines",@Tab)
xx=xx+1
functs=StrCat(functs,"WrapLines",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Wrap lines",@Tab)
xx=xx+1
functs=StrCat(functs,"CentreLines",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Centre/Align lines",@Tab)
xx=xx+1
functs=StrCat(functs,"Appenddata",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Append data to lines",@Tab)
xx=xx+1
functs=StrCat(functs,"Prependdata",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Prepend data to lines",@Tab)
screen=StrCat(screen,";****************************** Hex manipulation functions *******************************",@Tab)
xx=xx+1
functs=StrCat(functs,"HextoHex",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Hex for Hex replacement",@Tab)
xx=xx+1
functs=StrCat(functs,"HextoString",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Hex for String replacement",@Tab)
xx=xx+1
functs=StrCat(functs,"StringtoHex",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - String for Hex replacement",@Tab)
xx=xx+1
functs=StrCat(functs,"MultipleHex",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Mulitple Hex deletions",@Tab)
xx=xx+1
functs=StrCat(functs,"DisplayHex",@Tab)
screen=StrCat(screen,StrFix(xx," ",4),"Screen - Display Hex",@Tab)
screen=StrCat(screen,";****************************** End of function list ******************************",@Tab)
screen=StrCat(screen,@Tab,@Tab,"X Exit")
endif
functs=StrLower(functs)
udfs=StrCat(" ",StrReplace(Intcontrol(77,103,0,0,0),@Tab," ")," ")
udflist="fmfilemath fmgetdups fmgetfileobject fmremovedups fmsortfile fmsortfilereverse fmverifyfileobject fmcolumnsort"
for x=1 to ItemCount(udflist," ")
if ItemLocate(ItemExtract(x,udflist," "),udfs," ") then continue
logudf=ItemExtract(x,udflist," ")
gosub %logudf%
next
return
;------------------------------------------------------------------------------------------------------------
:datainformation ;{{{:datainformation}}}
#definefunction Datainformation(batchu,file1) ;{{{#definefunction Datainformation}}}
if !batchu then wClearSel()
sub1max1=0 ; Length of longest line.
sub1max1l=0 ; Line # of longest line.
sub1tbar=0 ; No of lines in file.
sub1bx1=0 ; No of blanks.
sub1tsf=0 ; Current line no.
sub1f=FileOpen(file1,"Read")
while @True
sub1line=FileRead(sub1f)
if sub1line=="*EOF*" then break
sub1tsf=sub1tsf+1
if sub1max1maxsize || ec<1 || ec>maxsize || ec5), "fmFileMath Error","param4 is not 1 2 3 4 or 5")
;Hack to optimize ADD(1)
if optype==1
FileCopy(filea[0],fileout[0],0)
FileAppend(fileb[0], fileout[0])
fileout[1]=FileSize(fileout[0])
fileout[2]=filea[2]+fileb[2] ; Recordcount.
fileout[3]=Max(filea[3],fileb[3]) ; Maxsize.
fileout[5]=0 ; Sorted=false.
fileout[6]=0 ; 'deduped=false.
return
endif
;Hack to optimize "OR"
if optype==3 ; OR.
tempout=fmGetFileObject(FileNameLong(FileCreateTemp("~fm")),0)
fmFileMath(filea,fileb,tempout,1)
fmRemoveDups(tempout,fileout)
FileDelete(tempout[0])
;sorted and deduped status set by fmRemoveDups routine
return
endif
switch optype
; case 1 ; add ; ADD optimized above
case 2 ; Subtract.
tempa=fmGetFileObject(FileNameLong(FileCreateTemp("~fm")),0)
tempb=fmGetFileObject(FileNameLong(FileCreateTemp("~fm")),0)
fmSortFile(filea,tempa)
fmSortFile(fileb,tempb)
fileout[5]=1 ; Sorted.
fileout[6]=0 ; Deduped.
break
; case 3 ; OR ; OR optimized above
case 4 ; XOR.
case 5 ; AND.
tempa=fmGetFileObject(FileNameLong(FileCreateTemp("~fm")),0)
tempb=fmGetFileObject(FileNameLong(FileCreateTemp("~fm")),0)
fmRemoveDups(filea,tempa)
fmRemoveDups(fileb,tempb)
fileout[5]=1 ; Sorted.
fileout[6]=1 ; Deduped.
endswitch
handlea=FileOpen(tempa[0],"READ")
handleb=FileOpen(tempb[0],"READ")
out=FileOpen(fileout[0],"WRITE")
;state machine 0 need both lines
; 1 compare 2 lines
reccount=0
maxsize=0
state=optype
while 1
switch state
; case 1 ;ADD ; ADD replaced by optimization above
;
case 2 ; SUBTRACT.
linea=StrTrim(FileRead(handlea))
lineb=StrTrim(FileRead(handleb))
:xsubtract ;{{{:xsubtract}}}
if linea=="*EOF*"
state = 99 ; All done.
continue
endif
if lineb=="*EOF*"
FileWrite(out, linea)
reccount=reccount+1
maxsize=Max(maxsize,StrLen(linea))
state=98 ; No more minus lines.
continue
endif
test=StrCmp(linea,lineb)
if test==0 ; Lines match. toast both of them.
linea=StrTrim(FileRead(handlea))
lineb=StrTrim(FileRead(handleb))
else
if test > 0 ; LineA > lineB Need new lineB.
lineb=FileRead(handleb)
else ; LineA < lineB.
FileWrite(out,linea)
reccount=reccount+1
maxsize=Max(maxsize,StrLen(linea))
linea=FileRead(handlea)
state=optype
endif
endif
goto xsubtract ; NB No structure levels being crossed. DON'T USE GOTOs!!!!!!
break
; case 3 ; OR ; OR replace by optimization aboce
case 4 ; XOR.
linea=StrTrim(FileRead(handlea))
lineb=StrTrim(FileRead(handleb))
:xxor ;{{{:xxor}}}
if linea=="*EOF*"
if lineb!="*EOF*"
FileWrite(out,lineb)
reccount=reccount+1
maxsize=Max(maxsize,StrLen(lineb))
state = 97 ; Dump rest of B.
continue
endif
state=99
continue
endif
if lineb=="*EOF*"
FileWrite(out,linea)
reccount=reccount+1
maxsize=Max(maxsize,StrLen(linea))
state=98 ; Dump rest of A.
continue
endif
test=StrCmp(linea,lineb)
if test==0 ; Lines match. toast both of them.
linea=StrTrim(FileRead(handlea))
lineb=StrTrim(FileRead(handleb))
else
if test > 0 ; LineA > lineB Need new lineB.
FileWrite(out,lineb)
reccount=reccount+1
maxsize=Max(maxsize,StrLen(lineb))
lineb=FileRead(handleb)
else ; LineA < lineB.
FileWrite(out,linea)
reccount=reccount+1
maxsize=Max(maxsize,StrLen(linea))
linea=FileRead(handlea)
endif
endif
goto xxor ; NB No structure levels being crossed. DON'T USE GOTOs!!!!!!
break
case 5 ; AND.
linea=StrTrim(FileRead(handlea))
lineb=StrTrim(FileRead(handleb))
:xand ;{{{:xand}}}
if linea=="*EOF*"
state = 99
continue
endif
if lineb=="*EOF*"
state = 99
continue
endif
test=StrCmp(linea,lineb)
if test==0 ; Lines match. the only case where we write a line.
FileWrite(out,linea)
reccount=reccount+1
maxsize=Max(maxsize,StrLen(linea))
linea=StrTrim(FileRead(handlea))
lineb=StrTrim(FileRead(handleb))
else
if test > 0 ; LineA > lineB Need new lineB.
lineb=FileRead(handleb)
else ; LineA < lineB.
linea=FileRead(handlea)
endif
endif
goto xand ; NB No structure levels being crossed. DON'T USE GOTOs!!!!!!
break
case 97 ; Dump rest of B to the outfile.
while 1
lineb=FileRead(handleb)
if lineb=="*EOF*" then break
FileWrite(out,lineb)
reccount=reccount+1
maxsize=Max(maxsize,StrLen(lineb))
endwhile
state=99
break
case 98 ; Dump rest of A to the outfile.
while 1
linea=FileRead(handlea)
if linea=="*EOF*" then break
FileWrite(out,linea)
reccount=reccount+1
maxsize=Max(maxsize,StrLen(linea))
endwhile
state=99
break
endswitch
if state==99 then break
endwhile
FileClose(handlea)
FileClose(handleb)
FileClose(out)
if optype!=1 ; Not for adds.
FileDelete(tempa[0])
FileDelete(tempb[0])
endif
fileout[1]=FileSize(fileout[0])
fileout[2]=reccount
fileout[3]=maxsize
return
#endfunction
return
;---------------------------------------------------------------------------------------------------
:shiftcolumns ;{{{:shiftcolumns}}}
#definefunction Shiftcolumns(batchu,file1) ;{{{#definefunction Shiftcolumns}}}
sc9=1
cm9=5
Intcontrol(72,2,0,0,0) ; Cancel and return.
cancel=0 ; Reset.
while @True
shiftcformat=`WWWDLGED,5.0`
shiftccaption=`Shift Columns`
shiftcx=450
shiftcy=10
shiftcwidth=100
shiftcheight=78
shiftcnumcontrols=8
shiftc01=`2,4,160,DEFAULT,STATICTEXT,DEFAULT,"Shift column x +/- y positions"`
shiftc02=`2,16,64,DEFAULT,STATICTEXT,DEFAULT,""`
shiftc03=`4,33,30,DEFAULT,STATICTEXT,DEFAULT,"Column"`
shiftc04=`32,30,15,DEFAULT,EDITBOX,sc9,""`
shiftc05=`50,30,15,DEFAULT,EDITBOX,cm9,""`
shiftc06=`070,32,36,DEFAULT,STATICTEXT,DEFAULT,"positions"`
shiftc07=`08,58,36,DEFAULT,PUSHBUTTON,DEFAULT,"&Move",1`
shiftc08=`53,58,36,DEFAULT,PUSHBUTTON,DEFAULT,"&Exit",2`
shcbp=Dialog("Shiftc")
if cancel || shcbp==2 then break ; Cancel requested.
if !IsNumber(sc9) || !IsNumber(cm9) || sc9<1 then continue
break
endwhile
if cancel || shcbp==2 then return "" ; Cancel requested.
f1=FileOpen(file1,"Read")
file3=FileNameLong(FileCreateTemp("UF3"))
f3=FileOpen(file3,"Write")
while @True
line=FileRead(f1)
if line=="*EOF*" then break
dl9=StrLen(line) ; Handy constant.
if cm9<0 then goto left9 ; Left cm5.
if sc9==0 then line=StrCat(StrFill(" ",cm9),line) ; Shift all rightwards.
else line=StrCat(StrSub(line,1,sc9-1),StrFill(" ",cm9),StrSub(line,sc9,-1)) ; Part old line, filler, rest.
goto writeout ; Write out line.
:left9 ;{{{:left9}}}
if dl9 < sc9 then line="" ; Line long enough, no, column disappears.
then goto writeout
if sc9==0 then line=StrSub(line,Abs(cm9)+1,-1) ; Simple left move ? Start at 'cm5' rightwards.
then goto writeout
nc9=sc9-Abs(cm9) ; Work out old col 1 to 'cm9'.
if nc9>0 then line=StrCat(StrSub(line,1,nc9-1),StrSub(line,sc9,-1)) ; Old part, chop, remainder.
else line=StrSub(line,Abs(cm9)+1,-1) ; From 'cm9' rightwards.
:writeout ;{{{:writeout}}}
FileWrite(f3,line)
endwhile
FileClose(f1)
FileClose(f3)
return file3
:cancel ;{{{:cancel}}}
cancel=1
return
#endfunction
return
;---------------------------------------------------------------------------------------------------
:deletecolumns ;{{{:deletecolumns}}}
#definefunction Deletecolumns(batchu,file1) ;{{{#definefunction Deletecolumns}}}
Intcontrol(72,2,0,0,0) ; Cancel and return.
cancel=0 ; Reset.
sc13=1
ec13=5
while @True
deleteformat=`WWWDLGED,5.0`
deletecaption=`Delete Columns`
deletex=300
deletey=50
deletewidth=85
deleteheight=78
deletenumcontrols=8
delete01=`2,4,100,DEFAULT,STATICTEXT,DEFAULT,"Delete columns:"`
delete02=`2,16,100,DEFAULT,STATICTEXT,DEFAULT,"Enter start and end column"`
delete03=`4,33,30,DEFAULT,STATICTEXT,DEFAULT,"Column x,y"`
delete04=`32,30,15,DEFAULT,EDITBOX,Sc13,""`
delete05=`50,30,15,DEFAULT,EDITBOX,Ec13,""`
delete06=`01,58,20,DEFAULT,PUSHBUTTON,DEFAULT,"&Delete",1`
delete07=`25,58,30,DEFAULT,PUSHBUTTON,DEFAULT,"&Save&&Del",3`
delete08=`60,58,20,DEFAULT,PUSHBUTTON,DEFAULT,"&Exit",2`
dbp=Dialog("Delete")
if cancel || dbp==2 then break ; Cancel requested.
if !IsNumber(sc13) || !IsNumber(ec13) || sc13<1 || ec13"" then FileClose(f4)
then Display(2,"Listing of DELETED columns",file4)
return file3
:cancel ;{{{:cancel}}}
cancel=1
return
#endfunction
return
;---------------------------------------------------------------------------------------------------
:savecolumns ;{{{:savecolumns}}}
#definefunction Savecolumns(batchu,file1) ;{{{#definefunction Savecolumns}}}
Intcontrol(72,2,0,0,0) ; Cancel and return.
cancel=0 ; Reset.
sc13=1
ec13=5
while @True
saveformat=`WWWDLGED,5.0`
savecaption=`Save Columns`
savex=300
savey=50
savewidth=85
saveheight=78
savenumcontrols=7
save01=`2,4,100,DEFAULT,STATICTEXT,DEFAULT,"Save columns:"`
save02=`2,16,100,DEFAULT,STATICTEXT,DEFAULT,"Enter start and end column"`
save03=`4,33,30,DEFAULT,STATICTEXT,DEFAULT,"Column x,y"`
save04=`32,30,15,DEFAULT,EDITBOX,Sc13,""`
save05=`50,30,15,DEFAULT,EDITBOX,Ec13,""`
save06=`01,58,20,DEFAULT,PUSHBUTTON,DEFAULT,"&Save",1`
save07=`60,58,20,DEFAULT,PUSHBUTTON,DEFAULT,"&Exit",2`
dbp=Dialog("Save")
if cancel || dbp==2 then break ; Cancel requested.
if !IsNumber(sc13) || !IsNumber(ec13) || sc13<1 || ec13"*EOF*" then gosub write
else line4eof=1
else line4=""
endif
FileWrite(f3,line)
endwhile
FileClose(f1)
FileClose(f4)
FileClose(f3)
return file3
:write ;{{{:write}}}
line1=StrLen(line) ; Length of line receiving insert data.
if line1"" then line=StrCat(line,StrFill(" ",sc17-line1)) ; Line short, pad it out first.
if !sc17 then line=StrCat(line4,line) ; Just join them if column is zero.
else line=StrCat(StrSub(line,1,sc17),line4,StrSub(line,sc17+1,-1)) ; Insert Line4 in between columns.
return
:cancel ;{{{:cancel}}}
cancel=1
return
#endfunction
return
;------------------------------------------------------------------------------------------------------------
:insertdata ;{{{:insertdata}}}
#definefunction Insertdata(batchu,file1) ;{{{#definefunction Insertdata}}}
Intcontrol(72,2,0,0,0) ; Cancel and return.
cancel=0 ; Reset.
sc17=1
while @True
insertformat=`WWWDLGED,5.0`
insertcaption=`Insert Data`
insertx=300
inserty=50
insertwidth=100
insertheight=78
insertnumcontrols=6
insert01=`2,4,100,DEFAULT,STATICTEXT,DEFAULT,"Insert Data at column x "`
insert02=`4,25,30,DEFAULT,STATICTEXT,DEFAULT,"Column x"`
insert03=`40,22,15,DEFAULT,EDITBOX,Sc17,""`
insert04=`10,40,70,DEFAULT,EDITBOX,Data,""`
insert05=`08,58,36,DEFAULT,PUSHBUTTON,DEFAULT,"&Insert",1`
insert06=`53,58,36,DEFAULT,PUSHBUTTON,DEFAULT,"&Exit",2`
ibp=Dialog("Insert")
if cancel || ibp==2 then break ; Cancel requested.
if !IsNumber(sc17) then continue
if sc17<1 then continue
sc17=sc17-1
break
endwhile
if cancel || ibp==2 || data=="" then return "" ; Cancel requested.
f1=FileOpen(file1,"Read")
file3=FileNameLong(FileCreateTemp("UF3"))
f3=FileOpen(file3,"Write")
while @True
line=FileRead(f1)
if line=="*EOF*" then break
line1=StrLen(line) ; Length of line receiving insert data.
if line12 || StrLen(hexb)<>2 || hexa=="00" || hexb=="00" then continue
if !StrScan(StrSub(hexa,1,1),hexs,1,@Fwdscan) || !StrScan(StrSub(hexa,2,1),hexs,1,@Fwdscan) then continue
if !StrScan(StrSub(hexb,1,1),hexs,1,@Fwdscan) || !StrScan(StrSub(hexb,2,1),hexs,1,@Fwdscan) then continue
a=xBaseConvert(hexa,16,10)
b=xBaseConvert(hexb,16,10)
break
endwhile
if cancel || hexc==2 then return "" ; Cancel requested.
f1=FileOpen(file1,"Read")
file3=FileNameLong(FileCreateTemp("UF3"))
f3=FileOpen(file3,"Write")
while @True
line=FileRead(f1)
if line=="*EOF*" then break
FileWrite(f3,StrReplace(line,Num2Char(a),Num2Char(b)))
endwhile
FileClose(f1)
FileClose(f3)
return file3
:cancel ;{{{:cancel}}}
cancel=1
return
#endfunction
return
;---------------------------------------------------------------------------------------------------
:hextostring ;{{{:hextostring}}}
#definefunction Hextostring(batchu,file1) ;{{{#definefunction Hextostring}}}
if !StrIndexNc(Intcontrol(77,42,0,0,0),"wilx34i.dll",1,@Fwdscan) then AddExtender("wilx34i.dll")
Intcontrol(73,2,0,0,0) ; Cancel and return.
cancel=0 ; Reset.
hexa="00"
hexs="0123456789abcdef"
hexb=""
while @True
hexcformat=`WWWDLGED,5.0`
hexccaption=`Hex String replacement`
hexcx=450
hexcy=10
hexcwidth=100
hexcheight=78
hexcnumcontrols=7
hexc01=`2,4,160,DEFAULT,STATICTEXT,DEFAULT,"Replace Hex byte with string"`
hexc02=`2,16,64,DEFAULT,STATICTEXT,DEFAULT,""`
hexc03=`4,33,30,DEFAULT,STATICTEXT,DEFAULT,"Byte "`
hexc04=`32,30,15,DEFAULT,EDITBOX,Hexa,""`
hexc05=`50,30,40,DEFAULT,EDITBOX,Hexb,""`
hexc06=`08,58,36,DEFAULT,PUSHBUTTON,DEFAULT,"&Swap",1`
hexc07=`53,58,36,DEFAULT,PUSHBUTTON,DEFAULT,"&Exit",2`
hexc=Dialog("Hexc")
if cancel || hexc==2 then break ; Cancel requested.
hexa=StrLower(hexa)
if StrLen(hexa)<>2 || hexa=="00" then continue
if !StrScan(StrSub(hexa,1,1),hexs,1,@Fwdscan) || !StrScan(StrSub(hexa,2,1),hexs,1,@Fwdscan) then continue
a=xBaseConvert(hexa,16,10)
break
endwhile
if cancel || hexc==2 then return "" ; Cancel requested.
f1=FileOpen(file1,"Read")
file3=FileNameLong(FileCreateTemp("UF3"))
f3=FileOpen(file3,"Write")
while @True
line=FileRead(f1)
if line=="*EOF*" then break
FileWrite(f3,StrReplace(line,Num2Char(a),hexb)) ; Swap byte with string.
endwhile
FileClose(f1)
FileClose(f3)
return file3
:cancel ;{{{:cancel}}}
cancel=1
return
#endfunction
return
;---------------------------------------------------------------------------------------------------
:stringtohex ;{{{:stringtohex}}}
#definefunction Stringtohex(batchu,file1) ;{{{#definefunction Stringtohex}}}
if !StrIndexNc(Intcontrol(77,42,0,0,0),"wilx34i.dll",1,@Fwdscan) then AddExtender("wilx34i.dll")
Intcontrol(73,2,0,0,0) ; Cancel and return.
cancel=0 ; Reset.
hexa=""
hexs="0123456789abcdef"
while @True
hexcformat=`WWWDLGED,5.0`
hexccaption=`String with hex replacement`
hexcx=450
hexcy=10
hexcwidth=100
hexcheight=78
hexcnumcontrols=7
hexc01=`2,4,160,DEFAULT,STATICTEXT,DEFAULT,"Replace string with hex byte"`
hexc02=`2,16,64,DEFAULT,STATICTEXT,DEFAULT,""`
hexc03=`4,33,30,DEFAULT,STATICTEXT,DEFAULT,"String "`
hexc04=`32,30,40,DEFAULT,EDITBOX,Hexa,""`
hexc05=`75,30,20,DEFAULT,EDITBOX,Hexb,""`
hexc06=`08,58,36,DEFAULT,PUSHBUTTON,DEFAULT,"&Swap",1`
hexc07=`53,58,36,DEFAULT,PUSHBUTTON,DEFAULT,"&Exit",2`
hexc=Dialog("Hexc")
if cancel || hexc==2 then break ; Cancel requested.
if hexa=="" then continue
hexb=StrLower(hexb)
if hexb=="" then break
if StrLen(hexb)<>2 || hexb=="00" then continue
if !StrScan(StrSub(hexb,1,1),hexs,1,@Fwdscan) || !StrScan(StrSub(hexb,2,1),hexs,1,@Fwdscan) then continue
b=xBaseConvert(hexb,16,10)
break
endwhile
if cancel || hexc==2 then return "" ; Cancel requested.
f1=FileOpen(file1,"Read")
file3=FileNameLong(FileCreateTemp("UF3"))
f3=FileOpen(file3,"Write")
while @True
line=FileRead(f1)
if line=="*EOF*" then break
if hexb<>"" then FileWrite(f3,StrReplace(StrLower(line),StrLower(hexa),Num2Char(b))) ; Replace string with hex byte.
else FileWrite(f3,StrReplace(StrLower(line),StrLower(hexa),"")) ; Delete string.
endwhile
FileClose(f1)
FileClose(f3)
return file3
:cancel ;{{{:cancel}}}
cancel=1
return
#endfunction
return
;---------------------------------------------------------------------------------------------------
:multiplehex ;{{{:multiplehex}}}
#definefunction Multiplehex(batchu,file1) ;{{{#definefunction Multiplehex}}}
if !StrIndexNc(Intcontrol(77,42,0,0,0),"wilx34i.dll",1,@Fwdscan) then AddExtender("wilx34i.dll")
Intcontrol(73,2,0,0,0) ; Cancel and return.
cancel=0 ; Reset.
Intcontrol(28,2,0,0,0) ; Fixed font.
Intcontrol(63,200,10,690,990) ; Stretch panel.
Intcontrol(72,2,0,0,0) ; Cancel and return.
x="" ; Init.
output=0 ; In case of problems.
hexdel=StrCat("01",@Tab,"02",@Tab,"03",@Tab,"04",@Tab,"05",@Tab,"06",@Tab,"07",@Tab,"08",@Tab,"09",@Tab,"0a",@Tab,"0b",@Tab,"0c",@Tab,"0d",@Tab,"0e",@Tab,"0f",@Tab,"10",@Tab)
hexdel=StrCat(hexdel,"10",@Tab,"11",@Tab,"12",@Tab,"13",@Tab,"14",@Tab,"15",@Tab,"16",@Tab,"17",@Tab,"18",@Tab,"19",@Tab,"1a",@Tab,"1b",@Tab,"1c",@Tab,"1d",@Tab,"1e",@Tab,"1f",@Tab)
hexdel=StrCat(hexdel,"20",@Tab,"21",@Tab,"22",@Tab,"23",@Tab,"24",@Tab,"25",@Tab,"26",@Tab,"27",@Tab,"28",@Tab,"29",@Tab,"2a",@Tab,"2b",@Tab,"2c",@Tab,"2d",@Tab,"2e",@Tab,"2f",@Tab)
hexdel=StrCat(hexdel,"30",@Tab,"31",@Tab,"32",@Tab,"33",@Tab,"34",@Tab,"35",@Tab,"36",@Tab,"37",@Tab,"38",@Tab,"39",@Tab,"3a",@Tab,"3b",@Tab,"3c",@Tab,"3d",@Tab,"3e",@Tab,"3f",@Tab)
hexdel=StrCat(hexdel,"40",@Tab,"41",@Tab,"42",@Tab,"43",@Tab,"44",@Tab,"45",@Tab,"46",@Tab,"47",@Tab,"48",@Tab,"49",@Tab,"4a",@Tab,"4b",@Tab,"4c",@Tab,"4d",@Tab,"4e",@Tab,"4f",@Tab)
hexdel=StrCat(hexdel,"50",@Tab,"51",@Tab,"52",@Tab,"53",@Tab,"54",@Tab,"55",@Tab,"56",@Tab,"57",@Tab,"58",@Tab,"59",@Tab,"5a",@Tab,"5b",@Tab,"5c",@Tab,"5d",@Tab,"5e",@Tab,"5f",@Tab)
hexdel=StrCat(hexdel,"60",@Tab,"61",@Tab,"62",@Tab,"63",@Tab,"64",@Tab,"65",@Tab,"66",@Tab,"67",@Tab,"68",@Tab,"69",@Tab,"6a",@Tab,"6b",@Tab,"6c",@Tab,"6d",@Tab,"6e",@Tab,"6f",@Tab)
hexdel=StrCat(hexdel,"70",@Tab,"71",@Tab,"72",@Tab,"73",@Tab,"74",@Tab,"75",@Tab,"76",@Tab,"77",@Tab,"78",@Tab,"79",@Tab,"7a",@Tab,"7b",@Tab,"7c",@Tab,"7d",@Tab,"7e",@Tab,"7f",@Tab)
hexdel=StrCat(hexdel,"80",@Tab,"81",@Tab,"82",@Tab,"83",@Tab,"84",@Tab,"85",@Tab,"86",@Tab,"87",@Tab,"88",@Tab,"89",@Tab,"8a",@Tab,"8b",@Tab,"8c",@Tab,"8d",@Tab,"8e",@Tab,"8f",@Tab)
hexdel=StrCat(hexdel,"90",@Tab,"91",@Tab,"92",@Tab,"93",@Tab,"94",@Tab,"95",@Tab,"96",@Tab,"97",@Tab,"98",@Tab,"99",@Tab,"9a",@Tab,"9b",@Tab,"9c",@Tab,"9d",@Tab,"9e",@Tab,"9f",@Tab)
hexdel=StrCat(hexdel,"a0",@Tab,"a1",@Tab,"a2",@Tab,"a3",@Tab,"a4",@Tab,"a5",@Tab,"a6",@Tab,"a7",@Tab,"a8",@Tab,"a9",@Tab,"aa",@Tab,"ab",@Tab,"ac",@Tab,"ad",@Tab,"ae",@Tab,"af",@Tab)
hexdel=StrCat(hexdel,"b0",@Tab,"b1",@Tab,"b2",@Tab,"b3",@Tab,"b4",@Tab,"b5",@Tab,"b6",@Tab,"b7",@Tab,"b8",@Tab,"b9",@Tab,"ba",@Tab,"bb",@Tab,"bc",@Tab,"bd",@Tab,"be",@Tab,"bf",@Tab)
hexdel=StrCat(hexdel,"c0",@Tab,"c1",@Tab,"c2",@Tab,"c3",@Tab,"c4",@Tab,"c5",@Tab,"c6",@Tab,"c7",@Tab,"c8",@Tab,"c9",@Tab,"ca",@Tab,"cb",@Tab,"cc",@Tab,"cd",@Tab,"ce",@Tab,"cf",@Tab)
hexdel=StrCat(hexdel,"d0",@Tab,"d1",@Tab,"d2",@Tab,"d3",@Tab,"d4",@Tab,"d5",@Tab,"d6",@Tab,"d7",@Tab,"d8",@Tab,"d9",@Tab,"da",@Tab,"db",@Tab,"dc",@Tab,"dd",@Tab,"de",@Tab,"df",@Tab)
hexdel=StrCat(hexdel,"e0",@Tab,"e1",@Tab,"e2",@Tab,"e3",@Tab,"e4",@Tab,"e5",@Tab,"e6",@Tab,"e7",@Tab,"e8",@Tab,"e9",@Tab,"ea",@Tab,"eb",@Tab,"ec",@Tab,"ed",@Tab,"ee",@Tab,"ef",@Tab)
hexdel=StrCat(hexdel,"f0",@Tab,"f1",@Tab,"f2",@Tab,"f3",@Tab,"f4",@Tab,"f5",@Tab,"f6",@Tab,"f7",@Tab,"f8",@Tab,"f9",@Tab,"fa",@Tab,"fb",@Tab,"fc",@Tab,"fd",@Tab,"fe",@Tab,"ff",@Tab)
x=AskItemList("Select hex byte/s to be deleted ",hexdel,@Tab,@Unsorted,@Multiple) ; Get hex bytes for deletion.
if x==0 || cancel then return "" ; Exit/cancel - same thing here.
f1=FileOpen(file1,"Read")
file3=FileNameLong(FileCreateTemp("UF3"))
f3=FileOpen(file3,"Write")
while @True
line=FileRead(f1)
if line=="*EOF*" then break
for y=1 to ItemCount(x,@Tab)
z=xBaseConvert(ItemExtract(y,x,@Tab),16,10)
line=StrReplace(line,Num2Char(z),"") ; Delete hex byte.
next
FileWrite(f3,line) ; Line with deleted hex.
endwhile
FileClose(f1)
FileClose(f3)
return file3
:cancel ;{{{:cancel}}}
cancel=1
return
#endfunction
return
;---------------------------------------------------------------------------------------------------
:displayhex ;{{{:displayhex}}}
#definefunction Displayhex(batchu,file1) ;{{{#definefunction Displayhex}}}
Intcontrol(73,2,0,0,0) ; Cancel and return.
cancel=0 ; Reset.
browser=StrCat(DirHome(),"Browser.exe")
if FileExist(browser)<>1 then browser=StrLower(AskFileName("Browser not found - Select a Browser for hex viewing", DirHome(),"Program|*.exe|All Files|*.*|", "*.exe", 1)) ; Get a hex browser.
if cancel then return ""
Run(`%Browser%`,FileNameShort(file1)) ; Call Browser for 'work' file.
if StrLower(browser)==StrLower(StrCat(DirHome(),"browser.exe")) then WinWaitExist("~Browser - ",5) ; Wait for it...
then SendMenusTo("~Browser - ", "View Hex") ; Select Hex view option.
return ""
:cancel ;{{{:cancel}}}
cancel=1
return
#endfunction
return
;---------------------------------------------------------------------------------------------------