6.0 KiB
6.0 KiB
Bin Rewrite Progress!
My vision for the bin library is to provide great and consistant support for binary minipulation... The old version was not consistant with how I wanted things to work. Great things to come! Note: A lot breaks Progress: [==========90%======== -] All that is left is the virtual file system stuff! Everything else is all good! A lot of useless and unneeded functions have been removed while adding some more useful ones!
List of new methods
- bin.newFromBase64(data) -- returns a bin object from base64 data
- bin.newFromBase91(data) -- returns a bin object from base91 data
- bin.newFromHex(data) -- returns a bin object from hex data
- bin:read(n) -- works just like normal read on a file for both stream/bin files
- bin:sub(a,b) -- works like string.sub() but for bin objects
- bin:seekSet(n) -- sets the seek position on the file
- bin.toBase64(s) -- returns a base64 encoded string from the input string
- bin.fromBase64(s) -- converts the base64 data back into its original string
- bin.toBase91(s) -- returns a base91 encoded string from the input string
- bin.fromBase91(s) -- converts the base91 data back into its original string
- bin.getnumber(num,len,fmt,func) -- turns num into a binary string, len is what to fit it into, 4 bytes, 5+ bytes. fmt is either %e for little endian or %E for big endian defualts to %E
- New infinabits! Works like bits, but supports numbers up to infinity
- bin.registerBlock(t,funcG,funcA) -- allows you to add custom block commands, I implemented the table block command using this feature, look at extrablocks.lua in the bin folder
- binobj:getMD5Hash() -- returns the md5 hash of the bin file
- bin.getBitsInNum(x) -- returns the number of bits needed to store a number
List of converted methods and their status
- log(data,name,fmt)
bin.getLuaVersion() - bin.load(filename,s,r) -- loads a file into memory as a virtual file
- bin.new(data) -- Does not accept b64 or hex data anymore! Use new methods for that ^^^ -- creats a new virtual file
- bin.stream(file,lock) -- opens a file in updating mode. Works just like a binobj
- bin.newTempFile(data) -- creates a streamed file usine lua's io.tmpfile() so its removed when the program is done
- bin:getSize(fmt) -- gets the size of the string fmt is how you want to format it. left empte returns number of bites as a lua number supports lua formats! And also I added the %b format for base64
- binobj:getData(a,b,fmt) -- returns the data of the object as a string, supports %x(hex), %X(HEX) and %b(base64)
- bits.new(n) -- creats a bits objects. This library is all about numbers and manipulation at the bit level
- bin.newVFS() -- soon
- bin:tackE(data) -- tacks data onto the end of a file
- binobj:tofile(path) -- binobj to a file on the disk. Does not work with stream files! Might allow it to rename stream files at a future point
- bin.loadVFS(path) -- soon
- bin:newDataBuffer(size,fill) -- creates a buffer object. Buffers allow fast and easy byte manipulation
bin.bufferToBin(b)bin.binToBuffer(b)bin:getDataBuffer(a,b)bin.newNamedBlock(indexSize)bin.newStreamedNamedBlock(indexSize,path)bin.loadNamedBlock(path)bin.namedBlockManager(arg) - bin.randomName(n,ext) -- returns a random filesystem safe string, can add an extension to be created with it as well
bin.NumtoHEX(n)bin.HEXtoBin(s)bin.HEXtoStr(s) - bin.tohex(s) -- converts a string into hex
- bin.fromhex(s) -- takes hex data and turns it into a string
- bin.endianflop(data) -- swaps between big/little endian
- bin.getVersion() -- returns the libraries version as a string
bin.escapeStr(str)bin.ToStr(tab)bin.packLLIB(name,tab,ext)bin.unpackLLIB(name,exe,todir,over,ext)bin.fileExist(path)NOW io.fileExists(path)bin.closeto(a,b,v)bin.textToBinary(txt)bin.decodeBits(bindata) - bin.trimNul(s) -- removes the nul character from the end of a string
bin.getIndexSize(tab) - bits.numToBytes(n,fit,func) -- converts a number into a string, helper function for bin.getnumber(num,len,fmt,func), allows for more control
binobj:clone()binobj:compare(other binobj,diff) - binobj:sub(a,b) -- works like string.sub, but for binobjs
- binobj:tonumber(a,b)
binobj:getbyte(n)binobj:tobits(i)binobj:getHEX(a,b)binobj:scan(s,n,f)binobj:streamData(a,b)binobj:streamread(a,b) - binobj:canStreamWrite() -- returns true if a a binobj can be streamed written to
- bitobj:conv(n)
- bitobj:tobytes()
- bitobj:tonumber()
- bitobj:isover()
- binobj:getHash(n) -- returns a fast, but insecure hash
blockReader:getBlock(name)binobj:setEndOfFile(n)binobj:reverse() - binobj:flipbits() -- filps the bits in the binobj
binobj:segment(a,b)binobj:insert(a,i)binobj:parseN(n)binobj:getlength()-- now is getSize()binobj:shift(n)binobj:delete(a,b) - binobj:encrypt(seed) -- encrypts a file
- binobj:decrypt(seed) -- decrypts a file
binobj:shuffle()binobj:mutate(a,i)binobj:merge(o)-- binobj:tackE(data) does this so there is no need for mergebinobj:parseA(n,a,t)binobj:getHEX(a,b)binobj:cryptM() - binobj:addBlock(d,fit,fmt) -- adds a block to the bin obj
- binobj:getBlock(t,n) -- gets the block from a binobj
- binobj:setSeek(n) -- starts at 1 not 0
binobj:morph(a,b,d)binobj:fill(n,d)binobj:fillrandom(n)binobj:shiftbits(n)binobj:shiftbit(n,i)binobj:streamwrite(d,n)binobj:open() - binobj:close() -- closes a streamed file
binobj:wipe()binobj:tackB(d) - binobj:tackE(d,fit,updateseek) -- adds data onto the end of the file
binobj:parse(n,f)binobj:flipbit(i)binobj:gsub()blockWriter:addNamedBlock(name,value)bitobj:add(i)bitobj:sub(i)bitobj:multi(i)bitobj:div(i) - bitobj:flipbits() -- flips the bits of a bitobj
- bitobj:getBin() -- returns the binobj of the bit data