mirror of
https://github.com/xcat2/confluent.git
synced 2025-01-28 20:07:48 +00:00
Greatly flesh out the cbl reader
This commit is contained in:
parent
2c8681a9f3
commit
e0c0f0f1f3
@ -1,23 +1,84 @@
|
||||
import os
|
||||
import struct
|
||||
import sys
|
||||
import time
|
||||
import fcntl
|
||||
import select
|
||||
import termios
|
||||
import tty
|
||||
|
||||
def writeout(data):
|
||||
done = False
|
||||
while not done:
|
||||
try:
|
||||
sys.stdout.write(data)
|
||||
done = True
|
||||
except IOError:
|
||||
pass
|
||||
|
||||
def main(binfile, txtfile):
|
||||
binf = open(binfile, 'r')
|
||||
txtf = open(txtfile, 'r')
|
||||
record = binf.read(16)
|
||||
oldtcattr = termios.tcgetattr(sys.stdin.fileno())
|
||||
tty.setraw(sys.stdin.fileno())
|
||||
currfl = fcntl.fcntl(sys.stdin.fileno(), fcntl.F_GETFL)
|
||||
fcntl.fcntl(sys.stdin.fileno(), fcntl.F_SETFL, currfl | os.O_NONBLOCK)
|
||||
recordcount = 1
|
||||
while record:
|
||||
showrecords(record, txtf, binf, recordcount)
|
||||
recordcount = 1
|
||||
select.select((sys.stdin,), (), (), 86400)
|
||||
myinput = sys.stdin.read()
|
||||
if myinput == '\x1b[C': # right
|
||||
record = binf.read(16)
|
||||
elif myinput == '\x1b[D': # left
|
||||
sys.stdout.write('\x1b[2J\x1b[;H')
|
||||
numrecords = 0
|
||||
prevoffset = 1
|
||||
while numrecords < 16 and prevoffset > 0:
|
||||
prevoffset = binf.tell() - 32
|
||||
if prevoffset < 0:
|
||||
prevoffset = 0
|
||||
binf.seek(prevoffset)
|
||||
record = binf.read(16)
|
||||
while record[1] != '\x02' and prevoffset > 0:
|
||||
prevoffset = binf.tell() - 32
|
||||
if prevoffset < 0:
|
||||
prevoffset = 0
|
||||
binf.seek(prevoffset)
|
||||
record = binf.read(16)
|
||||
if record[1] == '\x02':
|
||||
numrecords += 1
|
||||
recordcount = numrecords
|
||||
elif myinput.lower() == 'q':
|
||||
break
|
||||
else:
|
||||
record = binf.read(16)
|
||||
currfl = fcntl.fcntl(sys.stdin.fileno(), fcntl.F_GETFL)
|
||||
fcntl.fcntl(sys.stdin.fileno(), fcntl.F_SETFL, currfl ^ os.O_NONBLOCK)
|
||||
termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, oldtcattr)
|
||||
sys.stdout.write('\x1b[m')
|
||||
|
||||
def showrecords(record, txtf, binf, recordcount):
|
||||
while record and recordcount:
|
||||
recs = struct.unpack('!BBIHIBBH', record)
|
||||
offset = recs[2]
|
||||
size = recs[3]
|
||||
tstamp = recs[4]
|
||||
tstamp = time.strftime('%m/%d %H:%M:%S ', time.localtime(tstamp))
|
||||
txtf.seek(offset)
|
||||
currdata = txtf.read(size)
|
||||
sys.stdout.write(currdata)
|
||||
sys.stdout.write('\x1b]0;{0}\x07'.format(tstamp))
|
||||
sys.stdout.flush()
|
||||
raw_input()
|
||||
record = binf.read(16)
|
||||
if recs[1] == 2:
|
||||
tstamp = time.strftime('%m/%d %H:%M:%S ', time.localtime(tstamp))
|
||||
txtf.seek(offset)
|
||||
currdata = txtf.read(size)
|
||||
sys.stdout.write(currdata)
|
||||
sys.stdout.write('\x1b]0;{0}\x07'.format(tstamp))
|
||||
sys.stdout.flush()
|
||||
recordcount -= 1
|
||||
if recordcount:
|
||||
record = binf.read(16)
|
||||
else:
|
||||
record = binf.read(16)
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user