feat(stmate-test): REA MCP(Ghidra) 실행·계약 재검증 — MROUNDUP · ITM_TYP 이름 · 실행예산서 Ⅰ·Ⅱ · 계약·실행내역서 열 · 장부

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-14 13:16:31 +09:00
co-authored by Claude Opus 5.5
parent a9b9163f87
commit e655e29cdc
34 changed files with 5522 additions and 188 deletions
@@ -169,12 +169,12 @@ OPTIMIZ(묶음 T=X, 우선 0, 자릿수 = wCm_Jeol 값(0~−5), 출력칸 1, 모
설정 키(0x42aeba~0x42af11): +0x7c4 = START/CHGNM(단가산출근거 계산방식 · 기본 참) · +0x7c6 = START/CHBNM(일위대가표 · 기본 = CHGNM 값) · +0x7c5 = START/CHNNM(내역서 · 기본 참). ST_Sys cmBx_CHG·CHB·CHN 항목 「비목별금액 먼저계산」「총액 먼저 계산」.
### 5.5 적용제외 공정 · 높음(ITM_TYP 뜻 미확인)
### 5.5 적용제외 공정 · 높음(ITM_TYP 이름은 8.2 절)
- 목록 0x55409c: `BDCODE1="T" .and. BDCODE1>="T<n>"`(n = cBx_Lev 값 T1~T9) → 계표시 머리만 · 열 ITNUM·NAME1·SIZE1·T_AMT1·BDCODE1 · 5열 적용제외 기본 체크 = ITM_TYP ∈ {11, 21, 31, 41, 51, 71, 72}(비트표 0x55448c) · 6열 RecNo.
- 확인 0x553c08: 체크된 행 RecNo 를 전역 동적 배열 0x5fa124 에 모음 → 확인 창 → 플래그 [0x5fa11c] = 1.
- 변환 고리 0x555f68~0x5560d6: SORTCODE 차례 · 고른 RecNo 를 만나면 그 ENDCODE 까지 건너뜀 · 닫는 행에서 해제.
- 표본 7건 모든 머리 ITM_TYP = 0(관찰).
- 표본 7건 모든 머리 ITM_TYP = 0(관찰) · 이름표는 8.2 절.
### 5.6 비과세자재대 옵션 · 높음(키) / 중간(마지막 기록 뜻)
@@ -189,7 +189,7 @@ OPTIMIZ(묶음 T=X, 우선 0, 자릿수 = wCm_Jeol 값(0~−5), 출력칸 1, 모
| 0673 | 실행예산서Ⅰ | 실 행 예 산 서 | 공종 25 · 설계(계획) 20 · 실행예산 25 · 작업명 15 · 구분 25 |
| 0674 | 실행예산서Ⅱ | 실 행 예 산 서 | 같은 다섯 열 |
ST_Prt.CPM 의 「실행예산서Ⅰ」「실행예산서Ⅱ」는 메뉴 목록 문자열 묶음 안에만 있고 직접 참조 코드 없음 — Ⅰ·Ⅱ 의 행 고르기 차이는 미확인.
Ⅰ·Ⅱ 의 인쇄 모듈·줄 고르기는 8.2 절(REA MCP 보강).
## 7. 실물 대조
@@ -201,14 +201,39 @@ ST_Prt.CPM 의 「실행예산서Ⅰ」「실행예산서Ⅱ」는 메뉴 목록
| 비과세자재대 키 | 7건 모두 C_NBUGAM 0 · 영덕만 C_BUGA_M 비0(설계 공사) — 계약 표본 대조 없음 |
| 실행예산·중기 실행단가 | 표본 0건 — 손계산 대조만 |
## 8. 미확인
## 8. REA MCP 보강 (rea-agents 6.7.0 · Ghidra 12.1.4 · 같은 날)
- 방법: REA MCP 세션(`open_binary` provider ghidra · `procedure_pseudo_code` · `resolve_containing_procedure`) + 앞 절 capstone 대조. 근거 원문 `evidence/rea_mcp/*.json`(evidence_id 포함) · 새 역어셈블 창 `evidence/*.asm.txt`.
- Ghidra 함수 관리자 한계: Delphi 게시 메서드(TwM_Mk_Cont.Act_Find_NagExecute 0x556d68 · MK_CONT_BOQ_ 0x555ce8 · Act_Calc_EstExecute 0x5569d8 · ST_Boq 0x456504)는 「not_in_procedure」 — 그 부분은 capstone 결과 유지.
### 8.1 교차 확인
| 대상 | REA 근거 | 결과 |
|---|---|---|
| 계약 코드 갈래 0x554be0 | `main_conv.json` · `STmate_0x554be0_ghidra_pseudo.c` | 5.3·5.4 와 같음 — 생성 켬·대표율 0 관문, B·D·X/L·M·S·W/Q 갈래, `WBXDMLS` 자리, 대표율 100·0 건너뜀, 세 율 같음 → OPTIMIZ(B·D·그 밖 세 갈래), 다름 → MROUNDUD 셋, 새 코드 `'00000'`, 번호 되씀(+0x7bc·+0x7a0…), NAGCD·UC·BCONT 는 새 코드 첫 글자 B·D·X 일 때만 · **고칠 것 없음** |
| MROUNDUP 0x4547ac | `dpc_mroundup.json` | 아래 8.2 |
### 8.2 풀린 미확인
| 항목 | 관찰 | 근거 | 확신 |
|---|---|---|---|
| MROUNDUP(값, 자릿수) | FormatFloat('0.##########') 로 미소값 자리 정함(MROUNDUD 와 같은 표) → FormatFloat('0.0#########', \|값\|+미소값) → 자릿수에서 자름 → 버린 다음 숫자(최대 10자리)를 '0.' 뒤에 붙여 0x4297f4(= Trunc + (Frac > 0), Math.Ceil) → 하나라도 0 아니면 10^−d 더함 · 부호 복원 | Ghidra 의사코드 · 0x4297f4 capstone | 높음 |
| ITM_TYP 뜻 | ST_U_Convert 상수 배열 0x587d9c(문자열 121칸, 0~120) = 0 일반공종 · 10·11 안전관리비 · 20·21 품질관리비 · 30·31 미확정설계공종(PS) · 40 제요율적용제외공종 · 41 제비율적용제외공종 · 50·51 작업설 등 · 60·61 매입세 · 70 관급자재공종 · 71 관급자재대(도급자) · 72 관급자재대(관급자) · 111 비과세자재대 · 120 조달수수료. ST_Boq 0x4fe15b 는 T·E·C 줄의 ITM_TYP 1~119 를 이 목록 이름으로 바꿔 표시 | `ST_U_Convert_ITM_TYP_name_table_0x587d9c.txt` · `ST_Boq_ITM_TYP_lookup_0x4fe15b.asm.txt` | 높음(이름) · 중간(x0·x1 차이) |
| 적용제외 기본 체크 | ITM_TYP 11·21·31·41·51·71·72 = 안전관리비·품질관리비·PS·제비율적용제외·작업설 등·관급자재대(도급자·관급자) | 위 + 0x55448c | 높음 |
| 울진 관급 줄 미변환 | BOQ11 T3「관급자재대」(닫음 C3「합계(제외금액)」) 블록과 T3「페기물처리」 블록 = 계약에서 코드가 그대로인 공종 전부 · 두 머리 ITM_TYP 0 → 사용자 선택(기본 체크 아님) · 변환 고리에 구역 조건 없음과 맞음 | 울진 STC 대조(시험) | 높음 |
| 실행예산서 Ⅰ·Ⅱ(0673·0674) | ST_Prt 보고서 분기 0x44fdf5 · 꼬리표 20000+INDX 표 0x44ffc0 → 20673 = `Prn_Nae_Cont1` · 20674 = `Prn_Nae_Cont2`(ST_P_Nae.CPM) · 둘 다 모드값([0x57a4e0] 1·2)만 다르고 0x4c1904 공용 · 양식 PM_Nae_Cont(제목 「실행예산서」) | `ST_Prt_report_dispatch_0x44fdf5.asm.txt` · `ST_Prt_tag_table_20623_20695.txt` · `ST_P_Nae_Prn_Nae_Cont1_2_0x4c27f8.asm.txt` | 높음 |
| Ⅰ·Ⅱ 줄 고르기 | 모드 1: 출력 설정 +0x1768 켬이면 조회식 `!(SUBSTR(BDCODE1,1,1)$"MLSWBDXAP" .and. QTY1=0)` · 모드 2: `SUBSTR(BDCODE1,1,1)$"TEC" .or. RS=1` · 모드 2 는 HRGroup1BeforePrint(0x4c3d38)에서 C1·E1(소계 닫음) 줄 안 찍음 · T1 머리 별도 처리(0x4c440e) | `ST_P_Nae_report_filter_mode_0x4c245d.asm.txt` · `…HRGroup1BeforePrint_0x4c3cd0.asm.txt` | 높음(조회식) · 중간(RS 칸 뜻) |
| 실행예산서 열 | PM_Nae_Cont 머리 띠: 공종 · 설계(계획)[수량·단위·금액] · 실행예산[작업명·구분·수량·단위·재료비·노무비·경비·총액(각 단가·금액)·비고] · 자료 칸 DES1·ITNUM·QTY2·UNIT2·T_AMT2·DES2·NAME1·SIZE1·UNIT1·BDCODE1 → 설계(계획) = 2칸 · 실행 = 1칸. SET_REP 다섯 열(6절)은 묶음 머리 | `ST_P_Nae_TPM_NAE_CONT.dfm.txt` | 높음(열) · 중간(작업명 = NAME1·구분 = SIZE1 대응) |
| 계약,실행내역서(0623·0624) | 20623 → `Prn_Nae` 또는 `Prn_NaeW`(설정 플래그로 고름) · 20624 → `Prn_Nae_P` 또는 `Prn_NaeW_P` — 설계 내역서와 같은 인쇄 모듈을 지금 공사(계약·실행)에 씀 · SET_REP FLDCNT 0 = 내역서 기본 열 | `ST_Prt_case_0623_0624_0x4513e7.asm.txt` | 높음(모듈) · 중간(플래그 뜻) |
| 실행예산 행 금액 0x456504 | 행 칸(QTY·PRPT·BDCODE·CODE·BIMOK·SBMOK·GUN·EQCODE·X_CODE·S_RATE·ITM_TYP·PRIN·PROUT·RATE…)을 계산 묶음에 싣고 수량칸 6개마다 0x433490(Q·A 줄) · 0x44019c → 0x43dee8(공용 행 계산) 부름 · CHNNM 바이트 전달 · OPTIMIZ 는 공용 계산 쪽(0x440aa1 등) — 설계 내역과 같은 행 엔진 | `ST_Boq_row_calc_0x456504.asm.txt` | 중간~높음 |
| 예상적용율 찾기 0x556d68 | 직접공사비 TCOST 0 이면 거절 · 0x45f974(원가계산 전체)로 총공사비 · 기본 목표 = 0.5~1.5 배 범위 안내 + 입력창 · 첫 율 = MROUNDUP(직접비 ÷ (총공사비 − 고정분), 5) · 되풀이: 비목 합(MCOST·LCOST·SCOST) × 율 → MROUNDUD(·,0,0) → 다시 원가계산 · 오차 비 ≥ 1/N 이면 율 ± 1/(2N)(N = min(5000, round(목표 ÷ 5000)))·MROUNDUD(·,5,0) · 마지막 율 × 100(소수 셋째 = 0.001%) · 행 단위 변환이 아니라 **비목 합 근사**(「대략」) | `STmate_TwM_Mk_Cont_Act_Find_NagExecute_0x556d68.asm.txt` | 중간 |
## 9. 미확인
| 항목 | 막힌 까닭 |
|---|---|
| MROUNDUP 본문 | 이름·호출 자리만 · 올림(0 반대쪽)으로 읽음 |
| ITM_TYP 코드 뜻 | 표본 머리 전부 0 |
| 실행예산서 Ⅰ·Ⅱ 행 차이 | ST_Prt 직접 참조 없음 |
| 행 금액 계산 0x456504(ST_Boq) | 미해독 |
| 울진 관급 구역 줄 미변환 까닭 | 변환 고리에 구역 조건 없음 · 머리 선택 또는 ITM_TYP 기본 체크 추정 불가 |
| 예상적용율 찾기 0x556d68 | 5000 나눔 반복·MROUNDUP 다수 — 세부 미해독 |
| MkBoq 1칸 → 3칸 복사 갈래 조건 | PCLASS 분기표 미해독 |
| RS 칸 뜻(실행예산서 Ⅱ 줄 고르기) | 실행예산 내역 만들기(MkBoq) 갈래 미해독 · 표본 0건 |
| 출력 설정 +0x1768 · 0623 의 Prn_Nae/Prn_NaeW 고름 플래그 이름 | 설정 화면 대응 미추적 |
| 예상적용율 찾기의 「고정분」(0x45f974 두 번째 결과) 정체 | 원가계산 내부 인자 미해독 |
| ITM_TYP x0·x1 차이(머리·공종?) | 표본 7건 ITM_TYP 전부 0 |
| MkBoq 1칸 → 2칸·3칸 복사 갈래 조건 | PCLASS 분기표 미해독 |
@@ -0,0 +1,419 @@
0x4547ac: push ebp
0x4547ad: mov ebp, esp
0x4547af: mov ecx, 0x14
0x4547b4: push 0
0x4547b6: push 0
0x4547b8: dec ecx
0x4547b9: jne 0x4547b4
0x4547bb: push ecx
0x4547bc: push ebx
0x4547bd: push esi
0x4547be: push edi
0x4547bf: xor eax, eax
0x4547c1: push ebp
0x4547c2: push 0x454cff
0x4547c7: push dword ptr fs:[eax]
0x4547ca: mov dword ptr fs:[eax], esp
0x4547cd: fld xword ptr [ebp + 8]
0x4547d0: fabs
0x4547d2: add esp, -0xc
0x4547d5: fstp xword ptr [esp]
0x4547d8: wait
0x4547d9: lea edx, [ebp - 0x14]
0x4547dc: mov eax, 0x454d1c ; str='0.##########'
0x4547e1: call 0x40a19c
0x4547e6: mov eax, dword ptr [ebp - 0x14]
0x4547e9: push eax
0x4547ea: lea eax, [ebp - 0x2c]
0x4547ed: push eax
0x4547ee: call 0x453e4c
0x4547f3: mov edx, dword ptr [ebp - 0x2c]
0x4547f6: lea eax, [ebp - 0x14]
0x4547f9: call 0x4045bc
0x4547fe: fld xword ptr [ebp + 8]
0x454801: fld xword ptr [0x454d2c]
0x454807: fcompp
0x454809: fnstsw ax
0x45480b: sahf
0x45480c: jae 0x454832
0x45480e: lea eax, [ebp - 0x30]
0x454811: mov ecx, 0x454d40 ; str=' 값은 계산의 한계범위를 벗어난 값입니다.'
0x454816: mov edx, dword ptr [ebp - 0x14]
0x454819: call 0x404828
0x45481e: mov ecx, dword ptr [ebp - 0x30]
0x454821: mov dl, 1
0x454823: mov eax, dword ptr [0x407ab4]
0x454828: call 0x40b1d0
0x45482d: call 0x403efc
0x454832: mov edx, dword ptr [ebp - 0x14]
0x454835: mov eax, 0x454d74 ; str='.'
0x45483a: call 0x404b18
0x45483f: mov ebx, eax
0x454841: test ebx, ebx
0x454843: jle 0x45488b
0x454845: mov eax, dword ptr [ebp - 0x14]
0x454848: call 0x4047dc
0x45484d: sub eax, ebx
0x45484f: cmp eax, 0xb
0x454852: jge 0x45488b
0x454854: mov eax, dword ptr [ebp - 0x14]
0x454857: call 0x4047dc
0x45485c: mov esi, eax
0x45485e: test esi, esi
0x454860: jle 0x45488b
0x454862: mov edi, 1
0x454867: mov eax, dword ptr [ebp - 0x14]
0x45486a: mov al, byte ptr [eax + edi - 1]
0x45486e: add al, 0xcf
0x454870: sub al, 9
0x454872: jae 0x454887
0x454874: mov eax, dword ptr [ebp - 0x14]
0x454877: call 0x4047dc
0x45487c: sub eax, edi
0x45487e: cmp eax, 0xb
0x454881: jge 0x45488b
0x454883: xor ebx, ebx
0x454885: jmp 0x45488b
0x454887: inc edi
0x454888: dec esi
0x454889: jne 0x454867
0x45488b: mov eax, ebx
0x45488d: sub eax, 1
0x454890: jb 0x4548a2
0x454892: dec eax
0x454893: sub eax, 8
0x454896: jb 0x4548e7
0x454898: sub eax, 4
0x45489b: jb 0x45490e
0x45489d: jmp 0x454931
0x4548a2: xor eax, eax
0x4548a4: mov dword ptr [ebp - 0x28], eax
0x4548a7: mov dword ptr [ebp - 0x24], eax
0x4548aa: mov word ptr [ebp - 0x20], ax
0x4548ae: cmp dword ptr [ebp + 0x14], 0
0x4548b2: jl 0x454952
0x4548b8: mov eax, dword ptr [ebp - 0x14]
0x4548bb: push eax
0x4548bc: push 0x454d74
0x4548c1: call 0x453640
0x4548c6: test al, al
0x4548c8: jne 0x454952
0x4548ce: mov eax, dword ptr [ebp + 8]
0x4548d1: mov dword ptr [ebp - 0x10], eax
0x4548d4: mov eax, dword ptr [ebp + 0xc]
0x4548d7: mov dword ptr [ebp - 0xc], eax
0x4548da: mov ax, word ptr [ebp + 0x10]
0x4548de: mov word ptr [ebp - 8], ax
0x4548e2: jmp 0x454cb4
0x4548e7: push 0x4002
0x4548ec: push 0xa0000000
0x4548f1: push 0
0x4548f3: sub ebx, 0xd
0x4548f6: mov dword ptr [ebp - 0x34], ebx
0x4548f9: fild dword ptr [ebp - 0x34]
0x4548fc: add esp, -0xc
0x4548ff: fstp xword ptr [esp]
0x454902: wait
0x454903: call 0x42983c
0x454908: fstp xword ptr [ebp - 0x28]
0x45490b: wait
0x45490c: jmp 0x454952
0x45490e: push 0x4002
0x454913: push 0xa0000000
0x454918: push 0
0x45491a: push 0xc001
0x45491f: push 0x80000000
0x454924: push 0
0x454926: call 0x42983c
0x45492b: fstp xword ptr [ebp - 0x28]
0x45492e: wait
0x45492f: jmp 0x454952
0x454931: push 0x4002
0x454936: push 0xa0000000
0x45493b: push 0
0x45493d: push 0xc002
0x454942: push 0x90000000
0x454947: push 0
0x454949: call 0x42983c
0x45494e: fstp xword ptr [ebp - 0x28]
0x454951: wait
0x454952: fld xword ptr [ebp + 8]
0x454955: fcomp dword ptr [0x454d78] ; f32=0.0
0x45495b: fnstsw ax
0x45495d: sahf
0x45495e: je 0x4549b7
0x454960: fld xword ptr [ebp + 8]
0x454963: fabs
0x454965: fld xword ptr [ebp - 0x28]
0x454968: faddp st(1)
0x45496a: add esp, -0xc
0x45496d: fstp xword ptr [esp]
0x454970: wait
0x454971: lea edx, [ebp - 0x14]
0x454974: mov eax, 0x454d84 ; str='0.0#########'
0x454979: call 0x40a19c
0x45497e: mov eax, dword ptr [ebp - 0x14]
0x454981: push eax
0x454982: lea eax, [ebp - 0x38]
0x454985: push eax
0x454986: call 0x453e4c
0x45498b: mov edx, dword ptr [ebp - 0x38]
0x45498e: lea eax, [ebp - 0x14]
0x454991: call 0x4045bc
0x454996: mov eax, dword ptr [ebp - 0x14]
0x454999: push eax
0x45499a: push 0x454d74
0x45499f: call 0x453640
0x4549a4: test al, al
0x4549a6: jne 0x4549e4
0x4549a8: lea eax, [ebp - 0x14]
0x4549ab: mov edx, 0x454d9c ; str='.0'
0x4549b0: call 0x4047e4
0x4549b5: jmp 0x4549e4
0x4549b7: xor eax, eax
0x4549b9: mov dword ptr [ebp - 0x10], eax
0x4549bc: mov dword ptr [ebp - 0xc], eax
0x4549bf: mov word ptr [ebp - 8], ax
0x4549c3: jmp 0x454cb4
0x4549c8: mov edx, dword ptr [ebp - 0x14]
0x4549cb: mov eax, 0x454da8 ; str=','
0x4549d0: call 0x404b18
0x4549d5: mov edx, eax
0x4549d7: lea eax, [ebp - 0x14]
0x4549da: mov ecx, 1
0x4549df: call 0x404a74
0x4549e4: mov edx, dword ptr [ebp - 0x14]
0x4549e7: mov eax, 0x454da8 ; str=','
0x4549ec: call 0x404b18
0x4549f1: test eax, eax
0x4549f3: jg 0x4549c8
0x4549f5: mov edx, dword ptr [ebp - 0x14]
0x4549f8: mov eax, 0x454d74 ; str='.'
0x4549fd: call 0x404b18
0x454a02: mov ebx, eax
0x454a04: cmp dword ptr [ebp + 0x14], 0
0x454a08: jne 0x454a49
0x454a0a: lea eax, [ebp - 0x3c]
0x454a0d: push eax
0x454a0e: lea edx, [ebx + 1]
0x454a11: mov ecx, 0xa
0x454a16: mov eax, dword ptr [ebp - 0x14]
0x454a19: call 0x404a34
0x454a1e: mov ecx, dword ptr [ebp - 0x3c]
0x454a21: lea eax, [ebp - 0x1c]
0x454a24: mov edx, 0x454db4 ; str='0.'
0x454a29: call 0x404828
0x454a2e: lea eax, [ebp - 0x14]
0x454a31: push eax
0x454a32: mov ecx, ebx
0x454a34: dec ecx
0x454a35: mov edx, 1
0x454a3a: mov eax, dword ptr [ebp - 0x14]
0x454a3d: call 0x404a34
0x454a42: xor ebx, ebx
0x454a44: jmp 0x454bde
0x454a49: cmp dword ptr [ebp + 0x14], 0
0x454a4d: jle 0x454abe
0x454a4f: lea eax, [ebp - 0x40]
0x454a52: push eax
0x454a53: mov edx, dword ptr [ebp + 0x14]
0x454a56: add edx, ebx
0x454a58: inc edx
0x454a59: mov ecx, 0xa
0x454a5e: mov eax, dword ptr [ebp - 0x14]
0x454a61: call 0x404a34
0x454a66: mov ecx, dword ptr [ebp - 0x40]
0x454a69: lea eax, [ebp - 0x1c]
0x454a6c: mov edx, 0x454db4 ; str='0.'
0x454a71: call 0x404828
0x454a76: lea eax, [ebp - 0x44]
0x454a79: push eax
0x454a7a: mov ecx, ebx
0x454a7c: dec ecx
0x454a7d: mov edx, 1
0x454a82: mov eax, dword ptr [ebp - 0x14]
0x454a85: call 0x404a34
0x454a8a: push dword ptr [ebp - 0x44]
0x454a8d: push 0x454d74
0x454a92: lea eax, [ebp - 0x48]
0x454a95: push eax
0x454a96: lea edx, [ebx + 1]
0x454a99: mov ecx, dword ptr [ebp + 0x14]
0x454a9c: mov eax, dword ptr [ebp - 0x14]
0x454a9f: call 0x404a34
0x454aa4: push dword ptr [ebp - 0x48]
0x454aa7: lea eax, [ebp - 0x14]
0x454aaa: mov edx, 3
0x454aaf: call 0x40489c
0x454ab4: mov ebx, dword ptr [ebp + 0x14]
0x454ab7: neg ebx
0x454ab9: jmp 0x454bde
0x454abe: mov eax, dword ptr [ebp + 0x14]
0x454ac1: cdq
0x454ac2: xor eax, edx
0x454ac4: sub eax, edx
0x454ac6: mov dword ptr [ebp + 0x14], eax
0x454ac9: mov eax, ebx
0x454acb: dec eax
0x454acc: cmp eax, dword ptr [ebp + 0x14]
0x454acf: jle 0x454b76
0x454ad5: lea eax, [ebp - 0x18]
0x454ad8: call 0x404524
0x454add: mov esi, dword ptr [ebp + 0x14]
0x454ae0: test esi, esi
0x454ae2: jle 0x454af9
0x454ae4: lea edx, [ebp - 0x18]
0x454ae7: mov ecx, 1
0x454aec: mov eax, 0x454dc0 ; str='0'
0x454af1: call 0x404abc
0x454af6: dec esi
0x454af7: jne 0x454ae4
0x454af9: lea eax, [ebp - 0x4c]
0x454afc: push eax
0x454afd: mov eax, dword ptr [ebp - 0x14]
0x454b00: push eax
0x454b01: push 0x454d74
0x454b06: lea eax, [ebp - 0x50]
0x454b09: push eax
0x454b0a: call 0x453a20
0x454b0f: lea eax, [ebp - 0x50]
0x454b12: push eax
0x454b13: mov eax, dword ptr [ebp - 0x14]
0x454b16: push eax
0x454b17: push 0x454d74
0x454b1c: lea eax, [ebp - 0x54]
0x454b1f: push eax
0x454b20: call 0x453ab4
0x454b25: mov edx, dword ptr [ebp - 0x54]
0x454b28: pop eax
0x454b29: call 0x4047e4
0x454b2e: mov eax, dword ptr [ebp - 0x50]
0x454b31: mov esi, ebx
0x454b33: sub esi, dword ptr [ebp + 0x14]
0x454b36: mov edx, esi
0x454b38: mov ecx, 0xa
0x454b3d: call 0x404a34
0x454b42: mov ecx, dword ptr [ebp - 0x4c]
0x454b45: lea eax, [ebp - 0x1c]
0x454b48: mov edx, 0x454db4 ; str='0.'
0x454b4d: call 0x404828
0x454b52: lea eax, [ebp - 0x58]
0x454b55: push eax
0x454b56: mov ecx, esi
0x454b58: dec ecx
0x454b59: mov edx, 1
0x454b5e: mov eax, dword ptr [ebp - 0x14]
0x454b61: call 0x404a34
0x454b66: mov edx, dword ptr [ebp - 0x58]
0x454b69: lea eax, [ebp - 0x14]
0x454b6c: mov ecx, dword ptr [ebp - 0x18]
0x454b6f: call 0x404828
0x454b74: jmp 0x454bdb
0x454b76: push 0x454db4
0x454b7b: lea eax, [ebp - 0x5c]
0x454b7e: push eax
0x454b7f: mov ecx, dword ptr [ebp + 0x14]
0x454b82: sub ecx, ebx
0x454b84: dec ecx
0x454b85: mov edx, 1
0x454b8a: mov eax, 0x454dcc ; str='0000000000'
0x454b8f: call 0x404a34
0x454b94: push dword ptr [ebp - 0x5c]
0x454b97: mov eax, dword ptr [ebp - 0x14]
0x454b9a: push eax
0x454b9b: push 0x454d74
0x454ba0: lea eax, [ebp - 0x60]
0x454ba3: push eax
0x454ba4: call 0x453a20
0x454ba9: push dword ptr [ebp - 0x60]
0x454bac: mov eax, dword ptr [ebp - 0x14]
0x454baf: push eax
0x454bb0: push 0x454d74
0x454bb5: lea eax, [ebp - 0x64]
0x454bb8: push eax
0x454bb9: call 0x453ab4
0x454bbe: push dword ptr [ebp - 0x64]
0x454bc1: lea eax, [ebp - 0x1c]
0x454bc4: mov edx, 4
0x454bc9: call 0x40489c
0x454bce: lea eax, [ebp - 0x14]
0x454bd1: mov edx, 0x454dc0 ; str='0'
0x454bd6: call 0x4045bc
0x454bdb: mov ebx, dword ptr [ebp + 0x14]
0x454bde: mov eax, dword ptr [ebp - 0x1c]
0x454be1: call 0x40a1f4
0x454be6: add esp, -0xc
0x454be9: fstp xword ptr [esp]
0x454bec: wait
0x454bed: call 0x4297f4
0x454bf2: mov dword ptr [ebp - 0x34], eax
0x454bf5: fild dword ptr [ebp - 0x34]
0x454bf8: fstp xword ptr [ebp - 0x70]
0x454bfb: wait
0x454bfc: push 0x4002
0x454c01: push 0xa0000000
0x454c06: push 0
0x454c08: mov dword ptr [ebp - 0x74], ebx
0x454c0b: fild dword ptr [ebp - 0x74]
0x454c0e: add esp, -0xc
0x454c11: fstp xword ptr [esp]
0x454c14: wait
0x454c15: call 0x42983c
0x454c1a: fld xword ptr [ebp - 0x70]
0x454c1d: fmulp st(1)
0x454c1f: fstp xword ptr [ebp - 0x28]
0x454c22: wait
0x454c23: mov eax, dword ptr [ebp - 0x14]
0x454c26: call 0x40a1f4
0x454c2b: fld xword ptr [ebp - 0x28]
0x454c2e: faddp st(1)
0x454c30: fsubr dword ptr [0x454d78] ; f32=0.0
0x454c36: lea eax, [ebp - 0x94]
0x454c3c: call 0x405520
0x454c41: push dword ptr [ebp - 0x88]
0x454c47: push dword ptr [ebp - 0x8c]
0x454c4d: push dword ptr [ebp - 0x90]
0x454c53: push dword ptr [ebp - 0x94]
0x454c59: mov eax, dword ptr [ebp - 0x14]
0x454c5c: call 0x40a1f4
0x454c61: fld xword ptr [ebp - 0x28]
0x454c64: faddp st(1)
0x454c66: lea eax, [ebp - 0xa4]
0x454c6c: call 0x405520
0x454c71: push dword ptr [ebp - 0x98]
0x454c77: push dword ptr [ebp - 0x9c]
0x454c7d: push dword ptr [ebp - 0xa0]
0x454c83: push dword ptr [ebp - 0xa4]
0x454c89: fld xword ptr [ebp + 8]
0x454c8c: fcomp dword ptr [0x454d78] ; f32=0.0
0x454c92: fnstsw ax
0x454c94: sahf
0x454c95: seta al
0x454c98: push eax
0x454c99: lea eax, [ebp - 0x84]
0x454c9f: push eax
0x454ca0: call 0x4535a0
0x454ca5: lea eax, [ebp - 0x84]
0x454cab: call 0x4054c4
0x454cb0: fstp xword ptr [ebp - 0x10]
0x454cb3: wait
0x454cb4: xor eax, eax
0x454cb6: pop edx
0x454cb7: pop ecx
0x454cb8: pop ecx
0x454cb9: mov dword ptr fs:[eax], edx
0x454cbc: push 0x454d06
0x454cc1: lea eax, [ebp - 0xa4]
0x454cc7: mov edx, dword ptr [0x40109c]
0x454ccd: mov ecx, 3
0x454cd2: call 0x405018
0x454cd7: lea eax, [ebp - 0x64]
0x454cda: mov edx, 0xc
0x454cdf: call 0x404548
0x454ce4: lea eax, [ebp - 0x30]
0x454ce7: mov edx, 2
0x454cec: call 0x404548
0x454cf1: lea eax, [ebp - 0x1c]
0x454cf4: mov edx, 3
0x454cf9: call 0x404548
0x454cfe: ret
@@ -0,0 +1,33 @@
0x4fe15b: mov eax, dword ptr [ebp - 8]
0x4fe15e: mov al, byte ptr [eax]
0x4fe160: sub al, 0x43
0x4fe162: je 0x4fe16c
0x4fe164: sub al, 2
0x4fe166: je 0x4fe16c
0x4fe168: sub al, 0xf
0x4fe16a: jne 0x4fe1cc
0x4fe16c: mov eax, dword ptr [ebx + 0x2f4]
0x4fe172: mov edx, 0x4fe53c ; str='ITM_TYP'
0x4fe177: call 0x403ab8 ; Apollo5D6!@Apodset@TApolloTable@GetInteger$qqr17System@AnsiString
0x4fe17c: dec eax
0x4fe17d: sub eax, 0x77
0x4fe180: jae 0x4fe1cc
0x4fe182: lea ecx, [ebp - 0x110]
0x4fe188: mov eax, dword ptr [ebx + 0x2f4]
0x4fe18e: mov edx, 0x4fe53c ; str='ITM_TYP'
0x4fe193: call 0x403ad0 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x4fe198: mov edx, dword ptr [ebp - 0x110]
0x4fe19e: mov eax, dword ptr [esi + 0xd8]
0x4fe1a4: mov ecx, dword ptr [eax]
0x4fe1a6: call dword ptr [ecx + 0x54]
0x4fe1a9: mov edx, eax
0x4fe1ab: lea ecx, [ebp - 0x10c]
0x4fe1b1: mov eax, dword ptr [esi + 0x90]
0x4fe1b7: mov edi, dword ptr [eax]
0x4fe1b9: call dword ptr [edi + 0xc]
0x4fe1bc: mov edx, dword ptr [ebp - 0x10c]
0x4fe1c2: mov eax, dword ptr [ebp + 0x14]
0x4fe1c5: call 0x401220 ; rtl60!@System@@LStrAsg$qqrpvpxv
0x4fe1ca: jmp 0x4fe1d4
0x4fe1cc: mov eax, dword ptr [ebp + 0x14]
0x4fe1cf: call 0x401210 ; rtl60!@System@@LStrClr$qqrpv
@@ -0,0 +1,487 @@
0x456504: push ebp
0x456505: mov ebp, esp
0x456507: push ecx
0x456508: mov ecx, 0x46
0x45650d: push 0
0x45650f: push 0
0x456511: dec ecx
0x456512: jne 0x45650d
0x456514: push ecx
0x456515: xchg dword ptr [ebp - 4], ecx
0x456518: push ebx
0x456519: push esi
0x45651a: push edi
0x45651b: mov byte ptr [ebp - 2], cl
0x45651e: mov edi, edx
0x456520: mov byte ptr [ebp - 1], al
0x456523: mov ebx, dword ptr [ebp + 8]
0x456526: xor eax, eax
0x456528: push ebp
0x456529: push 0x456efa
0x45652e: push dword ptr fs:[eax]
0x456531: mov dword ptr fs:[eax], esp
0x456534: cmp byte ptr [ebp - 1], 0
0x456538: je 0x456638
0x45653e: mov esi, 1
0x456543: lea eax, [ebx + 0x130]
0x456549: mov dword ptr [ebp - 8], eax
0x45654c: push esi
0x45654d: push edi
0x45654e: mov esi, 0x456f0c
0x456553: lea edi, [ebp - 0x30]
0x456556: mov ecx, 8
0x45655b: rep movsd dword ptr es:[edi], dword ptr [esi]
0x45655d: pop edi
0x45655e: pop esi
0x45655f: mov eax, esi
0x456561: cmp eax, 0xff
0x456566: ja 0x45656c
0x456568: bts dword ptr [ebp - 0x30], eax
0x45656c: mov eax, dword ptr [ebp + 0xc]
0x45656f: cmp eax, 0xff
0x456574: ja 0x45657a
0x456576: bt dword ptr [ebp - 0x30], eax
0x45657a: jae 0x4565f1
0x45657c: lea eax, [ebp - 0x54]
0x45657f: mov edx, dword ptr [ebp + 0x10]
0x456582: mov cl, 0xfc
0x456584: call 0x401368 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi
0x456589: push dword ptr [ebp - 0x48]
0x45658c: push dword ptr [ebp - 0x4c]
0x45658f: push dword ptr [ebp - 0x50]
0x456592: push dword ptr [ebp - 0x54]
0x456595: lea eax, [ebp - 0x64]
0x456598: mov edx, esi
0x45659a: mov cl, 0xfc
0x45659c: call 0x401368 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi
0x4565a1: push dword ptr [ebp - 0x58]
0x4565a4: push dword ptr [ebp - 0x5c]
0x4565a7: push dword ptr [ebp - 0x60]
0x4565aa: push dword ptr [ebp - 0x64]
0x4565ad: cmp dword ptr [ebp + 0xc], 0
0x4565b1: sete al
0x4565b4: push eax
0x4565b5: lea eax, [ebp - 0x44]
0x4565b8: push eax
0x4565b9: call 0x42b2f8 ; DP_COMMON!IIF
0x4565be: lea eax, [ebp - 0x44]
0x4565c1: call 0x401350 ; rtl60!@System@@VarToReal$qqrrx14System@Variant
0x4565c6: call 0x401068 ; rtl60!@System@@ROUND$qqrv
0x4565cb: mov edx, dword ptr [0x52e784]
0x4565d1: mov ecx, dword ptr [edx + eax*4]
0x4565d4: lea eax, [ebp - 0x34]
0x4565d7: mov edx, 0x456f34 ; str='QTY'
0x4565dc: call 0x401270 ; rtl60!@System@@LStrCat3$qqrv
0x4565e1: mov edx, dword ptr [ebp - 0x34]
0x4565e4: mov eax, edi
0x4565e6: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString
0x4565eb: mov eax, dword ptr [ebp - 8]
0x4565ee: fstp qword ptr [eax]
0x4565f0: wait
0x4565f1: inc esi
0x4565f2: add dword ptr [ebp - 8], 8
0x4565f6: cmp esi, 6
0x4565f9: jne 0x45654c
0x4565ff: push 0x456f40
0x456604: lea eax, [ebp - 0x68]
0x456607: mov dl, byte ptr [ebx + 0x14]
0x45660a: call 0x401238 ; rtl60!@System@@LStrFromChar$qqrr17System@AnsiStringc
0x45660f: mov eax, dword ptr [ebp - 0x68]
0x456612: push eax
0x456613: call 0x42b308 ; DP_COMMON!MPOS
0x456618: test al, al
0x45661a: je 0x45699f
0x456620: mov edx, 0x456f54 ; str='PRPT'
0x456625: mov eax, edi
0x456627: call 0x403ab8 ; Apollo5D6!@Apodset@TApolloTable@GetInteger$qqr17System@AnsiString
0x45662c: mov word ptr [ebx + 0x41c], ax
0x456633: jmp 0x45699f
0x456638: lea ecx, [ebp - 0x16c]
0x45663e: mov edx, 0x456f64 ; str='BDCODE'
0x456643: mov eax, edi
0x456645: call 0x403ad0 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x45664a: mov edx, dword ptr [ebp - 0x16c]
0x456650: lea eax, [ebp - 0x168]
0x456656: mov ecx, 0xff
0x45665b: call 0x401258 ; rtl60!@System@@LStrToString$qqrv
0x456660: lea edx, [ebp - 0x168]
0x456666: lea eax, [ebx + 0x13]
0x456669: mov cl, 6
0x45666b: call 0x4010b0
0x456670: lea ecx, [ebp - 0x170]
0x456676: mov edx, 0x456f74 ; str='CODE'
0x45667b: mov eax, edi
0x45667d: call 0x403ad0 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x456682: mov edx, dword ptr [ebp - 0x170]
0x456688: lea eax, [ebp - 0x168]
0x45668e: mov ecx, 0xff
0x456693: call 0x401258 ; rtl60!@System@@LStrToString$qqrv
0x456698: lea edx, [ebp - 0x168]
0x45669e: lea eax, [ebx + 0x1a]
0x4566a1: mov cl, 6
0x4566a3: call 0x4010b0
0x4566a8: lea ecx, [ebp - 0x174]
0x4566ae: mov edx, 0x456f84 ; str='BIMOK'
0x4566b3: mov eax, edi
0x4566b5: call 0x403ad0 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x4566ba: mov edx, dword ptr [ebp - 0x174]
0x4566c0: lea eax, [ebp - 0x168]
0x4566c6: mov ecx, 0xff
0x4566cb: call 0x401258 ; rtl60!@System@@LStrToString$qqrv
0x4566d0: lea edx, [ebp - 0x168]
0x4566d6: lea eax, [ebx + 0x1d1]
0x4566dc: mov cl, 1
0x4566de: call 0x4010b0
0x4566e3: lea eax, [ebp - 0x17c]
0x4566e9: lea edx, [ebx + 0x1a]
0x4566ec: call 0x401248
0x4566f1: mov eax, dword ptr [ebp - 0x17c]
0x4566f7: lea edx, [ebp - 0x178]
0x4566fd: call 0x40177c ; rtl60!@Sysutils@Trim$qqrx17System@AnsiString
0x456702: mov eax, dword ptr [ebp - 0x178]
0x456708: mov edx, 0x456f94 ; str='PR'
0x45670d: call 0x401280 ; rtl60!@System@@LStrCmp$qqrv
0x456712: jne 0x45671d
0x456714: mov word ptr [ebx + 0x1d1], 0x2001
0x45671d: cmp byte ptr [ebx + 0x14], 0x44
0x456721: jne 0x456806
0x456727: lea ecx, [ebp - 0x180]
0x45672d: mov edx, 0x456fa0 ; str='SBMOK'
0x456732: mov eax, edi
0x456734: call 0x403ad0 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x456739: mov edx, dword ptr [ebp - 0x180]
0x45673f: lea eax, [ebp - 0x168]
0x456745: mov ecx, 0xff
0x45674a: call 0x401258 ; rtl60!@System@@LStrToString$qqrv
0x45674f: lea edx, [ebp - 0x168]
0x456755: lea eax, [ebx + 0x1d3]
0x45675b: mov cl, 1
0x45675d: call 0x4010b0
0x456762: push 0x456fb0
0x456767: lea eax, [ebp - 0x184]
0x45676d: lea edx, [ebx + 0x1d3]
0x456773: call 0x401248
0x456778: mov eax, dword ptr [ebp - 0x184]
0x45677e: push eax
0x45677f: call 0x42b308 ; DP_COMMON!MPOS
0x456784: test al, al
0x456786: je 0x456806
0x456788: push 0x456fbc
0x45678d: lea ecx, [ebp - 0x188]
0x456793: mov edx, 0x456fd0 ; str='GUN'
0x456798: mov eax, edi
0x45679a: call 0x403ad0 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x45679f: mov eax, dword ptr [ebp - 0x188]
0x4567a5: push eax
0x4567a6: call 0x42b308 ; DP_COMMON!MPOS
0x4567ab: test al, al
0x4567ad: je 0x456806
0x4567af: lea ecx, [ebp - 0x18c]
0x4567b5: mov edx, 0x456fd0 ; str='GUN'
0x4567ba: mov eax, edi
0x4567bc: call 0x403ad0 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x4567c1: mov edx, dword ptr [ebp - 0x18c]
0x4567c7: lea eax, [ebp - 0x168]
0x4567cd: mov ecx, 0xff
0x4567d2: call 0x401258 ; rtl60!@System@@LStrToString$qqrv
0x4567d7: lea edx, [ebp - 0x168]
0x4567dd: lea eax, [ebx + 0x1d5]
0x4567e3: mov cl, 1
0x4567e5: call 0x4010b0
0x4567ea: mov word ptr [ebx + 0x1d9], 0x2001
0x4567f3: lea eax, [ebx + 0x1d7]
0x4567f9: lea edx, [ebx + 0x1d5]
0x4567ff: mov cl, 1
0x456801: call 0x4010b0
0x456806: mov edx, 0x456fdc ; str='DEVD1'
0x45680b: mov eax, edi
0x45680d: call 0x403ac0 ; Apollo5D6!@Apodset@TApolloTable@GetLogical$qqr17System@AnsiString
0x456812: cmp ax, 1
0x456816: sbb eax, eax
0x456818: inc eax
0x456819: mov edx, dword ptr [ebp + 0xc]
0x45681c: mov byte ptr [ebx + edx + 0x1da], al
0x456823: lea ecx, [ebp - 0x190]
0x456829: mov edx, 0x456fec ; str='EQCODE'
0x45682e: mov eax, edi
0x456830: call 0x403ad0 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x456835: mov edx, dword ptr [ebp - 0x190]
0x45683b: lea eax, [ebp - 0x168]
0x456841: mov ecx, 0xff
0x456846: call 0x401258 ; rtl60!@System@@LStrToString$qqrv
0x45684b: lea edx, [ebp - 0x168]
0x456851: lea eax, [ebx + 0x2d]
0x456854: mov cl, 0xb
0x456856: call 0x4010b0
0x45685b: mov edx, 0x456ffc ; str='QTY1'
0x456860: mov eax, edi
0x456862: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString
0x456867: mov eax, dword ptr [ebp + 0xc]
0x45686a: fstp qword ptr [ebx + eax*8 + 0x128]
0x456871: wait
0x456872: lea ecx, [ebp - 0x194]
0x456878: mov edx, 0x45700c ; str='X_CODE'
0x45687d: mov eax, edi
0x45687f: call 0x403ad0 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x456884: mov edx, dword ptr [ebp - 0x194]
0x45688a: lea eax, [ebp - 0x168]
0x456890: mov ecx, 0xff
0x456895: call 0x401258 ; rtl60!@System@@LStrToString$qqrv
0x45689a: lea edx, [ebp - 0x168]
0x4568a0: lea eax, [ebx + 0x408]
0x4568a6: mov cl, 6
0x4568a8: call 0x4010b0
0x4568ad: push 0x456f40
0x4568b2: lea eax, [ebp - 0x198]
0x4568b8: mov dl, byte ptr [ebx + 0x1b]
0x4568bb: call 0x401238 ; rtl60!@System@@LStrFromChar$qqrr17System@AnsiStringc
0x4568c0: mov eax, dword ptr [ebp - 0x198]
0x4568c6: push eax
0x4568c7: call 0x42b308 ; DP_COMMON!MPOS
0x4568cc: test al, al
0x4568ce: je 0x4568e3
0x4568d0: mov edx, 0x456f54 ; str='PRPT'
0x4568d5: mov eax, edi
0x4568d7: call 0x403ab8 ; Apollo5D6!@Apodset@TApolloTable@GetInteger$qqr17System@AnsiString
0x4568dc: mov word ptr [ebx + 0x41c], ax
0x4568e3: mov al, byte ptr [ebx + 0x14]
0x4568e6: sub al, 0x44
0x4568e8: jne 0x456977
0x4568ee: lea ecx, [ebp - 0x1a0]
0x4568f4: mov edx, 0x45701c ; str='SPRPT'
0x4568f9: mov eax, edi
0x4568fb: call 0x403ad0 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x456900: mov edx, dword ptr [ebp - 0x1a0]
0x456906: lea ecx, [ebp - 0x19c]
0x45690c: mov ax, word ptr [ebx + 0x41c]
0x456913: call 0x4614b8
0x456918: mov edx, dword ptr [ebp - 0x19c]
0x45691e: lea eax, [ebp - 0x168]
0x456924: mov ecx, 0xff
0x456929: call 0x401258 ; rtl60!@System@@LStrToString$qqrv
0x45692e: lea edx, [ebp - 0x168]
0x456934: lea eax, [ebx + 0x40f]
0x45693a: mov cl, 0xb
0x45693c: call 0x4010b0
0x456941: push 0x45702c
0x456946: lea eax, [ebp - 0x1a4]
0x45694c: mov dl, byte ptr [ebx + 0x1b]
0x45694f: call 0x401238 ; rtl60!@System@@LStrFromChar$qqrr17System@AnsiStringc
0x456954: mov eax, dword ptr [ebp - 0x1a4]
0x45695a: push eax
0x45695b: call 0x42b308 ; DP_COMMON!MPOS
0x456960: test al, al
0x456962: je 0x456977
0x456964: mov edx, 0x457038 ; str='TPRPT'
0x456969: mov eax, edi
0x45696b: call 0x403ab8 ; Apollo5D6!@Apodset@TApolloTable@GetInteger$qqr17System@AnsiString
0x456970: mov word ptr [ebx + 0x41e], ax
0x456977: cmp byte ptr [ebx + 0x1b], 0x54
0x45697b: jne 0x456998
0x45697d: mov edx, 0x457048 ; str='S_RATE'
0x456982: mov eax, edi
0x456984: call 0x403ac0 ; Apollo5D6!@Apodset@TApolloTable@GetLogical$qqr17System@AnsiString
0x456989: cmp ax, 1
0x45698d: sbb eax, eax
0x45698f: inc eax
0x456990: mov byte ptr [ebx + 0x180], al
0x456996: jmp 0x45699f
0x456998: mov byte ptr [ebx + 0x180], 0
0x45699f: mov edx, 0x457058 ; str='EXIST1'
0x4569a4: mov eax, edi
0x4569a6: call 0x403ab8 ; Apollo5D6!@Apodset@TApolloTable@GetInteger$qqr17System@AnsiString
0x4569ab: mov dword ptr [ebx + 0x1e0], eax
0x4569b1: mov edx, 0x457068 ; str='SORTCODE'
0x4569b6: mov eax, edi
0x4569b8: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString
0x4569bd: fstp qword ptr [ebx + 0x1e8]
0x4569c3: wait
0x4569c4: mov eax, edi
0x4569c6: call 0x403b70 ; Apollo5D6!@Apodset@TApolloTable@GetSXRecno$qqrv
0x4569cb: mov dword ptr [ebx + 0x1f4], eax
0x4569d1: mov word ptr [ebx + 0x432], 0
0x4569da: cmp byte ptr [ebp - 1], 0
0x4569de: je 0x4569f3
0x4569e0: mov edx, 0x45707c ; str='ITM_TYP'
0x4569e5: mov eax, edi
0x4569e7: call 0x403ab8 ; Apollo5D6!@Apodset@TApolloTable@GetInteger$qqr17System@AnsiString
0x4569ec: mov word ptr [ebx + 0x452], ax
0x4569f3: lea eax, [ebp - 0x1ac]
0x4569f9: lea edx, [ebx + 0x1a]
0x4569fc: call 0x401248
0x456a01: mov eax, dword ptr [ebp - 0x1ac]
0x456a07: lea edx, [ebp - 0x1a8]
0x456a0d: call 0x40177c ; rtl60!@Sysutils@Trim$qqrx17System@AnsiString
0x456a12: mov eax, dword ptr [ebp - 0x1a8]
0x456a18: mov edx, 0x456f94 ; str='PR'
0x456a1d: call 0x401280 ; rtl60!@System@@LStrCmp$qqrv
0x456a22: je 0x456a55
0x456a24: lea eax, [ebp - 0x1b4]
0x456a2a: lea edx, [ebx + 0x1a]
0x456a2d: call 0x401248
0x456a32: mov eax, dword ptr [ebp - 0x1b4]
0x456a38: lea edx, [ebp - 0x1b0]
0x456a3e: call 0x40177c ; rtl60!@Sysutils@Trim$qqrx17System@AnsiString
0x456a43: mov eax, dword ptr [ebp - 0x1b0]
0x456a49: mov edx, 0x45708c ; str='RR'
0x456a4e: call 0x401280 ; rtl60!@System@@LStrCmp$qqrv
0x456a53: jne 0x456ad3
0x456a55: mov edx, 0x457098 ; str='PRIN'
0x456a5a: mov eax, edi
0x456a5c: call 0x403ab8 ; Apollo5D6!@Apodset@TApolloTable@GetInteger$qqr17System@AnsiString
0x456a61: mov word ptr [ebx + 0x420], ax
0x456a68: mov edx, 0x4570a8 ; str='PROUT'
0x456a6d: mov eax, edi
0x456a6f: call 0x403ab8 ; Apollo5D6!@Apodset@TApolloTable@GetInteger$qqr17System@AnsiString
0x456a74: mov word ptr [ebx + 0x422], ax
0x456a7b: cmp byte ptr [ebp - 1], 0
0x456a7f: je 0x456aad
0x456a81: mov edx, 0x4570b8 ; str='FRM_NH'
0x456a86: mov eax, edi
0x456a88: call 0x403ac0 ; Apollo5D6!@Apodset@TApolloTable@GetLogical$qqr17System@AnsiString
0x456a8d: cmp ax, 1
0x456a91: sbb eax, eax
0x456a93: inc eax
0x456a94: mov byte ptr [ebx + 0x430], al
0x456a9a: mov edx, 0x4570c8 ; str='RCU'
0x456a9f: mov eax, edi
0x456aa1: call 0x403ab8 ; Apollo5D6!@Apodset@TApolloTable@GetInteger$qqr17System@AnsiString
0x456aa6: mov word ptr [ebx + 0x432], ax
0x456aad: cmp word ptr [ebx + 0x420], 0
0x456ab5: jne 0x456ac0
0x456ab7: mov word ptr [ebx + 0x420], 4
0x456ac0: cmp word ptr [ebx + 0x422], 0
0x456ac8: jne 0x456ad3
0x456aca: mov word ptr [ebx + 0x422], 4
0x456ad3: mov edx, 0x4570d4 ; str='RATE'
0x456ad8: mov eax, edi
0x456ada: call 0x403ab0 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString
0x456adf: fstp qword ptr [ebx + 0x428]
0x456ae5: wait
0x456ae6: mov edx, 0x4570e4 ; str='KWNGP'
0x456aeb: mov eax, edi
0x456aed: call 0x403ab8 ; Apollo5D6!@Apodset@TApolloTable@GetInteger$qqr17System@AnsiString
0x456af2: mov word ptr [ebx + 0x434], ax
0x456af9: mov edx, 0x4570f4 ; str='BL_AMT'
0x456afe: mov eax, edi
0x456b00: call 0x403ac0 ; Apollo5D6!@Apodset@TApolloTable@GetLogical$qqr17System@AnsiString
0x456b05: cmp ax, 1
0x456b09: sbb eax, eax
0x456b0b: inc eax
0x456b0c: mov byte ptr [ebx + 0x447], al
0x456b12: mov eax, dword ptr [ebx + 0x1e0]
0x456b18: sub eax, 1
0x456b1b: je 0x456b26
0x456b1d: sub eax, 2
0x456b20: jne 0x456bf8
0x456b26: lea ecx, [ebp - 0x1c4]
0x456b2c: mov edx, 0x457104 ; str='NAME1'
0x456b31: mov eax, edi
0x456b33: call 0x403578 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString
0x456b38: lea edx, [ebp - 0x1c4]
0x456b3e: lea eax, [ebp - 0x168]
0x456b44: call 0x401358 ; rtl60!@System@@VarToPStr$qqrpvrx14System@Variant
0x456b49: lea edx, [ebp - 0x168]
0x456b4f: lea eax, [ebx + 0x4b]
0x456b52: mov cl, 0x32
0x456b54: call 0x4010b0
0x456b59: lea ecx, [ebp - 0x1d4]
0x456b5f: mov edx, 0x457114 ; str='NAME2'
0x456b64: mov eax, edi
0x456b66: call 0x403578 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString
0x456b6b: lea edx, [ebp - 0x1d4]
0x456b71: lea eax, [ebp - 0x168]
0x456b77: call 0x401358 ; rtl60!@System@@VarToPStr$qqrpvrx14System@Variant
0x456b7c: lea edx, [ebp - 0x168]
0x456b82: lea eax, [ebx + 0x7e]
0x456b85: mov cl, 0x32
0x456b87: call 0x4010b0
0x456b8c: lea ecx, [ebp - 0x1e4]
0x456b92: mov edx, 0x457124 ; str='SIZE1'
0x456b97: mov eax, edi
0x456b99: call 0x403578 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString
0x456b9e: lea edx, [ebp - 0x1e4]
0x456ba4: lea eax, [ebp - 0x168]
0x456baa: call 0x401358 ; rtl60!@System@@VarToPStr$qqrpvrx14System@Variant
0x456baf: lea edx, [ebp - 0x168]
0x456bb5: lea eax, [ebx + 0xb1]
0x456bbb: mov cl, 0x3c
0x456bbd: call 0x4010b0
0x456bc2: lea ecx, [ebp - 0x1f4]
0x456bc8: mov edx, 0x457134 ; str='SIZE2'
0x456bcd: mov eax, edi
0x456bcf: call 0x403578 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString
0x456bd4: lea edx, [ebp - 0x1f4]
0x456bda: lea eax, [ebp - 0x168]
0x456be0: call 0x401358 ; rtl60!@System@@VarToPStr$qqrpvrx14System@Variant
0x456be5: lea edx, [ebp - 0x168]
0x456beb: lea eax, [ebx + 0xee]
0x456bf1: mov cl, 0x3c
0x456bf3: call 0x4010b0
0x456bf8: mov eax, dword ptr [ebx + 0x1e0]
0x456bfe: add eax, -2
0x456c01: sub eax, 2
0x456c04: jae 0x456c3c
0x456c06: lea ecx, [ebp - 0x204]
0x456c0c: mov edx, 0x457144 ; str='UNIT1'
0x456c11: mov eax, edi
0x456c13: call 0x403578 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString
0x456c18: lea edx, [ebp - 0x204]
0x456c1e: lea eax, [ebp - 0x168]
0x456c24: call 0x401358 ; rtl60!@System@@VarToPStr$qqrpvrx14System@Variant
0x456c29: lea edx, [ebp - 0x168]
0x456c2f: lea eax, [ebx + 0x1c6]
0x456c35: mov cl, 0xa
0x456c37: call 0x4010b0
0x456c3c: mov esi, 1
0x456c41: push esi
0x456c42: push edi
0x456c43: mov esi, 0x456f0c
0x456c48: lea edi, [ebp - 0x30]
0x456c4b: mov ecx, 8
0x456c50: rep movsd dword ptr es:[edi], dword ptr [esi]
0x456c52: pop edi
0x456c53: pop esi
0x456c54: mov eax, esi
0x456c56: cmp eax, 0xff
0x456c5b: ja 0x456c61
0x456c5d: bts dword ptr [ebp - 0x30], eax
0x456c61: mov eax, dword ptr [ebp + 0xc]
0x456c64: cmp eax, 0xff
0x456c69: ja 0x456c6f
0x456c6b: bt dword ptr [ebp - 0x30], eax
0x456c6f: jae 0x456cc0
0x456c71: cmp byte ptr [ebp - 1], 0
0x456c75: je 0x456c81
0x456c77: cmp byte ptr [ebx + 0x1b], 0x51
0x456c7b: jne 0x456c81
0x456c7d: mov byte ptr [ebp + 0x1c], 1
0x456c81: cmp byte ptr [ebp + 0x1c], 0
0x456c85: je 0x456c9c
0x456c87: push esi
0x456c88: cmp byte ptr [ebx + 0x1b], 0x41
0x456c8c: sete al
0x456c8f: push eax
0x456c90: mov eax, ebx
0x456c92: mov ecx, dword ptr [ebp + 0x14]
0x456c95: mov edx, edi
0x456c97: call 0x433490
0x456c9c: push esi
0x456c9d: mov al, byte ptr [ebp - 2]
0x456ca0: push eax
0x456ca1: mov al, byte ptr [ebp + 0x1c]
0x456ca4: xor al, 1
0x456ca6: push eax
0x456ca7: mov al, byte ptr [ebp - 1]
0x456caa: push eax
0x456cab: movzx eax, word ptr [ebx + 0x432]
0x456cb2: push eax
0x456cb3: mov eax, ebx
0x456cb5: mov ecx, dword ptr [ebp + 0x14]
0x456cb8: mov edx, dword ptr [ebp + 0x18]
0x456cbb: call 0x44019c
0x456cc0: inc esi
0x456cc1: cmp esi, 6
0x456cc4: jne 0x456c41
0x456cca: cmp byte ptr [ebp - 1], 0
0x456cce: jne 0x456e93
@@ -0,0 +1,16 @@
0x4c27f8: push ebp
0x4c27f9: mov ebp, esp
0x4c27fb: mov dword ptr [0x57a4e0], 1
0x4c2805: mov eax, dword ptr [ebp + 8]
0x4c2808: call 0x4c1904
0x4c280d: pop ebp
0x4c280e: ret 4
0x4c2811: lea eax, [eax]
0x4c2814: push ebp
0x4c2815: mov ebp, esp
0x4c2817: mov dword ptr [0x57a4e0], 2
0x4c2821: mov eax, dword ptr [ebp + 8]
0x4c2824: call 0x4c1904
0x4c2829: pop ebp
0x4c282a: ret 4
0x4c282d: lea eax, [eax]
@@ -0,0 +1,746 @@
0x4c3cd0: push ebp
0x4c3cd1: mov ebp, esp
0x4c3cd3: push ecx
0x4c3cd4: mov ecx, 0x53
0x4c3cd9: push 0
0x4c3cdb: push 0
0x4c3cdd: dec ecx
0x4c3cde: jne 0x4c3cd9
0x4c3ce0: xchg dword ptr [ebp - 4], ecx
0x4c3ce3: push ebx
0x4c3ce4: push esi
0x4c3ce5: push edi
0x4c3ce6: mov ebx, ecx
0x4c3ce8: mov dword ptr [ebp - 0xc], eax
0x4c3ceb: xor eax, eax
0x4c3ced: push ebp
0x4c3cee: push 0x4c4912
0x4c3cf3: push dword ptr fs:[eax]
0x4c3cf6: mov dword ptr fs:[eax], esp
0x4c3cf9: lea ecx, [ebp - 0x12c]
0x4c3cff: mov eax, dword ptr [ebp - 0xc]
0x4c3d02: mov eax, dword ptr [eax + 0x2f4]
0x4c3d08: mov edx, 0x4c492c ; str='BDCODE1'
0x4c3d0d: call 0x402d90 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x4c3d12: mov edx, dword ptr [ebp - 0x12c]
0x4c3d18: lea eax, [ebp - 0x128]
0x4c3d1e: mov ecx, 0xff
0x4c3d23: call 0x401228 ; rtl60!@System@@LStrToString$qqrv
0x4c3d28: lea edx, [ebp - 0x128]
0x4c3d2e: lea eax, [ebp - 7]
0x4c3d31: mov cl, 6
0x4c3d33: call 0x4010b0
0x4c3d38: cmp dword ptr [0x57a4e0], 2
0x4c3d3f: jne 0x4c3d5a
0x4c3d41: mov al, byte ptr [ebp - 6]
0x4c3d44: sub al, 0x43
0x4c3d46: je 0x4c3d4c
0x4c3d48: sub al, 2
0x4c3d4a: jne 0x4c3d5a
0x4c3d4c: cmp byte ptr [ebp - 5], 0x31
0x4c3d50: jne 0x4c3d5a
0x4c3d52: mov byte ptr [ebx], 0
0x4c3d55: jmp 0x4c47f0
0x4c3d5a: mov al, byte ptr [ebp - 6]
0x4c3d5d: sub al, 0x43
0x4c3d5f: je 0x4c3d65
0x4c3d61: sub al, 2
0x4c3d63: jne 0x4c3d8f
0x4c3d65: mov eax, dword ptr [0x4ebf3c]
0x4c3d6a: mov eax, dword ptr [eax]
0x4c3d6c: cmp byte ptr [eax + 0x1759], 0
0x4c3d73: je 0x4c3d8f
0x4c3d75: mov eax, dword ptr [ebp - 0xc]
0x4c3d78: mov eax, dword ptr [eax + 0x2fc]
0x4c3d7e: call 0x402c18 ; dclhrp60!@Hreport@THRPrs@GetisRepeatToEOP$qqrv
0x4c3d83: test al, al
0x4c3d85: jne 0x4c3d8f
0x4c3d87: mov byte ptr [ebx], 0
0x4c3d8a: jmp 0x4c47f0
0x4c3d8f: cmp byte ptr [ebp - 6], 0x3a
0x4c3d93: jne 0x4c3e21
0x4c3d99: jmp 0x4c3dae
0x4c3d9b: mov eax, dword ptr [ebp - 0xc]
0x4c3d9e: mov eax, dword ptr [eax + 0x2f4]
0x4c3da4: mov edx, 1
0x4c3da9: call 0x402da8 ; Apollo5D6!@Apodset@TApolloTable@Skip$qqri
0x4c3dae: mov eax, dword ptr [ebp - 0xc]
0x4c3db1: mov eax, dword ptr [eax + 0x2f4]
0x4c3db7: mov edx, dword ptr [eax]
0x4c3db9: call dword ptr [edx + 0x270]
0x4c3dbf: test al, al
0x4c3dc1: jne 0x4c3de7
0x4c3dc3: lea ecx, [ebp - 0x130]
0x4c3dc9: mov eax, dword ptr [ebp - 0xc]
0x4c3dcc: mov eax, dword ptr [eax + 0x2f4]
0x4c3dd2: mov edx, 0x4c492c ; str='BDCODE1'
0x4c3dd7: call 0x402d90 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x4c3ddc: mov eax, dword ptr [ebp - 0x130]
0x4c3de2: cmp byte ptr [eax], 0x3a
0x4c3de5: je 0x4c3d9b
0x4c3de7: mov eax, dword ptr [ebp - 0xc]
0x4c3dea: mov eax, dword ptr [eax + 0x2f4]
0x4c3df0: mov edx, dword ptr [eax]
0x4c3df2: call dword ptr [edx + 0x270]
0x4c3df8: test al, al
0x4c3dfa: je 0x4c3e11
0x4c3dfc: mov eax, dword ptr [ebp - 0xc]
0x4c3dff: mov eax, dword ptr [eax + 0x2fc]
0x4c3e05: call 0x402c18 ; dclhrp60!@Hreport@THRPrs@GetisRepeatToEOP$qqrv
0x4c3e0a: mov byte ptr [ebx], al
0x4c3e0c: jmp 0x4c47f0
0x4c3e11: mov eax, dword ptr [ebp - 0xc]
0x4c3e14: mov eax, dword ptr [eax + 0x2fc]
0x4c3e1a: call 0x402c00 ; dclhrp60!@Hreport@THRPrs@PageSkip$qqrv
0x4c3e1f: jmp 0x4c3e24
0x4c3e21: mov byte ptr [ebx], 1
0x4c3e24: mov al, byte ptr [ebp - 6]
0x4c3e27: sub al, 0x43
0x4c3e29: je 0x4c3e37
0x4c3e2b: sub al, 2
0x4c3e2d: je 0x4c3e37
0x4c3e2f: sub al, 0xf
0x4c3e31: jne 0x4c3f3c
0x4c3e37: lea eax, [ebp - 0x134]
0x4c3e3d: mov dl, byte ptr [ebp - 5]
0x4c3e40: call 0x401208 ; rtl60!@System@@LStrFromChar$qqrr17System@AnsiStringc
0x4c3e45: mov eax, dword ptr [ebp - 0x134]
0x4c3e4b: push eax
0x4c3e4c: lea ecx, [ebp - 0x138]
0x4c3e52: mov eax, dword ptr [0x4ebf3c]
0x4c3e57: mov eax, dword ptr [eax]
0x4c3e59: movsx eax, byte ptr [eax + 0x1741]
0x4c3e60: inc eax
0x4c3e61: mov edx, 1
0x4c3e66: call 0x40172c ; rtl60!@Sysutils@IntToHex$qqrii
0x4c3e6b: mov edx, dword ptr [ebp - 0x138]
0x4c3e71: pop eax
0x4c3e72: call 0x401250 ; rtl60!@System@@LStrCmp$qqrv
0x4c3e77: jb 0x4c3f3c
0x4c3e7d: mov eax, dword ptr [ebp - 0xc]
0x4c3e80: mov eax, dword ptr [eax + 0x310]
0x4c3e86: mov ebx, dword ptr [eax + 0x68]
0x4c3e89: mov eax, ebx
0x4c3e8b: call 0x401f90 ; vcl60!@Graphics@TFont@GetStyle$qqrv
0x4c3e90: mov edx, eax
0x4c3e92: or dl, byte ptr [0x4c4934]
0x4c3e98: mov eax, ebx
0x4c3e9a: call 0x401f98
0x4c3e9f: mov eax, dword ptr [ebp - 0xc]
0x4c3ea2: mov eax, dword ptr [eax + 0x310]
0x4c3ea8: mov eax, dword ptr [eax + 0x68]
0x4c3eab: call 0x401f90 ; vcl60!@Graphics@TFont@GetStyle$qqrv
0x4c3eb0: mov edx, eax
0x4c3eb2: or dl, byte ptr [0x4c4934]
0x4c3eb8: mov eax, dword ptr [ebp - 0xc]
0x4c3ebb: mov eax, dword ptr [eax + 0x30c]
0x4c3ec1: mov eax, dword ptr [eax + 0x68]
0x4c3ec4: call 0x401f98
0x4c3ec9: mov eax, dword ptr [ebp - 0xc]
0x4c3ecc: mov eax, dword ptr [eax + 0x310]
0x4c3ed2: mov eax, dword ptr [eax + 0x68]
0x4c3ed5: call 0x401f90 ; vcl60!@Graphics@TFont@GetStyle$qqrv
0x4c3eda: mov edx, eax
0x4c3edc: or dl, byte ptr [0x4c4934]
0x4c3ee2: mov eax, dword ptr [ebp - 0xc]
0x4c3ee5: mov eax, dword ptr [eax + 0x320]
0x4c3eeb: mov eax, dword ptr [eax + 0x68]
0x4c3eee: call 0x401f98
0x4c3ef3: mov eax, dword ptr [ebp - 0xc]
0x4c3ef6: mov eax, dword ptr [eax + 0x324]
0x4c3efc: mov ebx, dword ptr [eax + 0x68]
0x4c3eff: mov eax, ebx
0x4c3f01: call 0x401f90 ; vcl60!@Graphics@TFont@GetStyle$qqrv
0x4c3f06: mov edx, eax
0x4c3f08: or dl, byte ptr [0x4c4934]
0x4c3f0e: mov eax, ebx
0x4c3f10: call 0x401f98
0x4c3f15: mov eax, dword ptr [ebp - 0xc]
0x4c3f18: mov eax, dword ptr [eax + 0x328]
0x4c3f1e: mov ebx, dword ptr [eax + 0x68]
0x4c3f21: mov eax, ebx
0x4c3f23: call 0x401f90 ; vcl60!@Graphics@TFont@GetStyle$qqrv
0x4c3f28: mov edx, eax
0x4c3f2a: or dl, byte ptr [0x4c4934]
0x4c3f30: mov eax, ebx
0x4c3f32: call 0x401f98
0x4c3f37: jmp 0x4c4000
0x4c3f3c: mov eax, dword ptr [ebp - 0xc]
0x4c3f3f: mov eax, dword ptr [eax + 0x310]
0x4c3f45: mov ebx, dword ptr [eax + 0x68]
0x4c3f48: mov eax, ebx
0x4c3f4a: call 0x401f90 ; vcl60!@Graphics@TFont@GetStyle$qqrv
0x4c3f4f: mov dl, byte ptr [0x4c4934]
0x4c3f55: not edx
0x4c3f57: and dl, al
0x4c3f59: mov eax, ebx
0x4c3f5b: call 0x401f98
0x4c3f60: mov eax, dword ptr [ebp - 0xc]
0x4c3f63: mov eax, dword ptr [eax + 0x310]
0x4c3f69: mov eax, dword ptr [eax + 0x68]
0x4c3f6c: call 0x401f90 ; vcl60!@Graphics@TFont@GetStyle$qqrv
0x4c3f71: mov dl, byte ptr [0x4c4934]
0x4c3f77: not edx
0x4c3f79: and dl, al
0x4c3f7b: mov eax, dword ptr [ebp - 0xc]
0x4c3f7e: mov eax, dword ptr [eax + 0x30c]
0x4c3f84: mov eax, dword ptr [eax + 0x68]
0x4c3f87: call 0x401f98
0x4c3f8c: mov eax, dword ptr [ebp - 0xc]
0x4c3f8f: mov eax, dword ptr [eax + 0x310]
0x4c3f95: mov eax, dword ptr [eax + 0x68]
0x4c3f98: call 0x401f90 ; vcl60!@Graphics@TFont@GetStyle$qqrv
0x4c3f9d: mov dl, byte ptr [0x4c4934]
0x4c3fa3: not edx
0x4c3fa5: and dl, al
0x4c3fa7: mov eax, dword ptr [ebp - 0xc]
0x4c3faa: mov eax, dword ptr [eax + 0x320]
0x4c3fb0: mov eax, dword ptr [eax + 0x68]
0x4c3fb3: call 0x401f98
0x4c3fb8: mov eax, dword ptr [ebp - 0xc]
0x4c3fbb: mov eax, dword ptr [eax + 0x324]
0x4c3fc1: mov ebx, dword ptr [eax + 0x68]
0x4c3fc4: mov eax, ebx
0x4c3fc6: call 0x401f90 ; vcl60!@Graphics@TFont@GetStyle$qqrv
0x4c3fcb: mov dl, byte ptr [0x4c4934]
0x4c3fd1: not edx
0x4c3fd3: and dl, al
0x4c3fd5: mov eax, ebx
0x4c3fd7: call 0x401f98
0x4c3fdc: mov eax, dword ptr [ebp - 0xc]
0x4c3fdf: mov eax, dword ptr [eax + 0x328]
0x4c3fe5: mov ebx, dword ptr [eax + 0x68]
0x4c3fe8: mov eax, ebx
0x4c3fea: call 0x401f90 ; vcl60!@Graphics@TFont@GetStyle$qqrv
0x4c3fef: mov dl, byte ptr [0x4c4934]
0x4c3ff5: not edx
0x4c3ff7: and dl, al
0x4c3ff9: mov eax, ebx
0x4c3ffb: call 0x401f98
0x4c4000: push ebp
0x4c4001: lea ecx, [ebp - 0x140]
0x4c4007: mov eax, dword ptr [ebp - 0xc]
0x4c400a: mov eax, dword ptr [eax + 0x2f4]
0x4c4010: mov edx, 0x4c4940 ; str='SIZE1'
0x4c4015: call 0x402d90 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x4c401a: mov eax, dword ptr [ebp - 0x140]
0x4c4020: lea edx, [ebp - 0x13c]
0x4c4026: call 0x401714 ; rtl60!@Sysutils@TrimRight$qqrx17System@AnsiString
0x4c402b: mov eax, dword ptr [ebp - 0x13c]
0x4c4031: push eax
0x4c4032: lea ecx, [ebp - 0x148]
0x4c4038: mov eax, dword ptr [ebp - 0xc]
0x4c403b: mov eax, dword ptr [eax + 0x2f4]
0x4c4041: mov edx, 0x4c4950 ; str='SIZE2'
0x4c4046: call 0x402d90 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x4c404b: mov eax, dword ptr [ebp - 0x148]
0x4c4051: lea edx, [ebp - 0x144]
0x4c4057: call 0x401714 ; rtl60!@Sysutils@TrimRight$qqrx17System@AnsiString
0x4c405c: mov eax, dword ptr [ebp - 0x144]
0x4c4062: push eax
0x4c4063: mov eax, dword ptr [ebp - 0xc]
0x4c4066: mov eax, dword ptr [eax + 0x2f4]
0x4c406c: mov edx, 0x4c4960 ; str='EXIST1'
0x4c4071: call 0x402d78 ; Apollo5D6!@Apodset@TApolloTable@GetInteger$qqr17System@AnsiString
0x4c4076: push eax
0x4c4077: lea ecx, [ebp - 0x150]
0x4c407d: mov eax, dword ptr [ebp - 0xc]
0x4c4080: mov eax, dword ptr [eax + 0x2f4]
0x4c4086: mov edx, 0x4c4970 ; str='NAME2'
0x4c408b: call 0x402d90 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x4c4090: mov eax, dword ptr [ebp - 0x150]
0x4c4096: lea edx, [ebp - 0x14c]
0x4c409c: call 0x401714 ; rtl60!@Sysutils@TrimRight$qqrx17System@AnsiString
0x4c40a1: mov eax, dword ptr [ebp - 0x14c]
0x4c40a7: push eax
0x4c40a8: lea ecx, [ebp - 0x158]
0x4c40ae: mov eax, dword ptr [ebp - 0xc]
0x4c40b1: mov eax, dword ptr [eax + 0x2f4]
0x4c40b7: mov edx, 0x4c4980 ; str='NAME1'
0x4c40bc: call 0x402d90 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x4c40c1: mov eax, dword ptr [ebp - 0x158]
0x4c40c7: lea edx, [ebp - 0x154]
0x4c40cd: call 0x401714 ; rtl60!@Sysutils@TrimRight$qqrx17System@AnsiString
0x4c40d2: mov eax, dword ptr [ebp - 0x154]
0x4c40d8: push eax
0x4c40d9: lea ecx, [ebp - 0x160]
0x4c40df: mov eax, dword ptr [ebp - 0xc]
0x4c40e2: mov eax, dword ptr [eax + 0x2f4]
0x4c40e8: mov edx, 0x4c4990 ; str='ITNUM'
0x4c40ed: call 0x402d90 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x4c40f2: mov eax, dword ptr [ebp - 0x160]
0x4c40f8: lea edx, [ebp - 0x15c]
0x4c40fe: call 0x401714 ; rtl60!@Sysutils@TrimRight$qqrx17System@AnsiString
0x4c4103: mov eax, dword ptr [ebp - 0x15c]
0x4c4109: pop edx
0x4c410a: pop ecx
0x4c410b: call 0x4c39b4
0x4c4110: pop ecx
0x4c4111: mov eax, dword ptr [0x4ebf3c]
0x4c4116: mov eax, dword ptr [eax]
0x4c4118: cmp byte ptr [eax + 0x1763], 0
0x4c411f: jne 0x4c4137
0x4c4121: cmp byte ptr [ebp - 6], 0x54
0x4c4125: jne 0x4c4137
0x4c4127: mov eax, dword ptr [0x4ebf3c]
0x4c412c: mov eax, dword ptr [eax]
0x4c412e: cmp byte ptr [eax + 0x1759], 0
0x4c4135: jne 0x4c4142
0x4c4137: mov al, byte ptr [ebp - 6]
0x4c413a: sub al, 0x43
0x4c413c: je 0x4c4142
0x4c413e: sub al, 2
0x4c4140: jne 0x4c41a4
0x4c4142: mov eax, dword ptr [0x4eb8dc]
0x4c4147: push eax
0x4c4148: mov eax, dword ptr [0x4eb8d0]
0x4c414d: push eax
0x4c414e: mov eax, dword ptr [0x4eb91c]
0x4c4153: push eax
0x4c4154: mov eax, dword ptr [ebp - 0xc]
0x4c4157: mov eax, dword ptr [eax + 0x2f4]
0x4c415d: mov edx, 0x4c49a0 ; str='T_AMT2'
0x4c4162: call 0x402d70 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString
0x4c4167: add esp, -0xc
0x4c416a: fstp xword ptr [esp]
0x4c416d: wait
0x4c416e: lea eax, [ebp - 0x174]
0x4c4174: push eax
0x4c4175: call 0x437854 ; DP_COMMON!DIS_FMT1
0x4c417a: mov edx, dword ptr [ebp - 0x174]
0x4c4180: lea eax, [ebp - 0x170]
0x4c4186: call 0x401360 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString
0x4c418b: lea edx, [ebp - 0x170]
0x4c4191: mov eax, dword ptr [ebp - 0xc]
0x4c4194: mov eax, dword ptr [eax + 0x31c]
0x4c419a: mov ecx, dword ptr [eax]
0x4c419c: call dword ptr [ecx + 0xc4]
0x4c41a2: jmp 0x4c41c8
0x4c41a4: lea eax, [ebp - 0x184]
0x4c41aa: xor edx, edx
0x4c41ac: call 0x401360 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString
0x4c41b1: lea edx, [ebp - 0x184]
0x4c41b7: mov eax, dword ptr [ebp - 0xc]
0x4c41ba: mov eax, dword ptr [eax + 0x31c]
0x4c41c0: mov ecx, dword ptr [eax]
0x4c41c2: call dword ptr [ecx + 0xc4]
0x4c41c8: mov eax, dword ptr [0x4ebf3c]
0x4c41cd: mov eax, dword ptr [eax]
0x4c41cf: movsx eax, byte ptr [eax + 0x1788]
0x4c41d6: test eax, eax
0x4c41d8: jle 0x4c4513
0x4c41de: mov dword ptr [ebp - 0x1c], eax
0x4c41e1: mov dword ptr [ebp - 0x20], 0x579ed4
0x4c41e8: mov dword ptr [ebp - 0x24], 0x576e50
0x4c41ef: push 0x4c49b0
0x4c41f4: lea eax, [ebp - 0x188]
0x4c41fa: mov dl, byte ptr [ebp - 6]
0x4c41fd: call 0x401208 ; rtl60!@System@@LStrFromChar$qqrr17System@AnsiStringc
0x4c4202: mov eax, dword ptr [ebp - 0x188]
0x4c4208: push eax
0x4c4209: call 0x4377ec ; DP_COMMON!MPOS
0x4c420e: test al, al
0x4c4210: jne 0x4c421c
0x4c4212: xor eax, eax
0x4c4214: mov dword ptr [ebp - 0x18], eax
0x4c4217: mov dword ptr [ebp - 0x14], eax
0x4c421a: jmp 0x4c4242
0x4c421c: lea eax, [ebp - 0x18c]
0x4c4222: mov edx, dword ptr [ebp - 0x20]
0x4c4225: call 0x401218
0x4c422a: mov edx, dword ptr [ebp - 0x18c]
0x4c4230: mov eax, dword ptr [ebp - 0xc]
0x4c4233: mov eax, dword ptr [eax + 0x2f4]
0x4c4239: call 0x402d70 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString
0x4c423e: fstp qword ptr [ebp - 0x18]
0x4c4241: wait
0x4c4242: lea eax, [ebp - 0x1a4]
0x4c4248: mov edx, dword ptr [ebp - 0x20]
0x4c424b: add edx, 0x200
0x4c4251: call 0x401218
0x4c4256: mov eax, dword ptr [ebp - 0x1a4]
0x4c425c: push eax
0x4c425d: lea eax, [ebp - 0x1a8]
0x4c4263: mov edx, dword ptr [ebp - 0x20]
0x4c4266: add edx, 0x100
0x4c426c: call 0x401218
0x4c4271: mov eax, dword ptr [ebp - 0x1a8]
0x4c4277: push eax
0x4c4278: mov eax, dword ptr [ebp - 0x20]
0x4c427b: movsx eax, byte ptr [eax + 0x301]
0x4c4282: push eax
0x4c4283: fld qword ptr [ebp - 0x18]
0x4c4286: add esp, -0xc
0x4c4289: fstp xword ptr [esp]
0x4c428c: wait
0x4c428d: lea eax, [ebp - 0x1a0]
0x4c4293: push eax
0x4c4294: call 0x437854 ; DP_COMMON!DIS_FMT1
0x4c4299: mov edx, dword ptr [ebp - 0x1a0]
0x4c429f: lea eax, [ebp - 0x19c]
0x4c42a5: call 0x401360 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString
0x4c42aa: lea edx, [ebp - 0x19c]
0x4c42b0: mov eax, dword ptr [ebp - 0x20]
0x4c42b3: mov eax, dword ptr [eax - 4]
0x4c42b6: mov ecx, dword ptr [eax]
0x4c42b8: call dword ptr [ecx + 0xc4]
0x4c42be: mov dword ptr [ebp - 0x10], 4
0x4c42c5: mov eax, dword ptr [ebp - 0x24]
0x4c42c8: mov dword ptr [ebp - 0x28], eax
0x4c42cb: mov edi, 1
0x4c42d0: mov eax, dword ptr [ebp - 0x28]
0x4c42d3: mov ebx, eax
0x4c42d5: mov esi, ebx
0x4c42d7: mov eax, dword ptr [0x4ebf3c]
0x4c42dc: mov eax, dword ptr [eax]
0x4c42de: cmp byte ptr [eax + 0x1763], 0
0x4c42e5: je 0x4c4309
0x4c42e7: lea eax, [ebp - 0x1b8]
0x4c42ed: xor edx, edx
0x4c42ef: call 0x401360 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString
0x4c42f4: lea edx, [ebp - 0x1b8]
0x4c42fa: mov eax, dword ptr [esi]
0x4c42fc: mov ecx, dword ptr [eax]
0x4c42fe: call dword ptr [ecx + 0xc4]
0x4c4304: jmp 0x4c44dc
0x4c4309: mov al, byte ptr [ebp - 6]
0x4c430c: add al, 0xc0
0x4c430e: cmp al, 0x1f
0x4c4310: ja 0x4c431c
0x4c4312: and eax, 0x7f
0x4c4315: bt dword ptr [0x4c49bc], eax
0x4c431c: jae 0x4c43e5
0x4c4322: fld qword ptr [ebp - 0x18]
0x4c4325: fcomp dword ptr [0x4c49c0] ; f32=0.0
0x4c432b: fnstsw ax
0x4c432d: sahf
0x4c432e: jne 0x4c4352
0x4c4330: lea eax, [ebp - 0x1c8]
0x4c4336: xor edx, edx
0x4c4338: call 0x401360 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString
0x4c433d: lea edx, [ebp - 0x1c8]
0x4c4343: mov eax, dword ptr [esi]
0x4c4345: mov ecx, dword ptr [eax]
0x4c4347: call dword ptr [ecx + 0xc4]
0x4c434d: jmp 0x4c44dc
0x4c4352: lea eax, [ebp - 0x1e0]
0x4c4358: lea edx, [esi + 0x204]
0x4c435e: call 0x401218
0x4c4363: mov eax, dword ptr [ebp - 0x1e0]
0x4c4369: push eax
0x4c436a: lea eax, [ebp - 0x1e4]
0x4c4370: lea edx, [esi + 0x104]
0x4c4376: call 0x401218
0x4c437b: mov eax, dword ptr [ebp - 0x1e4]
0x4c4381: push eax
0x4c4382: movsx eax, byte ptr [esi + 0x305]
0x4c4389: push eax
0x4c438a: lea eax, [ebp - 0x1e8]
0x4c4390: lea edx, [esi + 4]
0x4c4393: call 0x401218
0x4c4398: mov edx, dword ptr [ebp - 0x1e8]
0x4c439e: mov eax, dword ptr [ebp - 0xc]
0x4c43a1: mov eax, dword ptr [eax + 0x2f4]
0x4c43a7: call 0x402d70 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString
0x4c43ac: add esp, -0xc
0x4c43af: fstp xword ptr [esp]
0x4c43b2: wait
0x4c43b3: lea eax, [ebp - 0x1dc]
0x4c43b9: push eax
0x4c43ba: call 0x437854 ; DP_COMMON!DIS_FMT1
0x4c43bf: mov edx, dword ptr [ebp - 0x1dc]
0x4c43c5: lea eax, [ebp - 0x1d8]
0x4c43cb: call 0x401360 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString
0x4c43d0: lea edx, [ebp - 0x1d8]
0x4c43d6: mov eax, dword ptr [esi]
0x4c43d8: mov ecx, dword ptr [eax]
0x4c43da: call dword ptr [ecx + 0xc4]
0x4c43e0: jmp 0x4c44dc
0x4c43e5: cmp edi, 2
0x4c43e8: jne 0x4c44bf
0x4c43ee: mov al, byte ptr [ebp - 6]
0x4c43f1: cmp al, 0x54
0x4c43f3: jne 0x4c4406
0x4c43f5: mov edx, dword ptr [0x4ebf3c]
0x4c43fb: mov edx, dword ptr [edx]
0x4c43fd: cmp byte ptr [edx + 0x1759], 0
0x4c4404: jne 0x4c442f
0x4c4406: sub al, 0x43
0x4c4408: je 0x4c442f
0x4c440a: sub al, 2
0x4c440c: je 0x4c442f
0x4c440e: cmp dword ptr [0x57a4e0], 2
0x4c4415: jne 0x4c44bf
0x4c441b: cmp byte ptr [ebp - 6], 0x54
0x4c441f: jne 0x4c44bf
0x4c4425: cmp byte ptr [ebp - 5], 0x31
0x4c4429: jne 0x4c44bf
0x4c442f: lea eax, [ebp - 0x200]
0x4c4435: lea edx, [esi + 0x204]
0x4c443b: call 0x401218
0x4c4440: mov eax, dword ptr [ebp - 0x200]
0x4c4446: push eax
0x4c4447: lea eax, [ebp - 0x204]
0x4c444d: lea edx, [esi + 0x104]
0x4c4453: call 0x401218
0x4c4458: mov eax, dword ptr [ebp - 0x204]
0x4c445e: push eax
0x4c445f: movsx eax, byte ptr [esi + 0x305]
0x4c4466: push eax
0x4c4467: lea eax, [ebp - 0x208]
0x4c446d: lea edx, [esi + 4]
0x4c4470: call 0x401218
0x4c4475: mov edx, dword ptr [ebp - 0x208]
0x4c447b: mov eax, dword ptr [ebp - 0xc]
0x4c447e: mov eax, dword ptr [eax + 0x2f4]
0x4c4484: call 0x402d70 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString
0x4c4489: add esp, -0xc
0x4c448c: fstp xword ptr [esp]
0x4c448f: wait
0x4c4490: lea eax, [ebp - 0x1fc]
0x4c4496: push eax
0x4c4497: call 0x437854 ; DP_COMMON!DIS_FMT1
0x4c449c: mov edx, dword ptr [ebp - 0x1fc]
0x4c44a2: lea eax, [ebp - 0x1f8]
0x4c44a8: call 0x401360 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString
0x4c44ad: lea edx, [ebp - 0x1f8]
0x4c44b3: mov eax, dword ptr [esi]
0x4c44b5: mov ecx, dword ptr [eax]
0x4c44b7: call dword ptr [ecx + 0xc4]
0x4c44bd: jmp 0x4c44dc
0x4c44bf: lea eax, [ebp - 0x218]
0x4c44c5: xor edx, edx
0x4c44c7: call 0x401360 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString
0x4c44cc: lea edx, [ebp - 0x218]
0x4c44d2: mov eax, dword ptr [esi]
0x4c44d4: mov ecx, dword ptr [eax]
0x4c44d6: call dword ptr [ecx + 0xc4]
0x4c44dc: inc edi
0x4c44dd: add ebx, 0x308
0x4c44e3: cmp edi, 3
0x4c44e6: jne 0x4c42d5
0x4c44ec: add dword ptr [ebp - 0x28], 0x610
0x4c44f3: dec dword ptr [ebp - 0x10]
0x4c44f6: jne 0x4c42cb
0x4c44fc: add dword ptr [ebp - 0x24], 0x1840
0x4c4503: add dword ptr [ebp - 0x20], 0x308
0x4c450a: dec dword ptr [ebp - 0x1c]
0x4c450d: jne 0x4c41ef
0x4c4513: mov al, byte ptr [ebp - 6]
0x4c4516: add al, 0xc0
0x4c4518: cmp al, 0x1f
0x4c451a: ja 0x4c4526
0x4c451c: and eax, 0x7f
0x4c451f: bt dword ptr [0x4c49c4], eax
0x4c4526: jae 0x4c45b7
0x4c452c: push 0x4c49d0
0x4c4531: push 0
0x4c4533: lea eax, [ebp - 0x230]
0x4c4539: push eax
0x4c453a: lea ecx, [ebp - 0x234]
0x4c4540: mov eax, dword ptr [ebp - 0xc]
0x4c4543: mov eax, dword ptr [eax + 0x2f4]
0x4c4549: mov edx, 0x4c49dc ; str='UNIT1'
0x4c454e: call 0x402d90 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x4c4553: mov eax, dword ptr [ebp - 0x234]
0x4c4559: push eax
0x4c455a: lea eax, [ebp - 0x238]
0x4c4560: lea edx, [ebp - 7]
0x4c4563: call 0x401218
0x4c4568: mov eax, dword ptr [ebp - 0x238]
0x4c456e: mov ecx, 0x4c49ec ; str='%'
0x4c4573: pop edx
0x4c4574: call 0x44adf0
0x4c4579: mov eax, dword ptr [ebp - 0x230]
0x4c457f: lea edx, [ebp - 0x22c]
0x4c4585: call 0x401704 ; rtl60!@Sysutils@Trim$qqrx17System@AnsiString
0x4c458a: mov edx, dword ptr [ebp - 0x22c]
0x4c4590: lea eax, [ebp - 0x228]
0x4c4596: call 0x401360 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString
0x4c459b: lea edx, [ebp - 0x228]
0x4c45a1: mov eax, dword ptr [ebp - 0xc]
0x4c45a4: mov eax, dword ptr [eax + 0x32c]
0x4c45aa: mov ecx, dword ptr [eax]
0x4c45ac: call dword ptr [ecx + 0xc4]
0x4c45b2: jmp 0x4c4660
0x4c45b7: lea eax, [ebp - 0x240]
0x4c45bd: lea edx, [ebp - 7]
0x4c45c0: call 0x401218
0x4c45c5: mov eax, dword ptr [ebp - 0x240]
0x4c45cb: lea edx, [ebp - 0x23c]
0x4c45d1: call 0x401704 ; rtl60!@Sysutils@Trim$qqrx17System@AnsiString
0x4c45d6: mov eax, dword ptr [ebp - 0x23c]
0x4c45dc: mov edx, 0x4c49f8 ; str='QTY'
0x4c45e1: call 0x401250 ; rtl60!@System@@LStrCmp$qqrv
0x4c45e6: jne 0x4c463c
0x4c45e8: lea ecx, [ebp - 0x258]
0x4c45ee: mov eax, dword ptr [ebp - 0xc]
0x4c45f1: mov eax, dword ptr [eax + 0x2f4]
0x4c45f7: mov edx, 0x4c49dc ; str='UNIT1'
0x4c45fc: call 0x402d90 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x4c4601: mov eax, dword ptr [ebp - 0x258]
0x4c4607: lea edx, [ebp - 0x254]
0x4c460d: call 0x401704 ; rtl60!@Sysutils@Trim$qqrx17System@AnsiString
0x4c4612: mov edx, dword ptr [ebp - 0x254]
0x4c4618: lea eax, [ebp - 0x250]
0x4c461e: call 0x401360 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString
0x4c4623: lea edx, [ebp - 0x250]
0x4c4629: mov eax, dword ptr [ebp - 0xc]
0x4c462c: mov eax, dword ptr [eax + 0x32c]
0x4c4632: mov ecx, dword ptr [eax]
0x4c4634: call dword ptr [ecx + 0xc4]
0x4c463a: jmp 0x4c4660
0x4c463c: lea eax, [ebp - 0x268]
0x4c4642: xor edx, edx
0x4c4644: call 0x401360 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString
0x4c4649: lea edx, [ebp - 0x268]
0x4c464f: mov eax, dword ptr [ebp - 0xc]
0x4c4652: mov eax, dword ptr [eax + 0x32c]
0x4c4658: mov ecx, dword ptr [eax]
0x4c465a: call dword ptr [ecx + 0xc4]
0x4c4660: lea eax, [ebp - 0x26c]
0x4c4666: mov edx, dword ptr [ebp - 0xc]
0x4c4669: mov ebx, dword ptr [edx + 0x310]
0x4c466f: lea edx, [ebx + 0x1e0]
0x4c4675: call 0x401320 ; rtl60!@System@@VarToLStr$qqrr17System@AnsiStringrx14System@Variant
0x4c467a: mov eax, dword ptr [ebp - 0x26c]
0x4c4680: mov ecx, dword ptr [ebx + 0x48]
0x4c4683: mov edx, dword ptr [0x4eb8e4]
0x4c4689: call 0x4796ec
0x4c468e: mov edx, eax
0x4c4690: mov eax, ebx
0x4c4692: call 0x402bb8 ; dclhrp60!@Hrctrlsc@THRCustomLabel@SetFontWidth$qqri
0x4c4697: lea eax, [ebp - 0x270]
0x4c469d: mov edx, dword ptr [ebp - 0xc]
0x4c46a0: mov ebx, dword ptr [edx + 0x32c]
0x4c46a6: lea edx, [ebx + 0x1e0]
0x4c46ac: call 0x401320 ; rtl60!@System@@VarToLStr$qqrr17System@AnsiStringrx14System@Variant
0x4c46b1: mov eax, dword ptr [ebp - 0x270]
0x4c46b7: mov ecx, dword ptr [ebx + 0x48]
0x4c46ba: mov edx, dword ptr [0x4eb8e4]
0x4c46c0: call 0x4796ec
0x4c46c5: mov edx, eax
0x4c46c7: mov eax, ebx
0x4c46c9: call 0x402bb8 ; dclhrp60!@Hrctrlsc@THRCustomLabel@SetFontWidth$qqri
0x4c46ce: lea ecx, [ebp - 0x278]
0x4c46d4: mov eax, dword ptr [ebp - 0xc]
0x4c46d7: mov eax, dword ptr [eax + 0x2f4]
0x4c46dd: mov edx, 0x4c4a04 ; str='UNIT2'
0x4c46e2: call 0x402d90 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x4c46e7: mov eax, dword ptr [ebp - 0x278]
0x4c46ed: lea edx, [ebp - 0x274]
0x4c46f3: call 0x401704 ; rtl60!@Sysutils@Trim$qqrx17System@AnsiString
0x4c46f8: mov eax, dword ptr [ebp - 0x274]
0x4c46fe: mov edx, dword ptr [ebp - 0xc]
0x4c4701: mov edx, dword ptr [edx + 0x318]
0x4c4707: mov ecx, dword ptr [edx + 0x48]
0x4c470a: mov edx, dword ptr [0x4eb8e4]
0x4c4710: call 0x4796ec
0x4c4715: mov edx, eax
0x4c4717: mov eax, dword ptr [ebp - 0xc]
0x4c471a: mov eax, dword ptr [eax + 0x318]
0x4c4720: call 0x402bb8 ; dclhrp60!@Hrctrlsc@THRCustomLabel@SetFontWidth$qqri
0x4c4725: mov eax, dword ptr [ebp - 0xc]
0x4c4728: mov eax, dword ptr [eax + 0x2f4]
0x4c472e: push eax
0x4c472f: lea eax, [ebp - 0x28c]
0x4c4735: push eax
0x4c4736: lea ecx, [ebp - 0x290]
0x4c473c: mov eax, dword ptr [ebp - 0xc]
0x4c473f: mov eax, dword ptr [eax + 0x2f4]
0x4c4745: mov edx, 0x4c4a14 ; str='SORTCODE'
0x4c474a: call 0x402d90 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x4c474f: mov eax, dword ptr [ebp - 0x290]
0x4c4755: push eax
0x4c4756: lea ecx, [ebp - 0x294]
0x4c475c: mov eax, dword ptr [ebp - 0xc]
0x4c475f: mov eax, dword ptr [eax + 0x2f4]
0x4c4765: mov edx, 0x4c4a28 ; str='CODEA'
0x4c476a: call 0x402d90 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x4c476f: mov eax, dword ptr [ebp - 0x294]
0x4c4775: push eax
0x4c4776: lea eax, [ebp - 0x298]
0x4c477c: lea edx, [ebp - 7]
0x4c477f: call 0x401218
0x4c4784: mov eax, dword ptr [ebp - 0x298]
0x4c478a: pop edx
0x4c478b: pop ecx
0x4c478c: call 0x4764c8
0x4c4791: mov edx, dword ptr [ebp - 0x28c]
0x4c4797: lea eax, [ebp - 0x288]
0x4c479d: call 0x401360 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString
0x4c47a2: lea edx, [ebp - 0x288]
0x4c47a8: mov eax, dword ptr [ebp - 0xc]
0x4c47ab: mov eax, dword ptr [eax + 0x330]
0x4c47b1: mov ecx, dword ptr [eax]
0x4c47b3: call dword ptr [ecx + 0xc4]
0x4c47b9: lea eax, [ebp - 0x29c]
0x4c47bf: mov edx, dword ptr [ebp - 0xc]
0x4c47c2: mov ebx, dword ptr [edx + 0x330]
0x4c47c8: lea edx, [ebx + 0x1e0]
0x4c47ce: call 0x401320 ; rtl60!@System@@VarToLStr$qqrr17System@AnsiStringrx14System@Variant
0x4c47d3: mov eax, dword ptr [ebp - 0x29c]
0x4c47d9: mov ecx, dword ptr [ebx + 0x48]
0x4c47dc: mov edx, dword ptr [0x4eb8e4]
0x4c47e2: call 0x4796ec
0x4c47e7: mov edx, eax
0x4c47e9: mov eax, ebx
0x4c47eb: call 0x402bb8 ; dclhrp60!@Hrctrlsc@THRCustomLabel@SetFontWidth$qqri
0x4c47f0: xor eax, eax
0x4c47f2: pop edx
0x4c47f3: pop ecx
0x4c47f4: pop ecx
0x4c47f5: mov dword ptr fs:[eax], edx
0x4c47f8: push 0x4c491c
0x4c47fd: lea eax, [ebp - 0x29c]
0x4c4803: mov edx, 5
0x4c4808: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi
0x4c480d: lea eax, [ebp - 0x288]
0x4c4813: call 0x4013c8 ; rtl60!@System@@VarClr$qqrr14System@Variant
0x4c4818: lea eax, [ebp - 0x278]
0x4c481e: mov edx, 4
0x4c4823: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi
0x4c4828: lea eax, [ebp - 0x268]
0x4c482e: call 0x4013c8 ; rtl60!@System@@VarClr$qqrr14System@Variant
0x4c4833: lea eax, [ebp - 0x258]
0x4c4839: mov edx, 2
0x4c483e: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi
0x4c4843: lea eax, [ebp - 0x250]
0x4c4849: call 0x4013c8 ; rtl60!@System@@VarClr$qqrr14System@Variant
0x4c484e: lea eax, [ebp - 0x240]
0x4c4854: mov edx, 6
0x4c4859: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi
0x4c485e: lea eax, [ebp - 0x228]
0x4c4864: mov edx, dword ptr [0x5edc00]
0x4c486a: mov ecx, 2
0x4c486f: call 0x4012b8 ; rtl60!@System@@FinalizeArray$qqrpvt1ui
0x4c4874: lea eax, [ebp - 0x208]
0x4c487a: mov edx, 4
0x4c487f: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi
0x4c4884: lea eax, [ebp - 0x1f8]
0x4c488a: call 0x4013c8 ; rtl60!@System@@VarClr$qqrr14System@Variant
0x4c488f: lea eax, [ebp - 0x1e8]
0x4c4895: mov edx, 4
0x4c489a: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi
0x4c489f: lea eax, [ebp - 0x1d8]
0x4c48a5: mov edx, dword ptr [0x5edc00]
0x4c48ab: mov ecx, 3
0x4c48b0: call 0x4012b8 ; rtl60!@System@@FinalizeArray$qqrpvt1ui
0x4c48b5: lea eax, [ebp - 0x1a8]
0x4c48bb: mov edx, 3
0x4c48c0: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi
0x4c48c5: lea eax, [ebp - 0x19c]
0x4c48cb: call 0x4013c8 ; rtl60!@System@@VarClr$qqrr14System@Variant
0x4c48d0: lea eax, [ebp - 0x18c]
0x4c48d6: mov edx, 2
0x4c48db: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi
0x4c48e0: lea eax, [ebp - 0x184]
0x4c48e6: call 0x4013c8 ; rtl60!@System@@VarClr$qqrr14System@Variant
0x4c48eb: lea eax, [ebp - 0x174]
0x4c48f1: call 0x4011e0 ; rtl60!@System@@LStrClr$qqrpv
0x4c48f6: lea eax, [ebp - 0x170]
0x4c48fc: call 0x4013c8 ; rtl60!@System@@VarClr$qqrr14System@Variant
0x4c4901: lea eax, [ebp - 0x160]
0x4c4907: mov edx, 0xe
0x4c490c: call 0x4011e8 ; rtl60!@System@@LStrArrayClr$qqrpvi
0x4c4911: ret
@@ -0,0 +1,37 @@
0x4c245d: call 0x402df0 ; Apollo5D6!@Apodset@TApolloTable@SetTableName$qqr17System@AnsiString
0x4c2462: cmp dword ptr [0x57a4e0], 1
0x4c2469: jne 0x4c24a1
0x4c246b: mov eax, dword ptr [edi]
0x4c246d: cmp byte ptr [eax + 0x1768], 0
0x4c2474: je 0x4c24a1
0x4c2476: mov eax, dword ptr [ebp - 8]
0x4c2479: mov eax, dword ptr [eax + 0x2f4]
0x4c247f: mov edx, 0x4c2798 ; str='!(SUBSTR(BDCODE1,1,1)$"MLSWBDXAP" .and. QTY1=0)'
0x4c2484: mov ecx, dword ptr [eax]
0x4c2486: call dword ptr [ecx + 0x198]
0x4c248c: mov eax, dword ptr [ebp - 8]
0x4c248f: mov eax, dword ptr [eax + 0x2f4]
0x4c2495: mov dl, 1
0x4c2497: mov ecx, dword ptr [eax]
0x4c2499: call dword ptr [ecx + 0x190]
0x4c249f: jmp 0x4c24d3
0x4c24a1: cmp dword ptr [0x57a4e0], 2
0x4c24a8: jne 0x4c24d3
0x4c24aa: mov eax, dword ptr [ebp - 8]
0x4c24ad: mov eax, dword ptr [eax + 0x2f4]
0x4c24b3: mov edx, 0x4c27d0 ; str='SUBSTR(BDCODE1,1,1)$"TEC" .or. RS=1'
0x4c24b8: mov ecx, dword ptr [eax]
0x4c24ba: call dword ptr [ecx + 0x198]
0x4c24c0: mov eax, dword ptr [ebp - 8]
0x4c24c3: mov eax, dword ptr [eax + 0x2f4]
0x4c24c9: mov dl, 1
0x4c24cb: mov ecx, dword ptr [eax]
0x4c24cd: call dword ptr [ecx + 0x190]
0x4c24d3: lea eax, [ebp - 0x3e4]
0x4c24d9: mov edx, dword ptr [edi]
0x4c24db: add edx, 0x628
0x4c24e1: call 0x401218
0x4c24e6: mov edx, dword ptr [ebp - 0x3e4]
0x4c24ec: mov eax, dword ptr [ebp - 8]
0x4c24ef: mov eax, dword ptr [eax + 0x398]
0x4c24f5: call 0x402bb0 ; dclhrp60!@Hrctrlsc@THRCustomLabel@SetCaption$qqr17System@AnsiString
@@ -0,0 +1,60 @@
0x4513e7: push ebp
0x4513e8: mov eax, dword ptr [0x4d38ec]
0x4513ed: push eax
0x4513ee: lea eax, [ebp - 0x674]
0x4513f4: mov edx, 0x452d20 ; str='Prn_Nae'
0x4513f9: call 0x401378 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString
0x4513fe: push dword ptr [ebp - 0x668]
0x451404: push dword ptr [ebp - 0x66c]
0x45140a: push dword ptr [ebp - 0x670]
0x451410: push dword ptr [ebp - 0x674]
0x451416: lea eax, [ebp - 0x684]
0x45141c: mov edx, 0x452d30 ; str='Prn_NaeW'
0x451421: call 0x401378 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString
0x451426: push dword ptr [ebp - 0x678]
0x45142c: push dword ptr [ebp - 0x67c]
0x451432: push dword ptr [ebp - 0x680]
0x451438: push dword ptr [ebp - 0x684]
0x45143e: push ebx
0x45143f: lea eax, [ebp - 0x664]
0x451445: push eax
0x451446: call 0x4047a4 ; DP_COMMON!IIF
0x45144b: lea edx, [ebp - 0x664]
0x451451: lea eax, [ebp - 0x654]
0x451457: call 0x401340 ; rtl60!@System@@VarToLStr$qqrr17System@AnsiStringrx14System@Variant
0x45145c: mov edx, dword ptr [ebp - 0x654]
0x451462: mov ecx, 0x452d44 ; str='Prn_Nae_EXL'
0x451467: mov eax, 0x452c78 ; str='ST_P_Nae.CPM'
0x45146c: call 0x44fb68
0x451471: pop ecx
0x451472: jmp 0x451e27
0x451477: push ebp
0x451478: mov eax, dword ptr [0x4d38ec]
0x45147d: push eax
0x45147e: lea eax, [ebp - 0x6a8]
0x451484: mov edx, 0x452d58 ; str='Prn_Nae_P'
0x451489: call 0x401378 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString
0x45148e: push dword ptr [ebp - 0x69c]
0x451494: push dword ptr [ebp - 0x6a0]
0x45149a: push dword ptr [ebp - 0x6a4]
0x4514a0: push dword ptr [ebp - 0x6a8]
0x4514a6: lea eax, [ebp - 0x6b8]
0x4514ac: mov edx, 0x452d6c ; str='Prn_NaeW_P'
0x4514b1: call 0x401378 ; rtl60!@System@@VarFromLStr$qqrr14System@Variantx17System@AnsiString
0x4514b6: push dword ptr [ebp - 0x6ac]
0x4514bc: push dword ptr [ebp - 0x6b0]
0x4514c2: push dword ptr [ebp - 0x6b4]
0x4514c8: push dword ptr [ebp - 0x6b8]
0x4514ce: push ebx
0x4514cf: lea eax, [ebp - 0x698]
0x4514d5: push eax
0x4514d6: call 0x4047a4 ; DP_COMMON!IIF
0x4514db: lea edx, [ebp - 0x698]
0x4514e1: lea eax, [ebp - 0x688]
0x4514e7: call 0x401340 ; rtl60!@System@@VarToLStr$qqrr17System@AnsiStringrx14System@Variant
0x4514ec: mov edx, dword ptr [ebp - 0x688]
0x4514f2: mov ecx, 0x452d80 ; str='Prn_Nae_P_EXL'
0x4514f7: mov eax, 0x452c78 ; str='ST_P_Nae.CPM'
0x4514fc: call 0x44fb68
0x451501: pop ecx
0x451502: jmp 0x451e27
@@ -0,0 +1,18 @@
0x4519a8: push ebp
0x4519a9: mov eax, dword ptr [0x4d38ec]
0x4519ae: push eax
0x4519af: mov ecx, 0x45327c ; str='Prn_Nae_Cont1'
0x4519b4: mov edx, 0x45327c ; str='Prn_Nae_Cont1'
0x4519b9: mov eax, 0x452c78 ; str='ST_P_Nae.CPM'
0x4519be: call 0x44fb68
0x4519c3: pop ecx
0x4519c4: jmp 0x451e27
0x4519c9: push ebp
0x4519ca: mov eax, dword ptr [0x4d38ec]
0x4519cf: push eax
0x4519d0: mov ecx, 0x453294 ; str='Prn_Nae_Cont2'
0x4519d5: mov edx, 0x453294 ; str='Prn_Nae_Cont2'
0x4519da: mov eax, 0x452c78 ; str='ST_P_Nae.CPM'
0x4519df: call 0x44fb68
0x4519e4: pop ecx
0x4519e5: jmp 0x451e27
@@ -0,0 +1,104 @@
0x44fdf5: mov eax, edi
0x44fdf7: cmp eax, 0x5087
0x44fdfc: jg 0x44ffab
0x44fe02: je 0x4513c6
0x44fe08: cmp eax, 0x4eee
0x44fe0d: jg 0x44fefa
0x44fe13: je 0x450876
0x44fe19: cmp eax, 0x283f
0x44fe1e: jg 0x44fe9b
0x44fe20: je 0x4508d9
0x44fe26: cmp eax, 0x27da
0x44fe2b: jg 0x44fe72
0x44fe2d: je 0x4505be
0x44fe33: cmp eax, 0x2779
0x44fe38: jg 0x44fe59
0x44fe3a: je 0x450429
0x44fe40: add eax, 0xffffd88b
0x44fe45: sub eax, 3
0x44fe48: jb 0x4500e4
0x44fe4e: je 0x450172
0x44fe54: jmp 0x451db6
0x44fe59: sub eax, 0x277a
0x44fe5e: je 0x4502c0
0x44fe64: sub eax, 0x5f
0x44fe67: je 0x4504fd
0x44fe6d: jmp 0x451db6
0x44fe72: sub eax, 0x27db
0x44fe77: je 0x450727
0x44fe7d: sub eax, 3
0x44fe80: je 0x450876
0x44fe86: sub eax, 0x5f
0x44fe89: je 0x450897
0x44fe8f: dec eax
0x44fe90: je 0x4508b8
0x44fe96: jmp 0x451db6
0x44fe9b: cmp eax, 0x4e89
0x44fea0: jg 0x44fed3
0x44fea2: je 0x450429
0x44fea8: sub eax, 0x28a1
0x44fead: je 0x4508fa
0x44feb3: dec eax
0x44feb4: je 0x450b50
0x44feba: add eax, 0xffffda1d
0x44febf: sub eax, 3
0x44fec2: jb 0x4500e4
0x44fec8: je 0x450172
0x44fece: jmp 0x451db6
0x44fed3: sub eax, 0x4e8a
0x44fed8: je 0x4502c0
0x44fede: sub eax, 0x5f
0x44fee1: je 0x4504fd
0x44fee7: dec eax
0x44fee8: je 0x4505be
0x44feee: dec eax
0x44feef: je 0x450727
0x44fef5: jmp 0x451db6
0x44fefa: cmp eax, 0x507a
0x44feff: jg 0x44ff66
0x44ff01: je 0x451102
0x44ff07: cmp eax, 0x4fb2
0x44ff0c: jg 0x44ff3b
0x44ff0e: je 0x450b50
0x44ff14: sub eax, 0x4f4d
0x44ff19: je 0x450897
0x44ff1f: dec eax
0x44ff20: je 0x4508b8
0x44ff26: dec eax
0x44ff27: je 0x4508d9
0x44ff2d: sub eax, 0x62
0x44ff30: je 0x4508fa
0x44ff36: jmp 0x451db6
0x44ff3b: add eax, 0xffffafeb
0x44ff40: sub eax, 4
0x44ff43: jb 0x450c22
0x44ff49: sub eax, 3
0x44ff4c: jb 0x450da4
0x44ff52: je 0x450ce3
0x44ff58: sub eax, 0x5d
0x44ff5b: je 0x450e65
0x44ff61: jmp 0x451db6
0x44ff66: add eax, 0xffffaf85
0x44ff6b: cmp eax, 0xb
0x44ff6e: ja 0x451db6
0x44ff74: jmp dword ptr [eax*4 + 0x44ff7b]
0x44ff7b: and edx, dword ptr [ecx]
0x44ff7d: inc ebp
0x44ff7e: add byte ptr [ebx + 0x43004511], dh
0x44ff84: adc al, byte ptr [ebp]
0x44ff87: adc al, byte ptr fs:[ebp]
0x44ff8b: test dword ptr [edx], edx
0x44ff8d: inc ebp
0x44ff8e: add byte ptr [esi - 0x3bffbaf2], al
0x44ff94: cmovne eax, dword ptr [eax]
0x44ff97: mov dh, 0x1d
0x44ff99: inc ebp
0x44ff9a: add byte ptr [esi - 0x49ffbae3], dh
0x44ffa0: sbb eax, 0x12a60045
0x44ffa5: inc ebp
0x44ffa6: add byte ptr [esi], dh
0x44ffa8: adc eax, dword ptr [ebp]
0x44ffab: add eax, 0xffffaf71
0x44ffb0: cmp eax, 0x48
0x44ffb3: ja 0x451db6
0x44ffb9: jmp dword ptr [eax*4 + 0x44ffc0]
@@ -0,0 +1,73 @@
20623 0x4513e7
20624 0x451477
20625 0x451db6
20626 0x451db6
20627 0x451db6
20628 0x451db6
20629 0x451db6
20630 0x451db6
20631 0x451db6
20632 0x451507
20633 0x451528
20634 0x451549
20635 0x45156a
20636 0x45158b
20637 0x45158b
20638 0x4515ac
20639 0x451db6
20640 0x451db6
20641 0x451db6
20642 0x451db6
20643 0x4515cd
20644 0x45165d
20645 0x4516ed
20646 0x45170e
20647 0x45170e
20648 0x45172f
20649 0x451798
20650 0x451db6
20651 0x4517b9
20652 0x4517da
20653 0x4517fb
20654 0x45181c
20655 0x45183d
20656 0x45185e
20657 0x45187f
20658 0x451db6
20659 0x451db6
20660 0x451db6
20661 0x4518a0
20662 0x4518c1
20663 0x4518e2
20664 0x451903
20665 0x451924
20666 0x451945
20667 0x451966
20668 0x451db6
20669 0x451db6
20670 0x451db6
20671 0x451c53
20672 0x451987
20673 0x4519a8
20674 0x4519c9
20675 0x4519ea
20676 0x451a0b
20677 0x451a2c
20678 0x451a4d
20679 0x451b50
20680 0x451db6
20681 0x451db6
20682 0x451db6
20683 0x451db6
20684 0x451db6
20685 0x451db6
20686 0x451db6
20687 0x451db6
20688 0x451db6
20689 0x451db6
20690 0x451db6
20691 0x451db6
20692 0x451db6
20693 0x451d56
20694 0x451d77
20695 0x451d98
@@ -0,0 +1,18 @@
0 0x421d04 일반공종
10 0x421d18 안전관리비
11 0x421d18 안전관리비
20 0x421d2c 품질관리비
21 0x421d2c 품질관리비
30 0x421d40 미확정설계공종(PS)
31 0x421d40 미확정설계공종(PS)
40 0x421d5c 제요율적용제외공종
41 0x421d78 제비율적용제외공종
50 0x421d94 작업설 등
51 0x421d94 작업설 등
60 0x421da8 매입세
61 0x421da8 매입세
70 0x421db8 관급자재공종
71 0x421dd0 관급자재대(도급자)
72 0x421dec 관급자재대(관급자)
111 0x421e08 비과세자재대
120 0x421e20 조달수수료
@@ -0,0 +1,774 @@
0x556d68: push ebp
0x556d69: mov ebp, esp
0x556d6b: mov ecx, 0x2f
0x556d70: push 0
0x556d72: push 0
0x556d74: dec ecx
0x556d75: jne 0x556d70
0x556d77: push ecx
0x556d78: push ebx
0x556d79: push esi
0x556d7a: push edi
0x556d7b: mov dword ptr [ebp - 4], eax
0x556d7e: xor eax, eax
0x556d80: push ebp
0x556d81: push 0x5578e3
0x556d86: push dword ptr fs:[eax]
0x556d89: mov dword ptr fs:[eax], esp
0x556d8c: xor eax, eax
0x556d8e: push ebp
0x556d8f: push 0x557872
0x556d94: push dword ptr fs:[eax]
0x556d97: mov dword ptr fs:[eax], esp
0x556d9a: mov eax, dword ptr [0x5e5fb0]
0x556d9f: mov eax, dword ptr [eax]
0x556da1: mov eax, dword ptr [eax + 0x2f4]
0x556da7: mov edx, dword ptr [0x5e6090]
0x556dad: mov edx, dword ptr [edx]
0x556daf: mov dword ptr [edx + 0x20], eax
0x556db2: mov eax, dword ptr [0x5e5d7c]
0x556db7: mov edx, dword ptr [0x5e5f8c]
0x556dbd: mov edx, dword ptr [edx]
0x556dbf: mov edx, dword ptr [edx + 0x38]
0x556dc2: call 0x401260 ; rtl60!@System@@LStrAsg$qqrpvpxv
0x556dc7: mov eax, dword ptr [0x5e5f0c]
0x556dcc: mov edx, dword ptr [0x5fa120]
0x556dd2: call 0x401260 ; rtl60!@System@@LStrAsg$qqrpvpxv
0x556dd7: mov dword ptr [ebp - 8], 1
0x556dde: mov eax, dword ptr [0x5e5f40]
0x556de3: mov edx, dword ptr [ebp - 8]
0x556de6: mov ecx, dword ptr [eax + edx*4]
0x556de9: lea eax, [ebp - 0xbc]
0x556def: mov edx, 0x5578fc ; str='TCOST'
0x556df4: call 0x4012b0 ; rtl60!@System@@LStrCat3$qqrv
0x556df9: mov edx, dword ptr [ebp - 0xbc]
0x556dff: mov eax, dword ptr [0x5e6090]
0x556e04: mov eax, dword ptr [eax]
0x556e06: mov eax, dword ptr [eax + 0x20]
0x556e09: call 0x404770 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString
0x556e0e: fcomp dword ptr [0x557904] ; f32=0.0
0x556e14: fnstsw ax
0x556e16: sahf
0x556e17: ja 0x556e5c
0x556e19: push 0x557910
0x556e1e: push 0x7f01
0x556e23: push 1
0x556e25: mov eax, 0x557920 ; str='확 인(&O)'
0x556e2a: mov dword ptr [ebp - 0xc0], eax
0x556e30: lea eax, [ebp - 0xc0]
0x556e36: push eax
0x556e37: push 0
0x556e39: mov eax, dword ptr [0x5fd480]
0x556e3e: mov eax, dword ptr [eax]
0x556e40: mov eax, dword ptr [eax + 0x30]
0x556e43: mov ecx, 0x557934 ; str='예상적용율 산출'
0x556e48: mov edx, 0x55794c ; str='직접공사비(내역서) 금액이 0 인 내역은 예상적용율을 산출할 수 없습니다.'
0x556e4d: call 0x44b680
0x556e52: call 0x401220 ; rtl60!@System@@TryFinallyExit$qqrv
0x556e57: jmp 0x557879
0x556e5c: mov eax, dword ptr [ebp - 4]
0x556e5f: mov eax, dword ptr [eax + 0x2fc]
0x556e65: mov dword ptr [ebp - 0x34], eax
0x556e68: xor eax, eax
0x556e6a: push ebp
0x556e6b: push 0x556fb9
0x556e70: push dword ptr fs:[eax]
0x556e73: mov dword ptr fs:[eax], esp
0x556e76: xor eax, eax
0x556e78: mov dword ptr [ebp - 0x30], eax
0x556e7b: mov dword ptr [ebp - 0x2c], eax
0x556e7e: mov edx, 0x55799c ; str='SORTCODE'
0x556e83: mov eax, dword ptr [ebp - 0x34]
0x556e86: call 0x404870 ; Apollo5D6!@Apodset@TApolloTable@SetIndexName$qqr17System@AnsiString
0x556e8b: mov eax, dword ptr [ebp - 0x34]
0x556e8e: call 0x403ce0 ; dbrtl60!@Db@TDataSet@Open$qqrv
0x556e93: xor edx, edx
0x556e95: mov eax, dword ptr [ebp - 0x34]
0x556e98: call 0x404818 ; Apollo5D6!@Apodset@TApolloTable@Query$qqrx17System@AnsiString
0x556e9d: mov eax, dword ptr [ebp - 0x34]
0x556ea0: call 0x4047b0 ; Apollo5D6!@Apodset@TApolloTable@GoBottom$qqrv
0x556ea5: jmp 0x556f86
0x556eaa: lea ecx, [ebp - 0xc4]
0x556eb0: mov edx, 0x5579b0 ; str='BDCODE1'
0x556eb5: mov eax, dword ptr [ebp - 0x34]
0x556eb8: call 0x404790 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x556ebd: mov eax, dword ptr [ebp - 0xc4]
0x556ec3: cmp byte ptr [eax], 0x43
0x556ec6: jne 0x556f02
0x556ec8: lea ecx, [ebp - 0xd8]
0x556ece: mov eax, dword ptr [ebp - 4]
0x556ed1: mov eax, dword ptr [eax + 0x2fc]
0x556ed7: mov edx, 0x5579c0 ; str='ENDCODE'
0x556edc: call 0x403d00 ; dbrtl60!@Db@TDataSet@GetFieldValue$qqrx17System@AnsiString
0x556ee1: lea edx, [ebp - 0xd8]
0x556ee7: lea eax, [ebp - 0xc8]
0x556eed: call 0x4013b0 ; rtl60!@System@@VarToLStr$qqrr17System@AnsiStringrx14System@Variant
0x556ef2: mov edx, dword ptr [ebp - 0xc8]
0x556ef8: mov eax, dword ptr [ebp - 0x34]
0x556efb: call 0x4047c0 ; Apollo5D6!@Apodset@TApolloTable@Seek$qqr17System@AnsiString
0x556f00: jmp 0x556f7b
0x556f02: push 0x5579d0
0x556f07: lea ecx, [ebp - 0xe0]
0x556f0d: mov edx, 0x5579b0 ; str='BDCODE1'
0x556f12: mov eax, dword ptr [ebp - 0x34]
0x556f15: call 0x404790 ; Apollo5D6!@Apodset@TApolloTable@GetString$qqr17System@AnsiString
0x556f1a: mov eax, dword ptr [ebp - 0xe0]
0x556f20: mov dl, byte ptr [eax]
0x556f22: lea eax, [ebp - 0xdc]
0x556f28: call 0x401278 ; rtl60!@System@@LStrFromChar$qqrr17System@AnsiStringc
0x556f2d: mov eax, dword ptr [ebp - 0xdc]
0x556f33: push eax
0x556f34: call 0x4228cc ; DP_COMMON!MPOS
0x556f39: test al, al
0x556f3b: je 0x556f7b
0x556f3d: push 0
0x556f3f: mov eax, dword ptr [0x5e5f40]
0x556f44: mov edx, dword ptr [ebp - 8]
0x556f47: mov ecx, dword ptr [eax + edx*4]
0x556f4a: lea eax, [ebp - 0xe4]
0x556f50: mov edx, 0x5579e4 ; str='QTY'
0x556f55: call 0x4012b0 ; rtl60!@System@@LStrCat3$qqrv
0x556f5a: mov edx, dword ptr [ebp - 0xe4]
0x556f60: mov eax, dword ptr [ebp - 0x34]
0x556f63: call 0x404770 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString
0x556f68: add esp, -0xc
0x556f6b: fstp xword ptr [esp]
0x556f6e: wait
0x556f6f: call 0x42290c ; DP_COMMON!MROUNDUP
0x556f74: fadd qword ptr [ebp - 0x30]
0x556f77: fstp qword ptr [ebp - 0x30]
0x556f7a: wait
0x556f7b: or edx, 0xffffffff
0x556f7e: mov eax, dword ptr [ebp - 0x34]
0x556f81: call 0x4047b8 ; Apollo5D6!@Apodset@TApolloTable@Skip$qqri
0x556f86: mov eax, dword ptr [ebp - 0x34]
0x556f89: mov edx, dword ptr [eax]
0x556f8b: call dword ptr [edx + 0x26c]
0x556f91: test al, al
0x556f93: je 0x556eaa
0x556f99: xor eax, eax
0x556f9b: pop edx
0x556f9c: pop ecx
0x556f9d: pop ecx
0x556f9e: mov dword ptr fs:[eax], edx
0x556fa1: push 0x556fc0
0x556fa6: mov eax, dword ptr [ebp - 0x34]
0x556fa9: call 0x403ce8 ; dbrtl60!@Db@TDataSet@Close$qqrv
0x556fae: xor edx, edx
0x556fb0: mov eax, dword ptr [ebp - 0x34]
0x556fb3: call 0x404870 ; Apollo5D6!@Apodset@TApolloTable@SetIndexName$qqr17System@AnsiString
0x556fb8: ret
0x556fb9: jmp 0x401200
0x556fbe: jmp 0x556fa6
0x556fc0: mov ebx, dword ptr [ebp - 8]
0x556fc3: add ebx, ebx
0x556fc5: lea ebx, [ebx + ebx*2]
0x556fc8: mov eax, dword ptr [0x5e5d84]
0x556fcd: mov eax, dword ptr [eax]
0x556fcf: xor edx, edx
0x556fd1: mov dword ptr [eax + ebx*8 - 0x20], edx
0x556fd5: mov dword ptr [eax + ebx*8 - 0x1c], edx
0x556fd9: mov eax, dword ptr [0x5e5d84]
0x556fde: mov eax, dword ptr [eax]
0x556fe0: xor edx, edx
0x556fe2: mov dword ptr [eax + ebx*8 - 0x28], edx
0x556fe6: mov dword ptr [eax + ebx*8 - 0x24], edx
0x556fea: mov eax, dword ptr [0x5e5d84]
0x556fef: mov eax, dword ptr [eax]
0x556ff1: xor edx, edx
0x556ff3: mov dword ptr [eax + ebx*8 - 0x18], edx
0x556ff7: mov dword ptr [eax + ebx*8 - 0x14], edx
0x556ffb: mov eax, dword ptr [0x5e5d84]
0x557000: mov eax, dword ptr [eax]
0x557002: fld qword ptr [eax + ebx*8 - 0x20]
0x557006: mov eax, dword ptr [0x5e5d84]
0x55700b: mov eax, dword ptr [eax]
0x55700d: fadd qword ptr [eax + ebx*8 - 0x28]
0x557011: mov eax, dword ptr [ebp - 8]
0x557014: add eax, eax
0x557016: lea eax, [eax + eax*2]
0x557019: mov edx, dword ptr [0x5e5d84]
0x55701f: mov edx, dword ptr [edx]
0x557021: fadd qword ptr [edx + eax*8 - 0x18]
0x557025: mov eax, dword ptr [0x5e5d84]
0x55702a: mov eax, dword ptr [eax]
0x55702c: fstp qword ptr [eax + ebx*8 - 0x30]
0x557030: wait
0x557031: push 0
0x557033: push 0
0x557035: push 0xbff00000
0x55703a: push 0
0x55703c: push 0
0x55703e: mov ecx, 1
0x557043: xor edx, edx
0x557045: mov eax, dword ptr [ebp - 8]
0x557048: call 0x45f974
0x55704d: fstp qword ptr [ebp - 0x60]
0x557050: wait
0x557051: push 0
0x557053: push 0
0x557055: push 0
0x557057: push 0
0x557059: push 0
0x55705b: mov ecx, 2
0x557060: xor edx, edx
0x557062: mov eax, dword ptr [ebp - 8]
0x557065: call 0x45f974
0x55706a: fstp qword ptr [ebp - 0x10]
0x55706d: wait
0x55706e: mov eax, dword ptr [0x5e5f40]
0x557073: mov edx, dword ptr [ebp - 8]
0x557076: mov ecx, dword ptr [eax + edx*4]
0x557079: lea eax, [ebp - 0xe8]
0x55707f: mov edx, 0x5579f0 ; str='COSTW'
0x557084: call 0x4012b0 ; rtl60!@System@@LStrCat3$qqrv
0x557089: mov edx, dword ptr [ebp - 0xe8]
0x55708f: mov eax, dword ptr [0x5e6090]
0x557094: mov eax, dword ptr [eax]
0x557096: mov eax, dword ptr [eax + 0x20]
0x557099: call 0x404770 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString
0x55709e: fsub qword ptr [ebp - 0x10]
0x5570a1: fstp qword ptr [ebp - 0x50]
0x5570a4: wait
0x5570a5: push 0
0x5570a7: push -3
0x5570a9: fld xword ptr [0x5579f8]
0x5570af: fmul qword ptr [ebp - 0x50]
0x5570b2: add esp, -0xc
0x5570b5: fstp xword ptr [esp]
0x5570b8: wait
0x5570b9: call 0x422904 ; DP_COMMON!MROUNDUD
0x5570be: fstp qword ptr [ebp - 0x18]
0x5570c1: wait
0x5570c2: push dword ptr [ebp - 0x4c]
0x5570c5: push dword ptr [ebp - 0x50]
0x5570c8: push 0
0x5570ca: push -3
0x5570cc: fld qword ptr [ebp - 0x50]
0x5570cf: fmul dword ptr [0x557a04] ; f32=1.5
0x5570d5: add esp, -0xc
0x5570d8: fstp xword ptr [esp]
0x5570db: wait
0x5570dc: call 0x422904 ; DP_COMMON!MROUNDUD
0x5570e1: add esp, -8
0x5570e4: fstp qword ptr [esp]
0x5570e7: wait
0x5570e8: push -3
0x5570ea: fld qword ptr [ebp - 0x50]
0x5570ed: fmul dword ptr [0x557a08] ; f32=0.5
0x5570f3: add esp, -0xc
0x5570f6: fstp xword ptr [esp]
0x5570f9: wait
0x5570fa: call 0x42290c ; DP_COMMON!MROUNDUP
0x5570ff: add esp, -8
0x557102: fstp qword ptr [esp]
0x557105: wait
0x557106: fld qword ptr [ebp - 0x50]
0x557109: add esp, -0xc
0x55710c: fstp xword ptr [esp]
0x55710f: wait
0x557110: lea edx, [ebp - 0xf0]
0x557116: mov eax, 0x557a14 ; str='#,0'
0x55711b: call 0x401fd8 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg
0x557120: mov ecx, dword ptr [ebp - 0xf0]
0x557126: lea eax, [ebp - 0xec]
0x55712c: mov edx, 0x557a20 ; str='도급공사비 : '
0x557131: call 0x4012b0 ; rtl60!@System@@LStrCat3$qqrv
0x557136: mov edx, dword ptr [ebp - 0xec]
0x55713c: lea ecx, [ebp - 0x18]
0x55713f: mov eax, 0x557a38 ; str='목표 금액을 입력하세요.'
0x557144: call 0x5523c0
0x557149: test al, al
0x55714b: jne 0x557157
0x55714d: call 0x401220 ; rtl60!@System@@TryFinallyExit$qqrv
0x557152: jmp 0x557879
0x557157: push 1
0x557159: push 5
0x55715b: fld qword ptr [ebp - 0x18]
0x55715e: fdiv qword ptr [ebp - 0x50]
0x557161: add esp, -0xc
0x557164: fstp xword ptr [esp]
0x557167: wait
0x557168: call 0x422904 ; DP_COMMON!MROUNDUD
0x55716d: fstp qword ptr [ebp - 0x68]
0x557170: wait
0x557171: mov eax, dword ptr [0x5e5f40]
0x557176: mov edx, dword ptr [ebp - 8]
0x557179: mov ecx, dword ptr [eax + edx*4]
0x55717c: lea eax, [ebp - 0xf4]
0x557182: mov edx, 0x557a58 ; str='MCOST'
0x557187: call 0x4012b0 ; rtl60!@System@@LStrCat3$qqrv
0x55718c: mov edx, dword ptr [ebp - 0xf4]
0x557192: mov eax, dword ptr [0x5e6090]
0x557197: mov eax, dword ptr [eax]
0x557199: mov eax, dword ptr [eax + 0x20]
0x55719c: call 0x404770 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString
0x5571a1: fstp qword ptr [ebp - 0xa8]
0x5571a7: wait
0x5571a8: mov eax, dword ptr [0x5e5f40]
0x5571ad: mov edx, dword ptr [ebp - 8]
0x5571b0: mov ecx, dword ptr [eax + edx*4]
0x5571b3: lea eax, [ebp - 0xf8]
0x5571b9: mov edx, 0x557a68 ; str='LCOST'
0x5571be: call 0x4012b0 ; rtl60!@System@@LStrCat3$qqrv
0x5571c3: mov edx, dword ptr [ebp - 0xf8]
0x5571c9: mov eax, dword ptr [0x5e6090]
0x5571ce: mov eax, dword ptr [eax]
0x5571d0: mov eax, dword ptr [eax + 0x20]
0x5571d3: call 0x404770 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString
0x5571d8: fstp qword ptr [ebp - 0xb0]
0x5571de: wait
0x5571df: mov eax, dword ptr [0x5e5f40]
0x5571e4: mov edx, dword ptr [ebp - 8]
0x5571e7: mov ecx, dword ptr [eax + edx*4]
0x5571ea: lea eax, [ebp - 0xfc]
0x5571f0: mov edx, 0x557a78 ; str='SCOST'
0x5571f5: call 0x4012b0 ; rtl60!@System@@LStrCat3$qqrv
0x5571fa: mov edx, dword ptr [ebp - 0xfc]
0x557200: mov eax, dword ptr [0x5e6090]
0x557205: mov eax, dword ptr [eax]
0x557207: mov eax, dword ptr [eax + 0x20]
0x55720a: call 0x404770 ; Apollo5D6!@Apodset@TApolloTable@GetDouble$qqr17System@AnsiString
0x55720f: fstp qword ptr [ebp - 0xa0]
0x557215: wait
0x557216: mov eax, dword ptr [0x5e5d84]
0x55721b: mov eax, dword ptr [eax]
0x55721d: fld qword ptr [eax + ebx*8 - 0x20]
0x557221: mov eax, dword ptr [0x5e5d84]
0x557226: mov eax, dword ptr [eax]
0x557228: fadd qword ptr [eax + ebx*8 - 0x28]
0x55722c: mov eax, dword ptr [0x5e5d84]
0x557231: mov eax, dword ptr [eax]
0x557233: fadd qword ptr [eax + ebx*8 - 0x18]
0x557237: fstp qword ptr [ebp - 0xb8]
0x55723d: wait
0x55723e: mov eax, dword ptr [0x5e5d84]
0x557243: mov eax, dword ptr [eax]
0x557245: mov edx, dword ptr [ebp - 0xa8]
0x55724b: mov dword ptr [eax + ebx*8 - 0x20], edx
0x55724f: mov edx, dword ptr [ebp - 0xa4]
0x557255: mov dword ptr [eax + ebx*8 - 0x1c], edx
0x557259: mov eax, dword ptr [0x5e5d84]
0x55725e: mov eax, dword ptr [eax]
0x557260: mov edx, dword ptr [ebp - 0xb0]
0x557266: mov dword ptr [eax + ebx*8 - 0x28], edx
0x55726a: mov edx, dword ptr [ebp - 0xac]
0x557270: mov dword ptr [eax + ebx*8 - 0x24], edx
0x557274: mov eax, dword ptr [0x5e5d84]
0x557279: mov eax, dword ptr [eax]
0x55727b: mov edx, dword ptr [ebp - 0xa0]
0x557281: mov dword ptr [eax + ebx*8 - 0x18], edx
0x557285: mov edx, dword ptr [ebp - 0x9c]
0x55728b: mov dword ptr [eax + ebx*8 - 0x14], edx
0x55728f: mov eax, dword ptr [0x5e5d84]
0x557294: mov eax, dword ptr [eax]
0x557296: fld qword ptr [eax + ebx*8 - 0x20]
0x55729a: mov eax, dword ptr [0x5e5d84]
0x55729f: mov eax, dword ptr [eax]
0x5572a1: fadd qword ptr [eax + ebx*8 - 0x28]
0x5572a5: mov eax, dword ptr [ebp - 8]
0x5572a8: add eax, eax
0x5572aa: lea eax, [eax + eax*2]
0x5572ad: mov edx, dword ptr [0x5e5d84]
0x5572b3: mov edx, dword ptr [edx]
0x5572b5: fadd qword ptr [edx + eax*8 - 0x18]
0x5572b9: mov eax, dword ptr [0x5e5d84]
0x5572be: mov eax, dword ptr [eax]
0x5572c0: fstp qword ptr [eax + ebx*8 - 0x30]
0x5572c4: wait
0x5572c5: push 0
0x5572c7: push 0
0x5572c9: push 0
0x5572cb: push 0
0x5572cd: push 0
0x5572cf: mov ecx, 1
0x5572d4: xor edx, edx
0x5572d6: mov eax, dword ptr [ebp - 8]
0x5572d9: call 0x45f974
0x5572de: fsub qword ptr [ebp - 0x60]
0x5572e1: fstp qword ptr [ebp - 0x58]
0x5572e4: wait
0x5572e5: push 5
0x5572e7: mov eax, dword ptr [0x5e5d84]
0x5572ec: mov eax, dword ptr [eax]
0x5572ee: fld qword ptr [eax + ebx*8 - 0x30]
0x5572f2: fdiv qword ptr [ebp - 0x58]
0x5572f5: add esp, -0xc
0x5572f8: fstp xword ptr [esp]
0x5572fb: wait
0x5572fc: call 0x42290c ; DP_COMMON!MROUNDUP
0x557301: fstp qword ptr [ebp - 0x78]
0x557304: wait
0x557305: mov esi, 0x1388
0x55730a: mov dword ptr [ebp - 0xc0], esi
0x557310: fild dword ptr [ebp - 0xc0]
0x557316: fdivr qword ptr [ebp - 0x18]
0x557319: fcomp dword ptr [0x557a80] ; f32=5000.0
0x55731f: fnstsw ax
0x557321: sahf
0x557322: jae 0x557334
0x557324: fld qword ptr [ebp - 0x18]
0x557327: fdiv dword ptr [0x557a80] ; f32=5000.0
0x55732d: call 0x401078 ; rtl60!@System@@ROUND$qqrv
0x557332: mov esi, eax
0x557334: push 0
0x557336: fld qword ptr [ebp - 0x18]
0x557339: fsub qword ptr [ebp - 0x60]
0x55733c: mov dword ptr [ebp - 0xc0], esi
0x557342: fild dword ptr [ebp - 0xc0]
0x557348: fdivr qword ptr [ebp - 0x18]
0x55734b: faddp st(1)
0x55734d: fmul qword ptr [ebp - 0x78]
0x557350: add esp, -0xc
0x557353: fstp xword ptr [esp]
0x557356: wait
0x557357: call 0x42290c ; DP_COMMON!MROUNDUP
0x55735c: fstp qword ptr [ebp - 0x48]
0x55735f: wait
0x557360: push 5
0x557362: fld qword ptr [ebp - 0x48]
0x557365: mov eax, dword ptr [0x5e5d84]
0x55736a: mov eax, dword ptr [eax]
0x55736c: fdiv qword ptr [eax + ebx*8 - 0x30]
0x557370: add esp, -0xc
0x557373: fstp xword ptr [esp]
0x557376: wait
0x557377: call 0x42290c ; DP_COMMON!MROUNDUP
0x55737c: fstp qword ptr [ebp - 0x70]
0x55737f: wait
0x557380: lea eax, [ebp - 0x11c]
0x557386: xor edx, edx
0x557388: mov cl, 1
0x55738a: call 0x4013c0 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi
0x55738f: push dword ptr [ebp - 0x110]
0x557395: push dword ptr [ebp - 0x114]
0x55739b: push dword ptr [ebp - 0x118]
0x5573a1: push dword ptr [ebp - 0x11c]
0x5573a7: fld qword ptr [ebp - 0x70]
0x5573aa: fmul dword ptr [0x557a84] ; f32=100.0
0x5573b0: lea eax, [ebp - 0x12c]
0x5573b6: call 0x4013d8 ; rtl60!@System@@VarFromReal$qqrv
0x5573bb: push dword ptr [ebp - 0x120]
0x5573c1: push dword ptr [ebp - 0x124]
0x5573c7: push dword ptr [ebp - 0x128]
0x5573cd: push dword ptr [ebp - 0x12c]
0x5573d3: mov eax, dword ptr [ebp - 4]
0x5573d6: mov eax, dword ptr [eax + 0x374]
0x5573dc: mov edx, dword ptr [eax]
0x5573de: call dword ptr [edx + 0xc4]
0x5573e4: push eax
0x5573e5: lea eax, [ebp - 0x10c]
0x5573eb: push eax
0x5573ec: call 0x4228b4 ; DP_COMMON!IIF
0x5573f1: lea eax, [ebp - 0x10c]
0x5573f7: call 0x4013a0 ; rtl60!@System@@VarToReal$qqrrx14System@Variant
0x5573fc: fstp qword ptr [ebp - 0x20]
0x5573ff: wait
0x557400: fld qword ptr [ebp - 0x18]
0x557403: fadd qword ptr [ebp - 0x30]
0x557406: fstp qword ptr [ebp - 0x28]
0x557409: wait
0x55740a: mov ebx, 1
0x55740f: cmp ebx, 1
0x557412: je 0x55744d
0x557414: fld qword ptr [ebp - 0x88]
0x55741a: fcomp qword ptr [ebp - 0x28]
0x55741d: fnstsw ax
0x55741f: sahf
0x557420: jb 0x55744d
0x557422: fld qword ptr [ebp - 0x88]
0x557428: fsub qword ptr [ebp - 0x18]
0x55742b: fdiv qword ptr [ebp - 0x18]
0x55742e: fabs
0x557430: mov dword ptr [ebp - 0xc0], esi
0x557436: fild dword ptr [ebp - 0xc0]
0x55743c: fdivr dword ptr [0x557a88] ; f32=1.0
0x557442: fcompp
0x557444: fnstsw ax
0x557446: sahf
0x557447: jae 0x55760d
0x55744d: cmp ebx, 1
0x557450: jle 0x5574b4
0x557452: fld qword ptr [ebp - 0x88]
0x557458: fcomp qword ptr [ebp - 0x28]
0x55745b: fnstsw ax
0x55745d: sahf
0x55745e: jae 0x55748f
0x557460: push 0
0x557462: push 5
0x557464: mov eax, esi
0x557466: add eax, eax
0x557468: mov dword ptr [ebp - 0xc0], eax
0x55746e: fild dword ptr [ebp - 0xc0]
0x557474: fdivr dword ptr [0x557a88] ; f32=1.0
0x55747a: fadd qword ptr [ebp - 0x70]
0x55747d: add esp, -0xc
0x557480: fstp xword ptr [esp]
0x557483: wait
0x557484: call 0x422904 ; DP_COMMON!MROUNDUD
0x557489: fstp qword ptr [ebp - 0x70]
0x55748c: wait
0x55748d: jmp 0x5574b4
0x55748f: push 0
0x557491: push 5
0x557493: fld qword ptr [ebp - 0x88]
0x557499: fsub qword ptr [ebp - 0x18]
0x55749c: fabs
0x55749e: fdiv qword ptr [ebp - 0x18]
0x5574a1: fsubr qword ptr [ebp - 0x70]
0x5574a4: add esp, -0xc
0x5574a7: fstp xword ptr [esp]
0x5574aa: wait
0x5574ab: call 0x422904 ; DP_COMMON!MROUNDUD
0x5574b0: fstp qword ptr [ebp - 0x70]
0x5574b3: wait
0x5574b4: push 0
0x5574b6: push 0
0x5574b8: fld qword ptr [ebp - 0xa8]
0x5574be: fmul qword ptr [ebp - 0x70]
0x5574c1: add esp, -0xc
0x5574c4: fstp xword ptr [esp]
0x5574c7: wait
0x5574c8: call 0x422904 ; DP_COMMON!MROUNDUD
0x5574cd: mov edi, dword ptr [ebp - 8]
0x5574d0: add edi, edi
0x5574d2: lea edi, [edi + edi*2]
0x5574d5: mov eax, dword ptr [0x5e5d84]
0x5574da: mov eax, dword ptr [eax]
0x5574dc: fstp qword ptr [eax + edi*8 - 0x20]
0x5574e0: wait
0x5574e1: push 0
0x5574e3: push 0
0x5574e5: fld qword ptr [ebp - 0xb0]
0x5574eb: fmul qword ptr [ebp - 0x70]
0x5574ee: add esp, -0xc
0x5574f1: fstp xword ptr [esp]
0x5574f4: wait
0x5574f5: call 0x422904 ; DP_COMMON!MROUNDUD
0x5574fa: mov eax, dword ptr [0x5e5d84]
0x5574ff: mov eax, dword ptr [eax]
0x557501: fstp qword ptr [eax + edi*8 - 0x28]
0x557505: wait
0x557506: push 0
0x557508: push 0
0x55750a: fld qword ptr [ebp - 0xa0]
0x557510: fmul qword ptr [ebp - 0x70]
0x557513: add esp, -0xc
0x557516: fstp xword ptr [esp]
0x557519: wait
0x55751a: call 0x422904 ; DP_COMMON!MROUNDUD
0x55751f: mov eax, dword ptr [0x5e5d84]
0x557524: mov eax, dword ptr [eax]
0x557526: fstp qword ptr [eax + edi*8 - 0x18]
0x55752a: wait
0x55752b: mov eax, dword ptr [0x5e5d84]
0x557530: mov eax, dword ptr [eax]
0x557532: fld qword ptr [eax + edi*8 - 0x20]
0x557536: mov eax, dword ptr [0x5e5d84]
0x55753b: mov eax, dword ptr [eax]
0x55753d: fadd qword ptr [eax + edi*8 - 0x28]
0x557541: mov eax, dword ptr [ebp - 8]
0x557544: add eax, eax
0x557546: lea eax, [eax + eax*2]
0x557549: mov edx, dword ptr [0x5e5d84]
0x55754f: mov edx, dword ptr [edx]
0x557551: fadd qword ptr [edx + eax*8 - 0x18]
0x557555: mov eax, dword ptr [0x5e5d84]
0x55755a: mov eax, dword ptr [eax]
0x55755c: fstp qword ptr [eax + edi*8 - 0x30]
0x557560: wait
0x557561: lea eax, [ebp - 0x14c]
0x557567: xor edx, edx
0x557569: mov cl, 1
0x55756b: call 0x4013c0 ; rtl60!@System@@VarFromInt$qqrr14System@Variantxixi
0x557570: push dword ptr [ebp - 0x140]
0x557576: push dword ptr [ebp - 0x144]
0x55757c: push dword ptr [ebp - 0x148]
0x557582: push dword ptr [ebp - 0x14c]
0x557588: fld qword ptr [ebp - 0x70]
0x55758b: fmul dword ptr [0x557a84] ; f32=100.0
0x557591: lea eax, [ebp - 0x15c]
0x557597: call 0x4013d8 ; rtl60!@System@@VarFromReal$qqrv
0x55759c: push dword ptr [ebp - 0x150]
0x5575a2: push dword ptr [ebp - 0x154]
0x5575a8: push dword ptr [ebp - 0x158]
0x5575ae: push dword ptr [ebp - 0x15c]
0x5575b4: mov eax, dword ptr [ebp - 4]
0x5575b7: mov eax, dword ptr [eax + 0x374]
0x5575bd: mov edx, dword ptr [eax]
0x5575bf: call dword ptr [edx + 0xc4]
0x5575c5: push eax
0x5575c6: lea eax, [ebp - 0x13c]
0x5575cc: push eax
0x5575cd: call 0x4228b4 ; DP_COMMON!IIF
0x5575d2: lea eax, [ebp - 0x13c]
0x5575d8: call 0x4013a0 ; rtl60!@System@@VarToReal$qqrrx14System@Variant
0x5575dd: fstp qword ptr [ebp - 0x20]
0x5575e0: wait
0x5575e1: push 0
0x5575e3: push 0
0x5575e5: push dword ptr [ebp - 0x1c]
0x5575e8: push dword ptr [ebp - 0x20]
0x5575eb: push 0
0x5575ed: mov ecx, 1
0x5575f2: xor edx, edx
0x5575f4: mov eax, dword ptr [ebp - 8]
0x5575f7: call 0x45f974
0x5575fc: fstp qword ptr [ebp - 0x88]
0x557602: wait
0x557603: inc ebx
0x557604: cmp ebx, 0xb
0x557607: jne 0x55740f
0x55760d: push 0
0x55760f: push 0
0x557611: push dword ptr [ebp - 0x1c]
0x557614: push dword ptr [ebp - 0x20]
0x557617: push 0
0x557619: mov ecx, 3
0x55761e: xor edx, edx
0x557620: mov eax, dword ptr [ebp - 8]
0x557623: call 0x45f974
0x557628: fstp qword ptr [ebp - 0x80]
0x55762b: wait
0x55762c: fld qword ptr [ebp - 0x80]
0x55762f: fcomp qword ptr [ebp - 0x50]
0x557632: fnstsw ax
0x557634: sahf
0x557635: jb 0x55764f
0x557637: xor eax, eax
0x557639: mov dword ptr [ebp - 0x70], eax
0x55763c: mov dword ptr [ebp - 0x6c], 0x3ff00000
0x557643: mov eax, dword ptr [ebp - 0x50]
0x557646: mov dword ptr [ebp - 0x80], eax
0x557649: mov eax, dword ptr [ebp - 0x4c]
0x55764c: mov dword ptr [ebp - 0x7c], eax
0x55764f: push 0x557910
0x557654: push 0x7f02
0x557659: push 1
0x55765b: mov eax, 0x557a94 ; str='적용율적용(&Y)'
0x557660: mov dword ptr [ebp - 0x164], eax
0x557666: mov eax, 0x557aac ; str='아니오(&N)'
0x55766b: mov dword ptr [ebp - 0x160], eax
0x557671: lea eax, [ebp - 0x164]
0x557677: push eax
0x557678: push 1
0x55767a: push 0x557ac0
0x55767f: fld qword ptr [ebp - 0x18]
0x557682: add esp, -0xc
0x557685: fstp xword ptr [esp]
0x557688: wait
0x557689: lea edx, [ebp - 0x16c]
0x55768f: mov eax, 0x557a14 ; str='#,0'
0x557694: call 0x401fd8 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg
0x557699: push dword ptr [ebp - 0x16c]
0x55769f: push 0x557ad8
0x5576a4: push 0x557ad8
0x5576a9: push 0x557ae4
0x5576ae: fld qword ptr [ebp - 0x70]
0x5576b1: fmul dword ptr [0x557a84] ; f32=100.0
0x5576b7: add esp, -0xc
0x5576ba: fstp xword ptr [esp]
0x5576bd: wait
0x5576be: lea edx, [ebp - 0x170]
0x5576c4: mov eax, 0x557afc ; str='0.######%'
0x5576c9: call 0x401fd8 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg
0x5576ce: push dword ptr [ebp - 0x170]
0x5576d4: push 0x557b10
0x5576d9: push 0x557ad8
0x5576de: push 0x557ad8
0x5576e3: push 0x557b24
0x5576e8: fld qword ptr [ebp - 0x88]
0x5576ee: add esp, -0xc
0x5576f1: fstp xword ptr [esp]
0x5576f4: wait
0x5576f5: lea edx, [ebp - 0x174]
0x5576fb: mov eax, 0x557a14 ; str='#,0'
0x557700: call 0x401fd8 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg
0x557705: push dword ptr [ebp - 0x174]
0x55770b: push 0x557b3c
0x557710: push 0x557ad8
0x557715: push 0x557b54
0x55771a: fld qword ptr [ebp - 0x80]
0x55771d: add esp, -0xc
0x557720: fstp xword ptr [esp]
0x557723: wait
0x557724: lea edx, [ebp - 0x178]
0x55772a: mov eax, 0x557a14 ; str='#,0'
0x55772f: call 0x401fd8 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg
0x557734: push dword ptr [ebp - 0x178]
0x55773a: push 0x557ad8
0x55773f: push 0x557b6c
0x557744: fld qword ptr [ebp - 0x80]
0x557747: fadd qword ptr [ebp - 0x10]
0x55774a: add esp, -0xc
0x55774d: fstp xword ptr [esp]
0x557750: wait
0x557751: lea edx, [ebp - 0x17c]
0x557757: mov eax, 0x557a14 ; str='#,0'
0x55775c: call 0x401fd8 ; rtl60!@Sysutils@FormatFloat$qqrx17System@AnsiStringg
0x557761: push dword ptr [ebp - 0x17c]
0x557767: push 0x557ad8
0x55776c: push 0x557ad8
0x557771: push 0x557b84
0x557776: push 0x557ad8
0x55777b: push 0x557ad8
0x557780: push 0x557bb8
0x557785: push 0x557ad8
0x55778a: push 0x557c08
0x55778f: push 0x557ad8
0x557794: push 0x557c50
0x557799: push 0x557ad8
0x55779e: push 0x557ad8
0x5577a3: push 0x557c78
0x5577a8: lea eax, [ebp - 0x168]
0x5577ae: mov edx, 0x1f
0x5577b3: call 0x4012b8 ; rtl60!@System@@LStrCatN$qqrv
0x5577b8: mov edx, dword ptr [ebp - 0x168]
0x5577be: mov eax, dword ptr [0x5fd480]
0x5577c3: mov eax, dword ptr [eax]
0x5577c5: mov eax, dword ptr [eax + 0x30]
0x5577c8: mov ecx, 0x557cc4 ; str='계약내역 목표값 약식산출'
0x5577cd: call 0x44b680
0x5577d2: cmp ax, 1
0x5577d6: jne 0x55784e
0x5577d8: fld qword ptr [ebp - 0x70]
0x5577db: fmul dword ptr [0x557a84] ; f32=100.0
0x5577e1: add esp, -0xc
0x5577e4: fstp xword ptr [esp]
0x5577e7: wait
0x5577e8: mov eax, dword ptr [ebp - 4]
0x5577eb: mov eax, dword ptr [eax + 0x320]
0x5577f1: call 0x404b98 ; RealGrid6!@Urnedit@TwCustomNumEdit@SetValue$qqrg
0x5577f6: mov eax, dword ptr [ebp - 4]
0x5577f9: mov eax, dword ptr [eax + 0x320]
0x5577ff: call 0x404b90 ; RealGrid6!@Urnedit@TwCustomNumEdit@GetValue$qqrv
0x557804: add esp, -0xc
0x557807: fstp xword ptr [esp]
0x55780a: wait
0x55780b: mov eax, dword ptr [ebp - 4]
0x55780e: mov eax, dword ptr [eax + 0x324]
0x557814: call 0x404b98 ; RealGrid6!@Urnedit@TwCustomNumEdit@SetValue$qqrg
0x557819: mov eax, dword ptr [ebp - 4]
0x55781c: mov eax, dword ptr [eax + 0x320]
0x557822: call 0x404b90 ; RealGrid6!@Urnedit@TwCustomNumEdit@GetValue$qqrv
0x557827: add esp, -0xc
0x55782a: fstp xword ptr [esp]
0x55782d: wait
0x55782e: mov eax, dword ptr [ebp - 4]
0x557831: mov eax, dword ptr [eax + 0x328]
0x557837: call 0x404b98 ; RealGrid6!@Urnedit@TwCustomNumEdit@SetValue$qqrg
0x55783c: mov eax, dword ptr [ebp - 4]
0x55783f: mov eax, dword ptr [eax + 0x368]
0x557845: mov si, 0xffef
0x557849: call 0x401198 ; rtl60!@System@@CallDynaInst$qqrv
0x55784e: xor eax, eax
0x557850: pop edx
0x557851: pop ecx
0x557852: pop ecx
0x557853: mov dword ptr fs:[eax], edx
0x557856: push 0x557879
0x55785b: mov eax, dword ptr [0x5e5d7c]
0x557860: call 0x401250 ; rtl60!@System@@LStrClr$qqrpv
0x557865: mov eax, dword ptr [0x5e6090]
0x55786a: mov eax, dword ptr [eax]
0x55786c: xor edx, edx
@@ -0,0 +1,344 @@
===== dpc_mroundup.json ev_20fc29eeef8cdcd87391df8cec4423521e6a8a6f322cb2275fe6521d022ea9ce
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
void MROUNDUP(void)
{
float10 fVar1;
undefined4 **ppuVar2;
undefined2 uVar3;
undefined2 uVar4;
char cVar5;
int *piVar6;
int iVar7;
undefined2 extraout_var;
int iVar8;
char *unaff_ESI;
undefined4 *unaff_EDI;
int iVar9;
int *in_FS_OFFSET;
unkbyte10 in_ST0;
float10 fVar10;
float10 in_ST1;
float10 in_ST2;
undefined4 in_stack_00000004;
undefined4 in_stack_00000008;
undefined2 in_stack_0000000c;
uint in_stack_00000010;
undefined4 **local_a8 [2];
int local_a0;
undefined4 local_9c;
undefined4 local_98;
undefined *local_90;
undefined local_88 [16];
int local_78;
undefined4 local_74;
undefined4 uStackY_70;
undefined4 uStackY_6c;
undefined4 **local_68;
int local_60;
undefined4 *local_5c;
undefined4 *local_58;
undefined *puVar11;
char *pcVar12;
int local_48;
char *local_44;
undefined4 local_40;
undefined2 local_3c;
undefined2 uStack_3a;
undefined *puStack_38;
char *pcStack_34;
undefined4 ***local_30;
undefined2 local_2c;
undefined2 uStack_2a;
int iStack_28;
undefined2 uStack_24;
undefined2 uStack_22;
undefined4 local_20;
/* 0x547ac 56 MROUNDUP */
local_20 = &stack0xfffffffc;
iVar8 = 0x14;
do {
iVar8 = iVar8 + -1;
} while (iVar8 != 0);
uStack_24 = 0x4cff;
uStack_22 = 0x45;
iStack_28 = *in_FS_OFFSET;
*in_FS_OFFSET = (int)&iStack_28;
fVar10 = ABS((float10)CONCAT28(in_stack_0000000c,CONCAT44(in_stack_00000008,in_stack_00000004)));
pcStack_34 = SUB104(fVar10,0);
local_30 = (undefined4 ***)((unkuint10)fVar10 >> 0x20);
local_2c = (undefined2)((unkuint10)fVar10 >> 0x40);
puStack_38 = (undefined *)0x4547e6;
FUN_0040a19c("0.##########",(int *)&stack0xffffffe8);
local_2c = SUB42(unaff_ESI,0);
uVar3 = local_2c;
uStack_2a = (undefined2)((uint)unaff_ESI >> 0x10);
uVar4 = uStack_2a;
local_30 = &local_30;
pcStack_34 = (char *)0x4547f3;
EXTTOSTR();
pcStack_34 = (char *)0x4547fe;
FUN_004045bc((int *)&stack0xffffffe8,(int)local_30);
if (_DAT_00454d2c <
(float10)CONCAT28(in_stack_0000000c,CONCAT44(in_stack_00000008,in_stack_00000004))) {
pcStack_34 = (char *)0x45481e;
FUN_00404828((int *)&pcStack_34,(undefined4 *)unaff_ESI,(undefined4 *)&DAT_00454d40);
pcVar12 = pcStack_34;
pcStack_34 = (char *)0x45482d;
piVar6 = FUN_0040b1d0((int *)&DAT_00407b00,'\x01',(undefined4 *)pcVar12);
pcStack_34 = (char *)0x454832;
FUN_00403efc((int)piVar6);
}
pcStack_34 = (char *)0x45483f;
iVar8 = FUN_00404b18(".",unaff_ESI);
if (0 < iVar8) {
pcStack_34 = (char *)0x45484d;
iVar7 = FUN_004047dc((int)unaff_ESI);
if (iVar7 - iVar8 < 0xb) {
pcStack_34 = (char *)0x45485c;
iVar7 = FUN_004047dc((int)unaff_ESI);
if (0 < iVar7) {
iVar9 = 1;
do {
if ((byte)(unaff_ESI[iVar9 + -1] - 0x31U) < 9) {
pcStack_34 = (char *)0x45487c;
iVar7 = FUN_004047dc((int)unaff_ESI);
if (iVar7 - iVar9 < 0xb) {
iVar8 = 0;
}
break;
}
iVar9 = iVar9 + 1;
iVar7 = iVar7 + -1;
} while (iVar7 != 0);
}
}
}
if (iVar8 == 0) {
local_2c = 0;
uStack_2a = 0;
iStack_28 = 0;
uStack_24 = 0;
if (-1 < (int)in_stack_00000010) {
puStack_38 = &DAT_00454d74;
local_3c = 0x48c6;
uStack_3a = 0x45;
pcStack_34 = unaff_ESI;
cVar5 = MPOS();
if (cVar5 == '\0') goto LAB_00454cb4;
}
}
else {
in_ST1 = in_ST2;
if (iVar8 - 2U < 8) {
pcStack_34 = (char *)0x4002;
local_3c = 0;
uStack_3a = 0;
puStack_38 = (undefined *)(iVar8 + -0xd);
fVar10 = (float10)(int)puStack_38;
local_48 = SUB104(fVar10,0);
local_44 = (char *)((unkuint10)fVar10 >> 0x20);
local_40._0_2_ = (undefined2)((unkuint10)fVar10 >> 0x40);
FUN_0042983c();
local_2c = (undefined2)in_ST0;
uStack_2a = (undefined2)((unkuint10)in_ST0 >> 0x10);
iStack_28 = (int)((unkuint10)in_ST0 >> 0x20);
uStack_24 = (undefined2)((unkuint10)in_ST0 >> 0x40);
}
else if (iVar8 - 10U < 4) {
pcStack_34 = (char *)0x4002;
puStack_38 = (undefined *)0xa0000000;
local_3c = 0;
uStack_3a = 0;
local_40._0_2_ = 0xc001;
local_40._2_2_ = 0;
local_44 = (char *)0x80000000;
local_48 = 0;
FUN_0042983c();
local_2c = (undefined2)in_ST0;
uStack_2a = (undefined2)((unkuint10)in_ST0 >> 0x10);
iStack_28 = (int)((unkuint10)in_ST0 >> 0x20);
uStack_24 = (undefined2)((unkuint10)in_ST0 >> 0x40);
}
else {
pcStack_34 = (char *)0x4002;
puStack_38 = (undefined *)0xa0000000;
local_3c = 0;
uStack_3a = 0;
local_40._0_2_ = 0xc002;
local_40._2_2_ = 0;
local_44 = (char *)0x90000000;
@@ -0,0 +1,674 @@
===== main_conv.json ev_cfae2c4ebf15d07c7e603c57ba08d1b6e50c6e356e171b72aa1f520ffc8be5b0
void FUN_00554be0(char *param_1,undefined4 param_2,undefined4 param_3,char *param_4)
{
char cVar1;
undefined4 uVar2;
int iVar3;
char *pcVar4;
undefined4 *puVar5;
char *pcVar6;
undefined4 *in_FS_OFFSET;
byte bVar7;
float10 in_ST0;
float10 fVar8;
float10 in_ST1;
float10 in_ST2;
float10 in_ST3;
float10 in_ST4;
float10 in_ST5;
float10 in_ST6;
undefined4 local_318;
undefined1 local_314 [16];
undefined1 local_304 [16];
undefined1 local_2f4 [16];
undefined1 local_2e4 [16];
undefined4 local_2d4;
char local_2d0 [16];
undefined4 local_2c0;
char local_2bc [16];
undefined4 local_2ac;
char local_2a8 [16];
undefined4 local_298;
char local_294 [16];
undefined1 local_284 [16];
undefined1 local_274 [16];
undefined1 local_264 [16];
undefined1 local_254 [16];
undefined1 local_244 [16];
undefined1 local_234 [16];
char *local_224;
undefined1 local_220 [16];
undefined1 local_210 [16];
undefined1 local_200 [16];
undefined1 local_1f0 [16];
undefined1 local_1e0 [16];
undefined1 local_1d0 [16];
undefined1 local_1c0 [16];
undefined1 local_1b0 [256];
undefined1 local_b0 [16];
undefined4 local_a0;
char *local_9c;
undefined4 local_98;
undefined1 local_94 [16];
undefined1 local_84 [8];
undefined4 uStack_7c;
undefined1 auStack_78 [12];
undefined4 uStack_6c;
undefined4 uStack_68;
undefined8 local_64;
undefined2 uStack_5c;
undefined2 uStack_5a;
undefined4 uStack_58;
undefined4 local_54;
undefined1 *puStack_50;
int iStack_4c;
undefined2 uStack_48;
undefined2 uStack_46;
char *local_44;
char *local_40;
char *local_3c;
char *local_38;
undefined4 local_34;
char *local_30;
char *local_2c;
undefined4 local_28;
char *local_24;
char *local_20;
char *local_c;
char *local_8;
bVar7 = 0;
iVar3 = 0x62;
do {
iVar3 = iVar3 + -1;
} while (iVar3 != 0);
local_20 = (char *)0x554bfe;
local_8 = param_1;
_System__LStrAddRef_qqrpv(param_1);
pcVar4 = param_4 + -0x270;
local_24 = &LAB_00555ae8;
local_28 = *in_FS_OFFSET;
*in_FS_OFFSET = &local_28;
iVar3 = 0;
if ((param_4[-0x275] == '\0') || (local_20 = &stack0xfffffffc, *(double *)PTR_DAT_005e6020 != 0.0)
) {
cVar1 = *local_8;
local_20 = &stack0xfffffffc;
switch(cVar1) {
case 'B':
case 'D':
case 'X':
if (param_4[-0x275] == '\0') {
iVar3 = 1;
local_20 = &stack0xfffffffc;
}
else {
local_20 = &stack0xfffffffc;
if (*(double *)PTR_DAT_005e6020 != 0.0) {
local_2c = (char *)0x554d44;
local_20 = &stack0xfffffffc;
_System__LStrFromChar_qqrr17System_AnsiStringc(&local_44,cVar1);
local_2c = (char *)0x554d51;
iVar3 = _System__LStrPos_qqrv(local_44,"WBXDMLS");
}
}
break;
case 'L':
case 'M':
case 'S':
case 'W':
local_20 = &stack0xfffffffc;
if (param_4[-0x276] != '\0') {
local_2c = (char *)0x554cbb;
local_20 = &stack0xfffffffc;
_System__VarFromInt_qqrr14System_Variantxixi(&local_2c,1,1);
local_2c = local_20;
local_30 = local_24;
local_34._0_2_ = (undefined2)local_28;
local_34._2_2_ = (undefined2)((uint)local_28 >> 0x10);
local_38 = local_20;
local_3c = (char *)0x554cd1;
_System__LStrFromChar_qqrr17System_AnsiStringc(&local_40,cVar1);
local_3c = (char *)0x554cde;
uVar2 = _System__LStrPos_qqrv(local_40,"WBXDMLS");
local_3c = (char *)0x554cea;
_System__VarFromInt_qqrr14System_Variantxixi(&local_3c,uVar2,0xfc);
local_3c = local_30;
local_40 = (char *)CONCAT22(local_34._2_2_,(undefined2)local_34);
local_44 = local_38;
uStack_48 = SUB42(local_30,0);
uStack_46 = (undefined2)((uint)local_30 >> 0x10);
iStack_4c = CONCAT31((int3)((uint)param_4 >> 8),param_4[-0x275]);
puStack_50 = &stack0xffffffe4;
local_54 = 0x554d09;
IIF();
local_54 = 0x554d11;
iVar3 = _System__VarToInt_qqrrx14System_Variant(&stack0xffffffe4);
}
break;
case 'Q':
local_20 = &stack0xfffffffc;
if (param_4[-0x276] != '\0') {
iVar3 = 1;
local_20 = &stack0xfffffffc;
}
}
}
if (iVar3 - 1U < 7) {
if (*local_8 == 'Q') {
local_2c = (char *)0x554d79;
_System__FillChar_qqrpvic(pcVar4,0x270,0);
local_2c = (char *)0x554d8c;
_Apodset_TApolloTable_GetDouble_qqr17System_AnsiString
(*(undefined4 *)(param_4 + -0x27c),"LAMT1");
*(double *)(param_4 + -0x110) = (double)in_ST0;
local_2c = (char *)0x554da6;
_Apodset_TApolloTable_GetDouble_qqr17System_AnsiString
(*(undefined4 *)(param_4 + -0x27c),"MAMT1");
*(double *)(param_4 + -0x108) = (double)in_ST1;
local_2c = (char *)0x554dc0;
_Apodset_TApolloTable_GetDouble_qqr17System_AnsiString
(*(undefined4 *)(param_4 + -0x27c),"SAMT1");
*(double *)(param_4 + -0x100) = (double)in_ST2;
local_2c = (char *)0x554dda;
_Apodset_TApolloTable_GetDouble_qqr17System_AnsiString
(*(undefined4 *)(param_4 + -0x27c),"TAMT1");
*(double *)(param_4 + -0x118) = (double)in_ST3;
if ((*(double *)PTR_DAT_005e6020 != 100.0) && (*(double *)PTR_DAT_005e6020 != 0.0)) {
if ((*(double *)PTR_DAT_005e6020 == *(double *)(PTR_DAT_005e6020 + 8)) &&
((*(double *)PTR_DAT_005e6020 == *(double *)(PTR_DAT_005e6020 + 0x10) &&
(*(double *)PTR_DAT_005e6020 == *(double *)(PTR_DAT_005e6020 + 0x18))))) {
*(double *)(param_4 + -0x110) =
(*(double *)(param_4 + -0x110) * *(double *)(PTR_DAT_005e6020 + 8)) / 100.0;
*(double *)(param_4 + -0x108) =
(*(double *)(param_4 + -0x108) * *(double *)(PTR_DAT_005e6020 + 0x10)) / 100.0;
*(double *)(param_4 + -0x100) =
(*(double *)(param_4 + -0x100) * *(double *)(PTR_DAT_005e6020 + 0x18)) / 100.0;
*(double *)(param_4 + -0x118) =
(*(double *)(param_4 + -0x118) * *(double *)PTR_DAT_005e6020) / 100.0;
local_2c = (char *)0x0;
local_30 = (char *)0x1;
local_34._0_2_ = 0;
local_34._2_2_ = 0;
iVar3 = 0xb;
do {
local_38 = *(char **)(param_4 + iVar3 * 4 + -0x118);
iVar3 = iVar3 + -1;
} while (-1 < iVar3);
local_40 = (char *)0x554f81;
OPTIMIZ();
puVar5 = *(undefined4 **)PTR_DAT_005e5d84;
pcVar6 = param_4 + -0x118;
for (iVar3 = 0xc; iVar3 != 0; iVar3 = iVar3 + -1) {
*(undefined4 *)pcVar6 = *puVar5;
puVar5 = puVar5 + (uint)bVar7 * -2 + 1;
pcVar6 = pcVar6 + ((uint)bVar7 * -2 + 1) * 4;
}
}
else {
local_2c = (char *)0x0;
local_30 = (char *)0x0;
fVar8 = ((float10)*(double *)(param_4 + -0x110) *
(float10)*(double *)(PTR_DAT_005e6020 + 8)) / (float10)100.0;
local_3c = SUB104(fVar8,0);
local_38 = (char *)((unkuint10)fVar8 >> 0x20);
local_34._0_2_ = (undefined2)((unkuint10)fVar8 >> 0x40);
local_40 = (char *)0x554e71;
MROUNDUD();
*(double *)(param_4 + -0x110) = (double)in_ST4;
local_40 = (char *)0x0;
local_44 = (char *)0x0;
fVar8 = ((float10)*(double *)(param_4 + -0x108) *
(float10)*(double *)(PTR_DAT_005e6020 + 0x10)) / (float10)100.0;
puStack_50 = SUB104(fVar8,0);
iStack_4c = (int)((unkuint10)fVar8 >> 0x20);
uStack_48 = (undefined2)((unkuint10)fVar8 >> 0x40);
local_54 = 0x554e9c;
MROUNDUD();
*(double *)(param_4 + -0x108) = (double)in_ST5;
local_54 = 0;
uStack_58 = 0;
fVar8 = ((float10)*(double *)(param_4 + -0x100) *
(float10)*(double *)(PTR_DAT_005e6020 + 0x18)) / (float10)100.0;
local_64 = SUB108(fVar8,0);
uStack_5c = (undefined2)((unkuint10)fVar8 >> 0x40);
uStack_68 = 0x554ec7;
MROUNDUD();
*(double *)(param_4 + -0x100) = (double)in_ST6;
*(double *)(param_4 + -0x118) =
*(double *)(param_4 + -0x110) + *(double *)(param_4 + -0x108) +
*(double *)(param_4 + -0x100);
}
}
local_2c = (char *)0x554fa7;
_Db_TDataSet_Edit_qqrv(*(undefined4 *)(param_4 + -0x27c));
local_2c = (char *)0x554fb5;
_System__VarFromReal_qqrv(&local_54);
local_2c = (char *)0x554fcb;
_Db_TDataSet_SetFieldValue_qqrx17System_AnsiStringrx14System_Variant
(*(undefined4 *)(param_4 + -0x27c),"LAMT1",&local_54);
local_2c = (char *)0x554fd9;
_System__VarFromReal_qqrv(&local_64);
local_2c = (char *)0x554fef;
_Db_TDataSet_SetFieldValue_qqrx17System_AnsiStringrx14System_Variant
(*(undefined4 *)(param_4 + -0x27c),"MAMT1",&local_64);
local_2c = (char *)0x554ffd;
_System__VarFromReal_qqrv(auStack_78 + 4);
local_2c = (char *)0x555013;
_Db_TDataSet_SetFieldValue_qqrx17System_AnsiStringrx14System_Variant
(*(undefined4 *)(param_4 + -0x27c),"SAMT1",auStack_78 + 4);
local_2c = (char *)0x555021;
_System__VarFromReal_qqrv(local_84);
local_2c = (char *)0x555037;
_Db_TDataSet_SetFieldValue_qqrx17System_AnsiStringrx14System_Variant
(*(undefined4 *)(param_4 + -0x27c),"TAMT1",local_84);
local_2c = (char *)0x555045;
_System__FillChar_qqrpvic(pcVar4,0x270,0);
}
else {
local_2c = *(char **)(param_4 + -0x280);
local_30 = local_8;
local_34._0_2_ = 0x505d;
local_34._2_2_ = 0x55;
cVar1 = MPOS();
if ((cVar1 == '\0') || (param_4[-0x281] != '\0')) {
*(int *)(param_4 + iVar3 * 4 + -0x2a8) = *(int *)(param_4 + iVar3 * 4 + -0x2a8) + 1;
fVar8 = (float10)*(int *)(param_4 + iVar3 * 4 + -0x2a8);
local_3c = SUB104(fVar8,0);
local_38 = (char *)((unkuint10)fVar8 >> 0x20);
local_34._0_2_ = (undefined2)((unkuint10)fVar8 >> 0x40);
local_40 = (char *)0x555102;
_Sysutils_FormatFloat_qqrx17System_AnsiStringg("00000",&local_9c);
local_40 = local_9c;
local_44 = (char *)0x55511d;
_System__LStrFromChar_qqrr17System_AnsiStringc
(&local_a0,CONCAT31(0x555b,(&UNK_00555b07)[iVar3]));
pcVar6 = local_40;
local_40 = (char *)0x55512c;
_System__LStrCat3_qqrv(&local_c,local_a0,pcVar6);
local_40 = (char *)0x55513a;
_Db_TDataSet_Edit_qqrv(*(undefined4 *)(param_4 + -0x27c));
local_40 = (char *)0x555148;
_System__VarFromLStr_qqrr14System_Variantx17System_AnsiString(local_b0,local_c);
local_40 = (char *)0x555161;
_Db_TDataSet_SetFieldValue_qqrx17System_AnsiStringrx14System_Variant
(*(undefined4 *)(param_4 + -0x27c),"BDCODE1",local_b0);
local_40 = (char *)0x55516f;
_System__FillChar_qqrpvic(pcVar4,0x270,0);
local_40 = (char *)0x55517b;
FUN_00447cd8(pcVar4,local_8,1);
local_40 = (char *)0x55518e;
_System__LStrToString_qqrv(local_1b0,local_c,0xff);
local_40 = (char *)0x55519e;
_System__PStrNCpy_qqrp28System__SmallString_iuc_255_t1uc(param_4 + -0x268,local_1b0,6);
local_40 = (char *)0x5551a8;
FUN_0042ec30(local_c,1);
switch(iVar3) {
case 1:
*(undefined4 *)(*(int *)PTR_DAT_005e6148 + 0x7bc) = *(undefined4 *)(param_4 + -0x2a4);
break;
case 2:
*(undefined4 *)(*(int *)PTR_DAT_005e6148 + 0x7a0) = *(undefined4 *)(param_4 + -0x2a0);
break;
case 3:
*(undefined4 *)(*(int *)PTR_DAT_005e6148 + 0x7b8) = *(undefined4 *)(param_4 + -0x29c);
break;
case 4:
*(undefined4 *)(*(int *)PTR_DAT_005e6148 + 0x7a4) = *(undefined4 *)(param_4 + -0x298);
break;
case 5:
*(undefined4 *)(*(int *)PTR_DAT_005e6148 + 0x7b0) = *(undefined4 *)(param_4 + -0x294);
break;
case 6:
*(undefined4 *)(*(int *)PTR_DAT_005e6148 + 0x7ac) = *(undefined4 *)(param_4 + -0x290);
break;
case 7:
*(undefined4 *)(*(int *)PTR_DAT_005e6148 + 0x7b4) = *(undefined4 *)(param_4 + -0x28c);
}
local_40 = (char *)0x555297;
_Apodset_TApolloTable_AppendBlank_qqrv(*(undefined4 *)(*(int *)PTR_DAT_005e6090 + 8));
local_40 = (char *)0x5552a5;
_System__VarFromPStr_qqrr14System_Variantrx28System__SmallString_iuc_255_
(local_1c0,param_4 + -0x268);
local_40 = (char *)0x5552bf;
_Db_TDataSet_SetFieldValue_qqrx17System_AnsiStringrx14System_Variant
(*(undefined4 *)(*(int *)PTR_DAT_005e6090 + 8),&DAT_00555b7c,local_1c0);
local_40 = (char *)0x5552cd;
@@ -1,49 +1,188 @@
{
"stage": "32_실행계약단계",
"date": "2026-11-14",
"method": "static bytes only (capstone 32bit · pefile RCDATA DFM) · no execution · no patch",
"binaries_sha256": {
"STmate.Cpm": "99d5c05675ba1399c51a71db8e26ebd5ff39fd78d02360147c7705deb399b5f5",
"ST_CPM/ST_Boq.CPM": "180707d0423dd2dcb8403d89ba1dbaf2731c0db5c6bb332029479fd9d9923ab3",
"ST_Func_C.CPM": "f2d4b2f6ebda2d57e47d343907071400cdb4b9f01fa5cc7756f34eb5f94e2ca6",
"DP_Common.CPM": "5f55d301c6b2139816ff8832e46becb852c4f0a0c9b5da199371156b6aaf30e0"
"stage": "32_실행계약단계",
"date": "2026-11-14",
"method": "static bytes only (capstone 32bit · pefile RCDATA DFM) · no execution · no patch",
"binaries_sha256": {
"STmate.Cpm": "99d5c05675ba1399c51a71db8e26ebd5ff39fd78d02360147c7705deb399b5f5",
"ST_CPM/ST_Boq.CPM": "180707d0423dd2dcb8403d89ba1dbaf2731c0db5c6bb332029479fd9d9923ab3",
"ST_Func_C.CPM": "f2d4b2f6ebda2d57e47d343907071400cdb4b9f01fa5cc7756f34eb5f94e2ca6",
"DP_Common.CPM": "5f55d301c6b2139816ff8832e46becb852c4f0a0c9b5da199371156b6aaf30e0"
},
"rules": [
{
"id": "R1",
"name": "MROUNDUD(value, digits, sel)",
"module": "DP_Common",
"addr": "0x454044-0x4546de",
"confidence": "high",
"rule": "stdcall: value Extended at +8, digits int at +0x14, sel byte at +0x18. |v| formatted with FormatFloat('0.0'+'#'*13) after adding noise eps (10^(dotpos-13) for dotpos 2..9, 1e-4 for 10..13, 1e-9 above; eps=0 when fewer than 11 significant digits). digits>=0 cuts decimals, digits<0 cuts integer digits (10^|d| unit). sel=0 -> truncation toward zero; sel=1 -> adds one unit when first dropped digit >=5 (Round(StrToFloat('0.'+digit+'1'))). Sign restored by IIF(v>0)."
},
"rules": [
{"id": "R1", "name": "MROUNDUD(value, digits, sel)", "module": "DP_Common", "addr": "0x454044-0x4546de", "confidence": "high",
"rule": "stdcall: value Extended at +8, digits int at +0x14, sel byte at +0x18. |v| formatted with FormatFloat('0.0'+'#'*13) after adding noise eps (10^(dotpos-13) for dotpos 2..9, 1e-4 for 10..13, 1e-9 above; eps=0 when fewer than 11 significant digits). digits>=0 cuts decimals, digits<0 cuts integer digits (10^|d| unit). sel=0 -> truncation toward zero; sel=1 -> adds one unit when first dropped digit >=5 (Round(StrToFloat('0.'+digit+'1'))). Sign restored by IIF(v>0)."},
{"id": "R2", "name": "ADDBJVAL(value)", "module": "DP_Common", "addr": "0x4565f8", "confidence": "medium-high",
"rule": "adds eps (same dotpos table, '0.##############') in sign direction unless eps > |v|; no '.' -> unchanged."},
{"id": "R3", "name": "OPTIMIZ(rec{T,L,M,S,A,N}, priority, digits, outIndex, mode)", "module": "ST_Func_C", "addr": "0x48094c-0x480f05 (helpers 0x480864, 0x4808d4)", "confidence": "high",
"rule": "component order from OPTNM chars (+0x7dd..) then A. mode 1 -> MROUNDUD sel1, mode 3 -> MROUNDUP, else MROUNDUD sel0. If priority or mode in {1,3} or sum(rounded)==raw T -> T=sum. Else Tr=MROUNDUD(T,d,0); f_i=|MROUNDUD(MFRAC(c_i*10^d),2,0)|; k=Round((Tr-sum)*10^d); loop while 0<k<=4: pick first-start max f (f<1 for later candidates, strict >, ties keep earlier), f+=1, k=(sign(res)==sign(c_i))?k-1:k+1; finally r_i += MTRUNC(±f_i)/10^d. Output to global array slot outIndex (T,L,M,S,A,N at +0..+0x28)."},
{"id": "R4", "name": "중기 실행단가 wNe_AutoCost", "module": "ST_Boq TwM_Boq_ExecX", "addr": "0x4da7a8-0x4daafc", "confidence": "high",
"rule": "only if cBx_Auto checked. X = Hour==0 ? 0 : MROUNDUD(DayCost/Hour,0,0). ratio = TAMT3==0 ? 0 : X/TAMT3. comps = L3/M3/S3*ratio -> OPTIMIZ(priority 0, digits=wCm_Jeol value 0..-5, idx1, mode0). If L+M+S != X: wCm_OPT 1 -> L=X-(M+S); 2 -> M=X-(L+S); 3 -> S=X-(L+M); 0 -> first char of OPTNM (+0x7dd): 'L'->L, 'M'->M, else S. 실행금액: ADDBJVAL(QTY1*X / *L / *M / *S) -> OPTIMIZ(priority=CHNNM +0x7c5, digits0, idx1, mode0)."},
{"id": "R5", "name": "ExecX 열기·보조", "module": "ST_Boq", "addr": "0x4d9ae0 open, 0x4dab5c DayQtyExit, 0x4dab08 AMTExit, 0x4dac28 apply, 0x4dadd0 SameFirst, 0x4da7e6 target", "confidence": "high",
"rule": "time-based if code[0]=='X' or (code[0] in B,W and UNIT1 upper in {'X','HR'}); Hour default 8 (time) / 1 (else) when kind changes. DayCost=TAMT1*Hour; DayQty=QTY1/Hour; QTY1=Hour*DayQty. TAMT1=L1+M1+S1. Apply writes QTY1 (if cBx_AddQty) and LAMT1,MAMT1,SAMT1,TAMT1 then Commit. SameFirst: Hour==0 -> auto off; Jeol=0; DayCost=TAMT3*Hour; L1..S1=L3..S3. Target find: DayCost=MROUNDUP(T_AMT1/DayQty,0)."},
{"id": "R6", "name": "실행수량·실행단가 할증", "module": "ST_Boq TwBoq.Act_Rate_Execute -> 0x511fa8, dialog TwM_Rate 0x4d4270", "addr": "0x512a80, 0x511fa8-0x5128f5", "confidence": "high (단가 비-Q 갈래 세부 medium)",
"rule": "Tag/10: 1 수량, 2 단가; Tag%10: 1 L, 2 M, 3 X, 4 other(SWBDAPQ). 수량: QTY1=MROUNDUD(QTY3*rate/100, Pnt2 digits 0..4, Pnt1==1). 단가 Q rows: LAMT1/NAMT1/MAMT1/SAMT1 = MROUNDUD(*3*rate/100,...), TAMT1=L+M+S. 단가 other rows: COSTN 1칸 단가 * rate. %-unit rows excluded for L/M and for SWP-letter W rows. Row amounts recomputed via 0x456504 (CHNNM)."},
{"id": "R7", "name": "계약 변환 적용율", "module": "STmate TwM_Mk_Cont", "addr": "0x5534f0, 0x5569d8 (prior REA 27), 0x55610e", "confidence": "high",
"rule": "CBoxCreateILwi checked: edPer_L only (M,S hidden), label '단가 적용율', lbMsg '0% -> 기존 조사가자료 코드 변경없이'. Unchecked: L,M,S separate, overall=MROUNDUD((L+M+S)/3,3,1), lbMsg '0% -> W코드 0化'. PNUM = (ILwi && overall==0) ? '조사가적용' : FormatFloat('0.00##', ILwi?overall:(L+M+S)/3)+'% 적용'."},
{"id": "R8", "name": "계약 변환 코드 갈래", "module": "STmate", "addr": "0x554be0-0x555ae8 (jump table 0x554c5b/0x554c72, 0x5551b8)", "confidence": "high",
"rule": "processed letters MLSWBDXQ (0x556790). gate ILwi && overall==0 -> skip all. Q: HalMLSW -> in-place unit scaling (no new code). L/M/S/W: HalMLSW off -> keep; on -> ILwi ? own letter : W. B/D/X: ILwi ? own letter : W. new code = letter + FormatFloat('00000', ++counter[letter]) with counters from settings +0x7a0..+0x7bc; Same2DIF off -> reuse by original code (substring search in concatenated seen list)."},
{"id": "R9", "name": "계약 단가 계산", "module": "STmate", "addr": "0x5554f2-0x5556ed, Q 0x554de1-0x554f98, write 0x555705-0x55582d", "confidence": "high",
"rule": "overall==100 -> unchanged; overall==0 -> no price write (AppendBlank zeros). all rates equal -> comps*r/100 and T*r/100 unrounded -> OPTIMIZ(priority B:CHBNM +0x7c6, D:CHGNM +0x7c4, Q:CHGNM, else 1; digits0; idx1; mode0). rates differ -> each MROUNDUD(c*r/100,0,0), T=sum. B/D/X new code: NAGCD=overall, UC=T, BCONT=T, IFORM copied, BDQTY copy (0x5544b0)."},
{"id": "R10", "name": "적용제외 공정", "module": "STmate", "addr": "0x55409c, 0x553c08, 0x555f68-0x5560d6", "confidence": "high (ITM_TYP 의미 미확인)",
"rule": "list query BDCODE1=\"T\" .and. BDCODE1>=\"T<n>\" (cBx_Lev T1..T9). columns ITNUM,NAME1,SIZE1,T_AMT1,BDCODE1, col5 exclude default true when ITM_TYP in {11,21,31,41,51,71,72}, col6 RecNo. OK collects RecNo of checked rows. conversion skips rows from a checked head until SORTCODE==its ENDCODE."},
{"id": "R11", "name": "비과세자재대 옵션", "module": "STmate", "addr": "0x556274-0x55653f", "confidence": "high (키 이름) / medium (마지막 PRJ_MEMO 기록 뜻)",
"rule": "if CBoxSetHal_NBUGAM checked and M rate >= 0: PRJ_MEMO.INI [1_KANJUB] 1_C_NBUGAM and 1_C_BUGA_M := MROUNDUD(v*M/100,0,0). BOQ rows unaffected."},
{"id": "R12", "name": "설정 키", "module": "STmate", "addr": "0x42aeba-0x42af11", "confidence": "high",
"rule": "+0x7c4 = START/CHGNM (ReadBool default true, 단가산출근거 계산방식), +0x7c6 = START/CHBNM (default = CHGNM, 일위대가표 계산방식), +0x7c5 = START/CHNNM (default true, 내역서 계산방식). UI ST_Sys cmBx_CHG/CHB/CHN items '비목별금액 먼저계산','총액 먼저 계산'."},
{"id": "R13", "name": "실행예산 내역 생성 복사", "module": "STmate TwPrjList.MkBoq", "addr": "0x55c956-0x55ca4d", "confidence": "medium (갈래 조건 미확인)",
"rule": "GetFieldValue MAMT1 -> SetFieldValue MAMT3 (likewise LAMT,SAMT,TAMT,M_AMT,L_AMT,S_AMT): 1칸 값을 3칸(최초)로 복사. '실행예산 레벨조정' 최소레벨 사용 중이면 레벨 한 단계 상향 · DES1 = '공종,작업명,구분' 머리 문자열."},
{"id": "R14", "name": "SET_REP 0623/0624/0673/0674", "source": "C:/경영정보(주)/STmate 자료/설계자료/실습(맛보기)/SET_REP.DBF (data file)", "confidence": "high (데이터)",
"rule": "0623 계약,실행내역서 / 0624 (종양식): HEADTITLE '계 약 내 역 서', FLDCNT 0. 0673 실행예산서Ⅰ / 0674 실행예산서Ⅱ: HEADTITLE '실 행 예 산 서', FLDCNT 5: 공종 25, 설계(계획) 20, 실행예산 25, 작업명 15, 구분 25."}
],
"open": [
"MROUNDUP body (name-based ceil away from zero)",
"ITM_TYP code meaning (all 7 STC head rows = 0)",
"0673 vs 0674 row selection difference (ST_Prt string list only, no direct code xref)",
"row amount routine 0x456504 in ST_Boq",
"관급 구역 줄이 울진에서 미변환된 원인(변환 고리에 구역 조건 없음)",
"예상적용율 찾기 0x556d68 내부(5000 나눔 반복) 세부"
{
"id": "R2",
"name": "ADDBJVAL(value)",
"module": "DP_Common",
"addr": "0x4565f8",
"confidence": "medium-high",
"rule": "adds eps (same dotpos table, '0.##############') in sign direction unless eps > |v|; no '.' -> unchanged."
},
{
"id": "R3",
"name": "OPTIMIZ(rec{T,L,M,S,A,N}, priority, digits, outIndex, mode)",
"module": "ST_Func_C",
"addr": "0x48094c-0x480f05 (helpers 0x480864, 0x4808d4)",
"confidence": "high",
"rule": "component order from OPTNM chars (+0x7dd..) then A. mode 1 -> MROUNDUD sel1, mode 3 -> MROUNDUP, else MROUNDUD sel0. If priority or mode in {1,3} or sum(rounded)==raw T -> T=sum. Else Tr=MROUNDUD(T,d,0); f_i=|MROUNDUD(MFRAC(c_i*10^d),2,0)|; k=Round((Tr-sum)*10^d); loop while 0<k<=4: pick first-start max f (f<1 for later candidates, strict >, ties keep earlier), f+=1, k=(sign(res)==sign(c_i))?k-1:k+1; finally r_i += MTRUNC(±f_i)/10^d. Output to global array slot outIndex (T,L,M,S,A,N at +0..+0x28)."
},
{
"id": "R4",
"name": "중기 실행단가 wNe_AutoCost",
"module": "ST_Boq TwM_Boq_ExecX",
"addr": "0x4da7a8-0x4daafc",
"confidence": "high",
"rule": "only if cBx_Auto checked. X = Hour==0 ? 0 : MROUNDUD(DayCost/Hour,0,0). ratio = TAMT3==0 ? 0 : X/TAMT3. comps = L3/M3/S3*ratio -> OPTIMIZ(priority 0, digits=wCm_Jeol value 0..-5, idx1, mode0). If L+M+S != X: wCm_OPT 1 -> L=X-(M+S); 2 -> M=X-(L+S); 3 -> S=X-(L+M); 0 -> first char of OPTNM (+0x7dd): 'L'->L, 'M'->M, else S. 실행금액: ADDBJVAL(QTY1*X / *L / *M / *S) -> OPTIMIZ(priority=CHNNM +0x7c5, digits0, idx1, mode0)."
},
{
"id": "R5",
"name": "ExecX 열기·보조",
"module": "ST_Boq",
"addr": "0x4d9ae0 open, 0x4dab5c DayQtyExit, 0x4dab08 AMTExit, 0x4dac28 apply, 0x4dadd0 SameFirst, 0x4da7e6 target",
"confidence": "high",
"rule": "time-based if code[0]=='X' or (code[0] in B,W and UNIT1 upper in {'X','HR'}); Hour default 8 (time) / 1 (else) when kind changes. DayCost=TAMT1*Hour; DayQty=QTY1/Hour; QTY1=Hour*DayQty. TAMT1=L1+M1+S1. Apply writes QTY1 (if cBx_AddQty) and LAMT1,MAMT1,SAMT1,TAMT1 then Commit. SameFirst: Hour==0 -> auto off; Jeol=0; DayCost=TAMT3*Hour; L1..S1=L3..S3. Target find: DayCost=MROUNDUP(T_AMT1/DayQty,0)."
},
{
"id": "R6",
"name": "실행수량·실행단가 할증",
"module": "ST_Boq TwBoq.Act_Rate_Execute -> 0x511fa8, dialog TwM_Rate 0x4d4270",
"addr": "0x512a80, 0x511fa8-0x5128f5",
"confidence": "high (단가 비-Q 갈래 세부 medium)",
"rule": "Tag/10: 1 수량, 2 단가; Tag%10: 1 L, 2 M, 3 X, 4 other(SWBDAPQ). 수량: QTY1=MROUNDUD(QTY3*rate/100, Pnt2 digits 0..4, Pnt1==1). 단가 Q rows: LAMT1/NAMT1/MAMT1/SAMT1 = MROUNDUD(*3*rate/100,...), TAMT1=L+M+S. 단가 other rows: COSTN 1칸 단가 * rate. %-unit rows excluded for L/M and for SWP-letter W rows. Row amounts recomputed via 0x456504 (CHNNM)."
},
{
"id": "R7",
"name": "계약 변환 적용율",
"module": "STmate TwM_Mk_Cont",
"addr": "0x5534f0, 0x5569d8 (prior REA 27), 0x55610e",
"confidence": "high",
"rule": "CBoxCreateILwi checked: edPer_L only (M,S hidden), label '단가 적용율', lbMsg '0% -> 기존 조사가자료 코드 변경없이'. Unchecked: L,M,S separate, overall=MROUNDUD((L+M+S)/3,3,1), lbMsg '0% -> W코드 0化'. PNUM = (ILwi && overall==0) ? '조사가적용' : FormatFloat('0.00##', ILwi?overall:(L+M+S)/3)+'% 적용'."
},
{
"id": "R8",
"name": "계약 변환 코드 갈래",
"module": "STmate",
"addr": "0x554be0-0x555ae8 (jump table 0x554c5b/0x554c72, 0x5551b8)",
"confidence": "high",
"rule": "processed letters MLSWBDXQ (0x556790). gate ILwi && overall==0 -> skip all. Q: HalMLSW -> in-place unit scaling (no new code). L/M/S/W: HalMLSW off -> keep; on -> ILwi ? own letter : W. B/D/X: ILwi ? own letter : W. new code = letter + FormatFloat('00000', ++counter[letter]) with counters from settings +0x7a0..+0x7bc; Same2DIF off -> reuse by original code (substring search in concatenated seen list)."
},
{
"id": "R9",
"name": "계약 단가 계산",
"module": "STmate",
"addr": "0x5554f2-0x5556ed, Q 0x554de1-0x554f98, write 0x555705-0x55582d",
"confidence": "high",
"rule": "overall==100 -> unchanged; overall==0 -> no price write (AppendBlank zeros). all rates equal -> comps*r/100 and T*r/100 unrounded -> OPTIMIZ(priority B:CHBNM +0x7c6, D:CHGNM +0x7c4, Q:CHGNM, else 1; digits0; idx1; mode0). rates differ -> each MROUNDUD(c*r/100,0,0), T=sum. B/D/X new code: NAGCD=overall, UC=T, BCONT=T, IFORM copied, BDQTY copy (0x5544b0)."
},
{
"id": "R10",
"name": "적용제외 공정",
"module": "STmate",
"addr": "0x55409c, 0x553c08, 0x555f68-0x5560d6",
"confidence": "high (ITM_TYP 의미 미확인)",
"rule": "list query BDCODE1=\"T\" .and. BDCODE1>=\"T<n>\" (cBx_Lev T1..T9). columns ITNUM,NAME1,SIZE1,T_AMT1,BDCODE1, col5 exclude default true when ITM_TYP in {11,21,31,41,51,71,72}, col6 RecNo. OK collects RecNo of checked rows. conversion skips rows from a checked head until SORTCODE==its ENDCODE."
},
{
"id": "R11",
"name": "비과세자재대 옵션",
"module": "STmate",
"addr": "0x556274-0x55653f",
"confidence": "high (키 이름) / medium (마지막 PRJ_MEMO 기록 뜻)",
"rule": "if CBoxSetHal_NBUGAM checked and M rate >= 0: PRJ_MEMO.INI [1_KANJUB] 1_C_NBUGAM and 1_C_BUGA_M := MROUNDUD(v*M/100,0,0). BOQ rows unaffected."
},
{
"id": "R12",
"name": "설정 키",
"module": "STmate",
"addr": "0x42aeba-0x42af11",
"confidence": "high",
"rule": "+0x7c4 = START/CHGNM (ReadBool default true, 단가산출근거 계산방식), +0x7c6 = START/CHBNM (default = CHGNM, 일위대가표 계산방식), +0x7c5 = START/CHNNM (default true, 내역서 계산방식). UI ST_Sys cmBx_CHG/CHB/CHN items '비목별금액 먼저계산','총액 먼저 계산'."
},
{
"id": "R13",
"name": "실행예산 내역 생성 복사",
"module": "STmate TwPrjList.MkBoq",
"addr": "0x55c956-0x55ca4d",
"confidence": "medium (갈래 조건 미확인)",
"rule": "GetFieldValue MAMT1 -> SetFieldValue MAMT3 (likewise LAMT,SAMT,TAMT,M_AMT,L_AMT,S_AMT): 1칸 값을 3칸(최초)로 복사. '실행예산 레벨조정' 최소레벨 사용 중이면 레벨 한 단계 상향 · DES1 = '공종,작업명,구분' 머리 문자열."
},
{
"id": "R14",
"name": "SET_REP 0623/0624/0673/0674",
"source": "C:/경영정보(주)/STmate 자료/설계자료/실습(맛보기)/SET_REP.DBF (data file)",
"confidence": "high (데이터)",
"rule": "0623 계약,실행내역서 / 0624 (종양식): HEADTITLE '계 약 내 역 서', FLDCNT 0. 0673 실행예산서Ⅰ / 0674 실행예산서Ⅱ: HEADTITLE '실 행 예 산 서', FLDCNT 5: 공종 25, 설계(계획) 20, 실행예산 25, 작업명 15, 구분 25."
}
],
"open": [
"RS field meaning",
"print flag +0x1768 name, Prn_Nae vs Prn_NaeW flag",
"예상적용율 고정분 (second 0x45f974 result)",
"ITM_TYP x0 vs x1",
"MkBoq copy branch conditions"
],
"rea_mcp_phase": {
"tool": "rea-agents 6.7.0 + Ghidra 12.1.4 (procedure_pseudo_code, resolve_containing_procedure)",
"cross_check": {
"0x554be0": "Ghidra pseudo matches R8/R9 (no correction)"
},
"resolved": [
{
"id": "R15",
"name": "MROUNDUP",
"addr": "DP_Common 0x4547ac, Ceil 0x4297f4",
"confidence": "high",
"rule": "format |v|+eps with '0.0#########', cut at digits, Ceil(StrToFloat('0.'+next<=10 digits)) -> add 10^-d if any nonzero dropped digit; sign restored."
},
{
"id": "R16",
"name": "ITM_TYP names",
"addr": "ST_U_Convert 0x587d9c (string[0..120]); ST_Boq 0x4fe15b lookup 1..119",
"confidence": "high",
"rule": "0 일반공종,10/11 안전관리비,20/21 품질관리비,30/31 미확정설계공종(PS),40 제요율적용제외공종,41 제비율적용제외공종,50/51 작업설 등,60/61 매입세,70 관급자재공종,71 관급자재대(도급자),72 관급자재대(관급자),111 비과세자재대,120 조달수수료"
},
{
"id": "R17",
"name": "울진 미변환 줄",
"source": "울진 2025 STC BOQ11/BOQ12",
"confidence": "high",
"rule": "unchanged leaves = blocks of T3 '페기물처리' and T3 '관급자재대'(close C3 '합계(제외금액)'); both ITM_TYP 0 -> user-selected heads."
},
{
"id": "R18",
"name": "실행예산서 Ⅰ·Ⅱ",
"addr": "ST_Prt 0x44fdf5 tag table 0x44ffc0 (20673/20674) -> ST_P_Nae Prn_Nae_Cont1/2 0x4c27f8 mode [0x57a4e0]; filter 0x4c245d; BeforePrint 0x4c3cd0",
"confidence": "high",
"rule": "mode1 all rows (+0x1768 on: !(MLSWBDXAP .and. QTY1=0)); mode2 SUBSTR(BDCODE1,1,1)$'TEC' .or. RS=1, C1/E1 closes suppressed. Form PM_Nae_Cont columns 공종 | 설계(계획) 수량·단위·금액(2칸) | 실행예산 작업명·구분·수량·단위·재/노/경/총액 단가·금액·비고(1칸)."
},
{
"id": "R19",
"name": "계약,실행내역서 0623/0624",
"addr": "ST_Prt 0x4513e7 (20623 -> Prn_Nae|Prn_NaeW), 0x451477 (20624 -> Prn_Nae_P|Prn_NaeW_P)",
"confidence": "high (module) / medium (flag)",
"rule": "standard 내역서 printers applied to current (contract/exec) project."
},
{
"id": "R20",
"name": "실행예산 행 금액",
"addr": "ST_Boq 0x456504 -> 0x433490 / 0x44019c -> 0x43dee8",
"confidence": "medium-high",
"rule": "row loaded into shared calc record; same row engine as design; CHNNM flag passed; per quantity slot loop (6)."
},
{
"id": "R21",
"name": "예상적용율 찾기",
"addr": "STmate 0x556d68",
"confidence": "medium",
"rule": "aggregate (MCOST/LCOST/SCOST × rate, MROUNDUD 0) iteration against 총공사비 target via 0x45f974; start MROUNDUP(ratio,5); step ±1/(2N), N=min(5000,round(target/5000)); rate 5 decimals of fraction (0.001%)."
}
]
}
}
}
@@ -241,3 +241,58 @@ def test_progress_project_keeps_contract_amounts():
]
assert all(r["tUnit"] == r["dUnit"] for r in rows if r["kind"] == "leaf")
assert _call(("contract", "pnumText", [{"rateL": 87.745, "pclass": 6}]))[0] == "100.00% 적용"
def test_itm_typ_names_and_default_exclusion():
"""ITM_TYP 이름표(ST_U_Convert 0x587d9c) — 기본 체크 11·21·31·41·51·71·72 = 안전·품질·PS·제비율적용제외·작업설·관급자재대."""
names, dflt = _call(
("contract", "levelHeads", [TREE, 1]), ("contract", "levelHeads", [TREE, 3])
)
assert names[1]["itm"] == 21 and names[1]["itmName"] == "품질관리비"
out = subprocess.check_output(
[
"node",
"-e",
"const K=require(process.argv[1]);process.stdout.write(JSON.stringify("
"K.DEFAULT_EXCLUDE_ITM.map(c=>K.ITM_TYP_NAMES[c])))",
str(ROOT / "tools/stmate-test/contract_calc.js"),
],
text=True,
encoding="utf-8",
)
assert json.loads(out) == [
"안전관리비",
"품질관리비",
"미확정설계공종(PS)",
"제비율적용제외공종",
"작업설 등",
"관급자재대(도급자)",
"관급자재대(관급자)",
]
def test_uljin_unconverted_rows_are_excluded_head_blocks(uljin):
"""울진 미변환 공종 = 계표시 머리 블록 둘(T3「페기물처리」 · T3「관급자재대」 닫음 C3 제외금액) · ITM_TYP 0 = 사용자 선택."""
b11, b12 = uljin["boq_tables"]["BOQ11.DBF"], uljin["boq_tables"]["BOQ12.DBF"]
struct = re.compile(r"^(T\d|E\d|C\d|:)$")
block = set()
for name in ("페기물처리", "관급자재대"):
head = next(i for i, r in enumerate(b11) if (r.get("NAME1") or "").strip() == name)
end = next(
i
for i in range(head + 1, len(b11))
if re.match(r"^[EC]\d$", (b11[i].get("BDCODE1") or "").strip())
)
assert b11[head]["BDCODE1"] == "T3" and float(b11[head]["ITM_TYP"] or 0) == 0
block |= set(range(head + 1, end))
assert (b11[end]["BDCODE1"] or "").strip() == "C3"
leaf = lambda r: r.get("BDCODE1") and not struct.match(r["BDCODE1"].strip()) # noqa: E731
l11 = [(i, r) for i, r in enumerate(b11) if leaf(r)]
l12 = [r for r in b12 if leaf(r)]
assert len(l11) == len(l12)
kept = {
i
for (i, r), q in zip(l11, l12)
if r["BDCODE1"].strip() == q["BDCODE1"].strip() and float(r.get("TAMT1") or 0)
}
assert kept == block
@@ -199,3 +199,49 @@ def test_report_columns_from_set_rep():
["작업명", 15],
["구분", 25],
]
@pytest.mark.parametrize(
"v,d,exp",
[
(10.01, 0, 11),
(-10.01, 0, -11),
(10, 0, 10),
(123401, -2, 123500),
(123400, -2, 123400),
(2.341, 2, 2.35),
(0.4, 0, 1),
],
)
def test_mroundup_ceil_of_dropped_digits(v, d, exp):
"""MROUNDUP(0x4547ac, REA MCP 의사코드) — 버린 다음 숫자(10자리 안) 하나라도 0 아니면 한 단위 올림(0 반대쪽)."""
assert _call(("exec", "mroundup", [v, d]))[0] == pytest.approx(exp)
def _nd(kind, code, qty=0, level=None):
nd = {"kind": kind, "code": code, "st": {"d": {"qty": qty}, "x": {"qty": qty}}}
if level is not None:
nd["level"] = level
return nd
def test_report_rows_mode_1_and_2():
"""실행예산서 Ⅰ = 모든 줄(설정 켬 = 실행수량 0 공종 뺌) · Ⅱ = T·E·C 줄 + RS=1 · C1·E1 닫음 뺌(ST_P_Nae 0x4c245d · 0x4c3d38)."""
nodes = [
_nd("head", "T2", level=2),
_nd("head", "T1", level=1),
_nd("leaf", "M0001", 3),
_nd("leaf", "L0002", 0),
{**_nd("leaf", "B0003", 1), "rs": 1},
_nd("close", "E1"),
_nd("close", "C2"),
{"kind": "blank", "st": {}},
]
one, one_skip, two = _call(
("exec", "reportRows", [nodes, 1, {}]),
("exec", "reportRows", [nodes, 1, {"skipZeroQty": True}]),
("exec", "reportRows", [nodes, 2, {}]),
)
assert [n["code"] for n in one] == ["T2", "T1", "M0001", "L0002", "B0003", "E1", "C2"]
assert "L0002" not in [n["code"] for n in one_skip] and len(one_skip) == 6
assert [n["code"] for n in two] == ["T2", "T1", "B0003", "C2"]
+18 -18
View File
@@ -29,9 +29,9 @@
## 진행률
- 합계: 전체 246 · 구현 205 · 부분 38 · 없음 3 → 진행률 91.1%((205 + 38×0.5) / 246) · 구현만 세면 83.3%
- 합계: 전체 246 · 구현 211 · 부분 33 · 없음 2 → 진행률 92.5%((211 + 33×0.5) / 246) · 구현만 세면 85.8%
### G1 화면·메뉴 (구현 48 · 부분 5 · 없음 1) — 93.5%
### G1 화면·메뉴 (구현 49 · 부분 4 · 없음 1) — 94.4%
- [x] F1-01 메인 메뉴·툴바·하단 금액 집계줄 — STmate.Cpm 메인 · 현재: 구현(원본 메뉴 구조·툴바 차례·단축키 12·체크 항목·최근 폴더(test_stmate_ui))
- [x] F1-02 공사목록표 목록·선택·불러오기 — wPrjList · 현재: 구현(공사목록표 · 다른 내역서 열기(저장 직접비 1원 일치))
@@ -50,7 +50,7 @@
- [x] F1-15 공종 목록(코드·명칭·분류 정렬, 대공종 필터) — wKongJong · 현재: 구현(공종목록 코드 넣기 · 대공종 옵션)
- [x] F1-16 주공종 집계표(레벨별 계표시 확인) — wMBoq · 현재: 구현(레벨 거르기·계표시·레벨 올리기/내리기·주공종 집계)
- [x] F1-17 공종번호 자동입력(머리·끝 글자·번호형식·자리수) — wITNum · 현재: 구현(하위 전체공종 반영 · 실무 7건 규칙 번호 255/304 일치 · 나머지는 손 입력(test_itnum_tree_reproduces_every_rule_number))
- [ ] F1-18 내역 할증율 적용(전체/비목별) — wBoqRate · 현재: 부분(REA 34 TwBoqRate — 보호(UC) 행 비목 무관 건너뜀 · B·D·L·M·S·W·X 밖 율 0 반영(test_hal_rate_rows) · 율 single 실수 정밀도 1원 차이 조건부 · 실물 표본 0)
- [x] F1-18 내역 할증율 적용(전체/비목별) — wBoqRate · 현재: 구현(REA 34 §7·§17.4 — 보호 행 건너뜀 · B·D·L·M·S·W·X 밖 율 0 · 계수 4바이트 실수(ST_Boq 0x4e9b20 fstp dword) → 70%·115% 1원 적음(test_stmate_jdl_rea · test_hal_rate_rows) · 실물 표본 0)
- [x] F1-19 비목별 일괄 보정(절사/반올림 × 소수 0~4 · 범위) — wM_Rate · 현재: 구현(비목별 단가 끝전 · 줄 고정 단가(server fixedUnit)로 다시 불러도 유지)
- [x] F1-20 일위대가표 풀기 — wExpnd · 현재: 구현(일위대가 풀기 = 구성표 × 내역 수량)
- [x] F1-21 풀어넣기 비목별 끝전·가산비목 지정 — wM_Expnd · wM_Expnd10 · 현재: 구현(풀어넣기 비목별 끝전·할증·손료 비율 줄 · 손료 줄 금액 7건 대조)
@@ -88,7 +88,7 @@
- [x] F1-53 인쇄영역 선택(당초/변경/분할·레벨·변경 1~8차) — wM_Sel_Prn · 현재: 구현(인쇄영역 당초/변경/분할·레벨·차수 반영)
- [ ] F1-54 특수문자·그림코드·메모 입력 — mMinMsg_ · wInDlgImg · wInDlgMemo · 현재: 부분(특수문자·메모·그림코드 넣기 · 그림 저장 자리 근거 없음)
### G2 계산 엔진 (구현 57 · 부분 4 · 없음 0) — 96.7%
### G2 계산 엔진 (구현 58 · 부분 3 · 없음 0) — 97.5%
- [x] F2-01 노임 일→시간 환산식 좌→우 순차 — 18번 §2.1 · Start8x RXXNM · 현재: 구현(calc.js 84)
- [x] F2-02 노임 환산 갈래 H0~H5(터널·준설선) — wM_Set_Sys cmBx_Sel_RX · 30번 §4 · 현재: 구현(REA 34 Main 0x43894c — COSTN.RXX 1·10~14 = 식 하나로 모든 L 행 · 0·2~9 = 목록 첫 일치 · 화면 순번↔값 0x4fcae8(test_labor_branch_by_rxx) · H 글자 짝 미확인)
@@ -98,7 +98,7 @@
- [x] F2-06 자재 후보 최저가 자동채택 — 17번 §5.5 · 현재: 구현(최저가 채택 · 실무 7건 변동 0(test_material_candidate_minimum_matches_stored))
- [x] F2-07 수동 고정·보호표시 우선 — 22번 §3.1 · 13번 T10 · 현재: 구현(보호표시(UC=T) 우선)
- [x] F2-08 중기 시간당 사용료 조립(손료·운전원·연료·잡품 성분 절사) — 17번 §3 · 현재: 구현(BDQTY 구성 · 성분 절사 · 7건 대조)
- [ ] F2-09 손료 주간·야간·2교대·3교대(E0~E3) — 30번 §4 · 현재: 부분(손료 E1~E3 입력 칸 · REA 34 계산 본체에 E0~E3 갈래·계수 없음 — XML 요소 이름뿐)
- [x] F2-09 손료 주간·야간·2교대·3교대(E0~E3) — 30번 §4 · 현재: 구현(REA 34 §17.7 — 원본 계산에 E1~E3 계수 곱 없음(조달청 XML 열거값뿐) · 계수 칸 걷음 · 구분값만 행에 남김)
- [x] F2-10 단가산출 D코드 전개 계산 — 18번 §2.2 · 23번 · 현재: 구현(smt_eval.js · 원설계 5건 282개 1원 · 참조 단가는 저장값)
- [x] F2-11 운반비 경비 귀속 — 23번 §4 · 26번 §1 · 현재: 구현(COSTN SBMOK=S · (-=)+「운반비 계」 T% · 저장 금액 판정 걷음)
- [x] F2-12 일위대가 B코드 구성 조립·성분 절사 — 17번 §2·§5 · 현재: 구현(BDQTY 구성 · 행 소수1 버림 · CHBNM 총액우선 = 행 합계액 기준 · 7건 대조)
@@ -113,7 +113,7 @@
- [x] F2-21 관급자재·조달수수료 분리, 관급 천원 올림 — 16번 §4.3·§4.7 · 현재: 구현(관급·조달수수료 · 코드 붙은 % 줄 = 같은 상위 공종 앞 줄 합 × 율 계산·저장 재계산(test_stmate_file_pct · kanjub_stc))
- [x] F2-22 요율표 규모·기간 구간 조회 — 12번 §8~10 · 06번 §2 · 현재: 구현(kanjub_calc·kanjub_parts 원본 계산 순서 · 실무 7건 저장 결과키 전수 1원(test_kanjub_every_stored_key) · 표본 밖 선택지 손셈 대조(test_stmate_kanjub_opts))
- [x] F2-23 요율 기본값 처리 — calc.js · 현재: 구현(num 기본값 · 4건 시험)
- [ ] F2-24 공사종류·적용기준(행자부 RateM 포함)·공사기간 축 — 12번 §10.1 · 현재: 부분(공사종류·기간 축 요율 조회 7건 재현 · REA 34 행자부(I_SET_BASE 1) = RATE_M 간접노무비·일반관리비 23행·이윤 24행 조회 판독 · 규모 문턱 조건부 · 조회 미연결)
- [ ] F2-24 공사종류·적용기준(행자부 RateM 포함)·공사기간 축 — 12번 §10.1 · 현재: 부분(공사종류·기간 축 요율 조회 7건 재현 · REA 34 §5.2·§17.5 행자부 = RATE_M 조회 · 문턱 직접공사비 50억·300억 확인 · 콤보 정수값 짝 미확인 · 조회 미연결)
- [x] F2-25 간접노무비(직노×율) — 12번 §3 · 현재: 구현(calc.js 385, 요율은 저장값)
- [x] F2-26 산재·건강·연금보험료 — 12번 §3 · 현재: 구현(calc.js 387~391)
- [x] F2-27 고용보험료(등급 7) — 12번 §8 rGrd_Rate_Kobo · 현재: 구현(kanjub_calc·kanjub_parts 원본 계산 순서 · 실무 7건 저장 결과키 전수 1원(test_kanjub_every_stored_key) · 표본 밖 선택지 손셈 대조(test_stmate_kanjub_opts))
@@ -152,7 +152,7 @@
- [x] F2-60 연쇄 재계산(L/M/S→X→D→B→내역→원가) — 08번 §1 · 현재: 구현(기초단가부터 원설계 5건 전 단가·총공사비 1원 · 변경설계 일부 미대조)
- [ ] F2-61 표준시장단가 적용(ACTTYP·ACTOPT 노무비 끝전 보정) — 22번 §3.3 · 현재: 부분(REA 34 Main 0x45a468 나눔·OPTIMIZ 끝전 = calc.splitStdMarket(test_std_market_split_modes) · 내역 계산 연결 없음)
### G3 수량산출·식언어 (구현 25 · 부분 4 · 없음 0) — 93.1%
### G3 수량산출·식언어 (구현 26 · 부분 3 · 없음 0) — 94.8%
- [x] F3-01 COSTN.SMT 메모 블록 읽기(IFORM 위치) — 21번 §1 · 23번 · 현재: 구현(smt_parser 150)
- [x] F3-02 헤더 변수 정의(;; 줄)·변수 대입 — 23번 · 현재: 구현(smt_engine 112)
@@ -166,7 +166,7 @@
- [x] F3-10 조건 함수 IF·IIF·IFI·IFO — 24번 §2.3 · 25번 §2.2 · 현재: 구현(smt_eval 우선순위·함수·IIF/IF(test_functions_and_left_to_right))
- [x] F3-11 금액변수·소계변수(대상·저장·%) 선언 — 28번 §1 · 현재: 구현(금액·누계 변수 · 계산후 제외(test_sonryo_amount_and_total_variables))
- [x] F3-12 계산후 제외처리·항목집계 제외 코드 — 28번 §1·§4 · 현재: 구현(금액·누계 변수 · 계산후 제외(test_sonryo_amount_and_total_variables))
- [ ] F3-13 강제금액(직접 지정 금액) — 28번 §4 · 현재: 부분(REA 34 강제금액 = 조달청 JDL→ST8 변환의 숫자 금액 참조 → W 견적코드(ST_U_Convert 0x455013) · 화면 입력 꼴 미확인)
- [x] F3-13 강제금액(직접 지정 금액) — 28번 §4 · 현재: 구현(REA 34 §17.8 — STmate 산출근거에 강제금액 문법 없음 · JDL 가져오기의 숫자 금액 참조 → W 견적코드 변환 전용 · 사용자 기능은 강제수량뿐)
- [x] F3-14 수량기호 Q·A·T·N — wM_Edit_San · 현재: 구현(Q·A·T·N 줄 · 결과적용 비목 4택·0원 비목(test_code_insert_lines_zero_skip_and_result_strip))
- [x] F3-15 식 문법 검사(줄 단위 오류 메시지) — 28번 §4 · 현재: 구현(줄 단위 문법 오류 · 실무 산근 오류 0(test_section_markers_exclusion_and_grammar_errors))
- [x] F3-16 문법 강조·문법설명·함수/연산 입력 단추 — 26번 §3 · 현재: 구현(함수 단추·강조 낱말 = 원본 화면 정의(test_editor_function_list_and_highlight_follow_dfm))
@@ -184,7 +184,7 @@
- [x] F3-28 내역↔BDQTY 수량 연결(CON_QTY) — ST_U_ConBD · 현재: 구현(코드 종류별 수량 · 내역↔BDQTY 자원 집계(test_qty_by_code_and_rollup_on_real_boq))
- [x] F3-29 수량코드(QCODE) 등록·검사 — 28번 §4 · 현재: 구현(수량코드 검사(test_qcode_check_and_next_code_and_file_signature))
### G4 파일 입출력 (구현 26 · 부분 2 · 없음 2) — 90.0%
### G4 파일 입출력 (구현 26 · 부분 3 · 없음 1) — 91.7%
- [x] F4-01 STC(ZIP) 열기 — ST_U_Archive · 09번 §5 · 현재: 구현(server.py 92)
- [x] F4-02 STC 저장(압축) — ST_U_Archive ComP_Data · 현재: 구현(stc_archive · 같은 파일은 원본 바이트 · 덮기 전 백업 · 7건 왕복 바이트 동일)
@@ -208,13 +208,13 @@
- [x] F4-20 조달청 호환규정 XML 내보내기 — 30번 · uM_XML_Info · 현재: 구현(report_pps · 공식 XSD V1.0.5 검증 5건 · 총공사비·직접비 저장값 1원(test_stmate_report_pps))
- [x] F4-21 조달청 XML·조달 형식 가져오기(Conv_XML_ST8·Conv_Jodal_ST8) — 28번 §3 · 현재: 구현(conv_xml · 5건 내보내기 → 가져오기 왕복 말단 행·차수 직접비·총공사비 일치(test_stmate_conv_xml) · 옛 조달 형식 근거 없음)
- [x] F4-22 XML 변환 설정(공사유형 8·지역·건축 사업내용) — uM_XML_Info · uM_ConstType · 현재: 구현(conv_xml_cfg 공사유형·지역·건축 사업내용 XSD 에서 읽음 · XSD 검증)
- [ ] F4-23 JDL 내보내기·검사 — frm_JDLAnno · JDLCHK.*.dll · 현재: 없음(REA 34 JDL = 조달청 호환 TEXT 묶음·탭 구분·JDLCheck 검사 항목 판독 · 내보내기 미구현 · app.js 569 '|' 형식 근거 없음)
- [ ] F4-23 JDL 내보내기·검사 — frm_JDLAnno · JDLCHK.*.dll · 현재: 부분(REA 34 §17.9 — jdl_format.py: 단가 목록 8종 고정폭 자리·열 이름·열 개수·코드 글자 검사(test_stmate_jdl_rea) · 세부 3종 열 이름 조건부 · 묶음 내보내기 없음)
- [x] F4-24 엑셀 → 내역 불러오기 — wM_From_XLS · 현재: 구현(conv_xls_boq · 원본 엑셀 5권 → STC 내역 행 전 칸 일치(test_stmate_conv_xls))
- [ ] F4-25 엑셀 역등록(CONV_XLS_2_ST·INITIAL)·엑셀 → BDQTY — 24번 §3 · 현재: 부분(단가 목록·산출식·구성표 코드·수량 일치 · 3건 새 공사 일치 · 중기 구성 PRPT·PRIN 뜻·이름 칸 미확정)
- [x] F4-30 BDQTY.DBF 구성표 복호 읽기 — STC_난독화_상태 · 현재: 구현(bdqty.py 자리별 회전·더하기 표 283자리 · 사용자 승인 · 글자 칸 제외)
- [ ] F4-26 자재 기준자료 XLS 입출력 — wM_JajeXLS · 현재: 부분(자재 기준자료 엑셀 왕복 · 원본 화면·방향 미확인)
- [x] F4-27 기준 BOQ·코드 변경 엑셀 왕복 — 24번 §3 · ST_U_ChgCode · 현재: 구현(stc_codechg 내역 8표 엑셀 왕복 · 코드 변경 되돌리면 7건 원래 바이트)
- [ ] F4-28 구버전 → Win8 자료 변환 — ST_U_Convert ST_ConvToWin8 · 현재: 없음(REA 34 ST_ConvToWin8 갈래(DOS 110~ · 7.x 120~)·차례·BOQ 필드 바꿈 판독 · 미구현)
- [ ] F4-28 구버전 → Win8 자료 변환 — ST_U_Convert ST_ConvToWin8 · 현재: 없음(REA 34 §13·§17.10 ST_ConvToWin8 갈래·차례·BOQ 필드 바꿈 판독 · 구버전 자료 표본 없음 · 미구현)
- [x] F4-29 자동백업·자료 복원 — wM_D_Restore · wM_ST_Restore · 현재: 구현(api_file 자동 백업·복원)
### G5 보고서·내보내기 (구현 22 · 부분 14 · 없음 0) — 80.6%
@@ -256,7 +256,7 @@
- [x] F5-35 금액 한글 표기(AMTTOHAN) — 24번 §2.4 · 현재: 구현(금액 한글 표기 · 원본 한글 금액 11건 전부 일치)
- [x] F5-36 SET_REP 데이터 기반 열·폭·제목 — 20번 §3 · 현재: 구현(SET_REP 서식 제목·시트 이름 적용 · 보고서 시험 포함)
### G6 설계변경·계약·실행·기성 (구현 27 · 부분 9 · 없음 0) — 87.5%
### G6 설계변경·계약·실행·기성 (구현 30 · 부분 6 · 없음 0) — 91.7%
- [x] F6-01 차수 4벌(원설계+3차변경) 칸 관리 — 08번 §2 · 24번 §7 · 현재: 구현(2·3·4차수 칸 고침이 저장 후 유지(test_slot_2_3_4_edits_persist))
- [ ] F6-02 통합형 BOQ11+BOQ12에서 BOQ12 현재안 — 16번 §4.5 · 현재: 부분(울진 BOQ12 = 계약내역(STMATE 착공내역서) 판명 · contract_calc 로 BOQ11 에서 1원 재현)
@@ -268,12 +268,12 @@
- [x] F6-08 간접비 변경 모드: 당초액 유지(건강·장기요양·연금·퇴직공제) — 19번 §6 · 35번 §4 · 현재: 구현(D_ 표시 항목 = 저장 금액 고정 · 변경 2건 대조)
- [x] F6-09 간접비 변경 방법 A(비율)·방법 B(증감×율) — 08번 §2 · 현재: 구현(scr_stage 재계산·당초 유지·방법A·방법B 선택 · 안전관리비 방법A 실물 대조)
- [x] F6-10 보험료 변경 계산 3모드 — wM_KanJub cBx_CH_BO · 현재: 구현(REA 34 문 PCLASS 7·계열>1 · 1·2 식 · 장기요양·퇴직공제 갈래 · 기본값 0x47b633 · 차수 화면 선택(test_series_chain_uses_previous_series · test_gate_closed_outside_pclass7))
- [x] F6-11 2차·3차 변경 계산 — wM_KanJub cBx_Chasu · 현재: 구현(REA 34 차수 콤보 PCLASS 갈래 · 직전 계열 되셈 사슬 · 당초액 유지 = 직전 계열(test_stmate_stage_change_rea) · 2차수 2건 실물 대조 · 3·4 실물 표본 없음)
- [x] F6-11 2차·3차 변경 계산 — wM_KanJub cBx_Chasu · 현재: 구현(REA 34 차수 콤보 PCLASS 갈래 · 직전 계열 되셈 사슬 · 당초액 유지 = 직전 계열 · 상한 4차 = 계열 5(MCOST5·QTY5 · K_ORD>4 거부 · Ghidra 확인)(test_stmate_stage_change_rea · test_stmate_kanjub_rea) · 3~5 실물 표본 없음)
- [x] F6-12 원가계산서 당초/변경 대비·변경분만 인쇄 — PM_Won_A_C · Cmbx_PORD1_H · 현재: 구현(당초/변경 대비 · 변경분만 인쇄 · 영덕 엑셀 공사원가계산서 일치)
- [x] F6-13 설계변경내역서(0643·0644) — CHANGE_STR · 현재: 구현(설계변경내역서 · 영덕 엑셀 당초·변경 줄 전부 일치)
- [ ] F6-14 변경내역서(변경율)(0645) — CHANGE_AMT · 현재: 부분(변경율 내역서 · REA 34 0645 = 「설계변경내역서(변경율)」 제목만 · 율 식 미확인)
- [ ] F6-14 변경내역서(변경율)(0645) — CHANGE_AMT · 현재: 부분(변경율 내역서 · REA 34 §17.6 0645 = 「설계변경내역서(변경율)」 머리 「증 감」 · 율 식 미확인)
- [x] F6-15 설계변경증감대비표(0648)·금액대비표 — CHANGE_AMT · 현재: 구현(증감대비표·금액대비표 · 영덕 엑셀 행 차례·금액 일치 · 인쇄·엑셀)
- [ ] F6-16 변경총괄·굴착·시도 변경내역서(0661~0666) — CHANGE_* · 현재: 부분(변경총괄 = 영덕 엑셀 총괄내역서 일치 · REA 34 굴착 계열 짝(시비 1·구비 2 / 변경 3·4) = change_calc.excavTable · 양식 차례 조건부)
- [ ] F6-16 변경총괄·굴착·시도 변경내역서(0661~0666) — CHANGE_* · 현재: 부분(변경총괄 = 영덕 엑셀 총괄내역서 일치 · REA 34 §17.6 0651~0667 구.시도/시도/구도 = 시비·구비·합 · 굴착 계열 짝 = change_calc.excavTable · 칸 차례 조건부)
- [x] F6-17 계약 변환 비목별 단가적용율(노·재·경) — wM_Mk_Cont · 현재: 구현(contract_calc 노·재·경 적용율 버림 · 울진 BOQ12 계약내역 1원)
- [x] F6-18 계약 변환 옵션(기초단가·일위/산근 생성·동일코드·노무비율·비과세) — 27번 §2.2 · 현재: 구현(REA 32 TwM_Mk_Cont · 생성 켬=율 하나 노·재·경 · 끔=비목별·새 코드 W·대표율 0 공내역 · 비과세 = C_NBUGAM·C_BUGA_M × 재료비율(test_stmate_stage_contract_rea))
- [x] F6-19 적용율 0% → W코드 공내역 — 27번 §2.2 · 현재: 구현(0% 공내역 W코드 · 울진 대조)
@@ -282,10 +282,10 @@
- [x] F6-22 설계 → 계약자료 변환등록(당초/변경·레벨) — wM_Conv_Mode · 현재: 구현(소광 원설계 → 변환등록·저장 = 실제 울진 계약 STC 일치(test_stmate_stage_register))
- [x] F6-23 낙찰율 열(NAGCD)·계약단가 저장 — 26번 §4 · 현재: 구현(새 코드 낙찰율·단가·산근 글·구성표 저장 = 울진 계약 STC 일치(test_stmate_stage_register))
- [x] F6-24 계약 원가계산(계약 제잡비) — 27번 · 현재: 구현(계약 원가계산 · 울진 총공사비 333,315,000원 일치)
- [ ] F6-25 계약·실행내역서(0623·0624) — PM_Nae_Cont · 현재: 부분(계약·실행내역서 화면 · 실물 표본 없음)
- [ ] F6-26 실행예산 작업(실행단가·실행수량) — wBoq 실행예산작업 · 현재: 부분(REA 32 0x511fa8 실행단가·수량 할증(소수 0~4 절사/반올림 · 머리글자 갈래 율) · 행 금액 0x456504 미해독)
- [x] F6-25 계약·실행내역서(0623·0624) — PM_Nae_Cont · 현재: 구현(REA MCP 32 §8 계약·실행내역서 0623·0624 = 설계 내역서 인쇄 모듈을 지금 공사에 그대로 · 기본 내역서 열(0623 두 모듈 고르는 기준 미확인))
- [x] F6-26 실행예산 작업(실행단가·실행수량) — wBoq 실행예산작업 · 현재: 구현(REA 32 할증 0x511fa8 + 행 금액 0x456504 = 설계와 같은 공용 행 계산 엔진(test_stmate_stage_exec_rea))
- [x] F6-27 중기 실행단가 계산(절사 6택·차액 보정 순서) — wM_Boq_ExecX · 현재: 구현(REA 32 0x4da7a8 합계 = 사용료÷시간 1원 절사 · 최초단가 비례 · 끝전 OPTIMIZ · 차액 = OPTNM 첫 성분(test_stmate_stage_exec_rea))
- [ ] F6-28 실행예산서 Ⅰ·Ⅱ(0673·0674) — SET_REP · 현재: 부분(실행예산서 화면 · 표본 없음)
- [x] F6-28 실행예산서 Ⅰ·Ⅱ(0673·0674) — SET_REP · 현재: 구현(REA MCP 32 §8 실행예산서 Ⅰ = 모든 줄(실행수량 0 제외 설정) · Ⅱ = 계표시·RS=1 줄 · 열 구성(test_stmate_stage_exec_rea))
- [x] F6-29 기성 회차 전회·금회·누계·비율 — wM_KanJub_K rGrd_Jab · 현재: 구현(REA 33 칸 1 계약·2 누계·3 전회·4 금회 · 회차 이월(전회←누계·금회 0) · 누계 금액 따로 셈(test_stmate_stage_progress_rea))
- [x] F6-30 공종별 기성수량·잔량 입력 — 27번 §3.2 · 현재: 구현(REA 33 0x4f4bbd 전회+금회 > 계약이면 금회 = 계약−전회 · 누계 = 전회+금회)
- [x] F6-31 기성 제잡비(금회직접×계약제잡비율) — 27번 §3.1 · 현재: 구현(REA 33 0x4cdec0 금회 = 버림(계약잡비율 × 금회 직접비) · 마지막 회차 = 도급 − 전회)
+39 -9
View File
@@ -13,10 +13,12 @@
* · 세 율 같음 = 성분·총액 × 율/100 → OPTIMIZ(우선 플래그: B = CHBNM · D·Q = CHGNM · 그 밖 비목별, 0자리)
* · 세 율 다름 = 비목별 MROUNDUD(단가 × 율/100, 0, 0) · 계 = 합
* · 적용제외 = 고른 계표시 머리(T 레벨 ≥ 선택)부터 그 ENDCODE 까지(0x555f68) · 목록 기본 체크 = ITM_TYP 11·21·31·41·51·71·72
* (안전관리비·품질관리비·PS·제비율적용제외·작업설·관급자재대 도급자/관급자 — ITM_TYP 이름표 ST_U_Convert 0x587d9c)
* · 울진 관급 줄 = T3「관급자재대」(닫음 C3 제외금액) 머리를 고른 결과 — 그 머리 ITM_TYP 0(기본 체크 아님)
* · 비과세자재대 옵션 = 원가계산 C_NBUGAM·C_BUGA_M × 재료비율/100 1원 절사(0x556274) — 내역 줄과 무관
* · PNUM = 켬·율 0 → '조사가적용' · 그 밖 FormatFloat('0.00##', 대표율) + '% 적용'(0x55610e)
* 실물(울진 2025 STC): 계약 단가·금액 1원 · 직접비 · 원가계산 · PNUM '87.745% 적용'
* 앱 확장(원본 근거 없음 · 울진 관찰): 관급 구역 줄 제외(excludeGov) · 공종 단위 제외(excludeLeaves) · 단가 절사 자리(digits)
* 앱 확장(원본 근거 없음): 관급 구역 줄 제외(excludeGov — 원본은 머리 선택으로만) · 공종 단위 제외(excludeLeaves) · 단가 절사 자리(digits)
* 정답 대조: resources/tester/test_stmate_stage_contract.py · test_stmate_stage_contract_rea.py
*/
const StmateContract = (() => {
@@ -59,6 +61,27 @@ const StmateContract = (() => {
};
// 적용제외 목록 기본 체크 ITM_TYP(0x55427b 비트표 0x55448c)
const DEFAULT_EXCLUDE_ITM = [11, 21, 31, 41, 51, 71, 72];
// ITM_TYP 공종구분 이름 — ST_U_Convert 상수 배열 0x587d9c(0~120) · 조달청 호환 공종구분과 같은 글
const ITM_TYP_NAMES = {
0: "일반공종",
10: "안전관리비",
11: "안전관리비",
20: "품질관리비",
21: "품질관리비",
30: "미확정설계공종(PS)",
31: "미확정설계공종(PS)",
40: "제요율적용제외공종",
41: "제비율적용제외공종",
50: "작업설 등",
51: "작업설 등",
60: "매입세",
61: "매입세",
70: "관급자재공종",
71: "관급자재대(도급자)",
72: "관급자재대(관급자)",
111: "비과세자재대",
120: "조달수수료",
};
const TARGET = "MLSWBDXQ";
// 실제 쓰는 율 — 켬 = 노무비 칸 하나 · 끔 = 셋 따로(대표율 = 평균 소수 셋째 사사오입)
@@ -102,13 +125,18 @@ const StmateContract = (() => {
function levelHeads(tree, level = 1, itmOf = null) {
return tree.nodes
.filter((nd) => nd.kind === "head" && !nd.zone && nd.level >= Math.max(1, n0(level)))
.map((nd) => ({
recno: nd.recno,
itnum: nd.itnum,
name: nd.name,
level: nd.level,
defaultExcluded: DEFAULT_EXCLUDE_ITM.includes(n0(itmOf ? itmOf(nd) : nd.itmTyp)),
}));
.map((nd) => {
const itm = n0(itmOf ? itmOf(nd) : nd.itmTyp);
return {
recno: nd.recno,
itnum: nd.itnum,
name: nd.name,
level: nd.level,
itm,
itmName: ITM_TYP_NAMES[itm] || "",
defaultExcluded: DEFAULT_EXCLUDE_ITM.includes(itm),
};
});
}
// 적용제외 판정 — 고른 머리 아래 전부(SORTCODE~ENDCODE) · (앱) 고른 공종 · (앱) 관급 구역
@@ -305,7 +333,8 @@ const StmateContract = (() => {
return calcKanjub({ kanjubConfig: cfg }, conv.totals, null, cfg);
}
// 예상적용율 찾기 — 노·재·경 같은 율 · 0.001% 단위 · 목표 이하 최대
// 예상적용율 찾기 — 노·재·경 같은 율 · 0.001% 단위 · 목표 이하 최대(앱: 행 단위 변환 이분 탐색)
// 원본 Act_Find_NagExecute 0x556d68 = 비목 합(MCOST·LCOST·SCOST) × 율 근사 되풀이 · 총공사비 목표 · 율 소수 5자리(REA 32 §8.2)
// what = "direct"(직접공사비) · "grand"(총공사비, cfg 필요)
function findRate(tree, opts, target, stage = 1, what = "direct", cfg = null) {
const value = (k) => {
@@ -425,6 +454,7 @@ const StmateContract = (() => {
return {
CONTRACT_CARRY,
DEFAULT_EXCLUDE_ITM,
ITM_TYP_NAMES,
effRates,
isProgressProject,
pnumText,
+134 -3
View File
@@ -15,6 +15,10 @@
* · 실행단가·실행수량 할증 = ST_Boq TwBoq.Act_Rate_Execute 0x512a80 → 0x511fa8
* 실행수량 = MROUNDUD(최초수량 × 율/100, 자릿수 0~4, 절사/반올림) · 실행단가 = MROUNDUD(최초단가 × 율/100, …)
* · 율은 코드 머리글자 갈래(L 노무비 · M 재료비 · X 중장비 · 그 밖 W)마다 하나 · 단가 할증은 단위 % 줄 제외
* · 행 금액 = ST_Boq 0x456504 가 행을 계산 묶음에 싣고 공용 행 계산(0x433490 Q·A 줄 · 0x44019c → 0x43dee8)
* 을 수량칸마다 부름 — 설계 내역과 같은 엔진(CHNNM 전달) · 앱은 OPTIMIZ(CHNNM, 0자리) 대입
* · 실행예산서 Ⅰ·Ⅱ = ST_P_Nae Prn_Nae_Cont1·2(0x4c27f8 · 모드 1·2 · 같은 PM_Nae_Cont 양식)
* Ⅰ = 모든 줄(출력 설정 켬이면 실행수량 0 공종 뺌) · Ⅱ = 계표시 줄(T·E·C) + RS=1 줄 · 소계 닫음(C1·E1) 안 찍음
* 앱 확장(원본 없음): 비목별 율(rateM·rateL·rateS) · 원 단위 절사(jeol) — 옛 화면·시험 호환
* 시험: resources/tester/test_stmate_stage_exec_rea.py (원본 규칙 손계산 대조)
*/
@@ -88,10 +92,38 @@ const StmateExec = (() => {
return v > 0 ? r : -r;
}
// MROUNDUP(v, d) — 올림(0 반대쪽) · 이름·호출 자리만 확인(본문 미해독) → 중간 확신
// MROUNDUP(v, d) — DP_Common 0x4547ac (REA MCP Ghidra 의사코드로 확인)
// FormatFloat('0.0#########', |v| + 미소값) → d 자리에서 자름 → 버린 다음 숫자들(최대 10자리)을
// '0.' 뒤에 붙여 Ceil(0x4297f4 = Trunc + (Frac > 0)) → 하나라도 0 이 아니면 한 단위 올림(0 반대쪽)
function mroundup(v, d = 0) {
const t = mroundud(v, d, 0);
return t === n0(v) ? t : t + Math.sign(n0(v)) * Math.pow(10, -Math.trunc(n0(d)));
v = n0(v);
d = Math.trunc(n0(d));
if (v === 0) return 0;
const a = Math.abs(v);
const s0 = fmtHash(a, 10);
let pos = s0.indexOf(".") + 1;
if (pos > 0 && s0.length - pos < 11) {
const first = s0.search(/[1-9]/) + 1;
if (first > 0 && s0.length - first < 11) pos = 0;
}
if (pos === 0 && d >= 0 && !s0.includes(".")) return v;
const s = fmtHash(a + (pos === 0 ? 0 : noiseEps(pos)), 10);
const [ip, fp = ""] = s.split(".");
let body, rest, e;
if (d >= 0) {
body = ip + (d ? "." + fp.slice(0, d).padEnd(d, "0") : "");
rest = fp.slice(d, d + 10);
e = -d;
} else {
const D = -d;
if (ip.length > D)
((body = ip.slice(0, ip.length - D) + "0".repeat(D)), (rest = ip.slice(-D) + fp));
else ((body = "0"), (rest = ip + fp));
e = D;
}
const sum = Number(body) + (/[1-9]/.test(rest) ? Math.pow(10, e) : 0);
const r = d > 0 ? Number(sum.toFixed(Math.min(d, 20))) : sum;
return v > 0 ? r : -r;
}
// ADDBJVAL(v) — DP_Common 0x4565f8 · '.' 자리 기준 미소값을 부호 방향으로 더함
@@ -349,8 +381,107 @@ const StmateExec = (() => {
["구분", 25],
];
// 실행예산서 Ⅰ·Ⅱ 줄 고르기 — ST_P_Nae 0x4c245d(조회식) · 0x4c3d38(소계 닫음 거름)
// Ⅰ = 모든 줄 · 설정 켬(+0x1768)이면 !(MLSWBDXAP 공종 .and. QTY1=0) · Ⅱ = T·E·C 줄 + RS=1 줄 · C1·E1 안 찍음
function reportRows(nodes, mode = 1, o = {}) {
return nodes.filter((nd) => {
if (nd.kind === "blank") return false;
const c = String(nd.newCode || nd.code || "").trim();
if (mode === 2) {
if (nd.kind === "close") return !/^[CE]1$/.test(c);
return nd.kind === "head" || !!nd.rs;
}
const q = nd.st && nd.st.x ? nd.st.x.qty : 0;
return !(o.skipZeroQty && nd.kind === "leaf" && /^[MLSWBDXAP]/.test(c) && !n0(q));
});
}
// PM_Nae_Cont 양식 열(DFM TPM_NAE_CONT 머리 띠) — 설계(계획) = 2칸(QTY2·UNIT2·T_AMT2) · 실행 = 1칸
const NAE_CONT_COLS = [
"공종",
"설계(계획) 수량",
"단위",
"금액",
"작업명",
"구분",
"수량",
"단위",
"재료비 단가",
"재료비 금액",
"노무비 단가",
"노무비 금액",
"경비 단가",
"경비 금액",
"총액 단가",
"총액 금액",
"비고",
];
// 계약,실행내역서(0623·0624) — ST_Prt 꼬리표 20623 → Prn_Nae/Prn_NaeW · 20624 → Prn_Nae_P/Prn_NaeW_P(0x4513e7)
// 설계 내역서와 같은 인쇄 모듈을 지금 공사(계약·실행)에 씀 · SET_REP FLDCNT 0 → 내역서 기본 열
const NAE_COLS = [
"공종",
"명칭",
"규격",
"수량",
"단위",
"재료비 단가",
"재료비 금액",
"노무비 단가",
"노무비 금액",
"경비 단가",
"경비 금액",
"합계 단가",
"합계 금액",
"비고",
];
// nodes 의 st[key] 값으로 내역서 줄 — 머리·닫음 = 금액만
function naeRows(nodes, key) {
return nodes
.filter((nd) => nd.kind !== "blank")
.map((nd) => {
const v = (nd.st && nd.st[key]) || {};
if (nd.kind !== "leaf")
return [
nd.itnum || "",
nd.name || "",
"",
"",
"",
"",
v.mAmt,
"",
v.lAmt,
"",
v.sAmt,
"",
v.tAmt,
"",
];
return [
nd.itnum || "",
nd.name || "",
nd.spec || "",
v.qty,
nd.unit || "",
v.mUnit,
v.mAmt,
v.lUnit,
v.lAmt,
v.sUnit,
v.sAmt,
v.tUnit,
v.tAmt,
nd.newCode || nd.code || "",
];
});
}
return {
JEOL,
NAE_COLS,
naeRows,
NAE_CONT_COLS,
reportRows,
ORDERS,
REPORT_COLS,
mroundud,
+6 -35
View File
@@ -109,46 +109,17 @@
function builders(ctx) {
return {
// 계약,실행내역서(0623) — ST_Prt 20623 → ST_P_Nae Prn_Nae(내역서 기본 양식)를 계약 내역에 · 1칸 = 계약 단가·금액
boq: () => {
const { conv, st } = compute(ctx);
const E = global.STMATE_EXEC;
return [
{
name: "계약내역서",
title: "계 약 내 역 서",
info: [`공사명 : ${S.pname(ctx)}`, `설계 ${st}차수 → 계약`],
head: [
[
{ t: "공종", r: 2 },
{ t: "명칭", r: 2 },
{ t: "규격", r: 2 },
{ t: "수량", r: 2 },
{ t: "단위", r: 2 },
{ t: "설계", c: 2 },
{ t: "계약", c: 2 },
{ t: "코드", r: 2 },
],
["단가", "금액", "단가", "금액"],
],
rows: conv.rows
.map((r) =>
r.kind === "leaf"
? [
r.itnum,
r.name,
r.spec,
r.qty,
r.unit,
r.dUnit,
r.dAmt,
r.tUnit,
r.tAmt,
r.newCode,
]
: r.kind === "head"
? [r.itnum, r.name, "", "", "", "", "", "", r.tAmt, ""]
: null,
)
.filter(Boolean),
head: [E.NAE_COLS],
rows: E.naeRows(conv.nodes, st),
},
];
},
@@ -277,11 +248,11 @@
const heads = global.STMATE_CONTRACT.levelHeads(c.tree, o.level, itmOf(ctx));
const exSet = new Set(o.excludeHeads.map(String));
const exGrid = S.grid(
[["공종번호", "명칭", "규격", "금액", "레벨", "적용제외"]],
[["공종번호", "명칭", "공종구분(ITM_TYP)", "금액", "레벨", "적용제외"]],
heads.map((h) => [
h.itnum,
h.name,
"",
h.itmName,
n0((c.tree.nodes.find((nd) => nd.recno === h.recno) || { st: {} }).st[c.st]?.tAmt),
h.level,
{
+62 -66
View File
@@ -23,6 +23,7 @@
rateQ: 100,
digits: 0,
round: 0,
skipZeroQty: false, // 실행예산서 Ⅰ 실행수량 0 공종 빼기(출력 설정 +0x1768)
overrides: {},
mc: {
code: "",
@@ -66,85 +67,80 @@
return { x, label, opts, budget: E.budgetFromTree(tree, stage, opts) };
}
// SET_REP 0673·0674 열 이름(설계(계획) 칸 = 기준 이름)
const cols = (label) =>
global.STMATE_EXEC.REPORT_COLS.map(([t], i) =>
i === 1 ? `${label === "설계" ? "설계" : label}(계획)` : t,
);
function builders(ctx) {
const info = [`공사명 : ${S.pname(ctx)}`];
return {
// 실행예산서 Ⅰ·Ⅱ — SET_REP.DBF 0673·0674 다섯 열(공종 · 설계(계획) · 실행예산 · 작업명 · 구분)
// Ⅰ·Ⅱ 차이는 바이너리 미해독 · 앱 = Ⅰ 계표시 머리 · Ⅱ 공종(말단)
b1: () => {
const { budget, label } = compute(ctx);
const rows = budget.nodes
.filter((nd) => nd.kind === "head" && !nd.zone)
.map((nd) => [
const naeCont = (mode) => {
const { budget, x } = compute(ctx);
const E = global.STMATE_EXEC;
const rows = E.reportRows(budget.nodes, mode, { skipZeroQty: x.skipZeroQty }).map((nd) => {
const d = nd.st.d || {},
e = nd.st.x || {};
if (nd.kind !== "leaf")
return [
`${nd.itnum || ""} ${nd.name || ""}`.trim(),
nd.st.d.tAmt,
nd.st.x.tAmt,
"",
"공종",
]);
"",
d.tAmt,
"",
"",
"",
"",
"",
e.mAmt,
"",
e.lAmt,
"",
e.sAmt,
"",
e.tAmt,
"",
];
return [
{ name: "실행예산서1", title: "실 행 예 산 서", info, head: [cols(label)], rows },
nd.itnum || "",
d.qty,
nd.unit || "",
d.tAmt,
nd.name || "",
nd.spec || "",
e.qty,
nd.unit || "",
e.mUnit,
e.mAmt,
e.lUnit,
e.lAmt,
e.sUnit,
e.sAmt,
e.tUnit,
e.tAmt,
nd.newCode || nd.code || "",
];
},
b2: () => {
const { budget, label } = compute(ctx);
const rows = budget.nodes
.filter((nd) => nd.kind === "leaf")
.map((nd) => [
`${nd.newCode || nd.code || ""} ${nd.name || ""}`.trim(),
nd.st.d.tAmt,
nd.st.x.tAmt,
nd.spec || "",
nd.unit || "",
]);
return [
{ name: "실행예산서2", title: "실 행 예 산 서", info, head: [cols(label)], rows },
];
},
});
return [
{
name: `실행예산서${mode}`,
title: "실 행 예 산 서",
info,
head: [E.NAE_CONT_COLS],
rows,
},
];
};
return {
// 실행예산서 Ⅰ·Ⅱ(0673·0674) — ST_Prt 꼬리표 20673·20674 → ST_P_Nae Prn_Nae_Cont1·2(같은 PM_Nae_Cont 양식)
// Ⅰ = 모든 줄 · Ⅱ = 계표시 줄(소계 닫음 빼고) · 열 = PM_Nae_Cont 머리 띠(설계(계획) 2칸 · 실행 1칸)
b1: () => naeCont(1),
b2: () => naeCont(2),
// 계약,실행내역서(0623) — 내역서 기본 양식(Prn_Nae)을 실행 내역(1칸)에
ce: () => {
const c = S.contractCompute(ctx);
const { budget } = compute(ctx);
const E = global.STMATE_EXEC;
const x = est(ctx);
const b = E.budgetFromTree({ nodes: c.conv.nodes }, c.st, x);
return [
{
name: "계약실행내역서",
title: "계 약 내 역 서",
info,
head: [
[
"공종",
"명칭",
"규격",
"단위",
"수량",
"계약단가",
"계약금액",
"실행수량",
"실행단가",
"실행금액",
],
],
rows: b.nodes
.filter((nd) => nd.kind === "leaf")
.map((nd) => [
nd.newCode || nd.code,
nd.name,
nd.spec,
nd.unit,
nd.st.d.qty,
nd.st.d.tUnit,
nd.st.d.tAmt,
nd.st.x.qty,
nd.st.x.tUnit,
nd.st.x.tAmt,
]),
head: [E.NAE_COLS],
rows: E.naeRows(budget.nodes, "x"),
},
];
},