191 lines
4.5 KiB
Lua
191 lines
4.5 KiB
Lua
#!/usr/bin/lua
|
|
|
|
function ltrim(s)
|
|
return s:match'^%s*(.*)'
|
|
end
|
|
|
|
file=arg[1]
|
|
filet=arg[1]
|
|
|
|
overall = {}
|
|
|
|
cntr = 1
|
|
filein = io.open(file, "r")
|
|
maxslot = -1
|
|
repeat
|
|
message = {}
|
|
local line = filein:read("*line")
|
|
if line == nil then
|
|
break
|
|
end
|
|
if cntr < 2 then
|
|
maxused = line
|
|
line = filein:read("*line")
|
|
maxslots = line
|
|
cntr=2
|
|
else
|
|
message['slot'] = line
|
|
message['phone'] = filein:read("*line")
|
|
nline = filein:read("*line")
|
|
message['nline'] = nline
|
|
nline = tonumber(nline)
|
|
nc = nline
|
|
ncntr = 1
|
|
msg=""
|
|
message['msgnum'] = "xxx"
|
|
message['msgord'] = "xxx"
|
|
message['msgmax'] = "xxx"
|
|
lines = filein:read("*line")
|
|
if lines == nil then
|
|
s = nil
|
|
else
|
|
s, msgnum, msgord, msgmax = lines:match("(Msg# (%d+),(%d+)/(%d+))")
|
|
end
|
|
if s == nil then
|
|
nc = nc + 1
|
|
else
|
|
message['msgnum'] = msgnum
|
|
message['msgord'] = msgord
|
|
message['msgmax'] = msgmax
|
|
lines = filein:read("*line")
|
|
end
|
|
msg = lines
|
|
if nc > 2 then
|
|
for i=1,nc-2,1
|
|
do
|
|
lines = filein:read("*line")
|
|
if lines == "" then
|
|
msg = msg .. "\n"
|
|
else
|
|
msg = msg .. "\n" .. lines
|
|
end
|
|
end
|
|
--print(nln, msg)
|
|
--msg = msg .. "\n"
|
|
end
|
|
message['msg'] = msg
|
|
message['numlines'] = nc - 1
|
|
sht = filein:read("*line")
|
|
s, sht1, sht2 = sht:match("((.*)Msg# %d+,%d+/%d%s*(.*))")
|
|
if s ~= nil then
|
|
sht = sht1 .. sht2
|
|
end
|
|
message['short'] = sht
|
|
overall[message['slot']] = message
|
|
if maxslot < tonumber(message['slot']) then
|
|
maxslot = tonumber(message['slot'])
|
|
end
|
|
end
|
|
until 1==0
|
|
filein:close()
|
|
|
|
fileout = io.open(filet, "w")
|
|
fileout:write(maxused, "\n")
|
|
fileout:write(maxslots, "\n")
|
|
|
|
for i=0,maxslot,1
|
|
do
|
|
msgbuild = {}
|
|
shortmsg = {}
|
|
if overall[tostring(i)] ~= nil then
|
|
--print(i, overall[tostring(i)]['msgnum'])
|
|
if overall[tostring(i)]['msgnum'] == "xxx" then
|
|
fileout:write(overall[tostring(i)]['slot'], "\n")
|
|
fileout:write(overall[tostring(i)]['phone'], "\n")
|
|
fileout:write(overall[tostring(i)]['nline'], "\n")
|
|
fileout:write(overall[tostring(i)]['msg'], "\n")
|
|
fileout:write(overall[tostring(i)]['short'], "\n")
|
|
else
|
|
msgnum = overall[tostring(i)]['msgnum']
|
|
msgtmp = overall[tostring(i)]['slot']
|
|
msgord = overall[tostring(i)]['msgord']
|
|
msgmax = tonumber(overall[tostring(i)]['msgmax'])
|
|
msg = overall[tostring(i)]['msg']
|
|
numlines = overall[tostring(i)]['numlines']
|
|
--print(numlines)
|
|
msgbuild[overall[tostring(i)]['msgord']] = overall[tostring(i)]['msg']
|
|
shortmsg[overall[tostring(i)]['msgord']] = overall[tostring(i)]['short']
|
|
for j=i+1,maxslot,1
|
|
do
|
|
if overall[tostring(j)] ~= nil then
|
|
if overall[tostring(j)]['msgnum'] == msgnum then
|
|
numlines = numlines + (overall[tostring(j)]['numlines'])
|
|
--print(overall[tostring(j)]['numlines'])
|
|
msgtmp = msgtmp .. " " .. overall[tostring(j)]['slot']
|
|
msgbuild[overall[tostring(j)]['msgord']] = overall[tostring(j)]['msg']
|
|
shortmsg[overall[tostring(j)]['msgord']] = overall[tostring(j)]['short']
|
|
overall[tostring(j)] = nil
|
|
end
|
|
end
|
|
end
|
|
msg=""
|
|
mflg = 0
|
|
short = nil
|
|
for j=1,msgmax,1
|
|
do
|
|
if msgbuild[tostring(j)] ~= nil then
|
|
msg = msg .. msgbuild[tostring(j)]
|
|
if short == nil then
|
|
short = shortmsg[tostring(j)]
|
|
end
|
|
else
|
|
mflg = 1
|
|
end
|
|
end
|
|
fileout:write(msgtmp, "\n")
|
|
fileout:write(overall[tostring(i)]['phone'], "\n")
|
|
if mflg == 0 then
|
|
s, preshort = short:match("((.* %d+%-%d+%-%d+ %d+:%d+:%d+%s+[+-]%d+h ))")
|
|
if preshort ~= nil then
|
|
stxt = ''
|
|
j = 0
|
|
k = 1
|
|
ch = ''
|
|
while j < 20 do
|
|
ch = string.byte(msg:sub(k, k))
|
|
if ch == nil then
|
|
j = 20
|
|
elseif ch == 10 or ch == 13 then
|
|
stxt = stxt .. ' '
|
|
k = k + 1
|
|
elseif ch < 127 then
|
|
stxt = stxt .. string.char(ch)
|
|
k = k + 1
|
|
elseif ch < 0xE0 then
|
|
stxt = stxt .. msg:sub(k, k + 1)
|
|
k = k + 2
|
|
elseif ch < 0xF0 then
|
|
stxt = stxt .. msg:sub(k, k + 2)
|
|
k = k + 3
|
|
else
|
|
stxt = stxt .. msg:sub(k, k + 3)
|
|
k = k + 4
|
|
end
|
|
j = j + 1
|
|
end
|
|
if preshort:sub(1, 1) == ' ' then
|
|
jj = 49
|
|
else
|
|
jj = 51
|
|
end
|
|
short = (preshort .. ' '):sub(1, jj) .. stxt .. " ..."
|
|
end
|
|
else
|
|
msg = "Partial Message : " .. msg
|
|
t = short:gsub("%s+", " ")
|
|
short = "Partial Message " .. t
|
|
end
|
|
endc = string.sub(msg, -2)
|
|
if endc == "\n\n" then
|
|
mlen = msg:len() - 2
|
|
msg = string.sub(msg,1,mlen)
|
|
end
|
|
local _,n = msg:gsub("\n","")
|
|
fileout:write(tostring(n+1), "\n")
|
|
fileout:write(msg, "\n")
|
|
fileout:write(short, "\n")
|
|
end
|
|
end
|
|
end
|
|
fileout:close()
|