#!/bin/sh true = [[ # Shell/Lua script to convert from MobileDB to JFile input="$1" output="$2" if [ -z "$input" ]; input="-"; fi if [ -z "$output" ]; output="-"; fi pdbconv unpack "$input" j2m.ascii$$ echo "dofile('j2m.ascii$$'); dofile('$0'); Database = j2m(Database)" | pdbconv pack - "$output" rc="$?" rm -f j2m.ascii$$ exit $rc ]] $debug function j2m(jdb) local mdb, f, r, r2, i, j, fnames, numfields, next if jdb.type ~= "JbDb" or jdb.creator ~= "JBas" then error("Source database is not a JFile database") end mdb = { name = "M: " .. gsub(mdb.name, "^[MJ]: ", ""), version = 0, type = "Mdb1", creator = "Mdb1", backup = 1, dates = jdb.dates, modnum = (jdb.modnum or -1) + 1, appInfo = { }, records = { } -- these two have to get filled in } mdb.appInfo.categories = { lastuid = 15, categories = { { name = "Unfiled ", renamed = nil, uid = 0 }, { name = "FieldLabels ", renamed = nil, uid = 1 }, { name = "DataRecords ", renamed = nil, uid = 2 }, { name = "DataRecordsFout ", renamed = nil, uid = 3 }, { name = "Preferences ", renamed = nil, uid = 4 }, { name = "DataType ", renamed = nil, uid = 5 }, { name = "FieldLengths ", renamed = nil, uid = 6 }, { name = nil, renamed = nil, uid = 7 }, { name = nil, renamed = nil, uid = 8 }, { name = nil, renamed = nil, uid = 9 }, { name = nil, renamed = nil, uid = 10 }, { name = nil, renamed = nil, uid = 11 }, { name = nil, renamed = nil, uid = 12 }, { name = nil, renamed = nil, uid = 13 }, { name = nil, renamed = nil, uid = 14 }, { name = nil, renamed = nil, uid = 15 } } } mdb.records = { { category = 1, data = { fields = { } } }, { category = 5, data = { fields = { "str", "str", "str", "str", "str", "str", "str", "str", "str", "str", "str", "str", "str", "str", "str", "str", "str", "str", "str", "str" } } }, { category = 6, data = { type = "Column Widths", fields = { 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80 } } }, { category = 4, uid = 2, secret = nil, busy = nil, dirty = nil, delete = nil, data = { type = "Preferences", fields = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } } } } i = 1 while jdb.appInfo.fields[i] do mdb.records[1].data.fields[i] = jdb.appInfo.fields[i].name mdb.records[3].data.fields[i] = jdb.appInfo.fields[i].width i = i + 1 end offset = 1 while mdb.records[offset] do offset = offset + 1 end offset = offset - 1 i = 1 while jdb.records[i] do mdb.records[i+offset] = { category = 2, data = { fields = jdb.records[i].data } } i = i + 1 end return mdb end -- for debugging function show(x, indent) local i, v, i2, pfx, nl nl = "" if not indent then indent = ""; nl = "\n" end if type(x) == "table" then write("{\n") if x[1] then i = 1 pfx = indent .. " " while x[i] do write(pfx); show(x[i], indent .. " ") pfx = ",\n" .. indent .. " " i = i + 1 end else i = nil pfx = indent .. " " repeat i, v = next(x, i) if i ~= nil then write(pfx, i, " = "); show(v, indent .. " ") pfx = ",\n" .. indent .. " " end until (i == nil) end write ("\n", indent, "}") elseif type(x) == "string" then write(format('%q', x)) elseif type(x) == "number" then write(x) else print(x) end write(nl) end