From edd5d020f67be9f69d8d1ed4bb3bc9deb94d4ea4 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 14 Nov 2026 09:16:17 +0900 Subject: [PATCH] =?UTF-8?q?feat(stmate-test):=20REA=20=EA=B8=B0=EC=84=B1?= =?UTF-8?q?=C2=B7=EC=A4=80=EA=B3=B5=20=E2=80=94=20=EC=B9=B8=20=EB=9C=BB(?= =?UTF-8?q?=EA=B3=84=EC=95=BD=C2=B7=EB=88=84=EA=B3=84=C2=B7=EC=A0=84?= =?UTF-8?q?=ED=9A=8C=C2=B7=EA=B8=88=ED=9A=8C)=20=C2=B7=20=ED=9A=8C?= =?UTF-8?q?=EC=B0=A8=20=EC=9D=B4=EC=9B=94=20=C2=B7=20=EC=88=98=EB=9F=89=20?= =?UTF-8?q?=EC=83=81=ED=95=9C=20=C2=B7=20=EA=B8=B0=EC=84=B1=20=EC=A0=9C?= =?UTF-8?q?=EC=9E=A1=EB=B9=84=C2=B7=EB=B6=80=EA=B0=80=EC=84=B8=C2=B7?= =?UTF-8?q?=EC=A0=88=EC=82=AC=20=EC=9B=90=EB=B3=B8=20=EC=A3=BC=EC=86=8C=20?= =?UTF-8?q?=EA=B7=BC=EA=B1=B0=20=C2=B7=20=EC=A0=80=EC=9E=A5=20=EB=AC=B6?= =?UTF-8?q?=EC=9D=8C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 지식DB REA 분석 33 기성준공단계 작업자료(정적분석 보고서·근거) - 기성 공사(PCLASS 6) 저장 = COSTW2~4 · [2·3·4_KANJUB] n_C_* 기성 화면 값 그대로 - save_payload.js 로 저장 요청 묶음 분리(view_prj_boq.js 700줄 한도) Co-Authored-By: Claude Opus 5.5 --- .../33_기성준공단계_정적분석.md | 184 ++ .../Boq_0x4f4a2f_progress_qty_edit.asm.txt | 251 +++ ...Boq_0x4fc5dc_progress_amount_slots.asm.txt | 607 +++++ .../ConEst_0x47fadf_0632_ratio.asm.txt | 158 ++ .../ConEst_0x48032b_0632_header.asm.txt | 92 + .../KanJub_0x4c9a98_slot_load.asm.txt | 426 ++++ .../KanJub_0x4ca5ac_Edit_KanJub_K.asm.txt | 265 +++ ...anJub_0x4caa38_0x4cac0c_memo_write.asm.txt | 320 +++ ...cadbc_filter_0x4cae70_boq_drawcell.asm.txt | 239 ++ .../evidence/KanJub_0x4cb03c_add_row.asm.txt | 475 ++++ .../KanJub_0x4cb564_load_rows.asm.txt | 2005 +++++++++++++++++ ...cdb94_drawcell_rowchange_cellenter.asm.txt | 268 +++ ...KanJub_0x4cdec0_sBtn_Set_RateClick.asm.txt | 653 ++++++ ...b_0x4ce2c8_row_recalc_0x4ce55c_cut.asm.txt | 336 +++ ...KanJub_0x4ce6c4_sBtn_Calc_JabClick.asm.txt | 431 ++++ ...0x4cec80_beforepost_0x4cee64_combo.asm.txt | 251 +++ ...ain_0x55c7af_progress_registration.asm.txt | 577 +++++ .../evidence/TPM_JAB_K.json | 975 ++++++++ .../evidence/TWM_KANJUB_K.json | 982 ++++++++ .../scripts/dz.py | 78 + .../scripts/inv.py | 45 + .../scripts/litref.py | 10 + .../scripts/parse_dfm.py | 137 ++ .../scripts/pe.py | 75 + .../scripts/rsrc.py | 30 + .../scripts/strfind.py | 33 + .../tester/helper_stmate_progress_rea.cjs | 109 + .../tester/test_stmate_stage_progress.py | 18 +- .../tester/test_stmate_stage_progress_rea.py | 229 ++ tools/stmate-test/index.html | 1 + tools/stmate-test/progress_calc.js | 357 ++- tools/stmate-test/save_payload.js | 142 ++ tools/stmate-test/scr_stage_progress.js | 124 +- tools/stmate-test/view_prj_boq.js | 123 +- 34 files changed, 10763 insertions(+), 243 deletions(-) create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/33_기성준공단계_정적분석.md create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/Boq_0x4f4a2f_progress_qty_edit.asm.txt create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/Boq_0x4fc5dc_progress_amount_slots.asm.txt create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/ConEst_0x47fadf_0632_ratio.asm.txt create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/ConEst_0x48032b_0632_header.asm.txt create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4c9a98_slot_load.asm.txt create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4ca5ac_Edit_KanJub_K.asm.txt create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4caa38_0x4cac0c_memo_write.asm.txt create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cadbc_filter_0x4cae70_boq_drawcell.asm.txt create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cb03c_add_row.asm.txt create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cb564_load_rows.asm.txt create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cdb94_drawcell_rowchange_cellenter.asm.txt create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cdec0_sBtn_Set_RateClick.asm.txt create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4ce2c8_row_recalc_0x4ce55c_cut.asm.txt create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4ce6c4_sBtn_Calc_JabClick.asm.txt create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cec80_beforepost_0x4cee64_combo.asm.txt create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/Main_0x55c7af_progress_registration.asm.txt create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/TPM_JAB_K.json create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/TWM_KANJUB_K.json create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/dz.py create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/inv.py create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/litref.py create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/parse_dfm.py create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/pe.py create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/rsrc.py create mode 100644 resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/strfind.py create mode 100644 resources/tester/helper_stmate_progress_rea.cjs create mode 100644 resources/tester/test_stmate_stage_progress_rea.py create mode 100644 tools/stmate-test/save_payload.js diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/33_기성준공단계_정적분석.md b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/33_기성준공단계_정적분석.md new file mode 100644 index 000000000..d4cf95376 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/33_기성준공단계_정적분석.md @@ -0,0 +1,184 @@ +# 33 기성·준공 단계 정적 분석 — 작업자료 + +- 분석일: 2026-11-14 +- 방법: 설치본 바이트 읽기만(실행·수정·라이선스 우회 없음) · PE 섹션 대응 · Delphi VMT(필드표 vmt−56 · 메서드표 vmt−52) · DFM(RCDATA) 해독 · capstone 역어셈블 +- 대상 해시(sha256) + +| 모듈 | sha256 | +|---|---| +| ST_CPM/ST_KanJub.CPM | ef8d55b259b37916496e80cab6a4a2ba46216e0bd7c5199083dbda632bd50d03 | +| ST_CPM/ST_Boq.CPM | 180707d0423dd2dcb8403d89ba1dbaf2731c0db5c6bb332029479fd9d9923ab3 | +| STmate.Cpm | 99d5c05675ba1399c51a71db8e26ebd5ff39fd78d02360147c7705deb399b5f5 | +| ST_CPM/ST_P_ConEst.CPM | 027c72cc019e46fdec78e6aebc68b621aa77c7fc1ac88362f04675f6dab69fab | +| ST_CPM/ST_P_Nae.CPM | 9ecb6a663c988f249548a06a6c7da66abc71d8c245baba141450c329391f1c47 | +| ST_CPM/ST_Prt.CPM | 0698a6343ba04a5b379f297da60e68a9fc3f18d5ac0ad262570f70ca98dd3c19 | + +- 원본 실행 수치 대조 없음 — 아래 규칙은 명령 순서 관찰이며 실제 출력값 일치는 미검증. +- 신뢰도 표기: 상(명령·상수·문자열이 한 구간에서 직접 이어짐) · 중(호출 관계·인자 뜻 일부 추정) · 하(이름·배치만). + +## 1. 모듈·클래스 배치 + +| 대상 | 위치 | 비고 | +|---|---|---| +| 기성 제잡비 계산서 화면 | ST_KanJub `TwM_KanJub_K` VMT 0x4ca1dc · 진입 `Edit_KanJub_K` 0x4ca5ac | 메서드 16개 · DFM `TWM_KANJUB_K` 13,874 B | +| 기성 내역 수량 편집 | ST_Boq 0x4f4a2f~0x4f4db4 (PCLASS 6 분기) | 전역 0x5417bc = PCLASS | +| 기성 회차 등록 | STmate.Cpm 0x55c7af~0x55e519 (`MkBoq` 계열, 31번 K_ORD 전이표와 같은 함수) | 진행 문구 「전회0/금회0/누계0」 「전회<-누계, 금회=0」 | +| 0632 기성부분총괄내역서 인쇄 | ST_P_ConEst `Prn_Jab_K` 0x47ec64 · `TPM_JAB_K.HRGroup1BeforePrint` 0x47f7f0 | DFM `TPM_JAB_K` | +| 0632~0638 인쇄 진입 | ST_P_Nae `Prn_Jab` 0x4b1998 · `Prn_Jab_P` 0x4b4c20 · ST_P_XLS `Prn_Jab_EXL` 0x529d40 · `Prn_Jab_K_EXL` 0x562ef0 | 서식별 열 산식 미해독 | + +`TwM_KanJub_K` 필드 오프셋(필드표): +0x2f4 StBar · +0x2f8 rGrd_BoqXX · +0x300 rGrd_Jab · +0x304 tb_BoqXX · +0x310 sBtn_Calc_Jab · +0x314 sBtn_Set_Rate · +0x318 rd_Filter · +0x320 cmBx_Buga · +0x328 cmBx_JeolSa · +0x330 cmBx_Tot_Jeol. + +## 2. 칸 번호(1~4)의 뜻 — 기성 프로젝트 (신뢰도 상) + +| 칸 | 뜻 | 근거 | +|---|---|---| +| 1 | 계약(도급) | 0x4cae9b 열 묶음→칸 표 `'1342'`(0x4d2414) — 도급액 열 = T_AMT1 · 0x4cb03c 값 배열 [0]→도급 열 | +| 2 | 누계 | 같은 표 누계 열 = T_AMT2 · 값 배열 [1]→누계 열(col 8) | +| 3 | 전회 | 전회 열 = T_AMT3 · 값 배열 [2]→전회 열(col 4) | +| 4 | 금회 | 금회 열 = T_AMT4 · 값 배열 [3]→금회 열(col 6) | + +- 같은 순서 문자열 `'1342'`가 ST_P_ConEst 0x480562 에도 있음. +- 0632 인쇄 비율: 전회 = T_AMT3 ÷ T_AMT1 × 100 (0x47fc25) · 금회 = T_AMT4 ÷ T_AMT1 × 100 (0x47fcaf) · 누계 = T_AMT2 ÷ T_AMT1 × 100 (0x47fd39). +- 기성 프로젝트 = PRJLST.PCLASS 6 · K_ORD = 회차(31번 전이표: 계약(4)→기성 1 · 기성(6)→K+1 · 변경(7)→기성 1). + +## 3. 회차 등록 시 BOQ 칸 처리 — STmate.Cpm (신뢰도 상) + +1. 공통 복사 0x55c7d4~0x55ca7b: QTY1→QTY2·QTY3 · MAMT1/LAMT1/SAMT1/TAMT1→2·3 · M_/L_/S_/T_AMT1→2·3. 칸 4 단가 복사 없음. +2. 계약(PCLASS 4)에서 첫 기성 0x55cbd2~0x55cd75 「전회0/금회0/누계0」: QTY2·QTY3·QTY4 = 0 · T_AMT2·T_AMT3·T_AMT4 = 0. 그 뒤 BDCODE1 첫 글자 ∈ 'PR' 이거나(∈ 'MLSW' 이고 UNIT1 에 '%') 인 행만 QTY4 = QTY1. +3. 기성(PCLASS 6)에서 다음 회차 0x55d0a0~0x55d148 「전회<-누계, 금회=0」: QTY3 = QTY2 · QTY4 = 0 · T_AMT3 = T_AMT2 · T_AMT4 = 0 → k_ord = K+1 (0x55d1d3). +4. 변경(PCLASS 7)에서 기성 0x55d2e0 「임시저장<-누계기성」 뒤 QTY2·QTY4·QTY1·T_AMT2·T_AMT4 와 Mcost4→Mcost2 등 이동 — 세부 순서 미정리. + +## 4. 기성 수량 편집 — ST_Boq (신뢰도 상, 설정 이름 하) + +조건: PCLASS = 6 (0x4f4a2f) · BDCODE1 첫 글자 ∈ 'LMSBDWXAQ' (0x4f4a3c) · 고친 칸 이름에 'QTY'. + +| 고친 칸 | 처리 | 주소 | +|---|---|---| +| QTY2(누계) | QTY1×QTY2 > 0 이고 설정 바이트([+0x1068]+0x69) 0 이고 \|QTY2\| > \|QTY1\| 이면 QTY2 = QTY1 → QTY4 = QTY2 − QTY3 | 0x4f4aa4~0x4f4ba0 | +| QTY4(금회) | QTY1×QTY4 > 0 이고 설정 바이트 0 이고 \|QTY3+QTY4\| > \|QTY1\| 이면 QTY4 = QTY1 − QTY3 → QTY2 = QTY3 + QTY4 | 0x4f4bad~0x4f4ceb | + +- 설정 바이트 +0x69 의 화면 이름 미확인(「초과 입력 허용」 성격으로 보이나 이름 근거 없음). +- 편집 뒤 행 금액 다시 셈 0x4fc498 호출(0x4f4cf3). + +## 5. 기성 행 금액 — ST_Boq 0x4fc498 (신뢰도 중) + +- 첫 부분 0x4fc674~0x4fc6ad: 공통 행 계산기 0x456504 를 고른 칸으로 불러 T_/L_/N_/M_/S_/A_AMT + 칸 글자 기록(0x4fc6e6~0x4fc873). +- PCLASS 분기 표 0x4fc8f2: 6 → 0x4fcd00 → 0x4fce6e: 0x456504 를 칸 2 로 다시 불러 T_AMT2·L_AMT2·(N_AMT2)·M_AMT2·S_AMT2 기록(0x4fcf07~0x4fcfe2). +- 관찰: 누계 금액은 누계수량으로 다시 셈 — 「누계 = 전회 금액 + 금회 금액」 덧셈 경로 없음. 전회 금액은 회차 등록 때 앞 누계 이관(§3-3). 따라서 전회 + 금회 ≠ 누계 인 끝전 차이 가능. +- 0x456504 의 수량·단가 칸 고르기 인자(IIF 0x4fced3)의 정확한 뜻은 미확인 — 금회 칸 단가가 MAMT4 인지 MAMT1 인지 미확인. + +## 6. 기성 제잡비 계산서 `TwM_KanJub_K` + +### 6.1 화면 (DFM, 신뢰도 상) + +- 제목 「< 기성 제잡비 계산서 >」 · HelpContext 4700. +- 위 표 rGrd_BoqXX: tb_BoqXX = Boq11.dbf · 거르기 `(BDCODE1="T") .and. (BDCODE1>"T2")` · 열 공종(ITNUM)·명칭(NAME1)·규격(SIZE1)·도급액·전회까지의 기성액(금액·비율)·금회 기성액(금액·비율)·누계(금액·비율). 금액·비율 열은 DrawCell 0x4cae70 에서 계산: 금액 서식 `'#,0.###;;#'` · 비율 = T_AMTn ÷ T_AMT1 × 100 서식 `'#,0.##%;;#'` · T_AMT1 = 0 이면 빈칸. +- 아래 표 rGrd_Jab 14열: 공종·명칭·규격·도급액·전회금액·전율·금회금액(편집 열)·금율·누계금액·누율·구분(코드)·종류·계약잡비율(`0.#####`)·D_Typ(숨김). +- rd_Filter 5택(소계(+=)·계(+==)·합계(+===)·총계(+====)·총합계(+=====) 이상) · 처음 ItemIndex 2. +- cmBx_Buga 4택 값 0~3 · cmBx_JeolSa(공급가액 절사) 9택 값 0~8, 0 = 「총공사비에서 조정」 · cmBx_Tot_Jeol(총공사비 절사) 9택 값 0~8, 0 = 「이윤금액 직접입력」 · 힌트 「절사된 금액은 이윤에서 자동보정」. + +### 6.2 행 구성 — 로더 0x4cb564 (신뢰도 상) + +- 행 추가 함수 0x4cb03c(번호 종류, 명칭, 규격, 코드, 값 배열[4], 종류(word), D_Typ(long)). |값| < 상수(0x4cb43c) → 0. 번호 종류 ≥ 2 이고 도급값 0 이면 행 생략. +- 값 배열 원천: 전역 원가 레코드 배열 0x586c44 + 칸×0x10450(칸 1~4). 레코드 +0 직접공사비 계 · +0x10 재료비 · +0x18 경비(초기화 0x4c9d04~0x4c9de7: TCOSTn·LCOSTn·MCOSTn·SCOSTn). +- 종류(열 11): 1 = 요율 행(계약잡비율 표시) · 2 = 부분합 행 · 0 = 그 밖. + +| 종류 | 행(코드) | +|---|---| +| 2 | 직접공사비 계(D_Typ 100) · 순공사원가 · 소계(C_TOT_1) · 공급가액(C_KONGGUP) · 도급공사비(C_DOGUP) · 총공사비(C_TOTAL) | +| 1 | 간접노무비 C_KANNO · 산재 C_SANBO · 고용 C_KOBO · 건강 C_KUNBO · 장기요양 C_SLVBO · 연금 C_YUNBO · 퇴직공제 C_TBUGUM · 산업안전보건관리비 C_ANJUN · 기타경비 C_T_KITA · 수도광열 C_S_SUDO · 복리후생 C_S_BOKRI · 소모품 C_S_SOMO · 여비 C_S_TONGSIN · 세금 C_S_SEGUM · 폐기물처리 C_S_PEGI · 도서인쇄 C_S_DOSEO · 지급수수료 C_S_JIGUP · 공사이행보증 C_KONGSU · 하도급보증 C_HADOSU · 환경보전 C_HWAN · 건설기계보증 C_EQIPSU · 석면 C_BUDM_SM · 임금채권 C_BUDM_IC · 일반관리비 C_ILBAN · 이윤 C_IYUN · 안전점검비 C_ANJUNP · 시공도작성비 C_S_SIGONG · 공사손해보험료 C_KONGSA | +| 0 | 사급자재대 C_SAGUP · 도서할증 C_DOSEOH(D_Typ 0xfb) · 주휴수당 C_EIS_HOLLAB · 품질관리비 C_S_PUMJIL·C_PUMJIL_B · 안전관리비 C_ANJUN_B · 산안비(별도내역) C_S_ANJUN_B · ADD_AMT_* · PS C_PSAMT_B · 제비율적용제외 C_EXCEPT_B · 고용개선지원비 C_EIS_SOCINS·C_EIS_INCENT · 작업설 C_BUSAN_B · 부가가치세 C_BUGA · 폐기물수수료 C_T_PEGI · 골재 C_T_KOLJAE · 비과세자재 C_NBUGAM · 관급자재대 C_UPDNKWN·C_KWANGUP_K | + +- 일부 행은 설정(0x5e8a00 · JAB_TYPE · 0x5e8a44 등) 조건부 — 조건 값 뜻 미정리. +- 계약잡비율(열 12) = 도급 행 금액 ÷ 도급 직접공사비 계([0x597094] = 칸 1 +0) × 100, 버림 없음 (0x4cb2cc~0x4cb300) · 규격 열 문자열 `'가. x ' + FormatFloat('0.000%;;#')`. +- 행 번호 전역: 0x5e92f8 도서할증 · 0x5e92e4 소계 · 0x5e92e8 이윤 · 0x5e92ec 공급가액 · 0x5e92f0 부가세 · 0x5e92f4 도급공사비 또는 총공사비(뒤 행 우선). + +### 6.3 [금회 간접비 적용] sBtn_Set_RateClick 0x4cdec0 (신뢰도 상) + +확인창 「1.간접노무비 ~ 부가가치세이전(금회분) 까지의 금액을 "가.직접공사비계(금회분) x 계약제잡비율 로 수정」. + +1. 누적값 시작: 금회 = 칸 4 직접공사비 계([0x5c7d84]) · 누계 = 칸 2 직접공사비 계([0x5a74e4]). +2. 마지막 회차 표지 = (칸 1 직접 == 칸 2 직접) (0x4cdf53~0x4cdf62). +3. 행 1부터 끝까지: + - 종류 1: 표지 참이면 금회 = 도급 − 전회 · 아니면 금회 = MROUNDUD(계약잡비율 × 금회직접 ÷ 100, 자릿수 0, 선택값 0) (0x4ce025). 이어서 금회 ≥ 도급 + 전회 이면 금회 = 도급 − 전회 (0x4ce071 `fadd` — 원본 비교식 그대로). 누계 = 전회 + 금회. + - 종류 2: 금회·누계 = 누적값. + - 종류 0·1: 누적값 += 금회 · 누계 (0x4caa38 덧셈). +4. 끝에 총공사비 계산(0x4ce6c4, Sender nil) 호출. + +MROUNDUD 선택값 0 = 버림(08·13번 작업자료). + +### 6.4 [총공사비 계산] sBtn_Calc_JabClick 0x4ce6c4 · 행 다시 셈 0x4ce2c8 · 끝전 0x4ce55c (신뢰도 상) + +행 다시 셈 0x4ce2c8(행): +- 종류 2: 금회·누계 = 누적값, 끝. +- 도서할증 행: 금회 = MROUNDUD(PRJLST.LCOST2 × 도서할증율[0x5e887c] ÷ 100, 0, 0). +- 이윤 행: 금회 = 금회 − 조정량. +- 부가세 행: Buga 1 → MROUNDUD(0.1 × 누적 금회, 0, 0) · 2 → MROUNDUD(0.1 × 칸 4 재료비[0x5c7d94]) · 3 → MROUNDUD(0.1 × (칸 4 재료비 + 칸 4 경비[0x5c7d9c])) · 0 → 그대로(직접입력). +- 그 밖(종류 0·1): 금회 그대로. +- 공통: 누계 = 전회 + 금회 · 누적값 += 금회 · 누계. + +총공사비 계산 0x4ce6c4: +1. 조정량 0 으로 모든 행 다시 셈 · 이윤·공급가액·부가세·도급(또는 총) 행 금회를 0x5e9304~0x5e931c 에 보관. +2. 세 콤보 중 하나라도 0 아니면 끝전 0x4ce55c: + - 공급가액 절사 n ≠ 0: 조정량 = 공급가액 − MROUNDUD(공급가액, −n, 0). + - 아니고 총공사비 절사 n ≠ 0: 조정량 = 총공사비 − MROUNDUD(총공사비, −n, 0). + - 총공사비 절사 ≠ 0 이고 Buga = 1 이면 조정량 = MROUNDUD(조정량 ÷ 1.1, 0, 0) (상수 1.1 extended 0x4ce6b8). + - 누적값을 소계 행 금회·누계로 되돌린 뒤 소계 다음 행부터 다시 셈(이윤 −= 조정량). +3. 총공사비 절사 ≠ 0 이고 Buga = 1 이면 반복(0x4ce8c0~0x4ce90d): d = ROUND(현재 총액 − MROUNDUD(처음 총액, −n, 0)) 가 1~10 이면 조정량 = 1.0 으로 소계 다음부터 다시 셈(이윤 −1) 반복. +4. 상태줄: 도급 총공사비(칸 1 +0x3b8) · 전회 총공사비(칸 3 +0x3b8) · 전회율 · 금회 누적 · 금회율 · 누계 누적 · 누계율, 율 = ÷ 도급 총공사비 × 100 `'0.00%;;#'`. + +- 두 절사 콤보는 하나만(cmBx_ValueChange 0x4cef28~0x4cef84: 공급가액 절사 ≠ 0 이면 총공사비 절사 사용 안 함·0). +- 콤보 세 개는 화면 열 때 0 으로 놓임(0x4cb5c4~0x4cb5ef) — 직전 값 복원 경로 관찰 안 됨. + +### 6.5 편집 허용 (신뢰도 상) + +- RowChange 0x4cdce4: D_Typ = 0xfb(도서할증) 또는 종류 2 행은 편집 끔. +- CellEnter 0x4cddac: 공종 열 첫 글자가 '가나다…' 목록이면 편집 끔. +- BeforePost 0x4cec80: 누계 = 전회 + 금회 · 상태줄 「계산안됨」. +- 그리드 비율 열 DrawCell 0x4cdb94: 열 5·7·9 = 열 4·6·8 ÷ 열 3(도급) × 100 `'0.00%;;#'` · 종류 1 행 열 2 글자색 지정. + +### 6.6 저장 (신뢰도 상) + +`Edit_KanJub_K` 0x4ca5ac 닫을 때: +- PRJLST.COSTW4 = 마지막 행 금회(열 6) (0x4ca825) · PRJLST.COSTW3 = 마지막 행 누계(열 8) (0x4ca866) · PRJLST.PXXNM = True · PRJ_MEMO 기록 후 Commit. +- 0x4cac0c: 섹션 `2_KANJUB` · `4_KANJUB` 지움(가상 +0x4c) → 코드(열 10)가 있는 행마다 0x4caa48(칸 4, 코드, 금회) · 0x4caa48(칸 2, 코드, 누계). +- 0x4caa48: 일반 코드 → 섹션 `칸 + '_' + 'KANJUB'` · 키 `칸 + '_' + 코드` (칸 글자 표 0x4d045c = '0'~'9','A','B') · ADD_AMT_ 코드 → 섹션 `'KANJUB_ADD'` · 키 `코드 + '_' + 칸`. +- 섹션 이름 'KANJUB' 대입 0x4c9b06 · 메모 파일 `PRJ_MEMO.INI` · 공통 키 JAB_TYPE · CAL_ACTL · VIS_TOTL ([KANJUB]). +- 불러오기 0x4c9a98: 칸 1 = 계산(0x43d228 → Calc_Kanjub 0x44cc58) · 칸 2~4 = 0x43ade4 가 `칸_C_코드` 저장값을 읽음 → 0x44c36c 합계. +- 관찰: [3_KANJUB](전회) 기록 경로는 이 모듈에서 관찰 안 됨 — 회차 등록 때 2→3 이관 여부 미확인. + +## 7. 인쇄 서식 (SET_REP · DFM, 신뢰도 상 — 열 산식은 0632 만) + +| 번호 | 이름 | 머리 | 열(FLD_N, 너비) | +|---|---|---|---| +| 0632 | 기성부분총괄내역서 | 기성부분 총괄내역서 | 계약 15 · 전회 15 · 금회 15 · 누계 15 · 금액 15 · 비율 8 | +| 0633 | 기성내역서 | 기 성 내 역 서 | 계약 · 전회 · 금회 · 누계 (각 15) | +| 0634 | 기성내역서(사정) | 기 성 내 역 서 | + 사정 12 | +| 0635 | 기성내역서(기성율) | 기 성 내 역 서 | + 비율 6 | +| 0636 | 기성검사조서(을) | 기성부분 감독/검사 조서(을) | 계약금액 15 · 기성고(%) 18 · 전회 6 · 금회 6 · 누계 6 · 기성금액 15 | +| 0637 | 기성검사조서(병) | 기성부분 감독/검사 조서(병) | 0636 과 같음 | +| 0638 | 기성부분수량조서 | 기 성 부 분 수 량 조 서 | 기성수량 20 · 전회누계 15 · 금회 15 · 누계 15 · 기성(%) 8 · 잔량 15 | +| 0646 | 준공조서(을) | 준공 감독/검사조서(을) | 계약금액 18 · 준공금액 18 | +| 0647 | 준공조서(병) | 준공 감독/검사조서(병) | 0646 과 같음 | + +- 0632 실제 인쇄 양식 `TPM_JAB_K`: 공종·명칭·규격 · 계약 금액 · 전회 금액·비율 · 금회 금액·비율 · 누계 금액·비율 · 비고 · 자료 PRT.DBF. +- 0632 머리말: 「1. 공 사 명 : PNAME」 · 「2. 도 급 액 :」(TCOST1 읽음 0x480335) · 「3. 기성부분금액 : 금 (AMTTOHAN) 원정 (₩#,#)」 = PRJLST.COSTW4 (0x48037b). +- ST_P_ConEst TPM_NAE_C3 0x4790e4~0x479140: 「◎ 기성부분금액 :」과 「◎ 준공 정산액 :」 둘 중 하나를 전역 [0x4aa738]==1 로 고름 · 금액 = PRJLST `TCOST` + 칸 글자(설정 +0x1788). 어느 값이 어느 문구인지(IIF 인자 순서) 미확인. +- 0633~0638 · 0646·0647 열 산식(기성고 · 사정 · 잔량 · 준공금액)은 Prn_Jab(0x4b1998) 안에서 미해독. + +## 8. 남은 것 + +| 항목 | 상태 | +|---|---| +| 금회 칸(4) 단가 원천 | 미확인 — 회차 등록 복사는 1→2·3 만 | +| ST_Boq 0x456504 칸 인자 뜻 | 미확인 | +| [3_KANJUB] 전회 제잡비 이관 | 미확인 | +| 설정 바이트 +0x69(수량 상한 해제) 이름 | 미확인 | +| 0633~0638 · 0646·0647 열 산식 · 준공금액 원천 | 미확인 | +| 도서할증 행 밑수 PRJLST.LCOST2 의 업무 뜻 | 관찰만(칸 2 노무비 자리) | +| 원본 실행 수치 일치 | 미검증 | + +## 9. 자료 + +- evidence/ — 구간별 역어셈블(주석: 가져오기 이름·문자열·상수) · DFM 해독(TWM_KANJUB_K.json · TPM_JAB_K.json) +- scripts/ — pe.py(섹션 대응) · dz.py(주석 역어셈블) · inv.py(VMT·메서드·내보내기) · rsrc.py(RCDATA) · litref.py · strfind.py(문자열·참조) · parse_dfm.py(DFM) diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/Boq_0x4f4a2f_progress_qty_edit.asm.txt b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/Boq_0x4f4a2f_progress_qty_edit.asm.txt new file mode 100644 index 000000000..343707286 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/Boq_0x4f4a2f_progress_qty_edit.asm.txt @@ -0,0 +1,251 @@ +4f4a2f: cmp dword ptr [0x5417bc], 6 +4f4a36: jne 0x4f4dbd +4f4a3c: push 0x4f5104 ; 'LMSBDWXAQ' +4f4a41: mov eax, dword ptr [ebp - 8] +4f4a44: push eax +4f4a45: call 0x42b308 ; DP_COMMON!MPOS +4f4a4a: test al, al +4f4a4c: je 0x4f4de4 +4f4a52: mov eax, dword ptr [ebp - 4] +4f4a55: mov eax, dword ptr [eax + 0x8c4] +4f4a5b: call 0x403520 ; RealGridDB6!@Urdbgrid@TRealDBGrid@GetSelectedField$qqrv +4f4a60: mov eax, dword ptr [eax + 0x38] +4f4a63: lea edx, [ebp - 0xc] +4f4a66: call 0x401744 ; rtl60!@Sysutils@UpperCase$qqrx17System@AnsiString +4f4a6b: mov eax, dword ptr [ebp - 0xc] +4f4a6e: push eax +4f4a6f: push 0x4f5118 ; 'QTY' +4f4a74: call 0x42b308 ; DP_COMMON!MPOS +4f4a79: test al, al +4f4a7b: je 0x4f4de4 +4f4a81: mov byte ptr [0x541893], 0 +4f4a88: mov eax, dword ptr [ebp - 4] +4f4a8b: mov eax, dword ptr [eax + 0x2f4] +4f4a91: mov dl, byte ptr [eax + 0x9d] +4f4a97: sub dl, 1 +4f4a9a: jne 0x4f4aa1 +4f4a9c: call 0x4035b8 ; dbrtl60!@Db@TDataSet@Edit$qqrv +4f4aa1: mov eax, dword ptr [ebp - 0xc] +4f4aa4: mov edx, 0x4f5124 ; 'QTY2' +4f4aa9: call 0x401280 ; rtl60!@System@@LStrCmp$qqrv +4f4aae: jne 0x4f4baa +4f4ab4: mov eax, dword ptr [ebp - 4] +4f4ab7: mov eax, dword ptr [eax + 0x2f4] +4f4abd: mov edx, 0x4f5134 ; 'qty2' +4f4ac2: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4ac7: fstp qword ptr [ebp - 0x44] +4f4aca: wait +4f4acb: mov eax, dword ptr [ebp - 4] +4f4ace: mov eax, dword ptr [eax + 0x2f4] +4f4ad4: mov edx, 0x4f5144 ; 'qty1' +4f4ad9: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4ade: fmul qword ptr [ebp - 0x44] +4f4ae1: fcomp dword ptr [0x4f514c] ; =0.0 +4f4ae7: fnstsw ax +4f4ae9: sahf +4f4aea: jbe 0x4f4b5f +4f4aec: mov eax, dword ptr [ebp - 4] +4f4aef: mov eax, dword ptr [eax + 0x1068] +4f4af5: cmp byte ptr [eax + 0x69], 0 +4f4af9: jne 0x4f4b5f +4f4afb: mov eax, dword ptr [ebp - 4] +4f4afe: mov eax, dword ptr [eax + 0x2f4] +4f4b04: mov edx, 0x4f5134 ; 'qty2' +4f4b09: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4b0e: fabs +4f4b10: fstp xword ptr [ebp - 0x34] +4f4b13: wait +4f4b14: mov eax, dword ptr [ebp - 4] +4f4b17: mov eax, dword ptr [eax + 0x2f4] +4f4b1d: mov edx, 0x4f5144 ; 'qty1' +4f4b22: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4b27: fabs +4f4b29: fld xword ptr [ebp - 0x34] +4f4b2c: fcompp +4f4b2e: fnstsw ax +4f4b30: sahf +4f4b31: jbe 0x4f4b5f +4f4b33: mov eax, dword ptr [ebp - 4] +4f4b36: mov ebx, dword ptr [eax + 0x2f4] +4f4b3c: mov eax, ebx +4f4b3e: mov edx, 0x4f5144 ; 'qty1' +4f4b43: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4b48: lea eax, [ebp - 0x54] +4f4b4b: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4f4b50: lea ecx, [ebp - 0x54] +4f4b53: mov eax, ebx +4f4b55: mov edx, 0x4f5134 ; 'qty2' +4f4b5a: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4f4b5f: mov eax, dword ptr [ebp - 4] +4f4b62: mov ebx, dword ptr [eax + 0x2f4] +4f4b68: mov eax, ebx +4f4b6a: mov edx, 0x4f5134 ; 'qty2' +4f4b6f: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4b74: fstp qword ptr [ebp - 0x44] +4f4b77: wait +4f4b78: mov eax, dword ptr [ebp - 4] +4f4b7b: mov eax, dword ptr [eax + 0x2f4] +4f4b81: mov edx, 0x4f5158 ; 'qty3' +4f4b86: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4b8b: fsubr qword ptr [ebp - 0x44] +4f4b8e: lea eax, [ebp - 0x64] +4f4b91: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4f4b96: lea ecx, [ebp - 0x64] +4f4b99: mov eax, ebx +4f4b9b: mov edx, 0x4f5168 ; 'qty4' +4f4ba0: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4f4ba5: jmp 0x4f4cf0 +4f4baa: mov eax, dword ptr [ebp - 0xc] +4f4bad: mov edx, 0x4f5178 ; 'QTY4' +4f4bb2: call 0x401280 ; rtl60!@System@@LStrCmp$qqrv +4f4bb7: jne 0x4f4cf0 +4f4bbd: mov eax, dword ptr [ebp - 4] +4f4bc0: mov eax, dword ptr [eax + 0x2f4] +4f4bc6: mov edx, 0x4f5168 ; 'qty4' +4f4bcb: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4bd0: fstp qword ptr [ebp - 0x44] +4f4bd3: wait +4f4bd4: mov eax, dword ptr [ebp - 4] +4f4bd7: mov eax, dword ptr [eax + 0x2f4] +4f4bdd: mov edx, 0x4f5144 ; 'qty1' +4f4be2: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4be7: fmul qword ptr [ebp - 0x44] +4f4bea: fcomp dword ptr [0x4f514c] ; =0.0 +4f4bf0: fnstsw ax +4f4bf2: sahf +4f4bf3: jbe 0x4f4ca4 +4f4bf9: mov eax, dword ptr [ebp - 4] +4f4bfc: mov eax, dword ptr [eax + 0x1068] +4f4c02: cmp byte ptr [eax + 0x69], 0 +4f4c06: jne 0x4f4ca4 +4f4c0c: mov eax, dword ptr [ebp - 4] +4f4c0f: mov eax, dword ptr [eax + 0x2f4] +4f4c15: mov edx, 0x4f5158 ; 'qty3' +4f4c1a: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4c1f: fstp qword ptr [ebp - 0x6c] +4f4c22: wait +4f4c23: mov eax, dword ptr [ebp - 4] +4f4c26: mov eax, dword ptr [eax + 0x2f4] +4f4c2c: mov edx, 0x4f5168 ; 'qty4' +4f4c31: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4c36: fadd qword ptr [ebp - 0x6c] +4f4c39: fabs +4f4c3b: fstp xword ptr [ebp - 0x34] +4f4c3e: wait +4f4c3f: mov eax, dword ptr [ebp - 4] +4f4c42: mov eax, dword ptr [eax + 0x2f4] +4f4c48: mov edx, 0x4f5144 ; 'qty1' +4f4c4d: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4c52: fabs +4f4c54: fld xword ptr [ebp - 0x34] +4f4c57: fcompp +4f4c59: fnstsw ax +4f4c5b: sahf +4f4c5c: jbe 0x4f4ca4 +4f4c5e: mov eax, dword ptr [ebp - 4] +4f4c61: mov ebx, dword ptr [eax + 0x2f4] +4f4c67: mov eax, ebx +4f4c69: mov edx, 0x4f5144 ; 'qty1' +4f4c6e: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4c73: fstp qword ptr [ebp - 0x44] +4f4c76: wait +4f4c77: mov eax, dword ptr [ebp - 4] +4f4c7a: mov eax, dword ptr [eax + 0x2f4] +4f4c80: mov edx, 0x4f5158 ; 'qty3' +4f4c85: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4c8a: fsubr qword ptr [ebp - 0x44] +4f4c8d: lea eax, [ebp - 0x7c] +4f4c90: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4f4c95: lea ecx, [ebp - 0x7c] +4f4c98: mov eax, ebx +4f4c9a: mov edx, 0x4f5168 ; 'qty4' +4f4c9f: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4f4ca4: mov eax, dword ptr [ebp - 4] +4f4ca7: mov ebx, dword ptr [eax + 0x2f4] +4f4cad: mov eax, ebx +4f4caf: mov edx, 0x4f5158 ; 'qty3' +4f4cb4: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4cb9: fstp qword ptr [ebp - 0x44] +4f4cbc: wait +4f4cbd: mov eax, dword ptr [ebp - 4] +4f4cc0: mov eax, dword ptr [eax + 0x2f4] +4f4cc6: mov edx, 0x4f5168 ; 'qty4' +4f4ccb: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4cd0: fadd qword ptr [ebp - 0x44] +4f4cd3: lea eax, [ebp - 0x8c] +4f4cd9: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4f4cde: lea ecx, [ebp - 0x8c] +4f4ce4: mov eax, ebx +4f4ce6: mov edx, 0x4f5134 ; 'qty2' +4f4ceb: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4f4cf0: mov eax, dword ptr [ebp - 4] +4f4cf3: call 0x4fc498 +4f4cf8: push 0 +4f4cfa: push 4 +4f4cfc: mov eax, dword ptr [ebp - 4] +4f4cff: fld qword ptr [eax + 0x12d0] +4f4d05: add esp, -0xc +4f4d08: fstp xword ptr [esp] +4f4d0b: wait +4f4d0c: call 0x42b330 ; DP_COMMON!MROUNDUD +4f4d11: fstp xword ptr [ebp - 0x34] +4f4d14: wait +4f4d15: push 0 +4f4d17: push 4 +4f4d19: mov eax, dword ptr [ebp - 4] +4f4d1c: mov eax, dword ptr [eax + 0x2f4] +4f4d22: mov edx, 0x4f5158 ; 'qty3' +4f4d27: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4d2c: add esp, -0xc +4f4d2f: fstp xword ptr [esp] +4f4d32: wait +4f4d33: call 0x42b330 ; DP_COMMON!MROUNDUD +4f4d38: fld xword ptr [ebp - 0x34] +4f4d3b: fcompp +4f4d3d: fnstsw ax +4f4d3f: sahf +4f4d40: je 0x4f4d4f +4f4d42: mov edx, 0x4f5188 ; 'XX3NM' +4f4d47: mov eax, dword ptr [ebp - 4] +4f4d4a: call 0x4f45f0 +4f4d4f: push 0 +4f4d51: push 4 +4f4d53: mov eax, dword ptr [ebp - 4] +4f4d56: fld qword ptr [eax + 0x12d8] +4f4d5c: add esp, -0xc +4f4d5f: fstp xword ptr [esp] +4f4d62: wait +4f4d63: call 0x42b330 ; DP_COMMON!MROUNDUD +4f4d68: fstp xword ptr [ebp - 0x34] +4f4d6b: wait +4f4d6c: push 0 +4f4d6e: push 4 +4f4d70: mov eax, dword ptr [ebp - 4] +4f4d73: mov eax, dword ptr [eax + 0x2f4] +4f4d79: mov edx, 0x4f5168 ; 'qty4' +4f4d7e: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4f4d83: add esp, -0xc +4f4d86: fstp xword ptr [esp] +4f4d89: wait +4f4d8a: call 0x42b330 ; DP_COMMON!MROUNDUD +4f4d8f: fld xword ptr [ebp - 0x34] +4f4d92: fcompp +4f4d94: fnstsw ax +4f4d96: sahf +4f4d97: je 0x4f4da6 +4f4d99: mov edx, 0x4f5198 ; 'XX4NM' +4f4d9e: mov eax, dword ptr [ebp - 4] +4f4da1: call 0x4f45f0 +4f4da6: mov eax, dword ptr [ebp - 4] +4f4da9: mov eax, dword ptr [eax + 0x2f4] +4f4daf: call 0x403a58 ; Apollo5D6!@Apodset@TApolloTable@Commit$qqrv +4f4db4: mov byte ptr [0x541893], 1 +4f4dbb: jmp 0x4f4de4 +4f4dbd: cmp byte ptr [0x541893], 0 +4f4dc4: je 0x4f4de4 +4f4dc6: mov byte ptr [0x541893], 0 +4f4dcd: mov eax, dword ptr [ebp - 4] +4f4dd0: call 0x4e8c30 +4f4dd5: mov eax, dword ptr [ebp - 4] +4f4dd8: call 0x4fc498 +4f4ddd: mov byte ptr [0x541893], 1 diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/Boq_0x4fc5dc_progress_amount_slots.asm.txt b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/Boq_0x4fc5dc_progress_amount_slots.asm.txt new file mode 100644 index 000000000..b1daa51b8 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/Boq_0x4fc5dc_progress_amount_slots.asm.txt @@ -0,0 +1,607 @@ +4fc5dc: cmp dword ptr [0x5417bc], 1 +4fc5e3: jne 0x4fc62e +4fc5e5: cmp dword ptr [0x5417bc], 5 +4fc5ec: sete al +4fc5ef: or al, byte ptr [ebp - 0xd] +4fc5f2: push eax +4fc5f3: push 0 +4fc5f5: mov eax, dword ptr [0x52e7a8] +4fc5fa: mov eax, dword ptr [eax] +4fc5fc: movsx eax, byte ptr [eax + 0x58] +4fc600: push eax +4fc601: mov eax, dword ptr [0x541894] +4fc606: push eax +4fc607: mov eax, dword ptr [ebx] +4fc609: push eax +4fc60a: push 0x5418e4 +4fc60f: mov eax, dword ptr [0x52e890] +4fc614: mov eax, dword ptr [eax] +4fc616: mov cl, byte ptr [eax + 0x7c5] +4fc61c: mov edx, dword ptr [edi + 0x2f4] +4fc622: mov al, 1 +4fc624: call 0x456504 +4fc629: jmp 0x4fc6b2 +4fc62e: cmp dword ptr [0x5417bc], 4 +4fc635: jne 0x4fc674 +4fc637: cmp dword ptr [0x5417c4], 1 +4fc63e: jne 0x4fc674 +4fc640: push 1 +4fc642: push 0 +4fc644: mov eax, dword ptr [0x541898] +4fc649: push eax +4fc64a: mov eax, dword ptr [0x541894] +4fc64f: push eax +4fc650: mov eax, dword ptr [ebx] +4fc652: push eax +4fc653: push 0x5418e4 +4fc658: mov eax, dword ptr [0x52e890] +4fc65d: mov eax, dword ptr [eax] +4fc65f: mov cl, byte ptr [eax + 0x7c5] +4fc665: mov edx, dword ptr [edi + 0x2f4] +4fc66b: mov al, 1 +4fc66d: call 0x456504 +4fc672: jmp 0x4fc6b2 +4fc674: cmp dword ptr [0x5417bc], 5 +4fc67b: sete al +4fc67e: or al, byte ptr [ebp - 0xd] +4fc681: push eax +4fc682: push 0 +4fc684: mov eax, dword ptr [0x541898] +4fc689: push eax +4fc68a: mov eax, dword ptr [0x541894] +4fc68f: push eax +4fc690: mov eax, dword ptr [ebx] +4fc692: push eax +4fc693: push 0x5418e4 +4fc698: mov eax, dword ptr [0x52e890] +4fc69d: mov eax, dword ptr [eax] +4fc69f: mov cl, byte ptr [eax + 0x7c5] +4fc6a5: mov edx, dword ptr [edi + 0x2f4] +4fc6ab: mov al, 1 +4fc6ad: call 0x456504 +4fc6b2: mov eax, dword ptr [edi + 0x2f4] +4fc6b8: call 0x4035b8 ; dbrtl60!@Db@TDataSet@Edit$qqrv +4fc6bd: mov eax, dword ptr [ebx] +4fc6bf: add eax, eax +4fc6c1: lea eax, [eax + eax*2] +4fc6c4: fld qword ptr [eax*8 + 0x541b9c] +4fc6cb: lea eax, [ebp - 0x134] +4fc6d1: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fc6d6: lea eax, [ebp - 0x134] +4fc6dc: push eax +4fc6dd: lea eax, [ebp - 0x138] +4fc6e3: mov ecx, dword ptr [ebp - 8] +4fc6e6: mov edx, 0x4fd1cc ; 'T_AMT' +4fc6eb: call 0x401270 ; rtl60!@System@@LStrCat3$qqrv +4fc6f0: mov edx, dword ptr [ebp - 0x138] +4fc6f6: mov eax, dword ptr [edi + 0x2f4] +4fc6fc: pop ecx +4fc6fd: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fc702: mov eax, dword ptr [ebx] +4fc704: add eax, eax +4fc706: lea eax, [eax + eax*2] +4fc709: fld qword ptr [eax*8 + 0x541ba4] +4fc710: lea eax, [ebp - 0x148] +4fc716: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fc71b: lea eax, [ebp - 0x148] +4fc721: push eax +4fc722: lea eax, [ebp - 0x14c] +4fc728: mov ecx, dword ptr [ebp - 8] +4fc72b: mov edx, 0x4fd1dc ; 'L_AMT' +4fc730: call 0x401270 ; rtl60!@System@@LStrCat3$qqrv +4fc735: mov edx, dword ptr [ebp - 0x14c] +4fc73b: mov eax, dword ptr [edi + 0x2f4] +4fc741: pop ecx +4fc742: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fc747: mov eax, dword ptr [0x52e70c] +4fc74c: mov eax, dword ptr [eax] +4fc74e: cmp byte ptr [eax + 0x19ba], 1 +4fc755: jne 0x4fc7a9 +4fc757: mov eax, dword ptr [0x52e7a8] +4fc75c: mov eax, dword ptr [eax] +4fc75e: cmp byte ptr [eax + 0x57], 5 +4fc762: jne 0x4fc7a9 +4fc764: mov eax, dword ptr [ebx] +4fc766: add eax, eax +4fc768: lea eax, [eax + eax*2] +4fc76b: fld qword ptr [eax*8 + 0x541bc4] +4fc772: lea eax, [ebp - 0x15c] +4fc778: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fc77d: lea eax, [ebp - 0x15c] +4fc783: push eax +4fc784: lea eax, [ebp - 0x160] +4fc78a: mov ecx, dword ptr [ebp - 8] +4fc78d: mov edx, 0x4fd1ec ; 'N_AMT' +4fc792: call 0x401270 ; rtl60!@System@@LStrCat3$qqrv +4fc797: mov edx, dword ptr [ebp - 0x160] +4fc79d: mov eax, dword ptr [edi + 0x2f4] +4fc7a3: pop ecx +4fc7a4: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fc7a9: mov eax, dword ptr [ebx] +4fc7ab: add eax, eax +4fc7ad: lea eax, [eax + eax*2] +4fc7b0: fld qword ptr [eax*8 + 0x541bac] +4fc7b7: lea eax, [ebp - 0x170] +4fc7bd: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fc7c2: lea eax, [ebp - 0x170] +4fc7c8: push eax +4fc7c9: lea eax, [ebp - 0x174] +4fc7cf: mov ecx, dword ptr [ebp - 8] +4fc7d2: mov edx, 0x4fd1fc ; 'M_AMT' +4fc7d7: call 0x401270 ; rtl60!@System@@LStrCat3$qqrv +4fc7dc: mov edx, dword ptr [ebp - 0x174] +4fc7e2: mov eax, dword ptr [edi + 0x2f4] +4fc7e8: pop ecx +4fc7e9: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fc7ee: mov eax, dword ptr [ebx] +4fc7f0: add eax, eax +4fc7f2: lea eax, [eax + eax*2] +4fc7f5: fld qword ptr [eax*8 + 0x541bb4] +4fc7fc: lea eax, [ebp - 0x184] +4fc802: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fc807: lea eax, [ebp - 0x184] +4fc80d: push eax +4fc80e: lea eax, [ebp - 0x188] +4fc814: mov ecx, dword ptr [ebp - 8] +4fc817: mov edx, 0x4fd20c ; 'S_AMT' +4fc81c: call 0x401270 ; rtl60!@System@@LStrCat3$qqrv +4fc821: mov edx, dword ptr [ebp - 0x188] +4fc827: mov eax, dword ptr [edi + 0x2f4] +4fc82d: pop ecx +4fc82e: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fc833: mov eax, dword ptr [ebx] +4fc835: add eax, eax +4fc837: lea eax, [eax + eax*2] +4fc83a: fld qword ptr [eax*8 + 0x541bbc] +4fc841: lea eax, [ebp - 0x198] +4fc847: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fc84c: lea eax, [ebp - 0x198] +4fc852: push eax +4fc853: lea eax, [ebp - 0x19c] +4fc859: mov ecx, dword ptr [ebp - 8] +4fc85c: mov edx, 0x4fd21c ; 'A_AMT' +4fc861: call 0x401270 ; rtl60!@System@@LStrCat3$qqrv +4fc866: mov edx, dword ptr [ebp - 0x19c] +4fc86c: mov eax, dword ptr [edi + 0x2f4] +4fc872: pop ecx +4fc873: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fc878: lea edx, [ebp - 0x1a0] +4fc87e: mov eax, dword ptr [ebp - 4] +4fc881: call 0x40177c ; rtl60!@Sysutils@Trim$qqrx17System@AnsiString +4fc886: mov eax, dword ptr [ebp - 0x1a0] +4fc88c: mov edx, 0x4fd22c ; 'QTY' +4fc891: call 0x401280 ; rtl60!@System@@LStrCmp$qqrv +4fc896: jne 0x4fc8dd +4fc898: mov eax, dword ptr [ebx] +4fc89a: add eax, eax +4fc89c: lea eax, [eax + eax*2] +4fc89f: fld qword ptr [eax*8 + 0x541aac] +4fc8a6: lea eax, [ebp - 0x1b0] +4fc8ac: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fc8b1: lea eax, [ebp - 0x1b0] +4fc8b7: push eax +4fc8b8: lea eax, [ebp - 0x1b4] +4fc8be: mov ecx, dword ptr [ebp - 8] +4fc8c1: mov edx, 0x4fd238 ; 'TAMT' +4fc8c6: call 0x401270 ; rtl60!@System@@LStrCat3$qqrv +4fc8cb: mov edx, dword ptr [ebp - 0x1b4] +4fc8d1: mov eax, dword ptr [edi + 0x2f4] +4fc8d7: pop ecx +4fc8d8: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fc8dd: mov eax, dword ptr [0x5417bc] +4fc8e2: cmp eax, 7 +4fc8e5: ja 0x4fcfe7 +4fc8eb: jmp dword ptr [eax*4 + 0x4fc8f2] +4fc8f2: out 0xcf, eax +4fc8f4: dec edi +4fc8f5: add byte ptr [eax], al +4fc8f7: int 0x4f +4fc8f9: add bh, ah +4fc8fb: iretd +4fc8fc: dec edi +4fc8fd: add byte ptr [edx], dl +4fc8ff: leave +4fc900: dec edi +4fc901: add byte ptr [ebx - 0x35], ah +4fc904: dec edi +4fc905: add byte ptr [eax], al +4fc907: int 0x4f +4fc909: add byte ptr [eax], al +4fc90b: int 0x4f +4fc90d: add byte ptr [edx], dl +4fc90f: leave +4fc910: dec edi +4fc911: add byte ptr [ecx + 0x5417c0], ah +4fc917: test eax, eax +4fc919: jle 0x4fcfe7 +4fc91f: mov dword ptr [ebp - 0x14], eax +4fc922: mov dword ptr [ebp - 0xc], 1 +4fc929: mov ebx, dword ptr [0x52e784] +4fc92f: add ebx, 4 +4fc932: mov esi, 0x541bcc +4fc937: mov al, byte ptr [ebp - 0xd] +4fc93a: push eax +4fc93b: push 0 +4fc93d: lea eax, [ebp - 0x1d4] +4fc943: mov edx, dword ptr [0x541898] +4fc949: mov cl, 0xfc +4fc94b: call 0x401368 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +4fc950: push dword ptr [ebp - 0x1c8] +4fc956: push dword ptr [ebp - 0x1cc] +4fc95c: push dword ptr [ebp - 0x1d0] +4fc962: push dword ptr [ebp - 0x1d4] +4fc968: lea eax, [ebp - 0x1e4] +4fc96e: mov edx, dword ptr [ebp - 0xc] +4fc971: mov cl, 0xfc +4fc973: call 0x401368 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +4fc978: push dword ptr [ebp - 0x1d8] +4fc97e: push dword ptr [ebp - 0x1dc] +4fc984: push dword ptr [ebp - 0x1e0] +4fc98a: push dword ptr [ebp - 0x1e4] +4fc990: cmp dword ptr [0x5417bc], 3 +4fc997: sete al +4fc99a: push eax +4fc99b: lea eax, [ebp - 0x1c4] +4fc9a1: push eax +4fc9a2: call 0x42b2f8 ; DP_COMMON!IIF +4fc9a7: lea eax, [ebp - 0x1c4] +4fc9ad: call 0x401340 ; rtl60!@System@@VarToInt$qqrrx14System@Variant +4fc9b2: push eax +4fc9b3: mov eax, dword ptr [ebp - 0xc] +4fc9b6: push eax +4fc9b7: mov eax, dword ptr [ebp - 0xc] +4fc9ba: push eax +4fc9bb: push 0x5418e4 +4fc9c0: mov eax, dword ptr [0x52e890] +4fc9c5: mov eax, dword ptr [eax] +4fc9c7: mov cl, byte ptr [eax + 0x7c5] +4fc9cd: mov edx, dword ptr [edi + 0x2f4] +4fc9d3: mov al, 1 +4fc9d5: call 0x456504 +4fc9da: fld qword ptr [esi] +4fc9dc: lea eax, [ebp - 0x1f4] +4fc9e2: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fc9e7: lea eax, [ebp - 0x1f4] +4fc9ed: push eax +4fc9ee: mov ecx, dword ptr [ebx] +4fc9f0: lea eax, [ebp - 0x1f8] +4fc9f6: mov edx, 0x4fd1cc ; 'T_AMT' +4fc9fb: call 0x401270 ; rtl60!@System@@LStrCat3$qqrv +4fca00: mov edx, dword ptr [ebp - 0x1f8] +4fca06: mov eax, dword ptr [edi + 0x2f4] +4fca0c: pop ecx +4fca0d: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fca12: fld qword ptr [esi + 8] +4fca15: lea eax, [ebp - 0x208] +4fca1b: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fca20: lea eax, [ebp - 0x208] +4fca26: push eax +4fca27: mov ecx, dword ptr [ebx] +4fca29: lea eax, [ebp - 0x20c] +4fca2f: mov edx, 0x4fd1dc ; 'L_AMT' +4fca34: call 0x401270 ; rtl60!@System@@LStrCat3$qqrv +4fca39: mov edx, dword ptr [ebp - 0x20c] +4fca3f: mov eax, dword ptr [edi + 0x2f4] +4fca45: pop ecx +4fca46: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fca4b: mov eax, dword ptr [0x52e70c] +4fca50: mov eax, dword ptr [eax] +4fca52: cmp byte ptr [eax + 0x19ba], 1 +4fca59: jne 0x4fcaa1 +4fca5b: mov eax, dword ptr [0x52e7a8] +4fca60: mov eax, dword ptr [eax] +4fca62: cmp byte ptr [eax + 0x57], 5 +4fca66: jne 0x4fcaa1 +4fca68: fld qword ptr [esi + 0x28] +4fca6b: lea eax, [ebp - 0x21c] +4fca71: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fca76: lea eax, [ebp - 0x21c] +4fca7c: push eax +4fca7d: mov ecx, dword ptr [ebx] +4fca7f: lea eax, [ebp - 0x220] +4fca85: mov edx, 0x4fd1ec ; 'N_AMT' +4fca8a: call 0x401270 ; rtl60!@System@@LStrCat3$qqrv +4fca8f: mov edx, dword ptr [ebp - 0x220] +4fca95: mov eax, dword ptr [edi + 0x2f4] +4fca9b: pop ecx +4fca9c: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fcaa1: fld qword ptr [esi + 0x10] +4fcaa4: lea eax, [ebp - 0x230] +4fcaaa: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fcaaf: lea eax, [ebp - 0x230] +4fcab5: push eax +4fcab6: mov ecx, dword ptr [ebx] +4fcab8: lea eax, [ebp - 0x234] +4fcabe: mov edx, 0x4fd1fc ; 'M_AMT' +4fcac3: call 0x401270 ; rtl60!@System@@LStrCat3$qqrv +4fcac8: mov edx, dword ptr [ebp - 0x234] +4fcace: mov eax, dword ptr [edi + 0x2f4] +4fcad4: pop ecx +4fcad5: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fcada: fld qword ptr [esi + 0x18] +4fcadd: lea eax, [ebp - 0x244] +4fcae3: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fcae8: lea eax, [ebp - 0x244] +4fcaee: push eax +4fcaef: mov ecx, dword ptr [ebx] +4fcaf1: lea eax, [ebp - 0x248] +4fcaf7: mov edx, 0x4fd20c ; 'S_AMT' +4fcafc: call 0x401270 ; rtl60!@System@@LStrCat3$qqrv +4fcb01: mov edx, dword ptr [ebp - 0x248] +4fcb07: mov eax, dword ptr [edi + 0x2f4] +4fcb0d: pop ecx +4fcb0e: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fcb13: fld qword ptr [esi + 0x20] +4fcb16: lea eax, [ebp - 0x258] +4fcb1c: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fcb21: lea eax, [ebp - 0x258] +4fcb27: push eax +4fcb28: mov ecx, dword ptr [ebx] +4fcb2a: lea eax, [ebp - 0x25c] +4fcb30: mov edx, 0x4fd21c ; 'A_AMT' +4fcb35: call 0x401270 ; rtl60!@System@@LStrCat3$qqrv +4fcb3a: mov edx, dword ptr [ebp - 0x25c] +4fcb40: mov eax, dword ptr [edi + 0x2f4] +4fcb46: pop ecx +4fcb47: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fcb4c: inc dword ptr [ebp - 0xc] +4fcb4f: add esi, 0x30 +4fcb52: add ebx, 4 +4fcb55: dec dword ptr [ebp - 0x14] +4fcb58: jne 0x4fc937 +4fcb5e: jmp 0x4fcfe7 +4fcb63: cmp dword ptr [0x5417c4], 1 +4fcb6a: jne 0x4fcfe7 +4fcb70: mov al, byte ptr [ebp - 0xd] +4fcb73: push eax +4fcb74: push 0 +4fcb76: lea eax, [ebp - 0x27c] +4fcb7c: mov edx, dword ptr [0x541898] +4fcb82: mov cl, 0xfc +4fcb84: call 0x401368 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +4fcb89: push dword ptr [ebp - 0x270] +4fcb8f: push dword ptr [ebp - 0x274] +4fcb95: push dword ptr [ebp - 0x278] +4fcb9b: push dword ptr [ebp - 0x27c] +4fcba1: lea eax, [ebp - 0x28c] +4fcba7: mov edx, 3 +4fcbac: mov cl, 1 +4fcbae: call 0x401368 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +4fcbb3: push dword ptr [ebp - 0x280] +4fcbb9: push dword ptr [ebp - 0x284] +4fcbbf: push dword ptr [ebp - 0x288] +4fcbc5: push dword ptr [ebp - 0x28c] +4fcbcb: cmp byte ptr [ebp - 0xd], 0 +4fcbcf: jne 0x4fcbdd +4fcbd1: mov eax, dword ptr [ebp - 4] +4fcbd4: cmp byte ptr [eax], 0x51 +4fcbd7: je 0x4fcbdd +4fcbd9: xor eax, eax +4fcbdb: jmp 0x4fcbdf +4fcbdd: mov al, 1 +4fcbdf: push eax +4fcbe0: lea eax, [ebp - 0x26c] +4fcbe6: push eax +4fcbe7: call 0x42b2f8 ; DP_COMMON!IIF +4fcbec: lea eax, [ebp - 0x26c] +4fcbf2: call 0x401340 ; rtl60!@System@@VarToInt$qqrrx14System@Variant +4fcbf7: push eax +4fcbf8: push 3 +4fcbfa: push 3 +4fcbfc: push 0x5418e4 +4fcc01: mov eax, dword ptr [0x52e890] +4fcc06: mov eax, dword ptr [eax] +4fcc08: mov cl, byte ptr [eax + 0x7c5] +4fcc0e: mov edx, dword ptr [edi + 0x2f4] +4fcc14: mov al, 1 +4fcc16: call 0x456504 +4fcc1b: fld qword ptr [0x541c2c] +4fcc21: lea eax, [ebp - 0x29c] +4fcc27: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fcc2c: lea ecx, [ebp - 0x29c] +4fcc32: mov eax, dword ptr [edi + 0x2f4] +4fcc38: mov edx, 0x4fd248 ; 'T_AMT3' +4fcc3d: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fcc42: fld qword ptr [0x541c34] +4fcc48: lea eax, [ebp - 0x2ac] +4fcc4e: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fcc53: lea ecx, [ebp - 0x2ac] +4fcc59: mov eax, dword ptr [edi + 0x2f4] +4fcc5f: mov edx, 0x4fd258 ; 'L_AMT3' +4fcc64: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fcc69: mov eax, dword ptr [0x52e70c] +4fcc6e: mov eax, dword ptr [eax] +4fcc70: cmp byte ptr [eax + 0x19ba], 1 +4fcc77: jne 0x4fccad +4fcc79: mov eax, dword ptr [0x52e7a8] +4fcc7e: mov eax, dword ptr [eax] +4fcc80: cmp byte ptr [eax + 0x57], 5 +4fcc84: jne 0x4fccad +4fcc86: fld qword ptr [0x541c54] +4fcc8c: lea eax, [ebp - 0x2bc] +4fcc92: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fcc97: lea ecx, [ebp - 0x2bc] +4fcc9d: mov eax, dword ptr [edi + 0x2f4] +4fcca3: mov edx, 0x4fd268 ; 'N_AMT3' +4fcca8: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fccad: fld qword ptr [0x541c3c] +4fccb3: lea eax, [ebp - 0x2cc] +4fccb9: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fccbe: lea ecx, [ebp - 0x2cc] +4fccc4: mov eax, dword ptr [edi + 0x2f4] +4fccca: mov edx, 0x4fd278 ; 'M_AMT3' +4fcccf: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fccd4: fld qword ptr [0x541c44] +4fccda: lea eax, [ebp - 0x2dc] +4fcce0: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fcce5: lea ecx, [ebp - 0x2dc] +4fcceb: mov eax, dword ptr [edi + 0x2f4] +4fccf1: mov edx, 0x4fd288 ; 'S_AMT3' +4fccf6: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fccfb: jmp 0x4fcfe7 +4fcd00: cmp dword ptr [0x5417bc], 5 +4fcd07: jne 0x4fcdbc +4fcd0d: mov al, byte ptr [ebp - 0xd] +4fcd10: push eax +4fcd11: push 0 +4fcd13: lea eax, [ebp - 0x2fc] +4fcd19: mov edx, 1 +4fcd1e: mov cl, 1 +4fcd20: call 0x401368 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +4fcd25: push dword ptr [ebp - 0x2f0] +4fcd2b: push dword ptr [ebp - 0x2f4] +4fcd31: push dword ptr [ebp - 0x2f8] +4fcd37: push dword ptr [ebp - 0x2fc] +4fcd3d: lea eax, [ebp - 0x30c] +4fcd43: mov edx, 2 +4fcd48: mov cl, 1 +4fcd4a: call 0x401368 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +4fcd4f: push dword ptr [ebp - 0x300] +4fcd55: push dword ptr [ebp - 0x304] +4fcd5b: push dword ptr [ebp - 0x308] +4fcd61: push dword ptr [ebp - 0x30c] +4fcd67: cmp byte ptr [ebp - 0xd], 0 +4fcd6b: jne 0x4fcd79 +4fcd6d: mov eax, dword ptr [ebp - 4] +4fcd70: cmp byte ptr [eax], 0x51 +4fcd73: je 0x4fcd79 +4fcd75: xor eax, eax +4fcd77: jmp 0x4fcd7b +4fcd79: mov al, 1 +4fcd7b: push eax +4fcd7c: lea eax, [ebp - 0x2ec] +4fcd82: push eax +4fcd83: call 0x42b2f8 ; DP_COMMON!IIF +4fcd88: lea eax, [ebp - 0x2ec] +4fcd8e: call 0x401340 ; rtl60!@System@@VarToInt$qqrrx14System@Variant +4fcd93: push eax +4fcd94: push 1 +4fcd96: push 2 +4fcd98: push 0x5418e4 +4fcd9d: mov eax, dword ptr [0x52e890] +4fcda2: mov eax, dword ptr [eax] +4fcda4: mov cl, byte ptr [eax + 0x7c5] +4fcdaa: mov edx, dword ptr [edi + 0x2f4] +4fcdb0: mov al, 1 +4fcdb2: call 0x456504 +4fcdb7: jmp 0x4fcf07 +4fcdbc: cmp dword ptr [0x5417bc], 1 +4fcdc3: jne 0x4fce6e +4fcdc9: mov al, byte ptr [ebp - 0xd] +4fcdcc: push eax +4fcdcd: push 0 +4fcdcf: lea eax, [ebp - 0x32c] +4fcdd5: mov edx, dword ptr [0x52e7a8] +4fcddb: mov edx, dword ptr [edx] +4fcddd: movsx edx, byte ptr [edx + 0x58] +4fcde1: mov cl, 0xff +4fcde3: call 0x401368 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +4fcde8: push dword ptr [ebp - 0x320] +4fcdee: push dword ptr [ebp - 0x324] +4fcdf4: push dword ptr [ebp - 0x328] +4fcdfa: push dword ptr [ebp - 0x32c] +4fce00: lea eax, [ebp - 0x33c] +4fce06: mov edx, 2 +4fce0b: mov cl, 1 +4fce0d: call 0x401368 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +4fce12: push dword ptr [ebp - 0x330] +4fce18: push dword ptr [ebp - 0x334] +4fce1e: push dword ptr [ebp - 0x338] +4fce24: push dword ptr [ebp - 0x33c] +4fce2a: mov al, byte ptr [ebp - 0xd] +4fce2d: push eax +4fce2e: lea eax, [ebp - 0x31c] +4fce34: push eax +4fce35: call 0x42b2f8 ; DP_COMMON!IIF +4fce3a: lea eax, [ebp - 0x31c] +4fce40: call 0x401340 ; rtl60!@System@@VarToInt$qqrrx14System@Variant +4fce45: push eax +4fce46: push 2 +4fce48: push 2 +4fce4a: push 0x5418e4 +4fce4f: mov eax, dword ptr [0x52e890] +4fce54: mov eax, dword ptr [eax] +4fce56: mov cl, byte ptr [eax + 0x7c5] +4fce5c: mov edx, dword ptr [edi + 0x2f4] +4fce62: mov al, 1 +4fce64: call 0x456504 +4fce69: jmp 0x4fcf07 +4fce6e: mov al, byte ptr [ebp - 0xd] +4fce71: push eax +4fce72: push 0 +4fce74: lea eax, [ebp - 0x35c] +4fce7a: mov edx, 1 +4fce7f: mov cl, 1 +4fce81: call 0x401368 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +4fce86: push dword ptr [ebp - 0x350] +4fce8c: push dword ptr [ebp - 0x354] +4fce92: push dword ptr [ebp - 0x358] +4fce98: push dword ptr [ebp - 0x35c] +4fce9e: lea eax, [ebp - 0x36c] +4fcea4: mov edx, 2 +4fcea9: mov cl, 1 +4fceab: call 0x401368 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +4fceb0: push dword ptr [ebp - 0x360] +4fceb6: push dword ptr [ebp - 0x364] +4fcebc: push dword ptr [ebp - 0x368] +4fcec2: push dword ptr [ebp - 0x36c] +4fcec8: mov al, byte ptr [ebp - 0xd] +4fcecb: push eax +4fcecc: lea eax, [ebp - 0x34c] +4fced2: push eax +4fced3: call 0x42b2f8 ; DP_COMMON!IIF +4fced8: lea eax, [ebp - 0x34c] +4fcede: call 0x401340 ; rtl60!@System@@VarToInt$qqrrx14System@Variant +4fcee3: push eax +4fcee4: push 2 +4fcee6: push 2 +4fcee8: push 0x5418e4 +4fceed: mov eax, dword ptr [0x52e890] +4fcef2: mov eax, dword ptr [eax] +4fcef4: mov cl, byte ptr [eax + 0x7c5] +4fcefa: mov edx, dword ptr [edi + 0x2f4] +4fcf00: mov al, 1 +4fcf02: call 0x456504 +4fcf07: fld qword ptr [0x541bfc] +4fcf0d: lea eax, [ebp - 0x37c] +4fcf13: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fcf18: lea ecx, [ebp - 0x37c] +4fcf1e: mov eax, dword ptr [edi + 0x2f4] +4fcf24: mov edx, 0x4fd298 ; 'T_AMT2' +4fcf29: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fcf2e: fld qword ptr [0x541c04] +4fcf34: lea eax, [ebp - 0x38c] +4fcf3a: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fcf3f: lea ecx, [ebp - 0x38c] +4fcf45: mov eax, dword ptr [edi + 0x2f4] +4fcf4b: mov edx, 0x4fd2a8 ; 'L_AMT2' +4fcf50: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fcf55: mov eax, dword ptr [0x52e70c] +4fcf5a: mov eax, dword ptr [eax] +4fcf5c: cmp byte ptr [eax + 0x19ba], 1 +4fcf63: jne 0x4fcf99 +4fcf65: mov eax, dword ptr [0x52e7a8] +4fcf6a: mov eax, dword ptr [eax] +4fcf6c: cmp byte ptr [eax + 0x57], 5 +4fcf70: jne 0x4fcf99 +4fcf72: fld qword ptr [0x541c24] +4fcf78: lea eax, [ebp - 0x39c] +4fcf7e: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fcf83: lea ecx, [ebp - 0x39c] +4fcf89: mov eax, dword ptr [edi + 0x2f4] +4fcf8f: mov edx, 0x4fd2b8 ; 'N_AMT2' +4fcf94: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fcf99: fld qword ptr [0x541c0c] +4fcf9f: lea eax, [ebp - 0x3ac] +4fcfa5: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fcfaa: lea ecx, [ebp - 0x3ac] +4fcfb0: mov eax, dword ptr [edi + 0x2f4] +4fcfb6: mov edx, 0x4fd2c8 ; 'M_AMT2' +4fcfbb: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4fcfc0: fld qword ptr [0x541c14] +4fcfc6: lea eax, [ebp - 0x3bc] +4fcfcc: call 0x401380 ; rtl60!@System@@VarFromReal$qqrv +4fcfd1: lea ecx, [ebp - 0x3bc] +4fcfd7: mov eax, dword ptr [edi + 0x2f4] +4fcfdd: mov edx, 0x4fd2d8 ; 'S_AMT2' +4fcfe2: call 0x403580 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/ConEst_0x47fadf_0632_ratio.asm.txt b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/ConEst_0x47fadf_0632_ratio.asm.txt new file mode 100644 index 000000000..52f857d94 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/ConEst_0x47fadf_0632_ratio.asm.txt @@ -0,0 +1,158 @@ +47fadf: mov edx, 0x4800a8 ; 'T_AMT1' +47fae4: mov eax, dword ptr [ebx + 0x2fc] +47faea: call 0x402cb0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +47faef: fstp qword ptr [ebp - 0x18] +47faf2: wait +47faf3: mov dword ptr [ebp - 0xc], 1 +47fafa: mov edi, 0x50c240 +47faff: mov dword ptr [ebp - 0x24], 0x50ce60 +47fb06: mov esi, edi +47fb08: lea eax, [ebp - 0x1e4] +47fb0e: lea edx, [esi + 0x204] +47fb14: call 0x401210 +47fb19: mov eax, dword ptr [ebp - 0x1e4] +47fb1f: push eax +47fb20: lea eax, [ebp - 0x1e8] +47fb26: lea edx, [esi + 0x104] +47fb2c: call 0x401210 +47fb31: mov eax, dword ptr [ebp - 0x1e8] +47fb37: push eax +47fb38: movsx eax, byte ptr [esi + 0x305] +47fb3f: push eax +47fb40: lea eax, [ebp - 0x1ec] +47fb46: lea edx, [esi + 4] +47fb49: call 0x401210 +47fb4e: mov edx, dword ptr [ebp - 0x1ec] +47fb54: mov eax, dword ptr [ebx + 0x2fc] +47fb5a: call 0x402cb0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +47fb5f: add esp, -0xc +47fb62: fstp xword ptr [esp] +47fb65: wait +47fb66: lea eax, [ebp - 0x1e0] +47fb6c: push eax +47fb6d: call 0x4376fc ; DP_COMMON!DIS_FMT1 +47fb72: mov edx, dword ptr [ebp - 0x1e0] +47fb78: lea eax, [ebp - 0x1dc] +47fb7e: call 0x401350 +47fb83: lea edx, [ebp - 0x1dc] +47fb89: mov eax, dword ptr [esi] +47fb8b: mov ecx, dword ptr [eax] +47fb8d: call dword ptr [ecx + 0xc4] +47fb93: mov eax, dword ptr [ebp - 0x24] +47fb96: mov esi, eax +47fb98: cmp dword ptr [ebp - 0xc], 1 +47fb9c: jle 0x47fda5 +47fba2: fld qword ptr [ebp - 0x18] +47fba5: fcomp dword ptr [0x4800b0] ; =0.0 +47fbab: fnstsw ax +47fbad: sahf +47fbae: ja 0x47fbd2 +47fbb0: lea eax, [ebp - 0x1fc] +47fbb6: xor edx, edx +47fbb8: call 0x401350 +47fbbd: lea edx, [ebp - 0x1fc] +47fbc3: mov eax, dword ptr [esi] +47fbc5: mov ecx, dword ptr [eax] +47fbc7: call dword ptr [ecx + 0xc4] +47fbcd: jmp 0x47fda5 +47fbd2: mov eax, dword ptr [ebp - 0xc] +47fbd5: sub eax, 2 +47fbd8: je 0x47fbed +47fbda: dec eax +47fbdb: je 0x47fc77 +47fbe1: dec eax +47fbe2: je 0x47fd01 +47fbe8: jmp 0x47fd88 +47fbed: lea eax, [ebp - 0x214] +47fbf3: lea edx, [esi + 0x204] +47fbf9: call 0x401210 +47fbfe: mov eax, dword ptr [ebp - 0x214] +47fc04: push eax +47fc05: lea eax, [ebp - 0x218] +47fc0b: lea edx, [esi + 0x104] +47fc11: call 0x401210 +47fc16: mov eax, dword ptr [ebp - 0x218] +47fc1c: push eax +47fc1d: movsx eax, byte ptr [esi + 0x305] +47fc24: push eax +47fc25: mov edx, 0x4800bc ; 'T_AMT3' +47fc2a: mov eax, dword ptr [ebx + 0x2fc] +47fc30: call 0x402cb0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +47fc35: fdiv qword ptr [ebp - 0x18] +47fc38: fmul dword ptr [0x4800c4] ; =100.0 +47fc3e: add esp, -0xc +47fc41: fstp xword ptr [esp] +47fc44: wait +47fc45: lea eax, [ebp - 0x210] +47fc4b: push eax +47fc4c: call 0x4376fc ; DP_COMMON!DIS_FMT1 +47fc51: mov edx, dword ptr [ebp - 0x210] +47fc57: lea eax, [ebp - 0x20c] +47fc5d: call 0x401350 +47fc62: lea edx, [ebp - 0x20c] +47fc68: mov eax, dword ptr [esi] +47fc6a: mov ecx, dword ptr [eax] +47fc6c: call dword ptr [ecx + 0xc4] +47fc72: jmp 0x47fda5 +47fc77: lea eax, [ebp - 0x230] +47fc7d: lea edx, [esi + 0x204] +47fc83: call 0x401210 +47fc88: mov eax, dword ptr [ebp - 0x230] +47fc8e: push eax +47fc8f: lea eax, [ebp - 0x234] +47fc95: lea edx, [esi + 0x104] +47fc9b: call 0x401210 +47fca0: mov eax, dword ptr [ebp - 0x234] +47fca6: push eax +47fca7: movsx eax, byte ptr [esi + 0x305] +47fcae: push eax +47fcaf: mov edx, 0x4800d0 ; 'T_AMT4' +47fcb4: mov eax, dword ptr [ebx + 0x2fc] +47fcba: call 0x402cb0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +47fcbf: fdiv qword ptr [ebp - 0x18] +47fcc2: fmul dword ptr [0x4800c4] ; =100.0 +47fcc8: add esp, -0xc +47fccb: fstp xword ptr [esp] +47fcce: wait +47fccf: lea eax, [ebp - 0x22c] +47fcd5: push eax +47fcd6: call 0x4376fc ; DP_COMMON!DIS_FMT1 +47fcdb: mov edx, dword ptr [ebp - 0x22c] +47fce1: lea eax, [ebp - 0x228] +47fce7: call 0x401350 +47fcec: lea edx, [ebp - 0x228] +47fcf2: mov eax, dword ptr [esi] +47fcf4: mov ecx, dword ptr [eax] +47fcf6: call dword ptr [ecx + 0xc4] +47fcfc: jmp 0x47fda5 +47fd01: lea eax, [ebp - 0x24c] +47fd07: lea edx, [esi + 0x204] +47fd0d: call 0x401210 +47fd12: mov eax, dword ptr [ebp - 0x24c] +47fd18: push eax +47fd19: lea eax, [ebp - 0x250] +47fd1f: lea edx, [esi + 0x104] +47fd25: call 0x401210 +47fd2a: mov eax, dword ptr [ebp - 0x250] +47fd30: push eax +47fd31: movsx eax, byte ptr [esi + 0x305] +47fd38: push eax +47fd39: mov edx, 0x4800e0 ; 'T_AMT2' +47fd3e: mov eax, dword ptr [ebx + 0x2fc] +47fd44: call 0x402cb0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +47fd49: fdiv qword ptr [ebp - 0x18] +47fd4c: fmul dword ptr [0x4800c4] ; =100.0 +47fd52: add esp, -0xc +47fd55: fstp xword ptr [esp] +47fd58: wait +47fd59: lea eax, [ebp - 0x248] +47fd5f: push eax +47fd60: call 0x4376fc ; DP_COMMON!DIS_FMT1 +47fd65: mov edx, dword ptr [ebp - 0x248] +47fd6b: lea eax, [ebp - 0x244] +47fd71: call 0x401350 +47fd76: lea edx, [ebp - 0x244] +47fd7c: mov eax, dword ptr [esi] +47fd7e: mov ecx, dword ptr [eax] +47fd80: call dword ptr [ecx + 0xc4] +47fd86: jmp 0x47fda5 diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/ConEst_0x48032b_0632_header.asm.txt b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/ConEst_0x48032b_0632_header.asm.txt new file mode 100644 index 000000000..d512f443e --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/ConEst_0x48032b_0632_header.asm.txt @@ -0,0 +1,92 @@ +48032b: mov eax, dword ptr [0x486914] +480330: mov eax, dword ptr [eax] +480332: mov eax, dword ptr [eax + 0x20] +480335: mov edx, 0x4806dc ; 'TCOST1' +48033a: call 0x402cb0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +48033f: fstp st(0) +480341: lea eax, [ebp - 0x358] +480347: mov edx, 0x4806ec ; '2. 도 급 액 : ' +48034c: call 0x401350 +480351: lea edx, [ebp - 0x358] +480357: mov eax, dword ptr [ebp - 4] +48035a: mov ecx, dword ptr [ebp - 8] +48035d: mov eax, dword ptr [eax + ecx*4 + 0x370] +480364: mov ecx, dword ptr [eax] +480366: call dword ptr [ecx + 0xc4] +48036c: jmp 0x4804b9 +480371: mov eax, dword ptr [0x486914] +480376: mov eax, dword ptr [eax] +480378: mov eax, dword ptr [eax + 0x20] +48037b: mov edx, 0x480708 ; 'COSTW4' +480380: call 0x402cb0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +480385: fstp qword ptr [ebp - 0x18] +480388: wait +480389: lea eax, [ebp - 0x368] +48038f: mov edx, 0x480718 ; '3. 기성부분금액 : ' +480394: call 0x401350 +480399: lea edx, [ebp - 0x368] +48039f: mov eax, dword ptr [ebp - 4] +4803a2: mov ecx, dword ptr [ebp - 8] +4803a5: mov eax, dword ptr [eax + ecx*4 + 0x370] +4803ac: mov ecx, dword ptr [eax] +4803ae: call dword ptr [ecx + 0xc4] +4803b4: mov eax, dword ptr [0x486740] +4803b9: mov eax, dword ptr [eax] +4803bb: cmp byte ptr [eax + 0x1763], 0 +4803c2: jne 0x4804b9 +4803c8: mov eax, dword ptr [ebp - 4] +4803cb: mov edx, dword ptr [ebp - 8] +4803ce: mov ebx, dword ptr [eax + edx*4 + 0x370] +4803d5: lea edx, [ebx + 0x1e0] +4803db: lea eax, [ebp - 0x378] +4803e1: call 0x4012e8 +4803e6: push dword ptr [ebp - 0x14] +4803e9: push dword ptr [ebp - 0x18] +4803ec: lea eax, [ebp - 0x38c] +4803f2: push eax +4803f3: call 0x4376e4 ; DP_COMMON!AMTTOHAN +4803f8: mov edx, dword ptr [ebp - 0x38c] +4803fe: lea eax, [ebp - 0x388] +480404: call 0x401350 +480409: lea edx, [ebp - 0x388] +48040f: lea eax, [ebp - 0x378] +480415: call 0x401358 +48041a: lea eax, [ebp - 0x378] +480420: push eax +480421: lea eax, [ebp - 0x39c] +480427: mov edx, 0x480734 ; '원정 ' +48042c: call 0x401350 +480431: lea edx, [ebp - 0x39c] +480437: pop eax +480438: call 0x401358 +48043d: lea eax, [ebp - 0x378] +480443: push eax +480444: fld qword ptr [ebp - 0x18] +480447: add esp, -0xc +48044a: fstp xword ptr [esp] +48044d: wait +48044e: lea edx, [ebp - 0x3b0] +480454: mov eax, 0x480744 ; '(₩#,#)' +480459: call 0x40178c ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +48045e: mov edx, dword ptr [ebp - 0x3b0] +480464: lea eax, [ebp - 0x3ac] +48046a: call 0x401350 +48046f: lea edx, [ebp - 0x3ac] +480475: pop eax +480476: call 0x401358 +48047b: lea edx, [ebp - 0x378] +480481: mov eax, dword ptr [ebp - 4] +480484: mov ecx, dword ptr [ebp - 8] +480487: mov eax, ebx +480489: mov ecx, dword ptr [eax] +48048b: call dword ptr [ecx + 0xc4] +480491: jmp 0x4804b9 +480493: lea eax, [ebp - 0x3c0] +480499: mov edx, 0x480754 ; '4. 내 역 : ' +48049e: call 0x401350 +4804a3: lea edx, [ebp - 0x3c0] +4804a9: mov eax, dword ptr [ebp - 4] +4804ac: mov ecx, dword ptr [ebp - 8] +4804af: mov eax, esi +4804b1: mov ecx, dword ptr [eax] +4804b3: call dword ptr [ecx + 0xc4] diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4c9a98_slot_load.asm.txt b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4c9a98_slot_load.asm.txt new file mode 100644 index 000000000..55ac3d183 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4c9a98_slot_load.asm.txt @@ -0,0 +1,426 @@ +4c9a98: push ebp +4c9a99: mov ebp, esp +4c9a9b: push ecx +4c9a9c: mov ecx, 0x1f +4c9aa1: push 0 +4c9aa3: push 0 +4c9aa5: dec ecx +4c9aa6: jne 0x4c9aa1 +4c9aa8: xchg dword ptr [ebp - 4], ecx +4c9aab: push ebx +4c9aac: push esi +4c9aad: push edi +4c9aae: mov dword ptr [ebp - 4], ecx +4c9ab1: mov ebx, edx +4c9ab3: mov esi, eax +4c9ab5: xor eax, eax +4c9ab7: push ebp +4c9ab8: push 0x4ca04d +4c9abd: push dword ptr fs:[eax] +4c9ac0: mov dword ptr fs:[eax], esp +4c9ac3: xor eax, eax +4c9ac5: push ebp +4c9ac6: push 0x4c9fbf +4c9acb: push dword ptr fs:[eax] +4c9ace: mov dword ptr fs:[eax], esp +4c9ad1: mov eax, dword ptr [0x4d26cc] +4c9ad6: xor ecx, ecx +4c9ad8: mov edx, 0x10 +4c9add: call 0x4010c0 ; rtl60!@System@@FillChar$qqrpvic +4c9ae2: mov eax, dword ptr [0x4d25c8] +4c9ae7: mov eax, dword ptr [eax] +4c9ae9: mov edx, dword ptr [eax + 0x38] +4c9aec: mov eax, dword ptr [0x4d26cc] +4c9af1: add eax, 4 +4c9af4: mov ecx, 0x4ca06c ; 'PRJ_MEMO.INI' +4c9af9: call 0x401240 ; rtl60!@System@@LStrCat3$qqrv +4c9afe: mov eax, dword ptr [0x4d26cc] +4c9b03: add eax, 8 +4c9b06: mov edx, 0x4ca084 ; 'KANJUB' +4c9b0b: call 0x4011f0 ; rtl60!@System@@LStrAsg$qqrpvpxv +4c9b10: inc ebx +4c9b11: imul edx, ebx, 0x10450 +4c9b17: mov eax, esi +4c9b19: xor ecx, ecx +4c9b1b: call 0x4010c0 ; rtl60!@System@@FillChar$qqrpvic +4c9b20: mov eax, dword ptr [ebp + 8] +4c9b23: inc eax +4c9b24: imul edx, eax, 0x220 +4c9b2a: mov eax, dword ptr [ebp - 4] +4c9b2d: xor ecx, ecx +4c9b2f: call 0x4010c0 ; rtl60!@System@@FillChar$qqrpvic +4c9b34: mov eax, dword ptr [0x4d2694] +4c9b39: mov eax, dword ptr [eax] +4c9b3b: mov eax, dword ptr [eax + 0x20] +4c9b3e: mov edx, 0x4ca094 ; 'PCLASS' +4c9b43: call 0x402dac ; Apollo5D6!@Apodset@TApolloTable@GetInteger$qqr17System@AnsiString +4c9b48: mov edx, dword ptr [0x4d26a4] +4c9b4e: mov dword ptr [edx], eax +4c9b50: mov eax, dword ptr [0x4d26cc] +4c9b55: mov eax, dword ptr [eax + 4] +4c9b58: push eax +4c9b59: push 0 +4c9b5b: lea eax, [ebp - 0x38] +4c9b5e: xor edx, edx +4c9b60: mov cl, 1 +4c9b62: call 0x401320 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +4c9b67: lea eax, [ebp - 0x38] +4c9b6a: push eax +4c9b6b: push 2 +4c9b6d: push 0x4ca0a4 ; 'PRJ_MEMO' +4c9b72: lea eax, [ebp - 0x28] +4c9b75: push eax +4c9b76: mov eax, dword ptr [0x4d2694] +4c9b7b: mov eax, dword ptr [eax] +4c9b7d: lea edx, [eax + 0x20] +4c9b80: mov eax, dword ptr [0x4d26cc] +4c9b85: add eax, 0xc +4c9b88: xor ecx, ecx +4c9b8a: call 0x42a5d0 +4c9b8f: mov eax, dword ptr [0x4d26cc] +4c9b94: mov eax, dword ptr [eax + 4] +4c9b97: push eax +4c9b98: push 0x4ca0b8 ; 'JAB_TYPE' +4c9b9d: lea eax, [ebp - 0x58] +4c9ba0: xor edx, edx +4c9ba2: mov cl, 1 +4c9ba4: call 0x401320 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +4c9ba9: lea eax, [ebp - 0x58] +4c9bac: push eax +4c9bad: push 2 +4c9baf: mov eax, dword ptr [0x4d26cc] +4c9bb4: mov eax, dword ptr [eax + 8] +4c9bb7: push eax +4c9bb8: lea eax, [ebp - 0x48] +4c9bbb: push eax +4c9bbc: mov eax, dword ptr [0x4d2694] +4c9bc1: mov eax, dword ptr [eax] +4c9bc3: lea edx, [eax + 0x20] +4c9bc6: mov eax, dword ptr [0x4d26cc] +4c9bcb: add eax, 0xc +4c9bce: mov cl, 1 +4c9bd0: call 0x42a5d0 +4c9bd5: lea eax, [ebp - 0x48] +4c9bd8: call 0x4012f8 ; rtl60!@System@@VarToInt$qqrrx14System@Variant +4c9bdd: mov edx, dword ptr [0x4d26cc] +4c9be3: mov byte ptr [edx], al +4c9be5: mov eax, dword ptr [0x4d26cc] +4c9bea: mov eax, dword ptr [eax + 4] +4c9bed: push eax +4c9bee: push 0x4ca0cc ; 'CAL_ACTL' +4c9bf3: lea eax, [ebp - 0x78] +4c9bf6: xor edx, edx +4c9bf8: mov cl, 1 +4c9bfa: call 0x401320 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +4c9bff: lea eax, [ebp - 0x78] +4c9c02: push eax +4c9c03: push 4 +4c9c05: mov eax, dword ptr [0x4d26cc] +4c9c0a: mov eax, dword ptr [eax + 8] +4c9c0d: push eax +4c9c0e: lea eax, [ebp - 0x68] +4c9c11: push eax +4c9c12: mov eax, dword ptr [0x4d2694] +4c9c17: mov eax, dword ptr [eax] +4c9c19: lea edx, [eax + 0x20] +4c9c1c: mov eax, dword ptr [0x4d26cc] +4c9c21: add eax, 0xc +4c9c24: mov cl, 1 +4c9c26: call 0x42a5d0 +4c9c2b: lea eax, [ebp - 0x68] +4c9c2e: call 0x401300 ; rtl60!@System@@VarToBool$qqrrx14System@Variant +4c9c33: mov edx, dword ptr [0x4d26cc] +4c9c39: mov byte ptr [edx + 1], al +4c9c3c: mov eax, dword ptr [0x4d26cc] +4c9c41: mov eax, dword ptr [eax + 4] +4c9c44: push eax +4c9c45: push 0x4ca0e0 ; 'VIS_TOTL' +4c9c4a: lea eax, [ebp - 0x98] +4c9c50: xor edx, edx +4c9c52: mov cl, 1 +4c9c54: call 0x401320 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +4c9c59: lea eax, [ebp - 0x98] +4c9c5f: push eax +4c9c60: push 4 +4c9c62: mov eax, dword ptr [0x4d26cc] +4c9c67: mov eax, dword ptr [eax + 8] +4c9c6a: push eax +4c9c6b: lea eax, [ebp - 0x88] +4c9c71: push eax +4c9c72: mov eax, dword ptr [0x4d2694] +4c9c77: mov eax, dword ptr [eax] +4c9c79: lea edx, [eax + 0x20] +4c9c7c: mov eax, dword ptr [0x4d26cc] +4c9c81: add eax, 0xc +4c9c84: mov cl, 1 +4c9c86: call 0x42a5d0 +4c9c8b: lea eax, [ebp - 0x88] +4c9c91: call 0x401300 ; rtl60!@System@@VarToBool$qqrrx14System@Variant +4c9c96: mov edx, dword ptr [0x4d26cc] +4c9c9c: mov byte ptr [edx + 2], al +4c9c9f: call 0x450258 +4c9ca4: push 4 +4c9ca6: push 5 +4c9ca8: mov eax, dword ptr [0x4d24b4] +4c9cad: mov eax, dword ptr [eax] +4c9caf: cmp word ptr [eax + 0x1750], 7 +4c9cb7: sete al +4c9cba: push eax +4c9cbb: call 0x409188 ; DP_COMMON!IFI +4c9cc0: test eax, eax +4c9cc2: jle 0x4c9fb1 +4c9cc8: mov dword ptr [ebp - 0x10], eax +4c9ccb: mov dword ptr [ebp - 0xc], 1 +4c9cd2: mov edi, dword ptr [0x4d25a0] +4c9cd8: add edi, 4 +4c9cdb: mov ebx, dword ptr [0x4d25b8] +4c9ce1: lea eax, [esi + 0x10450] +4c9ce7: mov esi, eax +4c9ce9: mov eax, dword ptr [0x4d24b0] +4c9cee: mov dword ptr [ebp - 0x14], eax +4c9cf1: mov eax, dword ptr [ebp - 4] +4c9cf4: add eax, 0x220 +4c9cf9: mov dword ptr [ebp - 0x18], eax +4c9cfc: mov ecx, dword ptr [edi] +4c9cfe: lea eax, [ebp - 0xac] +4c9d04: mov edx, 0x4ca0f4 ; 'TCOST' +4c9d09: call 0x401240 ; rtl60!@System@@LStrCat3$qqrv +4c9d0e: mov edx, dword ptr [ebp - 0xac] +4c9d14: lea ecx, [ebp - 0xa8] +4c9d1a: mov eax, dword ptr [0x4d2694] +4c9d1f: mov eax, dword ptr [eax] +4c9d21: mov eax, dword ptr [eax + 0x20] +4c9d24: call 0x402b6c ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +4c9d29: lea eax, [ebp - 0xa8] +4c9d2f: call 0x401308 ; rtl60!@System@@VarToReal$qqrrx14System@Variant +4c9d34: fstp qword ptr [ebx] +4c9d36: wait +4c9d37: mov ecx, dword ptr [edi] +4c9d39: lea eax, [ebp - 0xc0] +4c9d3f: mov edx, 0x4ca104 ; 'MCOST' +4c9d44: call 0x401240 ; rtl60!@System@@LStrCat3$qqrv +4c9d49: mov edx, dword ptr [ebp - 0xc0] +4c9d4f: lea ecx, [ebp - 0xbc] +4c9d55: mov eax, dword ptr [0x4d2694] +4c9d5a: mov eax, dword ptr [eax] +4c9d5c: mov eax, dword ptr [eax + 0x20] +4c9d5f: call 0x402b6c ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +4c9d64: lea eax, [ebp - 0xbc] +4c9d6a: call 0x401308 ; rtl60!@System@@VarToReal$qqrrx14System@Variant +4c9d6f: fstp qword ptr [ebx + 0x10] +4c9d72: wait +4c9d73: mov ecx, dword ptr [edi] +4c9d75: lea eax, [ebp - 0xd4] +4c9d7b: mov edx, 0x4ca114 ; 'LCOST' +4c9d80: call 0x401240 ; rtl60!@System@@LStrCat3$qqrv +4c9d85: mov edx, dword ptr [ebp - 0xd4] +4c9d8b: lea ecx, [ebp - 0xd0] +4c9d91: mov eax, dword ptr [0x4d2694] +4c9d96: mov eax, dword ptr [eax] +4c9d98: mov eax, dword ptr [eax + 0x20] +4c9d9b: call 0x402b6c ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +4c9da0: lea eax, [ebp - 0xd0] +4c9da6: call 0x401308 ; rtl60!@System@@VarToReal$qqrrx14System@Variant +4c9dab: fstp qword ptr [ebx + 8] +4c9dae: wait +4c9daf: mov ecx, dword ptr [edi] +4c9db1: lea eax, [ebp - 0xe8] +4c9db7: mov edx, 0x4ca124 ; 'SCOST' +4c9dbc: call 0x401240 ; rtl60!@System@@LStrCat3$qqrv +4c9dc1: mov edx, dword ptr [ebp - 0xe8] +4c9dc7: lea ecx, [ebp - 0xe4] +4c9dcd: mov eax, dword ptr [0x4d2694] +4c9dd2: mov eax, dword ptr [eax] +4c9dd4: mov eax, dword ptr [eax + 0x20] +4c9dd7: call 0x402b6c ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +4c9ddc: lea eax, [ebp - 0xe4] +4c9de2: call 0x401308 ; rtl60!@System@@VarToReal$qqrrx14System@Variant +4c9de7: fstp qword ptr [ebx + 0x18] +4c9dea: wait +4c9deb: mov eax, dword ptr [0x4d24b4] +4c9df0: mov eax, dword ptr [eax] +4c9df2: cmp byte ptr [eax + 0x7bcd], 0 +4c9df9: je 0x4c9e37 +4c9dfb: mov ecx, dword ptr [edi] +4c9dfd: lea eax, [ebp - 0xfc] +4c9e03: mov edx, 0x4ca134 ; 'NCOST' +4c9e08: call 0x401240 ; rtl60!@System@@LStrCat3$qqrv +4c9e0d: mov edx, dword ptr [ebp - 0xfc] +4c9e13: lea ecx, [ebp - 0xf8] +4c9e19: mov eax, dword ptr [0x4d2694] +4c9e1e: mov eax, dword ptr [eax] +4c9e20: mov eax, dword ptr [eax + 0x20] +4c9e23: call 0x402b6c ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +4c9e28: lea eax, [ebp - 0xf8] +4c9e2e: call 0x401308 ; rtl60!@System@@VarToReal$qqrrx14System@Variant +4c9e33: fstp qword ptr [ebx + 0x28] +4c9e36: wait +4c9e37: push esi +4c9e38: push edi +4c9e39: mov edi, esi +4c9e3b: mov esi, ebx +4c9e3d: mov ecx, 0xc +4c9e42: rep movsd dword ptr es:[edi], dword ptr [esi] +4c9e44: pop edi +4c9e45: pop esi +4c9e46: mov eax, dword ptr [ebp - 0x14] +4c9e49: push esi +4c9e4a: push edi +4c9e4b: mov esi, ebx +4c9e4d: mov edi, eax +4c9e4f: mov ecx, 0xc +4c9e54: rep movsd dword ptr es:[edi], dword ptr [esi] +4c9e56: pop edi +4c9e57: pop esi +4c9e58: mov eax, dword ptr [0x4d26cc] +4c9e5d: cmp byte ptr [eax + 1], 0 +4c9e61: jne 0x4c9e70 +4c9e63: fld qword ptr [esi + 8] +4c9e66: fadd qword ptr [esi + 0x10] +4c9e69: fstp qword ptr [esi + 0x90] +4c9e6f: wait +4c9e70: cmp dword ptr [ebp - 0xc], 1 +4c9e74: jne 0x4c9ee8 +4c9e76: mov eax, dword ptr [0x4d26cc] +4c9e7b: cmp byte ptr [eax + 1], 0 +4c9e7f: jne 0x4c9e8e +4c9e81: fld qword ptr [esi + 8] +4c9e84: fadd qword ptr [esi + 0x10] +4c9e87: fstp qword ptr [esi + 0x90] +4c9e8d: wait +4c9e8e: push 0 +4c9e90: push 0 +4c9e92: push 0 +4c9e94: mov eax, dword ptr [ebp - 0x18] +4c9e97: mov ecx, eax +4c9e99: mov edx, esi +4c9e9b: mov eax, dword ptr [ebp - 0xc] +4c9e9e: call 0x43d228 +4c9ea3: mov eax, dword ptr [0x4d26cc] +4c9ea8: cmp byte ptr [eax + 1], 0 +4c9eac: je 0x4c9ece +4c9eae: mov eax, dword ptr [ebp - 0x18] +4c9eb1: cmp dword ptr [eax + 0x16c], 0 +4c9eb8: jne 0x4c9ece +4c9eba: mov eax, dword ptr [ebp - 0x18] +4c9ebd: cmp dword ptr [eax + 0x168], 0 +4c9ec4: jne 0x4c9ece +4c9ec6: xor eax, eax +4c9ec8: mov dword ptr [ebx + 0x18], eax +4c9ecb: mov dword ptr [ebx + 0x1c], eax +4c9ece: push 0 +4c9ed0: push esi +4c9ed1: mov eax, dword ptr [ebp - 0x18] +4c9ed4: push eax +4c9ed5: push 1 +4c9ed7: mov edx, ebx +4c9ed9: xor ecx, ecx +4c9edb: mov eax, dword ptr [ebp - 0xc] +4c9ede: call 0x44cc58 +4c9ee3: jmp 0x4c9f8e +4c9ee8: mov edx, esi +4c9eea: mov eax, dword ptr [ebp - 0xc] +4c9eed: call 0x43ade4 +4c9ef2: mov eax, dword ptr [ebp - 4] +4c9ef5: cmp dword ptr [eax + 0x3dc], 3 +4c9efc: jne 0x4c9f27 +4c9efe: fld qword ptr [ebx + 0x10] +4c9f01: fadd qword ptr [esi + 0x390] +4c9f07: fstp qword ptr [ebx + 0x10] +4c9f0a: wait +4c9f0b: fld qword ptr [ebx + 0x10] +4c9f0e: fadd qword ptr [ebx + 8] +4c9f11: fadd qword ptr [ebx + 0x18] +4c9f14: fstp qword ptr [ebx] +4c9f16: wait +4c9f17: xor eax, eax +4c9f19: mov dword ptr [esi + 0x398], eax +4c9f1f: mov dword ptr [esi + 0x39c], eax +4c9f25: jmp 0x4c9f3f +4c9f27: mov eax, dword ptr [esi + 0x390] +4c9f2d: mov dword ptr [esi + 0x398], eax +4c9f33: mov eax, dword ptr [esi + 0x394] +4c9f39: mov dword ptr [esi + 0x39c], eax +4c9f3f: fld qword ptr [esi + 0x110] +4c9f45: fcomp dword ptr [0x4ca13c] ; =0.0 +4c9f4b: fnstsw ax +4c9f4d: sahf +4c9f4e: je 0x4c9f69 +4c9f50: fld qword ptr [ebx + 8] +4c9f53: fadd qword ptr [esi + 0x110] +4c9f59: fstp qword ptr [ebx + 8] +4c9f5c: wait +4c9f5d: fld qword ptr [ebx + 0x10] +4c9f60: fadd qword ptr [ebx + 8] +4c9f63: fadd qword ptr [ebx + 0x18] +4c9f66: fstp qword ptr [ebx] +4c9f68: wait +4c9f69: push esi +4c9f6a: push edi +4c9f6b: mov edi, esi +4c9f6d: mov esi, ebx +4c9f6f: mov ecx, 0xc +4c9f74: rep movsd dword ptr es:[edi], dword ptr [esi] +4c9f76: pop edi +4c9f77: pop esi +4c9f78: mov eax, dword ptr [ebp - 4] +4c9f7b: mov eax, dword ptr [eax + 0x3dc] +4c9f81: push eax +4c9f82: mov ecx, esi +4c9f84: mov edx, ebx +4c9f86: mov eax, dword ptr [ebp - 0xc] +4c9f89: call 0x44c36c +4c9f8e: inc dword ptr [ebp - 0xc] +4c9f91: add dword ptr [ebp - 0x18], 0x220 +4c9f98: add dword ptr [ebp - 0x14], 0x30 +4c9f9c: add esi, 0x10450 +4c9fa2: add ebx, 0x30 +4c9fa5: add edi, 4 +4c9fa8: dec dword ptr [ebp - 0x10] +4c9fab: jne 0x4c9cfc +4c9fb1: xor eax, eax +4c9fb3: pop edx +4c9fb4: pop ecx +4c9fb5: pop ecx +4c9fb6: mov dword ptr fs:[eax], edx +4c9fb9: push 0x4c9fc6 +4c9fbe: ret +4c9fbf: jmp 0x401190 ; rtl60!@System@@HandleFinally$qqrv +4c9fc4: jmp 0x4c9fbe +4c9fc6: xor eax, eax +4c9fc8: pop edx +4c9fc9: pop ecx +4c9fca: pop ecx +4c9fcb: mov dword ptr fs:[eax], edx +4c9fce: push 0x4ca057 +4c9fd3: lea eax, [ebp - 0xfc] +4c9fd9: call 0x4011e0 ; rtl60!@System@@LStrClr$qqrpv +4c9fde: lea eax, [ebp - 0xf8] +4c9fe4: call 0x4013a0 ; rtl60!@System@@VarClr$qqrr14System@Variant +4c9fe9: lea eax, [ebp - 0xe8] +4c9fef: call 0x4011e0 ; rtl60!@System@@LStrClr$qqrpv +4c9ff4: lea eax, [ebp - 0xe4] +4c9ffa: call 0x4013a0 ; rtl60!@System@@VarClr$qqrr14System@Variant +4c9fff: lea eax, [ebp - 0xd4] +4ca005: call 0x4011e0 ; rtl60!@System@@LStrClr$qqrpv +4ca00a: lea eax, [ebp - 0xd0] +4ca010: call 0x4013a0 ; rtl60!@System@@VarClr$qqrr14System@Variant +4ca015: lea eax, [ebp - 0xc0] +4ca01b: call 0x4011e0 ; rtl60!@System@@LStrClr$qqrpv +4ca020: lea eax, [ebp - 0xbc] +4ca026: call 0x4013a0 ; rtl60!@System@@VarClr$qqrr14System@Variant +4ca02b: lea eax, [ebp - 0xac] +4ca031: call 0x4011e0 ; rtl60!@System@@LStrClr$qqrpv +4ca036: lea eax, [ebp - 0xa8] +4ca03c: mov edx, dword ptr [0x5eac60] ; [rtl60!@$xp$14System@Variant] +4ca042: mov ecx, 9 +4ca047: call 0x4012b8 ; rtl60!@System@@FinalizeArray$qqrpvt1ui +4ca04c: ret +4ca04d: jmp 0x401190 ; rtl60!@System@@HandleFinally$qqrv +4ca052: jmp 0x4c9fd3 +4ca057: mov al, byte ptr [ebp - 5] +4ca05a: pop edi +4ca05b: pop esi +4ca05c: pop ebx +4ca05d: mov esp, ebp +4ca05f: pop ebp diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4ca5ac_Edit_KanJub_K.asm.txt b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4ca5ac_Edit_KanJub_K.asm.txt new file mode 100644 index 000000000..b57c66518 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4ca5ac_Edit_KanJub_K.asm.txt @@ -0,0 +1,265 @@ +4ca5ac: push ebp +4ca5ad: mov ebp, esp +4ca5af: mov ecx, 0xb +4ca5b4: push 0 +4ca5b6: push 0 +4ca5b8: dec ecx +4ca5b9: jne 0x4ca5b4 +4ca5bb: push ecx +4ca5bc: push ebx +4ca5bd: push esi +4ca5be: mov esi, dword ptr [0x4d2694] +4ca5c4: xor eax, eax +4ca5c6: push ebp +4ca5c7: push 0x4ca959 +4ca5cc: push dword ptr fs:[eax] +4ca5cf: mov dword ptr fs:[eax], esp +4ca5d2: mov eax, dword ptr [0x5eb508] ; [vcl60!@Forms@Application] +4ca5d7: mov eax, dword ptr [eax] +4ca5d9: mov edx, dword ptr [ebp + 8] +4ca5dc: call 0x402734 ; vcl60!@Forms@TApplication@SetHandle$qqrui +4ca5e1: call 0x4097e8 +4ca5e6: push 0x41d0b852 +4ca5eb: call 0x436418 +4ca5f0: test al, al +4ca5f2: je 0x4ca92b +4ca5f8: lea ecx, [ebp - 8] +4ca5fb: mov eax, dword ptr [0x5eb508] ; [vcl60!@Forms@Application] +4ca600: mov eax, dword ptr [eax] +4ca602: mov edx, dword ptr [0x4ca190] +4ca608: call 0x402744 ; vcl60!@Forms@TApplication@CreateForm$qqrp17System@TMetaClasspv +4ca60d: mov eax, dword ptr [0x4d26cc] +4ca612: xor ecx, ecx +4ca614: mov edx, 0x10 +4ca619: call 0x4010c0 ; rtl60!@System@@FillChar$qqrpvic +4ca61e: xor edx, edx +4ca620: push ebp +4ca621: push 0x4ca924 +4ca626: push dword ptr fs:[edx] +4ca629: mov dword ptr fs:[edx], esp +4ca62c: mov eax, dword ptr [0x4d2460] +4ca631: mov edx, dword ptr [0x4d25c8] +4ca637: mov edx, dword ptr [edx] +4ca639: mov edx, dword ptr [edx + 0x38] +4ca63c: call 0x4011f0 ; rtl60!@System@@LStrAsg$qqrpvpxv +4ca641: lea ecx, [ebp - 0xc] +4ca644: mov eax, dword ptr [esi] +4ca646: mov eax, dword ptr [eax + 0x20] +4ca649: mov edx, 0x4ca974 ; 'PCODE' +4ca64e: call 0x402dc4 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString +4ca653: mov edx, dword ptr [ebp - 0xc] +4ca656: mov eax, dword ptr [0x4d2580] +4ca65b: call 0x4011f0 ; rtl60!@System@@LStrAsg$qqrpvpxv +4ca660: mov eax, dword ptr [ebp - 8] +4ca663: mov eax, dword ptr [eax + 0x304] +4ca669: call 0x402b5c ; dbrtl60!@Db@TDataSet@Close$qqrv +4ca66e: push 0x4ca984 ; 'BOQ' +4ca673: lea ecx, [ebp - 0x14] +4ca676: mov eax, dword ptr [esi] +4ca678: mov eax, dword ptr [eax + 0x20] +4ca67b: mov edx, 0x4ca974 ; 'PCODE' +4ca680: call 0x402dc4 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString +4ca685: push dword ptr [ebp - 0x14] +4ca688: push 0x4ca990 ; '.DBF' +4ca68d: lea eax, [ebp - 0x10] +4ca690: mov edx, 3 +4ca695: call 0x401248 ; rtl60!@System@@LStrCatN$qqrv +4ca69a: mov edx, dword ptr [ebp - 0x10] +4ca69d: mov eax, dword ptr [ebp - 8] +4ca6a0: mov eax, dword ptr [eax + 0x304] +4ca6a6: call 0x402e44 ; Apollo5D6!@Apodset@TApolloTable@SetTableName$qqr17System@AnsiString +4ca6ab: mov eax, dword ptr [ebp - 8] +4ca6ae: mov eax, dword ptr [eax + 0x304] +4ca6b4: call 0x402b54 ; dbrtl60!@Db@TDataSet@Open$qqrv +4ca6b9: lea ecx, [ebp - 0x1c] +4ca6bc: mov eax, dword ptr [esi] +4ca6be: mov eax, dword ptr [eax + 0x20] +4ca6c1: mov edx, 0x4ca9a0 ; 'PNAME' +4ca6c6: call 0x402dc4 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString +4ca6cb: mov ecx, dword ptr [ebp - 0x1c] +4ca6ce: lea eax, [ebp - 0x18] +4ca6d1: mov edx, 0x4ca9b0 ; '< 기성 제잡비 계산 > ' +4ca6d6: call 0x401240 ; rtl60!@System@@LStrCat3$qqrv +4ca6db: mov edx, dword ptr [ebp - 0x18] +4ca6de: mov eax, dword ptr [ebp - 8] +4ca6e1: call 0x402854 ; vcl60!@Controls@TControl@SetText$qqrx17System@AnsiString +4ca6e6: mov edx, 0x3ba +4ca6eb: mov eax, dword ptr [ebp - 8] +4ca6ee: call 0x402634 ; vcl60!@Forms@TCustomForm@SetClientWidth$qqri +4ca6f3: mov eax, dword ptr [ebp - 8] +4ca6f6: mov ecx, dword ptr [eax + 0x48] +4ca6f9: mov eax, dword ptr [ebp - 8] +4ca6fc: mov eax, dword ptr [eax + 0x74] +4ca6ff: mov edx, 1 +4ca704: call 0x40279c ; vcl60!@Controls@TSizeConstraints@SetConstraints$qqrii +4ca709: push 5 +4ca70b: mov ecx, 0x5e8624 +4ca710: mov eax, 0x586c44 +4ca715: mov edx, 5 +4ca71a: call 0x4c9a98 +4ca71f: mov eax, dword ptr [ebp - 8] +4ca722: call 0x4cb564 +4ca727: mov eax, dword ptr [ebp - 8] +4ca72a: mov eax, dword ptr [eax + 0x300] +4ca730: call 0x407c5c ; RealGrid6!@Urmgrid@TRealGrid@Post$qqrv +4ca735: xor edx, edx +4ca737: mov eax, dword ptr [ebp - 8] +4ca73a: call 0x4ce6c4 +4ca73f: mov eax, dword ptr [ebp - 8] +4ca742: mov eax, dword ptr [eax + 0x300] +4ca748: mov edx, 6 +4ca74d: call 0x407b94 ; RealGrid6!@Urgrids@TwCustomGrid@SetSelectedIndex$qqri +4ca752: mov eax, dword ptr [ebp - 8] +4ca755: mov edx, dword ptr [eax + 0x300] +4ca75b: mov eax, dword ptr [ebp - 8] +4ca75e: call 0x40269c ; vcl60!@Forms@TCustomForm@SetActiveControl$qqrp20Controls@TWinControl +4ca763: mov eax, dword ptr [ebp - 8] +4ca766: mov edx, dword ptr [eax + 0x300] +4ca76c: mov eax, dword ptr [ebp - 8] +4ca76f: call 0x4cddac +4ca774: mov eax, dword ptr [ebp - 8] +4ca777: mov eax, dword ptr [eax + 0x300] +4ca77d: xor ecx, ecx +4ca77f: mov edx, 0xd +4ca784: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ca789: call 0x407bfc ; RealGrid6!@Urmgrid@TwCells@GetLong$qqrv +4ca78e: cmp eax, 0x64 +4ca791: jne 0x4ca7a9 +4ca793: mov eax, dword ptr [ebp - 8] +4ca796: mov eax, dword ptr [eax + 0x300] +4ca79c: mov edx, 1 +4ca7a1: mov ecx, dword ptr [eax] +4ca7a3: call dword ptr [ecx + 0x128] +4ca7a9: push 0 +4ca7ab: push 0 +4ca7ad: mov ecx, 0x4ca9d0 ; '원가계산(기성)' +4ca7b2: mov edx, 0x4ca9e8 ; 'Ind_Cost' +4ca7b7: mov eax, 1 +4ca7bc: call 0x43974c +4ca7c1: mov eax, dword ptr [ebp - 8] +4ca7c4: mov edx, dword ptr [eax] +4ca7c6: call dword ptr [edx + 0xe8] +4ca7cc: push 0 +4ca7ce: push 0 +4ca7d0: mov ecx, 0x4ca9d0 ; '원가계산(기성)' +4ca7d5: mov edx, 0x4ca9e8 ; 'Ind_Cost' +4ca7da: mov eax, 2 +4ca7df: call 0x43974c +4ca7e4: mov eax, dword ptr [esi] +4ca7e6: mov eax, dword ptr [eax + 0x20] +4ca7e9: call 0x402b9c ; dbrtl60!@Db@TDataSet@Edit$qqrv +4ca7ee: mov eax, dword ptr [ebp - 8] +4ca7f1: mov ebx, dword ptr [eax + 0x300] +4ca7f7: mov eax, ebx +4ca7f9: mov edx, dword ptr [eax] +4ca7fb: call dword ptr [edx + 0x12c] +4ca801: mov ecx, eax +4ca803: dec ecx +4ca804: mov eax, ebx +4ca806: mov edx, 6 +4ca80b: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ca810: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ca815: lea eax, [ebp - 0x2c] +4ca818: call 0x401330 ; rtl60!@System@@VarFromReal$qqrv +4ca81d: lea ecx, [ebp - 0x2c] +4ca820: mov eax, dword ptr [esi] +4ca822: mov eax, dword ptr [eax + 0x20] +4ca825: mov edx, 0x4ca9fc ; 'COSTW4' +4ca82a: call 0x402b74 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4ca82f: mov eax, dword ptr [ebp - 8] +4ca832: mov ebx, dword ptr [eax + 0x300] +4ca838: mov eax, ebx +4ca83a: mov edx, dword ptr [eax] +4ca83c: call dword ptr [edx + 0x12c] +4ca842: mov ecx, eax +4ca844: dec ecx +4ca845: mov eax, ebx +4ca847: mov edx, 8 +4ca84c: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ca851: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ca856: lea eax, [ebp - 0x3c] +4ca859: call 0x401330 ; rtl60!@System@@VarFromReal$qqrv +4ca85e: lea ecx, [ebp - 0x3c] +4ca861: mov eax, dword ptr [esi] +4ca863: mov eax, dword ptr [eax + 0x20] +4ca866: mov edx, 0x4caa0c ; 'COSTW3' +4ca86b: call 0x402b74 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4ca870: lea eax, [ebp - 0x4c] +4ca873: mov dl, 1 +4ca875: call 0x401328 ; rtl60!@System@@VarFromBool$qqrr14System@Variantxo +4ca87a: lea ecx, [ebp - 0x4c] +4ca87d: mov eax, dword ptr [esi] +4ca87f: mov eax, dword ptr [eax + 0x20] +4ca882: mov edx, 0x4caa1c ; 'PXXNM' +4ca887: call 0x402b74 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +4ca88c: push 0 +4ca88e: lea eax, [ebp - 0x5c] +4ca891: xor edx, edx +4ca893: call 0x401350 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString +4ca898: lea eax, [ebp - 0x5c] +4ca89b: push eax +4ca89c: push 1 +4ca89e: push 1 +4ca8a0: push 0x4caa2c ; 'PRJ_MEMO' +4ca8a5: mov ecx, dword ptr [0x4d26cc] +4ca8ab: mov ecx, dword ptr [ecx + 4] +4ca8ae: mov eax, dword ptr [esi] +4ca8b0: lea edx, [eax + 0x20] +4ca8b3: mov eax, dword ptr [0x4d26cc] +4ca8b8: add eax, 0xc +4ca8bb: call 0x42a878 +4ca8c0: mov eax, dword ptr [esi] +4ca8c2: mov eax, dword ptr [eax + 0x20] +4ca8c5: call 0x402d74 ; Apollo5D6!@Apodset@TApolloTable@Commit$qqrv +4ca8ca: xor eax, eax +4ca8cc: pop edx +4ca8cd: pop ecx +4ca8ce: pop ecx +4ca8cf: mov dword ptr fs:[eax], edx +4ca8d2: push 0x4ca92b +4ca8d7: mov eax, dword ptr [ebp - 8] +4ca8da: mov eax, dword ptr [eax + 0x304] +4ca8e0: call 0x402b5c ; dbrtl60!@Db@TDataSet@Close$qqrv +4ca8e5: mov eax, dword ptr [0x4d26cc] +4ca8ea: mov eax, dword ptr [eax + 0xc] +4ca8ed: test eax, eax +4ca8ef: je 0x4ca906 +4ca8f1: mov edx, dword ptr [0x4d26cc] +4ca8f7: call 0x401118 ; rtl60!@System@TObject@Free$qqrv +4ca8fc: mov eax, dword ptr [0x4d26cc] +4ca901: xor edx, edx +4ca903: mov dword ptr [eax + 0xc], edx +4ca906: push 0 +4ca908: mov eax, dword ptr [0x4d26cc] +4ca90d: mov eax, dword ptr [eax + 4] +4ca910: push eax +4ca911: call 0x409210 ; DP_COMMON!DELE_FILE +4ca916: mov eax, dword ptr [ebp - 8] +4ca919: call 0x401118 ; rtl60!@System@TObject@Free$qqrv +4ca91e: xor eax, eax +4ca920: mov dword ptr [ebp - 8], eax +4ca923: ret +4ca924: jmp 0x401190 ; rtl60!@System@@HandleFinally$qqrv +4ca929: jmp 0x4ca8d7 +4ca92b: xor eax, eax +4ca92d: pop edx +4ca92e: pop ecx +4ca92f: pop ecx +4ca930: mov dword ptr fs:[eax], edx +4ca933: push 0x4ca960 +4ca938: lea eax, [ebp - 0x5c] +4ca93b: mov edx, dword ptr [0x5eac60] ; [rtl60!@$xp$14System@Variant] +4ca941: mov ecx, 4 +4ca946: call 0x4012b8 ; rtl60!@System@@FinalizeArray$qqrpvt1ui +4ca94b: lea eax, [ebp - 0x1c] +4ca94e: mov edx, 5 +4ca953: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi +4ca958: ret +4ca959: jmp 0x401190 ; rtl60!@System@@HandleFinally$qqrv +4ca95e: jmp 0x4ca938 +4ca960: mov al, byte ptr [ebp - 1] +4ca963: pop esi +4ca964: pop ebx +4ca965: mov esp, ebp +4ca967: pop ebp +4ca968: ret 8 diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4caa38_0x4cac0c_memo_write.asm.txt b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4caa38_0x4cac0c_memo_write.asm.txt new file mode 100644 index 000000000..bf731890c --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4caa38_0x4cac0c_memo_write.asm.txt @@ -0,0 +1,320 @@ +4caa38: push ebp +4caa39: mov ebp, esp +4caa3b: fld qword ptr [eax] +4caa3d: fadd qword ptr [ebp + 8] +4caa40: fstp qword ptr [eax] +4caa42: wait +4caa43: pop ebp +4caa44: ret 8 +4caa47: nop +4caa48: push ebp +4caa49: mov ebp, esp +4caa4b: add esp, -0x28 +4caa4e: push ebx +4caa4f: push esi +4caa50: push edi +4caa51: xor ebx, ebx +4caa53: mov dword ptr [ebp - 0x24], ebx +4caa56: mov dword ptr [ebp - 0x28], ebx +4caa59: mov dword ptr [ebp - 0x1c], ebx +4caa5c: mov dword ptr [ebp - 0x20], ebx +4caa5f: mov esi, ecx +4caa61: lea edi, [ebp - 0x18] +4caa64: movsd dword ptr es:[edi], dword ptr [esi] +4caa65: movsd dword ptr es:[edi], dword ptr [esi] +4caa66: movsd dword ptr es:[edi], dword ptr [esi] +4caa67: movsd dword ptr es:[edi], dword ptr [esi] +4caa68: mov dword ptr [ebp - 4], edx +4caa6b: mov ebx, eax +4caa6d: mov eax, dword ptr [ebp - 4] +4caa70: call 0x401258 ; rtl60!@System@@LStrAddRef$qqrpv +4caa75: lea eax, [ebp - 0x18] +4caa78: call 0x4013a8 ; rtl60!@System@@VarAddRef$qqrr14System@Variant +4caa7d: xor eax, eax +4caa7f: push ebp +4caa80: push 0x4cabbc +4caa85: push dword ptr fs:[eax] +4caa88: mov dword ptr fs:[eax], esp +4caa8b: cmp dword ptr [ebp - 4], 0 +4caa8f: je 0x4cab91 +4caa95: mov edx, dword ptr [ebp - 4] +4caa98: mov eax, 0x4cabd4 ; 'ADD_' +4caa9d: call 0x401288 ; rtl60!@System@@LStrPos$qqrv +4caaa2: dec eax +4caaa3: jne 0x4cab20 +4caaa5: mov edx, dword ptr [ebp - 4] +4caaa8: mov eax, 0x4cabe4 ; 'ADD_AMT_' +4caaad: call 0x401288 ; rtl60!@System@@LStrPos$qqrv +4caab2: dec eax +4caab3: jne 0x4cab91 +4caab9: push dword ptr [ebp - 4] +4caabc: push 0x4cabf8 ; '_' +4caac1: mov eax, dword ptr [0x4d25a0] +4caac6: push dword ptr [eax + ebx*4] +4caac9: lea eax, [ebp - 0x1c] +4caacc: mov edx, 3 +4caad1: call 0x401248 ; rtl60!@System@@LStrCatN$qqrv +4caad6: mov eax, dword ptr [ebp - 0x1c] +4caad9: push eax +4caada: lea eax, [ebp - 0x18] +4caadd: push eax +4caade: mov eax, dword ptr [ebp + 8] +4caae1: push eax +4caae2: push 0 +4caae4: mov edx, dword ptr [0x4d26cc] +4caaea: mov edx, dword ptr [edx + 8] +4caaed: lea eax, [ebp - 0x20] +4caaf0: mov ecx, 0x4cac04 ; '_ADD' +4caaf5: call 0x401240 ; rtl60!@System@@LStrCat3$qqrv +4caafa: mov eax, dword ptr [ebp - 0x20] +4caafd: push eax +4caafe: mov ecx, dword ptr [0x4d26cc] +4cab04: mov ecx, dword ptr [ecx + 4] +4cab07: mov eax, dword ptr [0x4d2694] +4cab0c: mov eax, dword ptr [eax] +4cab0e: lea edx, [eax + 0x20] +4cab11: mov eax, dword ptr [0x4d26cc] +4cab16: add eax, 0xc +4cab19: call 0x42a878 +4cab1e: jmp 0x4cab91 +4cab20: mov eax, dword ptr [0x4d25a0] +4cab25: push dword ptr [eax + ebx*4] +4cab28: push 0x4cabf8 ; '_' +4cab2d: push dword ptr [ebp - 4] +4cab30: lea eax, [ebp - 0x24] +4cab33: mov edx, 3 +4cab38: call 0x401248 ; rtl60!@System@@LStrCatN$qqrv +4cab3d: mov eax, dword ptr [ebp - 0x24] +4cab40: push eax +4cab41: lea eax, [ebp - 0x18] +4cab44: push eax +4cab45: mov eax, dword ptr [ebp + 8] +4cab48: push eax +4cab49: push 0 +4cab4b: mov eax, dword ptr [0x4d25a0] +4cab50: push dword ptr [eax + ebx*4] +4cab53: push 0x4cabf8 ; '_' +4cab58: mov eax, dword ptr [0x4d26cc] +4cab5d: push dword ptr [eax + 8] +4cab60: lea eax, [ebp - 0x28] +4cab63: mov edx, 3 +4cab68: call 0x401248 ; rtl60!@System@@LStrCatN$qqrv +4cab6d: mov eax, dword ptr [ebp - 0x28] +4cab70: push eax +4cab71: mov ecx, dword ptr [0x4d26cc] +4cab77: mov ecx, dword ptr [ecx + 4] +4cab7a: mov eax, dword ptr [0x4d2694] +4cab7f: mov eax, dword ptr [eax] +4cab81: lea edx, [eax + 0x20] +4cab84: mov eax, dword ptr [0x4d26cc] +4cab89: add eax, 0xc +4cab8c: call 0x42a878 +4cab91: xor eax, eax +4cab93: pop edx +4cab94: pop ecx +4cab95: pop ecx +4cab96: mov dword ptr fs:[eax], edx +4cab99: push 0x4cabc3 +4cab9e: lea eax, [ebp - 0x28] +4caba1: mov edx, 4 +4caba6: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi +4cabab: lea eax, [ebp - 0x18] +4cabae: call 0x4013a0 ; rtl60!@System@@VarClr$qqrr14System@Variant +4cabb3: lea eax, [ebp - 4] +4cabb6: call 0x4011e0 ; rtl60!@System@@LStrClr$qqrpv +4cabbb: ret +4cabbc: jmp 0x401190 ; rtl60!@System@@HandleFinally$qqrv +4cabc1: jmp 0x4cab9e +4cabc3: pop edi +4cabc4: pop esi +4cabc5: pop ebx +4cabc6: mov esp, ebp +4cabc8: pop ebp +4cabc9: ret 4 +4cabcc: .byte 0xff +4cabcd: .byte 0xff +4cabce: .byte 0xff +4cabcf: inc dword ptr [eax + eax] +4cabd2: add byte ptr [eax], al +4cabd4: inc ecx +4cabd5: inc esp +4cabd6: inc esp +4cabd7: pop edi +4cabd8: add byte ptr [eax], al +4cabda: add byte ptr [eax], al +4cabdc: .byte 0xff +4cabdd: .byte 0xff +4cabde: .byte 0xff +4cabdf: dec dword ptr [eax] +4cabe1: add byte ptr [eax], al +4cabe3: add byte ptr [ecx + 0x44], al +4cabe6: inc esp +4cabe7: pop edi +4cabe8: inc ecx +4cabe9: dec ebp +4cabea: push esp +4cabeb: pop edi +4cabec: add byte ptr [eax], al +4cabee: add byte ptr [eax], al +4cabf0: .byte 0xff +4cabf1: .byte 0xff +4cabf2: .byte 0xff +4cabf3: inc dword ptr [ecx] +4cabf5: add byte ptr [eax], al +4cabf7: add byte ptr [edi], bl +4cabfa: add byte ptr [eax], al +4cabfc: .byte 0xff +4cabfd: .byte 0xff +4cabfe: .byte 0xff +4cabff: inc dword ptr [eax + eax] +4cac02: add byte ptr [eax], al +4cac04: pop edi +4cac05: inc ecx +4cac06: inc esp +4cac07: inc esp +4cac08: add byte ptr [eax], al +4cac0a: add byte ptr [eax], al +4cac0c: push ebp +4cac0d: mov ebp, esp +4cac0f: mov ecx, 7 +4cac14: push 0 +4cac16: push 0 +4cac18: dec ecx +4cac19: jne 0x4cac14 +4cac1b: push ebx +4cac1c: push esi +4cac1d: push edi +4cac1e: mov ebx, eax +4cac20: xor eax, eax +4cac22: push ebp +4cac23: push 0x4cad92 +4cac28: push dword ptr fs:[eax] +4cac2b: mov dword ptr fs:[eax], esp +4cac2e: mov ecx, dword ptr [0x4d26cc] +4cac34: mov ecx, dword ptr [ecx + 8] +4cac37: lea eax, [ebp - 4] +4cac3a: mov edx, 0x4cadac ; '2_' +4cac3f: call 0x401240 ; rtl60!@System@@LStrCat3$qqrv +4cac44: mov edx, dword ptr [ebp - 4] +4cac47: mov eax, dword ptr [0x4d26cc] +4cac4c: mov eax, dword ptr [eax + 0xc] +4cac4f: mov ecx, dword ptr [eax] +4cac51: call dword ptr [ecx + 0x4c] +4cac54: mov ecx, dword ptr [0x4d26cc] +4cac5a: mov ecx, dword ptr [ecx + 8] +4cac5d: lea eax, [ebp - 8] +4cac60: mov edx, 0x4cadb8 ; '4_' +4cac65: call 0x401240 ; rtl60!@System@@LStrCat3$qqrv +4cac6a: mov edx, dword ptr [ebp - 8] +4cac6d: mov eax, dword ptr [0x4d26cc] +4cac72: mov eax, dword ptr [eax + 0xc] +4cac75: mov ecx, dword ptr [eax] +4cac77: call dword ptr [ecx + 0x4c] +4cac7a: mov esi, dword ptr [ebx + 0x300] +4cac80: mov eax, esi +4cac82: mov edx, dword ptr [eax] +4cac84: call dword ptr [edx + 0x12c] +4cac8a: mov edi, eax +4cac8c: dec edi +4cac8d: test edi, edi +4cac8f: jl 0x4cad55 +4cac95: inc edi +4cac96: xor ebx, ebx +4cac98: mov ecx, ebx +4cac9a: mov edx, 0xa +4cac9f: mov eax, esi +4caca1: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4caca6: lea edx, [ebp - 0x10] +4caca9: call 0x407bc4 ; RealGrid6!@Urmgrid@TwCells@GetString$qqrv +4cacae: mov eax, dword ptr [ebp - 0x10] +4cacb1: lea edx, [ebp - 0xc] +4cacb4: call 0x4019c4 ; rtl60!@Sysutils@Trim$qqrx17System@AnsiString +4cacb9: cmp dword ptr [ebp - 0xc], 0 +4cacbd: je 0x4cad4d +4cacc3: push 3 +4cacc5: mov ecx, ebx +4cacc7: mov edx, 6 +4caccc: mov eax, esi +4cacce: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cacd3: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4cacd8: lea eax, [ebp - 0x20] +4cacdb: call 0x401330 ; rtl60!@System@@VarFromReal$qqrv +4cace0: lea eax, [ebp - 0x20] +4cace3: push eax +4cace4: mov ecx, ebx +4cace6: mov edx, 0xa +4caceb: mov eax, esi +4caced: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cacf2: lea edx, [ebp - 0x24] +4cacf5: call 0x407bc4 ; RealGrid6!@Urmgrid@TwCells@GetString$qqrv +4cacfa: mov edx, dword ptr [ebp - 0x24] +4cacfd: mov eax, 4 +4cad02: pop ecx +4cad03: call 0x4caa48 +4cad08: push 3 +4cad0a: mov ecx, ebx +4cad0c: mov edx, 8 +4cad11: mov eax, esi +4cad13: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cad18: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4cad1d: lea eax, [ebp - 0x34] +4cad20: call 0x401330 ; rtl60!@System@@VarFromReal$qqrv +4cad25: lea eax, [ebp - 0x34] +4cad28: push eax +4cad29: mov ecx, ebx +4cad2b: mov edx, 0xa +4cad30: mov eax, esi +4cad32: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cad37: lea edx, [ebp - 0x38] +4cad3a: call 0x407bc4 ; RealGrid6!@Urmgrid@TwCells@GetString$qqrv +4cad3f: mov edx, dword ptr [ebp - 0x38] +4cad42: mov eax, 2 +4cad47: pop ecx +4cad48: call 0x4caa48 +4cad4d: inc ebx +4cad4e: dec edi +4cad4f: jne 0x4cac98 +4cad55: mov bl, 1 +4cad57: xor eax, eax +4cad59: pop edx +4cad5a: pop ecx +4cad5b: pop ecx +4cad5c: mov dword ptr fs:[eax], edx +4cad5f: push 0x4cad99 +4cad64: lea eax, [ebp - 0x38] +4cad67: call 0x4011e0 ; rtl60!@System@@LStrClr$qqrpv +4cad6c: lea eax, [ebp - 0x34] +4cad6f: call 0x4013a0 ; rtl60!@System@@VarClr$qqrr14System@Variant +4cad74: lea eax, [ebp - 0x24] +4cad77: call 0x4011e0 ; rtl60!@System@@LStrClr$qqrpv +4cad7c: lea eax, [ebp - 0x20] +4cad7f: call 0x4013a0 ; rtl60!@System@@VarClr$qqrr14System@Variant +4cad84: lea eax, [ebp - 0x10] +4cad87: mov edx, 4 +4cad8c: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi +4cad91: ret +4cad92: jmp 0x401190 ; rtl60!@System@@HandleFinally$qqrv +4cad97: jmp 0x4cad64 +4cad99: mov eax, ebx +4cad9b: pop edi +4cad9c: pop esi +4cad9d: pop ebx +4cad9e: mov esp, ebp +4cada0: pop ebp +4cada1: ret +4cada2: add byte ptr [eax], al +4cada4: .byte 0xff +4cada5: .byte 0xff +4cada6: .byte 0xff +4cada7: inc dword ptr [edx] +4cada9: add byte ptr [eax], al +4cadab: add byte ptr [edx], dh +4cadad: pop edi +4cadae: add byte ptr [eax], al +4cadb0: .byte 0xff +4cadb1: .byte 0xff +4cadb2: .byte 0xff +4cadb3: inc dword ptr [edx] +4cadb5: add byte ptr [eax], al +4cadb7: add byte ptr [edi + ebx*2], dh +4cadba: add byte ptr [eax], al diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cadbc_filter_0x4cae70_boq_drawcell.asm.txt b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cadbc_filter_0x4cae70_boq_drawcell.asm.txt new file mode 100644 index 000000000..92c1eb5ac --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cadbc_filter_0x4cae70_boq_drawcell.asm.txt @@ -0,0 +1,239 @@ +4cadbc: push ebp +4cadbd: mov ebp, esp +4cadbf: push 0 +4cadc1: push 0 +4cadc3: push ebx +4cadc4: mov ebx, eax +4cadc6: xor eax, eax +4cadc8: push ebp +4cadc9: push 0x4cae2e +4cadce: push dword ptr fs:[eax] +4cadd1: mov dword ptr fs:[eax], esp +4cadd4: push 0x4cae44 ; '(BDCODE1="T") .and. (BDCODE1>"T' +4cadd9: lea edx, [ebp - 8] +4caddc: mov eax, dword ptr [ebx + 0x318] +4cade2: mov eax, dword ptr [eax + 0x218] +4cade8: call 0x4019dc ; rtl60!@Sysutils@IntToStr$qqri +4caded: push dword ptr [ebp - 8] +4cadf0: push 0x4cae6c ; '")' +4cadf5: lea eax, [ebp - 4] +4cadf8: mov edx, 3 +4cadfd: call 0x401248 ; rtl60!@System@@LStrCatN$qqrv +4cae02: mov edx, dword ptr [ebp - 4] +4cae05: mov eax, dword ptr [ebx + 0x304] +4cae0b: mov ecx, dword ptr [eax] +4cae0d: call dword ptr [ecx + 0x198] +4cae13: xor eax, eax +4cae15: pop edx +4cae16: pop ecx +4cae17: pop ecx +4cae18: mov dword ptr fs:[eax], edx +4cae1b: push 0x4cae35 +4cae20: lea eax, [ebp - 8] +4cae23: mov edx, 2 +4cae28: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi +4cae2d: ret +4cae2e: jmp 0x401190 ; rtl60!@System@@HandleFinally$qqrv +4cae33: jmp 0x4cae20 +4cae35: pop ebx +4cae36: pop ecx +4cae37: pop ecx +4cae38: pop ebp +4cae39: ret +4cae3a: add byte ptr [eax], al +4cae3c: .byte 0xff +4cae3d: .byte 0xff +4cae3e: .byte 0xff +4cae3f: call ptr [edi] +4cae41: add byte ptr [eax], al +4cae43: add byte ptr [eax], ch +4cae45: inc edx +4cae46: inc esp +4cae47: inc ebx +4cae48: dec edi +4cae49: inc esp +4cae4a: inc ebp +4cae4b: xor dword ptr [0x29225422], edi +4cae51: and byte ptr [esi], ch +4cae53: popal +4cae54: outsb dx, byte ptr [esi] +4cae55: and byte ptr cs:[eax], ch +4cae59: inc edx +4cae5a: inc esp +4cae5b: inc ebx +4cae5c: dec edi +4cae5d: inc esp +4cae5e: inc ebp +4cae5f: xor dword ptr [esi], edi +4cae61: and dl, byte ptr [eax + eax - 1] +4cae65: .byte 0xff +4cae66: .byte 0xff +4cae67: inc dword ptr [edx] +4cae69: add byte ptr [eax], al +4cae6b: add byte ptr [edx], ah +4cae6d: sub dword ptr [eax], eax +4cae6f: add byte ptr [ebp - 0x75], dl +4cae72: in al, dx +4cae73: push ecx +4cae74: mov ecx, 4 +4cae79: push 0 +4cae7b: push 0 +4cae7d: dec ecx +4cae7e: jne 0x4cae79 +4cae80: xchg dword ptr [ebp - 4], ecx +4cae83: push ebx +4cae84: push esi +4cae85: mov esi, edx +4cae87: xor edx, edx +4cae89: push ebp +4cae8a: push 0x4cafd2 +4cae8f: push dword ptr fs:[edx] +4cae92: mov dword ptr fs:[edx], esp +4cae95: mov ebx, dword ptr [eax + 0x304] +4cae9b: mov eax, esi +4cae9d: call 0x401c6c ; rtl60!@Classes@TCollectionItem@GetIndex$qqrv +4caea2: cmp eax, 9 +4caea5: ja 0x4cafb7 +4caeab: mov al, byte ptr [eax + 0x4caeb8] +4caeb1: jmp dword ptr [eax*4 + 0x4caec2] +4caeb8: add byte ptr [eax], al +4caeba: add byte ptr [ecx], al +4caebc: add dword ptr [edx], eax +4caebe: add dword ptr [edx], eax +4caec0: add dword ptr [edx], eax +4caec2: mov bh, 0xaf +4caec4: dec esp +4caec5: add dh, cl +4caec7: scasb al, byte ptr es:[edi] +4caec8: dec esp +4caec9: add byte ptr [0x8d004caf], bl +4caecf: inc ebp +4caed0: hlt +4caed1: mov edx, dword ptr [esi + 0x7c] +4caed4: mov dl, byte ptr [edx + 0x4d2411] +4caeda: call 0x401208 ; rtl60!@System@@LStrFromChar$qqrr17System@AnsiStringc +4caedf: mov ecx, dword ptr [ebp - 0xc] +4caee2: lea eax, [ebp - 8] +4caee5: mov edx, 0x4cafec ; 'T_AMT' +4caeea: call 0x401240 ; rtl60!@System@@LStrCat3$qqrv +4caeef: mov edx, dword ptr [ebp - 8] +4caef2: mov eax, ebx +4caef4: call 0x402da4 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4caef9: add esp, -0xc +4caefc: fstp xword ptr [esp] +4caeff: wait +4caf00: lea edx, [ebp - 4] +4caf03: mov eax, 0x4caffc ; '#,0.###;;#' +4caf08: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4caf0d: mov edx, dword ptr [ebp - 4] +4caf10: mov eax, dword ptr [ebp + 0x14] +4caf13: call 0x4011f0 ; rtl60!@System@@LStrAsg$qqrpvpxv +4caf18: jmp 0x4cafb7 +4caf1d: mov edx, 0x4cb010 ; 'T_AMT1' +4caf22: mov eax, ebx +4caf24: call 0x402da4 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4caf29: fcomp dword ptr [0x4cb018] ; =0.0 +4caf2f: fnstsw ax +4caf31: sahf +4caf32: jne 0x4caf54 +4caf34: push 0 +4caf36: push 0 +4caf38: push 0 +4caf3a: lea edx, [ebp - 0x10] +4caf3d: mov eax, 0x4cb024 ; '#,0.##%;;#' +4caf42: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4caf47: mov edx, dword ptr [ebp - 0x10] +4caf4a: mov eax, dword ptr [ebp + 0x14] +4caf4d: call 0x4011f0 ; rtl60!@System@@LStrAsg$qqrpvpxv +4caf52: jmp 0x4cafb7 +4caf54: lea eax, [ebp - 0x1c] +4caf57: mov edx, dword ptr [esi + 0x7c] +4caf5a: mov dl, byte ptr [edx + 0x4d2411] +4caf60: call 0x401208 ; rtl60!@System@@LStrFromChar$qqrr17System@AnsiStringc +4caf65: mov ecx, dword ptr [ebp - 0x1c] +4caf68: lea eax, [ebp - 0x18] +4caf6b: mov edx, 0x4cafec ; 'T_AMT' +4caf70: call 0x401240 ; rtl60!@System@@LStrCat3$qqrv +4caf75: mov edx, dword ptr [ebp - 0x18] +4caf78: mov eax, ebx +4caf7a: call 0x402da4 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4caf7f: fstp qword ptr [ebp - 0x24] +4caf82: wait +4caf83: mov edx, 0x4cb010 ; 'T_AMT1' +4caf88: mov eax, ebx +4caf8a: call 0x402da4 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4caf8f: fdivr qword ptr [ebp - 0x24] +4caf92: fmul dword ptr [0x4cb030] ; =100.0 +4caf98: add esp, -0xc +4caf9b: fstp xword ptr [esp] +4caf9e: wait +4caf9f: lea edx, [ebp - 0x14] +4cafa2: mov eax, 0x4cb024 ; '#,0.##%;;#' +4cafa7: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4cafac: mov edx, dword ptr [ebp - 0x14] +4cafaf: mov eax, dword ptr [ebp + 0x14] +4cafb2: call 0x4011f0 ; rtl60!@System@@LStrAsg$qqrpvpxv +4cafb7: xor eax, eax +4cafb9: pop edx +4cafba: pop ecx +4cafbb: pop ecx +4cafbc: mov dword ptr fs:[eax], edx +4cafbf: push 0x4cafd9 +4cafc4: lea eax, [ebp - 0x1c] +4cafc7: mov edx, 7 +4cafcc: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi +4cafd1: ret +4cafd2: jmp 0x401190 ; rtl60!@System@@HandleFinally$qqrv +4cafd7: jmp 0x4cafc4 +4cafd9: pop esi +4cafda: pop ebx +4cafdb: mov esp, ebp +4cafdd: pop ebp +4cafde: ret 0x10 +4cafe1: add byte ptr [eax], al +4cafe3: add bh, bh +4cafe5: .byte 0xff +4cafe6: .byte 0xff +4cafe7: inc dword ptr [0x54000000] +4cafed: pop edi +4cafee: inc ecx +4cafef: dec ebp +4caff0: push esp +4caff1: add byte ptr [eax], al +4caff3: add bh, bh +4caff5: .byte 0xff +4caff6: .byte 0xff +4caff7: dec dword ptr [edx] +4caff9: add byte ptr [eax], al +4caffb: add byte ptr [ebx], ah +4caffd: sub al, 0x30 +4cafff: and esp, dword ptr cs:[ebx] +4cb002: and edi, dword ptr [ebx] +4cb004: cmp esp, dword ptr [ebx] +4cb006: add byte ptr [eax], al +4cb008: .byte 0xff +4cb009: .byte 0xff +4cb00a: .byte 0xff +4cb00b: inc dword ptr [esi] +4cb00d: add byte ptr [eax], al +4cb00f: add byte ptr [edi + ebx*2 + 0x41], dl +4cb013: dec ebp +4cb014: push esp +4cb015: xor dword ptr [eax], eax +4cb017: add byte ptr [eax], al +4cb019: add byte ptr [eax], al +4cb01b: add bh, bh +4cb01d: .byte 0xff +4cb01e: .byte 0xff +4cb01f: dec dword ptr [edx] +4cb021: add byte ptr [eax], al +4cb023: add byte ptr [ebx], ah +4cb025: sub al, 0x30 +4cb027: and esp, dword ptr cs:[ebx] +4cb02a: and eax, 0x233b3b +4cb02f: add byte ptr [eax], al +4cb031: add al, cl +4cb033: inc edx +4cb034: call 0x4026bc ; vcl60!@Forms@TCustomForm@Close$qqrv +4cb039: ret +4cb03a: mov eax, eax diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cb03c_add_row.asm.txt b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cb03c_add_row.asm.txt new file mode 100644 index 000000000..f6696e570 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cb03c_add_row.asm.txt @@ -0,0 +1,475 @@ +4cb03c: push ebp +4cb03d: mov ebp, esp +4cb03f: push ecx +4cb040: mov ecx, 5 +4cb045: push 0 +4cb047: push 0 +4cb049: dec ecx +4cb04a: jne 0x4cb045 +4cb04c: xchg dword ptr [ebp - 4], ecx +4cb04f: push ebx +4cb050: push esi +4cb051: push edi +4cb052: mov ebx, dword ptr [ebp + 0x14] +4cb055: mov esi, dword ptr [ebp + 0x10] +4cb058: add esi, esi +4cb05a: inc esi +4cb05b: test esi, esi +4cb05d: js 0x4cb066 +4cb05f: mov edi, dword ptr [ebx + esi*4] +4cb062: dec esi +4cb063: push edi +4cb064: jns 0x4cb05f +4cb066: mov dword ptr [ebp + 0x14], esp +4cb069: mov dword ptr [ebp - 0xc], ecx +4cb06c: mov dword ptr [ebp - 8], edx +4cb06f: mov dword ptr [ebp - 4], eax +4cb072: mov edi, dword ptr [ebp + 0x14] +4cb075: mov eax, dword ptr [ebp - 8] +4cb078: call 0x401258 ; rtl60!@System@@LStrAddRef$qqrpv +4cb07d: mov eax, dword ptr [ebp - 0xc] +4cb080: call 0x401258 ; rtl60!@System@@LStrAddRef$qqrpv +4cb085: mov eax, dword ptr [ebp + 0x18] +4cb088: call 0x401258 ; rtl60!@System@@LStrAddRef$qqrpv +4cb08d: xor eax, eax +4cb08f: push ebp +4cb090: push 0x4cb426 +4cb095: push dword ptr fs:[eax] +4cb098: mov dword ptr fs:[eax], esp +4cb09b: mov esi, dword ptr [ebp + 0x10] +4cb09e: test esi, esi +4cb0a0: jl 0x4cb0c3 +4cb0a2: inc esi +4cb0a3: mov ebx, edi +4cb0a5: fld qword ptr [ebx] +4cb0a7: fabs +4cb0a9: fld xword ptr [0x4cb43c] +4cb0af: fcompp +4cb0b1: fnstsw ax +4cb0b3: sahf +4cb0b4: jae 0x4cb0bd +4cb0b6: xor eax, eax +4cb0b8: mov dword ptr [ebx], eax +4cb0ba: mov dword ptr [ebx + 4], eax +4cb0bd: add ebx, 8 +4cb0c0: dec esi +4cb0c1: jne 0x4cb0a5 +4cb0c3: mov eax, dword ptr [ebp - 4] +4cb0c6: sub eax, 2 +4cb0c9: jb 0x4cb0dc +4cb0cb: fld qword ptr [edi] +4cb0cd: fcomp dword ptr [0x4cb448] ; =0.0 +4cb0d3: fnstsw ax +4cb0d5: sahf +4cb0d6: je 0x4cb3f6 +4cb0dc: mov eax, dword ptr [ebp + 0x1c] +4cb0df: mov eax, dword ptr [eax - 4] +4cb0e2: mov ebx, dword ptr [eax + 0x300] +4cb0e8: push 0 +4cb0ea: xor ecx, ecx +4cb0ec: mov dl, 1 +4cb0ee: mov eax, ebx +4cb0f0: call 0x407c44 ; RealGrid6!@Urmgrid@TRealGrid@AddRow$qqrooo +4cb0f5: mov eax, ebx +4cb0f7: mov edx, dword ptr [eax] +4cb0f9: call dword ptr [edx + 0x12c] +4cb0ff: mov esi, eax +4cb101: dec esi +4cb102: cmp dword ptr [ebp + 8], 0x28c +4cb109: je 0x4cb114 +4cb10b: cmp dword ptr [ebp + 8], 0xfb +4cb112: jne 0x4cb12e +4cb114: mov ecx, esi +4cb116: xor edx, edx +4cb118: mov eax, ebx +4cb11a: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cb11f: mov edx, 0x4cb454 ; ' ◇' +4cb124: call 0x407bcc ; RealGrid6!@Urmgrid@TwCells@SetString$qqrx17System@AnsiString +4cb129: jmp 0x4cb1ef +4cb12e: mov eax, dword ptr [ebp - 4] +4cb131: sub eax, 1 +4cb134: jae 0x4cb19c +4cb136: mov eax, dword ptr [ebp + 0x1c] +4cb139: inc dword ptr [eax - 8] +4cb13c: lea eax, [ebp - 0x10] +4cb13f: push eax +4cb140: lea eax, [ebp - 0x1c] +4cb143: push eax +4cb144: mov eax, dword ptr [ebp + 0x1c] +4cb147: mov eax, dword ptr [eax - 8] +4cb14a: dec eax +4cb14b: mov edx, eax +4cb14d: add edx, edx +4cb14f: inc edx +4cb150: mov ecx, 2 +4cb155: mov eax, 0x4cb460 ; '가나다라마바사아자차카타파하거너더러머버서어저처커터퍼허' +4cb15a: call 0x401278 ; rtl60!@System@@LStrCopy$qqrv +4cb15f: lea eax, [ebp - 0x1c] +4cb162: mov edx, 0x4cb4a4 ; '.' +4cb167: call 0x401238 ; rtl60!@System@@LStrCat$qqrv +4cb16c: mov eax, dword ptr [ebp - 0x1c] +4cb16f: mov dword ptr [ebp - 0x18], eax +4cb172: mov byte ptr [ebp - 0x14], 0xb +4cb176: lea edx, [ebp - 0x18] +4cb179: xor ecx, ecx +4cb17b: mov eax, 0x4cb4b0 ; '%-5s' +4cb180: call 0x401a74 ; rtl60!@Sysutils@Format$qqrx17System@AnsiStringpx14System@TVarRecxi +4cb185: mov eax, dword ptr [ebp - 0x10] +4cb188: push eax +4cb189: mov ecx, esi +4cb18b: xor edx, edx +4cb18d: mov eax, ebx +4cb18f: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cb194: pop edx +4cb195: call 0x407bcc ; RealGrid6!@Urmgrid@TwCells@SetString$qqrx17System@AnsiString +4cb19a: jmp 0x4cb1ef +4cb19c: mov eax, dword ptr [ebp + 0x1c] +4cb19f: inc dword ptr [eax - 0xc] +4cb1a2: lea eax, [ebp - 0x20] +4cb1a5: push eax +4cb1a6: lea edx, [ebp - 0x24] +4cb1a9: mov eax, dword ptr [ebp + 0x1c] +4cb1ac: mov eax, dword ptr [eax - 0xc] +4cb1af: call 0x4019dc ; rtl60!@Sysutils@IntToStr$qqri +4cb1b4: lea eax, [ebp - 0x24] +4cb1b7: mov edx, 0x4cb4a4 ; '.' +4cb1bc: call 0x401238 ; rtl60!@System@@LStrCat$qqrv +4cb1c1: mov eax, dword ptr [ebp - 0x24] +4cb1c4: mov dword ptr [ebp - 0x18], eax +4cb1c7: mov byte ptr [ebp - 0x14], 0xb +4cb1cb: lea edx, [ebp - 0x18] +4cb1ce: xor ecx, ecx +4cb1d0: mov eax, 0x4cb4c0 ; '%5s' +4cb1d5: call 0x401a74 ; rtl60!@Sysutils@Format$qqrx17System@AnsiStringpx14System@TVarRecxi +4cb1da: mov eax, dword ptr [ebp - 0x20] +4cb1dd: push eax +4cb1de: mov ecx, esi +4cb1e0: xor edx, edx +4cb1e2: mov eax, ebx +4cb1e4: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cb1e9: pop edx +4cb1ea: call 0x407bcc ; RealGrid6!@Urmgrid@TwCells@SetString$qqrx17System@AnsiString +4cb1ef: mov ecx, esi +4cb1f1: mov edx, 1 +4cb1f6: mov eax, ebx +4cb1f8: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cb1fd: mov edx, dword ptr [ebp - 8] +4cb200: call 0x407bcc ; RealGrid6!@Urmgrid@TwCells@SetString$qqrx17System@AnsiString +4cb205: mov ecx, esi +4cb207: mov edx, 2 +4cb20c: mov eax, ebx +4cb20e: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cb213: mov edx, dword ptr [ebp - 0xc] +4cb216: call 0x407bcc ; RealGrid6!@Urmgrid@TwCells@SetString$qqrx17System@AnsiString +4cb21b: push dword ptr [edi + 4] +4cb21e: push dword ptr [edi] +4cb220: mov ecx, esi +4cb222: mov edx, 3 +4cb227: mov eax, ebx +4cb229: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cb22e: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4cb233: push dword ptr [edi + 0x14] +4cb236: push dword ptr [edi + 0x10] +4cb239: mov ecx, esi +4cb23b: mov edx, 4 +4cb240: mov eax, ebx +4cb242: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cb247: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4cb24c: push dword ptr [edi + 0x1c] +4cb24f: push dword ptr [edi + 0x18] +4cb252: mov ecx, esi +4cb254: mov edx, 6 +4cb259: mov eax, ebx +4cb25b: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cb260: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4cb265: push dword ptr [edi + 0xc] +4cb268: push dword ptr [edi + 8] +4cb26b: mov ecx, esi +4cb26d: mov edx, 8 +4cb272: mov eax, ebx +4cb274: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cb279: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4cb27e: mov ecx, esi +4cb280: mov edx, 0xa +4cb285: mov eax, ebx +4cb287: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cb28c: mov edx, dword ptr [ebp + 0x18] +4cb28f: call 0x407bcc ; RealGrid6!@Urmgrid@TwCells@SetString$qqrx17System@AnsiString +4cb294: mov ecx, esi +4cb296: mov edx, 0xb +4cb29b: mov eax, ebx +4cb29d: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cb2a2: mov dx, word ptr [ebp + 0xc] +4cb2a6: call 0x407bf4 ; RealGrid6!@Urmgrid@TwCells@SetWord$qqrus +4cb2ab: mov ecx, esi +4cb2ad: mov edx, 0xd +4cb2b2: mov eax, ebx +4cb2b4: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cb2b9: mov edx, dword ptr [ebp + 8] +4cb2bc: call 0x407c04 ; RealGrid6!@Urmgrid@TwCells@SetLong$qqri +4cb2c1: cmp word ptr [ebp + 0xc], 1 +4cb2c6: jne 0x4cb354 +4cb2cc: fld qword ptr [0x597094] +4cb2d2: fcomp dword ptr [0x4cb448] ; =0.0 +4cb2d8: fnstsw ax +4cb2da: sahf +4cb2db: je 0x4cb354 +4cb2dd: fld qword ptr [edi] +4cb2df: fdiv qword ptr [0x597094] +4cb2e5: fmul dword ptr [0x4cb4c4] ; =100.0 +4cb2eb: add esp, -8 +4cb2ee: fstp qword ptr [esp] +4cb2f1: wait +4cb2f2: mov ecx, esi +4cb2f4: mov edx, 0xc +4cb2f9: mov eax, ebx +4cb2fb: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cb300: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4cb305: mov ecx, esi +4cb307: mov edx, 0xc +4cb30c: mov eax, ebx +4cb30e: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cb313: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4cb318: add esp, -0xc +4cb31b: fstp xword ptr [esp] +4cb31e: wait +4cb31f: lea edx, [ebp - 0x2c] +4cb322: mov eax, 0x4cb4d0 ; '0.000%;;#' +4cb327: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4cb32c: mov ecx, dword ptr [ebp - 0x2c] +4cb32f: lea eax, [ebp - 0x28] +4cb332: mov edx, 0x4cb4e4 ; '가. x ' +4cb337: call 0x401240 ; rtl60!@System@@LStrCat3$qqrv +4cb33c: mov eax, dword ptr [ebp - 0x28] +4cb33f: push eax +4cb340: mov ecx, esi +4cb342: mov edx, 2 +4cb347: mov eax, ebx +4cb349: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cb34e: pop edx +4cb34f: call 0x407bcc ; RealGrid6!@Urmgrid@TwCells@SetString$qqrx17System@AnsiString +4cb354: mov eax, dword ptr [ebp + 0x18] +4cb357: mov edx, 0x4cb4f4 ; 'C_DOSEOH' +4cb35c: call 0x401250 ; rtl60!@System@@LStrCmp$qqrv +4cb361: jne 0x4cb36e +4cb363: mov dword ptr [0x5e92f8], esi +4cb369: jmp 0x4cb3f6 +4cb36e: mov eax, dword ptr [ebp + 0x18] +4cb371: mov edx, 0x4cb508 ; 'C_TOT_1' +4cb376: call 0x401250 ; rtl60!@System@@LStrCmp$qqrv +4cb37b: jne 0x4cb385 +4cb37d: mov dword ptr [0x5e92e4], esi +4cb383: jmp 0x4cb3f6 +4cb385: mov eax, dword ptr [ebp + 0x18] +4cb388: mov edx, 0x4cb518 ; 'C_IYUN' +4cb38d: call 0x401250 ; rtl60!@System@@LStrCmp$qqrv +4cb392: jne 0x4cb39c +4cb394: mov dword ptr [0x5e92e8], esi +4cb39a: jmp 0x4cb3f6 +4cb39c: mov eax, dword ptr [ebp + 0x18] +4cb39f: mov edx, 0x4cb528 ; 'C_KONGGUP' +4cb3a4: call 0x401250 ; rtl60!@System@@LStrCmp$qqrv +4cb3a9: jne 0x4cb3b3 +4cb3ab: mov dword ptr [0x5e92ec], esi +4cb3b1: jmp 0x4cb3f6 +4cb3b3: mov eax, dword ptr [ebp + 0x18] +4cb3b6: mov edx, 0x4cb53c ; 'C_BUGA' +4cb3bb: call 0x401250 ; rtl60!@System@@LStrCmp$qqrv +4cb3c0: jne 0x4cb3ca +4cb3c2: mov dword ptr [0x5e92f0], esi +4cb3c8: jmp 0x4cb3f6 +4cb3ca: mov eax, dword ptr [ebp + 0x18] +4cb3cd: mov edx, 0x4cb54c ; 'C_DOGUP' +4cb3d2: call 0x401250 ; rtl60!@System@@LStrCmp$qqrv +4cb3d7: jne 0x4cb3e1 +4cb3d9: mov dword ptr [0x5e92f4], esi +4cb3df: jmp 0x4cb3f6 +4cb3e1: mov eax, dword ptr [ebp + 0x18] +4cb3e4: mov edx, 0x4cb55c ; 'C_TOTAL' +4cb3e9: call 0x401250 ; rtl60!@System@@LStrCmp$qqrv +4cb3ee: jne 0x4cb3f6 +4cb3f0: mov dword ptr [0x5e92f4], esi +4cb3f6: xor eax, eax +4cb3f8: pop edx +4cb3f9: pop ecx +4cb3fa: pop ecx +4cb3fb: mov dword ptr fs:[eax], edx +4cb3fe: push 0x4cb42d +4cb403: lea eax, [ebp - 0x2c] +4cb406: mov edx, 5 +4cb40b: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi +4cb410: lea eax, [ebp - 0x10] +4cb413: mov edx, 3 +4cb418: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi +4cb41d: lea eax, [ebp + 0x18] +4cb420: call 0x4011e0 ; rtl60!@System@@LStrClr$qqrpv +4cb425: ret +4cb426: jmp 0x401190 ; rtl60!@System@@HandleFinally$qqrv +4cb42b: jmp 0x4cb403 +4cb42d: mov edi, dword ptr [ebp - 0x38] +4cb430: mov esi, dword ptr [ebp - 0x34] +4cb433: mov ebx, dword ptr [ebp - 0x30] +4cb436: mov esp, ebp +4cb438: pop ebp +4cb439: ret 0x14 +4cb43c: add byte ptr [eax], al +4cb43e: bound ebp, qword ptr [ebp + eax*8 + 0x41ad78eb] +4cb445: inc eax +4cb446: add byte ptr [eax], al +4cb448: add byte ptr [eax], al +4cb44a: add byte ptr [eax], al +4cb44c: .byte 0xff +4cb44d: .byte 0xff +4cb44e: .byte 0xff +4cb44f: inc dword ptr [ebx] +4cb451: add byte ptr [eax], al +4cb453: add byte ptr [eax], ah +4cb455: mov eax, dword ptr [0xffff00de] +4cb45a: .byte 0xff +4cb45b: .byte 0xff +4cb45c: cmp byte ptr [eax], al +4cb45e: add byte ptr [eax], al +4cb460: mov al, 0xa1 +4cb462: mov bl, 0xaa +4cb464: mov ah, 0xd9 +4cb466: mov dh, 0xf3 +4cb468: mov eax, 0xbbd9b9b6 +4cb46d: out 0xbe, eax +4cb46f: mov al, 0xda +4cb472: ret 0xc4f7 +4cb475: stosd dword ptr es:[edi], eax +4cb476: lds edi, ptr [eax - 0x30383b3a] +4cb47c: mov al, 0xc5 +4cb47e: mov bl, 0xca +4cb480: mov ah, 0xf5 +4cb482: mov bh, 0xaf +4cb484: mov eax, 0xbcf6b9d3 +4cb489: lodsd eax, dword ptr [esi] +4cb48a: mov esi, 0xc3fac0ee +4cb48f: mov bl, 0xc4 +4cb491: mov edi, 0xdbc6cdc5 +4cb496: .byte 0xc7 +4cb497: jecxz 0x4cb499 +4cb499: add byte ptr [eax], al +4cb49b: add bh, bh +4cb49d: .byte 0xff +4cb49e: .byte 0xff +4cb49f: inc dword ptr [ecx] +4cb4a1: add byte ptr [eax], al +4cb4a3: add byte ptr [esi], ch +4cb4a5: add byte ptr [eax], al +4cb4a7: add bh, bh +4cb4a9: .byte 0xff +4cb4aa: .byte 0xff +4cb4ab: inc dword ptr [eax + eax] +4cb4ae: add byte ptr [eax], al +4cb4b0: and eax, 0x73352d +4cb4b5: add byte ptr [eax], al +4cb4b7: add bh, bh +4cb4b9: .byte 0xff +4cb4ba: .byte 0xff +4cb4bb: inc dword ptr [ebx] +4cb4bd: add byte ptr [eax], al +4cb4bf: add byte ptr [0x7335], ah +4cb4c5: add al, cl +4cb4c7: inc edx +4cb4c8: .byte 0xff +4cb4c9: .byte 0xff +4cb4ca: .byte 0xff +4cb4cb: dec dword ptr [ecx] +4cb4cd: add byte ptr [eax], al +4cb4cf: add byte ptr [eax], dh +4cb4d1: xor byte ptr cs:[eax], dh +4cb4d4: xor byte ptr [0x233b3b], ah +4cb4da: add byte ptr [eax], al +4cb4dc: .byte 0xff +4cb4dd: .byte 0xff +4cb4de: .byte 0xff +4cb4df: inc dword ptr [esi] +4cb4e1: add byte ptr [eax], al +4cb4e3: add byte ptr [eax + 0x78202ea1], dh +4cb4e9: and byte ptr [eax], al +4cb4eb: add bh, bh +4cb4ed: .byte 0xff +4cb4ee: .byte 0xff +4cb4ef: dec dword ptr [eax] +4cb4f1: add byte ptr [eax], al +4cb4f3: add byte ptr [ebx + 0x5f], al +4cb4f6: inc esp +4cb4f7: dec edi +4cb4f8: push ebx +4cb4f9: inc ebp +4cb4fa: dec edi +4cb4fb: dec eax +4cb4fc: add byte ptr [eax], al +4cb4fe: add byte ptr [eax], al +4cb500: .byte 0xff +4cb501: .byte 0xff +4cb502: .byte 0xff +4cb503: inc dword ptr [edi] +4cb505: add byte ptr [eax], al +4cb507: add byte ptr [ebx + 0x5f], al +4cb50a: push esp +4cb50b: dec edi +4cb50c: push esp +4cb50d: pop edi +4cb50e: xor dword ptr [eax], eax +4cb510: .byte 0xff +4cb511: .byte 0xff +4cb512: .byte 0xff +4cb513: inc dword ptr [esi] +4cb515: add byte ptr [eax], al +4cb517: add byte ptr [ebx + 0x5f], al +4cb51a: dec ecx +4cb51b: pop ecx +4cb51c: push ebp +4cb51d: dec esi +4cb51e: add byte ptr [eax], al +4cb520: .byte 0xff +4cb521: .byte 0xff +4cb522: .byte 0xff +4cb523: dec dword ptr [ecx] +4cb525: add byte ptr [eax], al +4cb527: add byte ptr [ebx + 0x5f], al +4cb52a: dec ebx +4cb52b: dec edi +4cb52c: dec esi +4cb52d: inc edi +4cb52e: inc edi +4cb52f: push ebp +4cb530: push eax +4cb531: add byte ptr [eax], al +4cb533: add bh, bh +4cb535: .byte 0xff +4cb536: .byte 0xff +4cb537: inc dword ptr [esi] +4cb539: add byte ptr [eax], al +4cb53b: add byte ptr [ebx + 0x5f], al +4cb53e: inc edx +4cb53f: push ebp +4cb540: inc edi +4cb541: inc ecx +4cb542: add byte ptr [eax], al +4cb544: .byte 0xff +4cb545: .byte 0xff +4cb546: .byte 0xff +4cb547: inc dword ptr [edi] +4cb549: add byte ptr [eax], al +4cb54b: add byte ptr [ebx + 0x5f], al +4cb54e: inc esp +4cb54f: dec edi +4cb550: inc edi +4cb551: push ebp +4cb552: push eax +4cb553: add bh, bh +4cb555: .byte 0xff +4cb556: .byte 0xff +4cb557: inc dword ptr [edi] +4cb559: add byte ptr [eax], al +4cb55b: add byte ptr [ebx + 0x5f], al +4cb55e: push esp +4cb55f: dec edi +4cb560: push esp +4cb561: inc ecx +4cb562: dec esp +4cb563: .byte 0x00 diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cb564_load_rows.asm.txt b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cb564_load_rows.asm.txt new file mode 100644 index 000000000..109a24b86 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cb564_load_rows.asm.txt @@ -0,0 +1,2005 @@ +4cb564: push ebp +4cb565: mov ebp, esp +4cb567: mov ecx, 0x11 +4cb56c: push 0 +4cb56e: push 0 +4cb570: dec ecx +4cb571: jne 0x4cb56c +4cb573: push ecx +4cb574: push ebx +4cb575: push esi +4cb576: push edi +4cb577: mov dword ptr [ebp - 4], eax +4cb57a: mov ebx, 0x586c44 +4cb57f: xor eax, eax +4cb581: push ebp +4cb582: push 0x4cd27f +4cb587: push dword ptr fs:[eax] +4cb58a: mov dword ptr fs:[eax], esp +4cb58d: xor eax, eax +4cb58f: mov dword ptr [ebp - 8], eax +4cb592: xor eax, eax +4cb594: mov dword ptr [ebp - 0xc], eax +4cb597: xor edx, edx +4cb599: push ebp +4cb59a: push 0x4cd25a +4cb59f: push dword ptr fs:[edx] +4cb5a2: mov dword ptr fs:[edx], esp +4cb5a5: mov eax, dword ptr [ebp - 4] +4cb5a8: mov eax, dword ptr [eax + 0x300] +4cb5ae: call 0x407b9c ; RealGrid6!@Urgrids@TwCustomGrid@BeginUpdate$qqrv +4cb5b3: mov eax, 0x5e92e4 +4cb5b8: xor ecx, ecx +4cb5ba: mov edx, 0x18 +4cb5bf: call 0x4010c0 ; rtl60!@System@@FillChar$qqrpvic +4cb5c4: mov eax, dword ptr [ebp - 4] +4cb5c7: mov eax, dword ptr [eax + 0x320] +4cb5cd: xor edx, edx +4cb5cf: call 0x402fe4 ; RealGridEX6!@Urcombos@TwCombo@SetInteger$qqri +4cb5d4: mov eax, dword ptr [ebp - 4] +4cb5d7: mov eax, dword ptr [eax + 0x328] +4cb5dd: xor edx, edx +4cb5df: call 0x402fe4 ; RealGridEX6!@Urcombos@TwCombo@SetInteger$qqri +4cb5e4: mov eax, dword ptr [ebp - 4] +4cb5e7: mov eax, dword ptr [eax + 0x330] +4cb5ed: xor edx, edx +4cb5ef: call 0x402fe4 ; RealGridEX6!@Urcombos@TwCombo@SetInteger$qqri +4cb5f4: mov eax, dword ptr [ebp - 4] +4cb5f7: mov eax, dword ptr [eax + 0x300] +4cb5fd: xor edx, edx +4cb5ff: mov dword ptr [eax + 0x4d0], edx +4cb605: mov dword ptr [eax + 0x4d4], edx +4cb60b: call 0x407c34 ; RealGrid6!@Urmgrid@TRealGrid@Clear$qqrv +4cb610: cmp dword ptr [0x5e8a00], 3 +4cb617: jne 0x4cb686 +4cb619: push ebp +4cb61a: push 0x4cd298 ; 'C_SAGUP' +4cb61f: mov eax, dword ptr [ebx + 0x107e0] +4cb625: mov dword ptr [ebp - 0x34], eax +4cb628: mov eax, dword ptr [ebx + 0x107e4] +4cb62e: mov dword ptr [ebp - 0x30], eax +4cb631: mov eax, dword ptr [ebx + 0x20c30] +4cb637: mov dword ptr [ebp - 0x2c], eax +4cb63a: mov eax, dword ptr [ebx + 0x20c34] +4cb640: mov dword ptr [ebp - 0x28], eax +4cb643: mov eax, dword ptr [ebx + 0x31080] +4cb649: mov dword ptr [ebp - 0x24], eax +4cb64c: mov eax, dword ptr [ebx + 0x31084] +4cb652: mov dword ptr [ebp - 0x20], eax +4cb655: mov eax, dword ptr [ebx + 0x414d0] +4cb65b: mov dword ptr [ebp - 0x1c], eax +4cb65e: mov eax, dword ptr [ebx + 0x414d4] +4cb664: mov dword ptr [ebp - 0x18], eax +4cb667: lea eax, [ebp - 0x34] +4cb66a: push eax +4cb66b: push 3 +4cb66d: push 0 +4cb66f: push 0x28c +4cb674: xor ecx, ecx +4cb676: mov edx, 0x4cd2a8 ; '사급자재대' +4cb67b: mov eax, 1 +4cb680: call 0x4cb03c +4cb685: pop ecx +4cb686: push ebp +4cb687: push 0x4cd2bc ; 'C_DOSEOH' +4cb68c: mov eax, dword ptr [ebx + 0x10560] +4cb692: mov dword ptr [ebp - 0x34], eax +4cb695: mov eax, dword ptr [ebx + 0x10564] +4cb69b: mov dword ptr [ebp - 0x30], eax +4cb69e: mov eax, dword ptr [ebx + 0x209b0] +4cb6a4: mov dword ptr [ebp - 0x2c], eax +4cb6a7: mov eax, dword ptr [ebx + 0x209b4] +4cb6ad: mov dword ptr [ebp - 0x28], eax +4cb6b0: mov eax, dword ptr [ebx + 0x30e00] +4cb6b6: mov dword ptr [ebp - 0x24], eax +4cb6b9: mov eax, dword ptr [ebx + 0x30e04] +4cb6bf: mov dword ptr [ebp - 0x20], eax +4cb6c2: mov eax, dword ptr [ebx + 0x41250] +4cb6c8: mov dword ptr [ebp - 0x1c], eax +4cb6cb: mov eax, dword ptr [ebx + 0x41254] +4cb6d1: mov dword ptr [ebp - 0x18], eax +4cb6d4: lea eax, [ebp - 0x34] +4cb6d7: push eax +4cb6d8: push 3 +4cb6da: push 0 +4cb6dc: push 0xfb +4cb6e1: fld qword ptr [0x5e887c] +4cb6e7: add esp, -0xc +4cb6ea: fstp xword ptr [esp] +4cb6ed: wait +4cb6ee: lea edx, [ebp - 0x3c] +4cb6f1: mov eax, 0x4cd2d0 ; '0.0###%' +4cb6f6: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4cb6fb: mov ecx, dword ptr [ebp - 0x3c] +4cb6fe: lea eax, [ebp - 0x38] +4cb701: mov edx, 0x4cd2e0 ; '노무비 x ' +4cb706: call 0x401240 ; rtl60!@System@@LStrCat3$qqrv +4cb70b: mov ecx, dword ptr [ebp - 0x38] +4cb70e: mov edx, 0x4cd2f4 ; '도서할증' +4cb713: mov eax, 1 +4cb718: call 0x4cb03c +4cb71d: pop ecx +4cb71e: push ebp +4cb71f: push 0 +4cb721: mov eax, dword ptr [ebx + 0x10450] +4cb727: mov dword ptr [ebp - 0x34], eax +4cb72a: mov eax, dword ptr [ebx + 0x10454] +4cb730: mov dword ptr [ebp - 0x30], eax +4cb733: mov eax, dword ptr [ebx + 0x208a0] +4cb739: mov dword ptr [ebp - 0x2c], eax +4cb73c: mov eax, dword ptr [ebx + 0x208a4] +4cb742: mov dword ptr [ebp - 0x28], eax +4cb745: mov eax, dword ptr [ebx + 0x30cf0] +4cb74b: mov dword ptr [ebp - 0x24], eax +4cb74e: mov eax, dword ptr [ebx + 0x30cf4] +4cb754: mov dword ptr [ebp - 0x20], eax +4cb757: mov eax, dword ptr [ebx + 0x41140] +4cb75d: mov dword ptr [ebp - 0x1c], eax +4cb760: mov eax, dword ptr [ebx + 0x41144] +4cb766: mov dword ptr [ebp - 0x18], eax +4cb769: lea eax, [ebp - 0x34] +4cb76c: push eax +4cb76d: push 3 +4cb76f: push 2 +4cb771: push 0x64 +4cb773: mov ecx, 0x4cd308 ; '계약 제잡비율' +4cb778: mov edx, 0x4cd320 ; '직접공사비 계' +4cb77d: xor eax, eax +4cb77f: call 0x4cb03c +4cb784: pop ecx +4cb785: mov eax, dword ptr [0x4d26cc] +4cb78a: mov al, byte ptr [eax] +4cb78c: sub al, 5 +4cb78e: jne 0x4cb7fd +4cb790: push ebp +4cb791: push 0x4cd338 ; 'C_EIS_HOLLAB' +4cb796: mov eax, dword ptr [ebx + 0x10730] +4cb79c: mov dword ptr [ebp - 0x34], eax +4cb79f: mov eax, dword ptr [ebx + 0x10734] +4cb7a5: mov dword ptr [ebp - 0x30], eax +4cb7a8: mov eax, dword ptr [ebx + 0x20b80] +4cb7ae: mov dword ptr [ebp - 0x2c], eax +4cb7b1: mov eax, dword ptr [ebx + 0x20b84] +4cb7b7: mov dword ptr [ebp - 0x28], eax +4cb7ba: mov eax, dword ptr [ebx + 0x30fd0] +4cb7c0: mov dword ptr [ebp - 0x24], eax +4cb7c3: mov eax, dword ptr [ebx + 0x30fd4] +4cb7c9: mov dword ptr [ebp - 0x20], eax +4cb7cc: mov eax, dword ptr [ebx + 0x41420] +4cb7d2: mov dword ptr [ebp - 0x1c], eax +4cb7d5: mov eax, dword ptr [ebx + 0x41424] +4cb7db: mov dword ptr [ebp - 0x18], eax +4cb7de: lea eax, [ebp - 0x34] +4cb7e1: push eax +4cb7e2: push 3 +4cb7e4: push 0 +4cb7e6: push 0 +4cb7e8: mov ecx, 0x4cd350 ; '(기성)' +4cb7ed: mov edx, 0x4cd360 ; '주휴수당' +4cb7f2: mov eax, 1 +4cb7f7: call 0x4cb03c +4cb7fc: pop ecx +4cb7fd: push ebp +4cb7fe: push 0x4cd374 ; 'C_KANNO' +4cb803: mov eax, dword ptr [ebx + 0x10568] +4cb809: mov dword ptr [ebp - 0x34], eax +4cb80c: mov eax, dword ptr [ebx + 0x1056c] +4cb812: mov dword ptr [ebp - 0x30], eax +4cb815: mov eax, dword ptr [ebx + 0x209b8] +4cb81b: mov dword ptr [ebp - 0x2c], eax +4cb81e: mov eax, dword ptr [ebx + 0x209bc] +4cb824: mov dword ptr [ebp - 0x28], eax +4cb827: mov eax, dword ptr [ebx + 0x30e08] +4cb82d: mov dword ptr [ebp - 0x24], eax +4cb830: mov eax, dword ptr [ebx + 0x30e0c] +4cb836: mov dword ptr [ebp - 0x20], eax +4cb839: mov eax, dword ptr [ebx + 0x41258] +4cb83f: mov dword ptr [ebp - 0x1c], eax +4cb842: mov eax, dword ptr [ebx + 0x4125c] +4cb848: mov dword ptr [ebp - 0x18], eax +4cb84b: lea eax, [ebp - 0x34] +4cb84e: push eax +4cb84f: push 3 +4cb851: push 1 +4cb853: push 0 +4cb855: xor ecx, ecx +4cb857: mov edx, 0x4cd384 ; '간접노무비' +4cb85c: mov eax, 1 +4cb861: call 0x4cb03c +4cb866: pop ecx +4cb867: mov eax, dword ptr [0x4d26cc] +4cb86c: mov al, byte ptr [eax] +4cb86e: sub al, 3 +4cb870: jb 0x4cb8e0 +4cb872: sub al, 2 +4cb874: je 0x4cb8e0 +4cb876: push ebp +4cb877: push 0x4cd398 ; 'C_S_PUMJIL' +4cb87c: mov eax, dword ptr [ebx + 0x10570] +4cb882: mov dword ptr [ebp - 0x34], eax +4cb885: mov eax, dword ptr [ebx + 0x10574] +4cb88b: mov dword ptr [ebp - 0x30], eax +4cb88e: mov eax, dword ptr [ebx + 0x209c0] +4cb894: mov dword ptr [ebp - 0x2c], eax +4cb897: mov eax, dword ptr [ebx + 0x209c4] +4cb89d: mov dword ptr [ebp - 0x28], eax +4cb8a0: mov eax, dword ptr [ebx + 0x30e10] +4cb8a6: mov dword ptr [ebp - 0x24], eax +4cb8a9: mov eax, dword ptr [ebx + 0x30e14] +4cb8af: mov dword ptr [ebp - 0x20], eax +4cb8b2: mov eax, dword ptr [ebx + 0x41260] +4cb8b8: mov dword ptr [ebp - 0x1c], eax +4cb8bb: mov eax, dword ptr [ebx + 0x41264] +4cb8c1: mov dword ptr [ebp - 0x18], eax +4cb8c4: lea eax, [ebp - 0x34] +4cb8c7: push eax +4cb8c8: push 3 +4cb8ca: push 0 +4cb8cc: push 0 +4cb8ce: xor ecx, ecx +4cb8d0: mov edx, 0x4cd3ac ; '품질관리비' +4cb8d5: mov eax, 2 +4cb8da: call 0x4cb03c +4cb8df: pop ecx +4cb8e0: push ebp +4cb8e1: push 0x4cd3c0 ; 'C_SANBO' +4cb8e6: mov eax, dword ptr [ebx + 0x10578] +4cb8ec: mov dword ptr [ebp - 0x34], eax +4cb8ef: mov eax, dword ptr [ebx + 0x1057c] +4cb8f5: mov dword ptr [ebp - 0x30], eax +4cb8f8: mov eax, dword ptr [ebx + 0x209c8] +4cb8fe: mov dword ptr [ebp - 0x2c], eax +4cb901: mov eax, dword ptr [ebx + 0x209cc] +4cb907: mov dword ptr [ebp - 0x28], eax +4cb90a: mov eax, dword ptr [ebx + 0x30e18] +4cb910: mov dword ptr [ebp - 0x24], eax +4cb913: mov eax, dword ptr [ebx + 0x30e1c] +4cb919: mov dword ptr [ebp - 0x20], eax +4cb91c: mov eax, dword ptr [ebx + 0x41268] +4cb922: mov dword ptr [ebp - 0x1c], eax +4cb925: mov eax, dword ptr [ebx + 0x4126c] +4cb92b: mov dword ptr [ebp - 0x18], eax +4cb92e: lea eax, [ebp - 0x34] +4cb931: push eax +4cb932: push 3 +4cb934: push 1 +4cb936: push 0 +4cb938: xor ecx, ecx +4cb93a: mov edx, 0x4cd3d0 ; '산재보험료' +4cb93f: mov eax, 1 +4cb944: call 0x4cb03c +4cb949: pop ecx +4cb94a: push ebp +4cb94b: push 0x4cd3e4 ; 'C_KOBO' +4cb950: mov eax, dword ptr [ebx + 0x10580] +4cb956: mov dword ptr [ebp - 0x34], eax +4cb959: mov eax, dword ptr [ebx + 0x10584] +4cb95f: mov dword ptr [ebp - 0x30], eax +4cb962: mov eax, dword ptr [ebx + 0x209d0] +4cb968: mov dword ptr [ebp - 0x2c], eax +4cb96b: mov eax, dword ptr [ebx + 0x209d4] +4cb971: mov dword ptr [ebp - 0x28], eax +4cb974: mov eax, dword ptr [ebx + 0x30e20] +4cb97a: mov dword ptr [ebp - 0x24], eax +4cb97d: mov eax, dword ptr [ebx + 0x30e24] +4cb983: mov dword ptr [ebp - 0x20], eax +4cb986: mov eax, dword ptr [ebx + 0x41270] +4cb98c: mov dword ptr [ebp - 0x1c], eax +4cb98f: mov eax, dword ptr [ebx + 0x41274] +4cb995: mov dword ptr [ebp - 0x18], eax +4cb998: lea eax, [ebp - 0x34] +4cb99b: push eax +4cb99c: push 3 +4cb99e: push 1 +4cb9a0: push 0 +4cb9a2: xor ecx, ecx +4cb9a4: mov edx, 0x4cd3f4 ; '고용보험료' +4cb9a9: mov eax, 2 +4cb9ae: call 0x4cb03c +4cb9b3: pop ecx +4cb9b4: push ebp +4cb9b5: push 0x4cd408 ; 'C_KUNBO' +4cb9ba: mov eax, dword ptr [ebx + 0x105a0] +4cb9c0: mov dword ptr [ebp - 0x34], eax +4cb9c3: mov eax, dword ptr [ebx + 0x105a4] +4cb9c9: mov dword ptr [ebp - 0x30], eax +4cb9cc: mov eax, dword ptr [ebx + 0x209f0] +4cb9d2: mov dword ptr [ebp - 0x2c], eax +4cb9d5: mov eax, dword ptr [ebx + 0x209f4] +4cb9db: mov dword ptr [ebp - 0x28], eax +4cb9de: mov eax, dword ptr [ebx + 0x30e40] +4cb9e4: mov dword ptr [ebp - 0x24], eax +4cb9e7: mov eax, dword ptr [ebx + 0x30e44] +4cb9ed: mov dword ptr [ebp - 0x20], eax +4cb9f0: mov eax, dword ptr [ebx + 0x41290] +4cb9f6: mov dword ptr [ebp - 0x1c], eax +4cb9f9: mov eax, dword ptr [ebx + 0x41294] +4cb9ff: mov dword ptr [ebp - 0x18], eax +4cba02: lea eax, [ebp - 0x34] +4cba05: push eax +4cba06: push 3 +4cba08: push 1 +4cba0a: push 0 +4cba0c: xor ecx, ecx +4cba0e: mov edx, 0x4cd418 ; '건강보험료' +4cba13: mov eax, 2 +4cba18: call 0x4cb03c +4cba1d: pop ecx +4cba1e: push ebp +4cba1f: push 0x4cd42c ; 'C_SLVBO' +4cba24: mov eax, dword ptr [ebx + 0x105a8] +4cba2a: mov dword ptr [ebp - 0x34], eax +4cba2d: mov eax, dword ptr [ebx + 0x105ac] +4cba33: mov dword ptr [ebp - 0x30], eax +4cba36: mov eax, dword ptr [ebx + 0x209f8] +4cba3c: mov dword ptr [ebp - 0x2c], eax +4cba3f: mov eax, dword ptr [ebx + 0x209fc] +4cba45: mov dword ptr [ebp - 0x28], eax +4cba48: mov eax, dword ptr [ebx + 0x30e48] +4cba4e: mov dword ptr [ebp - 0x24], eax +4cba51: mov eax, dword ptr [ebx + 0x30e4c] +4cba57: mov dword ptr [ebp - 0x20], eax +4cba5a: mov eax, dword ptr [ebx + 0x41298] +4cba60: mov dword ptr [ebp - 0x1c], eax +4cba63: mov eax, dword ptr [ebx + 0x4129c] +4cba69: mov dword ptr [ebp - 0x18], eax +4cba6c: lea eax, [ebp - 0x34] +4cba6f: push eax +4cba70: push 3 +4cba72: push 1 +4cba74: push 0 +4cba76: xor ecx, ecx +4cba78: mov edx, 0x4cd43c ; '장기요양보험료' +4cba7d: mov eax, 2 +4cba82: call 0x4cb03c +4cba87: pop ecx +4cba88: push ebp +4cba89: push 0x4cd454 ; 'C_YUNBO' +4cba8e: mov eax, dword ptr [ebx + 0x105b0] +4cba94: mov dword ptr [ebp - 0x34], eax +4cba97: mov eax, dword ptr [ebx + 0x105b4] +4cba9d: mov dword ptr [ebp - 0x30], eax +4cbaa0: mov eax, dword ptr [ebx + 0x20a00] +4cbaa6: mov dword ptr [ebp - 0x2c], eax +4cbaa9: mov eax, dword ptr [ebx + 0x20a04] +4cbaaf: mov dword ptr [ebp - 0x28], eax +4cbab2: mov eax, dword ptr [ebx + 0x30e50] +4cbab8: mov dword ptr [ebp - 0x24], eax +4cbabb: mov eax, dword ptr [ebx + 0x30e54] +4cbac1: mov dword ptr [ebp - 0x20], eax +4cbac4: mov eax, dword ptr [ebx + 0x412a0] +4cbaca: mov dword ptr [ebp - 0x1c], eax +4cbacd: mov eax, dword ptr [ebx + 0x412a4] +4cbad3: mov dword ptr [ebp - 0x18], eax +4cbad6: lea eax, [ebp - 0x34] +4cbad9: push eax +4cbada: push 3 +4cbadc: push 1 +4cbade: push 0 +4cbae0: xor ecx, ecx +4cbae2: mov edx, 0x4cd464 ; '연금보험료' +4cbae7: mov eax, 2 +4cbaec: call 0x4cb03c +4cbaf1: pop ecx +4cbaf2: push ebp +4cbaf3: push 0x4cd478 ; 'C_TBUGUM' +4cbaf8: mov eax, dword ptr [ebx + 0x105b8] +4cbafe: mov dword ptr [ebp - 0x34], eax +4cbb01: mov eax, dword ptr [ebx + 0x105bc] +4cbb07: mov dword ptr [ebp - 0x30], eax +4cbb0a: mov eax, dword ptr [ebx + 0x20a08] +4cbb10: mov dword ptr [ebp - 0x2c], eax +4cbb13: mov eax, dword ptr [ebx + 0x20a0c] +4cbb19: mov dword ptr [ebp - 0x28], eax +4cbb1c: mov eax, dword ptr [ebx + 0x30e58] +4cbb22: mov dword ptr [ebp - 0x24], eax +4cbb25: mov eax, dword ptr [ebx + 0x30e5c] +4cbb2b: mov dword ptr [ebp - 0x20], eax +4cbb2e: mov eax, dword ptr [ebx + 0x412a8] +4cbb34: mov dword ptr [ebp - 0x1c], eax +4cbb37: mov eax, dword ptr [ebx + 0x412ac] +4cbb3d: mov dword ptr [ebp - 0x18], eax +4cbb40: lea eax, [ebp - 0x34] +4cbb43: push eax +4cbb44: push 3 +4cbb46: push 1 +4cbb48: push 0 +4cbb4a: xor ecx, ecx +4cbb4c: mov edx, 0x4cd48c ; '퇴직공제부금비' +4cbb51: mov eax, 2 +4cbb56: call 0x4cb03c +4cbb5b: pop ecx +4cbb5c: push ebp +4cbb5d: push 0x4cd4a4 ; 'C_ANJUN' +4cbb62: mov eax, dword ptr [ebx + 0x105f8] +4cbb68: mov dword ptr [ebp - 0x34], eax +4cbb6b: mov eax, dword ptr [ebx + 0x105fc] +4cbb71: mov dword ptr [ebp - 0x30], eax +4cbb74: mov eax, dword ptr [ebx + 0x20a48] +4cbb7a: mov dword ptr [ebp - 0x2c], eax +4cbb7d: mov eax, dword ptr [ebx + 0x20a4c] +4cbb83: mov dword ptr [ebp - 0x28], eax +4cbb86: mov eax, dword ptr [ebx + 0x30e98] +4cbb8c: mov dword ptr [ebp - 0x24], eax +4cbb8f: mov eax, dword ptr [ebx + 0x30e9c] +4cbb95: mov dword ptr [ebp - 0x20], eax +4cbb98: mov eax, dword ptr [ebx + 0x412e8] +4cbb9e: mov dword ptr [ebp - 0x1c], eax +4cbba1: mov eax, dword ptr [ebx + 0x412ec] +4cbba7: mov dword ptr [ebp - 0x18], eax +4cbbaa: lea eax, [ebp - 0x34] +4cbbad: push eax +4cbbae: push 3 +4cbbb0: push 1 +4cbbb2: push 0 +4cbbb4: xor ecx, ecx +4cbbb6: mov edx, 0x4cd4b4 ; '산업안전보건관리비' +4cbbbb: mov eax, 1 +4cbbc0: call 0x4cb03c +4cbbc5: pop ecx +4cbbc6: push ebp +4cbbc7: push 0x4cd4d0 ; 'C_ANJUN_B' +4cbbcc: mov eax, dword ptr [ebx + 0x106b8] +4cbbd2: mov dword ptr [ebp - 0x34], eax +4cbbd5: mov eax, dword ptr [ebx + 0x106bc] +4cbbdb: mov dword ptr [ebp - 0x30], eax +4cbbde: mov eax, dword ptr [ebx + 0x20b08] +4cbbe4: mov dword ptr [ebp - 0x2c], eax +4cbbe7: mov eax, dword ptr [ebx + 0x20b0c] +4cbbed: mov dword ptr [ebp - 0x28], eax +4cbbf0: mov eax, dword ptr [ebx + 0x30f58] +4cbbf6: mov dword ptr [ebp - 0x24], eax +4cbbf9: mov eax, dword ptr [ebx + 0x30f5c] +4cbbff: mov dword ptr [ebp - 0x20], eax +4cbc02: mov eax, dword ptr [ebx + 0x413a8] +4cbc08: mov dword ptr [ebp - 0x1c], eax +4cbc0b: mov eax, dword ptr [ebx + 0x413ac] +4cbc11: mov dword ptr [ebp - 0x18], eax +4cbc14: lea eax, [ebp - 0x34] +4cbc17: push eax +4cbc18: push 3 +4cbc1a: push 0 +4cbc1c: push 0 +4cbc1e: xor ecx, ecx +4cbc20: mov edx, 0x4cd4e4 ; '안전관리비' +4cbc25: mov eax, 2 +4cbc2a: call 0x4cb03c +4cbc2f: pop ecx +4cbc30: push ebp +4cbc31: push 0x4cd4f8 ; 'C_PUMJIL_B' +4cbc36: mov eax, dword ptr [ebx + 0x106c0] +4cbc3c: mov dword ptr [ebp - 0x34], eax +4cbc3f: mov eax, dword ptr [ebx + 0x106c4] +4cbc45: mov dword ptr [ebp - 0x30], eax +4cbc48: mov eax, dword ptr [ebx + 0x20b10] +4cbc4e: mov dword ptr [ebp - 0x2c], eax +4cbc51: mov eax, dword ptr [ebx + 0x20b14] +4cbc57: mov dword ptr [ebp - 0x28], eax +4cbc5a: mov eax, dword ptr [ebx + 0x30f60] +4cbc60: mov dword ptr [ebp - 0x24], eax +4cbc63: mov eax, dword ptr [ebx + 0x30f64] +4cbc69: mov dword ptr [ebp - 0x20], eax +4cbc6c: mov eax, dword ptr [ebx + 0x413b0] +4cbc72: mov dword ptr [ebp - 0x1c], eax +4cbc75: mov eax, dword ptr [ebx + 0x413b4] +4cbc7b: mov dword ptr [ebp - 0x18], eax +4cbc7e: lea eax, [ebp - 0x34] +4cbc81: push eax +4cbc82: push 3 +4cbc84: push 0 +4cbc86: push 0 +4cbc88: xor ecx, ecx +4cbc8a: mov edx, 0x4cd3ac ; '품질관리비' +4cbc8f: mov eax, 2 +4cbc94: call 0x4cb03c +4cbc99: pop ecx +4cbc9a: mov eax, dword ptr [0x4d26cc] +4cbc9f: mov al, byte ptr [eax] +4cbca1: sub al, 3 +4cbca3: jb 0x4cbd16 +4cbca5: sub al, 2 +4cbca7: je 0x4cbd16 +4cbca9: push ebp +4cbcaa: push 0x4cd50c ; 'C_S_ANJUN_B' +4cbcaf: mov eax, dword ptr [ebx + 0x10628] +4cbcb5: mov dword ptr [ebp - 0x34], eax +4cbcb8: mov eax, dword ptr [ebx + 0x1062c] +4cbcbe: mov dword ptr [ebp - 0x30], eax +4cbcc1: mov eax, dword ptr [ebx + 0x20a78] +4cbcc7: mov dword ptr [ebp - 0x2c], eax +4cbcca: mov eax, dword ptr [ebx + 0x20a7c] +4cbcd0: mov dword ptr [ebp - 0x28], eax +4cbcd3: mov eax, dword ptr [ebx + 0x30ec8] +4cbcd9: mov dword ptr [ebp - 0x24], eax +4cbcdc: mov eax, dword ptr [ebx + 0x30ecc] +4cbce2: mov dword ptr [ebp - 0x20], eax +4cbce5: mov eax, dword ptr [ebx + 0x41318] +4cbceb: mov dword ptr [ebp - 0x1c], eax +4cbcee: mov eax, dword ptr [ebx + 0x4131c] +4cbcf4: mov dword ptr [ebp - 0x18], eax +4cbcf7: lea eax, [ebp - 0x34] +4cbcfa: push eax +4cbcfb: push 3 +4cbcfd: push 0 +4cbcff: push 0 +4cbd01: mov ecx, 0x4cd520 ; '(별도내역)' +4cbd06: mov edx, 0x4cd4b4 ; '산업안전보건관리비' +4cbd0b: mov eax, 2 +4cbd10: call 0x4cb03c +4cbd15: pop ecx +4cbd16: mov eax, dword ptr [0x4d26cc] +4cbd1b: mov al, byte ptr [eax] +4cbd1d: sub al, 3 +4cbd1f: jb 0x4cbd25 +4cbd21: sub al, 2 +4cbd23: jne 0x4cbd8f +4cbd25: push ebp +4cbd26: push 0x4cd534 ; 'C_T_KITA' +4cbd2b: mov eax, dword ptr [ebx + 0x10630] +4cbd31: mov dword ptr [ebp - 0x34], eax +4cbd34: mov eax, dword ptr [ebx + 0x10634] +4cbd3a: mov dword ptr [ebp - 0x30], eax +4cbd3d: mov eax, dword ptr [ebx + 0x20a80] +4cbd43: mov dword ptr [ebp - 0x2c], eax +4cbd46: mov eax, dword ptr [ebx + 0x20a84] +4cbd4c: mov dword ptr [ebp - 0x28], eax +4cbd4f: mov eax, dword ptr [ebx + 0x30ed0] +4cbd55: mov dword ptr [ebp - 0x24], eax +4cbd58: mov eax, dword ptr [ebx + 0x30ed4] +4cbd5e: mov dword ptr [ebp - 0x20], eax +4cbd61: mov eax, dword ptr [ebx + 0x41320] +4cbd67: mov dword ptr [ebp - 0x1c], eax +4cbd6a: mov eax, dword ptr [ebx + 0x41324] +4cbd70: mov dword ptr [ebp - 0x18], eax +4cbd73: lea eax, [ebp - 0x34] +4cbd76: push eax +4cbd77: push 3 +4cbd79: push 1 +4cbd7b: push 0 +4cbd7d: xor ecx, ecx +4cbd7f: mov edx, 0x4cd548 ; '기타경비' +4cbd84: mov eax, 1 +4cbd89: call 0x4cb03c +4cbd8e: pop ecx +4cbd8f: mov eax, dword ptr [0x4d26cc] +4cbd94: mov al, byte ptr [eax] +4cbd96: sub al, 3 +4cbd98: jb 0x4cc0f6 +4cbd9e: sub al, 2 +4cbda0: je 0x4cc0f6 +4cbda6: push ebp +4cbda7: push 0x4cd55c ; 'C_S_SUDO' +4cbdac: mov eax, dword ptr [ebx + 0x10638] +4cbdb2: mov dword ptr [ebp - 0x34], eax +4cbdb5: mov eax, dword ptr [ebx + 0x1063c] +4cbdbb: mov dword ptr [ebp - 0x30], eax +4cbdbe: mov eax, dword ptr [ebx + 0x20a88] +4cbdc4: mov dword ptr [ebp - 0x2c], eax +4cbdc7: mov eax, dword ptr [ebx + 0x20a8c] +4cbdcd: mov dword ptr [ebp - 0x28], eax +4cbdd0: mov eax, dword ptr [ebx + 0x30ed8] +4cbdd6: mov dword ptr [ebp - 0x24], eax +4cbdd9: mov eax, dword ptr [ebx + 0x30edc] +4cbddf: mov dword ptr [ebp - 0x20], eax +4cbde2: mov eax, dword ptr [ebx + 0x41328] +4cbde8: mov dword ptr [ebp - 0x1c], eax +4cbdeb: mov eax, dword ptr [ebx + 0x4132c] +4cbdf1: mov dword ptr [ebp - 0x18], eax +4cbdf4: lea eax, [ebp - 0x34] +4cbdf7: push eax +4cbdf8: push 3 +4cbdfa: push 1 +4cbdfc: push 0 +4cbdfe: xor ecx, ecx +4cbe00: mov edx, 0x4cd570 ; '수도광열비' +4cbe05: mov eax, 2 +4cbe0a: call 0x4cb03c +4cbe0f: pop ecx +4cbe10: push ebp +4cbe11: push 0x4cd584 ; 'C_S_BOKRI' +4cbe16: mov eax, dword ptr [ebx + 0x10640] +4cbe1c: mov dword ptr [ebp - 0x34], eax +4cbe1f: mov eax, dword ptr [ebx + 0x10644] +4cbe25: mov dword ptr [ebp - 0x30], eax +4cbe28: mov eax, dword ptr [ebx + 0x20a90] +4cbe2e: mov dword ptr [ebp - 0x2c], eax +4cbe31: mov eax, dword ptr [ebx + 0x20a94] +4cbe37: mov dword ptr [ebp - 0x28], eax +4cbe3a: mov eax, dword ptr [ebx + 0x30ee0] +4cbe40: mov dword ptr [ebp - 0x24], eax +4cbe43: mov eax, dword ptr [ebx + 0x30ee4] +4cbe49: mov dword ptr [ebp - 0x20], eax +4cbe4c: mov eax, dword ptr [ebx + 0x41330] +4cbe52: mov dword ptr [ebp - 0x1c], eax +4cbe55: mov eax, dword ptr [ebx + 0x41334] +4cbe5b: mov dword ptr [ebp - 0x18], eax +4cbe5e: lea eax, [ebp - 0x34] +4cbe61: push eax +4cbe62: push 3 +4cbe64: push 1 +4cbe66: push 0 +4cbe68: xor ecx, ecx +4cbe6a: mov edx, 0x4cd598 ; '복리후생비' +4cbe6f: mov eax, 2 +4cbe74: call 0x4cb03c +4cbe79: pop ecx +4cbe7a: push ebp +4cbe7b: push 0x4cd5ac ; 'C_S_SOMO' +4cbe80: mov eax, dword ptr [ebx + 0x10648] +4cbe86: mov dword ptr [ebp - 0x34], eax +4cbe89: mov eax, dword ptr [ebx + 0x1064c] +4cbe8f: mov dword ptr [ebp - 0x30], eax +4cbe92: mov eax, dword ptr [ebx + 0x20a98] +4cbe98: mov dword ptr [ebp - 0x2c], eax +4cbe9b: mov eax, dword ptr [ebx + 0x20a9c] +4cbea1: mov dword ptr [ebp - 0x28], eax +4cbea4: mov eax, dword ptr [ebx + 0x30ee8] +4cbeaa: mov dword ptr [ebp - 0x24], eax +4cbead: mov eax, dword ptr [ebx + 0x30eec] +4cbeb3: mov dword ptr [ebp - 0x20], eax +4cbeb6: mov eax, dword ptr [ebx + 0x41338] +4cbebc: mov dword ptr [ebp - 0x1c], eax +4cbebf: mov eax, dword ptr [ebx + 0x4133c] +4cbec5: mov dword ptr [ebp - 0x18], eax +4cbec8: lea eax, [ebp - 0x34] +4cbecb: push eax +4cbecc: push 3 +4cbece: push 1 +4cbed0: push 0 +4cbed2: xor ecx, ecx +4cbed4: mov edx, 0x4cd5c0 ; '소모품및 사무용품비' +4cbed9: mov eax, 2 +4cbede: call 0x4cb03c +4cbee3: pop ecx +4cbee4: push ebp +4cbee5: push 0x4cd5dc ; 'C_S_TONGSIN' +4cbeea: mov eax, dword ptr [ebx + 0x10650] +4cbef0: mov dword ptr [ebp - 0x34], eax +4cbef3: mov eax, dword ptr [ebx + 0x10654] +4cbef9: mov dword ptr [ebp - 0x30], eax +4cbefc: mov eax, dword ptr [ebx + 0x20aa0] +4cbf02: mov dword ptr [ebp - 0x2c], eax +4cbf05: mov eax, dword ptr [ebx + 0x20aa4] +4cbf0b: mov dword ptr [ebp - 0x28], eax +4cbf0e: mov eax, dword ptr [ebx + 0x30ef0] +4cbf14: mov dword ptr [ebp - 0x24], eax +4cbf17: mov eax, dword ptr [ebx + 0x30ef4] +4cbf1d: mov dword ptr [ebp - 0x20], eax +4cbf20: mov eax, dword ptr [ebx + 0x41340] +4cbf26: mov dword ptr [ebp - 0x1c], eax +4cbf29: mov eax, dword ptr [ebx + 0x41344] +4cbf2f: mov dword ptr [ebp - 0x18], eax +4cbf32: lea eax, [ebp - 0x34] +4cbf35: push eax +4cbf36: push 3 +4cbf38: push 1 +4cbf3a: push 0 +4cbf3c: xor ecx, ecx +4cbf3e: mov edx, 0x4cd5f0 ; '여비, 교통비, 통신비' +4cbf43: mov eax, 2 +4cbf48: call 0x4cb03c +4cbf4d: pop ecx +4cbf4e: push ebp +4cbf4f: push 0x4cd610 ; 'C_S_SEGUM' +4cbf54: mov eax, dword ptr [ebx + 0x10658] +4cbf5a: mov dword ptr [ebp - 0x34], eax +4cbf5d: mov eax, dword ptr [ebx + 0x1065c] +4cbf63: mov dword ptr [ebp - 0x30], eax +4cbf66: mov eax, dword ptr [ebx + 0x20aa8] +4cbf6c: mov dword ptr [ebp - 0x2c], eax +4cbf6f: mov eax, dword ptr [ebx + 0x20aac] +4cbf75: mov dword ptr [ebp - 0x28], eax +4cbf78: mov eax, dword ptr [ebx + 0x30ef8] +4cbf7e: mov dword ptr [ebp - 0x24], eax +4cbf81: mov eax, dword ptr [ebx + 0x30efc] +4cbf87: mov dword ptr [ebp - 0x20], eax +4cbf8a: mov eax, dword ptr [ebx + 0x41348] +4cbf90: mov dword ptr [ebp - 0x1c], eax +4cbf93: mov eax, dword ptr [ebx + 0x4134c] +4cbf99: mov dword ptr [ebp - 0x18], eax +4cbf9c: lea eax, [ebp - 0x34] +4cbf9f: push eax +4cbfa0: push 3 +4cbfa2: push 1 +4cbfa4: push 0 +4cbfa6: xor ecx, ecx +4cbfa8: mov edx, 0x4cd624 ; '세금, 공과금' +4cbfad: mov eax, 2 +4cbfb2: call 0x4cb03c +4cbfb7: pop ecx +4cbfb8: push ebp +4cbfb9: push 0x4cd63c ; 'C_S_PEGI' +4cbfbe: mov eax, dword ptr [ebx + 0x10660] +4cbfc4: mov dword ptr [ebp - 0x34], eax +4cbfc7: mov eax, dword ptr [ebx + 0x10664] +4cbfcd: mov dword ptr [ebp - 0x30], eax +4cbfd0: mov eax, dword ptr [ebx + 0x20ab0] +4cbfd6: mov dword ptr [ebp - 0x2c], eax +4cbfd9: mov eax, dword ptr [ebx + 0x20ab4] +4cbfdf: mov dword ptr [ebp - 0x28], eax +4cbfe2: mov eax, dword ptr [ebx + 0x30f00] +4cbfe8: mov dword ptr [ebp - 0x24], eax +4cbfeb: mov eax, dword ptr [ebx + 0x30f04] +4cbff1: mov dword ptr [ebp - 0x20], eax +4cbff4: mov eax, dword ptr [ebx + 0x41350] +4cbffa: mov dword ptr [ebp - 0x1c], eax +4cbffd: mov eax, dword ptr [ebx + 0x41354] +4cc003: mov dword ptr [ebp - 0x18], eax +4cc006: lea eax, [ebp - 0x34] +4cc009: push eax +4cc00a: push 3 +4cc00c: push 1 +4cc00e: push 0 +4cc010: xor ecx, ecx +4cc012: mov edx, 0x4cd650 ; '폐기물처리비' +4cc017: mov eax, 2 +4cc01c: call 0x4cb03c +4cc021: pop ecx +4cc022: push ebp +4cc023: push 0x4cd668 ; 'C_S_DOSEO' +4cc028: mov eax, dword ptr [ebx + 0x10668] +4cc02e: mov dword ptr [ebp - 0x34], eax +4cc031: mov eax, dword ptr [ebx + 0x1066c] +4cc037: mov dword ptr [ebp - 0x30], eax +4cc03a: mov eax, dword ptr [ebx + 0x20ab8] +4cc040: mov dword ptr [ebp - 0x2c], eax +4cc043: mov eax, dword ptr [ebx + 0x20abc] +4cc049: mov dword ptr [ebp - 0x28], eax +4cc04c: mov eax, dword ptr [ebx + 0x30f08] +4cc052: mov dword ptr [ebp - 0x24], eax +4cc055: mov eax, dword ptr [ebx + 0x30f0c] +4cc05b: mov dword ptr [ebp - 0x20], eax +4cc05e: mov eax, dword ptr [ebx + 0x41358] +4cc064: mov dword ptr [ebp - 0x1c], eax +4cc067: mov eax, dword ptr [ebx + 0x4135c] +4cc06d: mov dword ptr [ebp - 0x18], eax +4cc070: lea eax, [ebp - 0x34] +4cc073: push eax +4cc074: push 3 +4cc076: push 1 +4cc078: push 0 +4cc07a: xor ecx, ecx +4cc07c: mov edx, 0x4cd67c ; '도서인쇄비' +4cc081: mov eax, 2 +4cc086: call 0x4cb03c +4cc08b: pop ecx +4cc08c: push ebp +4cc08d: push 0x4cd690 ; 'C_S_JIGUP' +4cc092: mov eax, dword ptr [ebx + 0x10670] +4cc098: mov dword ptr [ebp - 0x34], eax +4cc09b: mov eax, dword ptr [ebx + 0x10674] +4cc0a1: mov dword ptr [ebp - 0x30], eax +4cc0a4: mov eax, dword ptr [ebx + 0x20ac0] +4cc0aa: mov dword ptr [ebp - 0x2c], eax +4cc0ad: mov eax, dword ptr [ebx + 0x20ac4] +4cc0b3: mov dword ptr [ebp - 0x28], eax +4cc0b6: mov eax, dword ptr [ebx + 0x30f10] +4cc0bc: mov dword ptr [ebp - 0x24], eax +4cc0bf: mov eax, dword ptr [ebx + 0x30f14] +4cc0c5: mov dword ptr [ebp - 0x20], eax +4cc0c8: mov eax, dword ptr [ebx + 0x41360] +4cc0ce: mov dword ptr [ebp - 0x1c], eax +4cc0d1: mov eax, dword ptr [ebx + 0x41364] +4cc0d7: mov dword ptr [ebp - 0x18], eax +4cc0da: lea eax, [ebp - 0x34] +4cc0dd: push eax +4cc0de: push 3 +4cc0e0: push 1 +4cc0e2: push 0 +4cc0e4: xor ecx, ecx +4cc0e6: mov edx, 0x4cd6a4 ; '지급수수료' +4cc0eb: mov eax, 2 +4cc0f0: call 0x4cb03c +4cc0f5: pop ecx +4cc0f6: push ebp +4cc0f7: push 0x4cd6b8 ; 'C_KONGSU' +4cc0fc: mov eax, dword ptr [ebx + 0x10678] +4cc102: mov dword ptr [ebp - 0x34], eax +4cc105: mov eax, dword ptr [ebx + 0x1067c] +4cc10b: mov dword ptr [ebp - 0x30], eax +4cc10e: mov eax, dword ptr [ebx + 0x20ac8] +4cc114: mov dword ptr [ebp - 0x2c], eax +4cc117: mov eax, dword ptr [ebx + 0x20acc] +4cc11d: mov dword ptr [ebp - 0x28], eax +4cc120: mov eax, dword ptr [ebx + 0x30f18] +4cc126: mov dword ptr [ebp - 0x24], eax +4cc129: mov eax, dword ptr [ebx + 0x30f1c] +4cc12f: mov dword ptr [ebp - 0x20], eax +4cc132: mov eax, dword ptr [ebx + 0x41368] +4cc138: mov dword ptr [ebp - 0x1c], eax +4cc13b: mov eax, dword ptr [ebx + 0x4136c] +4cc141: mov dword ptr [ebp - 0x18], eax +4cc144: lea eax, [ebp - 0x34] +4cc147: push eax +4cc148: push 3 +4cc14a: push 1 +4cc14c: push 0 +4cc14e: xor ecx, ecx +4cc150: mov edx, 0x4cd6cc ; '공사이행보증수수료' +4cc155: mov eax, 2 +4cc15a: call 0x4cb03c +4cc15f: pop ecx +4cc160: push ebp +4cc161: push 0x4cd6e8 ; 'C_HADOSU' +4cc166: mov eax, dword ptr [ebx + 0x10690] +4cc16c: mov dword ptr [ebp - 0x34], eax +4cc16f: mov eax, dword ptr [ebx + 0x10694] +4cc175: mov dword ptr [ebp - 0x30], eax +4cc178: mov eax, dword ptr [ebx + 0x20ae0] +4cc17e: mov dword ptr [ebp - 0x2c], eax +4cc181: mov eax, dword ptr [ebx + 0x20ae4] +4cc187: mov dword ptr [ebp - 0x28], eax +4cc18a: mov eax, dword ptr [ebx + 0x30f30] +4cc190: mov dword ptr [ebp - 0x24], eax +4cc193: mov eax, dword ptr [ebx + 0x30f34] +4cc199: mov dword ptr [ebp - 0x20], eax +4cc19c: mov eax, dword ptr [ebx + 0x41380] +4cc1a2: mov dword ptr [ebp - 0x1c], eax +4cc1a5: mov eax, dword ptr [ebx + 0x41384] +4cc1ab: mov dword ptr [ebp - 0x18], eax +4cc1ae: lea eax, [ebp - 0x34] +4cc1b1: push eax +4cc1b2: push 3 +4cc1b4: push 1 +4cc1b6: push 0 +4cc1b8: xor ecx, ecx +4cc1ba: mov edx, 0x4cd6fc ; '하도급대금지급보증수수료' +4cc1bf: mov eax, 2 +4cc1c4: call 0x4cb03c +4cc1c9: pop ecx +4cc1ca: push ebp +4cc1cb: push 0x4cd720 ; 'C_HWAN' +4cc1d0: mov eax, dword ptr [ebx + 0x10698] +4cc1d6: mov dword ptr [ebp - 0x34], eax +4cc1d9: mov eax, dword ptr [ebx + 0x1069c] +4cc1df: mov dword ptr [ebp - 0x30], eax +4cc1e2: mov eax, dword ptr [ebx + 0x20ae8] +4cc1e8: mov dword ptr [ebp - 0x2c], eax +4cc1eb: mov eax, dword ptr [ebx + 0x20aec] +4cc1f1: mov dword ptr [ebp - 0x28], eax +4cc1f4: mov eax, dword ptr [ebx + 0x30f38] +4cc1fa: mov dword ptr [ebp - 0x24], eax +4cc1fd: mov eax, dword ptr [ebx + 0x30f3c] +4cc203: mov dword ptr [ebp - 0x20], eax +4cc206: mov eax, dword ptr [ebx + 0x41388] +4cc20c: mov dword ptr [ebp - 0x1c], eax +4cc20f: mov eax, dword ptr [ebx + 0x4138c] +4cc215: mov dword ptr [ebp - 0x18], eax +4cc218: lea eax, [ebp - 0x34] +4cc21b: push eax +4cc21c: push 3 +4cc21e: push 1 +4cc220: push 0 +4cc222: xor ecx, ecx +4cc224: mov edx, 0x4cd730 ; '환경보전비' +4cc229: mov eax, 2 +4cc22e: call 0x4cb03c +4cc233: pop ecx +4cc234: push ebp +4cc235: push 0x4cd744 ; 'C_EQIPSU' +4cc23a: mov eax, dword ptr [ebx + 0x106a0] +4cc240: mov dword ptr [ebp - 0x34], eax +4cc243: mov eax, dword ptr [ebx + 0x106a4] +4cc249: mov dword ptr [ebp - 0x30], eax +4cc24c: mov eax, dword ptr [ebx + 0x20af0] +4cc252: mov dword ptr [ebp - 0x2c], eax +4cc255: mov eax, dword ptr [ebx + 0x20af4] +4cc25b: mov dword ptr [ebp - 0x28], eax +4cc25e: mov eax, dword ptr [ebx + 0x30f40] +4cc264: mov dword ptr [ebp - 0x24], eax +4cc267: mov eax, dword ptr [ebx + 0x30f44] +4cc26d: mov dword ptr [ebp - 0x20], eax +4cc270: mov eax, dword ptr [ebx + 0x41390] +4cc276: mov dword ptr [ebp - 0x1c], eax +4cc279: mov eax, dword ptr [ebx + 0x41394] +4cc27f: mov dword ptr [ebp - 0x18], eax +4cc282: lea eax, [ebp - 0x34] +4cc285: push eax +4cc286: push 3 +4cc288: push 1 +4cc28a: push 0 +4cc28c: xor ecx, ecx +4cc28e: mov edx, 0x4cd758 ; '건설기계대여금지급보증서수수료' +4cc293: mov eax, 2 +4cc298: call 0x4cb03c +4cc29d: pop ecx +4cc29e: push ebp +4cc29f: push 0x4cd780 ; 'C_BUDM_SM' +4cc2a4: mov eax, dword ptr [ebx + 0x106a8] +4cc2aa: mov dword ptr [ebp - 0x34], eax +4cc2ad: mov eax, dword ptr [ebx + 0x106ac] +4cc2b3: mov dword ptr [ebp - 0x30], eax +4cc2b6: mov eax, dword ptr [ebx + 0x20af8] +4cc2bc: mov dword ptr [ebp - 0x2c], eax +4cc2bf: mov eax, dword ptr [ebx + 0x20afc] +4cc2c5: mov dword ptr [ebp - 0x28], eax +4cc2c8: mov eax, dword ptr [ebx + 0x30f48] +4cc2ce: mov dword ptr [ebp - 0x24], eax +4cc2d1: mov eax, dword ptr [ebx + 0x30f4c] +4cc2d7: mov dword ptr [ebp - 0x20], eax +4cc2da: mov eax, dword ptr [ebx + 0x41398] +4cc2e0: mov dword ptr [ebp - 0x1c], eax +4cc2e3: mov eax, dword ptr [ebx + 0x4139c] +4cc2e9: mov dword ptr [ebp - 0x18], eax +4cc2ec: lea eax, [ebp - 0x34] +4cc2ef: push eax +4cc2f0: push 3 +4cc2f2: push 1 +4cc2f4: push 0 +4cc2f6: xor ecx, ecx +4cc2f8: mov edx, 0x4cd794 ; '석면피해구제분담금' +4cc2fd: mov eax, 2 +4cc302: call 0x4cb03c +4cc307: pop ecx +4cc308: push ebp +4cc309: push 0x4cd7b0 ; 'C_BUDM_IC' +4cc30e: mov eax, dword ptr [ebx + 0x106b0] +4cc314: mov dword ptr [ebp - 0x34], eax +4cc317: mov eax, dword ptr [ebx + 0x106b4] +4cc31d: mov dword ptr [ebp - 0x30], eax +4cc320: mov eax, dword ptr [ebx + 0x20b00] +4cc326: mov dword ptr [ebp - 0x2c], eax +4cc329: mov eax, dword ptr [ebx + 0x20b04] +4cc32f: mov dword ptr [ebp - 0x28], eax +4cc332: mov eax, dword ptr [ebx + 0x30f50] +4cc338: mov dword ptr [ebp - 0x24], eax +4cc33b: mov eax, dword ptr [ebx + 0x30f54] +4cc341: mov dword ptr [ebp - 0x20], eax +4cc344: mov eax, dword ptr [ebx + 0x413a0] +4cc34a: mov dword ptr [ebp - 0x1c], eax +4cc34d: mov eax, dword ptr [ebx + 0x413a4] +4cc353: mov dword ptr [ebp - 0x18], eax +4cc356: lea eax, [ebp - 0x34] +4cc359: push eax +4cc35a: push 3 +4cc35c: push 1 +4cc35e: push 0 +4cc360: xor ecx, ecx +4cc362: mov edx, 0x4cd7c4 ; '임금채권부담금' +4cc367: mov eax, 2 +4cc36c: call 0x4cb03c +4cc371: pop ecx +4cc372: mov edi, dword ptr [ebx + 0x10810] +4cc378: test edi, edi +4cc37a: jle 0x4cc462 +4cc380: mov dword ptr [ebp - 0x14], 1 +4cc387: lea esi, [ebx + 0x10e79] +4cc38d: cmp byte ptr [esi], 0 +4cc390: jne 0x4cc452 +4cc396: push ebp +4cc397: push 0x4cd7dc ; 'ADD_AMT_' +4cc39c: lea edx, [ebp - 0x44] +4cc39f: mov eax, 1 +4cc3a4: call 0x4019dc ; rtl60!@Sysutils@IntToStr$qqri +4cc3a9: push dword ptr [ebp - 0x44] +4cc3ac: fild dword ptr [ebp - 0x14] +4cc3af: add esp, -0xc +4cc3b2: fstp xword ptr [esp] +4cc3b5: wait +4cc3b6: lea edx, [ebp - 0x48] +4cc3b9: mov eax, 0x4cd7f0 ; '_00' +4cc3be: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4cc3c3: push dword ptr [ebp - 0x48] +4cc3c6: lea eax, [ebp - 0x40] +4cc3c9: mov edx, 3 +4cc3ce: call 0x401248 ; rtl60!@System@@LStrCatN$qqrv +4cc3d3: mov eax, dword ptr [ebp - 0x40] +4cc3d6: push eax +4cc3d7: mov eax, dword ptr [esi - 0x29] +4cc3da: mov dword ptr [ebp - 0x34], eax +4cc3dd: mov eax, dword ptr [esi - 0x25] +4cc3e0: mov dword ptr [ebp - 0x30], eax +4cc3e3: mov eax, dword ptr [esi + 0x1042f] +4cc3e9: mov dword ptr [ebp - 0x2c], eax +4cc3ec: mov eax, dword ptr [esi + 0x10433] +4cc3f2: mov dword ptr [ebp - 0x28], eax +4cc3f5: mov eax, dword ptr [esi + 0x20887] +4cc3fb: mov dword ptr [ebp - 0x24], eax +4cc3fe: mov eax, dword ptr [esi + 0x2088b] +4cc404: mov dword ptr [ebp - 0x20], eax +4cc407: mov eax, dword ptr [esi + 0x30cdf] +4cc40d: mov dword ptr [ebp - 0x1c], eax +4cc410: mov eax, dword ptr [esi + 0x30ce3] +4cc416: mov dword ptr [ebp - 0x18], eax +4cc419: lea eax, [ebp - 0x34] +4cc41c: push eax +4cc41d: push 3 +4cc41f: push 0 +4cc421: push 0 +4cc423: lea eax, [ebp - 0x4c] +4cc426: lea edx, [esi - 0x129] +4cc42c: call 0x401218 ; rtl60!@System@@LStrFromString$qqrr17System@AnsiStringrx28System@%SmallString$iuc$255% +4cc431: mov eax, dword ptr [ebp - 0x4c] +4cc434: push eax +4cc435: lea eax, [ebp - 0x50] +4cc438: lea edx, [esi - 0x329] +4cc43e: call 0x401218 ; rtl60!@System@@LStrFromString$qqrr17System@AnsiStringrx28System@%SmallString$iuc$255% +4cc443: mov edx, dword ptr [ebp - 0x50] +4cc446: mov eax, 2 +4cc44b: pop ecx +4cc44c: call 0x4cb03c +4cc451: pop ecx +4cc452: inc dword ptr [ebp - 0x14] +4cc455: add esi, 0x330 +4cc45b: dec edi +4cc45c: jne 0x4cc38d +4cc462: push ebp +4cc463: push 0 +4cc465: mov eax, dword ptr [ebx + 0x10480] +4cc46b: mov dword ptr [ebp - 0x34], eax +4cc46e: mov eax, dword ptr [ebx + 0x10484] +4cc474: mov dword ptr [ebp - 0x30], eax +4cc477: mov eax, dword ptr [ebx + 0x208d0] +4cc47d: mov dword ptr [ebp - 0x2c], eax +4cc480: mov eax, dword ptr [ebx + 0x208d4] +4cc486: mov dword ptr [ebp - 0x28], eax +4cc489: mov eax, dword ptr [ebx + 0x30d20] +4cc48f: mov dword ptr [ebp - 0x24], eax +4cc492: mov eax, dword ptr [ebx + 0x30d24] +4cc498: mov dword ptr [ebp - 0x20], eax +4cc49b: mov eax, dword ptr [ebx + 0x41170] +4cc4a1: mov dword ptr [ebp - 0x1c], eax +4cc4a4: mov eax, dword ptr [ebx + 0x41174] +4cc4aa: mov dword ptr [ebp - 0x18], eax +4cc4ad: lea eax, [ebp - 0x34] +4cc4b0: push eax +4cc4b1: push 3 +4cc4b3: push 2 +4cc4b5: push 0 +4cc4b7: xor ecx, ecx +4cc4b9: mov edx, 0x4cd7fc ; ' 순공사원가' +4cc4be: xor eax, eax +4cc4c0: call 0x4cb03c +4cc4c5: pop ecx +4cc4c6: push ebp +4cc4c7: push 0x4cd814 ; 'C_ILBAN' +4cc4cc: mov eax, dword ptr [ebx + 0x106f0] +4cc4d2: mov dword ptr [ebp - 0x34], eax +4cc4d5: mov eax, dword ptr [ebx + 0x106f4] +4cc4db: mov dword ptr [ebp - 0x30], eax +4cc4de: mov eax, dword ptr [ebx + 0x20b40] +4cc4e4: mov dword ptr [ebp - 0x2c], eax +4cc4e7: mov eax, dword ptr [ebx + 0x20b44] +4cc4ed: mov dword ptr [ebp - 0x28], eax +4cc4f0: mov eax, dword ptr [ebx + 0x30f90] +4cc4f6: mov dword ptr [ebp - 0x24], eax +4cc4f9: mov eax, dword ptr [ebx + 0x30f94] +4cc4ff: mov dword ptr [ebp - 0x20], eax +4cc502: mov eax, dword ptr [ebx + 0x413e0] +4cc508: mov dword ptr [ebp - 0x1c], eax +4cc50b: mov eax, dword ptr [ebx + 0x413e4] +4cc511: mov dword ptr [ebp - 0x18], eax +4cc514: lea eax, [ebp - 0x34] +4cc517: push eax +4cc518: push 3 +4cc51a: push 1 +4cc51c: push 0 +4cc51e: xor ecx, ecx +4cc520: mov edx, 0x4cd824 ; '일반관리비' +4cc525: mov eax, 1 +4cc52a: call 0x4cb03c +4cc52f: pop ecx +4cc530: push ebp +4cc531: push 0x4cd838 ; 'C_TOT_1' +4cc536: mov eax, dword ptr [ebx + 0x106f8] +4cc53c: mov dword ptr [ebp - 0x34], eax +4cc53f: mov eax, dword ptr [ebx + 0x106fc] +4cc545: mov dword ptr [ebp - 0x30], eax +4cc548: mov eax, dword ptr [ebx + 0x20b48] +4cc54e: mov dword ptr [ebp - 0x2c], eax +4cc551: mov eax, dword ptr [ebx + 0x20b4c] +4cc557: mov dword ptr [ebp - 0x28], eax +4cc55a: mov eax, dword ptr [ebx + 0x30f98] +4cc560: mov dword ptr [ebp - 0x24], eax +4cc563: mov eax, dword ptr [ebx + 0x30f9c] +4cc569: mov dword ptr [ebp - 0x20], eax +4cc56c: mov eax, dword ptr [ebx + 0x413e8] +4cc572: mov dword ptr [ebp - 0x1c], eax +4cc575: mov eax, dword ptr [ebx + 0x413ec] +4cc57b: mov dword ptr [ebp - 0x18], eax +4cc57e: lea eax, [ebp - 0x34] +4cc581: push eax +4cc582: push 3 +4cc584: push 2 +4cc586: push 0 +4cc588: xor ecx, ecx +4cc58a: mov edx, 0x4cd848 ; ' 소 계' +4cc58f: xor eax, eax +4cc591: call 0x4cb03c +4cc596: pop ecx +4cc597: push ebp +4cc598: push 0x4cd85c ; 'C_IYUN' +4cc59d: mov eax, dword ptr [ebx + 0x10710] +4cc5a3: mov dword ptr [ebp - 0x34], eax +4cc5a6: mov eax, dword ptr [ebx + 0x10714] +4cc5ac: mov dword ptr [ebp - 0x30], eax +4cc5af: mov eax, dword ptr [ebx + 0x20b60] +4cc5b5: mov dword ptr [ebp - 0x2c], eax +4cc5b8: mov eax, dword ptr [ebx + 0x20b64] +4cc5be: mov dword ptr [ebp - 0x28], eax +4cc5c1: mov eax, dword ptr [ebx + 0x30fb0] +4cc5c7: mov dword ptr [ebp - 0x24], eax +4cc5ca: mov eax, dword ptr [ebx + 0x30fb4] +4cc5d0: mov dword ptr [ebp - 0x20], eax +4cc5d3: mov eax, dword ptr [ebx + 0x41400] +4cc5d9: mov dword ptr [ebp - 0x1c], eax +4cc5dc: mov eax, dword ptr [ebx + 0x41404] +4cc5e2: mov dword ptr [ebp - 0x18], eax +4cc5e5: lea eax, [ebp - 0x34] +4cc5e8: push eax +4cc5e9: push 3 +4cc5eb: push 1 +4cc5ed: push 0 +4cc5ef: xor ecx, ecx +4cc5f1: mov edx, 0x4cd86c ; '이 윤' +4cc5f6: mov eax, 1 +4cc5fb: call 0x4cb03c +4cc600: pop ecx +4cc601: push ebp +4cc602: push 0x4cd87c ; 'C_ANJUNP' +4cc607: mov eax, dword ptr [ebx + 0x10718] +4cc60d: mov dword ptr [ebp - 0x34], eax +4cc610: mov eax, dword ptr [ebx + 0x1071c] +4cc616: mov dword ptr [ebp - 0x30], eax +4cc619: mov eax, dword ptr [ebx + 0x20b68] +4cc61f: mov dword ptr [ebp - 0x2c], eax +4cc622: mov eax, dword ptr [ebx + 0x20b6c] +4cc628: mov dword ptr [ebp - 0x28], eax +4cc62b: mov eax, dword ptr [ebx + 0x30fb8] +4cc631: mov dword ptr [ebp - 0x24], eax +4cc634: mov eax, dword ptr [ebx + 0x30fbc] +4cc63a: mov dword ptr [ebp - 0x20], eax +4cc63d: mov eax, dword ptr [ebx + 0x41408] +4cc643: mov dword ptr [ebp - 0x1c], eax +4cc646: mov eax, dword ptr [ebx + 0x4140c] +4cc64c: mov dword ptr [ebp - 0x18], eax +4cc64f: lea eax, [ebp - 0x34] +4cc652: push eax +4cc653: push 3 +4cc655: push 1 +4cc657: push 0 +4cc659: xor ecx, ecx +4cc65b: mov edx, 0x4cd890 ; '건설공사 안전점검비' +4cc660: mov eax, 2 +4cc665: call 0x4cb03c +4cc66a: pop ecx +4cc66b: push ebp +4cc66c: push 0x4cd8ac ; 'C_PSAMT_B' +4cc671: mov eax, dword ptr [ebx + 0x106c8] +4cc677: mov dword ptr [ebp - 0x34], eax +4cc67a: mov eax, dword ptr [ebx + 0x106cc] +4cc680: mov dword ptr [ebp - 0x30], eax +4cc683: mov eax, dword ptr [ebx + 0x20b18] +4cc689: mov dword ptr [ebp - 0x2c], eax +4cc68c: mov eax, dword ptr [ebx + 0x20b1c] +4cc692: mov dword ptr [ebp - 0x28], eax +4cc695: mov eax, dword ptr [ebx + 0x30f68] +4cc69b: mov dword ptr [ebp - 0x24], eax +4cc69e: mov eax, dword ptr [ebx + 0x30f6c] +4cc6a4: mov dword ptr [ebp - 0x20], eax +4cc6a7: mov eax, dword ptr [ebx + 0x413b8] +4cc6ad: mov dword ptr [ebp - 0x1c], eax +4cc6b0: mov eax, dword ptr [ebx + 0x413bc] +4cc6b6: mov dword ptr [ebp - 0x18], eax +4cc6b9: lea eax, [ebp - 0x34] +4cc6bc: push eax +4cc6bd: push 3 +4cc6bf: push 0 +4cc6c1: push 0 +4cc6c3: xor ecx, ecx +4cc6c5: mov edx, 0x4cd8c0 ; '미확정설계공종(PS)' +4cc6ca: mov eax, 2 +4cc6cf: call 0x4cb03c +4cc6d4: pop ecx +4cc6d5: push ebp +4cc6d6: push 0x4cd8dc ; 'C_EXCEPT_B' +4cc6db: mov eax, dword ptr [ebx + 0x106d0] +4cc6e1: mov dword ptr [ebp - 0x34], eax +4cc6e4: mov eax, dword ptr [ebx + 0x106d4] +4cc6ea: mov dword ptr [ebp - 0x30], eax +4cc6ed: mov eax, dword ptr [ebx + 0x20b20] +4cc6f3: mov dword ptr [ebp - 0x2c], eax +4cc6f6: mov eax, dword ptr [ebx + 0x20b24] +4cc6fc: mov dword ptr [ebp - 0x28], eax +4cc6ff: mov eax, dword ptr [ebx + 0x30f70] +4cc705: mov dword ptr [ebp - 0x24], eax +4cc708: mov eax, dword ptr [ebx + 0x30f74] +4cc70e: mov dword ptr [ebp - 0x20], eax +4cc711: mov eax, dword ptr [ebx + 0x413c0] +4cc717: mov dword ptr [ebp - 0x1c], eax +4cc71a: mov eax, dword ptr [ebx + 0x413c4] +4cc720: mov dword ptr [ebp - 0x18], eax +4cc723: lea eax, [ebp - 0x34] +4cc726: push eax +4cc727: push 3 +4cc729: push 0 +4cc72b: push 0 +4cc72d: xor ecx, ecx +4cc72f: mov edx, 0x4cd8f0 ; '제비율적용제외공종' +4cc734: mov eax, 2 +4cc739: call 0x4cb03c +4cc73e: pop ecx +4cc73f: mov eax, dword ptr [0x4d26cc] +4cc744: mov al, byte ptr [eax] +4cc746: sub al, 3 +4cc748: jb 0x4cc74e +4cc74a: sub al, 2 +4cc74c: jne 0x4cc7c1 +4cc74e: cmp dword ptr [0x5e8a00], 1 +4cc755: jne 0x4cc7c1 +4cc757: push ebp +4cc758: push 0x4cd298 ; 'C_SAGUP' +4cc75d: mov eax, dword ptr [ebx + 0x107e0] +4cc763: mov dword ptr [ebp - 0x34], eax +4cc766: mov eax, dword ptr [ebx + 0x107e4] +4cc76c: mov dword ptr [ebp - 0x30], eax +4cc76f: mov eax, dword ptr [ebx + 0x20c30] +4cc775: mov dword ptr [ebp - 0x2c], eax +4cc778: mov eax, dword ptr [ebx + 0x20c34] +4cc77e: mov dword ptr [ebp - 0x28], eax +4cc781: mov eax, dword ptr [ebx + 0x31080] +4cc787: mov dword ptr [ebp - 0x24], eax +4cc78a: mov eax, dword ptr [ebx + 0x31084] +4cc790: mov dword ptr [ebp - 0x20], eax +4cc793: mov eax, dword ptr [ebx + 0x414d0] +4cc799: mov dword ptr [ebp - 0x1c], eax +4cc79c: mov eax, dword ptr [ebx + 0x414d4] +4cc7a2: mov dword ptr [ebp - 0x18], eax +4cc7a5: lea eax, [ebp - 0x34] +4cc7a8: push eax +4cc7a9: push 3 +4cc7ab: push 0 +4cc7ad: push 0 +4cc7af: xor ecx, ecx +4cc7b1: mov edx, 0x4cd2a8 ; '사급자재대' +4cc7b6: mov eax, 1 +4cc7bb: call 0x4cb03c +4cc7c0: pop ecx +4cc7c1: mov eax, dword ptr [0x4d26cc] +4cc7c6: mov al, byte ptr [eax] +4cc7c8: sub al, 5 +4cc7ca: jne 0x4cc8aa +4cc7d0: push ebp +4cc7d1: push 0x4cd90c ; 'C_EIS_SOCINS' +4cc7d6: mov eax, dword ptr [ebx + 0x10748] +4cc7dc: mov dword ptr [ebp - 0x34], eax +4cc7df: mov eax, dword ptr [ebx + 0x1074c] +4cc7e5: mov dword ptr [ebp - 0x30], eax +4cc7e8: mov eax, dword ptr [ebx + 0x20b98] +4cc7ee: mov dword ptr [ebp - 0x2c], eax +4cc7f1: mov eax, dword ptr [ebx + 0x20b9c] +4cc7f7: mov dword ptr [ebp - 0x28], eax +4cc7fa: mov eax, dword ptr [ebx + 0x30fe8] +4cc800: mov dword ptr [ebp - 0x24], eax +4cc803: mov eax, dword ptr [ebx + 0x30fec] +4cc809: mov dword ptr [ebp - 0x20], eax +4cc80c: mov eax, dword ptr [ebx + 0x41438] +4cc812: mov dword ptr [ebp - 0x1c], eax +4cc815: mov eax, dword ptr [ebx + 0x4143c] +4cc81b: mov dword ptr [ebp - 0x18], eax +4cc81e: lea eax, [ebp - 0x34] +4cc821: push eax +4cc822: push 3 +4cc824: push 0 +4cc826: push 0 +4cc828: mov ecx, 0x4cd350 ; '(기성)' +4cc82d: mov edx, 0x4cd924 ; '고용개선지원비(건강 , 연금)' +4cc832: mov eax, 1 +4cc837: call 0x4cb03c +4cc83c: pop ecx +4cc83d: push ebp +4cc83e: push 0x4cd948 ; 'C_EIS_INCENT' +4cc843: mov eax, dword ptr [ebx + 0x10750] +4cc849: mov dword ptr [ebp - 0x34], eax +4cc84c: mov eax, dword ptr [ebx + 0x10754] +4cc852: mov dword ptr [ebp - 0x30], eax +4cc855: mov eax, dword ptr [ebx + 0x20ba0] +4cc85b: mov dword ptr [ebp - 0x2c], eax +4cc85e: mov eax, dword ptr [ebx + 0x20ba4] +4cc864: mov dword ptr [ebp - 0x28], eax +4cc867: mov eax, dword ptr [ebx + 0x30ff0] +4cc86d: mov dword ptr [ebp - 0x24], eax +4cc870: mov eax, dword ptr [ebx + 0x30ff4] +4cc876: mov dword ptr [ebp - 0x20], eax +4cc879: mov eax, dword ptr [ebx + 0x41440] +4cc87f: mov dword ptr [ebp - 0x1c], eax +4cc882: mov eax, dword ptr [ebx + 0x41444] +4cc888: mov dword ptr [ebp - 0x18], eax +4cc88b: lea eax, [ebp - 0x34] +4cc88e: push eax +4cc88f: push 3 +4cc891: push 0 +4cc893: push 0 +4cc895: mov ecx, 0x4cd350 ; '(기성)' +4cc89a: mov edx, 0x4cd960 ; '고용개선지원비(고용개선장려금)' +4cc89f: mov eax, 1 +4cc8a4: call 0x4cb03c +4cc8a9: pop ecx +4cc8aa: mov edi, dword ptr [ebx + 0x10814] +4cc8b0: test edi, edi +4cc8b2: jle 0x4cc99a +4cc8b8: mov dword ptr [ebp - 0x14], 1 +4cc8bf: lea esi, [ebx + 0x14e39] +4cc8c5: cmp byte ptr [esi], 0 +4cc8c8: jne 0x4cc98a +4cc8ce: push ebp +4cc8cf: push 0x4cd7dc ; 'ADD_AMT_' +4cc8d4: lea edx, [ebp - 0x58] +4cc8d7: mov eax, 2 +4cc8dc: call 0x4019dc ; rtl60!@Sysutils@IntToStr$qqri +4cc8e1: push dword ptr [ebp - 0x58] +4cc8e4: fild dword ptr [ebp - 0x14] +4cc8e7: add esp, -0xc +4cc8ea: fstp xword ptr [esp] +4cc8ed: wait +4cc8ee: lea edx, [ebp - 0x5c] +4cc8f1: mov eax, 0x4cd7f0 ; '_00' +4cc8f6: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4cc8fb: push dword ptr [ebp - 0x5c] +4cc8fe: lea eax, [ebp - 0x54] +4cc901: mov edx, 3 +4cc906: call 0x401248 ; rtl60!@System@@LStrCatN$qqrv +4cc90b: mov eax, dword ptr [ebp - 0x54] +4cc90e: push eax +4cc90f: mov eax, dword ptr [esi - 0x29] +4cc912: mov dword ptr [ebp - 0x34], eax +4cc915: mov eax, dword ptr [esi - 0x25] +4cc918: mov dword ptr [ebp - 0x30], eax +4cc91b: mov eax, dword ptr [esi + 0x1042f] +4cc921: mov dword ptr [ebp - 0x2c], eax +4cc924: mov eax, dword ptr [esi + 0x10433] +4cc92a: mov dword ptr [ebp - 0x28], eax +4cc92d: mov eax, dword ptr [esi + 0x20887] +4cc933: mov dword ptr [ebp - 0x24], eax +4cc936: mov eax, dword ptr [esi + 0x2088b] +4cc93c: mov dword ptr [ebp - 0x20], eax +4cc93f: mov eax, dword ptr [esi + 0x30cdf] +4cc945: mov dword ptr [ebp - 0x1c], eax +4cc948: mov eax, dword ptr [esi + 0x30ce3] +4cc94e: mov dword ptr [ebp - 0x18], eax +4cc951: lea eax, [ebp - 0x34] +4cc954: push eax +4cc955: push 3 +4cc957: push 0 +4cc959: push 0 +4cc95b: lea eax, [ebp - 0x60] +4cc95e: lea edx, [esi - 0x129] +4cc964: call 0x401218 ; rtl60!@System@@LStrFromString$qqrr17System@AnsiStringrx28System@%SmallString$iuc$255% +4cc969: mov eax, dword ptr [ebp - 0x60] +4cc96c: push eax +4cc96d: lea eax, [ebp - 0x64] +4cc970: lea edx, [esi - 0x329] +4cc976: call 0x401218 ; rtl60!@System@@LStrFromString$qqrr17System@AnsiStringrx28System@%SmallString$iuc$255% +4cc97b: mov edx, dword ptr [ebp - 0x64] +4cc97e: mov eax, 2 +4cc983: pop ecx +4cc984: call 0x4cb03c +4cc989: pop ecx +4cc98a: inc dword ptr [ebp - 0x14] +4cc98d: add esi, 0x330 +4cc993: dec edi +4cc994: jne 0x4cc8c5 +4cc99a: mov eax, dword ptr [0x4d26cc] +4cc99f: mov al, byte ptr [eax] +4cc9a1: sub al, 4 +4cc9a3: jne 0x4cca0f +4cc9a5: push ebp +4cc9a6: push 0x4cd988 ; 'C_S_SIGONG' +4cc9ab: mov eax, dword ptr [ebx + 0x10728] +4cc9b1: mov dword ptr [ebp - 0x34], eax +4cc9b4: mov eax, dword ptr [ebx + 0x1072c] +4cc9ba: mov dword ptr [ebp - 0x30], eax +4cc9bd: mov eax, dword ptr [ebx + 0x20b78] +4cc9c3: mov dword ptr [ebp - 0x2c], eax +4cc9c6: mov eax, dword ptr [ebx + 0x20b7c] +4cc9cc: mov dword ptr [ebp - 0x28], eax +4cc9cf: mov eax, dword ptr [ebx + 0x30fc8] +4cc9d5: mov dword ptr [ebp - 0x24], eax +4cc9d8: mov eax, dword ptr [ebx + 0x30fcc] +4cc9de: mov dword ptr [ebp - 0x20], eax +4cc9e1: mov eax, dword ptr [ebx + 0x41418] +4cc9e7: mov dword ptr [ebp - 0x1c], eax +4cc9ea: mov eax, dword ptr [ebx + 0x4141c] +4cc9f0: mov dword ptr [ebp - 0x18], eax +4cc9f3: lea eax, [ebp - 0x34] +4cc9f6: push eax +4cc9f7: push 3 +4cc9f9: push 1 +4cc9fb: push 0 +4cc9fd: xor ecx, ecx +4cc9ff: mov edx, 0x4cd99c ; '시공도작성비' +4cca04: mov eax, 2 +4cca09: call 0x4cb03c +4cca0e: pop ecx +4cca0f: push ebp +4cca10: push 0x4cd9b4 ; 'C_KONGGUP' +4cca15: mov eax, dword ptr [ebx + 0x10758] +4cca1b: mov dword ptr [ebp - 0x34], eax +4cca1e: mov eax, dword ptr [ebx + 0x1075c] +4cca24: mov dword ptr [ebp - 0x30], eax +4cca27: mov eax, dword ptr [ebx + 0x20ba8] +4cca2d: mov dword ptr [ebp - 0x2c], eax +4cca30: mov eax, dword ptr [ebx + 0x20bac] +4cca36: mov dword ptr [ebp - 0x28], eax +4cca39: mov eax, dword ptr [ebx + 0x30ff8] +4cca3f: mov dword ptr [ebp - 0x24], eax +4cca42: mov eax, dword ptr [ebx + 0x30ffc] +4cca48: mov dword ptr [ebp - 0x20], eax +4cca4b: mov eax, dword ptr [ebx + 0x41448] +4cca51: mov dword ptr [ebp - 0x1c], eax +4cca54: mov eax, dword ptr [ebx + 0x4144c] +4cca5a: mov dword ptr [ebp - 0x18], eax +4cca5d: lea eax, [ebp - 0x34] +4cca60: push eax +4cca61: push 3 +4cca63: push 2 +4cca65: push 0 +4cca67: xor ecx, ecx +4cca69: mov edx, 0x4cd9c8 ; '공급가액' +4cca6e: xor eax, eax +4cca70: call 0x4cb03c +4cca75: pop ecx +4cca76: push ebp +4cca77: push 0x4cd9dc ; 'C_KONGSA' +4cca7c: mov eax, dword ptr [ebx + 0x10770] +4cca82: mov dword ptr [ebp - 0x34], eax +4cca85: mov eax, dword ptr [ebx + 0x10774] +4cca8b: mov dword ptr [ebp - 0x30], eax +4cca8e: mov eax, dword ptr [ebx + 0x20bc0] +4cca94: mov dword ptr [ebp - 0x2c], eax +4cca97: mov eax, dword ptr [ebx + 0x20bc4] +4cca9d: mov dword ptr [ebp - 0x28], eax +4ccaa0: mov eax, dword ptr [ebx + 0x31010] +4ccaa6: mov dword ptr [ebp - 0x24], eax +4ccaa9: mov eax, dword ptr [ebx + 0x31014] +4ccaaf: mov dword ptr [ebp - 0x20], eax +4ccab2: mov eax, dword ptr [ebx + 0x41460] +4ccab8: mov dword ptr [ebp - 0x1c], eax +4ccabb: mov eax, dword ptr [ebx + 0x41464] +4ccac1: mov dword ptr [ebp - 0x18], eax +4ccac4: lea eax, [ebp - 0x34] +4ccac7: push eax +4ccac8: push 3 +4ccaca: push 1 +4ccacc: push 0 +4ccace: xor ecx, ecx +4ccad0: mov edx, 0x4cd9f0 ; '공사손해보험료' +4ccad5: mov eax, 2 +4ccada: call 0x4cb03c +4ccadf: pop ecx +4ccae0: push ebp +4ccae1: push 0x4cda08 ; 'C_BUSAN_B' +4ccae6: mov eax, dword ptr [ebx + 0x106d8] +4ccaec: mov dword ptr [ebp - 0x34], eax +4ccaef: mov eax, dword ptr [ebx + 0x106dc] +4ccaf5: mov dword ptr [ebp - 0x30], eax +4ccaf8: mov eax, dword ptr [ebx + 0x20b28] +4ccafe: mov dword ptr [ebp - 0x2c], eax +4ccb01: mov eax, dword ptr [ebx + 0x20b2c] +4ccb07: mov dword ptr [ebp - 0x28], eax +4ccb0a: mov eax, dword ptr [ebx + 0x30f78] +4ccb10: mov dword ptr [ebp - 0x24], eax +4ccb13: mov eax, dword ptr [ebx + 0x30f7c] +4ccb19: mov dword ptr [ebp - 0x20], eax +4ccb1c: mov eax, dword ptr [ebx + 0x413c8] +4ccb22: mov dword ptr [ebp - 0x1c], eax +4ccb25: mov eax, dword ptr [ebx + 0x413cc] +4ccb2b: mov dword ptr [ebp - 0x18], eax +4ccb2e: lea eax, [ebp - 0x34] +4ccb31: push eax +4ccb32: push 3 +4ccb34: push 0 +4ccb36: push 0 +4ccb38: xor ecx, ecx +4ccb3a: mov edx, 0x4cda1c ; '작업설 등' +4ccb3f: mov eax, 2 +4ccb44: call 0x4cb03c +4ccb49: pop ecx +4ccb4a: push ebp +4ccb4b: push 0x4cda30 ; 'C_BUGA' +4ccb50: mov eax, dword ptr [ebx + 0x10778] +4ccb56: mov dword ptr [ebp - 0x34], eax +4ccb59: mov eax, dword ptr [ebx + 0x1077c] +4ccb5f: mov dword ptr [ebp - 0x30], eax +4ccb62: mov eax, dword ptr [ebx + 0x20bc8] +4ccb68: mov dword ptr [ebp - 0x2c], eax +4ccb6b: mov eax, dword ptr [ebx + 0x20bcc] +4ccb71: mov dword ptr [ebp - 0x28], eax +4ccb74: mov eax, dword ptr [ebx + 0x31018] +4ccb7a: mov dword ptr [ebp - 0x24], eax +4ccb7d: mov eax, dword ptr [ebx + 0x3101c] +4ccb83: mov dword ptr [ebp - 0x20], eax +4ccb86: mov eax, dword ptr [ebx + 0x41468] +4ccb8c: mov dword ptr [ebp - 0x1c], eax +4ccb8f: mov eax, dword ptr [ebx + 0x4146c] +4ccb95: mov dword ptr [ebp - 0x18], eax +4ccb98: lea eax, [ebp - 0x34] +4ccb9b: push eax +4ccb9c: push 3 +4ccb9e: push 0 +4ccba0: push 0 +4ccba2: xor ecx, ecx +4ccba4: mov edx, 0x4cda40 ; '부가가치세' +4ccba9: mov eax, 1 +4ccbae: call 0x4cb03c +4ccbb3: pop ecx +4ccbb4: push ebp +4ccbb5: push 0x4cda54 ; 'C_T_PEGI' +4ccbba: mov eax, dword ptr [ebx + 0x10790] +4ccbc0: mov dword ptr [ebp - 0x34], eax +4ccbc3: mov eax, dword ptr [ebx + 0x10794] +4ccbc9: mov dword ptr [ebp - 0x30], eax +4ccbcc: mov eax, dword ptr [ebx + 0x20be0] +4ccbd2: mov dword ptr [ebp - 0x2c], eax +4ccbd5: mov eax, dword ptr [ebx + 0x20be4] +4ccbdb: mov dword ptr [ebp - 0x28], eax +4ccbde: mov eax, dword ptr [ebx + 0x31030] +4ccbe4: mov dword ptr [ebp - 0x24], eax +4ccbe7: mov eax, dword ptr [ebx + 0x31034] +4ccbed: mov dword ptr [ebp - 0x20], eax +4ccbf0: mov eax, dword ptr [ebx + 0x41480] +4ccbf6: mov dword ptr [ebp - 0x1c], eax +4ccbf9: mov eax, dword ptr [ebx + 0x41484] +4ccbff: mov dword ptr [ebp - 0x18], eax +4ccc02: lea eax, [ebp - 0x34] +4ccc05: push eax +4ccc06: push 3 +4ccc08: push 0 +4ccc0a: push 0 +4ccc0c: xor ecx, ecx +4ccc0e: mov edx, 0x4cda68 ; '폐기물수수료' +4ccc13: mov eax, 2 +4ccc18: call 0x4cb03c +4ccc1d: pop ecx +4ccc1e: push ebp +4ccc1f: push 0x4cda80 ; 'C_T_KOLJAE' +4ccc24: mov eax, dword ptr [ebx + 0x10798] +4ccc2a: mov dword ptr [ebp - 0x34], eax +4ccc2d: mov eax, dword ptr [ebx + 0x1079c] +4ccc33: mov dword ptr [ebp - 0x30], eax +4ccc36: mov eax, dword ptr [ebx + 0x20be8] +4ccc3c: mov dword ptr [ebp - 0x2c], eax +4ccc3f: mov eax, dword ptr [ebx + 0x20bec] +4ccc45: mov dword ptr [ebp - 0x28], eax +4ccc48: mov eax, dword ptr [ebx + 0x31038] +4ccc4e: mov dword ptr [ebp - 0x24], eax +4ccc51: mov eax, dword ptr [ebx + 0x3103c] +4ccc57: mov dword ptr [ebp - 0x20], eax +4ccc5a: mov eax, dword ptr [ebx + 0x41488] +4ccc60: mov dword ptr [ebp - 0x1c], eax +4ccc63: mov eax, dword ptr [ebx + 0x4148c] +4ccc69: mov dword ptr [ebp - 0x18], eax +4ccc6c: lea eax, [ebp - 0x34] +4ccc6f: push eax +4ccc70: push 3 +4ccc72: push 0 +4ccc74: push 0 +4ccc76: xor ecx, ecx +4ccc78: mov edx, 0x4cda94 ; '골재사용료' +4ccc7d: mov eax, 2 +4ccc82: call 0x4cb03c +4ccc87: pop ecx +4ccc88: push ebp +4ccc89: push 0x4cdaa8 ; 'C_NBUGAM' +4ccc8e: mov eax, dword ptr [ebx + 0x107a0] +4ccc94: mov dword ptr [ebp - 0x34], eax +4ccc97: mov eax, dword ptr [ebx + 0x107a4] +4ccc9d: mov dword ptr [ebp - 0x30], eax +4ccca0: mov eax, dword ptr [ebx + 0x20bf0] +4ccca6: mov dword ptr [ebp - 0x2c], eax +4ccca9: mov eax, dword ptr [ebx + 0x20bf4] +4cccaf: mov dword ptr [ebp - 0x28], eax +4cccb2: mov eax, dword ptr [ebx + 0x31040] +4cccb8: mov dword ptr [ebp - 0x24], eax +4cccbb: mov eax, dword ptr [ebx + 0x31044] +4cccc1: mov dword ptr [ebp - 0x20], eax +4cccc4: mov eax, dword ptr [ebx + 0x41490] +4cccca: mov dword ptr [ebp - 0x1c], eax +4ccccd: mov eax, dword ptr [ebx + 0x41494] +4cccd3: mov dword ptr [ebp - 0x18], eax +4cccd6: lea eax, [ebp - 0x34] +4cccd9: push eax +4cccda: push 3 +4cccdc: push 0 +4cccde: push 0 +4ccce0: xor ecx, ecx +4ccce2: mov edx, 0x4cdabc ; '비과세자재대' +4ccce7: mov eax, 2 +4cccec: call 0x4cb03c +4cccf1: pop ecx +4cccf2: mov eax, dword ptr [0x4d26cc] +4cccf7: mov al, byte ptr [eax] +4cccf9: sub al, 3 +4cccfb: jb 0x4ccd01 +4cccfd: sub al, 2 +4cccff: jne 0x4ccd74 +4ccd01: cmp dword ptr [0x5e8a00], 2 +4ccd08: jne 0x4ccd74 +4ccd0a: push ebp +4ccd0b: push 0x4cd298 ; 'C_SAGUP' +4ccd10: mov eax, dword ptr [ebx + 0x107e0] +4ccd16: mov dword ptr [ebp - 0x34], eax +4ccd19: mov eax, dword ptr [ebx + 0x107e4] +4ccd1f: mov dword ptr [ebp - 0x30], eax +4ccd22: mov eax, dword ptr [ebx + 0x20c30] +4ccd28: mov dword ptr [ebp - 0x2c], eax +4ccd2b: mov eax, dword ptr [ebx + 0x20c34] +4ccd31: mov dword ptr [ebp - 0x28], eax +4ccd34: mov eax, dword ptr [ebx + 0x31080] +4ccd3a: mov dword ptr [ebp - 0x24], eax +4ccd3d: mov eax, dword ptr [ebx + 0x31084] +4ccd43: mov dword ptr [ebp - 0x20], eax +4ccd46: mov eax, dword ptr [ebx + 0x414d0] +4ccd4c: mov dword ptr [ebp - 0x1c], eax +4ccd4f: mov eax, dword ptr [ebx + 0x414d4] +4ccd55: mov dword ptr [ebp - 0x18], eax +4ccd58: lea eax, [ebp - 0x34] +4ccd5b: push eax +4ccd5c: push 3 +4ccd5e: push 0 +4ccd60: push 0 +4ccd62: xor ecx, ecx +4ccd64: mov edx, 0x4cd2a8 ; '사급자재대' +4ccd69: mov eax, 1 +4ccd6e: call 0x4cb03c +4ccd73: pop ecx +4ccd74: mov edi, dword ptr [ebx + 0x10818] +4ccd7a: test edi, edi +4ccd7c: jle 0x4cce64 +4ccd82: mov dword ptr [ebp - 0x14], 1 +4ccd89: lea esi, [ebx + 0x18df9] +4ccd8f: cmp byte ptr [esi], 0 +4ccd92: jne 0x4cce54 +4ccd98: push ebp +4ccd99: push 0x4cd7dc ; 'ADD_AMT_' +4ccd9e: lea edx, [ebp - 0x6c] +4ccda1: mov eax, 3 +4ccda6: call 0x4019dc ; rtl60!@Sysutils@IntToStr$qqri +4ccdab: push dword ptr [ebp - 0x6c] +4ccdae: fild dword ptr [ebp - 0x14] +4ccdb1: add esp, -0xc +4ccdb4: fstp xword ptr [esp] +4ccdb7: wait +4ccdb8: lea edx, [ebp - 0x70] +4ccdbb: mov eax, 0x4cd7f0 ; '_00' +4ccdc0: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4ccdc5: push dword ptr [ebp - 0x70] +4ccdc8: lea eax, [ebp - 0x68] +4ccdcb: mov edx, 3 +4ccdd0: call 0x401248 ; rtl60!@System@@LStrCatN$qqrv +4ccdd5: mov eax, dword ptr [ebp - 0x68] +4ccdd8: push eax +4ccdd9: mov eax, dword ptr [esi - 0x29] +4ccddc: mov dword ptr [ebp - 0x34], eax +4ccddf: mov eax, dword ptr [esi - 0x25] +4ccde2: mov dword ptr [ebp - 0x30], eax +4ccde5: mov eax, dword ptr [esi + 0x1042f] +4ccdeb: mov dword ptr [ebp - 0x2c], eax +4ccdee: mov eax, dword ptr [esi + 0x10433] +4ccdf4: mov dword ptr [ebp - 0x28], eax +4ccdf7: mov eax, dword ptr [esi + 0x20887] +4ccdfd: mov dword ptr [ebp - 0x24], eax +4cce00: mov eax, dword ptr [esi + 0x2088b] +4cce06: mov dword ptr [ebp - 0x20], eax +4cce09: mov eax, dword ptr [esi + 0x30cdf] +4cce0f: mov dword ptr [ebp - 0x1c], eax +4cce12: mov eax, dword ptr [esi + 0x30ce3] +4cce18: mov dword ptr [ebp - 0x18], eax +4cce1b: lea eax, [ebp - 0x34] +4cce1e: push eax +4cce1f: push 3 +4cce21: push 0 +4cce23: push 0 +4cce25: lea eax, [ebp - 0x74] +4cce28: lea edx, [esi - 0x129] +4cce2e: call 0x401218 ; rtl60!@System@@LStrFromString$qqrr17System@AnsiStringrx28System@%SmallString$iuc$255% +4cce33: mov eax, dword ptr [ebp - 0x74] +4cce36: push eax +4cce37: lea eax, [ebp - 0x78] +4cce3a: lea edx, [esi - 0x329] +4cce40: call 0x401218 ; rtl60!@System@@LStrFromString$qqrr17System@AnsiStringrx28System@%SmallString$iuc$255% +4cce45: mov edx, dword ptr [ebp - 0x78] +4cce48: mov eax, 2 +4cce4d: pop ecx +4cce4e: call 0x4cb03c +4cce53: pop ecx +4cce54: inc dword ptr [ebp - 0x14] +4cce57: add esi, 0x330 +4cce5d: dec edi +4cce5e: jne 0x4ccd8f +4cce64: push ebp +4cce65: push 0x4cdad4 ; 'C_DOGUP' +4cce6a: mov eax, dword ptr [ebx + 0x107a8] +4cce70: mov dword ptr [ebp - 0x34], eax +4cce73: mov eax, dword ptr [ebx + 0x107ac] +4cce79: mov dword ptr [ebp - 0x30], eax +4cce7c: mov eax, dword ptr [ebx + 0x20bf8] +4cce82: mov dword ptr [ebp - 0x2c], eax +4cce85: mov eax, dword ptr [ebx + 0x20bfc] +4cce8b: mov dword ptr [ebp - 0x28], eax +4cce8e: mov eax, dword ptr [ebx + 0x31048] +4cce94: mov dword ptr [ebp - 0x24], eax +4cce97: mov eax, dword ptr [ebx + 0x3104c] +4cce9d: mov dword ptr [ebp - 0x20], eax +4ccea0: mov eax, dword ptr [ebx + 0x41498] +4ccea6: mov dword ptr [ebp - 0x1c], eax +4ccea9: mov eax, dword ptr [ebx + 0x4149c] +4cceaf: mov dword ptr [ebp - 0x18], eax +4cceb2: lea eax, [ebp - 0x34] +4cceb5: push eax +4cceb6: push 3 +4cceb8: push 2 +4cceba: push 0 +4ccebc: xor ecx, ecx +4ccebe: mov edx, 0x4cdae4 ; '도급공사비' +4ccec3: xor eax, eax +4ccec5: call 0x4cb03c +4cceca: pop ecx +4ccecb: fld qword ptr [ebx + 0x107c0] +4cced1: fcomp dword ptr [0x4cdaf0] ; =0.0 +4cced7: fnstsw ax +4cced9: sahf +4cceda: je 0x4ccee5 +4ccedc: cmp dword ptr [0x5e8a44], 0 +4ccee3: je 0x4ccf51 +4ccee5: push ebp +4ccee6: push 0x4cdafc ; 'C_UPDNKWN' +4cceeb: mov eax, dword ptr [ebx + 0x107c8] +4ccef1: mov dword ptr [ebp - 0x34], eax +4ccef4: mov eax, dword ptr [ebx + 0x107cc] +4ccefa: mov dword ptr [ebp - 0x30], eax +4ccefd: mov eax, dword ptr [ebx + 0x20c18] +4ccf03: mov dword ptr [ebp - 0x2c], eax +4ccf06: mov eax, dword ptr [ebx + 0x20c1c] +4ccf0c: mov dword ptr [ebp - 0x28], eax +4ccf0f: mov eax, dword ptr [ebx + 0x31068] +4ccf15: mov dword ptr [ebp - 0x24], eax +4ccf18: mov eax, dword ptr [ebx + 0x3106c] +4ccf1e: mov dword ptr [ebp - 0x20], eax +4ccf21: mov eax, dword ptr [ebx + 0x414b8] +4ccf27: mov dword ptr [ebp - 0x1c], eax +4ccf2a: mov eax, dword ptr [ebx + 0x414bc] +4ccf30: mov dword ptr [ebp - 0x18], eax +4ccf33: lea eax, [ebp - 0x34] +4ccf36: push eax +4ccf37: push 3 +4ccf39: push 0 +4ccf3b: push 0 +4ccf3d: xor ecx, ecx +4ccf3f: mov edx, 0x4cdb10 ; '관급자재대' +4ccf44: mov eax, 1 +4ccf49: call 0x4cb03c +4ccf4e: pop ecx +4ccf4f: jmp 0x4ccfbb +4ccf51: push ebp +4ccf52: push 0x4cdafc ; 'C_UPDNKWN' +4ccf57: mov eax, dword ptr [ebx + 0x107c8] +4ccf5d: mov dword ptr [ebp - 0x34], eax +4ccf60: mov eax, dword ptr [ebx + 0x107cc] +4ccf66: mov dword ptr [ebp - 0x30], eax +4ccf69: mov eax, dword ptr [ebx + 0x20c18] +4ccf6f: mov dword ptr [ebp - 0x2c], eax +4ccf72: mov eax, dword ptr [ebx + 0x20c1c] +4ccf78: mov dword ptr [ebp - 0x28], eax +4ccf7b: mov eax, dword ptr [ebx + 0x31068] +4ccf81: mov dword ptr [ebp - 0x24], eax +4ccf84: mov eax, dword ptr [ebx + 0x3106c] +4ccf8a: mov dword ptr [ebp - 0x20], eax +4ccf8d: mov eax, dword ptr [ebx + 0x414b8] +4ccf93: mov dword ptr [ebp - 0x1c], eax +4ccf96: mov eax, dword ptr [ebx + 0x414bc] +4ccf9c: mov dword ptr [ebp - 0x18], eax +4ccf9f: lea eax, [ebp - 0x34] +4ccfa2: push eax +4ccfa3: push 3 +4ccfa5: push 0 +4ccfa7: push 0 +4ccfa9: xor ecx, ecx +4ccfab: mov edx, 0x4cdb24 ; '관급자재대(도급자설치)' +4ccfb0: mov eax, 1 +4ccfb5: call 0x4cb03c +4ccfba: pop ecx +4ccfbb: cmp dword ptr [0x5e8a44], 0 +4ccfc2: jne 0x4cd02e +4ccfc4: push ebp +4ccfc5: push 0x4cdb44 ; 'C_KWANGUP_K' +4ccfca: mov eax, dword ptr [ebx + 0x107c0] +4ccfd0: mov dword ptr [ebp - 0x34], eax +4ccfd3: mov eax, dword ptr [ebx + 0x107c4] +4ccfd9: mov dword ptr [ebp - 0x30], eax +4ccfdc: mov eax, dword ptr [ebx + 0x20c10] +4ccfe2: mov dword ptr [ebp - 0x2c], eax +4ccfe5: mov eax, dword ptr [ebx + 0x20c14] +4ccfeb: mov dword ptr [ebp - 0x28], eax +4ccfee: mov eax, dword ptr [ebx + 0x31060] +4ccff4: mov dword ptr [ebp - 0x24], eax +4ccff7: mov eax, dword ptr [ebx + 0x31064] +4ccffd: mov dword ptr [ebp - 0x20], eax +4cd000: mov eax, dword ptr [ebx + 0x414b0] +4cd006: mov dword ptr [ebp - 0x1c], eax +4cd009: mov eax, dword ptr [ebx + 0x414b4] +4cd00f: mov dword ptr [ebp - 0x18], eax +4cd012: lea eax, [ebp - 0x34] +4cd015: push eax +4cd016: push 3 +4cd018: push 0 +4cd01a: push 0 +4cd01c: xor ecx, ecx +4cd01e: mov edx, 0x4cdb58 ; '관급자재대(관급자설치)' +4cd023: mov eax, 2 +4cd028: call 0x4cb03c +4cd02d: pop ecx +4cd02e: mov eax, dword ptr [0x5e8a00] +4cd033: sub eax, 3 +4cd036: je 0x4cd0c0 +4cd03c: mov eax, dword ptr [0x4d26cc] +4cd041: mov al, byte ptr [eax] +4cd043: sub al, 3 +4cd045: jb 0x4cd04b +4cd047: sub al, 2 +4cd049: jne 0x4cd056 +4cd04b: mov eax, dword ptr [0x5e8a00] +4cd050: dec eax +4cd051: sub eax, 2 +4cd054: jb 0x4cd0c0 +4cd056: push ebp +4cd057: push 0x4cd298 ; 'C_SAGUP' +4cd05c: mov eax, dword ptr [ebx + 0x107e0] +4cd062: mov dword ptr [ebp - 0x34], eax +4cd065: mov eax, dword ptr [ebx + 0x107e4] +4cd06b: mov dword ptr [ebp - 0x30], eax +4cd06e: mov eax, dword ptr [ebx + 0x20c30] +4cd074: mov dword ptr [ebp - 0x2c], eax +4cd077: mov eax, dword ptr [ebx + 0x20c34] +4cd07d: mov dword ptr [ebp - 0x28], eax +4cd080: mov eax, dword ptr [ebx + 0x31080] +4cd086: mov dword ptr [ebp - 0x24], eax +4cd089: mov eax, dword ptr [ebx + 0x31084] +4cd08f: mov dword ptr [ebp - 0x20], eax +4cd092: mov eax, dword ptr [ebx + 0x414d0] +4cd098: mov dword ptr [ebp - 0x1c], eax +4cd09b: mov eax, dword ptr [ebx + 0x414d4] +4cd0a1: mov dword ptr [ebp - 0x18], eax +4cd0a4: lea eax, [ebp - 0x34] +4cd0a7: push eax +4cd0a8: push 3 +4cd0aa: push 0 +4cd0ac: push 0 +4cd0ae: xor ecx, ecx +4cd0b0: mov edx, 0x4cd2a8 ; '사급자재대' +4cd0b5: mov eax, 1 +4cd0ba: call 0x4cb03c +4cd0bf: pop ecx +4cd0c0: mov edi, dword ptr [ebx + 0x1081c] +4cd0c6: test edi, edi +4cd0c8: jle 0x4cd1c2 +4cd0ce: mov dword ptr [ebp - 0x14], 1 +4cd0d5: lea esi, [ebx + 0x1cdb9] +4cd0db: cmp byte ptr [esi], 0 +4cd0de: jne 0x4cd1b2 +4cd0e4: push ebp +4cd0e5: push 0x4cd7dc ; 'ADD_AMT_' +4cd0ea: lea edx, [ebp - 0x80] +4cd0ed: mov eax, 4 +4cd0f2: call 0x4019dc ; rtl60!@Sysutils@IntToStr$qqri +4cd0f7: push dword ptr [ebp - 0x80] +4cd0fa: fild dword ptr [ebp - 0x14] +4cd0fd: add esp, -0xc +4cd100: fstp xword ptr [esp] +4cd103: wait +4cd104: lea edx, [ebp - 0x84] +4cd10a: mov eax, 0x4cd7f0 ; '_00' +4cd10f: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4cd114: push dword ptr [ebp - 0x84] +4cd11a: lea eax, [ebp - 0x7c] +4cd11d: mov edx, 3 +4cd122: call 0x401248 ; rtl60!@System@@LStrCatN$qqrv +4cd127: mov eax, dword ptr [ebp - 0x7c] +4cd12a: push eax +4cd12b: mov eax, dword ptr [esi - 0x29] +4cd12e: mov dword ptr [ebp - 0x34], eax +4cd131: mov eax, dword ptr [esi - 0x25] +4cd134: mov dword ptr [ebp - 0x30], eax +4cd137: mov eax, dword ptr [esi + 0x1042f] +4cd13d: mov dword ptr [ebp - 0x2c], eax +4cd140: mov eax, dword ptr [esi + 0x10433] +4cd146: mov dword ptr [ebp - 0x28], eax +4cd149: mov eax, dword ptr [esi + 0x20887] +4cd14f: mov dword ptr [ebp - 0x24], eax +4cd152: mov eax, dword ptr [esi + 0x2088b] +4cd158: mov dword ptr [ebp - 0x20], eax +4cd15b: mov eax, dword ptr [esi + 0x30cdf] +4cd161: mov dword ptr [ebp - 0x1c], eax +4cd164: mov eax, dword ptr [esi + 0x30ce3] +4cd16a: mov dword ptr [ebp - 0x18], eax +4cd16d: lea eax, [ebp - 0x34] +4cd170: push eax +4cd171: push 3 +4cd173: push 0 +4cd175: push 0 +4cd177: lea eax, [ebp - 0x88] +4cd17d: lea edx, [esi - 0x129] +4cd183: call 0x401218 ; rtl60!@System@@LStrFromString$qqrr17System@AnsiStringrx28System@%SmallString$iuc$255% +4cd188: mov eax, dword ptr [ebp - 0x88] +4cd18e: push eax +4cd18f: lea eax, [ebp - 0x8c] +4cd195: lea edx, [esi - 0x329] +4cd19b: call 0x401218 ; rtl60!@System@@LStrFromString$qqrr17System@AnsiStringrx28System@%SmallString$iuc$255% +4cd1a0: mov edx, dword ptr [ebp - 0x8c] +4cd1a6: mov eax, 2 +4cd1ab: pop ecx +4cd1ac: call 0x4cb03c +4cd1b1: pop ecx +4cd1b2: inc dword ptr [ebp - 0x14] +4cd1b5: add esi, 0x330 +4cd1bb: dec edi +4cd1bc: jne 0x4cd0db +4cd1c2: push ebp +4cd1c3: push 0x4cdb78 ; 'C_TOTAL' +4cd1c8: mov eax, dword ptr [ebx + 0x10808] +4cd1ce: mov dword ptr [ebp - 0x34], eax +4cd1d1: mov eax, dword ptr [ebx + 0x1080c] +4cd1d7: mov dword ptr [ebp - 0x30], eax +4cd1da: mov eax, dword ptr [ebx + 0x20c58] +4cd1e0: mov dword ptr [ebp - 0x2c], eax +4cd1e3: mov eax, dword ptr [ebx + 0x20c5c] +4cd1e9: mov dword ptr [ebp - 0x28], eax +4cd1ec: mov eax, dword ptr [ebx + 0x310a8] +4cd1f2: mov dword ptr [ebp - 0x24], eax +4cd1f5: mov eax, dword ptr [ebx + 0x310ac] +4cd1fb: mov dword ptr [ebp - 0x20], eax +4cd1fe: mov eax, dword ptr [ebx + 0x414f8] +4cd204: mov dword ptr [ebp - 0x1c], eax +4cd207: mov eax, dword ptr [ebx + 0x414fc] +4cd20d: mov dword ptr [ebp - 0x18], eax +4cd210: lea eax, [ebp - 0x34] +4cd213: push eax +4cd214: push 3 +4cd216: push 2 +4cd218: push 0 +4cd21a: xor ecx, ecx +4cd21c: mov edx, 0x4cdb88 ; '총공사비' +4cd221: xor eax, eax +4cd223: call 0x4cb03c +4cd228: pop ecx +4cd229: xor eax, eax +4cd22b: pop edx +4cd22c: pop ecx +4cd22d: pop ecx +4cd22e: mov dword ptr fs:[eax], edx +4cd231: push 0x4cd261 +4cd236: mov eax, dword ptr [ebp - 4] +4cd239: mov eax, dword ptr [eax + 0x300] +4cd23f: mov edx, dword ptr [ebp - 4] +4cd242: mov dword ptr [eax + 0x4d4], edx +4cd248: mov dword ptr [eax + 0x4d0], 0x4cec80 +4cd252: mov dl, 1 +4cd254: call 0x407ba4 ; RealGrid6!@Urgrids@TwCustomGrid@EndUpdate$qqro +4cd259: ret +4cd25a: jmp 0x401190 ; rtl60!@System@@HandleFinally$qqrv +4cd25f: jmp 0x4cd236 +4cd261: xor eax, eax +4cd263: pop edx +4cd264: pop ecx +4cd265: pop ecx +4cd266: mov dword ptr fs:[eax], edx +4cd269: push 0x4cd286 +4cd26e: lea eax, [ebp - 0x8c] +4cd274: mov edx, 0x16 +4cd279: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi +4cd27e: ret +4cd27f: jmp 0x401190 ; rtl60!@System@@HandleFinally$qqrv +4cd284: jmp 0x4cd26e +4cd286: mov al, byte ptr [ebp - 0xd] +4cd289: pop edi +4cd28a: pop esi +4cd28b: pop ebx +4cd28c: mov esp, ebp +4cd28e: pop ebp +4cd28f: ret +4cd290: .byte 0xff +4cd291: .byte 0xff +4cd292: .byte 0xff +4cd293: inc dword ptr [edi] +4cd295: add byte ptr [eax], al +4cd297: .byte 0x00 diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cdb94_drawcell_rowchange_cellenter.asm.txt b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cdb94_drawcell_rowchange_cellenter.asm.txt new file mode 100644 index 000000000..c879f07fc --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cdb94_drawcell_rowchange_cellenter.asm.txt @@ -0,0 +1,268 @@ +4cdb94: push ebp +4cdb95: mov ebp, esp +4cdb97: add esp, -0x10 +4cdb9a: push ebx +4cdb9b: push esi +4cdb9c: xor ebx, ebx +4cdb9e: mov dword ptr [ebp - 8], ebx +4cdba1: mov dword ptr [ebp - 4], ecx +4cdba4: mov esi, edx +4cdba6: xor edx, edx +4cdba8: push ebp +4cdba9: push 0x4cdcb8 +4cdbae: push dword ptr fs:[edx] +4cdbb1: mov dword ptr fs:[edx], esp +4cdbb4: mov ebx, dword ptr [eax + 0x300] +4cdbba: mov eax, esi +4cdbbc: call 0x401c6c ; rtl60!@Classes@TCollectionItem@GetIndex$qqrv +4cdbc1: sub eax, 2 +4cdbc4: je 0x4cdbda +4cdbc6: sub eax, 3 +4cdbc9: je 0x4cdc06 +4cdbcb: sub eax, 2 +4cdbce: je 0x4cdc06 +4cdbd0: sub eax, 2 +4cdbd3: je 0x4cdc06 +4cdbd5: jmp 0x4cdca2 +4cdbda: mov ecx, dword ptr [ebp - 4] +4cdbdd: mov edx, 0xb +4cdbe2: mov eax, ebx +4cdbe4: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cdbe9: call 0x407bec ; RealGrid6!@Urmgrid@TwCells@GetWord$qqrv +4cdbee: cmp ax, 1 +4cdbf2: jne 0x4cdca2 +4cdbf8: mov eax, dword ptr [ebp + 0xc] +4cdbfb: mov dword ptr [eax], 0xff +4cdc01: jmp 0x4cdca2 +4cdc06: mov ecx, dword ptr [ebp - 4] +4cdc09: mov edx, 3 +4cdc0e: mov eax, ebx +4cdc10: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cdc15: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4cdc1a: fcomp dword ptr [0x4cdcc8] ; =0.0 +4cdc20: fnstsw ax +4cdc22: sahf +4cdc23: je 0x4cdca2 +4cdc25: mov eax, esi +4cdc27: call 0x401c6c ; rtl60!@Classes@TCollectionItem@GetIndex$qqrv +4cdc2c: mov edx, eax +4cdc2e: dec edx +4cdc2f: mov ecx, dword ptr [ebp - 4] +4cdc32: mov eax, ebx +4cdc34: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cdc39: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4cdc3e: fcomp dword ptr [0x4cdcc8] ; =0.0 +4cdc44: fnstsw ax +4cdc46: sahf +4cdc47: je 0x4cdca2 +4cdc49: mov eax, esi +4cdc4b: call 0x401c6c ; rtl60!@Classes@TCollectionItem@GetIndex$qqrv +4cdc50: mov edx, eax +4cdc52: dec edx +4cdc53: mov ecx, dword ptr [ebp - 4] +4cdc56: mov eax, ebx +4cdc58: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cdc5d: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4cdc62: fstp qword ptr [ebp - 0x10] +4cdc65: wait +4cdc66: mov ecx, dword ptr [ebp - 4] +4cdc69: mov edx, 3 +4cdc6e: mov eax, ebx +4cdc70: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cdc75: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4cdc7a: fdivr qword ptr [ebp - 0x10] +4cdc7d: fmul dword ptr [0x4cdccc] ; =100.0 +4cdc83: add esp, -0xc +4cdc86: fstp xword ptr [esp] +4cdc89: wait +4cdc8a: lea edx, [ebp - 8] +4cdc8d: mov eax, 0x4cdcd8 ; '0.00%;;#' +4cdc92: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4cdc97: mov edx, dword ptr [ebp - 8] +4cdc9a: mov eax, dword ptr [ebp + 0x14] +4cdc9d: call 0x4011f0 ; rtl60!@System@@LStrAsg$qqrpvpxv +4cdca2: xor eax, eax +4cdca4: pop edx +4cdca5: pop ecx +4cdca6: pop ecx +4cdca7: mov dword ptr fs:[eax], edx +4cdcaa: push 0x4cdcbf +4cdcaf: lea eax, [ebp - 8] +4cdcb2: call 0x4011e0 ; rtl60!@System@@LStrClr$qqrpv +4cdcb7: ret +4cdcb8: jmp 0x401190 ; rtl60!@System@@HandleFinally$qqrv +4cdcbd: jmp 0x4cdcaf +4cdcbf: pop esi +4cdcc0: pop ebx +4cdcc1: mov esp, ebp +4cdcc3: pop ebp +4cdcc4: ret 0x10 +4cdcc7: add byte ptr [eax], al +4cdcc9: add byte ptr [eax], al +4cdccb: add byte ptr [eax], al +4cdccd: add al, cl +4cdccf: inc edx +4cdcd0: .byte 0xff +4cdcd1: .byte 0xff +4cdcd2: .byte 0xff +4cdcd3: dec dword ptr [eax] +4cdcd5: add byte ptr [eax], al +4cdcd7: add byte ptr [eax], dh +4cdcd9: xor byte ptr cs:[eax], dh +4cdcdc: and eax, 0x233b3b +4cdce1: add byte ptr [eax], al +4cdce3: add byte ptr [esi - 0x75], dl +4cdce6: mov al, 0 +4cdce8: add eax, dword ptr [eax] +4cdcea: add byte ptr [ebx + 0x4448e], cl +4cdcf0: add byte ptr [edx + 0xd], bh +4cdcf6: mov eax, esi +4cdcf8: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cdcfd: call 0x407bfc ; RealGrid6!@Urmgrid@TwCells@GetLong$qqrv +4cdd02: cmp eax, 0xfb +4cdd07: je 0x4cdd36 +4cdd09: mov ecx, dword ptr [esi + 0x444] +4cdd0f: mov edx, 0xb +4cdd14: mov eax, esi +4cdd16: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cdd1b: call 0x407bec ; RealGrid6!@Urmgrid@TwCells@GetWord$qqrv +4cdd20: cmp ax, 2 +4cdd24: je 0x4cdd36 +4cdd26: mov eax, esi +4cdd28: call 0x407b84 ; RealGrid6!@Urgrids@TwCustomGrid@GetSelectedColumn$qqrv +4cdd2d: cmp byte ptr [eax + 0xcc], 0 +4cdd34: je 0x4cdd50 +4cdd36: mov edx, dword ptr [0x4cdd68] +4cdd3c: not edx +4cdd3e: and edx, dword ptr [esi + 0x328] +4cdd44: mov eax, esi +4cdd46: mov ecx, dword ptr [eax] +4cdd48: call dword ptr [ecx + 0x14c] +4cdd4e: pop esi +4cdd4f: ret +4cdd50: mov edx, dword ptr [0x4cdd68] +4cdd56: or edx, dword ptr [esi + 0x328] +4cdd5c: mov eax, esi +4cdd5e: mov ecx, dword ptr [eax] +4cdd60: call dword ptr [ecx + 0x14c] +4cdd66: pop esi +4cdd67: ret +4cdd68: add byte ptr [eax + eax], al +4cdd6b: add byte ptr [ebp - 0x75], dl +4cdd6e: in al, dx +4cdd6f: push ebx +4cdd70: push esi +4cdd71: mov esi, ecx +4cdd73: mov ebx, eax +4cdd75: mov ecx, esi +4cdd77: mov edx, 0xb +4cdd7c: mov eax, dword ptr [ebx + 0x300] +4cdd82: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cdd87: call 0x407bec ; RealGrid6!@Urmgrid@TwCells@GetWord$qqrv +4cdd8c: cmp ax, 2 +4cdd90: jne 0x4cdda4 +4cdd92: mov eax, dword ptr [ebp + 0xc] +4cdd95: mov dword ptr [eax], 0xffffff +4cdd9b: mov eax, dword ptr [ebp + 0x10] +4cdd9e: mov dword ptr [eax], 0x808000 +4cdda4: pop esi +4cdda5: pop ebx +4cdda6: pop ebp +4cdda7: ret 0xc +4cddaa: mov eax, eax +4cddac: push ebp +4cddad: mov ebp, esp +4cddaf: push 0 +4cddb1: push 0 +4cddb3: push esi +4cddb4: xor edx, edx +4cddb6: push ebp +4cddb7: push 0x4cde69 +4cddbc: push dword ptr fs:[edx] +4cddbf: mov dword ptr fs:[edx], esp +4cddc2: mov esi, dword ptr [eax + 0x300] +4cddc8: mov eax, esi +4cddca: call 0x407c5c ; RealGrid6!@Urmgrid@TRealGrid@Post$qqrv +4cddcf: push 0x4cde80 ; '가나다라마바사아자차카타파하거너더러머버서어저처커터퍼허' +4cddd4: lea eax, [ebp - 4] +4cddd7: push eax +4cddd8: mov ecx, dword ptr [esi + 0x444] +4cddde: xor edx, edx +4cdde0: mov eax, esi +4cdde2: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cdde7: lea edx, [ebp - 8] +4cddea: call 0x407bc4 ; RealGrid6!@Urmgrid@TwCells@GetString$qqrv +4cddef: mov eax, dword ptr [ebp - 8] +4cddf2: mov ecx, 2 +4cddf7: mov edx, 1 +4cddfc: call 0x401278 ; rtl60!@System@@LStrCopy$qqrv +4cde01: mov eax, dword ptr [ebp - 4] +4cde04: push eax +4cde05: call 0x409190 ; DP_COMMON!MPOS +4cde0a: test al, al +4cde0c: jne 0x4cde1e +4cde0e: mov eax, esi +4cde10: call 0x407b84 ; RealGrid6!@Urgrids@TwCustomGrid@GetSelectedColumn$qqrv +4cde15: cmp byte ptr [eax + 0xcc], 0 +4cde1c: je 0x4cde38 +4cde1e: mov edx, dword ptr [0x4cdebc] +4cde24: not edx +4cde26: and edx, dword ptr [esi + 0x328] +4cde2c: mov eax, esi +4cde2e: mov ecx, dword ptr [eax] +4cde30: call dword ptr [ecx + 0x14c] +4cde36: jmp 0x4cde4e +4cde38: mov edx, dword ptr [0x4cdebc] +4cde3e: or edx, dword ptr [esi + 0x328] +4cde44: mov eax, esi +4cde46: mov ecx, dword ptr [eax] +4cde48: call dword ptr [ecx + 0x14c] +4cde4e: xor eax, eax +4cde50: pop edx +4cde51: pop ecx +4cde52: pop ecx +4cde53: mov dword ptr fs:[eax], edx +4cde56: push 0x4cde70 +4cde5b: lea eax, [ebp - 8] +4cde5e: mov edx, 2 +4cde63: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi +4cde68: ret +4cde69: jmp 0x401190 ; rtl60!@System@@HandleFinally$qqrv +4cde6e: jmp 0x4cde5b +4cde70: pop esi +4cde71: pop ecx +4cde72: pop ecx +4cde73: pop ebp +4cde74: ret +4cde75: add byte ptr [eax], al +4cde77: add bh, bh +4cde79: .byte 0xff +4cde7a: .byte 0xff +4cde7b: .byte 0xff +4cde7c: cmp byte ptr [eax], al +4cde7e: add byte ptr [eax], al +4cde80: mov al, 0xa1 +4cde82: mov bl, 0xaa +4cde84: mov ah, 0xd9 +4cde86: mov dh, 0xf3 +4cde88: mov eax, 0xbbd9b9b6 +4cde8d: out 0xbe, eax +4cde8f: mov al, 0xda +4cde92: ret 0xc4f7 +4cde95: stosd dword ptr es:[edi], eax +4cde96: lds edi, ptr [eax - 0x30383b3a] +4cde9c: mov al, 0xc5 +4cde9e: mov bl, 0xca +4cdea0: mov ah, 0xf5 +4cdea2: mov bh, 0xaf +4cdea4: mov eax, 0xbcf6b9d3 +4cdea9: lodsd eax, dword ptr [esi] +4cdeaa: mov esi, 0xc3fac0ee +4cdeaf: mov bl, 0xc4 +4cdeb1: mov edi, 0xdbc6cdc5 +4cdeb6: .byte 0xc7 +4cdeb7: jecxz 0x4cdeb9 +4cdeb9: add byte ptr [eax], al +4cdebb: add byte ptr [eax], al +4cdebd: add al, 0 +4cdebf: .byte 0x00 diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cdec0_sBtn_Set_RateClick.asm.txt b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cdec0_sBtn_Set_RateClick.asm.txt new file mode 100644 index 000000000..29c573b18 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cdec0_sBtn_Set_RateClick.asm.txt @@ -0,0 +1,653 @@ +4cdec0: push ebp +4cdec1: mov ebp, esp +4cdec3: add esp, -0x2c +4cdec6: push ebx +4cdec7: push esi +4cdec8: push edi +4cdec9: mov edi, eax +4cdecb: push 0x4ce1f0 ; '굴림체' +4cded0: push 0x7f02 +4cded5: push 1 +4cded7: mov eax, 0x4ce200 ; '적 용 (&Y)' +4cdedc: mov dword ptr [ebp - 0x20], eax +4cdedf: mov eax, 0x4ce214 ; '취 소 (&N)' +4cdee4: mov dword ptr [ebp - 0x1c], eax +4cdee7: lea eax, [ebp - 0x20] +4cdeea: push eax +4cdeeb: push 1 +4cdeed: mov eax, dword ptr [0x5eb508] ; [vcl60!@Forms@Application] +4cdef2: mov eax, dword ptr [eax] +4cdef4: mov eax, dword ptr [eax + 0x30] +4cdef7: mov ecx, 0x4ce228 ; '계약제잡비율로 간접비 금액조정' +4cdefc: mov edx, 0x4ce250 ; '1.간접노무비 ~ 부가가치세이전(금회분) 까지의 금액을\r"가.직접공사비계(금회분) x 계약제잡비율 로 수정하시겠습니까 ?' +4cdf01: call 0x42b334 +4cdf06: cmp ax, 1 +4cdf0a: jne 0x4ce1e0 +4cdf10: mov eax, dword ptr [edi + 0x300] +4cdf16: mov dword ptr [ebp - 0x18], eax +4cdf19: xor eax, eax +4cdf1b: push ebp +4cdf1c: push 0x4ce1d9 +4cdf21: push dword ptr fs:[eax] +4cdf24: mov dword ptr fs:[eax], esp +4cdf27: mov eax, dword ptr [ebp - 0x18] +4cdf2a: call 0x407b9c ; RealGrid6!@Urgrids@TwCustomGrid@BeginUpdate$qqrv +4cdf2f: mov eax, dword ptr [0x5c7d84] +4cdf35: mov dword ptr [ebp - 8], eax +4cdf38: mov eax, dword ptr [0x5c7d88] +4cdf3e: mov dword ptr [ebp - 4], eax +4cdf41: mov eax, dword ptr [0x5a74e4] +4cdf47: mov dword ptr [ebp - 0x10], eax +4cdf4a: mov eax, dword ptr [0x5a74e8] +4cdf50: mov dword ptr [ebp - 0xc], eax +4cdf53: fld qword ptr [0x597094] +4cdf59: fcomp qword ptr [0x5a74e4] +4cdf5f: fnstsw ax +4cdf61: sahf +4cdf62: sete byte ptr [ebp - 0x11] +4cdf66: mov eax, dword ptr [ebp - 0x18] +4cdf69: mov edx, dword ptr [eax] +4cdf6b: call dword ptr [edx + 0x12c] +4cdf71: mov esi, eax +4cdf73: dec esi +4cdf74: test esi, esi +4cdf76: jle 0x4ce1b0 +4cdf7c: mov ebx, 1 +4cdf81: mov ecx, ebx +4cdf83: mov edx, 0xb +4cdf88: mov eax, dword ptr [ebp - 0x18] +4cdf8b: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cdf90: call 0x407bec ; RealGrid6!@Urmgrid@TwCells@GetWord$qqrv +4cdf95: dec ax +4cdf98: je 0x4cdfa8 +4cdf9a: dec ax +4cdf9d: je 0x4ce12c +4cdfa3: jmp 0x4ce162 +4cdfa8: cmp byte ptr [ebp - 0x11], 0 +4cdfac: je 0x4cdffa +4cdfae: mov ecx, ebx +4cdfb0: mov edx, 3 +4cdfb5: mov eax, dword ptr [ebp - 0x18] +4cdfb8: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cdfbd: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4cdfc2: fstp qword ptr [ebp - 0x20] +4cdfc5: wait +4cdfc6: mov ecx, ebx +4cdfc8: mov edx, 4 +4cdfcd: mov eax, dword ptr [ebp - 0x18] +4cdfd0: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cdfd5: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4cdfda: fsubr qword ptr [ebp - 0x20] +4cdfdd: add esp, -8 +4cdfe0: fstp qword ptr [esp] +4cdfe3: wait +4cdfe4: mov ecx, ebx +4cdfe6: mov edx, 6 +4cdfeb: mov eax, dword ptr [ebp - 0x18] +4cdfee: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cdff3: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4cdff8: jmp 0x4ce045 +4cdffa: push 0 +4cdffc: push 0 +4cdffe: mov ecx, ebx +4ce000: mov edx, 0xc +4ce005: mov eax, dword ptr [ebp - 0x18] +4ce008: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce00d: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce012: fmul qword ptr [0x5c7d84] +4ce018: fdiv dword ptr [0x4ce2c4] ; =100.0 +4ce01e: add esp, -0xc +4ce021: fstp xword ptr [esp] +4ce024: wait +4ce025: call 0x4091b0 ; DP_COMMON!MROUNDUD +4ce02a: add esp, -8 +4ce02d: fstp qword ptr [esp] +4ce030: wait +4ce031: mov ecx, ebx +4ce033: mov edx, 6 +4ce038: mov eax, dword ptr [ebp - 0x18] +4ce03b: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce040: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce045: mov ecx, ebx +4ce047: mov edx, 3 +4ce04c: mov eax, dword ptr [ebp - 0x18] +4ce04f: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce054: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce059: fstp qword ptr [ebp - 0x20] +4ce05c: wait +4ce05d: mov ecx, ebx +4ce05f: mov edx, 4 +4ce064: mov eax, dword ptr [ebp - 0x18] +4ce067: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce06c: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce071: fadd qword ptr [ebp - 0x20] +4ce074: fstp xword ptr [ebp - 0x2c] +4ce077: wait +4ce078: mov ecx, ebx +4ce07a: mov edx, 6 +4ce07f: mov eax, dword ptr [ebp - 0x18] +4ce082: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce087: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce08c: fld xword ptr [ebp - 0x2c] +4ce08f: fcompp +4ce091: fnstsw ax +4ce093: sahf +4ce094: ja 0x4ce0e0 +4ce096: mov ecx, ebx +4ce098: mov edx, 3 +4ce09d: mov eax, dword ptr [ebp - 0x18] +4ce0a0: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce0a5: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce0aa: fstp qword ptr [ebp - 0x20] +4ce0ad: wait +4ce0ae: mov ecx, ebx +4ce0b0: mov edx, 4 +4ce0b5: mov eax, dword ptr [ebp - 0x18] +4ce0b8: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce0bd: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce0c2: fsubr qword ptr [ebp - 0x20] +4ce0c5: add esp, -8 +4ce0c8: fstp qword ptr [esp] +4ce0cb: wait +4ce0cc: mov ecx, ebx +4ce0ce: mov edx, 6 +4ce0d3: mov eax, dword ptr [ebp - 0x18] +4ce0d6: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce0db: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce0e0: mov ecx, ebx +4ce0e2: mov edx, 4 +4ce0e7: mov eax, dword ptr [ebp - 0x18] +4ce0ea: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce0ef: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce0f4: fstp qword ptr [ebp - 0x20] +4ce0f7: wait +4ce0f8: mov ecx, ebx +4ce0fa: mov edx, 6 +4ce0ff: mov eax, dword ptr [ebp - 0x18] +4ce102: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce107: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce10c: fadd qword ptr [ebp - 0x20] +4ce10f: add esp, -8 +4ce112: fstp qword ptr [esp] +4ce115: wait +4ce116: mov ecx, ebx +4ce118: mov edx, 8 +4ce11d: mov eax, dword ptr [ebp - 0x18] +4ce120: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce125: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce12a: jmp 0x4ce162 +4ce12c: push dword ptr [ebp - 4] +4ce12f: push dword ptr [ebp - 8] +4ce132: mov ecx, ebx +4ce134: mov edx, 6 +4ce139: mov eax, dword ptr [ebp - 0x18] +4ce13c: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce141: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce146: push dword ptr [ebp - 0xc] +4ce149: push dword ptr [ebp - 0x10] +4ce14c: mov ecx, ebx +4ce14e: mov edx, 8 +4ce153: mov eax, dword ptr [ebp - 0x18] +4ce156: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce15b: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce160: jmp 0x4ce1a8 +4ce162: mov ecx, ebx +4ce164: mov edx, 6 +4ce169: mov eax, dword ptr [ebp - 0x18] +4ce16c: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce171: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce176: add esp, -8 +4ce179: fstp qword ptr [esp] +4ce17c: wait +4ce17d: lea eax, [ebp - 8] +4ce180: call 0x4caa38 +4ce185: mov ecx, ebx +4ce187: mov edx, 8 +4ce18c: mov eax, dword ptr [ebp - 0x18] +4ce18f: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce194: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce199: add esp, -8 +4ce19c: fstp qword ptr [esp] +4ce19f: wait +4ce1a0: lea eax, [ebp - 0x10] +4ce1a3: call 0x4caa38 +4ce1a8: inc ebx +4ce1a9: dec esi +4ce1aa: jne 0x4cdf81 ; '�' +4ce1b0: mov eax, dword ptr [ebp - 0x18] +4ce1b3: call 0x407c5c ; RealGrid6!@Urmgrid@TRealGrid@Post$qqrv +4ce1b8: xor edx, edx +4ce1ba: mov eax, edi +4ce1bc: call 0x4ce6c4 +4ce1c1: xor eax, eax +4ce1c3: pop edx +4ce1c4: pop ecx +4ce1c5: pop ecx +4ce1c6: mov dword ptr fs:[eax], edx +4ce1c9: push 0x4ce1e0 +4ce1ce: mov dl, 1 +4ce1d0: mov eax, dword ptr [ebp - 0x18] +4ce1d3: call 0x407ba4 ; RealGrid6!@Urgrids@TwCustomGrid@EndUpdate$qqro +4ce1d8: ret +4ce1d9: jmp 0x401190 ; rtl60!@System@@HandleFinally$qqrv +4ce1de: jmp 0x4ce1ce +4ce1e0: pop edi +4ce1e1: pop esi +4ce1e2: pop ebx +4ce1e3: mov esp, ebp +4ce1e5: pop ebp +4ce1e6: ret +4ce1e7: add bh, bh +4ce1e9: .byte 0xff +4ce1ea: .byte 0xff +4ce1eb: inc dword ptr [esi] +4ce1ed: add byte ptr [eax], al +4ce1ef: add byte ptr [ecx - 0x3c4d4744], dh +4ce1f5: mov esp, 0xffff0000 +4ce1fa: .byte 0xff +4ce1fb: dec dword ptr [edx] +4ce1fd: add byte ptr [eax], al +4ce1ff: add al, al +4ce201: sti +4ce202: and byte ptr [edi + 0x262820eb], bh +4ce208: pop ecx +4ce209: sub dword ptr [eax], eax +4ce20b: add bh, bh +4ce20d: .byte 0xff +4ce20e: .byte 0xff +4ce20f: dec dword ptr [edx] +4ce211: add byte ptr [eax], al +4ce213: add bl, al +4ce215: jmp 0x4ce237 +4ce217: mov esp, 0x262820d2 +4ce21c: dec esi +4ce21d: sub dword ptr [eax], eax +4ce21f: add bh, bh +4ce221: .byte 0xff +4ce222: .byte 0xff +4ce223: call ptr [esi] +4ce225: add byte ptr [eax], al +4ce227: add byte ptr [eax - 0x3e1f4118], dh +4ce22d: cmpsb byte ptr [esi], byte ptr es:[edi] +4ce22e: shl dl, 0xba +4ce231: int1 +4ce232: sal byte ptr [edx - 0x4fdf3149], 0xa3 +4ce239: shl dword ptr [edx - 0x4edf0e46], 0xdd +4ce240: mov esi, 0xc1b6c1d7 +4ce245: movsb byte ptr es:[edi], byte ptr [esi] +4ce246: add byte ptr [eax], al +4ce248: .byte 0xff +4ce249: .byte 0xff +4ce24a: .byte 0xff +4ce24b: push dword ptr [ecx] +4ce24e: add byte ptr [eax], al +4ce250: xor dword ptr [esi], ebp +4ce252: mov al, 0xa3 +4ce254: shl dword ptr [edx - 0x5446144d], 0xba +4ce25b: int1 +4ce25c: and byte ptr [esi + 0x20], bh +4ce25f: mov edx, 0xb0a1b0ce +4ce264: mov eax, dword ptr [0xbcbca1c4] +4ce269: ror ah, 0xc0 +4ce26c: cld +4ce26d: sub byte ptr [ecx - 0x45473723], dh +4ce273: shr byte ptr [ecx], 1 +4ce275: and byte ptr [ecx - 0x3f093e12], dh +4ce27b: .byte 0xc7 +4ce27c: and byte ptr [ecx - 0x3f284123], dh +4ce282: mov ebx, 0xa1b0220d +4ce287: sal edi, 0xc1 +4ce28b: mov byte ptr [0xe7bbf8b0], al +4ce290: mov edx, 0x28e8b0f1 +4ce295: mov cl, 0xdd +4ce297: enter -0x4548, -0x30 +4ce29b: sub dword ptr [eax], esp +4ce29d: js 0x4ce2bf +4ce29f: mov al, 0xe8 +4ce2a1: mov esi, 0xc0a6c1e0 +4ce2a6: loop 0x4ce262 +4ce2a8: int1 +4ce2a9: sal byte ptr [edx + 0x20ceb720], 0xbc +4ce2b0: test cl, 0xa4 +4ce2b3: .byte 0xc7 +4ce2b4: iretd +4ce2b5: mov ebp, 0xbddab0c3 +4ce2ba: sal byte ptr [edi + ecx*8 + 0x3f20eeb1], 0 +4ce2c2: add byte ptr [eax], al +4ce2c4: add byte ptr [eax], al +4ce2c6: enter 0x5542, -0x75 +4ce2ca: in al, dx +4ce2cb: add esp, -8 +4ce2ce: push ebx +4ce2cf: push esi +4ce2d0: mov esi, eax +4ce2d2: mov eax, dword ptr [ebp + 8] +4ce2d5: mov eax, dword ptr [eax - 0x14] +4ce2d8: mov ebx, dword ptr [eax + 0x300] +4ce2de: mov ecx, esi +4ce2e0: mov edx, 0xb +4ce2e5: mov eax, ebx +4ce2e7: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce2ec: call 0x407bec ; RealGrid6!@Urmgrid@TwCells@GetWord$qqrv +4ce2f1: cmp ax, 2 +4ce2f5: jne 0x4ce334 +4ce2f7: mov eax, dword ptr [ebp + 8] +4ce2fa: push dword ptr [eax - 4] +4ce2fd: push dword ptr [eax - 8] +4ce300: mov ecx, esi +4ce302: mov edx, 6 +4ce307: mov eax, ebx +4ce309: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce30e: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce313: mov eax, dword ptr [ebp + 8] +4ce316: push dword ptr [eax - 0xc] +4ce319: push dword ptr [eax - 0x10] +4ce31c: mov ecx, esi +4ce31e: mov edx, 8 +4ce323: mov eax, ebx +4ce325: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce32a: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce32f: jmp 0x4ce535 +4ce334: cmp esi, dword ptr [0x5e92f8] +4ce33a: jne 0x4ce38b +4ce33c: push 0 +4ce33e: push 0 +4ce340: mov eax, dword ptr [0x4d2694] +4ce345: mov eax, dword ptr [eax] +4ce347: mov eax, dword ptr [eax + 0x20] +4ce34a: mov edx, 0x4ce544 ; 'LCOST2' +4ce34f: call 0x402da4 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4ce354: fmul qword ptr [0x5e887c] +4ce35a: fdiv dword ptr [0x4ce54c] ; =100.0 +4ce360: add esp, -0xc +4ce363: fstp xword ptr [esp] +4ce366: wait +4ce367: call 0x4091b0 ; DP_COMMON!MROUNDUD +4ce36c: add esp, -8 +4ce36f: fstp qword ptr [esp] +4ce372: wait +4ce373: mov ecx, esi +4ce375: mov edx, 6 +4ce37a: mov eax, ebx +4ce37c: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce381: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce386: jmp 0x4ce4a4 +4ce38b: cmp esi, dword ptr [0x5e92e8] +4ce391: jne 0x4ce3cb +4ce393: mov ecx, esi +4ce395: mov edx, 6 +4ce39a: mov eax, ebx +4ce39c: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce3a1: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce3a6: mov eax, dword ptr [ebp + 8] +4ce3a9: fsub qword ptr [eax - 0x20] +4ce3ac: add esp, -8 +4ce3af: fstp qword ptr [esp] +4ce3b2: wait +4ce3b3: mov ecx, esi +4ce3b5: mov edx, 6 +4ce3ba: mov eax, ebx +4ce3bc: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce3c1: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce3c6: jmp 0x4ce4a4 +4ce3cb: cmp esi, dword ptr [0x5e92f0] +4ce3d1: jne 0x4ce4a4 +4ce3d7: mov eax, dword ptr [ebp + 8] +4ce3da: mov eax, dword ptr [eax - 0x14] +4ce3dd: mov eax, dword ptr [eax + 0x320] +4ce3e3: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce3e8: dec eax +4ce3e9: je 0x4ce3f6 +4ce3eb: dec eax +4ce3ec: je 0x4ce42e +4ce3ee: dec eax +4ce3ef: je 0x4ce466 +4ce3f1: jmp 0x4ce4a4 +4ce3f6: push 0 +4ce3f8: push 0 +4ce3fa: fld xword ptr [0x4ce550] +4ce400: mov eax, dword ptr [ebp + 8] +4ce403: fmul qword ptr [eax - 8] +4ce406: add esp, -0xc +4ce409: fstp xword ptr [esp] +4ce40c: wait +4ce40d: call 0x4091b0 ; DP_COMMON!MROUNDUD +4ce412: add esp, -8 +4ce415: fstp qword ptr [esp] +4ce418: wait +4ce419: mov ecx, esi +4ce41b: mov edx, 6 +4ce420: mov eax, ebx +4ce422: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce427: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce42c: jmp 0x4ce4a4 +4ce42e: push 0 +4ce430: push 0 +4ce432: fld xword ptr [0x4ce550] +4ce438: fmul qword ptr [0x5c7d94] +4ce43e: add esp, -0xc +4ce441: fstp xword ptr [esp] +4ce444: wait +4ce445: call 0x4091b0 ; DP_COMMON!MROUNDUD +4ce44a: add esp, -8 +4ce44d: fstp qword ptr [esp] +4ce450: wait +4ce451: mov ecx, esi +4ce453: mov edx, 6 +4ce458: mov eax, ebx +4ce45a: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce45f: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce464: jmp 0x4ce4a4 +4ce466: push 0 +4ce468: push 0 +4ce46a: fld qword ptr [0x5c7d94] +4ce470: fadd qword ptr [0x5c7d9c] +4ce476: fld xword ptr [0x4ce550] +4ce47c: fmulp st(1) +4ce47e: add esp, -0xc +4ce481: fstp xword ptr [esp] +4ce484: wait +4ce485: call 0x4091b0 ; DP_COMMON!MROUNDUD +4ce48a: add esp, -8 +4ce48d: fstp qword ptr [esp] +4ce490: wait +4ce491: mov ecx, esi +4ce493: mov edx, 6 +4ce498: mov eax, ebx +4ce49a: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce49f: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce4a4: mov ecx, esi +4ce4a6: mov edx, 4 +4ce4ab: mov eax, ebx +4ce4ad: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce4b2: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce4b7: fstp qword ptr [ebp - 8] +4ce4ba: wait +4ce4bb: mov ecx, esi +4ce4bd: mov edx, 6 +4ce4c2: mov eax, ebx +4ce4c4: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce4c9: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce4ce: fadd qword ptr [ebp - 8] +4ce4d1: add esp, -8 +4ce4d4: fstp qword ptr [esp] +4ce4d7: wait +4ce4d8: mov ecx, esi +4ce4da: mov edx, 8 +4ce4df: mov eax, ebx +4ce4e1: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce4e6: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce4eb: mov ecx, esi +4ce4ed: mov edx, 6 +4ce4f2: mov eax, ebx +4ce4f4: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce4f9: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce4fe: add esp, -8 +4ce501: fstp qword ptr [esp] +4ce504: wait +4ce505: mov eax, dword ptr [ebp + 8] +4ce508: add eax, -8 +4ce50b: call 0x4caa38 +4ce510: mov ecx, esi +4ce512: mov edx, 8 +4ce517: mov eax, ebx +4ce519: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce51e: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce523: add esp, -8 +4ce526: fstp qword ptr [esp] +4ce529: wait +4ce52a: mov eax, dword ptr [ebp + 8] +4ce52d: add eax, -0x10 +4ce530: call 0x4caa38 +4ce535: pop esi +4ce536: pop ebx +4ce537: pop ecx +4ce538: pop ecx +4ce539: pop ebp +4ce53a: ret +4ce53b: add bh, bh +4ce53d: .byte 0xff +4ce53e: .byte 0xff +4ce53f: inc dword ptr [esi] +4ce541: add byte ptr [eax], al +4ce543: add byte ptr [ebx + eax*2 + 0x4f], cl +4ce547: push ebx +4ce548: push esp +4ce549: xor al, byte ptr [eax] +4ce54b: add byte ptr [eax], al +4ce54d: add al, cl +4ce54f: inc edx +4ce550: int 0xcc +4ce552: int3 +4ce553: int3 +4ce554: int3 +4ce555: int3 +4ce556: int3 +4ce557: int3 +4ce558: sti +4ce559: aas +4ce55a: add byte ptr [eax], al +4ce55c: push ebp +4ce55d: mov ebp, esp +4ce55f: push ebx +4ce560: push esi +4ce561: mov eax, dword ptr [ebp + 8] +4ce564: mov eax, dword ptr [eax - 0x14] +4ce567: mov eax, dword ptr [eax + 0x328] +4ce56d: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce572: test eax, eax +4ce574: je 0x4ce5ad +4ce576: push 0 +4ce578: mov eax, dword ptr [ebp + 8] +4ce57b: mov eax, dword ptr [eax - 0x14] +4ce57e: mov eax, dword ptr [eax + 0x328] +4ce584: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce589: neg eax +4ce58b: push eax +4ce58c: fld qword ptr [0x5e930c] +4ce592: add esp, -0xc +4ce595: fstp xword ptr [esp] +4ce598: wait +4ce599: call 0x4091b0 ; DP_COMMON!MROUNDUD +4ce59e: fsubr qword ptr [0x5e930c] +4ce5a4: mov eax, dword ptr [ebp + 8] +4ce5a7: fstp qword ptr [eax - 0x20] +4ce5aa: wait +4ce5ab: jmp 0x4ce5f7 +4ce5ad: mov eax, dword ptr [ebp + 8] +4ce5b0: mov eax, dword ptr [eax - 0x14] +4ce5b3: mov eax, dword ptr [eax + 0x330] +4ce5b9: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce5be: test eax, eax +4ce5c0: je 0x4ce5f7 +4ce5c2: push 0 +4ce5c4: mov eax, dword ptr [ebp + 8] +4ce5c7: mov eax, dword ptr [eax - 0x14] +4ce5ca: mov eax, dword ptr [eax + 0x330] +4ce5d0: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce5d5: neg eax +4ce5d7: push eax +4ce5d8: fld qword ptr [0x5e931c] +4ce5de: add esp, -0xc +4ce5e1: fstp xword ptr [esp] +4ce5e4: wait +4ce5e5: call 0x4091b0 ; DP_COMMON!MROUNDUD +4ce5ea: fsubr qword ptr [0x5e931c] +4ce5f0: mov eax, dword ptr [ebp + 8] +4ce5f3: fstp qword ptr [eax - 0x20] +4ce5f6: wait +4ce5f7: mov eax, dword ptr [ebp + 8] +4ce5fa: mov eax, dword ptr [eax - 0x14] +4ce5fd: mov eax, dword ptr [eax + 0x330] +4ce603: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce608: test eax, eax +4ce60a: je 0x4ce643 +4ce60c: mov eax, dword ptr [ebp + 8] +4ce60f: mov eax, dword ptr [eax - 0x14] +4ce612: mov eax, dword ptr [eax + 0x320] +4ce618: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce61d: dec eax +4ce61e: jne 0x4ce643 +4ce620: push 0 +4ce622: push 0 +4ce624: fld xword ptr [0x4ce6b8] +4ce62a: mov eax, dword ptr [ebp + 8] +4ce62d: fdivr qword ptr [eax - 0x20] +4ce630: add esp, -0xc +4ce633: fstp xword ptr [esp] +4ce636: wait +4ce637: call 0x4091b0 ; DP_COMMON!MROUNDUD +4ce63c: mov eax, dword ptr [ebp + 8] +4ce63f: fstp qword ptr [eax - 0x20] +4ce642: wait +4ce643: mov eax, dword ptr [ebp + 8] +4ce646: mov eax, dword ptr [eax - 0x14] +4ce649: mov ebx, dword ptr [eax + 0x300] +4ce64f: mov ecx, dword ptr [0x5e92e4] +4ce655: mov edx, 6 +4ce65a: mov eax, ebx +4ce65c: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce661: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce666: mov eax, dword ptr [ebp + 8] +4ce669: fstp qword ptr [eax - 8] +4ce66c: wait +4ce66d: mov ecx, dword ptr [0x5e92e4] +4ce673: mov edx, 8 +4ce678: mov eax, ebx +4ce67a: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce67f: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce684: mov eax, dword ptr [ebp + 8] +4ce687: fstp qword ptr [eax - 0x10] +4ce68a: wait +4ce68b: mov esi, dword ptr [0x5e92e4] +4ce691: inc esi +4ce692: mov eax, ebx +4ce694: mov edx, dword ptr [eax] +4ce696: call dword ptr [edx + 0x12c] +4ce69c: dec eax +4ce69d: sub eax, esi +4ce69f: jl 0x4ce6b4 +4ce6a1: inc eax +4ce6a2: mov ebx, eax +4ce6a4: mov eax, dword ptr [ebp + 8] +4ce6a7: push eax +4ce6a8: mov eax, esi +4ce6aa: call 0x4ce2c8 +4ce6af: pop ecx +4ce6b0: inc esi +4ce6b1: dec ebx +4ce6b2: jne 0x4ce6a4 +4ce6b4: pop esi +4ce6b5: pop ebx +4ce6b6: pop ebp +4ce6b7: ret +4ce6b8: int 0xcc +4ce6ba: int3 +4ce6bb: int3 +4ce6bc: int3 +4ce6bd: int3 +4ce6be: int3 +4ce6bf: .byte 0x8c +4ce6c0: .byte 0xff +4ce6c1: aas +4ce6c2: add byte ptr [eax], al diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4ce2c8_row_recalc_0x4ce55c_cut.asm.txt b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4ce2c8_row_recalc_0x4ce55c_cut.asm.txt new file mode 100644 index 000000000..8c823dbdd --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4ce2c8_row_recalc_0x4ce55c_cut.asm.txt @@ -0,0 +1,336 @@ +4ce2c8: push ebp +4ce2c9: mov ebp, esp +4ce2cb: add esp, -8 +4ce2ce: push ebx +4ce2cf: push esi +4ce2d0: mov esi, eax +4ce2d2: mov eax, dword ptr [ebp + 8] +4ce2d5: mov eax, dword ptr [eax - 0x14] +4ce2d8: mov ebx, dword ptr [eax + 0x300] +4ce2de: mov ecx, esi +4ce2e0: mov edx, 0xb +4ce2e5: mov eax, ebx +4ce2e7: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce2ec: call 0x407bec ; RealGrid6!@Urmgrid@TwCells@GetWord$qqrv +4ce2f1: cmp ax, 2 +4ce2f5: jne 0x4ce334 +4ce2f7: mov eax, dword ptr [ebp + 8] +4ce2fa: push dword ptr [eax - 4] +4ce2fd: push dword ptr [eax - 8] +4ce300: mov ecx, esi +4ce302: mov edx, 6 +4ce307: mov eax, ebx +4ce309: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce30e: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce313: mov eax, dword ptr [ebp + 8] +4ce316: push dword ptr [eax - 0xc] +4ce319: push dword ptr [eax - 0x10] +4ce31c: mov ecx, esi +4ce31e: mov edx, 8 +4ce323: mov eax, ebx +4ce325: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce32a: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce32f: jmp 0x4ce535 +4ce334: cmp esi, dword ptr [0x5e92f8] +4ce33a: jne 0x4ce38b +4ce33c: push 0 +4ce33e: push 0 +4ce340: mov eax, dword ptr [0x4d2694] +4ce345: mov eax, dword ptr [eax] +4ce347: mov eax, dword ptr [eax + 0x20] +4ce34a: mov edx, 0x4ce544 ; 'LCOST2' +4ce34f: call 0x402da4 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +4ce354: fmul qword ptr [0x5e887c] +4ce35a: fdiv dword ptr [0x4ce54c] ; =100.0 +4ce360: add esp, -0xc +4ce363: fstp xword ptr [esp] +4ce366: wait +4ce367: call 0x4091b0 ; DP_COMMON!MROUNDUD +4ce36c: add esp, -8 +4ce36f: fstp qword ptr [esp] +4ce372: wait +4ce373: mov ecx, esi +4ce375: mov edx, 6 +4ce37a: mov eax, ebx +4ce37c: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce381: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce386: jmp 0x4ce4a4 +4ce38b: cmp esi, dword ptr [0x5e92e8] +4ce391: jne 0x4ce3cb +4ce393: mov ecx, esi +4ce395: mov edx, 6 +4ce39a: mov eax, ebx +4ce39c: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce3a1: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce3a6: mov eax, dword ptr [ebp + 8] +4ce3a9: fsub qword ptr [eax - 0x20] +4ce3ac: add esp, -8 +4ce3af: fstp qword ptr [esp] +4ce3b2: wait +4ce3b3: mov ecx, esi +4ce3b5: mov edx, 6 +4ce3ba: mov eax, ebx +4ce3bc: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce3c1: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce3c6: jmp 0x4ce4a4 +4ce3cb: cmp esi, dword ptr [0x5e92f0] +4ce3d1: jne 0x4ce4a4 +4ce3d7: mov eax, dword ptr [ebp + 8] +4ce3da: mov eax, dword ptr [eax - 0x14] +4ce3dd: mov eax, dword ptr [eax + 0x320] +4ce3e3: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce3e8: dec eax +4ce3e9: je 0x4ce3f6 +4ce3eb: dec eax +4ce3ec: je 0x4ce42e +4ce3ee: dec eax +4ce3ef: je 0x4ce466 +4ce3f1: jmp 0x4ce4a4 +4ce3f6: push 0 +4ce3f8: push 0 +4ce3fa: fld xword ptr [0x4ce550] +4ce400: mov eax, dword ptr [ebp + 8] +4ce403: fmul qword ptr [eax - 8] +4ce406: add esp, -0xc +4ce409: fstp xword ptr [esp] +4ce40c: wait +4ce40d: call 0x4091b0 ; DP_COMMON!MROUNDUD +4ce412: add esp, -8 +4ce415: fstp qword ptr [esp] +4ce418: wait +4ce419: mov ecx, esi +4ce41b: mov edx, 6 +4ce420: mov eax, ebx +4ce422: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce427: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce42c: jmp 0x4ce4a4 +4ce42e: push 0 +4ce430: push 0 +4ce432: fld xword ptr [0x4ce550] +4ce438: fmul qword ptr [0x5c7d94] +4ce43e: add esp, -0xc +4ce441: fstp xword ptr [esp] +4ce444: wait +4ce445: call 0x4091b0 ; DP_COMMON!MROUNDUD +4ce44a: add esp, -8 +4ce44d: fstp qword ptr [esp] +4ce450: wait +4ce451: mov ecx, esi +4ce453: mov edx, 6 +4ce458: mov eax, ebx +4ce45a: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce45f: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce464: jmp 0x4ce4a4 +4ce466: push 0 +4ce468: push 0 +4ce46a: fld qword ptr [0x5c7d94] +4ce470: fadd qword ptr [0x5c7d9c] +4ce476: fld xword ptr [0x4ce550] +4ce47c: fmulp st(1) +4ce47e: add esp, -0xc +4ce481: fstp xword ptr [esp] +4ce484: wait +4ce485: call 0x4091b0 ; DP_COMMON!MROUNDUD +4ce48a: add esp, -8 +4ce48d: fstp qword ptr [esp] +4ce490: wait +4ce491: mov ecx, esi +4ce493: mov edx, 6 +4ce498: mov eax, ebx +4ce49a: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce49f: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce4a4: mov ecx, esi +4ce4a6: mov edx, 4 +4ce4ab: mov eax, ebx +4ce4ad: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce4b2: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce4b7: fstp qword ptr [ebp - 8] +4ce4ba: wait +4ce4bb: mov ecx, esi +4ce4bd: mov edx, 6 +4ce4c2: mov eax, ebx +4ce4c4: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce4c9: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce4ce: fadd qword ptr [ebp - 8] +4ce4d1: add esp, -8 +4ce4d4: fstp qword ptr [esp] +4ce4d7: wait +4ce4d8: mov ecx, esi +4ce4da: mov edx, 8 +4ce4df: mov eax, ebx +4ce4e1: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce4e6: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4ce4eb: mov ecx, esi +4ce4ed: mov edx, 6 +4ce4f2: mov eax, ebx +4ce4f4: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce4f9: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce4fe: add esp, -8 +4ce501: fstp qword ptr [esp] +4ce504: wait +4ce505: mov eax, dword ptr [ebp + 8] +4ce508: add eax, -8 +4ce50b: call 0x4caa38 +4ce510: mov ecx, esi +4ce512: mov edx, 8 +4ce517: mov eax, ebx +4ce519: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce51e: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce523: add esp, -8 +4ce526: fstp qword ptr [esp] +4ce529: wait +4ce52a: mov eax, dword ptr [ebp + 8] +4ce52d: add eax, -0x10 +4ce530: call 0x4caa38 +4ce535: pop esi +4ce536: pop ebx +4ce537: pop ecx +4ce538: pop ecx +4ce539: pop ebp +4ce53a: ret +4ce53b: add bh, bh +4ce53d: .byte 0xff +4ce53e: .byte 0xff +4ce53f: inc dword ptr [esi] +4ce541: add byte ptr [eax], al +4ce543: add byte ptr [ebx + eax*2 + 0x4f], cl +4ce547: push ebx +4ce548: push esp +4ce549: xor al, byte ptr [eax] +4ce54b: add byte ptr [eax], al +4ce54d: add al, cl +4ce54f: inc edx +4ce550: int 0xcc +4ce552: int3 +4ce553: int3 +4ce554: int3 +4ce555: int3 +4ce556: int3 +4ce557: int3 +4ce558: sti +4ce559: aas +4ce55a: add byte ptr [eax], al +4ce55c: push ebp +4ce55d: mov ebp, esp +4ce55f: push ebx +4ce560: push esi +4ce561: mov eax, dword ptr [ebp + 8] +4ce564: mov eax, dword ptr [eax - 0x14] +4ce567: mov eax, dword ptr [eax + 0x328] +4ce56d: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce572: test eax, eax +4ce574: je 0x4ce5ad +4ce576: push 0 +4ce578: mov eax, dword ptr [ebp + 8] +4ce57b: mov eax, dword ptr [eax - 0x14] +4ce57e: mov eax, dword ptr [eax + 0x328] +4ce584: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce589: neg eax +4ce58b: push eax +4ce58c: fld qword ptr [0x5e930c] +4ce592: add esp, -0xc +4ce595: fstp xword ptr [esp] +4ce598: wait +4ce599: call 0x4091b0 ; DP_COMMON!MROUNDUD +4ce59e: fsubr qword ptr [0x5e930c] +4ce5a4: mov eax, dword ptr [ebp + 8] +4ce5a7: fstp qword ptr [eax - 0x20] +4ce5aa: wait +4ce5ab: jmp 0x4ce5f7 +4ce5ad: mov eax, dword ptr [ebp + 8] +4ce5b0: mov eax, dword ptr [eax - 0x14] +4ce5b3: mov eax, dword ptr [eax + 0x330] +4ce5b9: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce5be: test eax, eax +4ce5c0: je 0x4ce5f7 +4ce5c2: push 0 +4ce5c4: mov eax, dword ptr [ebp + 8] +4ce5c7: mov eax, dword ptr [eax - 0x14] +4ce5ca: mov eax, dword ptr [eax + 0x330] +4ce5d0: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce5d5: neg eax +4ce5d7: push eax +4ce5d8: fld qword ptr [0x5e931c] +4ce5de: add esp, -0xc +4ce5e1: fstp xword ptr [esp] +4ce5e4: wait +4ce5e5: call 0x4091b0 ; DP_COMMON!MROUNDUD +4ce5ea: fsubr qword ptr [0x5e931c] +4ce5f0: mov eax, dword ptr [ebp + 8] +4ce5f3: fstp qword ptr [eax - 0x20] +4ce5f6: wait +4ce5f7: mov eax, dword ptr [ebp + 8] +4ce5fa: mov eax, dword ptr [eax - 0x14] +4ce5fd: mov eax, dword ptr [eax + 0x330] +4ce603: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce608: test eax, eax +4ce60a: je 0x4ce643 +4ce60c: mov eax, dword ptr [ebp + 8] +4ce60f: mov eax, dword ptr [eax - 0x14] +4ce612: mov eax, dword ptr [eax + 0x320] +4ce618: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce61d: dec eax +4ce61e: jne 0x4ce643 +4ce620: push 0 +4ce622: push 0 +4ce624: fld xword ptr [0x4ce6b8] +4ce62a: mov eax, dword ptr [ebp + 8] +4ce62d: fdivr qword ptr [eax - 0x20] +4ce630: add esp, -0xc +4ce633: fstp xword ptr [esp] +4ce636: wait +4ce637: call 0x4091b0 ; DP_COMMON!MROUNDUD +4ce63c: mov eax, dword ptr [ebp + 8] +4ce63f: fstp qword ptr [eax - 0x20] +4ce642: wait +4ce643: mov eax, dword ptr [ebp + 8] +4ce646: mov eax, dword ptr [eax - 0x14] +4ce649: mov ebx, dword ptr [eax + 0x300] +4ce64f: mov ecx, dword ptr [0x5e92e4] +4ce655: mov edx, 6 +4ce65a: mov eax, ebx +4ce65c: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce661: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce666: mov eax, dword ptr [ebp + 8] +4ce669: fstp qword ptr [eax - 8] +4ce66c: wait +4ce66d: mov ecx, dword ptr [0x5e92e4] +4ce673: mov edx, 8 +4ce678: mov eax, ebx +4ce67a: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce67f: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce684: mov eax, dword ptr [ebp + 8] +4ce687: fstp qword ptr [eax - 0x10] +4ce68a: wait +4ce68b: mov esi, dword ptr [0x5e92e4] +4ce691: inc esi +4ce692: mov eax, ebx +4ce694: mov edx, dword ptr [eax] +4ce696: call dword ptr [edx + 0x12c] +4ce69c: dec eax +4ce69d: sub eax, esi +4ce69f: jl 0x4ce6b4 +4ce6a1: inc eax +4ce6a2: mov ebx, eax +4ce6a4: mov eax, dword ptr [ebp + 8] +4ce6a7: push eax +4ce6a8: mov eax, esi +4ce6aa: call 0x4ce2c8 +4ce6af: pop ecx +4ce6b0: inc esi +4ce6b1: dec ebx +4ce6b2: jne 0x4ce6a4 +4ce6b4: pop esi +4ce6b5: pop ebx +4ce6b6: pop ebp +4ce6b7: ret +4ce6b8: int 0xcc +4ce6ba: int3 +4ce6bb: int3 +4ce6bc: int3 +4ce6bd: int3 +4ce6be: int3 +4ce6bf: .byte 0x8c +4ce6c0: .byte 0xff +4ce6c1: aas +4ce6c2: add byte ptr [eax], al diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4ce6c4_sBtn_Calc_JabClick.asm.txt b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4ce6c4_sBtn_Calc_JabClick.asm.txt new file mode 100644 index 000000000..c53de3a2d --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4ce6c4_sBtn_Calc_JabClick.asm.txt @@ -0,0 +1,431 @@ +4ce6c4: push ebp +4ce6c5: mov ebp, esp +4ce6c7: add esp, -0x5c +4ce6ca: push ebx +4ce6cb: push esi +4ce6cc: xor ecx, ecx +4ce6ce: mov dword ptr [ebp - 0x5c], ecx +4ce6d1: mov dword ptr [ebp - 0x58], ecx +4ce6d4: mov dword ptr [ebp - 0x54], ecx +4ce6d7: mov dword ptr [ebp - 0x50], ecx +4ce6da: mov dword ptr [ebp - 0x4c], ecx +4ce6dd: mov dword ptr [ebp - 0x48], ecx +4ce6e0: mov dword ptr [ebp - 0x44], ecx +4ce6e3: mov dword ptr [ebp - 0x40], ecx +4ce6e6: mov dword ptr [ebp - 0x3c], ecx +4ce6e9: mov dword ptr [ebp - 0x38], ecx +4ce6ec: mov dword ptr [ebp - 0x14], eax +4ce6ef: xor eax, eax +4ce6f1: push ebp +4ce6f2: push 0x4cec4b +4ce6f7: push dword ptr fs:[eax] +4ce6fa: mov dword ptr fs:[eax], esp +4ce6fd: mov eax, dword ptr [ebp - 0x14] +4ce700: mov eax, dword ptr [eax + 0x300] +4ce706: mov dword ptr [ebp - 0x28], eax +4ce709: xor edx, edx +4ce70b: push ebp +4ce70c: push 0x4cec29 +4ce711: push dword ptr fs:[edx] +4ce714: mov dword ptr fs:[edx], esp +4ce717: mov eax, dword ptr [ebp - 0x28] +4ce71a: call 0x407b9c ; RealGrid6!@Urgrids@TwCustomGrid@BeginUpdate$qqrv +4ce71f: mov eax, dword ptr [ebp - 0x14] +4ce722: mov ebx, dword ptr [eax + 0x300] +4ce728: xor eax, eax +4ce72a: mov dword ptr [ebx + 0x4d0], eax +4ce730: mov dword ptr [ebx + 0x4d4], eax +4ce736: mov eax, ebx +4ce738: call 0x407b74 ; RealGrid6!@Urgrids@TwCustomGrid@Editing$qqrv +4ce73d: test al, al +4ce73f: je 0x4ce749 +4ce741: mov eax, dword ptr [ebp - 0x28] +4ce744: call 0x407c5c ; RealGrid6!@Urmgrid@TRealGrid@Post$qqrv +4ce749: mov eax, dword ptr [0x5c7d84] +4ce74f: mov dword ptr [ebp - 8], eax +4ce752: mov eax, dword ptr [0x5c7d88] +4ce758: mov dword ptr [ebp - 4], eax +4ce75b: mov eax, dword ptr [0x5a74e4] +4ce761: mov dword ptr [ebp - 0x10], eax +4ce764: mov eax, dword ptr [0x5a74e8] +4ce76a: mov dword ptr [ebp - 0xc], eax +4ce76d: mov eax, 0x5e92fc +4ce772: xor ecx, ecx +4ce774: mov edx, 0x30 +4ce779: call 0x4010c0 ; rtl60!@System@@FillChar$qqrpvic +4ce77e: mov eax, dword ptr [ebp - 0x28] +4ce781: mov edx, dword ptr [eax] +4ce783: call dword ptr [edx + 0x12c] +4ce789: dec eax +4ce78a: test eax, eax +4ce78c: jl 0x4ce7dc +4ce78e: inc eax +4ce78f: mov dword ptr [ebp - 0x2c], eax +4ce792: xor ebx, ebx +4ce794: push ebp +4ce795: mov eax, ebx +4ce797: call 0x4ce2c8 +4ce79c: pop ecx +4ce79d: mov dword ptr [ebp - 0x24], 4 +4ce7a4: mov eax, 0x5e92e8 +4ce7a9: mov esi, 0x5e9304 +4ce7ae: cmp ebx, dword ptr [eax] +4ce7b0: jne 0x4ce7cb +4ce7b2: mov ecx, ebx +4ce7b4: mov edx, 6 +4ce7b9: mov eax, dword ptr [ebp - 0x28] +4ce7bc: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce7c1: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce7c6: fstp qword ptr [esi] +4ce7c8: wait +4ce7c9: jmp 0x4ce7d6 +4ce7cb: add esi, 8 +4ce7ce: add eax, 4 +4ce7d1: dec dword ptr [ebp - 0x24] +4ce7d4: jne 0x4ce7ae +4ce7d6: inc ebx +4ce7d7: dec dword ptr [ebp - 0x2c] +4ce7da: jne 0x4ce794 +4ce7dc: xor eax, eax +4ce7de: mov dword ptr [ebp - 0x20], eax +4ce7e1: mov dword ptr [ebp - 0x1c], eax +4ce7e4: mov eax, dword ptr [ebp - 0x14] +4ce7e7: mov eax, dword ptr [eax + 0x320] +4ce7ed: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce7f2: test eax, eax +4ce7f4: jne 0x4ce81e +4ce7f6: mov eax, dword ptr [ebp - 0x14] +4ce7f9: mov eax, dword ptr [eax + 0x328] +4ce7ff: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce804: test eax, eax +4ce806: jne 0x4ce81e +4ce808: mov eax, dword ptr [ebp - 0x14] +4ce80b: mov eax, dword ptr [eax + 0x330] +4ce811: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce816: test eax, eax +4ce818: je 0x4ce913 +4ce81e: push ebp +4ce81f: call 0x4ce55c +4ce824: pop ecx +4ce825: mov eax, dword ptr [ebp - 0x14] +4ce828: mov eax, dword ptr [eax + 0x330] +4ce82e: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce833: test eax, eax +4ce835: je 0x4ce913 +4ce83b: mov eax, dword ptr [ebp - 0x14] +4ce83e: mov eax, dword ptr [eax + 0x320] +4ce844: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce849: dec eax +4ce84a: jne 0x4ce913 +4ce850: jmp 0x4ce8c0 +4ce852: xor eax, eax +4ce854: mov dword ptr [ebp - 0x20], eax +4ce857: mov dword ptr [ebp - 0x1c], 0x3ff00000 +4ce85e: mov ecx, dword ptr [0x5e92e4] +4ce864: mov edx, 6 +4ce869: mov eax, dword ptr [ebp - 0x28] +4ce86c: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce871: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce876: fstp qword ptr [ebp - 8] +4ce879: wait +4ce87a: mov ecx, dword ptr [0x5e92e4] +4ce880: mov edx, 8 +4ce885: mov eax, dword ptr [ebp - 0x28] +4ce888: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce88d: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce892: fstp qword ptr [ebp - 0x10] +4ce895: wait +4ce896: mov ebx, dword ptr [0x5e92e4] +4ce89c: inc ebx +4ce89d: mov eax, dword ptr [ebp - 0x28] +4ce8a0: mov edx, dword ptr [eax] +4ce8a2: call dword ptr [edx + 0x12c] +4ce8a8: dec eax +4ce8a9: sub eax, ebx +4ce8ab: jl 0x4ce8c0 +4ce8ad: inc eax +4ce8ae: mov dword ptr [ebp - 0x2c], eax +4ce8b1: push ebp +4ce8b2: mov eax, ebx +4ce8b4: call 0x4ce2c8 +4ce8b9: pop ecx +4ce8ba: inc ebx +4ce8bb: dec dword ptr [ebp - 0x2c] +4ce8be: jne 0x4ce8b1 +4ce8c0: mov ecx, dword ptr [0x5e92f4] +4ce8c6: mov edx, 6 +4ce8cb: mov eax, dword ptr [ebp - 0x28] +4ce8ce: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4ce8d3: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ce8d8: fstp qword ptr [ebp - 0x34] +4ce8db: wait +4ce8dc: push 0 +4ce8de: mov eax, dword ptr [ebp - 0x14] +4ce8e1: mov eax, dword ptr [eax + 0x330] +4ce8e7: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4ce8ec: neg eax +4ce8ee: push eax +4ce8ef: fld qword ptr [0x5e931c] +4ce8f5: add esp, -0xc +4ce8f8: fstp xword ptr [esp] +4ce8fb: wait +4ce8fc: call 0x4091b0 ; DP_COMMON!MROUNDUD +4ce901: fsubr qword ptr [ebp - 0x34] +4ce904: call 0x401068 ; rtl60!@System@@ROUND$qqrv +4ce909: dec eax +4ce90a: sub eax, 0xa +4ce90d: jb 0x4ce852 +4ce913: mov eax, dword ptr [ebp - 0x28] +4ce916: call 0x407c5c ; RealGrid6!@Urmgrid@TRealGrid@Post$qqrv +4ce91b: mov eax, dword ptr [ebp - 0x14] +4ce91e: call 0x4cac0c +4ce923: mov eax, dword ptr [ebp - 0x14] +4ce926: mov eax, dword ptr [eax + 0x310] +4ce92c: mov eax, dword ptr [eax + 0x68] +4ce92f: xor edx, edx +4ce931: call 0x401fac ; vcl60!@Graphics@TFont@SetColor$qqr15Graphics@TColor +4ce936: mov eax, dword ptr [ebp - 0x14] +4ce939: mov eax, dword ptr [eax + 0x310] +4ce93f: mov eax, dword ptr [eax + 0x68] +4ce942: mov dl, byte ptr [0x4cec58] +4ce948: call 0x401fcc ; vcl60!@Graphics@TFont@SetStyle$qqr47System@%Set$t19Graphics@TFontStyle$iuc$0$iuc$3% +4ce94d: mov eax, dword ptr [ebp - 0x14] +4ce950: mov eax, dword ptr [eax + 0x310] +4ce956: xor edx, edx +4ce958: mov ecx, dword ptr [eax] +4ce95a: call dword ptr [ecx + 0x64] +4ce95d: fld qword ptr [0x59744c] +4ce963: add esp, -0xc +4ce966: fstp xword ptr [esp] +4ce969: wait +4ce96a: lea edx, [ebp - 0x38] +4ce96d: mov eax, 0x4cec64 ; '#,#' +4ce972: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4ce977: mov eax, dword ptr [ebp - 0x38] +4ce97a: push eax +4ce97b: mov eax, dword ptr [ebp - 0x14] +4ce97e: mov eax, dword ptr [eax + 0x2f4] +4ce984: mov eax, dword ptr [eax + 0x208] +4ce98a: mov edx, 1 +4ce98f: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4ce994: pop edx +4ce995: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4ce99a: fld qword ptr [0x5b7cec] +4ce9a0: add esp, -0xc +4ce9a3: fstp xword ptr [esp] +4ce9a6: wait +4ce9a7: lea edx, [ebp - 0x3c] +4ce9aa: mov eax, 0x4cec64 ; '#,#' +4ce9af: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4ce9b4: mov eax, dword ptr [ebp - 0x3c] +4ce9b7: push eax +4ce9b8: mov eax, dword ptr [ebp - 0x14] +4ce9bb: mov eax, dword ptr [eax + 0x2f4] +4ce9c1: mov eax, dword ptr [eax + 0x208] +4ce9c7: mov edx, 2 +4ce9cc: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4ce9d1: pop edx +4ce9d2: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4ce9d7: fld qword ptr [0x59744c] +4ce9dd: fcomp dword ptr [0x4cec58] ; =0.0 +4ce9e3: fnstsw ax +4ce9e5: sahf +4ce9e6: jne 0x4cea20 +4ce9e8: push 0 +4ce9ea: push 0 +4ce9ec: push 0 +4ce9ee: lea edx, [ebp - 0x40] +4ce9f1: mov eax, 0x4cec70 ; '0.00%;;#' +4ce9f6: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4ce9fb: mov eax, dword ptr [ebp - 0x40] +4ce9fe: push eax +4ce9ff: mov eax, dword ptr [ebp - 0x14] +4cea02: mov eax, dword ptr [eax + 0x2f4] +4cea08: mov eax, dword ptr [eax + 0x208] +4cea0e: mov edx, 3 +4cea13: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4cea18: pop edx +4cea19: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4cea1e: jmp 0x4cea69 +4cea20: fld qword ptr [0x5b7cec] +4cea26: fdiv qword ptr [0x59744c] +4cea2c: fmul dword ptr [0x4cec7c] ; =100.0 +4cea32: add esp, -0xc +4cea35: fstp xword ptr [esp] +4cea38: wait +4cea39: lea edx, [ebp - 0x44] +4cea3c: mov eax, 0x4cec70 ; '0.00%;;#' +4cea41: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4cea46: mov eax, dword ptr [ebp - 0x44] +4cea49: push eax +4cea4a: mov eax, dword ptr [ebp - 0x14] +4cea4d: mov eax, dword ptr [eax + 0x2f4] +4cea53: mov eax, dword ptr [eax + 0x208] +4cea59: mov edx, 3 +4cea5e: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4cea63: pop edx +4cea64: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4cea69: fld qword ptr [ebp - 8] +4cea6c: add esp, -0xc +4cea6f: fstp xword ptr [esp] +4cea72: wait +4cea73: lea edx, [ebp - 0x48] +4cea76: mov eax, 0x4cec64 ; '#,#' +4cea7b: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4cea80: mov eax, dword ptr [ebp - 0x48] +4cea83: push eax +4cea84: mov eax, dword ptr [ebp - 0x14] +4cea87: mov eax, dword ptr [eax + 0x2f4] +4cea8d: mov eax, dword ptr [eax + 0x208] +4cea93: mov edx, 4 +4cea98: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4cea9d: pop edx +4cea9e: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4ceaa3: fld qword ptr [0x59744c] +4ceaa9: fcomp dword ptr [0x4cec58] ; =0.0 +4ceaaf: fnstsw ax +4ceab1: sahf +4ceab2: jne 0x4ceaec +4ceab4: push 0 +4ceab6: push 0 +4ceab8: push 0 +4ceaba: lea edx, [ebp - 0x4c] +4ceabd: mov eax, 0x4cec70 ; '0.00%;;#' +4ceac2: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4ceac7: mov eax, dword ptr [ebp - 0x4c] +4ceaca: push eax +4ceacb: mov eax, dword ptr [ebp - 0x14] +4ceace: mov eax, dword ptr [eax + 0x2f4] +4cead4: mov eax, dword ptr [eax + 0x208] +4ceada: mov edx, 5 +4ceadf: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4ceae4: pop edx +4ceae5: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4ceaea: jmp 0x4ceb32 +4ceaec: fld qword ptr [ebp - 8] +4ceaef: fdiv qword ptr [0x59744c] +4ceaf5: fmul dword ptr [0x4cec7c] ; =100.0 +4ceafb: add esp, -0xc +4ceafe: fstp xword ptr [esp] +4ceb01: wait +4ceb02: lea edx, [ebp - 0x50] +4ceb05: mov eax, 0x4cec70 ; '0.00%;;#' +4ceb0a: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4ceb0f: mov eax, dword ptr [ebp - 0x50] +4ceb12: push eax +4ceb13: mov eax, dword ptr [ebp - 0x14] +4ceb16: mov eax, dword ptr [eax + 0x2f4] +4ceb1c: mov eax, dword ptr [eax + 0x208] +4ceb22: mov edx, 5 +4ceb27: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4ceb2c: pop edx +4ceb2d: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4ceb32: fld qword ptr [ebp - 0x10] +4ceb35: add esp, -0xc +4ceb38: fstp xword ptr [esp] +4ceb3b: wait +4ceb3c: lea edx, [ebp - 0x54] +4ceb3f: mov eax, 0x4cec64 ; '#,#' +4ceb44: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4ceb49: mov eax, dword ptr [ebp - 0x54] +4ceb4c: push eax +4ceb4d: mov eax, dword ptr [ebp - 0x14] +4ceb50: mov eax, dword ptr [eax + 0x2f4] +4ceb56: mov eax, dword ptr [eax + 0x208] +4ceb5c: mov edx, 6 +4ceb61: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4ceb66: pop edx +4ceb67: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4ceb6c: fld qword ptr [0x59744c] +4ceb72: fcomp dword ptr [0x4cec58] ; =0.0 +4ceb78: fnstsw ax +4ceb7a: sahf +4ceb7b: jne 0x4cebb5 +4ceb7d: push 0 +4ceb7f: push 0 +4ceb81: push 0 +4ceb83: lea edx, [ebp - 0x58] +4ceb86: mov eax, 0x4cec70 ; '0.00%;;#' +4ceb8b: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4ceb90: mov eax, dword ptr [ebp - 0x58] +4ceb93: push eax +4ceb94: mov eax, dword ptr [ebp - 0x14] +4ceb97: mov eax, dword ptr [eax + 0x2f4] +4ceb9d: mov eax, dword ptr [eax + 0x208] +4ceba3: mov edx, 7 +4ceba8: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4cebad: pop edx +4cebae: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4cebb3: jmp 0x4cebfb +4cebb5: fld qword ptr [ebp - 0x10] +4cebb8: fdiv qword ptr [0x59744c] +4cebbe: fmul dword ptr [0x4cec7c] ; =100.0 +4cebc4: add esp, -0xc +4cebc7: fstp xword ptr [esp] +4cebca: wait +4cebcb: lea edx, [ebp - 0x5c] +4cebce: mov eax, 0x4cec70 ; '0.00%;;#' +4cebd3: call 0x401a84 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg +4cebd8: mov eax, dword ptr [ebp - 0x5c] +4cebdb: push eax +4cebdc: mov eax, dword ptr [ebp - 0x14] +4cebdf: mov eax, dword ptr [eax + 0x2f4] +4cebe5: mov eax, dword ptr [eax + 0x208] +4cebeb: mov edx, 7 +4cebf0: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4cebf5: pop edx +4cebf6: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4cebfb: xor eax, eax +4cebfd: pop edx +4cebfe: pop ecx +4cebff: pop ecx +4cec00: mov dword ptr fs:[eax], edx +4cec03: push 0x4cec30 +4cec08: mov eax, dword ptr [ebp - 0x28] +4cec0b: mov edx, dword ptr [ebp - 0x14] +4cec0e: mov dword ptr [eax + 0x4d4], edx +4cec14: mov dword ptr [eax + 0x4d0], 0x4cec80 +4cec1e: mov dl, 1 +4cec20: mov eax, dword ptr [ebp - 0x28] +4cec23: call 0x407ba4 ; RealGrid6!@Urgrids@TwCustomGrid@EndUpdate$qqro +4cec28: ret +4cec29: jmp 0x401190 ; rtl60!@System@@HandleFinally$qqrv +4cec2e: jmp 0x4cec08 +4cec30: xor eax, eax +4cec32: pop edx +4cec33: pop ecx +4cec34: pop ecx +4cec35: mov dword ptr fs:[eax], edx +4cec38: push 0x4cec52 +4cec3d: lea eax, [ebp - 0x5c] +4cec40: mov edx, 0xa +4cec45: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi +4cec4a: ret +4cec4b: jmp 0x401190 ; rtl60!@System@@HandleFinally$qqrv +4cec50: jmp 0x4cec3d +4cec52: pop esi +4cec53: pop ebx +4cec54: mov esp, ebp +4cec56: pop ebp +4cec57: ret +4cec58: add byte ptr [eax], al +4cec5a: add byte ptr [eax], al +4cec5c: .byte 0xff +4cec5d: .byte 0xff +4cec5e: .byte 0xff +4cec5f: inc dword ptr [ebx] +4cec61: add byte ptr [eax], al +4cec63: add byte ptr [ebx], ah +4cec65: sub al, 0x23 +4cec67: add bh, bh +4cec69: .byte 0xff +4cec6a: .byte 0xff +4cec6b: dec dword ptr [eax] +4cec6d: add byte ptr [eax], al +4cec6f: add byte ptr [eax], dh +4cec71: xor byte ptr cs:[eax], dh +4cec74: and eax, 0x233b3b +4cec79: add byte ptr [eax], al +4cec7b: add byte ptr [eax], al +4cec7d: add al, cl +4cec7f: inc edx diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cec80_beforepost_0x4cee64_combo.asm.txt b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cec80_beforepost_0x4cee64_combo.asm.txt new file mode 100644 index 000000000..8d602a607 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/KanJub_0x4cec80_beforepost_0x4cee64_combo.asm.txt @@ -0,0 +1,251 @@ +4cec80: push ebx +4cec81: push esi +4cec82: add esp, -8 +4cec85: mov ebx, eax +4cec87: mov esi, dword ptr [ebx + 0x300] +4cec8d: mov ecx, dword ptr [esi + 0x444] +4cec93: mov edx, 4 +4cec98: mov eax, esi +4cec9a: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cec9f: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4ceca4: fstp qword ptr [esp] +4ceca7: wait +4ceca8: mov ecx, dword ptr [esi + 0x444] +4cecae: mov edx, 6 +4cecb3: mov eax, esi +4cecb5: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cecba: call 0x407c0c ; RealGrid6!@Urmgrid@TwCells@GetFloat$qqrv +4cecbf: fadd qword ptr [esp] +4cecc2: add esp, -8 +4cecc5: fstp qword ptr [esp] +4cecc8: wait +4cecc9: mov ecx, dword ptr [esi + 0x444] +4ceccf: mov edx, 8 +4cecd4: mov eax, esi +4cecd6: call 0x407c2c ; RealGrid6!@Urmgrid@TRealGrid@GetCells$qqrii +4cecdb: call 0x407c14 ; RealGrid6!@Urmgrid@TwCells@SetFloat$qqrd +4cece0: mov eax, dword ptr [ebx + 0x310] +4cece6: mov eax, dword ptr [eax + 0x68] +4cece9: mov edx, 0xff0000 +4cecee: call 0x401fac ; vcl60!@Graphics@TFont@SetColor$qqr15Graphics@TColor +4cecf3: mov eax, dword ptr [ebx + 0x310] +4cecf9: mov eax, dword ptr [eax + 0x68] +4cecfc: mov dl, byte ptr [0x4ced94] +4ced02: call 0x401fcc ; vcl60!@Graphics@TFont@SetStyle$qqr47System@%Set$t19Graphics@TFontStyle$iuc$0$iuc$3% +4ced07: mov dl, 1 +4ced09: mov eax, dword ptr [ebx + 0x310] +4ced0f: mov ecx, dword ptr [eax] +4ced11: call dword ptr [ecx + 0x64] +4ced14: mov eax, dword ptr [ebx + 0x2f4] +4ced1a: mov eax, dword ptr [eax + 0x208] +4ced20: mov edx, 4 +4ced25: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4ced2a: mov edx, 0x4ceda0 ; '계산안됨' +4ced2f: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4ced34: mov eax, dword ptr [ebx + 0x2f4] +4ced3a: mov eax, dword ptr [eax + 0x208] +4ced40: mov edx, 5 +4ced45: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4ced4a: xor edx, edx +4ced4c: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4ced51: mov eax, dword ptr [ebx + 0x2f4] +4ced57: mov eax, dword ptr [eax + 0x208] +4ced5d: mov edx, 6 +4ced62: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4ced67: mov edx, 0x4ceda0 ; '계산안됨' +4ced6c: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4ced71: mov eax, dword ptr [ebx + 0x2f4] +4ced77: mov eax, dword ptr [eax + 0x208] +4ced7d: mov edx, 7 +4ced82: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4ced87: xor edx, edx +4ced89: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4ced8e: pop ecx +4ced8f: pop edx +4ced90: pop esi +4ced91: pop ebx +4ced92: ret +4ced93: add byte ptr [ecx], al +4ced95: add byte ptr [eax], al +4ced97: add bh, bh +4ced99: .byte 0xff +4ced9a: .byte 0xff +4ced9b: dec dword ptr [eax] +4ced9d: add byte ptr [eax], al +4ced9f: add byte ptr [eax - 0x41154418], dh +4ceda5: enter -0x354b, 0 +4ceda9: add byte ptr [eax], al +4cedab: add byte ptr [ebp - 0x75], dl +4cedae: in al, dx +4cedaf: push ebx +4cedb0: push esi +4cedb1: mov esi, ecx +4cedb3: mov ebx, eax +4cedb5: cmp word ptr [esi], 0xd +4cedb9: jne 0x4cedfc +4cedbb: mov eax, dword ptr [ebx + 0x300] +4cedc1: call 0x407b8c ; RealGrid6!@Urgrids@TwCustomGrid@GetSelectedIndex$qqrv +4cedc6: cmp eax, 6 +4cedc9: je 0x4cede2 +4cedcb: mov edx, 6 +4cedd0: mov eax, dword ptr [ebx + 0x300] +4cedd6: call 0x407b94 ; RealGrid6!@Urgrids@TwCustomGrid@SetSelectedIndex$qqri +4ceddb: mov word ptr [esi], 0 +4cede0: jmp 0x4cedfc +4cede2: mov eax, dword ptr [ebx + 0x300] +4cede8: call 0x407b74 ; RealGrid6!@Urgrids@TwCustomGrid@Editing$qqrv +4ceded: test al, al +4cedef: je 0x4cedfc +4cedf1: mov eax, dword ptr [ebx + 0x300] +4cedf7: call 0x407c5c ; RealGrid6!@Urmgrid@TRealGrid@Post$qqrv +4cedfc: pop esi +4cedfd: pop ebx +4cedfe: pop ebp +4cedff: ret 4 +4cee02: mov eax, eax +4cee04: push ebx +4cee05: push esi +4cee06: mov ebx, eax +4cee08: mov eax, dword ptr [ebx + 0x310] +4cee0e: mov edx, dword ptr [eax] +4cee10: call dword ptr [edx + 0x50] +4cee13: test al, al +4cee15: je 0x4cee26 +4cee17: mov eax, dword ptr [ebx + 0x310] +4cee1d: mov si, 0xffeb +4cee21: call 0x401130 ; rtl60!@System@@CallDynaInst$qqrv +4cee26: pop esi +4cee27: pop ebx +4cee28: ret +4cee29: lea eax, [eax] +4cee2c: push ebp +4cee2d: mov ebp, esp +4cee2f: mov dx, word ptr [ecx] +4cee32: sub dx, 0x70 +4cee36: jne 0x4cee4a +4cee38: mov ecx, dword ptr [eax + 0x220] +4cee3e: mov edx, eax +4cee40: mov eax, 0x4cee58 ; 'STHelp.Chm' +4cee45: call 0x431a18 +4cee4a: pop ebp +4cee4b: ret 4 +4cee4e: add byte ptr [eax], al +4cee50: .byte 0xff +4cee51: .byte 0xff +4cee52: .byte 0xff +4cee53: dec dword ptr [edx] +4cee55: add byte ptr [eax], al +4cee57: add byte ptr [ebx + 0x54], dl +4cee5a: dec eax +4cee5b: insb byte ptr es:[edi], dx +4cee5d: jo 0x4cee8d +4cee5f: inc ebx +4cee60: push 0x5300006d +4cee65: push esi +4cee66: push edi +4cee67: mov esi, edx +4cee69: mov ebx, eax +4cee6b: mov eax, esi +4cee6d: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4cee72: test eax, eax +4cee74: je 0x4cef28 +4cee7a: mov eax, dword ptr [ebx + 0x310] +4cee80: mov eax, dword ptr [eax + 0x68] +4cee83: mov edx, 0xff0000 +4cee88: call 0x401fac ; vcl60!@Graphics@TFont@SetColor$qqr15Graphics@TColor +4cee8d: mov eax, dword ptr [ebx + 0x310] +4cee93: mov eax, dword ptr [eax + 0x68] +4cee96: mov dl, byte ptr [0x4cef90] +4cee9c: call 0x401fcc ; vcl60!@Graphics@TFont@SetStyle$qqr47System@%Set$t19Graphics@TFontStyle$iuc$0$iuc$3% +4ceea1: mov dl, 1 +4ceea3: mov eax, dword ptr [ebx + 0x310] +4ceea9: mov ecx, dword ptr [eax] +4ceeab: call dword ptr [ecx + 0x64] +4ceeae: mov eax, dword ptr [ebx + 0x2f4] +4ceeb4: mov eax, dword ptr [eax + 0x208] +4ceeba: mov edx, 4 +4ceebf: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4ceec4: mov edx, 0x4cef9c ; '계산안됨' +4ceec9: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4ceece: mov eax, dword ptr [ebx + 0x2f4] +4ceed4: mov eax, dword ptr [eax + 0x208] +4ceeda: mov edx, 5 +4ceedf: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4ceee4: xor edx, edx +4ceee6: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4ceeeb: mov eax, dword ptr [ebx + 0x2f4] +4ceef1: mov eax, dword ptr [eax + 0x208] +4ceef7: mov edx, 6 +4ceefc: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4cef01: mov edx, 0x4cef9c ; '계산안됨' +4cef06: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4cef0b: mov eax, dword ptr [ebx + 0x2f4] +4cef11: mov eax, dword ptr [eax + 0x208] +4cef17: mov edx, 7 +4cef1c: call 0x402f8c ; vcl60!@Comctrls@TStatusPanels@GetItem$qqri +4cef21: xor edx, edx +4cef23: call 0x402f84 ; vcl60!@Comctrls@TStatusPanel@SetText$qqrx17System@AnsiString +4cef28: mov edi, dword ptr [ebx + 0x328] +4cef2e: cmp esi, edi +4cef30: jne 0x4cef67 +4cef32: mov eax, edi +4cef34: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4cef39: test eax, eax +4cef3b: sete dl +4cef3e: mov eax, dword ptr [ebx + 0x330] +4cef44: mov ecx, dword ptr [eax] +4cef46: call dword ptr [ecx + 0x64] +4cef49: mov eax, dword ptr [ebx + 0x328] +4cef4f: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4cef54: test eax, eax +4cef56: je 0x4cef89 +4cef58: xor edx, edx +4cef5a: mov eax, dword ptr [ebx + 0x330] +4cef60: call 0x402fe4 ; RealGridEX6!@Urcombos@TwCombo@SetInteger$qqri +4cef65: jmp 0x4cef89 +4cef67: mov edi, dword ptr [ebx + 0x330] +4cef6d: cmp esi, edi +4cef6f: jne 0x4cef89 +4cef71: mov eax, edi +4cef73: call 0x402fdc ; RealGridEX6!@Urcombos@TwCombo@GetInteger$qqrv +4cef78: test eax, eax +4cef7a: je 0x4cef89 +4cef7c: xor edx, edx +4cef7e: mov eax, dword ptr [ebx + 0x328] +4cef84: call 0x402fe4 ; RealGridEX6!@Urcombos@TwCombo@SetInteger$qqri +4cef89: pop edi +4cef8a: pop esi +4cef8b: pop ebx +4cef8c: ret +4cef8d: add byte ptr [eax], al +4cef8f: add byte ptr [ecx], al +4cef91: add byte ptr [eax], al +4cef93: add bh, bh +4cef95: .byte 0xff +4cef96: .byte 0xff +4cef97: dec dword ptr [eax] +4cef99: add byte ptr [eax], al +4cef9b: add byte ptr [eax - 0x41154418], dh +4cefa1: enter -0x354b, 0 +4cefa5: add byte ptr [eax], al +4cefa7: add byte ptr [ebp - 0x75], dl +4cefaa: in al, dx +4cefab: push ebx +4cefac: push esi +4cefad: mov esi, edx +4cefaf: mov ebx, eax +4cefb1: cmp word ptr [ecx], 0xd +4cefb5: jne 0x4cefd1 +4cefb7: push 1 +4cefb9: mov eax, esi +4cefbb: mov edx, dword ptr [0x5eb6f4] ; [vcl60!@Controls@TWinControl@] +4cefc1: call 0x401128 ; rtl60!@System@@AsClass$qqrp14System@TObjectp17System@TMetaClass +4cefc6: mov edx, eax +4cefc8: mov cl, 1 +4cefca: mov eax, ebx +4cefcc: call 0x402a8c ; vcl60!@Controls@TWinControl@SelectNext$qqrp20Controls@TWinControloo +4cefd1: pop esi +4cefd2: pop ebx +4cefd3: pop ebp +4cefd4: ret 4 +4cefd7: nop diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/Main_0x55c7af_progress_registration.asm.txt b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/Main_0x55c7af_progress_registration.asm.txt new file mode 100644 index 000000000..2b0041db3 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/Main_0x55c7af_progress_registration.asm.txt @@ -0,0 +1,577 @@ +55c7af: lea eax, [ebp - 0x828] +55c7b5: mov edx, 1 +55c7ba: mov cl, 1 +55c7bc: call 0x4013c0 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +55c7c1: lea ecx, [ebp - 0x828] +55c7c7: mov edx, 0x55f8a4 ; 'RS' +55c7cc: mov eax, dword ptr [ebp - 0x2c] +55c7cf: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55c7d4: lea ecx, [ebp - 0x838] +55c7da: mov edx, 0x55f5c8 ; 'QTY1' +55c7df: mov eax, dword ptr [ebp - 0x2c] +55c7e2: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55c7e7: lea ecx, [ebp - 0x838] +55c7ed: mov edx, 0x55f8b0 ; 'QTY2' +55c7f2: mov eax, dword ptr [ebp - 0x2c] +55c7f5: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55c7fa: lea ecx, [ebp - 0x848] +55c800: mov edx, 0x55f5c8 ; 'QTY1' +55c805: mov eax, dword ptr [ebp - 0x2c] +55c808: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55c80d: lea ecx, [ebp - 0x848] +55c813: mov edx, 0x55f8c0 ; 'QTY3' +55c818: mov eax, dword ptr [ebp - 0x2c] +55c81b: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55c820: lea ecx, [ebp - 0x858] +55c826: mov edx, 0x55f8d0 ; 'MAMT1' +55c82b: mov eax, dword ptr [ebp - 0x2c] +55c82e: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55c833: lea ecx, [ebp - 0x858] +55c839: mov edx, 0x55f8e0 ; 'MAMT2' +55c83e: mov eax, dword ptr [ebp - 0x2c] +55c841: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55c846: lea ecx, [ebp - 0x868] +55c84c: mov edx, 0x55f8f0 ; 'LAMT1' +55c851: mov eax, dword ptr [ebp - 0x2c] +55c854: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55c859: lea ecx, [ebp - 0x868] +55c85f: mov edx, 0x55f900 ; 'LAMT2' +55c864: mov eax, dword ptr [ebp - 0x2c] +55c867: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55c86c: lea ecx, [ebp - 0x878] +55c872: mov edx, 0x55f910 ; 'SAMT1' +55c877: mov eax, dword ptr [ebp - 0x2c] +55c87a: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55c87f: lea ecx, [ebp - 0x878] +55c885: mov edx, 0x55f920 ; 'SAMT2' +55c88a: mov eax, dword ptr [ebp - 0x2c] +55c88d: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55c892: lea ecx, [ebp - 0x888] +55c898: mov edx, 0x55f930 ; 'TAMT1' +55c89d: mov eax, dword ptr [ebp - 0x2c] +55c8a0: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55c8a5: lea ecx, [ebp - 0x888] +55c8ab: mov edx, 0x55f940 ; 'TAMT2' +55c8b0: mov eax, dword ptr [ebp - 0x2c] +55c8b3: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55c8b8: lea ecx, [ebp - 0x898] +55c8be: mov edx, 0x55f950 ; 'M_AMT1' +55c8c3: mov eax, dword ptr [ebp - 0x2c] +55c8c6: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55c8cb: lea ecx, [ebp - 0x898] +55c8d1: mov edx, 0x55f960 ; 'M_AMT2' +55c8d6: mov eax, dword ptr [ebp - 0x2c] +55c8d9: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55c8de: lea ecx, [ebp - 0x8a8] +55c8e4: mov edx, 0x55f970 ; 'L_AMT1' +55c8e9: mov eax, dword ptr [ebp - 0x2c] +55c8ec: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55c8f1: lea ecx, [ebp - 0x8a8] +55c8f7: mov edx, 0x55f980 ; 'L_AMT2' +55c8fc: mov eax, dword ptr [ebp - 0x2c] +55c8ff: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55c904: lea ecx, [ebp - 0x8b8] +55c90a: mov edx, 0x55f990 ; 'S_AMT1' +55c90f: mov eax, dword ptr [ebp - 0x2c] +55c912: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55c917: lea ecx, [ebp - 0x8b8] +55c91d: mov edx, 0x55f9a0 ; 'S_AMT2' +55c922: mov eax, dword ptr [ebp - 0x2c] +55c925: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55c92a: lea ecx, [ebp - 0x8c8] +55c930: mov edx, 0x55f9b0 ; 'T_AMT1' +55c935: mov eax, dword ptr [ebp - 0x2c] +55c938: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55c93d: lea ecx, [ebp - 0x8c8] +55c943: mov edx, 0x55f9c0 ; 'T_AMT2' +55c948: mov eax, dword ptr [ebp - 0x2c] +55c94b: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55c950: lea ecx, [ebp - 0x8d8] +55c956: mov edx, 0x55f8d0 ; 'MAMT1' +55c95b: mov eax, dword ptr [ebp - 0x2c] +55c95e: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55c963: lea ecx, [ebp - 0x8d8] +55c969: mov edx, 0x55f9d0 ; 'MAMT3' +55c96e: mov eax, dword ptr [ebp - 0x2c] +55c971: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55c976: lea ecx, [ebp - 0x8e8] +55c97c: mov edx, 0x55f8f0 ; 'LAMT1' +55c981: mov eax, dword ptr [ebp - 0x2c] +55c984: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55c989: lea ecx, [ebp - 0x8e8] +55c98f: mov edx, 0x55f9e0 ; 'LAMT3' +55c994: mov eax, dword ptr [ebp - 0x2c] +55c997: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55c99c: lea ecx, [ebp - 0x8f8] +55c9a2: mov edx, 0x55f910 ; 'SAMT1' +55c9a7: mov eax, dword ptr [ebp - 0x2c] +55c9aa: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55c9af: lea ecx, [ebp - 0x8f8] +55c9b5: mov edx, 0x55f9f0 ; 'SAMT3' +55c9ba: mov eax, dword ptr [ebp - 0x2c] +55c9bd: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55c9c2: lea ecx, [ebp - 0x908] +55c9c8: mov edx, 0x55f930 ; 'TAMT1' +55c9cd: mov eax, dword ptr [ebp - 0x2c] +55c9d0: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55c9d5: lea ecx, [ebp - 0x908] +55c9db: mov edx, 0x55fa00 ; 'TAMT3' +55c9e0: mov eax, dword ptr [ebp - 0x2c] +55c9e3: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55c9e8: lea ecx, [ebp - 0x918] +55c9ee: mov edx, 0x55f950 ; 'M_AMT1' +55c9f3: mov eax, dword ptr [ebp - 0x2c] +55c9f6: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55c9fb: lea ecx, [ebp - 0x918] +55ca01: mov edx, 0x55fa10 ; 'M_AMT3' +55ca06: mov eax, dword ptr [ebp - 0x2c] +55ca09: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55ca0e: lea ecx, [ebp - 0x928] +55ca14: mov edx, 0x55f970 ; 'L_AMT1' +55ca19: mov eax, dword ptr [ebp - 0x2c] +55ca1c: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55ca21: lea ecx, [ebp - 0x928] +55ca27: mov edx, 0x55fa20 ; 'L_AMT3' +55ca2c: mov eax, dword ptr [ebp - 0x2c] +55ca2f: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55ca34: lea ecx, [ebp - 0x938] +55ca3a: mov edx, 0x55f990 ; 'S_AMT1' +55ca3f: mov eax, dword ptr [ebp - 0x2c] +55ca42: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55ca47: lea ecx, [ebp - 0x938] +55ca4d: mov edx, 0x55fa30 ; 'S_AMT3' +55ca52: mov eax, dword ptr [ebp - 0x2c] +55ca55: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55ca5a: lea ecx, [ebp - 0x948] +55ca60: mov edx, 0x55f9b0 ; 'T_AMT1' +55ca65: mov eax, dword ptr [ebp - 0x2c] +55ca68: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString +55ca6d: lea ecx, [ebp - 0x948] +55ca73: mov edx, 0x55fa40 ; 'T_AMT3' +55ca78: mov eax, dword ptr [ebp - 0x2c] +55ca7b: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55ca80: mov edx, 1 +55ca85: mov eax, dword ptr [ebp - 0x2c] +55ca88: call 0x4047b8 ; Apollo5D6!@Apodset@TApolloTable@Skip$qqri +55ca8d: fild dword ptr [ebp - 0x24] +55ca90: mov dword ptr [ebp - 0x154], ebx +55ca96: fild dword ptr [ebp - 0x154] +55ca9c: fdivp st(1) +55ca9e: fmul dword ptr [0x55f5f0] ; =100.0 +55caa4: call 0x401078 ; rtl60!@System@@ROUND$qqrv +55caa9: mov edx, eax +55caab: mov eax, dword ptr [0x5e6090] +55cab0: mov eax, dword ptr [eax] +55cab2: mov eax, dword ptr [eax + 0x5c] +55cab5: call 0x403f90 ; vcl60!@Comctrls@TProgressBar@SetPosition$qqri +55caba: inc dword ptr [ebp - 0x24] +55cabd: mov eax, dword ptr [ebp - 0x2c] +55cac0: mov edx, dword ptr [eax] +55cac2: call dword ptr [edx + 0x270] +55cac8: test al, al +55caca: je 0x55c18d +55cad0: mov eax, dword ptr [ebp - 0x2c] +55cad3: call 0x4046f0 ; Apollo5D6!@Apodset@TApolloTable@Commit$qqrv +55cad8: jmp 0x55e894 +55cadd: mov eax, dword ptr [ebp - 4] +55cae0: cmp dword ptr [eax + 0x57c], 6 +55cae7: jne 0x55cdd7 +55caed: mov eax, dword ptr [ebp - 0x2c] +55caf0: call 0x4047a8 ; Apollo5D6!@Apodset@TApolloTable@GoTop$qqrv +55caf5: mov eax, dword ptr [ebp - 0x2c] +55caf8: call 0x404820 ; Apollo5D6!@Apodset@TApolloTable@GetSXRecCount$qqrv +55cafd: mov ebx, eax +55caff: jmp 0x55cdb7 +55cb04: lea ecx, [ebp - 0x954] +55cb0a: mov edx, 0x55f540 ; 'name1' +55cb0f: mov eax, dword ptr [ebp - 0x2c] +55cb12: call 0x404790 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString +55cb17: mov eax, dword ptr [ebp - 0x954] +55cb1d: lea edx, [ebp - 0x950] +55cb23: call 0x401e40 ; rtl60!@Sysutils@TrimRight$qqrx17System@AnsiString +55cb28: push dword ptr [ebp - 0x950] +55cb2e: lea ecx, [ebp - 0x95c] +55cb34: mov edx, 0x55f550 ; 'size1' +55cb39: mov eax, dword ptr [ebp - 0x2c] +55cb3c: call 0x404790 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString +55cb41: mov eax, dword ptr [ebp - 0x95c] +55cb47: lea edx, [ebp - 0x958] +55cb4d: call 0x401e40 ; rtl60!@Sysutils@TrimRight$qqrx17System@AnsiString +55cb52: push dword ptr [ebp - 0x958] +55cb58: push 0x55f560 ; ' / ' +55cb5d: lea ecx, [ebp - 0x964] +55cb63: mov edx, 0x55f56c ; 'unit1' +55cb68: mov eax, dword ptr [ebp - 0x2c] +55cb6b: call 0x404790 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString +55cb70: mov eax, dword ptr [ebp - 0x964] +55cb76: lea edx, [ebp - 0x960] +55cb7c: call 0x401e40 ; rtl60!@Sysutils@TrimRight$qqrx17System@AnsiString +55cb81: push dword ptr [ebp - 0x960] +55cb87: lea eax, [ebp - 0x94c] +55cb8d: mov edx, 4 +55cb92: call 0x4012b8 ; rtl60!@System@@LStrCatN$qqrv +55cb97: mov eax, dword ptr [ebp - 0x94c] +55cb9d: push eax +55cb9e: push 0x55f57c ; '처리된 항목수:' +55cba3: lea edx, [ebp - 0x96c] +55cba9: mov eax, dword ptr [ebp - 0x24] +55cbac: call 0x401e48 ; rtl60!@Sysutils@IntToStr$qqri +55cbb1: push dword ptr [ebp - 0x96c] +55cbb7: push 0x55f594 ; '개' +55cbbc: lea eax, [ebp - 0x968] +55cbc2: mov edx, 3 +55cbc7: call 0x4012b8 ; rtl60!@System@@LStrCatN$qqrv +55cbcc: mov edx, dword ptr [ebp - 0x968] +55cbd2: mov eax, 0x55fa50 ; '전회0/금회0/누계0' +55cbd7: pop ecx +55cbd8: call 0x42c83c +55cbdd: mov eax, dword ptr [ebp - 0x2c] +55cbe0: call 0x403d38 ; dbrtl60!@Db@TDataSet@Edit$qqrv +55cbe5: lea eax, [ebp - 0x97c] +55cbeb: xor edx, edx +55cbed: mov cl, 1 +55cbef: call 0x4013c0 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +55cbf4: lea ecx, [ebp - 0x97c] +55cbfa: mov edx, 0x55f8b0 ; 'QTY2' +55cbff: mov eax, dword ptr [ebp - 0x2c] +55cc02: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55cc07: lea eax, [ebp - 0x98c] +55cc0d: xor edx, edx +55cc0f: mov cl, 1 +55cc11: call 0x4013c0 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +55cc16: lea ecx, [ebp - 0x98c] +55cc1c: mov edx, 0x55f8c0 ; 'QTY3' +55cc21: mov eax, dword ptr [ebp - 0x2c] +55cc24: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55cc29: lea eax, [ebp - 0x99c] +55cc2f: xor edx, edx +55cc31: mov cl, 1 +55cc33: call 0x4013c0 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +55cc38: lea ecx, [ebp - 0x99c] +55cc3e: mov edx, 0x55fa6c ; 'QTY4' +55cc43: mov eax, dword ptr [ebp - 0x2c] +55cc46: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55cc4b: lea eax, [ebp - 0x9ac] +55cc51: xor edx, edx +55cc53: mov cl, 1 +55cc55: call 0x4013c0 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +55cc5a: lea ecx, [ebp - 0x9ac] +55cc60: mov edx, 0x55f9c0 ; 'T_AMT2' +55cc65: mov eax, dword ptr [ebp - 0x2c] +55cc68: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55cc6d: lea eax, [ebp - 0x9bc] +55cc73: xor edx, edx +55cc75: mov cl, 1 +55cc77: call 0x4013c0 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +55cc7c: lea ecx, [ebp - 0x9bc] +55cc82: mov edx, 0x55fa40 ; 'T_AMT3' +55cc87: mov eax, dword ptr [ebp - 0x2c] +55cc8a: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55cc8f: lea eax, [ebp - 0x9cc] +55cc95: xor edx, edx +55cc97: mov cl, 1 +55cc99: call 0x4013c0 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +55cc9e: lea ecx, [ebp - 0x9cc] +55cca4: mov edx, 0x55fa7c ; 'T_AMT4' +55cca9: mov eax, dword ptr [ebp - 0x2c] +55ccac: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55ccb1: push 0x55f31c ; 'PR' +55ccb6: lea ecx, [ebp - 0x9d4] +55ccbc: mov edx, 0x55f850 ; 'BDCODE1' +55ccc1: mov eax, dword ptr [ebp - 0x2c] +55ccc4: call 0x404790 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString +55ccc9: mov eax, dword ptr [ebp - 0x9d4] +55cccf: mov dl, byte ptr [eax] +55ccd1: lea eax, [ebp - 0x9d0] +55ccd7: call 0x401278 ; rtl60!@System@@LStrFromChar$qqrr17System@AnsiStringc +55ccdc: mov eax, dword ptr [ebp - 0x9d0] +55cce2: push eax +55cce3: call 0x4228cc ; DP_COMMON!MPOS +55cce8: test al, al +55ccea: jne 0x55cd4f +55ccec: push 0x55fa8c ; 'MLSW' +55ccf1: lea ecx, [ebp - 0x9dc] +55ccf7: mov edx, 0x55f850 ; 'BDCODE1' +55ccfc: mov eax, dword ptr [ebp - 0x2c] +55ccff: call 0x404790 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString +55cd04: mov eax, dword ptr [ebp - 0x9dc] +55cd0a: mov dl, byte ptr [eax] +55cd0c: lea eax, [ebp - 0x9d8] +55cd12: call 0x401278 ; rtl60!@System@@LStrFromChar$qqrr17System@AnsiStringc +55cd17: mov eax, dword ptr [ebp - 0x9d8] +55cd1d: push eax +55cd1e: call 0x4228cc ; DP_COMMON!MPOS +55cd23: test al, al +55cd25: je 0x55cd7a +55cd27: lea ecx, [ebp - 0x9e0] +55cd2d: mov edx, 0x55f808 ; 'UNIT1' +55cd32: mov eax, dword ptr [ebp - 0x2c] +55cd35: call 0x404790 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString +55cd3a: mov eax, dword ptr [ebp - 0x9e0] +55cd40: push eax +55cd41: push 0x55f860 ; '%' +55cd46: call 0x4228cc ; DP_COMMON!MPOS +55cd4b: test al, al +55cd4d: je 0x55cd7a +55cd4f: mov edx, 0x55f5c8 ; 'QTY1' +55cd54: mov eax, dword ptr [ebp - 0x2c] +55cd57: call 0x404770 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +55cd5c: lea eax, [ebp - 0x9f0] +55cd62: call 0x4013d8 ; rtl60!@System@@VarFromReal$qqrv +55cd67: lea ecx, [ebp - 0x9f0] +55cd6d: mov edx, 0x55fa6c ; 'QTY4' +55cd72: mov eax, dword ptr [ebp - 0x2c] +55cd75: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55cd7a: mov edx, 1 +55cd7f: mov eax, dword ptr [ebp - 0x2c] +55cd82: call 0x4047b8 ; Apollo5D6!@Apodset@TApolloTable@Skip$qqri +55cd87: fild dword ptr [ebp - 0x24] +55cd8a: mov dword ptr [ebp - 0x154], ebx +55cd90: fild dword ptr [ebp - 0x154] +55cd96: fdivp st(1) +55cd98: fmul dword ptr [0x55f5f0] ; =100.0 +55cd9e: call 0x401078 ; rtl60!@System@@ROUND$qqrv +55cda3: mov edx, eax +55cda5: mov eax, dword ptr [0x5e6090] +55cdaa: mov eax, dword ptr [eax] +55cdac: mov eax, dword ptr [eax + 0x5c] +55cdaf: call 0x403f90 ; vcl60!@Comctrls@TProgressBar@SetPosition$qqri +55cdb4: inc dword ptr [ebp - 0x24] +55cdb7: mov eax, dword ptr [ebp - 0x2c] +55cdba: mov edx, dword ptr [eax] +55cdbc: call dword ptr [edx + 0x270] +55cdc2: test al, al +55cdc4: je 0x55cb04 +55cdca: mov eax, dword ptr [ebp - 0x2c] +55cdcd: call 0x4046f0 ; Apollo5D6!@Apodset@TApolloTable@Commit$qqrv +55cdd2: jmp 0x55e894 +55cdd7: mov eax, dword ptr [ebp - 4] +55cdda: cmp dword ptr [eax + 0x57c], 7 +55cde1: jne 0x55e894 +55cde7: mov eax, dword ptr [ebp - 0x2c] +55cdea: call 0x4047a8 ; Apollo5D6!@Apodset@TApolloTable@GoTop$qqrv +55cdef: mov eax, dword ptr [ebp - 0x2c] +55cdf2: call 0x404820 ; Apollo5D6!@Apodset@TApolloTable@GetSXRecCount$qqrv +55cdf7: mov ebx, eax +55cdf9: jmp 0x55cf8b +55cdfe: lea ecx, [ebp - 0x9fc] +55ce04: mov edx, 0x55f540 ; 'name1' +55ce09: mov eax, dword ptr [ebp - 0x2c] +55ce0c: call 0x404790 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString +55ce11: mov eax, dword ptr [ebp - 0x9fc] +55ce17: lea edx, [ebp - 0x9f8] +55ce1d: call 0x401e40 ; rtl60!@Sysutils@TrimRight$qqrx17System@AnsiString +55ce22: push dword ptr [ebp - 0x9f8] +55ce28: lea ecx, [ebp - 0xa04] +55ce2e: mov edx, 0x55f550 ; 'size1' +55ce33: mov eax, dword ptr [ebp - 0x2c] +55ce36: call 0x404790 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString +55ce3b: mov eax, dword ptr [ebp - 0xa04] +55ce41: lea edx, [ebp - 0xa00] +55ce47: call 0x401e40 ; rtl60!@Sysutils@TrimRight$qqrx17System@AnsiString +55ce4c: push dword ptr [ebp - 0xa00] +55ce52: push 0x55f560 ; ' / ' +55ce57: lea ecx, [ebp - 0xa0c] +55ce5d: mov edx, 0x55f56c ; 'unit1' +55ce62: mov eax, dword ptr [ebp - 0x2c] +55ce65: call 0x404790 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString +55ce6a: mov eax, dword ptr [ebp - 0xa0c] +55ce70: lea edx, [ebp - 0xa08] +55ce76: call 0x401e40 ; rtl60!@Sysutils@TrimRight$qqrx17System@AnsiString +55ce7b: push dword ptr [ebp - 0xa08] +55ce81: lea eax, [ebp - 0x9f4] +55ce87: mov edx, 4 +55ce8c: call 0x4012b8 ; rtl60!@System@@LStrCatN$qqrv +55ce91: mov eax, dword ptr [ebp - 0x9f4] +55ce97: push eax +55ce98: push 0x55f57c ; '처리된 항목수:' +55ce9d: lea edx, [ebp - 0xa14] +55cea3: mov eax, dword ptr [ebp - 0x24] +55cea6: call 0x401e48 ; rtl60!@Sysutils@IntToStr$qqri +55ceab: push dword ptr [ebp - 0xa14] +55ceb1: push 0x55f594 ; '개' +55ceb6: lea eax, [ebp - 0xa10] +55cebc: mov edx, 3 +55cec1: call 0x4012b8 ; rtl60!@System@@LStrCatN$qqrv +55cec6: mov edx, dword ptr [ebp - 0xa10] +55cecc: mov eax, 0x55fa9c ; '변경수량<-계약수량' +55ced1: pop ecx +55ced2: call 0x42c83c +55ced7: mov eax, dword ptr [ebp - 0x2c] +55ceda: call 0x403d38 ; dbrtl60!@Db@TDataSet@Edit$qqrv +55cedf: mov edx, 0x55fab8 ; 'qty1' +55cee4: mov eax, dword ptr [ebp - 0x2c] +55cee7: call 0x404770 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +55ceec: lea eax, [ebp - 0xa24] +55cef2: call 0x4013d8 ; rtl60!@System@@VarFromReal$qqrv +55cef7: lea ecx, [ebp - 0xa24] +55cefd: mov edx, 0x55f8b0 ; 'QTY2' +55cf02: mov eax, dword ptr [ebp - 0x2c] +55cf05: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55cf0a: lea eax, [ebp - 0xa34] +55cf10: xor edx, edx +55cf12: mov cl, 1 +55cf14: call 0x4013c0 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +55cf19: lea ecx, [ebp - 0xa34] +55cf1f: mov edx, 0x55f8c0 ; 'QTY3' +55cf24: mov eax, dword ptr [ebp - 0x2c] +55cf27: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55cf2c: lea eax, [ebp - 0xa44] +55cf32: xor edx, edx +55cf34: mov cl, 1 +55cf36: call 0x4013c0 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +55cf3b: lea ecx, [ebp - 0xa44] +55cf41: mov edx, 0x55fa6c ; 'QTY4' +55cf46: mov eax, dword ptr [ebp - 0x2c] +55cf49: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55cf4e: mov edx, 1 +55cf53: mov eax, dword ptr [ebp - 0x2c] +55cf56: call 0x4047b8 ; Apollo5D6!@Apodset@TApolloTable@Skip$qqri +55cf5b: fild dword ptr [ebp - 0x24] +55cf5e: mov dword ptr [ebp - 0x154], ebx +55cf64: fild dword ptr [ebp - 0x154] +55cf6a: fdivp st(1) +55cf6c: fmul dword ptr [0x55f5f0] ; =100.0 +55cf72: call 0x401078 ; rtl60!@System@@ROUND$qqrv +55cf77: mov edx, eax +55cf79: mov eax, dword ptr [0x5e6090] +55cf7e: mov eax, dword ptr [eax] +55cf80: mov eax, dword ptr [eax + 0x5c] +55cf83: call 0x403f90 ; vcl60!@Comctrls@TProgressBar@SetPosition$qqri +55cf88: inc dword ptr [ebp - 0x24] +55cf8b: mov eax, dword ptr [ebp - 0x2c] +55cf8e: mov edx, dword ptr [eax] +55cf90: call dword ptr [edx + 0x270] +55cf96: test al, al +55cf98: je 0x55cdfe +55cf9e: mov eax, dword ptr [ebp - 0x2c] +55cfa1: call 0x4046f0 ; Apollo5D6!@Apodset@TApolloTable@Commit$qqrv +55cfa6: jmp 0x55e894 +55cfab: mov eax, dword ptr [ebp - 4] +55cfae: cmp dword ptr [eax + 0x57c], 6 +55cfb5: jne 0x55d1eb +55cfbb: mov eax, dword ptr [ebp - 0x2c] +55cfbe: call 0x4047a8 ; Apollo5D6!@Apodset@TApolloTable@GoTop$qqrv +55cfc3: mov eax, dword ptr [ebp - 0x2c] +55cfc6: call 0x404820 ; Apollo5D6!@Apodset@TApolloTable@GetSXRecCount$qqrv +55cfcb: mov ebx, eax +55cfcd: jmp 0x55d18a +55cfd2: lea ecx, [ebp - 0xa50] +55cfd8: mov edx, 0x55f540 ; 'name1' +55cfdd: mov eax, dword ptr [ebp - 0x2c] +55cfe0: call 0x404790 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString +55cfe5: mov eax, dword ptr [ebp - 0xa50] +55cfeb: lea edx, [ebp - 0xa4c] +55cff1: call 0x401e40 ; rtl60!@Sysutils@TrimRight$qqrx17System@AnsiString +55cff6: push dword ptr [ebp - 0xa4c] +55cffc: lea ecx, [ebp - 0xa58] +55d002: mov edx, 0x55f550 ; 'size1' +55d007: mov eax, dword ptr [ebp - 0x2c] +55d00a: call 0x404790 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString +55d00f: mov eax, dword ptr [ebp - 0xa58] +55d015: lea edx, [ebp - 0xa54] +55d01b: call 0x401e40 ; rtl60!@Sysutils@TrimRight$qqrx17System@AnsiString +55d020: push dword ptr [ebp - 0xa54] +55d026: push 0x55f560 ; ' / ' +55d02b: lea ecx, [ebp - 0xa60] +55d031: mov edx, 0x55f56c ; 'unit1' +55d036: mov eax, dword ptr [ebp - 0x2c] +55d039: call 0x404790 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString +55d03e: mov eax, dword ptr [ebp - 0xa60] +55d044: lea edx, [ebp - 0xa5c] +55d04a: call 0x401e40 ; rtl60!@Sysutils@TrimRight$qqrx17System@AnsiString +55d04f: push dword ptr [ebp - 0xa5c] +55d055: lea eax, [ebp - 0xa48] +55d05b: mov edx, 4 +55d060: call 0x4012b8 ; rtl60!@System@@LStrCatN$qqrv +55d065: mov eax, dword ptr [ebp - 0xa48] +55d06b: push eax +55d06c: push 0x55f57c ; '처리된 항목수:' +55d071: lea edx, [ebp - 0xa68] +55d077: mov eax, dword ptr [ebp - 0x24] +55d07a: call 0x401e48 ; rtl60!@Sysutils@IntToStr$qqri +55d07f: push dword ptr [ebp - 0xa68] +55d085: push 0x55f594 ; '개' +55d08a: lea eax, [ebp - 0xa64] +55d090: mov edx, 3 +55d095: call 0x4012b8 ; rtl60!@System@@LStrCatN$qqrv +55d09a: mov edx, dword ptr [ebp - 0xa64] +55d0a0: mov eax, 0x55fac8 ; '전회<-누계, 금회=0' +55d0a5: pop ecx +55d0a6: call 0x42c83c +55d0ab: mov eax, dword ptr [ebp - 0x2c] +55d0ae: call 0x403d38 ; dbrtl60!@Db@TDataSet@Edit$qqrv +55d0b3: mov edx, 0x55f8b0 ; 'QTY2' +55d0b8: mov eax, dword ptr [ebp - 0x2c] +55d0bb: call 0x404770 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +55d0c0: lea eax, [ebp - 0xa78] +55d0c6: call 0x4013d8 ; rtl60!@System@@VarFromReal$qqrv +55d0cb: lea ecx, [ebp - 0xa78] +55d0d1: mov edx, 0x55f8c0 ; 'QTY3' +55d0d6: mov eax, dword ptr [ebp - 0x2c] +55d0d9: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55d0de: lea eax, [ebp - 0xa88] +55d0e4: xor edx, edx +55d0e6: mov cl, 1 +55d0e8: call 0x4013c0 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +55d0ed: lea ecx, [ebp - 0xa88] +55d0f3: mov edx, 0x55fa6c ; 'QTY4' +55d0f8: mov eax, dword ptr [ebp - 0x2c] +55d0fb: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55d100: mov edx, 0x55f9c0 ; 'T_AMT2' +55d105: mov eax, dword ptr [ebp - 0x2c] +55d108: call 0x404770 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString +55d10d: lea eax, [ebp - 0xa98] +55d113: call 0x4013d8 ; rtl60!@System@@VarFromReal$qqrv +55d118: lea ecx, [ebp - 0xa98] +55d11e: mov edx, 0x55fa40 ; 'T_AMT3' +55d123: mov eax, dword ptr [ebp - 0x2c] +55d126: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55d12b: lea eax, [ebp - 0xaa8] +55d131: xor edx, edx +55d133: mov cl, 1 +55d135: call 0x4013c0 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +55d13a: lea ecx, [ebp - 0xaa8] +55d140: mov edx, 0x55fa7c ; 'T_AMT4' +55d145: mov eax, dword ptr [ebp - 0x2c] +55d148: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55d14d: mov edx, 1 +55d152: mov eax, dword ptr [ebp - 0x2c] +55d155: call 0x4047b8 ; Apollo5D6!@Apodset@TApolloTable@Skip$qqri +55d15a: fild dword ptr [ebp - 0x24] +55d15d: mov dword ptr [ebp - 0x154], ebx +55d163: fild dword ptr [ebp - 0x154] +55d169: fdivp st(1) +55d16b: fmul dword ptr [0x55f5f0] ; =100.0 +55d171: call 0x401078 ; rtl60!@System@@ROUND$qqrv +55d176: mov edx, eax +55d178: mov eax, dword ptr [0x5e6090] +55d17d: mov eax, dword ptr [eax] +55d17f: mov eax, dword ptr [eax + 0x5c] +55d182: call 0x403f90 ; vcl60!@Comctrls@TProgressBar@SetPosition$qqri +55d187: inc dword ptr [ebp - 0x24] +55d18a: mov eax, dword ptr [ebp - 0x2c] +55d18d: mov edx, dword ptr [eax] +55d18f: call dword ptr [edx + 0x270] +55d195: test al, al +55d197: je 0x55cfd2 +55d19d: mov eax, dword ptr [ebp - 0x2c] +55d1a0: call 0x4046f0 ; Apollo5D6!@Apodset@TApolloTable@Commit$qqrv +55d1a5: mov eax, dword ptr [ebp - 4] +55d1a8: mov eax, dword ptr [eax + 0x2f4] +55d1ae: call 0x403d38 ; dbrtl60!@Db@TDataSet@Edit$qqrv +55d1b3: lea eax, [ebp - 0xab8] +55d1b9: mov edx, dword ptr [ebp - 0x28] +55d1bc: inc edx +55d1bd: mov cl, 0xfc +55d1bf: call 0x4013c0 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi +55d1c4: lea ecx, [ebp - 0xab8] +55d1ca: mov eax, dword ptr [ebp - 4] +55d1cd: mov eax, dword ptr [eax + 0x2f4] +55d1d3: mov edx, 0x55f440 ; 'k_ord' +55d1d8: call 0x403d08 ; dbrtl60!@Db@TDataSet@SetFieldValue$qqrx17System@AnsiStringrx14System@Variant +55d1dd: mov eax, dword ptr [ebp - 4] +55d1e0: mov eax, dword ptr [eax + 0x2f4] +55d1e6: .byte 0xe8 +55d1e7: .byte 0x05 +55d1e8: jne 0x55d1d4 diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/TPM_JAB_K.json b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/TPM_JAB_K.json new file mode 100644 index 000000000..e00dd5269 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/TPM_JAB_K.json @@ -0,0 +1,975 @@ +{ + "class": "TPM_JAB_K", + "name": "PM_JAB_K", + "flags": [], + "child_pos": null, + "properties": { + "Left": 230, + "Top": 179, + "Width": 696, + "Height": 480, + "Caption": "PM_JAB_K", + "Color": "clBtnFace", + "Font.Charset": "HANGEUL_CHARSET", + "Font.Color": "clWindowText", + "Font.Height": -16, + "Font.Name": "굴림체", + "Font.Style": [], + "OldCreateOrder": false, + "Scaled": false, + "WindowState": "wsMaximized", + "PixelsPerInch": 96, + "TextHeight": 16 + }, + "children": [ + { + "class": "THRPage", + "name": "HRPage1", + "flags": [], + "child_pos": null, + "properties": { + "Left": 0, + "Top": 0, + "Width": 1123, + "Height": 794, + "AfterPrint": "HRPage1AfterPrint", + "BorderStyle.Slash": [], + "BorderStyle.Lines": [], + "BorderStyle.DesignPen.Color": "clSilver", + "Font.Charset": "HANGEUL_CHARSET", + "Font.Color": "clWindowText", + "Font.Height": -16, + "Font.Name": "굴림체", + "Font.Style": [], + "ParentFont": false, + "PageInfo.Width": 210, + "PageInfo.Height": 297, + "PageInfo.MargineLeft": 20, + "PageInfo.MargineTop": 15, + "PageInfo.MargineRight": 24, + "PageInfo.MargineBottom": 15, + "PageInfo.Orientation": "hpoLandscape", + "PrintZoom": 100, + "Ruler": true, + "Units": "hpuMM" + }, + "children": [ + { + "class": "THRPageBand", + "name": "HRPageBand3", + "flags": [], + "child_pos": null, + "properties": { + "Left": 76, + "Top": 107, + "Width": 954, + "Height": 595, + "LocateAtPage": "alNone", + "BandType": "hpbPageHeader", + "Alignment": "taLeftJustify", + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop", + "lnRight", + "lnBottom" + ], + "BorderStyle.DesignPen.Color": "clGreen", + "BorderStyle.Transparent": true + }, + "children": [ + { + "class": "THRLabel", + "name": "lb_Smpl", + "flags": [], + "child_pos": null, + "properties": { + "Left": 72, + "Top": 80, + "Width": 500, + "Height": 168, + "Alignment": "taCenter", + "Font.Charset": "ANSI_CHARSET", + "Font.Color": 13290239, + "Font.Height": -160, + "Font.Name": "Times New Roman", + "Font.Style": [], + "FontWidth": 30, + "ParentFont": false, + "Transparent": true, + "Visible": false, + "BorderStyle.ShadowBrush.Color": "clGray", + "BorderStyle.ShadowWidth": 3, + "BorderStyle.Slash": [ + "slNormal" + ], + "BorderStyle.Lines": [], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Color": 13290239, + "BorderStyle.Pen.Width": 3, + "BorderStyle.Transparent": true, + "Caption": "S A M P L E", + "LocateAtText": "hllNone" + }, + "children": [] + } + ] + }, + { + "class": "THRPageBand", + "name": "HRPageBand1", + "flags": [], + "child_pos": null, + "properties": { + "Left": 76, + "Top": 57, + "Width": 956, + "Height": 50, + "LocateAtPage": "alTop", + "BandType": "hpbPageHeader", + "Alignment": "taLeftJustify", + "BorderStyle.Slash": [], + "BorderStyle.Lines": [], + "BorderStyle.DesignPen.Color": "clGreen", + "BorderStyle.Transparent": true + }, + "children": [ + { + "class": "THRLabel", + "name": "HlCap", + "flags": [], + "child_pos": null, + "properties": { + "Left": 0, + "Top": 0, + "Width": 954, + "Height": 27, + "Alignment": "taCenter", + "Font.Charset": "HANGEUL_CHARSET", + "Font.Color": "clBlack", + "Font.Height": -21, + "Font.Name": "굴림체", + "Font.Style": [ + "fsBold", + "fsUnderline" + ], + "FontWidth": 6, + "ParentFont": false, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Transparent": true, + "Caption": "기 성 부 분 총 괄 내 역 서", + "LocateAtText": "hllNone" + }, + "children": [] + } + ] + }, + { + "class": "THRPageBand", + "name": "HRPageBand2", + "flags": [], + "child_pos": null, + "properties": { + "Left": 76, + "Top": 701, + "Width": 956, + "Height": 36, + "LocateAtPage": "alBottom", + "BandType": "hpbPageFooter", + "Alignment": "taLeftJustify", + "BorderStyle.Slash": [], + "BorderStyle.Lines": [], + "BorderStyle.DesignPen.Color": "clGreen", + "BorderStyle.Transparent": true + }, + "children": [ + { + "class": "THRLabel", + "name": "CopName", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 900000, + "Left": 0, + "Top": 4, + "Width": 954, + "Height": 22, + "Alignment": "taRightJustify", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Transparent": true, + "BorderMargine.Top": 4, + "Caption": "경영정보(주)", + "LocateAtText": "hllNone" + }, + "children": [] + }, + { + "class": "THRCalc", + "name": "HrPage", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 900000, + "Left": 0, + "Top": 4, + "Width": 954, + "Height": 22, + "Alignment": "taCenter", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Transparent": true, + "BorderMargine.Top": 4, + "ResetType": "hrtResetValue", + "ResetValue": 1, + "CalcFunction": "hcfPageNo", + "DisplayFormat": "- #,# -", + "LocateAtText": "hllNone" + }, + "children": [] + } + ] + }, + { + "class": "THRGroup", + "name": "HRGroup1", + "flags": [], + "child_pos": null, + "properties": { + "Left": 76, + "Top": 151, + "Width": 954, + "Height": 22, + "BeforePrint": "HRGroup1BeforePrint", + "Alignment": "taLeftJustify", + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnRight" + ], + "BorderStyle.DesignPen.Color": "clAqua", + "BorderStyle.Transparent": true, + "GroupStyle.RepeatToEOP": true, + "GroupStyle.RepeatControls": true, + "GroupStyle.SuppressText": true, + "GroupStyle.PrintOnRepeat": true, + "LocateAtPage": "hgaNone" + }, + "children": [ + { + "class": "THRDBText", + "name": "txITNUM", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 200010, + "Left": 0, + "Top": 0, + "Width": 67, + "Height": 23, + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 5, + "DataField": "ITNUM", + "DataSource": "ds_Jab_K", + "TextFunction": "htfNone" + }, + "children": [] + }, + { + "class": "THRDBText", + "name": "txNAME1", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 200020, + "Left": 66, + "Top": 0, + "Width": 157, + "Height": 23, + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 5, + "DataSource": "ds_Jab_K", + "TextFunction": "htfNone" + }, + "children": [] + }, + { + "class": "THRDBText", + "name": "txSIZE1", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 200030, + "Left": 222, + "Top": 0, + "Width": 157, + "Height": 23, + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 5, + "DataField": "SIZE1", + "DataSource": "ds_Jab_K", + "TextFunction": "htfNone" + }, + "children": [] + }, + { + "class": "THRDBText", + "name": "txBDCODE1", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 200080, + "Left": 860, + "Top": 0, + "Width": 94, + "Height": 23, + "Alignment": "taRightJustify", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 5, + "DataField": "BDCODE1", + "TextFunction": "htfNone" + }, + "children": [] + } + ] + }, + { + "class": "THRGroupBand", + "name": "HRGroupBand0", + "flags": [], + "child_pos": null, + "properties": { + "Left": 76, + "Top": 107, + "Width": 954, + "Height": 44, + "AlignWithGroup": "hbaGroupBoth", + "LocateAtGroup": "hblTopAttach", + "BodyGroup": "HRGroup1", + "BandType": "hgbGroupHeader", + "Alignment": "taLeftJustify", + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnTop" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Transparent": true + }, + "children": [ + { + "class": "THRLabel", + "name": "lbFld01", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 100010, + "Left": 0, + "Top": 0, + "Width": 67, + "Height": 45, + "Alignment": "taCenter", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop", + "lnBottom" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 18, + "AlignWithText.Left": true, + "AlignWithText.Top": true, + "AlignWithText.Width": true, + "Caption": "공 종", + "LocateAtText": "hllNone" + }, + "children": [] + }, + { + "class": "THRLabel", + "name": "lbFld02", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 100020, + "Left": 66, + "Top": 0, + "Width": 157, + "Height": 45, + "Alignment": "taCenter", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop", + "lnBottom" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 18, + "AlignWithText.Left": true, + "AlignWithText.Top": true, + "AlignWithText.Width": true, + "Caption": "명 칭", + "LocateAtText": "hllNone" + }, + "children": [] + }, + { + "class": "THRLabel", + "name": "lbFld03", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 100030, + "Left": 222, + "Top": 0, + "Width": 157, + "Height": 45, + "Alignment": "taCenter", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop", + "lnBottom" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 18, + "AlignWithText.Left": true, + "AlignWithText.Top": true, + "AlignWithText.Width": true, + "Caption": "규 격", + "LocateAtText": "hllNone" + }, + "children": [] + }, + { + "class": "THRLabel", + "name": "lbFld04", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 110040, + "Left": 378, + "Top": 0, + "Width": 87, + "Height": 23, + "Alignment": "taCenter", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 5, + "AlignWithText.Left": true, + "AlignWithText.Top": true, + "AlignWithText.Height": true, + "Caption": "계 약", + "LocateAtText": "hllNone" + }, + "children": [] + }, + { + "class": "THRLabel", + "name": "lbFld04_1", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 120041, + "Left": 378, + "Top": 22, + "Width": 87, + "Height": 23, + "Alignment": "taCenter", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop", + "lnBottom" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 5, + "AlignWithText.Left": true, + "AlignWithText.Width": true, + "AlignWithText.Height": true, + "Caption": "금 액", + "LocateAtText": "hllNone" + }, + "children": [] + }, + { + "class": "THRLabel", + "name": "lbFld05", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 110050, + "Left": 464, + "Top": 0, + "Width": 133, + "Height": 23, + "Alignment": "taCenter", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 5, + "AlignWithText.Left": true, + "AlignWithText.Top": true, + "AlignWithText.Height": true, + "Caption": "전 회", + "LocateAtText": "hllNone" + }, + "children": [] + }, + { + "class": "THRLabel", + "name": "lbFld05_1", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 120051, + "Left": 464, + "Top": 22, + "Width": 87, + "Height": 23, + "Alignment": "taCenter", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop", + "lnBottom" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 5, + "AlignWithText.Left": true, + "AlignWithText.Width": true, + "AlignWithText.Height": true, + "Caption": "금 액", + "LocateAtText": "hllNone" + }, + "children": [] + }, + { + "class": "THRLabel", + "name": "lbFld05_2", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 120052, + "Left": 550, + "Top": 22, + "Width": 47, + "Height": 23, + "Alignment": "taCenter", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop", + "lnBottom" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 5, + "AlignWithText.Left": true, + "AlignWithText.Width": true, + "AlignWithText.Height": true, + "Caption": "비율", + "LocateAtText": "hllNone" + }, + "children": [] + }, + { + "class": "THRLabel", + "name": "lbFld06", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 110060, + "Left": 596, + "Top": 0, + "Width": 133, + "Height": 23, + "Alignment": "taCenter", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 5, + "AlignWithText.Left": true, + "AlignWithText.Top": true, + "AlignWithText.Height": true, + "Caption": "금 회", + "LocateAtText": "hllNone" + }, + "children": [] + }, + { + "class": "THRLabel", + "name": "lbFld06_1", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 120061, + "Left": 596, + "Top": 22, + "Width": 87, + "Height": 23, + "Alignment": "taCenter", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop", + "lnBottom" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 5, + "AlignWithText.Left": true, + "AlignWithText.Width": true, + "AlignWithText.Height": true, + "Caption": "금 액", + "LocateAtText": "hllNone" + }, + "children": [] + }, + { + "class": "THRLabel", + "name": "lbFld06_2", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 120062, + "Left": 682, + "Top": 22, + "Width": 47, + "Height": 23, + "Alignment": "taCenter", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop", + "lnBottom" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 5, + "AlignWithText.Left": true, + "AlignWithText.Width": true, + "AlignWithText.Height": true, + "Caption": "비율", + "LocateAtText": "hllNone" + }, + "children": [] + }, + { + "class": "THRLabel", + "name": "lbFld07", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 110070, + "Left": 728, + "Top": 0, + "Width": 133, + "Height": 23, + "Alignment": "taCenter", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 5, + "AlignWithText.Left": true, + "AlignWithText.Top": true, + "AlignWithText.Height": true, + "Caption": "누 계", + "LocateAtText": "hllNone" + }, + "children": [] + }, + { + "class": "THRLabel", + "name": "lbFld07_1", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 120071, + "Left": 728, + "Top": 22, + "Width": 87, + "Height": 23, + "Alignment": "taCenter", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop", + "lnBottom" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 5, + "AlignWithText.Left": true, + "AlignWithText.Width": true, + "AlignWithText.Height": true, + "Caption": "금 액", + "LocateAtText": "hllNone" + }, + "children": [] + }, + { + "class": "THRLabel", + "name": "lbFld07_2", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 120072, + "Left": 814, + "Top": 22, + "Width": 47, + "Height": 23, + "Alignment": "taCenter", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop", + "lnBottom" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 5, + "AlignWithText.Left": true, + "AlignWithText.Width": true, + "AlignWithText.Height": true, + "Caption": "비율", + "LocateAtText": "hllNone" + }, + "children": [] + }, + { + "class": "THRLabel", + "name": "lbFld08", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 100080, + "Left": 860, + "Top": 0, + "Width": 94, + "Height": 45, + "Alignment": "taCenter", + "FontWidth": 5, + "Transparent": true, + "BorderStyle.Slash": [], + "BorderStyle.Lines": [ + "lnLeft", + "lnTop", + "lnBottom" + ], + "BorderStyle.DesignPen.Color": "clSilver", + "BorderStyle.Pen.Width": 0, + "BorderStyle.Transparent": true, + "BorderMargine.Top": 18, + "AlignWithText.Left": true, + "AlignWithText.Top": true, + "AlignWithText.Width": true, + "Caption": "비 고", + "LocateAtText": "hllNone" + }, + "children": [] + } + ] + } + ] + }, + { + "class": "THyperReport", + "name": "Hrp", + "flags": [], + "child_pos": null, + "properties": { + "PreviewOptions.ShowModal": true, + "PreviewOptions.WindowState": "wsMaximized", + "PreviewOptions.ZoomMin": 50, + "PreviewOptions.ZoomMax": 150, + "PreviewOptions.ZoomStep": 10, + "PreviewOptions.MargineColor": "clWhite", + "PreviewOptions.VisibleButtons": [ + "btFirst", + "btPrev", + "btNext", + "btLast", + "btStart", + "btStop", + "btZoomIn", + "btZoomOut", + "btSave", + "btPrint" + ], + "SuppressHeaderGroup": true, + "EnableSaveReport": true, + "SaveAllProperties": true, + "OnSaveDialog": "HrpSaveDialog", + "OnShowPrintDialog": "HrpShowPrintDialog", + "Left": 32, + "Top": 24 + }, + "children": [] + }, + { + "class": "THRLink", + "name": "HRLink1", + "flags": [], + "child_pos": null, + "properties": { + "LinkInfo.SourceTrees.Strings": [ + " 0 0PM_JAB_K.ds_Jab_K" + ], + "LinkInfo.MasterFields.Strings": [ + "Master;" + ], + "LinkInfo.DetailFields.Strings": [ + "Detail;" + ], + "LinkInfo.SelfKyFields.Strings": [ + "SelfKy;" + ], + "LinkInfo.GroupOrders.Strings": [ + "Groups;HRGroup1;0::1:1:1:0:" + ], + "Left": 64, + "Top": 24 + }, + "children": [] + }, + { + "class": "TDataSource", + "name": "ds_Jab_K", + "flags": [], + "child_pos": null, + "properties": { + "DataSet": "tb_Jab_K", + "Left": 160, + "Top": 24 + }, + "children": [] + }, + { + "class": "TApolloTable", + "name": "tb_Jab_K", + "flags": [], + "child_pos": null, + "properties": { + "DatabaseName": "ST_Work", + "CachedUpdates": false, + "FieldDefs": [], + "IndexDefs": [], + "Sequenced": false, + "TableName": "PRT.DBF", + "TableType": "ttSXNSX", + "Left": 112, + "Top": 24 + }, + "children": [] + } + ] +} \ No newline at end of file diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/TWM_KANJUB_K.json b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/TWM_KANJUB_K.json new file mode 100644 index 000000000..424c3c589 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/evidence/TWM_KANJUB_K.json @@ -0,0 +1,982 @@ +{ + "class": "TwM_KanJub_K", + "name": "wM_KanJub_K", + "flags": [], + "child_pos": null, + "properties": { + "Left": 80, + "Top": 103, + "HelpContext": 4700, + "BorderIcons": [ + "biSystemMenu", + "biMaximize" + ], + "BorderStyle": "bsSingle", + "Caption": "< 기성 제잡비 계산서 >", + "ClientHeight": 614, + "ClientWidth": 954, + "Color": "clBtnFace", + "Constraints.MinWidth": 910, + "Font.Charset": "HANGEUL_CHARSET", + "Font.Color": "clWindowText", + "Font.Height": -12, + "Font.Name": "굴림체", + "Font.Style": [], + "KeyPreview": true, + "OldCreateOrder": false, + "Scaled": false, + "OnCloseQuery": "FormCloseQuery", + "OnCreate": "FormCreate", + "OnKeyDown": "FormKeyDown", + "PixelsPerInch": 96, + "TextHeight": 12 + }, + "children": [ + { + "class": "TSplitter", + "name": "Splitter1", + "flags": [], + "child_pos": null, + "properties": { + "Left": 0, + "Top": 239, + "Width": 954, + "Height": 3, + "Cursor": "crVSplit", + "Align": "alTop", + "AutoSnap": false, + "MinSize": 70 + }, + "children": [] + }, + { + "class": "TPanel", + "name": "Panel1", + "flags": [], + "child_pos": null, + "properties": { + "Left": 0, + "Top": 0, + "Width": 954, + "Height": 100, + "Align": "alTop", + "TabOrder": 0, + "DesignSize": [ + 954, + 100 + ] + }, + "children": [ + { + "class": "TSpeedButton", + "name": "sBtn_Quit", + "flags": [], + "child_pos": null, + "properties": { + "Left": 739, + "Top": 6, + "Width": 210, + "Height": 29, + "Cursor": "crHandPoint", + "Anchors": [ + "akTop", + "akRight" + ], + "Caption": " 종 료 (&Q) ", + "Flat": true, + "Glyph.Data": { + "binary_size": 1094, + "binary_hex": "42040000424d4204000000000000420000002800000020000000100000000100" + }, + "NumGlyphs": 2, + "ParentShowHint": false, + "ShowHint": true, + "OnClick": "sBtn_QuitClick" + }, + "children": [] + }, + { + "class": "TSpeedButton", + "name": "sBtn_Calc_Jab", + "flags": [], + "child_pos": null, + "properties": { + "Left": 739, + "Top": 35, + "Width": 210, + "Height": 29, + "Cursor": "crHandPoint", + "Anchors": [ + "akTop", + "akRight" + ], + "Caption": "총공사비 계산(&C)", + "Enabled": false, + "Flat": true, + "Glyph.Data": { + "binary_size": 1094, + "binary_hex": "42040000424d4204000000000000420000002800000020000000100000000100" + }, + "NumGlyphs": 2, + "ParentShowHint": false, + "ShowHint": true, + "OnClick": "sBtn_Calc_JabClick" + }, + "children": [] + }, + { + "class": "TSpeedButton", + "name": "sBtn_Set_Rate", + "flags": [], + "child_pos": null, + "properties": { + "Left": 508, + "Top": 6, + "Width": 230, + "Height": 58, + "Cursor": "crHandPoint", + "Caption": "[ 금 회 간 접 비 적 용 ] \r\r금회직접공사비 x 계약제잡비율", + "Flat": true, + "Font.Charset": "HANGEUL_CHARSET", + "Font.Color": "clWindowText", + "Font.Height": -12, + "Font.Name": "굴림체", + "Font.Style": [ + "fsBold" + ], + "NumGlyphs": 2, + "ParentFont": false, + "ParentShowHint": false, + "ShowHint": true, + "OnClick": "sBtn_Set_RateClick" + }, + "children": [] + }, + { + "class": "TLabel", + "name": "Label1", + "flags": [], + "child_pos": null, + "properties": { + "Left": 19, + "Top": 73, + "Width": 72, + "Height": 12, + "Caption": "부가가치세 :" + }, + "children": [] + }, + { + "class": "TLabel", + "name": "Label2", + "flags": [], + "child_pos": null, + "properties": { + "Left": 355, + "Top": 73, + "Width": 90, + "Height": 12, + "Caption": "공급가액 절사 :" + }, + "children": [] + }, + { + "class": "TLabel", + "name": "Label3", + "flags": [], + "child_pos": null, + "properties": { + "Left": 643, + "Top": 73, + "Width": 90, + "Height": 12, + "Caption": "총공사비 절사 :" + }, + "children": [] + }, + { + "class": "TRadioGroup", + "name": "rd_Filter", + "flags": [], + "child_pos": null, + "properties": { + "Left": 6, + "Top": 1, + "Width": 443, + "Height": 64, + "Columns": 3, + "ItemIndex": 2, + "Items.Strings": [ + " 소 계(+=) 이상", + " 계(+==) 이상", + " 합 계(+===) 이상", + " 총 계(+====) 이상", + " 총합계(+=====) 이상" + ], + "TabOrder": 0, + "OnClick": "rd_FilterClick" + }, + "children": [] + }, + { + "class": "TwCombo", + "name": "cmBx_Buga", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 59, + "Left": 96, + "Top": 70, + "Width": 178, + "Hint": "부가가치세의 종류를 선택합니다.", + "Color": 8454143, + "Ctl3D": false, + "TabOrder": 1, + "Font.Charset": "HANGEUL_CHARSET", + "Font.Color": "clWindowText", + "Font.Height": -12, + "Font.Name": "굴림체", + "Font.Style": [], + "ImeName": "한국어(한글) (MS-IME98)", + "ParentCtl3D": false, + "ParentFont": false, + "OnKeyDown": "cmBx_BugaKeyDown", + "EnableNull": false, + "ListOption.Color": 16776176, + "ListOption.Font.Charset": "HANGEUL_CHARSET", + "ListOption.Font.Color": "clBlack", + "ListOption.Font.Height": -12, + "ListOption.Font.Name": "굴림체", + "ListOption.Font.Style": [], + "ListOption.ShowTitle": true, + "ListOption.Titles": "부가가치세", + "Items.Strings": [ + "(0) 직접입력", + "(1) 공급가액의 10%", + "(2) 재료비의 10%", + "(3) 재료비+산출경비의 10%" + ], + "Values.Strings": [ + "0", + "1", + "2", + "3" + ], + "OnValueChange": "cmBx_ValueChange" + }, + "children": [] + }, + { + "class": "TwCombo", + "name": "cmBx_JeolSa", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 60, + "Left": 453, + "Top": 70, + "Width": 138, + "Color": "clBlue", + "Ctl3D": false, + "TabOrder": 2, + "Font.Charset": "HANGEUL_CHARSET", + "Font.Color": "clWhite", + "Font.Height": -12, + "Font.Name": "굴림체", + "Font.Style": [], + "ImeName": "한국어(한글) (MS-IME98)", + "ParentCtl3D": false, + "ParentFont": false, + "OnKeyDown": "cmBx_BugaKeyDown", + "EnableNull": false, + "ListOption.Color": "clMoneyGreen", + "ListOption.Font.Charset": "HANGEUL_CHARSET", + "ListOption.Font.Color": "clBlack", + "ListOption.Font.Height": -12, + "ListOption.Font.Name": "굴림체", + "ListOption.Font.Style": [], + "ListOption.ItemCount": 9, + "ListOption.ShowTitle": true, + "ListOption.Titles": "공급가액절사기준", + "Items.Strings": [ + " 총공사비에서 조정", + " 10원 미만", + " 100원 미만", + " 1,000원 미만", + " 10,000원 미만", + " 100,000원 미만", + " 1,000,000원 미만", + " 10,000,000원 미만", + "100,000,000원 미만" + ], + "Values.Strings": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8" + ], + "OnValueChange": "cmBx_ValueChange" + }, + "children": [] + }, + { + "class": "TwCombo", + "name": "cmBx_Tot_Jeol", + "flags": [], + "child_pos": null, + "properties": { + "Tag": 700, + "Left": 740, + "Top": 70, + "Width": 138, + "Hint": "총공사비 금액에서 절사 기준을 선택합니다.\r\n절사된 금액은 이윤에서 자동보정 됩니다.\r\n\r\n도급액 버림기준(기본기준 변경)을 선택하면 \r\n총공사비 조정기준을 선택할 수 없습니다.", + "Color": "clBlue", + "Ctl3D": false, + "TabOrder": 3, + "Font.Charset": "HANGEUL_CHARSET", + "Font.Color": "clWhite", + "Font.Height": -12, + "Font.Name": "굴림체", + "Font.Style": [], + "ImeName": "한국어(한글) (MS-IME98)", + "ParentCtl3D": false, + "ParentFont": false, + "ParentShowHint": false, + "ShowHint": true, + "OnKeyDown": "cmBx_BugaKeyDown", + "EnableNull": false, + "ListOption.Color": "clMoneyGreen", + "ListOption.Font.Charset": "HANGEUL_CHARSET", + "ListOption.Font.Color": "clBlack", + "ListOption.Font.Height": -12, + "ListOption.Font.Name": "굴림체", + "ListOption.Font.Style": [], + "ListOption.ItemCount": 9, + "ListOption.ShowTitle": true, + "ListOption.TitleColor": "clMoneyGreen", + "ListOption.Titles": "총공사비절사기준", + "Items.Strings": [ + " 이윤금액 직접입력", + " 10원 미만", + " 100원 미만", + " 1,000원 미만", + " 10,000원 미만", + " 100,000원 미만", + " 1,000,000원 미만", + " 10,000,000원 미만", + "100,000,000원 미만" + ], + "Values.Strings": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8" + ], + "OnValueChange": "cmBx_ValueChange" + }, + "children": [] + } + ] + }, + { + "class": "TStatusBar", + "name": "StBar", + "flags": [], + "child_pos": null, + "properties": { + "Left": 0, + "Top": 595, + "Width": 954, + "Height": 19, + "Panels": [ + { + "Bevel": "pbNone", + "Width": 259 + }, + { + "Alignment": "taRightJustify", + "Width": 94 + }, + { + "Alignment": "taRightJustify", + "Width": 94 + }, + { + "Alignment": "taRightJustify", + "Width": 46 + }, + { + "Alignment": "taRightJustify", + "Bevel": "pbRaised", + "Width": 94 + }, + { + "Alignment": "taRightJustify", + "Bevel": "pbRaised", + "Width": 46 + }, + { + "Alignment": "taRightJustify", + "Bevel": "pbRaised", + "Width": 94 + }, + { + "Alignment": "taRightJustify", + "Bevel": "pbRaised", + "Width": 46 + }, + { + "Bevel": "pbNone", + "Width": 50 + } + ], + "SimplePanel": false + }, + "children": [] + }, + { + "class": "TRealDBGrid", + "name": "rGrd_BoqXX", + "flags": [], + "child_pos": null, + "properties": { + "Left": 0, + "Top": 100, + "Width": 954, + "Height": 139, + "ImeName": "한국어(한글) (MS-IME98)", + "TabOrder": 1, + "Columns": [ + { + "Footer.Style": [], + "Group": 0, + "ReadOnly": true, + "Title.Caption": "공종", + "FieldName": "ITNUM", + "ColWidth": 76, + "GrpWidth": 34 + }, + { + "Footer.Style": [], + "Group": 1, + "ReadOnly": true, + "Title.Caption": "명 칭", + "FieldName": "NAME1", + "ColWidth": 184, + "GrpWidth": 186 + }, + { + "Footer.Style": [], + "Group": 2, + "ReadOnly": true, + "Title.Caption": "규 격", + "FieldName": "SIZE1", + "ColWidth": 184, + "GrpWidth": 186 + }, + { + "Alignment": "taRightJustify", + "Color": "clMoneyGreen", + "Footer.Style": [], + "Group": 3, + "ReadOnly": true, + "Title.Caption": "도 급 액", + "ColWidth": 94, + "GrpWidth": 94 + }, + { + "Alignment": "taRightJustify", + "Color": "clGradientInactiveCaption", + "Footer.Style": [], + "Group": 4, + "ReadOnly": true, + "Title.Caption": "금 액", + "ColWidth": 94, + "GrpWidth": 94 + }, + { + "Alignment": "taRightJustify", + "Color": "clGradientInactiveCaption", + "Footer.Style": [], + "Group": 4, + "LevelIndex": 1, + "ReadOnly": true, + "Title.Caption": "비율", + "ColWidth": 46, + "GrpWidth": 46 + }, + { + "Alignment": "taRightJustify", + "Color": "clGradientActiveCaption", + "Footer.Style": [], + "Group": 5, + "ReadOnly": true, + "Title.Caption": "금 액", + "ColWidth": 94, + "GrpWidth": 94 + }, + { + "Alignment": "taRightJustify", + "Color": "clGradientActiveCaption", + "Footer.Style": [], + "Group": 5, + "LevelIndex": 1, + "ReadOnly": true, + "Title.Caption": "비율", + "ColWidth": 46, + "GrpWidth": 46 + }, + { + "Alignment": "taRightJustify", + "Color": "clInfoBk", + "Footer.Style": [], + "Group": 6, + "ReadOnly": true, + "Title.Caption": "금 액", + "ColWidth": 94, + "GrpWidth": 94 + }, + { + "Alignment": "taRightJustify", + "Color": "clInfoBk", + "Footer.Style": [], + "Group": 6, + "LevelIndex": 1, + "ReadOnly": true, + "Title.Caption": "비율", + "ColWidth": 46, + "GrpWidth": 46 + } + ], + "Groups": [ + { + "Title.Caption": "공 종", + "Title.Height": 22, + "Title.Visible": false, + "Width": 34, + "Weights": { + "binary_size": 16, + "binary_hex": "01010101010101010101010101010101" + } + }, + { + "Title.Caption": "명칭", + "Title.Height": 22, + "Title.Visible": false, + "Width": 186, + "Weights": { + "binary_size": 16, + "binary_hex": "01010101010101010101010101010101" + } + }, + { + "Title.Caption": "규격", + "Title.Height": 22, + "Title.Visible": false, + "Width": 186, + "Weights": { + "binary_size": 16, + "binary_hex": "01010101010101010101010101010101" + } + }, + { + "Title.Caption": "도 급 액", + "Title.Height": 22, + "Title.Visible": false, + "Width": 94, + "Weights": { + "binary_size": 16, + "binary_hex": "01010101010101010101010101010101" + } + }, + { + "Title.Caption": "전회까지의 기성액", + "Title.Height": 22, + "Width": 140, + "Weights": { + "binary_size": 16, + "binary_hex": "01010101010101010101010101010101" + } + }, + { + "Title.Caption": "금 회 기 성 액", + "Title.Height": 22, + "Width": 140, + "Weights": { + "binary_size": 16, + "binary_hex": "01010101010101010101010101010101" + } + }, + { + "Title.Caption": "누 계", + "Title.Height": 22, + "Width": 140, + "Weights": { + "binary_size": 16, + "binary_hex": "01010101010101010101010101010101" + } + } + ], + "Footers": [], + "Align": "alTop", + "Headers.Lines.CellColor": "clBlack", + "Headers.Lines.LevelColor": "clBlack", + "Headers.ColHeight": 21, + "Headers.GrpHeight": 46, + "FixedStyle.Lines.CellColor": "clBlack", + "FixedStyle.Lines.LevelColor": "clBlack", + "GroupMode": true, + "Indicators.Font.Charset": "DEFAULT_CHARSET", + "Indicators.Font.Color": "clWindowText", + "Indicators.Font.Height": -11, + "Indicators.Font.Name": "Arial", + "Indicators.Font.Style": [], + "Indicators.ShowRowNo": false, + "Indicators.Visible": false, + "Lines.HorzColor": "clGray", + "Lines.CellColor": "clBlack", + "Options": [ + "wgoAlwaysShowSelection", + "wgoArrowMove", + "wgoConfirmDelete", + "wgoEnterToTab", + "wgoFocusRect", + "wgoRowSelect" + ], + "SelBgColor": "clGray", + "DataSource": "ds_BoqXX", + "OnDrawCell": "rGrd_BoqXXDrawCell", + "ColRowHeight": 18, + "GrpRowHeight": 22, + "ColFixedCount": 0, + "GrpFixedCount": 0 + }, + "children": [] + }, + { + "class": "TRealGrid", + "name": "rGrd_Jab", + "flags": [], + "child_pos": null, + "properties": { + "Left": 0, + "Top": 242, + "Width": 954, + "Height": 353, + "ImeName": "한국어(한글) (MS-IME98)", + "TabOrder": 2, + "Columns": [ + { + "Footer.Style": [], + "Group": 0, + "ReadOnly": true, + "Title.Caption": "공종", + "DataWidth": 16, + "ColWidth": 64, + "GrpWidth": 34 + }, + { + "Footer.Style": [], + "Group": 1, + "ReadOnly": true, + "Title.Caption": "명칭", + "DataWidth": 30, + "ColWidth": 64, + "GrpWidth": 186 + }, + { + "Alignment": "taCenter", + "Footer.Style": [], + "Group": 2, + "ReadOnly": true, + "Title.Caption": "규격", + "DataWidth": 30, + "ColWidth": 64, + "GrpWidth": 186 + }, + { + "Color": "clMoneyGreen", + "Footer.Style": [], + "Group": 3, + "ReadOnly": true, + "Title.Caption": "도급액", + "DataType": "wdtFloat", + "DisplayFormat": "#,#", + "ColWidth": 64, + "GrpWidth": 94 + }, + { + "Color": "clGradientInactiveCaption", + "Footer.Style": [], + "Group": 4, + "ReadOnly": true, + "Title.Caption": "전회금액", + "DataType": "wdtFloat", + "DisplayFormat": "#,#", + "ColWidth": 64, + "GrpWidth": 94 + }, + { + "Color": "clGradientInactiveCaption", + "Footer.Style": [], + "Group": 4, + "LevelIndex": 1, + "ReadOnly": true, + "Title.Caption": "전율", + "DataType": "wdtFloat", + "DisplayFormat": "0.##;;#", + "ColWidth": 64, + "GrpWidth": 46 + }, + { + "Color": "clGradientActiveCaption", + "EditFormat": "#,#", + "Footer.Style": [], + "Group": 5, + "Title.Caption": "금회금액", + "DataType": "wdtFloat", + "DisplayFormat": "#,#", + "ColWidth": 64, + "GrpWidth": 94 + }, + { + "Color": "clGradientActiveCaption", + "Footer.Style": [], + "Group": 5, + "LevelIndex": 1, + "ReadOnly": true, + "Title.Caption": "금율", + "DataType": "wdtFloat", + "DisplayFormat": "0.##;;#", + "ColWidth": 64, + "GrpWidth": 46 + }, + { + "Color": "clInfoBk", + "Footer.Style": [], + "Group": 6, + "ReadOnly": true, + "Title.Caption": "누계금액", + "DataType": "wdtFloat", + "DisplayFormat": "#,#", + "ColWidth": 64, + "GrpWidth": 94 + }, + { + "Color": "clInfoBk", + "Footer.Style": [], + "Group": 6, + "LevelIndex": 1, + "ReadOnly": true, + "Title.Caption": "누율", + "DataType": "wdtFloat", + "DisplayFormat": "0.##;;#", + "ColWidth": 64, + "GrpWidth": 46 + }, + { + "Footer.Style": [], + "Group": 7, + "ReadOnly": true, + "Title.Caption": "구분", + "DataWidth": 20, + "ColWidth": 64, + "GrpWidth": 78 + }, + { + "EditStyle": "wesDataList", + "Footer.Style": [], + "Group": 7, + "LevelIndex": 1, + "ReadOnly": true, + "Title.Caption": "종류", + "DataType": "wdtWord", + "DataWidth": 2, + "ColWidth": 64, + "GrpWidth": 16 + }, + { + "EditStyle": "wesNumber", + "Footer.Style": [], + "Group": 7, + "LevelIndex": 2, + "ReadOnly": true, + "Title.Caption": "계약잡비율", + "DataType": "wdtFloat", + "DisplayFormat": "0.#####;;#", + "ColWidth": 64, + "GrpWidth": 106 + }, + { + "Footer.Style": [], + "Title.Caption": "D_Typ", + "Visible": false, + "DataType": "wdtSmall", + "DataWidth": 2, + "ColWidth": 64, + "GrpWidth": 64 + } + ], + "Groups": [ + { + "Title.Caption": "공종", + "Width": 34, + "Weights": { + "binary_size": 16, + "binary_hex": "01010101010101010101010101010101" + } + }, + { + "Title.Caption": "명칭", + "Width": 186, + "Weights": { + "binary_size": 16, + "binary_hex": "01010101010101010101010101010101" + } + }, + { + "Title.Caption": "규격", + "Width": 186, + "Weights": { + "binary_size": 16, + "binary_hex": "01010101010101010101010101010101" + } + }, + { + "Title.Caption": "도급액", + "Width": 94, + "Weights": { + "binary_size": 16, + "binary_hex": "01010101010101010101010101010101" + } + }, + { + "Title.Caption": "전회기성", + "Width": 140, + "Weights": { + "binary_size": 16, + "binary_hex": "01010101010101010101010101010101" + } + }, + { + "Title.Caption": "금회기성", + "Width": 140, + "Weights": { + "binary_size": 16, + "binary_hex": "01010101010101010101010101010101" + } + }, + { + "Title.Caption": "누 계", + "Width": 140, + "Weights": { + "binary_size": 16, + "binary_hex": "01010101010101010101010101010101" + } + }, + { + "Title.Caption": "기타", + "Visible": false, + "Width": 200, + "Weights": { + "binary_size": 16, + "binary_hex": "01010101010101010101010101010101" + } + } + ], + "Footers": [], + "OnKeyDown": "rGrd_JabKeyDown", + "Align": "alClient", + "Headers.Lines.CellColor": "clBlack", + "Headers.Lines.LevelColor": "clBlack", + "Headers.Visible": false, + "Headers.ColHeight": 21, + "Headers.GrpHeight": 42, + "FixedStyle.Lines.CellColor": "clBlack", + "FixedStyle.Lines.LevelColor": "clBlack", + "GroupMode": true, + "Indicators.Font.Charset": "DEFAULT_CHARSET", + "Indicators.Font.Color": "clWindowText", + "Indicators.Font.Height": -11, + "Indicators.Font.Name": "Arial", + "Indicators.Font.Style": [], + "Indicators.Visible": false, + "Lines.HorzColor": "clGray", + "Lines.CellColor": "clBlack", + "Options": [ + "wgoAlwaysShowSelection", + "wgoArrowMove", + "wgoConfirmDelete", + "wgoEditing", + "wgoFocusRect" + ], + "RowCount": 15, + "SelBgColor": "clNavy", + "SelTrans": 0, + "OnCellEnter": "rGrd_JabCellEnter", + "OnDrawRow": "rGrd_JabDrawRow", + "OnDrawCell": "rGrd_JabDrawCell", + "OnRowChange": "rGrd_JabRowChange", + "OnBeforePost": "rGrd_JabBeforePost", + "ColRowHeight": 18, + "GrpRowHeight": 22, + "ColFixedCount": 0, + "GrpFixedCount": 0 + }, + "children": [] + }, + { + "class": "TApolloTable", + "name": "tb_BoqXX", + "flags": [], + "child_pos": null, + "properties": { + "DatabaseName": "ST_Work", + "CachedUpdates": false, + "Filter": "(BDCODE1=\"T\") .and. (BDCODE1>\"T2\")", + "Filtered": true, + "FieldDefs": [], + "IndexDefs": [ + { + "Name": "SORTCODE", + "Fields": "SORTCODE", + "Source": "BOQ11.NSX" + }, + { + "Name": "BDCODE1", + "Fields": "BDCODE1", + "Source": "BOQ11.NSX" + } + ], + "IndexName": "SORTCODE", + "TableName": "Boq11.dbf", + "TableType": "ttSXNSX", + "Left": 136, + "Top": 104 + }, + "children": [] + }, + { + "class": "TDataSource", + "name": "ds_BoqXX", + "flags": [], + "child_pos": null, + "properties": { + "DataSet": "tb_BoqXX", + "Left": 184, + "Top": 104 + }, + "children": [] + } + ] +} \ No newline at end of file diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/dz.py b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/dz.py new file mode 100644 index 000000000..8650dbffd --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/dz.py @@ -0,0 +1,78 @@ +"""Annotated disassembly. usage: dis.py [noret] +Annotates: import thunks (jmp [IAT]), Delphi string literals, float constants, VMT-published method names.""" +import struct, sys, re, pe, capstone +p = pe.PE(sys.argv[1]) +d = p.data +pehdr = struct.unpack_from("= p.base + 0x1000: + s = p.lstr(v) + if s and len(s) >= 1 and all((c.isprintable() or c in "\r\n") for c in s) and len(s) < 300: + out.append(repr(s)) + elif "qword" in op or "tbyte" in op: + try: + if "tbyte" in op: + raw = p.read(v, 10) + m_ = int.from_bytes(raw[:8], "little"); e_ = int.from_bytes(raw[8:], "little") + sign = -1 if e_ & 0x8000 else 1; e_ &= 0x7FFF + out.append("=%r" % (sign * m_ * 2.0 ** (e_ - 16383 - 63))) + else: + out.append("=%r" % p.f64(v)) + except Exception: + pass + elif "dword ptr [0x" in op and "fld" in ins.mnemonic or "fmul" in ins.mnemonic or "fdiv" in ins.mnemonic or "fadd" in ins.mnemonic or "fsub" in ins.mnemonic or "fcom" in ins.mnemonic: + try: + out.append("=%r" % struct.unpack(" 4 +for ins in md.disasm(p.read(va, n), va): + print(f"{ins.address:x}: {ins.mnemonic} {ins.op_str}{ann(ins.op_str, ins)}") + if ins.mnemonic == "ret" and not noret: + break diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/inv.py b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/inv.py new file mode 100644 index 000000000..a35963efe --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/inv.py @@ -0,0 +1,45 @@ +"""Inventory: exports, Delphi VMT classes + published methods, RCDATA DFM names. usage: inv.py """ +import struct, sys, pe +p = pe.PE(sys.argv[1]) +d = p.data +# exports +pehdr = struct.unpack_from(" lit...""" +import sys, re, struct, pe +p = pe.PE(sys.argv[1]); d = p.data; t = p.text +for lit in sys.argv[2:]: + b = lit.encode("cp949") + pat = b"\xff\xff\xff\xff" + struct.pack(" bytes: + value = self.data[self.pos : self.pos + size] + if len(value) != size: + raise EOFError(self.pos) + self.pos += size + return value + + def byte(self) -> int: + return self.take(1)[0] + + def short_string(self) -> str: + raw = self.take(self.byte()) + for encoding in ("cp949", "utf-8", "latin1"): + try: + return raw.decode(encoding) + except UnicodeDecodeError: + pass + return raw.hex() + + def integer(self) -> int: + kind = self.byte() + formats = {2: " dict: + props = {} + while True: + name = self.short_string() + if not name: + return props + props[name] = self.value() + + def component(self, root=False) -> dict: + flags = [] + child_pos = None + class_name = self.short_string() + name = self.short_string() + props = self.properties() + children = [] + while self.data[self.pos] != 0: + children.append(self.component()) + self.pos += 1 + return { + "class": class_name, + "name": name, + "flags": flags, + "child_pos": child_pos, + "properties": props, + "children": children, + } + + +def parse(path: Path) -> dict: + reader = Reader(path.read_bytes()) + assert reader.take(4) == b"TPF0" + result = reader.component(root=True) + assert reader.pos == len(reader.data), (reader.pos, len(reader.data)) + return result + + +if __name__ == "__main__": + for argument in sys.argv[1:]: + source = Path(argument) + output = source.with_suffix(".json") + output.write_text(json.dumps(parse(source), ensure_ascii=False, indent=2), encoding="utf-8") + print(output) diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/pe.py b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/pe.py new file mode 100644 index 000000000..199ec119b --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/pe.py @@ -0,0 +1,75 @@ +"""Read-only PE helper for STmate modules. Load(path) -> object with va2off/read/u32/sstr/text.""" +import struct + +SYS = "C:/경영정보(주)/System/" +MODS = { + "kj": SYS + "ST_CPM/ST_KanJub.CPM", + "main": SYS + "STmate.Cpm", + "func": SYS + "ST_Func_C.CPM", + "nae": SYS + "ST_CPM/ST_P_Nae.CPM", + "boq": SYS + "ST_CPM/ST_Boq.CPM", + "plist": SYS + "ST_CPM/ST_PList.CPM", + "prt": SYS + "ST_CPM/ST_Prt.CPM", + "conest": SYS + "ST_CPM/ST_P_ConEst.CPM", +} + + +class PE: + def __init__(self, path): + if path in MODS: + path = MODS[path] + self.path = path + self.data = d = open(path, "rb").read() + pe = struct.unpack_from(" 4096: + return None + return self.data[o: o + n].decode("cp949", "replace") diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/rsrc.py b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/rsrc.py new file mode 100644 index 000000000..1d7bf3c4b --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/rsrc.py @@ -0,0 +1,30 @@ +"""List/extract RCDATA resources. usage: rsrc.py [NAME outfile]""" +import struct, sys, pe +p = pe.PE(sys.argv[1]) +rs = [s for s in p.secs if s[0] == ".rsrc"][0] +rbase_va = rs[1] +def rd(va, fmt): + return struct.unpack_from(fmt, p.data, p.va2off(va)) +def name_of(off): + n = rd(rbase_va + off, " 3: + for path, va, size in out: + if path[0] == 10 and path[1] == sys.argv[2]: + open(sys.argv[3], "wb").write(p.read(va, size)); print("wrote", size) +else: + for path, va, size in out: + if path[0] == 10: + print(path[1], hex(va), size) diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/strfind.py b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/strfind.py new file mode 100644 index 000000000..48af16647 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate/REA 분석/33_기성준공단계_작업자료_20261114/scripts/strfind.py @@ -0,0 +1,33 @@ +"""Find cp949 Delphi string literals containing a substring and list code refs. usage: strfind.py ...""" +import sys, re, struct, pe +p = pe.PE(sys.argv[1]) +d = p.data; t = p.text +refs = {} +for m in re.finditer(rb"[\xb8-\xbf\xba\x68](....)", t): + pass +pat_cache = {} +def code_refs(va): + b = struct.pack(" o - 300: + if d[s - 8: s - 4] == b"\xff\xff\xff\xff": + n = struct.unpack_from("= o + len(sb) and n < 2000: + break + s -= 1 + else: + continue + va = p.off2va(s) + if va in seen or va is None: + continue + seen.add(va) + txt = p.lstr(va) + r = code_refs(va) + print(hex(va), repr(txt)[:120], [hex(x) for x in r[:8]]) diff --git a/resources/tester/helper_stmate_progress_rea.cjs b/resources/tester/helper_stmate_progress_rea.cjs new file mode 100644 index 000000000..832d83c43 --- /dev/null +++ b/resources/tester/helper_stmate_progress_rea.cjs @@ -0,0 +1,109 @@ +// STMATE 재현 앱 기성 계산(progress_calc.js) — 원본 정적 분석 규칙 시험용 stdin JSON 실행기 +// 입력 { mode, args } → 출력 JSON · 근거: 지식DB STmate/REA 분석/33_기성준공단계_작업자료_20261114 +const Progress = require("../../tools/stmate-test/progress_calc.js"); + +// 합성 계약 기준 — leaves [{id, qty, m, l, s, pct, gov}] · lines [{code, amount}] · direct · contractFinal +function mkBase(spec) { + const leaves = spec.leaves.map((x, i) => { + const amt = { + mAmt: Math.trunc(x.m * x.qty + 1e-9), + lAmt: Math.trunc(x.l * x.qty + 1e-9), + sAmt: Math.trunc(x.s * x.qty + 1e-9), + }; + amt.tAmt = amt.mAmt + amt.lAmt + amt.sAmt; + return { + id: x.id, + recno: i, + code: x.id, + name: x.id, + spec: "", + unit: x.pct ? "%" : "식", + gov: !!x.gov, + pct: !!x.pct, + qty: x.qty, + u: { m: x.m, l: x.l, s: x.s }, + amt, + }; + }); + const direct = + spec.direct != null + ? spec.direct + : leaves.filter((l) => !l.gov).reduce((a, l) => a + l.amt.tAmt, 0); + const lines = spec.lines.map((l) => ({ code: l.code, label: l.code, amount: l.amount })); + const ratePct = Object.fromEntries(lines.map((l) => [l.code, (l.amount / direct) * 100])); + const rates = Object.fromEntries(lines.map((l) => [l.code, ratePct[l.code] / 100])); + return { + leaves, + lines, + rates, + ratePct, + direct, + kj: { contractFinal: spec.contractFinal || 0 }, + nodes: [], + }; +} + +const MODES = { + cap: ({ cases }) => cases.map((c) => Progress.capCur(c[0], c[1], c[2], c[3])), + jab: ({ spec, cur, opt, prev, accDirect }) => + Progress.jabFor(mkBase(spec), cur, opt || {}, prev || null, accDirect), + run: ({ spec, rounds, seed }) => Progress.run(mkBase(spec), rounds, seed), + store({ spec, rounds }) { + const base = mkBase(spec); + const all = Progress.run(base, rounds); + const st = Progress.toStorage(base, all[0]); + const rows = st.boq.map((u) => Object.assign({}, u)); + const fs = Progress.fromStorage(base, rows, st.prjlst, st.smt); + // 제 1 회 저장본을 「전회」로 다시 읽어 제 2 회를 셈 — STmate 회차 생성(전회<-누계, 금회=0)과 같은 흐름 + const seedRows = st.boq.map((u) => + Object.assign({}, u, { + QTY3: u.QTY2, + QTY4: 0, + M_AMT3: u.M_AMT2, + L_AMT3: u.L_AMT2, + S_AMT3: u.S_AMT2, + T_AMT3: u.T_AMT2, + }), + ); + const smt3 = Object.fromEntries( + Object.entries(st.smt["2_KANJUB"]).map(([k, v]) => [k.replace(/^2_/, "3_"), v]), + ); + const fs2 = Progress.fromStorage(base, seedRows, { K_ORD: 2 }, smt3); + const next = Progress.run(base, [rounds[1]], fs2.seed); + return { all, st, fs, fs2, next }; + }, + // 실제 STC(설계 판) → 계약 기준 → 회차 → 저장 형식 + real({ load, opts, rounds }) { + const Calc = require("../../tools/stmate-test/calc.js"); + const Change = require("../../tools/stmate-test/change_calc.js"); + const Contract = require("../../tools/stmate-test/contract_calc.js"); + const state = load.sim_state; + const comp = Calc.calculateAll(state); + const tree = Change.buildTree(load.boq_rows, state, comp, [1]); + const conv = Contract.convert(tree, opts, 1, null); + const kj = Contract.contractKanjub(conv, state.kanjubStages[1] || state.kanjubConfig); + const base = Progress.contractBase(conv, kj); + const all = Progress.run(base, rounds); + const last = all[all.length - 1]; + const st = Progress.toStorage(base, last); + const lv = Progress.aggregate(base, last, 3).map((nd) => nd.level); + return { + direct: base.direct, + lines: base.lines.map((l) => [l.code, l.amount]), + cur: all.map((r) => r.totals.cur), + accT: all.map((r) => r.totals.acc.tAmt), + rounds: all.map((r) => r.jab), + st, + lv, + gov: base.leaves.map((l) => l.gov), + }; + }, +}; + +let buf = ""; +process.stdin.setEncoding("utf8"); +process.stdin.on("data", (d) => (buf += d)); +process.stdin.on("end", () => { + const inp = JSON.parse(buf); + process.stdout.write(JSON.stringify(MODES[inp.mode](inp.args || {}))); +}); diff --git a/resources/tester/test_stmate_stage_progress.py b/resources/tester/test_stmate_stage_progress.py index aada9b3f1..dc9488425 100644 --- a/resources/tester/test_stmate_stage_progress.py +++ b/resources/tester/test_stmate_stage_progress.py @@ -1,8 +1,9 @@ """STMATE 재현 앱 기성·실행 계산(progress_calc.js · exec_calc.js) — 자기 일관성 지킴 시험. 기성·실행 STC/XLSX 표본이 0건(지식DB STmate/old/20_분석 27 §9 · 35 §5)이라 원 단위 정답 대조 없음. -지키는 것: 전회+금회=누계 · 100% 누계 = 계약 금액 · 잔량 0 -· 금회 제잡비 = trunc(금회직접 × 계약잡비율) +지키는 것: 전회+금회=누계(수량) · 금액은 칸마다 따로 버림(끝전 1원 이내) · 100% 누계 = 계약 금액 · 잔량 0 +· 금회 제잡비 = trunc(계약잡비율% × 금회직접 / 100) · 마지막 회차 = 도급 − 전회 + (원본 규칙 근거 — 지식DB STmate/REA 분석/33_기성준공단계_작업자료_20261114) · 부가세 4택 · 집계수준 머리 합 · 중기 실행단가 성분 합 = 절사 목표 · 실행율 100% = 설계. """ @@ -48,12 +49,13 @@ def prog(): def test_round_prev_cur_acc(prog): - """회차마다 전회+금회=누계 · 다음 회차 전회 = 앞 회차 누계.""" + """회차마다 수량 전회+금회=누계 · 금액 끝전 칸당 1원 이내 · 다음 회차 전회 = 앞 회차 누계.""" runs = prog["out"]["out"] for k, rd in enumerate(runs): for r in rd["rows"]: - for key in ("mAmt", "lAmt", "sAmt", "tAmt"): - assert r["prev"][key] + r["cur"][key] == r["acc"][key] + assert abs(r["prevQty"] + r["curQty"] - r["accQty"]) < 1e-9 + for key in ("mAmt", "lAmt", "sAmt"): + assert abs(r["prev"][key] + r["cur"][key] - r["acc"][key]) <= 1 if k: prev = next(x for x in runs[k - 1]["rows"] if x["id"] == r["id"]) assert r["prev"] == prev["acc"] and r["prevQty"] == prev["accQty"] @@ -69,13 +71,15 @@ def test_full_progress_equals_contract(prog): def test_jab_is_cur_direct_times_contract_rate(prog): - """금회 제잡비 = trunc(금회직접공사비 × 계약잡비율) · 부가세 4택.""" + """금회 제잡비 = trunc(계약잡비율% × 금회직접 / 100) · 마지막 회차 누계 = 도급 · 부가세 4택.""" rates = prog["out"]["base"]["rates"] for rd, mode in zip(prog["out"]["out"], (1, 2, 3)): cur, jab = rd["totals"]["cur"], rd["jab"]["cur"] assert jab["direct"] == cur["tAmt"] for it in jab["items"]: - assert it["amount"] == int(cur["tAmt"] * rates[it["code"]] + 1e-9) + if jab["final"]: + continue + assert it["amount"] == int(rates[it["code"]] * 100 * cur["tAmt"] / 100 + 1e-9) expect_vat = { 1: int(jab["supply"] * 0.1), 2: int(cur["mAmt"] * 0.1), diff --git a/resources/tester/test_stmate_stage_progress_rea.py b/resources/tester/test_stmate_stage_progress_rea.py new file mode 100644 index 000000000..5defddfa7 --- /dev/null +++ b/resources/tester/test_stmate_stage_progress_rea.py @@ -0,0 +1,229 @@ +"""STMATE 재현 앱 기성 계산(progress_calc.js) — 원본 정적 분석으로 복원한 규칙 지킴 시험. + +근거: 지식DB STmate/REA 분석/33_기성준공단계_작업자료_20261114 (ST_KanJub · ST_Boq · STmate · ST_P_ConEst) +- 칸 번호 1 계약 · 2 누계 · 3 전회 · 4 금회 (열→칸 표 '1342') +- 금회수량 상한 · 누계 = 전회 + 금회 (ST_Boq 0x4f4a2f~0x4f4ceb) +- 금액은 칸마다 따로 버림 (ST_Boq 0x4fc674 · 0x4fce6e) +- 제잡비 금회 = MROUNDUD(계약잡비율% × 금회직접 / 100, 0, 0) · 마지막 회차 = 도급 − 전회 · 상한 (0x4cdec0) +- 부가세 4택 · 공급가액/총공사비 절사 → 이윤 보정 · 1.1 나눔 · 1~10원 반복 (0x4ce2c8 · 0x4ce55c · 0x4ce6c4) +- 저장: PRJLST COSTW3 = 누계 총공사비 · COSTW4 = 금회 · SMT [2_KANJUB]/[4_KANJUB] 「n_C_코드」 +원본 실행 수치 대조 없음 — 아래 기대값은 원본 명령 순서를 파이썬으로 따로 옮긴 것. +""" + +import json +import math +import subprocess +import sys +from pathlib import Path + +import pytest + +HELPER = Path(__file__).with_name("helper_stmate_progress_rea.cjs") + +SPEC = { + "leaves": [ + {"id": "a", "qty": 10, "m": 3.3, "l": 7.7, "s": 1.1}, + {"id": "b", "qty": 3, "m": 1000.5, "l": 333.3, "s": 0}, + {"id": "p", "qty": 2.5, "m": 4000, "l": 0, "s": 0, "pct": True}, + ], + "lines": [ + {"code": "KANNO", "amount": 1234}, + {"code": "SANBO", "amount": 377}, + {"code": "ILBAN", "amount": 901}, + {"code": "IYUN", "amount": 1517}, + ], + "contractFinal": 30000, +} + + +def _run(mode, args): + out = subprocess.check_output( + ["node", str(HELPER)], + input=json.dumps({"mode": mode, "args": args}, ensure_ascii=False), + text=True, + encoding="utf-8", + ) + return json.loads(out) + + +def _trunc(x, digits=0): + f = 10.0**digits + return math.trunc(x * f + (1e-9 if x >= 0 else -1e-9)) / f + + +def _native_jab(lines, direct, cur, opt, prev=None, acc_direct=None): + """ST_KanJub 0x4cdec0 → 0x4ce6c4 순서를 그대로 옮김(이윤 행 = 마지막 요율 행).""" + dT = cur["mAmt"] + cur["lAmt"] + cur["sAmt"] + final = acc_direct == direct + items = {} + for code, amt in lines: + p = (prev or {}).get(code, 0) + a = amt - p if final else _trunc(amt / direct * 100 * dT / 100) + if a >= amt + p: + a = amt - p + items[code] = a + mode = opt.get("vatMode", 1) + sj, tj = abs(opt.get("supplyJeol", 0)), abs(opt.get("totalJeol", 0)) + if sj: + tj = 0 + + def settle(): + sup = dT + sum(items.values()) + vat = { + 0: opt.get("vatManual", 0), + 1: _trunc(sup * 0.1), + 2: _trunc(cur["mAmt"] * 0.1), + 3: _trunc((cur["mAmt"] + cur["sAmt"]) * 0.1), + }[mode] + return sup, vat, sup + vat + + sup, vat, tot = settle() + orig = tot + if sj or tj: + cut = sup - _trunc(sup, -sj) if sj else tot - _trunc(tot, -tj) + if tj and mode == 1: + cut = _trunc(cut / 1.1) + items["IYUN"] -= cut + sup, vat, tot = settle() + if tj and mode == 1: + target = _trunc(orig, -tj) + while 1 <= round(tot - target) <= 10: + items["IYUN"] -= 1 + sup, vat, tot = settle() + return items, sup, vat, tot + + +def test_cap_cur_qty(): + """금회수량 상한 — 같은 부호 · |전회+금회| > |계약| 이면 금회 = 계약 − 전회 · 허용 설정이면 그대로.""" + got = _run( + "cap", + { + "cases": [ + [10, 4, 7, False], + [10, 4, 6, False], + [10, 4, 7, True], + [-5, -2, -4, False], + [10, 0, -3, False], + ] + }, + ) + assert got == [6, 6, 7, -3, -3] + + +@pytest.mark.parametrize( + "opt", + [ + {"vatMode": 1}, + {"vatMode": 2}, + {"vatMode": 3}, + {"vatMode": 0, "vatManual": 777}, + {"vatMode": 1, "supplyJeol": 2}, + {"vatMode": 1, "totalJeol": 2}, + {"vatMode": 1, "totalJeol": 3}, + {"vatMode": 2, "totalJeol": 2}, + {"vatMode": 1, "supplyJeol": 3, "totalJeol": 2}, + ], +) +def test_jab_matches_native_order(opt): + """기성 제잡비 계산서 — 요율 행 · 부가세 4택 · 절사 → 이윤 보정 · 두 절사 하나만.""" + cur = {"mAmt": 2345, "lAmt": 6789, "sAmt": 1011, "tAmt": 10145} + direct = 23456 + spec = dict(SPEC, direct=direct) + j = _run("jab", {"spec": spec, "cur": cur, "opt": opt, "accDirect": 12000}) + lines = [(x["code"], x["amount"]) for x in SPEC["lines"]] + items, sup, vat, tot = _native_jab(lines, direct, cur, opt, acc_direct=12000) + assert {it["code"]: it["amount"] for it in j["items"]} == items + assert (j["supply"], j["vat"], j["total"]) == (sup, vat, tot) + if opt.get("supplyJeol"): + assert sup % 10 ** opt["supplyJeol"] == 0 + + +def test_jab_final_round_closes_to_contract(): + """누계직접 = 도급직접 이면 요율 행 금회 = 도급 − 전회 (0x4cdfae).""" + cur = {"mAmt": 100, "lAmt": 200, "sAmt": 0, "tAmt": 300} + prev = { + "direct": 0, + "items": [{"code": "KANNO", "amount": 1000}, {"code": "IYUN", "amount": 9}], + } + spec = dict(SPEC, direct=5000) + j = _run("jab", {"spec": spec, "cur": cur, "opt": {}, "prev": prev, "accDirect": 5000}) + got = {it["code"]: it["amount"] for it in j["items"]} + assert j["final"] and got["KANNO"] == 1234 - 1000 and got["SANBO"] == 377 + assert got["IYUN"] == 1517 - 9 + + +def test_amounts_rounded_per_slot(): + """금회·누계 금액은 각 수량으로 따로 버림 — 전회+금회 ≠ 누계 가 1원 생길 수 있음.""" + rounds = [{"qtyById": {"a": 3.3, "b": 1}}, {"qtyById": {"a": 3.3, "b": 1}}] + out = _run("run", {"spec": SPEC, "rounds": rounds}) + a2 = next(r for r in out[1]["rows"] if r["id"] == "a") + assert a2["accQty"] == 6.6 and a2["cur"]["mAmt"] == math.trunc(3.3 * 3.3) + assert a2["acc"]["mAmt"] == math.trunc(3.3 * 6.6 + 1e-9) + assert a2["prev"] == next(r for r in out[0]["rows"] if r["id"] == "a")["acc"] + gaps = [a2["prev"][k] + a2["cur"][k] - a2["acc"][k] for k in ("mAmt", "lAmt", "sAmt")] + assert all(abs(g) <= 1 for g in gaps) and any(gaps) + + +def test_pct_leaf_first_round_full_and_cap(): + """첫 기성 — % 단위 공종 금회 = 계약수량(STmate 0x55cd4f) · 다음 회차 상한으로 0.""" + out = _run("run", {"spec": SPEC, "rounds": [{"pct": 10}, {"pct": 50}]}) + p1 = next(r for r in out[0]["rows"] if r["id"] == "p") + p2 = next(r for r in out[1]["rows"] if r["id"] == "p") + assert p1["curQty"] == 2.5 and p2["curQty"] == 0 and p2["remainQty"] == 0 + a1 = next(r for r in out[0]["rows"] if r["id"] == "a") + assert a1["curQty"] == 1 and out[0]["round"] == 1 + + +def test_storage_slots_and_reload(): + """저장 형식 — 칸 1 계약 · 2 누계 · 3 전회 · 4 금회 · COSTW3/COSTW4 · [n_KANJUB] · 다시 읽어 다음 회차.""" + rounds = [{"qtyById": {"a": 4, "b": 1}}, {"qtyById": {"a": 3, "b": 1}, "vatMode": 2}] + got = _run("store", {"spec": SPEC, "rounds": rounds}) + r1 = got["all"][0] + st = got["st"] + a = next(u for u in st["boq"] if u["id"] == "a") + assert (a["QTY1"], a["QTY2"], a["QTY3"], a["QTY4"]) == (10, 4, 0, 4) + assert st["prjlst"]["PCLASS"] == 6 and st["prjlst"]["K_ORD"] == 1 + assert st["prjlst"]["COSTW4"] == r1["jab"]["cur"]["total"] + assert st["prjlst"]["COSTW3"] == r1["jab"]["acc"]["total"] + assert st["prjlst"]["TCOST4"] == r1["totals"]["cur"]["tAmt"] + assert st["smt"]["4_KANJUB"]["4_C_KANNO"] == r1["jab"]["cur"]["items"][0]["amount"] + assert st["smt"]["2_KANJUB"]["2_C_IYUN"] == r1["jab"]["acc"]["items"][-1]["amount"] + assert got["fs"]["round"]["qtyById"]["a"] == 4 + # 저장본을 전회로 다시 읽은 제 2 회 = 한 번에 돌린 제 2 회 + nxt, ref = got["next"][0], got["all"][1] + assert nxt["round"] == 2 + for x, y in zip(nxt["rows"], ref["rows"]): + assert (x["prevQty"], x["curQty"], x["accQty"]) == (y["prevQty"], y["curQty"], y["accQty"]) + assert x["prev"] == y["prev"] and x["cur"] == y["cur"] and x["acc"] == y["acc"] + assert [i["amount"] for i in nxt["jab"]["prev"]["items"]] == [ + i["amount"] for i in ref["jab"]["prev"]["items"] + ] + assert nxt["jab"]["cur"]["items"] == ref["jab"]["cur"]["items"] + + +def test_real_stc_storage_totals(): + """실제 STC(봉화2024 설계 판) — 저장 칸 합 = PRJLST 직접비 · 집계수준 3 이상 머리만 · 100% = 도급.""" + root = Path(__file__).resolve().parents[2] + sys.path.insert(0, str(root / "tools/stmate-test")) + sys.path.insert(0, str(Path(__file__).parent)) + import server # noqa: PLC0415 + from test_stmate_kanjub_stc import DOCS, STCS # noqa: PLC0415 + + load = server.api_load(server.LoadReq(source_path=str(DOCS / STCS["봉화2024"]))) + rounds = [{"pct": 40, "vatMode": 1, "totalJeol": 3}, {"pct": 60, "vatMode": 1}] + got = _run( + "real", {"load": load, "opts": {"rateL": 88, "rateM": 88, "rateS": 88}, "rounds": rounds} + ) + st = got["st"] + rows = [u for u, g in zip(st["boq"], got["gov"]) if not g] + for n in (1, 2, 3, 4): + assert sum(u[f"T_AMT{n}"] for u in rows) == st["prjlst"][f"TCOST{n}"] + assert all(lv >= 3 for lv in got["lv"]) + r1, r2 = got["rounds"] + items, sup, vat, tot = _native_jab( + got["lines"], got["direct"], got["cur"][0], rounds[0], None, got["accT"][0] + ) + assert {i["code"]: i["amount"] for i in r1["cur"]["items"]} == items + assert (r1["cur"]["supply"], r1["cur"]["vat"], r1["cur"]["total"]) == (sup, vat, tot) + assert r2["cur"]["final"] and st["prjlst"]["TCOST2"] == got["direct"] + assert st["smt"]["2_KANJUB"]["2_C_KANNO"] == r2["acc"]["items"][0]["amount"] diff --git a/tools/stmate-test/index.html b/tools/stmate-test/index.html index 6bb5daf3a..af368066c 100644 --- a/tools/stmate-test/index.html +++ b/tools/stmate-test/index.html @@ -55,6 +55,7 @@ + diff --git a/tools/stmate-test/progress_calc.js b/tools/stmate-test/progress_calc.js index c0459bb12..ce263a3c3 100644 --- a/tools/stmate-test/progress_calc.js +++ b/tools/stmate-test/progress_calc.js @@ -1,10 +1,14 @@ /* -*- coding: utf-8 -*- */ /** * 기성 계산 (progress_calc.js) — 회차별 전회·금회·누계 금액과 비율 · 공종별 기성수량·잔량 · 기성 제잡비 · 부가세 4택 - * 근거: 지식DB STmate/old/20_분석 27 §3(wM_KanJub_K · 금회직접공사비 × 계약제잡비율 · 4단 누적 · 부가세 4택 - * · 공급가액/총공사비 절사 · 이윤 직접입력 · 서식 0632~0638) · 35 §3(기성 단계) · 11 §10(계약 제잡비율 경로) - * 미확인(표본 0건, 27 §9): 누계 금액 산식 · 절사 순서 — 여기서는 누계 = trunc(계약단가 × 누계수량), 금회 = 누계 − 전회 - * 시험: resources/tester/test_stmate_stage_progress.py (자기 일관성 — 전회+금회=누계 · 100% 누계=계약) + * 근거: 지식DB STmate/REA 분석/33_기성준공단계_작업자료_20261114(원본 정적 분석 — 주소는 아래 각 규칙 옆) + * · STmate/old/20_분석 27 §3(화면 구성) + * 칸 번호(원본 BOQ QTYn·T_AMTn · PRJLST TCOSTn · PRJLST.SMT [n_KANJUB]) — 1 계약(도급) · 2 누계 · 3 전회 · 4 금회 + * (ST_KanJub 0x4cae9b 열→칸 표 '1342' · 0x4cb03c 값 배열 순서 · ST_P_ConEst 0x47fadf~0x47fd4c) + * 금액: 금회 = 금회수량으로 · 누계 = 누계수량으로 각각 다시 셈(ST_Boq 0x4fc674 · 0x4fce6e→T_AMT2 0x4fcf24) + * · 전회 = 앞 회차 누계 이관(STmate 0x55d0b3~0x55d148 「전회<-누계, 금회=0」) — 전회+금회 ≠ 누계(끝전) 있음 + * 미확인: 금회 칸 단가 원천(MAMT4 등 — 회차 생성 시 1→2·3 칸만 복사 0x55c826~0x55ca73) — 여기서는 계약 단가 + * 시험: resources/tester/test_stmate_stage_progress.py · test_stmate_stage_progress_rea.py */ const StmateProgress = (() => { const Calc = (typeof window !== "undefined" && window.STMATE_CALC) || require("./calc.js"); @@ -14,16 +18,34 @@ const StmateProgress = (() => { const n0 = (v) => Number(v) || 0; const r4 = (v) => Math.round(n0(v) * 1e4) / 1e4; const KEYS = ["mAmt", "lAmt", "sAmt", "tAmt"]; - // 부가세 4택(27 §3.3) — 0 직접입력 · 1 공급가액 10% · 2 재료비 10% · 3 재료비+산출경비 10% + // 부가세 4택(cmBx_Buga · DFM TWM_KANJUB_K) — 0 직접입력 · 1 공급가액 10% · 2 재료비 10% · 3 재료비+산출경비 10% const VAT_MODES = ["직접입력", "공급가액의 10%", "재료비의 10%", "재료비+산출경비의 10%"]; - // 집계수준(rd_Filter) — 소계 이상 … 총합계 (머리 단 T2~T9) + // 집계수준(rd_Filter 0x4cadbc) — 거르기 (BDCODE1="T") .and. (BDCODE1>"T"+순번) → 머리 단 ≥ 순번+1 · 처음 값 순번 2 const LEVELS = [ [0, "공종 전부"], - [2, "소계 이상"], - [3, "합계 이상"], - [4, "총계 이상"], - [5, "총합계"], + [1, "소계(+=) 이상"], + [2, "계(+==) 이상"], + [3, "합계(+===) 이상"], + [4, "총계(+====) 이상"], + [5, "총합계(+=====) 이상"], ]; + const DEFAULT_LEVEL = 3; + // 앱 제잡비 코드 → 원본 저장키 C_ 코드(0x4cb564 행 목록 · 0x4caa48 「칸_C_코드」) + const C_CODE = { + KANNO: "C_KANNO", + SANBO: "C_SANBO", + KOBO: "C_KOBO", + KUNBO: "C_KUNBO", + SLVBO: "C_SLVBO", + YUNBO: "C_YUNBO", + TBUGUM: "C_TBUGUM", + ANJUN: "C_ANJUN", + KITA: "C_T_KITA", + HWAN: "C_HWAN", + EQIP: "C_EQIPSU", + ILBAN: "C_ILBAN", + IYUN: "C_IYUN", + }; // 계약 기준 — 계약 내역(contract_calc.convert)과 계약 원가계산서에서 공종·계약잡비율을 뽑음 function contractBase(conv, kj) { @@ -35,18 +57,20 @@ const StmateProgress = (() => { const k = nd.pct ? 100 : 1; // % 단위 공종 = 밑수 ÷ 100 을 단가로 return { id: nd.id, + recno: nd.recno, code: nd.newCode || nd.code, name: nd.name, spec: nd.spec, unit: nd.unit, gov: nd.gov, + pct: !!nd.pct, qty: n0(s.qty), u: { m: n0(s.mUnit) / k, l: n0(s.lUnit) / k, s: n0(s.sUnit) / k }, amt: { mAmt: s.mAmt, lAmt: s.lAmt, sAmt: s.sAmt, tAmt: s.tAmt }, }; }); const direct = n0(kj.dT); - // 계약잡비율 = 계약 제잡비 항목 금액 ÷ 계약 직접공사비 + // 요율 행(원본 종류 1) — 간접노무비~기타경비 · 일반관리비 · 이윤 const lines = kj.items .filter((it) => n0(it.amount) !== 0) .map((it) => ({ code: it.code, label: it.label, amount: n0(it.amount) })) @@ -54,8 +78,12 @@ const StmateProgress = (() => { { code: "ILBAN", label: "일반관리비", amount: n0(kj.ilbanAmt) }, { code: "IYUN", label: "이윤", amount: n0(kj.iyunFinal) }, ]); - const rates = Object.fromEntries(lines.map((l) => [l.code, direct ? l.amount / direct : 0])); - return { conv, kj, leaves, lines, rates, direct, nodes: conv.nodes, stage }; + // 계약잡비율(%) = 계약 항목 ÷ 계약 직접공사비 × 100 — 버림 없이 그대로(0x4cb2cc~0x4cb300) + const ratePct = Object.fromEntries( + lines.map((l) => [l.code, direct ? (l.amount / direct) * 100 : 0]), + ); + const rates = Object.fromEntries(lines.map((l) => [l.code, ratePct[l.code] / 100])); + return { conv, kj, leaves, lines, rates, ratePct, direct, nodes: conv.nodes, stage }; } function amountsAt(lf, qty) { @@ -64,74 +92,153 @@ const StmateProgress = (() => { s = roundDown(lf.u.s * qty, 0); return { mAmt: m, lAmt: l, sAmt: s, tAmt: m + l + s }; } - const sub = (a, b) => Object.fromEntries(KEYS.map((k) => [k, n0(a[k]) - n0(b[k])])); const add = (a, b) => Object.fromEntries(KEYS.map((k) => [k, n0(a[k]) + n0(b[k])])); const zero = () => Object.fromEntries(KEYS.map((k) => [k, 0])); - const pct = (a, b) => (b ? Math.round((a / b) * 1e5) / 1e3 : 0); + // 비율 = 금액 ÷ 계약 × 100 — 화면 서식 '0.00%'(0x4cdc7a · 0x4cea20) 두 자리 + const pct = (a, b) => (b ? Math.round((a / b) * 1e4) / 1e2 : 0); - // 회차 하나의 제잡비·공급가액·부가세 — 금회직접 × 계약잡비율(항목별 버림) - function jabFor(base, cur, opt) { - const dT = cur.mAmt + cur.lAmt + cur.sAmt; - const items = base.lines.map((l) => ({ - code: l.code, - label: l.label, - rate: base.rates[l.code], - amount: - l.code === "IYUN" && opt.iyunManual != null - ? n0(opt.iyunManual) - : roundDown(dT * base.rates[l.code], 0), - })); - let supply = dT + items.reduce((a, it) => a + it.amount, 0); - const sj = n0(opt.supplyJeol); - if (sj < 0) { - const cut = supply - roundDown(supply, sj); - const iy = items.find((it) => it.code === "IYUN"); - if (iy) iy.amount -= cut; - supply -= cut; - } - const mode = opt.vatMode == null ? 1 : Number(opt.vatMode); - const vat = - mode === 0 - ? n0(opt.vatManual) - : mode === 2 - ? roundDown(cur.mAmt * 0.1, 0) - : mode === 3 - ? roundDown((cur.mAmt + cur.sAmt) * 0.1, 0) - : roundDown(supply * 0.1, 0); - let total = supply + vat; - const tj = n0(opt.totalJeol); - let totalCut = 0; - if (tj < 0) { - totalCut = total - roundDown(total, tj); - const iy = items.find((it) => it.code === "IYUN"); - if (iy) iy.amount -= totalCut; - supply -= totalCut; - total -= totalCut; - } - return { direct: dT, items, supply, vat, total, totalCut }; + // 금회수량 상한(ST_Boq 0x4f4bbd~0x4f4c9f) — 계약×금회 > 0 이고 |전회+금회| > |계약| 이면 금회 = 계약 − 전회 + // 설정 바이트(+0x1068→+0x69) 켜짐이면 상한 없음 — 그 설정 이름 미확인 → opt.allowOver + function capCur(ctrQ, prevQ, q, allowOver) { + if (allowOver || !(ctrQ * q > 0)) return q; + return Math.abs(r4(prevQ + q)) > Math.abs(ctrQ) ? r4(ctrQ - prevQ) : q; } + // 회차 하나의 기성 제잡비 계산서(rGrd_Jab) — ST_KanJub 0x4cdec0(계약제잡비율 적용) · 0x4ce6c4(총공사비 계산) + // cur: 금회 직접비 {mAmt,lAmt,sAmt,tAmt} · prev: 앞 회차 누계 표(없으면 0) · accDirect: 누계 직접비 + function jabFor(base, cur, opt, prev, accDirect) { + const dT = cur.mAmt + cur.lAmt + cur.sAmt; + const prevOf = (code) => + prev ? n0((prev.items.find((x) => x.code === code) || {}).amount) : 0; + // 누계직접 = 도급직접 이면 요율 행 금회 = 도급 − 전회(0x4cdf53 비교 · 0x4cdfae~0x4cdff3) + const final = n0(accDirect) === n0(base.direct) && base.direct !== 0; + const items = base.lines.map((l) => { + const p = prevOf(l.code); + let amount = final ? l.amount - p : roundDown((base.ratePct[l.code] * dT) / 100, 0); // MROUNDUD(율 × 금회직접 / 100, 0, 0) 0x4ce025 + // 상한 — 금회 ≥ 도급 + 전회 이면 금회 = 도급 − 전회(0x4ce045~0x4ce0db · 원본 비교 그대로) + if (amount >= l.amount + p) amount = l.amount - p; + return { code: l.code, label: l.label, rate: base.rates[l.code], amount }; + }); + const iy = items.find((it) => it.code === "IYUN"); + const sj = Math.abs(n0(opt.supplyJeol)); + const tj = sj ? 0 : Math.abs(n0(opt.totalJeol)); // 두 절사는 하나만(cmBx_ValueChange 0x4cef28~0x4cef84) + // 이윤 직접입력 = 총공사비 절사 「이윤금액 직접입력」(값 0)일 때 이윤 금회 칸 손입력 + if (iy && !tj && opt.iyunManual != null && opt.iyunManual !== "") + iy.amount = n0(opt.iyunManual); + const mode = opt.vatMode == null ? 1 : Number(opt.vatMode); + // 소계 이후 다시 셈(0x4ce2c8) — 공급가액 → 부가세(4택) → 도급 + const settle = () => { + const supply = dT + items.reduce((a, it) => a + it.amount, 0); + const vat = + mode === 0 + ? n0(opt.vatManual) + : mode === 2 + ? roundDown(cur.mAmt * 0.1, 0) // 0.1 × 금회 재료비(MCOST4) 0x4ce42e + : mode === 3 + ? roundDown((cur.mAmt + cur.sAmt) * 0.1, 0) // 0.1 × (MCOST4 + SCOST4) 0x4ce466 + : roundDown(supply * 0.1, 0); // 0.1 × 부가세 행까지 누적(=공급가액) 0x4ce3f6 + return { supply, vat, total: supply + vat }; + }; + let s = settle(); + let cut = 0; + const orig = s.total; + if (iy && (sj || tj)) { + // 끝전 조정량 0x4ce55c — 공급가액 절사: 공급 − 버림(공급) · 총공사비 절사: 총 − 버림(총) (부가세 1택이면 ÷1.1 버림) + if (sj) cut = s.supply - roundDown(s.supply, -sj); + else { + cut = s.total - roundDown(s.total, -tj); + if (mode === 1) cut = roundDown(cut / 1.1, 0); + } + iy.amount -= cut; // 이윤 금회 − 조정량(0x4ce38b~0x4ce3c1) + s = settle(); + if (tj && mode === 1) { + // 총액 − 목표가 1~10원 남으면 이윤 1원씩 더 깎음(0x4ce8c0~0x4ce90d) + const target = roundDown(orig, -tj); + for (let g = 0; g < 1000; g++) { + const d = Math.round(s.total - target); + if (d < 1 || d > 10) break; + iy.amount -= 1; + cut += 1; + s = settle(); + } + } + } + return { + direct: dT, + items, + supply: s.supply, + vat: s.vat, + total: s.total, + totalCut: cut, + final, + }; + } + + const zeroJab = (cur) => ({ + direct: 0, + items: cur.items.map((it) => Object.assign({}, it, { amount: 0 })), + supply: 0, + vat: 0, + total: 0, + }); + // 행마다 누계 = 전회 + 금회(0x4ce4a4~0x4ce4e6) · 부분합 행도 같은 누적 + const sumJab = (a, b) => ({ + direct: a.direct + b.direct, + items: b.items.map((it, i) => Object.assign({}, it, { amount: a.items[i].amount + it.amount })), + supply: a.supply + b.supply, + vat: a.vat + b.vat, + total: a.total + b.total, + }); + // 회차 실행 — rounds[k] = { qtyById: {id: 금회수량}, pct: 일괄 기성율(%), vatMode, vatManual, ... } - function run(base, rounds) { - const accQty = Object.fromEntries(base.leaves.map((lf) => [lf.id, 0])); - const accAmt = Object.fromEntries(base.leaves.map((lf) => [lf.id, zero()])); + // seed(기성 프로젝트 불러오기) = { kOrd, qtyById: 전회 수량, amtById: 전회 금액, jab: 전회 제잡비 {코드: 금액} } + function run(base, rounds, seed) { + const sd = seed || {}; + const accQty = Object.fromEntries( + base.leaves.map((lf) => [lf.id, n0(sd.qtyById && sd.qtyById[lf.id])]), + ); + const accAmt = Object.fromEntries( + base.leaves.map((lf) => { + const a = sd.amtById && sd.amtById[lf.id]; + return [lf.id, a ? Object.assign(zero(), a) : amountsAt(lf, accQty[lf.id])]; + }), + ); let prevJab = null; + if (sd.jab) { + const items = base.lines.map((l) => ({ + code: l.code, + label: l.label, + rate: base.rates[l.code], + amount: n0(sd.jab[l.code]), + })); + const direct = base.leaves + .filter((lf) => !lf.gov) + .reduce((a, lf) => a + accAmt[lf.id].tAmt, 0); + prevJab = { direct, items, supply: n0(sd.jab.SUPPLY), vat: n0(sd.jab.BUGA), total: 0 }; + prevJab.total = prevJab.supply + prevJab.vat; + } + const k0 = Math.max(1, n0(sd.kOrd) || 1); const out = []; rounds.forEach((rd, k) => { const rows = base.leaves.map((lf) => { - const q = - rd.qtyById && rd.qtyById[lf.id] != null - ? n0(rd.qtyById[lf.id]) + const prevQ = accQty[lf.id]; + const own = rd.qtyById && rd.qtyById[lf.id] != null; + // 첫 기성 등록 때 % 단위 공종은 금회 = 계약수량(STmate 0x55ccb1~0x55cd75 · P/R 코드 행도 같음) + let q = own + ? n0(rd.qtyById[lf.id]) + : k === 0 && !seed && lf.pct && rd.pctFirstFull !== false + ? lf.qty : r4((lf.qty * n0(rd.pct)) / 100); - const prevQ = accQty[lf.id], - nowQ = r4(prevQ + q); + q = capCur(lf.qty, prevQ, q, rd.allowOver); + const nowQ = r4(prevQ + q); // 누계 = 전회 + 금회(ST_Boq 0x4f4ca4~0x4f4ceb) const prev = accAmt[lf.id], - acc = amountsAt(lf, nowQ), - cur = sub(acc, prev); + cur = amountsAt(lf, q), + acc = amountsAt(lf, nowQ); accQty[lf.id] = nowQ; accAmt[lf.id] = acc; return { id: lf.id, + recno: lf.recno, code: lf.code, name: lf.name, spec: lf.spec, @@ -159,27 +266,13 @@ const StmateProgress = (() => { cur: sumOf("cur"), acc: sumOf("acc"), }; - const jabCur = jabFor(base, totals.cur, rd); - const jabPrev = prevJab || { - direct: 0, - items: jabCur.items.map((it) => Object.assign({}, it, { amount: 0 })), - supply: 0, - vat: 0, - total: 0, - }; - const jabAcc = { - direct: jabPrev.direct + jabCur.direct, - items: jabCur.items.map((it, i) => - Object.assign({}, it, { amount: jabPrev.items[i].amount + it.amount }), - ), - supply: jabPrev.supply + jabCur.supply, - vat: jabPrev.vat + jabCur.vat, - total: jabPrev.total + jabCur.total, - }; + const jabCur = jabFor(base, totals.cur, rd, prevJab, totals.acc.tAmt); + const jabPrev = prevJab || zeroJab(jabCur); + const jabAcc = sumJab(jabPrev, jabCur); prevJab = jabAcc; const contractTotal = n0(base.kj.contractFinal); out.push({ - round: k + 1, + round: k0 + k, rows, totals, jab: { prev: jabPrev, cur: jabCur, acc: jabAcc }, @@ -214,17 +307,111 @@ const StmateProgress = (() => { ); } - // 준공조서 — 계약금액 | 준공금액(최종 누계, 35 §3 미확인 규칙 = 마지막 회차 누계 이관) + // 준공조서(0646·0647) — 서식 칸은 계약금액 | 준공금액 둘(SET_REP) · 준공금액 산식 원본 미확인 + // 여기서는 마지막 회차 누계 이관(앱 가정) function completion(base, runs) { const last = runs[runs.length - 1]; return { contract: n0(base.kj.contractFinal), done: last ? last.jab.acc.total : 0, direct: { contract: base.direct, done: last ? last.totals.acc.tAmt : 0 }, + assumed: true, }; } - return { VAT_MODES, LEVELS, contractBase, run, aggregate, completion, jabFor }; + // 원본 저장 형식 — 기성 프로젝트(PCLASS 6 · K_ORD 회차) 한 회차를 BOQ 칸 · PRJLST · PRJLST.SMT 로 + // BOQ: QTYn · M_/L_/S_/T_AMTn (n 1 계약 · 2 누계 · 3 전회 · 4 금회) + // PRJLST: TCOSTn·MCOSTn·LCOSTn·SCOSTn 직접비 · COSTW4 = 금회 총공사비 · COSTW3 = 누계 총공사비(0x4ca7f1~0x4ca86b) + // SMT: [2_KANJUB] 「2_C_코드」= 누계 · [4_KANJUB] 「4_C_코드」= 금회(0x4cac0c · 0x4caa48 · 섹션 이름 'KANJUB' 0x4c9b06) + function toStorage(base, round) { + const slot = { 1: "ctr", 2: "acc", 3: "prev", 4: "cur" }; + const qkey = { 1: "ctrQty", 2: "accQty", 3: "prevQty", 4: "curQty" }; + const boq = round.rows.map((r) => { + const u = { _recno: r.recno, id: r.id }; + for (let n = 1; n <= 4; n++) { + const a = r[slot[n]]; + Object.assign(u, { + [`QTY${n}`]: r[qkey[n]], + [`M_AMT${n}`]: n0(a.mAmt), + [`L_AMT${n}`]: n0(a.lAmt), + [`S_AMT${n}`]: n0(a.sAmt), + [`T_AMT${n}`]: n0(a.tAmt), + }); + } + return u; + }); + const prjlst = { PCLASS: 6, K_ORD: round.round }; + for (let n = 1; n <= 4; n++) { + const t = round.totals[slot[n]]; + Object.assign(prjlst, { + [`TCOST${n}`]: t.tAmt, + [`MCOST${n}`]: t.mAmt, + [`LCOST${n}`]: t.lAmt, + [`SCOST${n}`]: t.sAmt, + }); + } + prjlst.COSTW3 = round.jab.acc.total; + prjlst.COSTW4 = round.jab.cur.total; + const sec = (n, jab) => { + const o = {}; + jab.items.forEach((it) => C_CODE[it.code] && (o[`${n}_${C_CODE[it.code]}`] = it.amount)); + o[`${n}_C_KONGGUP`] = jab.supply; + o[`${n}_C_BUGA`] = jab.vat; + o[`${n}_C_DOGUP`] = jab.total; + return o; + }; + return { + boq, + prjlst, + smt: { "2_KANJUB": sec(2, round.jab.acc), "4_KANJUB": sec(4, round.jab.cur) }, + }; + } + + // 기성 프로젝트 불러오기 — BOQ QTY3(전회)·QTY4(금회)·M_/L_/S_/T_AMT3 · [3_KANJUB] 또는 [2_KANJUB]−[4_KANJUB] 로 seed + function fromStorage(base, boqRows, prjlst, smt) { + const byRec = new Map((boqRows || []).map((r) => [r._recno, r])); + const qtyById = {}, + amtById = {}, + curById = {}; + base.leaves.forEach((lf) => { + const r = byRec.get(lf.recno); + if (!r) return; + qtyById[lf.id] = n0(r.QTY3); + curById[lf.id] = n0(r.QTY4); + amtById[lf.id] = { + mAmt: n0(r.M_AMT3), + lAmt: n0(r.L_AMT3), + sAmt: n0(r.S_AMT3), + tAmt: n0(r.T_AMT3), + }; + }); + const kv = smt || {}; + const jab = {}; + const val = (n, c) => kv[`${n}_${c}`]; + Object.entries(C_CODE).forEach(([code, c]) => { + const p3 = val(3, c); + jab[code] = p3 != null ? n0(p3) : n0(val(2, c)) - n0(val(4, c)); + }); + jab.SUPPLY = val(3, "C_KONGGUP") != null ? n0(val(3, "C_KONGGUP")) : 0; + jab.BUGA = val(3, "C_BUGA") != null ? n0(val(3, "C_BUGA")) : 0; + const kOrd = Math.max(1, n0(prjlst && prjlst.K_ORD)); + return { seed: { kOrd, qtyById, amtById, jab }, round: { qtyById: curById, vatMode: 1 } }; + } + + return { + VAT_MODES, + LEVELS, + DEFAULT_LEVEL, + C_CODE, + contractBase, + run, + aggregate, + completion, + jabFor, + capCur, + toStorage, + fromStorage, + }; })(); if (typeof window !== "undefined") window.STMATE_PROGRESS = StmateProgress; diff --git a/tools/stmate-test/save_payload.js b/tools/stmate-test/save_payload.js new file mode 100644 index 000000000..d60cea167 --- /dev/null +++ b/tools/stmate-test/save_payload.js @@ -0,0 +1,142 @@ +/** + * STMATE 저장 요청 묶음 (save_payload.js) — view_prj_boq.js 에서 떼어 냄 · /api/save 요청 본문 + */ +(function (global) { + "use strict"; + + const num = (v, d = 0) => (global.STMATE_CALC || require("./calc.js")).num(v, d); + + /** + * 저장 요청(/api/save) — 지금 값을 그대로 보내고 서버(stc_save.py)가 원본과 뜻으로 견줘 바뀐 칸만 씀 + * 보내지 않는 것: 1차 단가로 2차 칸 덮기 · 고정 낙찰율 3차 칸 · 소계·PRJLST 직접비(서버가 다시 셈) + * 근거: STC_왕복검증.md §3(알려진 칸만 갱신) · 16번 §4(행 금액·계층 집계·TCOSTn) + */ + const COSTN_SAVE_COL = + /^(NAME|SIZE|UNIT|AMT_\d1|PG_1|UC|SBMOK|S_ADJ|ADJ_[MLS]|RXX|NAGCD|[TMLS]AMT[1-5])$/; + const isPctRow = (r) => + String(r.UNIT1 || "") + .trim() + .endsWith("%") && num(r.T_AMT1) > 0; + const plainFields = (r) => + Object.fromEntries( + Object.entries(r).filter( + ([k, v]) => + !k.startsWith("_") && !k.endsWith("_HEX") && k !== "IFORM" && typeof v !== "object", + ), + ); + + function itemQtyFields(b, raw) { + const u = {}; + if (!b) return u; + if (isPctRow(raw)) { + (b.pctQtys || []).forEach((q, k) => q != null && (u[`QTY${k + 1}`] = q)); + return u; + } + if (b.qty !== undefined) u.QTY1 = b.qty; + const q = Array.isArray(b.qtys) ? b.qtys : null; + for (let n = 2; n <= 4; n++) if (q && q[n - 1] !== undefined) u[`QTY${n}`] = q[n - 1]; + if (q && num(q[1]) > 0 && b.changedQty !== undefined && num(b.changedQty) !== num(q[1])) + u.QTY2 = b.changedQty; // 변경 수량 칸만 고친 화면(rev-edit-qty2) + Object.entries(b.units || {}).forEach(([n, mls]) => { + if (num(n) < 2 || !Array.isArray(mls)) return; + ["M", "L", "S"].forEach((c, k) => (u[`${c}AMT${n}`] = mls[k])); + }); + return u; + } + + function newItemRow(b) { + const q = Array.isArray(b.qtys) ? b.qtys : [b.qty, b.changedQty, 0, 0]; + const u = { _new: true, BDCODE1: b.code || b.refId, NAME1: b.name, SIZE1: b.spec }; + Object.assign(u, { UNIT1: b.unit, ITNUM: b.itnum || "", ENDCODE: 0 }); + q.forEach((v, k) => (u[`QTY${k + 1}`] = v || 0)); + return Object.assign(u, itemQtyFields(b, u)); + } + + function buildSavePayload(ctx) { + const d = ctx.dbfData || {}; + const comp = ctx.computed || {}; + const items = (ctx.state.boqItems || []).filter((b) => b._recno !== undefined && !b.isNew); + const byRec = new Map(items.map((b) => [b._recno, b])); + const fresh = (ctx.state.boqItems || []).filter((b) => b.isNew && b._recno === undefined); + const boqUpdates = []; + (d.boq_rows || []).forEach((r) => { + const isNew = r._new || r.SORTCODE === undefined; + const u = Object.assign(plainFields(r), itemQtyFields(byRec.get(r._recno), r)); + boqUpdates.push( + isNew ? Object.assign(u, { _new: true }) : Object.assign(u, { _recno: r._recno }), + ); + fresh + .filter((b) => b.parentRecno === r._recno) + .forEach((b) => boqUpdates.push(newItemRow(b))); + }); + fresh.filter((b) => b.parentRecno == null).forEach((b) => boqUpdates.push(newItemRow(b))); + + const prj = d.prjlst || {}; + const prjUpd = { PNAME: ctx.state.projectMeta.pname, PNUM: ctx.state.projectMeta.pnum }; + Object.entries(comp.stages || {}).forEach(([n, st]) => { + const g = st && st.kanjub && st.kanjub.grandTotal; + if ( + g !== undefined && + (n === "1" || num(prj[`COSTW${n}`]) > 0 || num(prj.K_ORD) >= num(n) - 1) + ) + prjUpd[`COSTW${n}`] = g; + }); + if (!comp.stages && comp.kanjubComputed) prjUpd.COSTW1 = comp.kanjubComputed.GRAND_TOTAL; + // 기성 공사(PCLASS 6) — 칸 2 누계 · 3 전회 · 4 금회는 기성 화면이 정함(REA 33 · ST_KanJub 0x4ca825) + const isProgress = num(prj.PCLASS) === 6; + if (isProgress) + ["COSTW2", "COSTW3", "COSTW4"].forEach((k) => { + if (prj[k] !== undefined) prjUpd[k] = prj[k]; + else delete prjUpd[k]; + }); + + const smt = d.prjlst_smt || {}; + const rts = (ctx.state.kanjubConfig && ctx.state.kanjubConfig.rates) || {}; + const smtCand = { + "1_R_KANNO": rts.KANNO, + "1_R_SANBO": rts.SANBO, + "1_R_KOBO": rts.KOBO, + "1_R_KUNBO": rts.KUNBO, + "1_R_SLVBO": rts.SLVBO, + "1_R_YUNBO": rts.YUNBO, + "1_R_ANJUN": rts.ANJUN, + "1_R_T_KITA": rts.KITA, + "1_R_HWAN": rts.HWAN, + "1_R_EQIPSU": rts.EQIP, + "1_R_ILBAN": rts.ILBAN, + "1_R_IYUN": rts.IYUN, + "1_C_ANJUN_G": ctx.state.kanjubConfig && ctx.state.kanjubConfig.anjunBaseAdd, + }; + const smtUpd = Object.fromEntries( + Object.entries(smtCand).filter(([k, v]) => k in smt && v !== undefined && v !== null), + ); + // 기성 칸 제잡비 금액 [2·3·4_KANJUB] n_C_* — 기성 화면 [기성 칸 반영]이 쓴 값 그대로(서버가 바뀐 줄만 씀) + if (isProgress) + Object.entries(smt) + .filter(([k]) => /^[234]_C_/.test(k)) + .forEach(([k, v]) => (smtUpd[k] = v)); + return { + source_path: ctx.currentSourcePath, + target_folder_name: (ctx.state.projectMeta.pname || "stmate_edited").slice(0, 28), + boq_table: d.boq_table_name || "", + costn_updates: (d.costn_rows || []).map((r) => + Object.fromEntries( + Object.entries(r).filter(([k]) => k === "CODE" || COSTN_SAVE_COL.test(k)), + ), + ), + costn_memo_updates: ctx.uiState.editedSmtMap || {}, + boq_updates: boqUpdates, + boq_deleted: d.boq_deleted || ctx.uiState.boqDeleted || [], + prjlst_updates: prjUpd, + smt_updates: smtUpd, + // 서버(stc_save_extra)가 불러온 값과 견줘 바뀐 것만 씀 — 제잡비 설정 · 구성표 · 수량코드 + kanjub_stages: ctx.state.kanjubStages || {}, + bdqty_rows: d.bdqty_rows || null, + qcode_rows: d.qcode_rows || null, + }; + } + + const api = { buildSavePayload }; + global.STMATE_SAVE_PAYLOAD = api; + if (typeof module !== "undefined" && module.exports) module.exports = api; +})(typeof window !== "undefined" ? window : globalThis); diff --git a/tools/stmate-test/scr_stage_progress.js b/tools/stmate-test/scr_stage_progress.js index 8b5e49776..ac7d5ccaa 100644 --- a/tools/stmate-test/scr_stage_progress.js +++ b/tools/stmate-test/scr_stage_progress.js @@ -3,24 +3,29 @@ * 기성·준공 탭 (scr_stage_progress.js) — wM_KanJub_K 재현 * 회차 전회·금회·누계 금액·비율 · 공종별 기성수량·잔량 · 기성 제잡비(금회직접 × 계약잡비율) · 부가세 4택 * · 공급가액/총공사비 절사 · 이윤 직접입력 · 집계수준 필터 · 기성 서류(0632~0638) · 준공조서(0646·0647) - * 근거: 지식DB STmate/old/20_분석 27 §3·§5 · 35 §3 · 11 §10 — 기성 표본 0건(27 §9) · 계약 기준 = 계약 탭 결과 + * 근거: 지식DB STmate/REA 분석/33_기성준공단계_작업자료_20261114 · old/20_분석 27 §3·§5 — 계약 기준 = 계약 탭 결과 + * 기성 프로젝트(PRJLST.PCLASS 6) = BOQ 칸 3(전회)·4(금회) · K_ORD 회차를 읽어 시작 · [기성 칸 반영]으로 작업본에 씀 * 계산: progress_calc.js */ (function (global) { "use strict"; const S = (global.STMATE_STAGE = global.STMATE_STAGE || { tabs: [] }); const n0 = (v) => Number(v) || 0; - const JEOL = [ - [0, "절사 없음"], - [-1, "10원 미만"], - [-2, "100원 미만"], - [-3, "1,000원 미만"], - [-4, "1만원 미만"], - [-5, "10만원 미만"], - [-6, "100만원 미만"], - [-7, "1천만원 미만"], - [-8, "1억원 미만"], - ]; + // 절사 9택(cmBx_JeolSa · cmBx_Tot_Jeol) — 값 1..8 = 10^값 원 미만 버림 · 값 0 의 뜻은 콤보마다 다름 + const CUTS = [ + "10원 미만", + "100원 미만", + "1,000원 미만", + "10,000원 미만", + "100,000원 미만", + "1,000,000원 미만", + "10,000,000원 미만", + "100,000,000원 미만", + ].map((l, i) => [i + 1, l]); + const JEOL_S = [[0, "총공사비에서 조정"]].concat(CUTS); + const JEOL_T = [[0, "이윤금액 직접입력"]].concat(CUTS); + const isProgPrj = (ctx) => + String((ctx.dbfData && ctx.dbfData.prjlst && ctx.dbfData.prjlst.PCLASS) || "").trim() === "6"; function pst(ctx) { const u = S.ui(ctx); @@ -33,33 +38,72 @@ const c = S.contractCompute(ctx); const base = G.contractBase(c.conv, c.kj); const p = pst(ctx); - const runs = G.run(base, p.rounds); + if (isProgPrj(ctx) && !p.seeded) { + // 기성 프로젝트 — 전회 = BOQ 칸 3 · 금회 = 칸 4 · 회차 = K_ORD(STmate 0x55d0b3~0x55d1d8) + const d = ctx.dbfData; + const fs = G.fromStorage(base, d.boq_rows, d.prjlst, d.prjlst_smt); + Object.assign(p, { seed: fs.seed, rounds: [fs.round], cur: 0, seeded: true }); + } + const runs = G.run(base, p.rounds, p.seed); return { c, base, p, runs, run: runs[Math.min(p.cur, runs.length - 1)] }; } + // [기성 칸 반영] — 고른 회차를 작업본(dbfData)의 BOQ 칸 2·3·4 와 내역 항목 수량에 씀 · 파일 쓰기는 [저장] + function applyStorage(ctx) { + const { base, run } = compute(ctx); + const st = global.STMATE_PROGRESS.toStorage(base, run); + const d = ctx.dbfData; + const byRec = new Map((d.boq_rows || []).map((r) => [r._recno, r])); + const items = new Map((ctx.state.boqItems || []).map((b) => [b.id, b])); + const FLDS = ["QTY", "M_AMT", "L_AMT", "S_AMT", "T_AMT"]; + st.boq.forEach((u) => { + const r = byRec.get(u._recno); + if (r) for (let n = 2; n <= 4; n++) FLDS.forEach((f) => (r[`${f}${n}`] = u[`${f}${n}`])); + const b = items.get(u.id); + if (!b) return; + if (!Array.isArray(b.qtys)) b.qtys = [n0(b.qty), 0, 0, 0]; + [2, 3, 4].forEach((n) => (b.qtys[n - 1] = u[`QTY${n}`])); + }); + const pr = st.prjlst; + d.prjlst = Object.assign(d.prjlst || {}, { + COSTW3: pr.COSTW3, + COSTW4: pr.COSTW4, + K_ORD: pr.K_ORD, + }); + d.prjlst_smt = d.prjlst_smt || {}; + Object.values(st.smt).forEach((sec) => Object.assign(d.prjlst_smt, sec)); + return st; + } + function builders(ctx) { const info = (r) => [`공사명 : ${S.pname(ctx)}`, `제 ${r.round} 회 기성`]; const G = global.STMATE_PROGRESS; return { total: () => { - const { run } = compute(ctx); - const j = run.jab; - const rows = [ - ["직접공사비", run.totals.ctr.tAmt, j.prev.direct, j.cur.direct, j.acc.direct], - ]; - j.cur.items.forEach((it, i) => - rows.push([it.label, "", j.prev.items[i].amount, it.amount, j.acc.items[i].amount]), - ); - rows.push(["공급가액", "", j.prev.supply, j.cur.supply, j.acc.supply]); - rows.push(["부가가치세", "", j.prev.vat, j.cur.vat, j.acc.vat]); - rows.push(["기성금액", run.contractTotal, j.prev.total, j.cur.total, j.acc.total]); - rows.push(["비율(%)", 100, run.rate.prev, run.rate.cur, run.rate.acc]); + // 0632 = ST_P_ConEst TPM_JAB_K — 계약 금액 | 전회·금회·누계 금액·비율(칸 3·4·2 ÷ 칸 1 × 100) | 비고 + // 머리말 「3. 기성부분금액 : 금 … 원정 (₩…)」 = COSTW4(금회 총공사비) 0x48037b + const { base, run } = compute(ctx); + const pc = (x, c) => (c ? Math.round((x / c) * 1e4) / 1e2 : 0); + const rows = G.aggregate(base, run, 1).map((nd) => { + const s = nd.st; + return [nd.itnum || "", nd.name, nd.spec || "", s.ctr.tAmt] + .concat([s.prev.tAmt, pc(s.prev.tAmt, s.ctr.tAmt), s.cur.tAmt]) + .concat([pc(s.cur.tAmt, s.ctr.tAmt), s.acc.tAmt, pc(s.acc.tAmt, s.ctr.tAmt), ""]); + }); + const head1 = ["공종", "명칭", "규격"].map((t) => ({ t, r: 2 })); return [ { name: "기성부분총괄내역서", title: "기 성 부 분 총 괄 내 역 서", - info: info(run), - head: [["구분", "계약", "전회", "금회", "누계"]], + info: info(run).concat([`3. 기성부분금액 : ${S.fmt(run.jab.cur.total)}원`]), + head: [ + head1.concat( + ["계약"], + ["전회", "금회", "누계"].map((t) => ({ t, c: 2 })), + [{ t: "비고", r: 2 }], + ), + ["금액", "금액", "비율", "금액", "비율", "금액", "비율"], + ], rows, }, ]; @@ -87,7 +131,7 @@ ]; if (sajung) vals.push(s.acc.tAmt); if (rate) { - const pc = (x) => (s.ctr.tAmt ? Math.round((x / s.ctr.tAmt) * 1e5) / 1e3 : 0); + const pc = (x) => (s.ctr.tAmt ? Math.round((x / s.ctr.tAmt) * 1e4) / 1e2 : 0); vals.splice(6, 0, pc(s.prev.tAmt)); vals.splice(8, 0, pc(s.cur.tAmt)); vals.push(pc(s.acc.tAmt)); @@ -196,9 +240,10 @@ ``; const sel = (id, list, v) => ``; + const k0 = (p.seed && p.seed.kOrd) || 1; const top = `
회차${sel( "pg-cur", - p.rounds.map((_, i) => [i, `제 ${i + 1} 회`]), + p.rounds.map((_, i) => [i, `제 ${k0 + i} 회`]), p.cur, )} @@ -208,11 +253,12 @@ G.VAT_MODES.map((l, i) => [i, l]), rd.vatMode == null ? 1 : rd.vatMode, )}${inp("pg-vatm", rd.vatManual, 90)} - 공급가액 절사${sel("pg-sj", JEOL, rd.supplyJeol || 0)}총공사비 절사${sel("pg-tj", JEOL, rd.totalJeol || 0)} + 공급가액 절사${sel("pg-sj", JEOL_S, Math.abs(rd.supplyJeol || 0))}총공사비 절사${sel("pg-tj", JEOL_T, Math.abs(rd.totalJeol || 0))} 이윤 직접입력${inp("pg-iyun", rd.iyunManual, 90)} - 집계수준${sel("pg-level", G.LEVELS, p.level)}
`; + 집계수준${sel("pg-level", G.LEVELS, p.level)} + ${isProgPrj(ctx) ? `` : ""}`; const nodes = G.aggregate(base, run, n0(p.level)); - const pc = (x, c) => (c ? Math.round((x / c) * 1e5) / 1e3 : 0); + const pc = (x, c) => (c ? Math.round((x / c) * 1e4) / 1e2 : 0); const rows = nodes.map((nd) => { const s = nd.st, r = nd.row; @@ -331,8 +377,18 @@ api.onChange("pg-pct", (e) => ((rd().pct = api.num(e.target.value, 0)), re())); api.onChange("pg-vat", (e) => ((rd().vatMode = Number(e.target.value)), re())); api.onChange("pg-vatm", (e) => ((rd().vatManual = val(e.target.value)), re())); - api.onChange("pg-sj", (e) => ((rd().supplyJeol = Number(e.target.value)), re())); - api.onChange("pg-tj", (e) => ((rd().totalJeol = Number(e.target.value)), re())); + // 두 절사는 하나만(cmBx_ValueChange 0x4cef28~0x4cef84) + api.onChange("pg-sj", (e) => { + rd().supplyJeol = Number(e.target.value); + if (rd().supplyJeol) rd().totalJeol = 0; + re(); + }); + api.onChange("pg-tj", (e) => { + rd().totalJeol = Number(e.target.value); + if (rd().totalJeol) rd().supplyJeol = 0; + re(); + }); + api.onClick("pg-store", () => (applyStorage(ctx), re())); api.onChange("pg-iyun", (e) => ((rd().iyunManual = val(e.target.value)), re())); api.onChange("pg-level", (e) => ((p.level = Number(e.target.value)), re())); api.bindEach(".pg-q", "onchange", (el) => { diff --git a/tools/stmate-test/view_prj_boq.js b/tools/stmate-test/view_prj_boq.js index 3d10990fe..9b71bfe5f 100644 --- a/tools/stmate-test/view_prj_boq.js +++ b/tools/stmate-test/view_prj_boq.js @@ -567,123 +567,12 @@ }); } - /** - * 저장 요청(/api/save) — 지금 값을 그대로 보내고 서버(stc_save.py)가 원본과 뜻으로 견줘 바뀐 칸만 씀 - * 보내지 않는 것: 1차 단가로 2차 칸 덮기 · 고정 낙찰율 3차 칸 · 소계·PRJLST 직접비(서버가 다시 셈) - * 근거: STC_왕복검증.md §3(알려진 칸만 갱신) · 16번 §4(행 금액·계층 집계·TCOSTn) - */ - const COSTN_SAVE_COL = - /^(NAME|SIZE|UNIT|AMT_\d1|PG_1|UC|SBMOK|S_ADJ|ADJ_[MLS]|RXX|NAGCD|[TMLS]AMT[1-5])$/; - const isPctRow = (r) => - String(r.UNIT1 || "") - .trim() - .endsWith("%") && num(r.T_AMT1) > 0; - const plainFields = (r) => - Object.fromEntries( - Object.entries(r).filter( - ([k, v]) => - !k.startsWith("_") && !k.endsWith("_HEX") && k !== "IFORM" && typeof v !== "object", - ), - ); - - function itemQtyFields(b, raw) { - const u = {}; - if (!b) return u; - if (isPctRow(raw)) { - (b.pctQtys || []).forEach((q, k) => q != null && (u[`QTY${k + 1}`] = q)); - return u; - } - if (b.qty !== undefined) u.QTY1 = b.qty; - const q = Array.isArray(b.qtys) ? b.qtys : null; - for (let n = 2; n <= 4; n++) if (q && q[n - 1] !== undefined) u[`QTY${n}`] = q[n - 1]; - if (q && num(q[1]) > 0 && b.changedQty !== undefined && num(b.changedQty) !== num(q[1])) - u.QTY2 = b.changedQty; // 변경 수량 칸만 고친 화면(rev-edit-qty2) - Object.entries(b.units || {}).forEach(([n, mls]) => { - if (num(n) < 2 || !Array.isArray(mls)) return; - ["M", "L", "S"].forEach((c, k) => (u[`${c}AMT${n}`] = mls[k])); - }); - return u; - } - - function newItemRow(b) { - const q = Array.isArray(b.qtys) ? b.qtys : [b.qty, b.changedQty, 0, 0]; - const u = { _new: true, BDCODE1: b.code || b.refId, NAME1: b.name, SIZE1: b.spec }; - Object.assign(u, { UNIT1: b.unit, ITNUM: b.itnum || "", ENDCODE: 0 }); - q.forEach((v, k) => (u[`QTY${k + 1}`] = v || 0)); - return Object.assign(u, itemQtyFields(b, u)); - } - - function buildSavePayload(ctx) { - const d = ctx.dbfData || {}; - const comp = ctx.computed || {}; - const items = (ctx.state.boqItems || []).filter((b) => b._recno !== undefined && !b.isNew); - const byRec = new Map(items.map((b) => [b._recno, b])); - const fresh = (ctx.state.boqItems || []).filter((b) => b.isNew && b._recno === undefined); - const boqUpdates = []; - (d.boq_rows || []).forEach((r) => { - const isNew = r._new || r.SORTCODE === undefined; - const u = Object.assign(plainFields(r), itemQtyFields(byRec.get(r._recno), r)); - boqUpdates.push( - isNew ? Object.assign(u, { _new: true }) : Object.assign(u, { _recno: r._recno }), - ); - fresh - .filter((b) => b.parentRecno === r._recno) - .forEach((b) => boqUpdates.push(newItemRow(b))); - }); - fresh.filter((b) => b.parentRecno == null).forEach((b) => boqUpdates.push(newItemRow(b))); - - const prj = d.prjlst || {}; - const prjUpd = { PNAME: ctx.state.projectMeta.pname, PNUM: ctx.state.projectMeta.pnum }; - Object.entries(comp.stages || {}).forEach(([n, st]) => { - const g = st && st.kanjub && st.kanjub.grandTotal; - if ( - g !== undefined && - (n === "1" || num(prj[`COSTW${n}`]) > 0 || num(prj.K_ORD) >= num(n) - 1) - ) - prjUpd[`COSTW${n}`] = g; - }); - if (!comp.stages && comp.kanjubComputed) prjUpd.COSTW1 = comp.kanjubComputed.GRAND_TOTAL; - - const smt = d.prjlst_smt || {}; - const rts = (ctx.state.kanjubConfig && ctx.state.kanjubConfig.rates) || {}; - const smtCand = { - "1_R_KANNO": rts.KANNO, - "1_R_SANBO": rts.SANBO, - "1_R_KOBO": rts.KOBO, - "1_R_KUNBO": rts.KUNBO, - "1_R_SLVBO": rts.SLVBO, - "1_R_YUNBO": rts.YUNBO, - "1_R_ANJUN": rts.ANJUN, - "1_R_T_KITA": rts.KITA, - "1_R_HWAN": rts.HWAN, - "1_R_EQIPSU": rts.EQIP, - "1_R_ILBAN": rts.ILBAN, - "1_R_IYUN": rts.IYUN, - "1_C_ANJUN_G": ctx.state.kanjubConfig && ctx.state.kanjubConfig.anjunBaseAdd, - }; - const smtUpd = Object.fromEntries( - Object.entries(smtCand).filter(([k, v]) => k in smt && v !== undefined && v !== null), - ); - return { - source_path: ctx.currentSourcePath, - target_folder_name: (ctx.state.projectMeta.pname || "stmate_edited").slice(0, 28), - boq_table: d.boq_table_name || "", - costn_updates: (d.costn_rows || []).map((r) => - Object.fromEntries( - Object.entries(r).filter(([k]) => k === "CODE" || COSTN_SAVE_COL.test(k)), - ), - ), - costn_memo_updates: ctx.uiState.editedSmtMap || {}, - boq_updates: boqUpdates, - boq_deleted: d.boq_deleted || ctx.uiState.boqDeleted || [], - prjlst_updates: prjUpd, - smt_updates: smtUpd, - // 서버(stc_save_extra)가 불러온 값과 견줘 바뀐 것만 씀 — 제잡비 설정 · 구성표 · 수량코드 - kanjub_stages: ctx.state.kanjubStages || {}, - bdqty_rows: d.bdqty_rows || null, - qcode_rows: d.qcode_rows || null, - }; - } + // 저장 요청 묶음 — save_payload.js + const buildSavePayload = (ctx) => + ( + global.STMATE_SAVE_PAYLOAD || + (typeof require !== "undefined" ? require("./save_payload.js") : null) + ).buildSavePayload(ctx); global.STMATE_VIEW_PRJ_BOQ = { evaluateFullBoqRows,