// 원본 설치 원가계산서 양식목록 — 일반 WongaFileList(양식 번호 7) · 표준 SWongaFileList(0x16) (System\MainSys, DBISAM 표). // 행마다 이름과 원가 표 한 벌(BLOB = TPF0 메모리 표). 작업모드를 일반 ↔ 표준으로 바꿀 때와 양식목록에서 고를 때 쓴다. const fs = require("node:fs"); const path = require("node:path"); const { table, memoryRows } = require("./import-estx.cjs"); const root = () => process.env.EST_INSTALL || "C:/Dasansoft/Est Plus 2"; const cache = new Map(); function load(standard) { const name = standard ? "SWongaFileList" : "WongaFileList"; if (cache.has(name)) return cache.get(name); const dir = path.join(root(), "System", "MainSys"), dat = path.join(dir, `${name}.dat`); if (!fs.existsSync(dat)) throw Error(`설치 원가계산서 양식(${name})을 찾을 수 없습니다.`); const parsed = table(fs.readFileSync(dat), fs.readFileSync(path.join(dir, `${name}.blb`)), []); const list = (parsed.rows || parsed) .filter((r) => r.BLOB?.binary) .sort((a, b) => (Number(a.Index) || 0) - (Number(b.Index) || 0)) .map((r) => ({ index: Number(r.Index) || 0, name: String(r.Name ?? ""), rows: memoryRows(Buffer.from(r.BLOB.binary, "base64")).map(({ Cost, ...rest }) => rest), })); cache.set(name, list); return list; } // 목록(이름만) 또는 한 양식(행 포함) function get(standard, index) { const list = load(standard); if (index == null) return list.map(({ index: i, name }) => ({ index: i, name })); const found = list.find((f) => f.index === Number(index)); if (!found) throw Error("원가계산서 양식이 없습니다."); return found; } module.exports = { get };