上一頁 目錄 下一頁

7.程式處理


  7.程式處理

原程式僅為解釋資料用,故瞭解資料結構後,即可瞭解程式之所作所為。在此,
我僅選擇數段具有代表性者,略作說明如次:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    主流程,程式入口
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CG    SEGMENT    PUBLIC        ;為聯接方便,故為作任何宣告
ASSUME    CS:CG,DS:CG

SS_        DW    0    ; 此緩衝區必須在本段內
SP_        DW    0    ; 同上

START:
PUSH    CS
POP    ES
MOV    CS:SS_,SS    ;先將外界之段暫存器保護之
MOV    CS:SP_,SP
CMP    BX,FUNC_CNT
JNC    ERROR     ;測輸入參數是否錯誤
OR    BL,BL
JNZ    START1        ;作參數處理
MOV    DI,OFFSET BUFIN
MOV    CX,5
REP    MOVSB        ;取輸入碼
JMP    BEGIN        ;開始組字
START1:
SHL    BX,1        ;序數乘二
PUSH    DS
PUSH    CS
POP    DS
CALL    WORD PTR MKS [BX]
POP    DS
ERRORT:
MOV    SP,CS:SP_
MOV    SS,CS:SS_
POP    ES
RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 參數處理功能,住址索引表。(以倉頡碼命名)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MKS     DW    BEGIN    ;BX=0 字形組合
DW    OCCG    ;BX=1 繁體字設定
DW    HCCG    ;BX=2 簡體字設定
DW    VFNHE    ;BX=3 字級、字體設定
DW    JCM    ;BX=4 空心體
DW    ODYJ    ;BX=5 斜體
DW    TOP     ;BX=6 填花體
DW    JBMMF    ;BX=7 直加粗
DW    JBMME    ;BX=8 直減細
DW    DTLCF     ;BX=9 橫加粗
DW    DTLCE     ;BL=10 橫減細
DW    HVIF16    ;BL=11 系統與排版切換專用,16點陣
DW    HVIF24    ;BL=12 系統與排版切換專用,24點陣
DW    OHR     ;BL=13 供程式師設計用,字庫入口
DW    YAV     ;BL=14 供程式師設計用,使字庫退出系統
MKS_CNT    EQU    ($-FUNC)/2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    部份參數處理程式
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DTLCF:
CMP    BUFMAD,8    ;橫之定義
JAE    DTLCRET        ;目前所定不可大於八
INC    BUFMAD
DTLCRET:
RET
DTLCE:
DEC    BUFMAD
JA    DTLCRET
MOV    BUFMAD,1    ;不可小於一
RET
JBMMF:
CMP    BUFDBM,8    ;直之定義
JAE    DTLCRET        ;目前所定不可大於八
INC    BUFDBM
RET
JBMME
DEC    BUFDBM
JA    DTLCRET
MOV     BUFDBM,1    ;不可小於一
RET
OCCG:
MOV    BUFOH,BH    ;設繁體旗號
RET
HCCG:
MOV    BUFOH,BL    ;設簡體旗號
RET
JCM:
XOR    BUFJCM,BL    ;設空心體旗號
RET
ODYJ:
XOR    BUFITL,BL    ;設斜體旗號
RET
TOP:
MOV    WORD PTR BUFTEN,DX    ;存花色
RET
YAV:
MOV    AX,PSPM        ;取出原始系統參數
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    空心體處理,原字形在 SI 中
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OUTLINE:
CALL    XVALUE        ;求字框值
PUSH    SI        ;原字形
MOV    BX,OFFSET PATN2 ;第二組緩衝區
MOV    DI,OFFSET PATN1 ;第一組緩衝區
INC    CX        ;高度值
PUSH    CX
MOV    BP,18        ;防最大值越區用
EMPTY_2:
PUSH    BX
PUSH    CX
PUSH    SI
PUSH    DI
MOV    CX,DX        ;先做一行
CLC            ;先清旗號,以便移轉
EMPTY_3:
LODSB            ;取原形
STOSB            ;保存在第一區
RCR    AL,1        ;移位
LAHF            ;保留溢位
XOR    AL,[SI-1]    ;與原值交集
OR    [BX],AL        ;置入第二區
OR    [BX+18],AL    ;置入第二區之下一行
INC    BX
SAHF            ;取出溢位值
LOOP    EMPTY_3
MOV    AL,0
RCR    AL,1
OR    [BX],AL        ;補右側一點
OR    [BX+18],AL    ;補下行一點
POP    DI
POP    SI
POP    CX
POP    BX
ADD    SI,16        ;換行
ADD    DI,BP        ;換行,新區較大
ADD    BX,BP        ;換行,新區較大
LOOP    EMPTY_2        ;第二區,左右為空心形
POP    CX
POP    DI        ;原字形,亦為輸出字形
MOV    SI,OFFSET AUXI1    ;第一區保留原字形
MOV    BX,OFFSET AUXI2    ;第二區為左右空心形
INC    CX
EMPTY_4:
PUSH    BX
PUSH    CX
PUSH    SI
PUSH    DI
MOV    CX,DX
EMPTY_5:            ;第二次再使上下為空心形
LODSB
XOR    AL,[DI]        ;處理本行
OR    AL,[BX]        ;與左右空心相合
STOSB            ;存入輸出區
INC    BX
LOOP    EMPTY_5
POP    DI
POP    SI
POP    CX
POP    BX
ADD    BX,BP
ADD    SI,BP
ADD    DI,16
LOOP    EMPTY_4        ;各行做完
EMPTY_RET:
RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    填花體處理
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    花色種類表
FAN    DW    FAN0,FAN1,FAN2,FAN3,FAN4
DW TOP,FAN5,FAN6,FAN7,FAN8
;    花色種類
FAN0    DB    0FFH,0FFH,00FH,0F0H
FAN1    DB    0CCH,0CCH,0CCH,0CCH,033H,033H,033H,033H,00FH,0F0H
FAN2    DB    0AAH,0AAH,055H,055H,00FH,0F0H
FAN3    DB    080H,080H,040H,040H,020H,020H,010H,010H
DB    08H,08H,04H,04H,02H,02H,01H,01H,0FH,0F0H
FAN4    DB    011H,011H,022H,022H,044H,044H,088H,088H,0FH,0F0H
FAN5    DB    028H,058H,034H,088H,06BH,0D4H,0C4H,023H
DB    028H,014H,010H,008H,010H,008H,010H,008H
DB    010H,088H,038H,014H,0C4H,023H,083H,0F4H
DB    082H,08CH,083H,08BH,044H,08CH,038H,078H,0FH,0F0H
FAN6    DB    057H,0AAH,02BH,0D0H,007H,0A0H,00BH,0C0H,0FH,0F0H
FAN7    DB    000H,000H,001H,0C0H,002H,020H,004H,010H
DB    004H,010H,01CH,09CH,022H,0A2H,041H,041H
DB    046H,031H,021H,042H,01EH,0BCH,008H,088H
DB    010H,014H,011H,044H,009H,048H,006H,030H,0FH,0F0H
FAN8    DB    07FH,07FH,041H,041H,05DH,05DH,051H,045H
DB    05FH,07DH,040H,001H,07FH,07FH,001H,040H
DB    07DH,05FH,045H,051H,055H,055H,05DH,05DH
DB    041H,041H,07FH,07FH,000H,000H,0FH,0F0H

;    處理程式,原字形設在 DI 中
TENTEN:
INC    CX
INC    CX
SUB    BH,BH
MOV    BL,BYTE PTR BUFTEN+1    ;取花色
SHL    BX,1
MOV    BX,TOP [BX]
MOV    BP,BX
FANCY:
MOV    BX,BP
TENS0:
CMP    WORD PTR [BX],0F00FH    ;終止指令
JE    FANCY
PUSH    CX
MOV    CL,8
TENS1:
LODSW
AND    AX,[BX]
OR    [DI],AX
INC    DI
INC    DI
LOOP    TENS1            ;完成一行
INC    SI
INC    SI
TENS2:
POP    CX
INC    BX
INC    BX
LOOP    TENS0            ;全部完成
RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    斜體處理,原字形在 SI 中
;    若需不同斜度,可由參數決定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ITALIC:
MOV    BX,WORD PTR BUFY
SUB    BH,BL
INC    BH
MOV    AL,BH
SHR    BH,1
SHR    BH,1
SHR    BH,1
SUB    AH,AH
DIV    BH            ;斜度為直向1/8
CALL    XVALUE
INC    DX
MOV    BL,BH
MOV    AH,AL
ITAL1:
MOV    BH,BL
ITAL2:
PUSH    SI
MOV    CX,DX
CLC
ITAL3:
RCR    BYTE PTR [SI],1
INC    SI
LOOP    ITAL3
POP    SI
DEC    BH
JNZ    ITAL2
ADD    SI,10H            ;左右最大值設為128點
DEC    AL
JNZ    ITAL1
MOV    AL,AH
DEC    BX
JNZ    ITAL1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    程式開始,以下僅為主要之流程
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BEGIN:
MOV    DI,OFFSET BUFOUT
CALL    CLEBUF            ;清輸出緩衝區
AND    DL,7            ;點陣左側起點有效值
MOV    BL,DL
MOV    BUFWR,DL        ;存入緩衝器
MOV    BH,BL
MOV    AX,WORD PTR BFDX2    ;原輸入值
ADD    AX,BX
MOV    WORD PTR BFTDX2,AX    ;操作區之範圍
MOV    AL,BFDX8
ADD    AL,BL
MOV    BFTDX8,AL        ;1/8X之有效值
ADD     BX,WORD PTR BUFX
MOV    DX,WORD PTR BUFY
MOV    WORD PTR BUFHX1,BX
MOV    WORD PTR BUFHY1,DX
MOV    SI,OFFSET BUFIN        ;輸入碼
LODSW
CMP    AL,20H
JA    ASC            ;為 ASCII
CMP    AX,1919H
JNE    NODHER            ;為中文
CMP    BYTE PTR[SI+1],0    ;為符號碼
JE    NODHER
CMP    BYTE PTR [SI],18H    ;YYX
JB    NODHER
JE    DHER
CMP    BYTE PTR[SI+1],18H    ;YYYX?
JAE    NODHER
DHER:
JMP    GODHER
ASC:
JMP     ASCIN
NODHER:
MOV    BP,AX
MOV    BH,AL
LODSW
CALL    SHLAX            ;求對照碼
OR    AL,[SI]
XCHG    BP,AX
CMP    BUFOH,CH
JE    NONHANA
JMP    SEARCHH            ;簡體
NONHANA:
SHL    AX,1
SUB    BH,BH
MOV    BL,AL
MOV    DI,WORD PTR TAB54[BX]    ;25*26*2之值
MOV    BL,AH
ADD    DI,BX            ;取索引表之值
ADD    DI,OFFSET CG2I1        ;索引表
MOV    SI,[DI]            ;索引所得之位置
MOV    DX,OFFSET DG1ET21    ;單字首、複字首分界值
CMP    SI,DX            ;單字首?複字首
PUSHF
JNC    BE04
BE00:
CMP    DI,OFFSET CG2I2
JE    BE05
INC    DI
INC    DI
CMP    [DI],DX
JAE    BE00
BE01:
MOV    DI,[DI]
BE011:
SUB    DX,DX
CALL    BINARY            ;二分法找字
JC    BE02
MOV    AX,DG2            ;換段
MOV    DS,AX
BE012:
SUB    CH,CH
LODSW
TEST    AH,80H            ;1=指令,0=資料
JNZ    BEOK            ;找到資料
CALL    ANALY            ;找到指令,分析
JMP    SHORT DELETE
BE04:
CMP    DI,OFFSET CG2I2
JE    BE041
INC    DI
INC    DI
CMP    [DI],DX
JB    BE04
JMP    BE01
BE05:
MOV    DI,OFFSET DG1ET21
JMP    BE011
BE041:
MOV    DI,OFFSET DG1ET24
JMP    BE011
BEOK:
SHL    AX,1
ADD    AX,OFFSET DG3T8000
MOV    SI,AX
MOV    BX,DG3
MOV    DS,BX
MOV    SI,[SI]
MOV    DI,OFFSET BUFMAP
MOV    BX,CG2
MOV    DS,BX
MOV    ES,BX
SUB    BX,BX
CMP    BUFHY6,0FFH
JE    BEOK1
TEST    BYTE PTR [SI+1],20H
JZ    BEOK0
MOV    DL,BUFOY
MOV    BUFHY1[BX],DL
BEOK0:
TEST    BYTE PTR [SI+1],80H
JZ    BEOK2
TEST    BYTE PTR [SI+1],10H
JNZ    BEOK1
BEOK2:
MOV    DL,BUFOY+1
MOV    BUFHY1+1[BX],DL
BEOK1:
JMP    SHORT MAPO
BE02:
CMP    ES:BYTE PTR BUFIN,18H
JNE    BE020
ERROR0:
JMP    ERROR
BE020:
CALL    CKAN
JE    BE03
BE07:
POPF
CALL    AUTO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    字形處理
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELETE:
CALL    DIVALL
SUB    BX,BX
MOV    BFLAGAL,CL        ;FOR CHKUP
DEC    CX
DEC    CX
DELET1:
PUSH    CX
PUSH    BX
MOV    SI,WORD PTR INSTB[BX]
CALL    CS:FRATB[SI]
POP    BX
EXBACK:
INC    BX
INC    BX
POP    CX
CMP    BL,CL
JB    DELET1
MOV    BUFS1+1,BH
MOV    BUF020,BH
MOV    BUFKMKR,BH
CMP    BL,0CH
JAE    ERROR0
MOV    BFLAGAL,BL        ;FOR MOD2 CONBI. NO.
MOV    DI,OFFSET BUFMAP
MAPL:
MOV    SI,CS:BUFHTB[BX]    ;DATA ADDR
MAPO:
CALL    CHK012
PUSH    BX
MOV    BLAG,BL
CALL    MAPIN
POP    BX
DEC    BX
JL    MAPLOK
DEC    BX
JMP    MAPL
MAPLOK:
JMP    CCGRET
BE03:
CALL    ANTAUT
POP    BP
JMP    DELETE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    自動組字處理
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
AUTO:
PUSHF
MOV    AX,CG2
MOV    DS,AX
MOV    AX,WORD PTR BUFIN
CMP    BUFOH,BH
JNE    HAUTO        ;HANA AUTO
SINA1:
MOV    BUFDEL,BH
MOV    BL,AL
SHL     BX,1
MOV    SI,DS:WORD PTR CG2I3-2[BX]
ADD    SI,OFFSET DG1BT01
POPF
JNC    MUTAUT
CMP    BUFIN+4,0
JNE    ERROR1    
MOV    BL,DH        ;DH = THE ORDER OF HEAD
CALL    ANALYR
CALL    SHFX1
JMP    SHORT BODY
SINA0:
MOV    BLAG,BH
SINA:
CMP    ES:BUFOH,BH
JE    SINA2
MOV    ES:BUFDEL,1
SINA2:
STC
JMP    AUTO
ERROR1:
JMP    ERROR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    複字單處理
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MUTA:
CMP    ES:BUFOH,BH
JE    AUTO
OR    DH,DH
JZ    AUTO
MOV    ES:BUFDEL,1
JMP    AUTO
MUTAUT:
MOV    BUFMUT,AX
MOV    BP,DG1
MOV    DS,BP
DEC    SI
MUTIH0:
INC    SI
CMP    [SI],AH
JNE    MUTIH0
MOV    BL,DH        ;SAME AS SINAUT
CALL    ANALYR
MOV    BUFA,BL
MOV    SI,OFFSET BUFIN+2
CMP    [SI],BH
JZ    SINA0
MOV    CX,5
MOV    DI,OFFSET BUFIN
REP    MOVSB
BODYM1:
MOV    SI,OFFSET BUFIN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    字身處理
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BODY:
LODSW
SHL    AX,1
MOV    BL,AL        ;THE 1ST BODY CODE *2 IN BL
MOV    DI,TAB54[BX]
MOV    BL,AH
LODSB
MOV    SI,WORD PTR CG2I2[BX][DI]
ADD    SI,OFFSET DG1BT01-1
MOV    BP,DG1
MOV    DS,BP
BODY1:
INC    SI
CMP    AL,[SI]
JE    BOOK
JNB    BODY1
MOV    AX,CG2
MOV    DS,AX
CMP    BUFA,BH
JE    ERROR1
CMP    BUFIN+2,BH
JNE    ERROR1
MOV    AX,WORD PTR BUFMUT
XCHG    AX,WORD PTR BUFIN
MOV    WORD PTR BUFIN+2,AX
MOV    BUFA,BH
MOV    BLAG,BH
MOV    BUFDEL,1
JMP    SINA2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    反字首處理
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ANTAUT:
CALL    ANALY0
MOV    AX,WORD PTR BUFIN
MOV    BL,AL
SHL    BX,1        
MOV    DI,TAB54[BX]
SHR    DI,1
MOV    BL,AH
MOV    CL,BYTE PTR CG2I4[BX][DI]
JCXZ    AN03
CMP    CL,1AH    
JE    AN04
XCHG    AH,CL
MOV    WORD PTR BUFIN,AX
AN03:
MOV    BUFIN+2,CL
JMP    BODYM1
AN04:
MOV    BLAG,BH
POP    BP
JMP    BE07
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    找到字形資料後之檢查
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BOOK:
MOV    BL,DL
ANALYR:
ADD    SI,BX
SHL    SI,1
SUB    SI,OFFSET DG1BT01
ANALY0:
MOV    AX,DG2
MOV    DS,AX
LODSW
TEST    AH,80H
JZ    ANALY
MOV    DI,DG3
MOV    DS,DI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    存資料內容
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SAVEH:
SHL    AX,1
ADD    AX,OFFSET DG3T8000
MOV    DI,AX
MOV    AX,[DI]
MOV    DI,CG2
MOV    DS,DI
MOV    ES,DI
MOV    BL,BLAG        ;FLAG
MOV    DI,AX
MOV    AX,[DI]
SAVEH5:
PUSH    AX
AND    AX,0F000H
MOV    WORD PTR BFADJB[BX],AX
POP    AX
SAVEH3:
AND    AH,0FH
MOV    WORD PTR XYTB[BX],AX
MOV    CS:WORD PTR BUFHTB[BX],DI
XCHG    CH,BYTE PTR BUFOUT
OR    CH,CH
JNZ    SAVEH2
MOV    CH,[DI+2]
SAVEH2:
MOV    CL,CH
SUB    CH,CH
MOV    WORD PTR INSTB[BX],CX
INC    BX
INC    BX        ;FLAG INC 2
MOV    BLAG,BL
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    分析結構指令
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ANALY:
PUSH    AX
MOV    AX,DG2
MOV    DS,AX
MOV    AX,CG2
MOV    ES,AX
POP    AX
MOV    BL,AH
SHR    BX,1
AND    BL,7EH
JMP    CS:ANYTB[BX]
ANY00:
MOV    DX,AX
ANY01:
JMP    SINA
ANY04:
MOV    DX,AX
SUB    DH,4
ANY05:
JMP    MUTA
ANY08:
SUB    AH,8
CALL    SHFX
JMP    ANY01
ANY0C:
SUB    AH,0CH
CALL    SHFX1
CALL    SHFCOD
MOV    DL,7
AND    DL,DH
MOV    DH,AH
MOV    BUFIN+4,AL
JMP    ANY05
ANY10:
SUB    BP,BP
PUSH    BP
CALL    SHFX1
CALL    SHFCOD
PUSH    DX
MOV    DH,AL
MOV    AX,[DI-3]
CALL    SHLAX
OR    AL,DH
MOV    BP,AX
ANY1010:
CALL    CKAN
CALL    ANALY0
POP    DX
OR    DH,DH
JZ    ANY102
XCHG    DH,BYTE PTR BUFIN+1
ANY102:
MOV    BYTE PTR BUFIN+2,DH
MOV    WORD PTR BUFIN+3,0
POP    DX
ANY103:
JMP    BODYM1
ANY14:
CALL    SHFCOD
MOV    DL,DH
SUB    DH,DH
PUSH    DX
MOV    DH,AL
PUSH    DX
JMP    ANY1010
ANY18:
SUB    DX,DX
ANY180:
AND    AL,1FH
JZ    ANY181
XCHG    ES:BUFIN+2,AL
ANY181:
MOV    ES:BUFIN+3,AL
MOV    ES:BUFIN+4,BH
JMP    ANY01
ANY1C:
SUB    DX,DX
ANY1C0:
PUSH    DX
CALL    SHFCOD
MOV    SI,OFFSET BUFIN
OR    DH,DH
JZ    ANY1C1
XCHG    [SI+2],DH
MOV    [SI+3],DH
INC    SI
ANY1C1:
POP    DX
OR    AL,AL
JZ    ANY1C2
XCHG    [SI+2],AL
MOV    [SI+3],AL
ANY1C2:
JMP    MUTA
ANY44:
MOV    DX,1
JMP    ANY180
ANY48:
MOV    DX,2
JMP    ANY180
ANY4C:
MOV    DX,100H
JMP    ANY180
ANY50:
MOV    DX,101H
JMP    ANY180
ANY54:
MOV    DX,200H
JMP    ANY180
ANY58:
MOV    DX,201H
JMP    ANY180
ANY5C:
MOV    DX,1
JMP    ANY1C0
ANY60:
MOV    DX,2
JMP    ANY1C0
ANY64:
MOV    DX,100H
JMP    ANY1C0
ANY68:
MOV    DX,101H
JMP    ANY1C0
ANY6C:
MOV    DX,200H
JMP    ANY1C0
ANY70:
MOV    DX,201H
JMP    ANY1C0
ANY74:
MOV    DX,300H
JMP    ANY1C0
ANY78:
MOV    DX,301H
JMP    ANY1C0
ANY20:
CALL    SHFCOD
JZ    ANY201
XCHG    ES:BUFIN+1,AL
ANY201:
MOV    ES:BUFIN+2,AL
MOV    SI,OFFSET DG1ET24
MOV    DL,DH
SUB    DH,DH
SHL    DL,1
ADD    SI,DX
SUB    DX,DX
CALL    ANALY0
JMP    ANY103
ANY24:
SHL    AX,1
TEST    AH,4
JNZ    ANY26
AND    AX,3FEH
MOV    SI,OFFSET DG3T2400
MOV    CL,50H
ANY241:
ADD    SI,AX
ADD    SI,AX
PUSH    SI
INC    SI
INC    SI
CALL    DG3ANA
POP    SI
ANY242:
JMP    DG3AN1
ANY26:
TEST    AH,2
JNZ    ANY27
AND    AX,1FEH
MOV    SI,OFFSET DG3T2600
MOV    CL,46H
ANY261:
ADD    SI,AX
ANY262:
CALL    DG3ANB
JMP    DG3ANA
ANY27:
TEST    AH,1
JNZ    ANY278
SUB    AH,AH
MOV    SI,OFFSET DG3T2700
MOV    CL,8AH
ANY2700:
ADD    SI,AX
ANY2701:
CALL    DG3ANB
MOV    CL,46H
JMP    ANY262
ANY278:
OR    AL,AL
JS    ANY27C
SUB    AH,AH
MOV    SI,OFFSET DG3T2780
MOV    CL,48H
JMP    ANY261
ANY27C:
TEST    AL,40H
JNZ    ANY27E
AND    AX,7FH
MOV    SI,OFFSET DG3T27C0
MOV    CL,4CH
ADD    SI,AX
CALL    DG3ANB
JMP    ANY2701
ANY27E:
AND    AX,3FH
MOV    SI,OFFSET DG3T27E0
MOV    CL,4AH
JMP    ANY2700
ANY28:
AND    AH,7
ADD    AX,AX
MOV    CL,52H
MOV    SI,OFFSET DG3T2800
JMP    ANY241
ANY30:
SUB    AH,30H
ADD    AX,AX
ADD    AX,AX
MOV    SI,OFFSET DG3T3000
ADD    SI,AX
MOV    AX,DG3
MOV    DS,AX
PUSH    SI
MOV    SI,[SI]
ADD    SI,OFFSET DG1BT01
CALL    ANALY0
POP    SI
INC    SI
INC    SI
JMP    ANY242
ANY7C:
ADD    AX,AX
MOV    SI,AX
ADD    AX,AX
TEST    AH,8
JNZ    ANY7E
AND    AH,3
MOV    SI,OFFSET DG3T7C00
ADD    SI,AX
MOV    ES:BYTE PTR BUFOUT,4EH
ANY7C0:
CALL    CGDATA
MOV    BYTE PTR BUFOUT,8
CGDATA:
PUSH    SI
MOV    AX,DG3
MOV    DS,AX
MOV    AX,[SI]
CALL    SAVEH
POP    SI
INC    SI
INC    SI
RET
ANY7E:
ADD    AX,SI
AND    AH,1
MOV    SI,OFFSET DG3T7E00
ADD    SI,AX
MOV    ES:BYTE PTR BUFOUT,4AH
CALL    CGDATA
JMP    ANY7C0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    二分法找字
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BINARY:
MOV    AX,DG1
MOV    DS,AX
MOV    AX,DI
SUB    AX,SI
JZ    BINO
MOV    CX,1
BINA:
SHL    CX,1
SHR    AX,1
JNZ    BINA
BINAA:
MOV    BL,2
CMP    BP,[SI]
JBE    BINOK
BINA0:
SHR    CX,1
ADD    SI,CX
CMP    CL,BL
JE    BINP
CMP    SI,DI
JAE    BINA3
CMP    BP,[SI]
JE    BINOK
JA    BINA0
BINA2:
SHR    CX,1
SUB    SI,CX
CMP    CL,BL
JE    BINP
CMP    BP,[SI]
JA    BINA0
JB    BINA2
RET
BINA3:
SUB    SI,CX
JMP    BINA0
BINP:
CMP    BP,[SI]
JE    BINOK
BINO:
STC
BINOK:
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    查是否反字首 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CKAN:
MOV    CX,DG1
MOV    DS,CX
MOV    SI,OFFSET DG1ET24
MOV    DI,OFFSET DG1BT01
MOV    CX,64
JMP    BINAA
CHKANT:
CMP    BYTE PTR INSTB[BX+2],6
JE    CHKANT0
CMP    BYTE PTR INSTB[BX+2],52H
JNE    CHKDLRT
CHKANT0:
INC    BX
INC    BX
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    清緩衝區 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLEBUF:
CALL    XVALUE
SHR    DL,1
CMP    DL,8
JE    CLEBU2
INC    DX
CLEBU2:
MOV    CX,DX
SUB    SI,CX
SUB    SI,CX
MOV    DH,BUFOY+1
INC    DH
CLEBUF1:
MOV    CL,DL
REP    STOSW
ADD    DI,SI
DEC    DH
JNS    CLEBUF1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;     處理字首
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVHH:
MOV    DI,OFFSET BUFHH
INC    BX
CMP    [DI],BH
JE    MOVHH1
ADD    DI,3
MOVHH1:
MOV    [DI],BL
INC    DI
DEC    BX
MOV    AL,BUFHX1+1[BX]
STOSB
MOV    AL,BUFHY1+1[BX]
TEST    BFADJB[BX+1],80H
JNZ    MOVHH2
MOV    DH,AL
CALL    CMPY2
MOV    AL,DH
MOVHH2:
STOSB
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;     檢查各種字形條件
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    查是否有斜
CHKODJA:            ;FOR FRA06
XCHG    AX,DX
DEC    BX
DEC    BX
CALL    CHKODJ
XCHG    AX,DX
CHKODJB:
INC    BX
INC    BX
RET
CHKODJ:
TEST    BYTE PTR BFADJB[BX+3],10H
JZ    CHKODJ0
PUSH    AX
PUSH    BX
MOV    BX,AX        ;X1,X2 OF THE HEAD PART
CMP    SI,5AH
JE    CHKODJ2
CMP    BUFS1+3,1
JE    CHKODJ2
CMP    SI,60H
JE    CHKODJ4
CMP    SI,1
JA    CHKODJ1
JE    CHKODJ2
CMP    BUFF,56H
JE    CHKODJ4
CALL    DIVDX5        ;54,58,94
JMP    SHORT CHKODJE
CHKODJ1:
CMP    SI,4
JE    CHKODJ2
CHKODJ4:
CALL    DIVDX4
JMP    SHORT CHKODJE
CHKODJ2:
CALL    DIVDX3        ;4,A6,A8,AA
CHKODJE:
POP    BX
CMP    AL,BUFDB1
JAE    CHKODJF
MOV    AL,BUFDB1
CHKODJF:
MOV    BUFOJ1[BX+2],AL
POP    AX
CHKODJ0:
MOV    BUFS1+3,BH
MOV    BUFF,BH
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    查是否需要下降?
CHKDOWN0:            ;FOR THOSE Y1,Y2 IN DX
TEST    BFADJB [BX+3],80H
JZ    CHKODJ0
CHKDOWN8:
TEST    BFADJB [BX+3],10H
JZ    CHKODJ0
CHKDOWN3:
CMP    SI,2CH
JE    CHKDOW50
CMP    SI,2EH
JE    CHKDOW50
CMP    DH,BUFY+1
JE    DOWNRET
SUB    DH,BFDY32
RET
CHKDOWN:
CMP    BUF02,1
JBE    CHKDOWN60
CMP    SI,2EH
JE    CHKDOWN5
OR    BL,BL
JZ    CHKODJ0
CHKDOWN5:
PUSH    BX
JMP    SHORT CHKDOWN6
CHKDOWN60:
PUSH    BX
CMP    BUFDEL,52H
JE    DOWNRT
CMP    BFLAGAL,6
JB    CHKDOWN6
JA    CHKDOWN9
OR    BL,BL
JNZ    CHKDOWN6
CHKDOWN9:
INC    BX
INC    BX
CHKDOWN6:
TEST    BFADJB[BX+3],80H
JZ    DOWNRT
CMP    BUF06,1
JE    CHKDOWN7
TEST    BFADJB[BX+3],10H
JZ    DOWNRT
CHKDOWN7:
POP    BX
PUSH    DX
MOV    DH,BYTE PTR BUFHY1+3[BX]
CALL    CHKDOWN3
MOV    BYTE PTR BUFHY1+3[BX],DH
POP    DX
RET
CHKDOW50:
CALL    TEST151
JNZ    CHKDOW51
CALL    CHKBONH6
CHKDOW51:
JMP    SUBDHAW
DOWNRT:
POP    BX
DOWNRET:
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    查是否需要上升?
CHKUP:
CMP    BYTE PTR INSTB[BX+2],52H    ;ANTIHEAD FRA52
JNE    CHKUP0
TEST    BYTE PTR BFADJB[BX+5],20H
JZ    DOWNRET
JMP    SHORT CHKUP00
CHKUP0:
TEST    BYTE PTR BFADJB[BX+3],20H
JZ    DOWNRET
CHKUP00:
PUSH    AX
MOV    AL,BYTE PTR BUFTEM+2
SHR    AL,1
CMP    SI,78H
JE    CHKUP02
CMP    SI,22H        ;FOR FRA22,14,42
JNE    CHKUP01
CHKUP02:
SUB    AL,BUFAW
JNC    CHKUP01
SUB    AL,AL
CHKUP01:
CMP    SI,88H
JE    CHKUP010
CMP    BFLAGAL,6
JB    CHKUP03
OR    BL,BL
JNZ    CHKUP03
CALL    CMP020
JE    CHKUP03
TEST    BFADJB[BX+5],20H
JNZ    CHKUP03
CHKUP010:
SHR    AL,1
CHKUP03:
CALL    TEST151
JNZ    CHKUP04
CALL    YDIVAL
CHKUP04:
SUB    DL,AL
JNS    CHKUP1
MOV    DL,1
CHKUP1:
POP    AX
RET
CHKUPDL:            ;FRA09,FRA8A
MOV    CH,BUFTEM+2
SHR    CH,1
CMP    BYTE PTR XYTB+3[BX],1
JNE    CHKDL0
SUB    AH,CH
SUB    DL,CH
CHKDL0:
CMP    SI,4EH
JNE    CHKDL1
CMP    BUFDEL,8
JNE    CHKDL2
ADD    AH,CH
ADD    DL,CH
CHKDL2:
SHL    CH,1
CHKDL1:
TEST    BYTE PTR BFADJB[BX+3],20H
JZ    CHKDLRT
SHR    CH,1
SUB    DL,CH
CHKDLRT:
RET
CHK012A:
OR    BUFS,80H
CALL    CHK012
RET
CHK012:
CMP    BUFOY+1,2
JA    CMPY1RET
POP    BP
TEST    BUFS,80H
JZ    CHK015
POP    BP
CHK015:
MOV    BL,BUFOY+1
MOV    BP,WORD PTR BUFKSY
MOV    SI,OFFSET BUF012
MOV    DI,OFFSET BUFOUT
CHK014:
MOVSB
DEC    BL
JS    CHK013
DEC    DI
ADD    DI,BP
JMP    CHK014
CHK013:
JMP    CCGRE1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    計算字形橫直向之比例
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DIVAX:
XCHG    AH,AL
SUB    AL,AH
INC    AX
SUB    AH,AH
DIV    CL
OR    AL,AL
JNZ    DIVAX5
INC    AX
SUB    AH,AH
DIVAX5:
PUSH    DX
PUSH    CX
MOV    DX,AX
MOV    AL,AH
SUB    AH,AH
MOV    CH,BL
MOV    BL,BH
SUB    BH,BH
CMP    BL,BH
JNE    DIVAX0        ;VERTICAL
OR    DI,DI
JZ    DIVAX3
CMP    DI,4    ;"TEFH"
JE    DIVAX3
DIVAX1:
MOV    CL,BYTE PTR XYTB[BX]
DIVAX2:
MOV    BL,CH
MUL    CL
POP    CX
DIV    CL
MOV    AH,AL
MOV    AL,DL
POP    DX
RET
DIVAX0:
OR    DI,DI
JZ    DIVAX1
CMP    DI,4
JE    DIVAX1    ;"DTYJ"
CMP    DI,0AH
JE    DIVAX1    ;"HBUI"
CMP    DI,8    ;"JEG"
JE    DIVAX4
DIVAX3:
MOV    CL,BYTE PTR XYTB[BX+2]
JMP    DIVAX2
DIVAX4:
MOV    CL,BUFF
JMP    DIVAX2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    分組處理
DVTB    DW    DVTB00
DW    DVTB02
DW    DVTB04
DW    DVTB06
DW    DVTB08
DW    DVTB0A
DW    DVTB0C
DW    DVTB0E
DVTB066:
CMP    AH,07H
JAE    DVTB660
MOV    AH,7
JMP    SHORT DVTB01
DVTB660:
CMP    AH,0AH
JBE    DVTB01
DEC    AH
JMP    SHORT DVTB01
DVTB02A:
CMP    AH,8
JB    DVTB02A0
DVTB02A1:
JA    DVTB01
INC    AH
JMP    SHORT DVTB01
DVTB02A0:
MOV    AH,8
JMP    SHORT DVTB01
DVTB06E:
CMP    AH,6
JBE    DVTB000
CMP    AH,0AH
JAE    DVTB06E0
CMP    CH,6EH
JE    DVTB06E1
MOV    AH,8
RET
DVTB06E0:
MOV    AH,0AH
RET
DVTB06E1:
CMP    AH,8
JBE    DVTB06E2
DEC    AH
DVTB06E2:
RET
DVTB000:
MOV    AH,7
RET
DVTB044:
CMP    AH,6
JA    DVTB660
INC    AH
JMP    SHORT DVTB01
DVTB01:
SUB    CH,CH
DEC    BX
DEC    BX
JZ    DIVAL1
JMP    DIVLOP
DVTB10:
CMP    AH,6
JA    DVTB01
INC    AH
JMP    SHORT DVTB01
DIVAL1:
PUSH    BP
MOV    CX,AX
MOV    AX,WORD PTR BUFHX1
MOV    BYTE PTR BUFMUT+1,CL
CMP    CL,9
JB    DIVALBX
CMP    BUFWRB,BH
JNE    DIVALBX0
CMP    BUFMAD,BH
JE    DIVALBX
CMP    BUFDBM,7
JAE    DIVALBX
DIVALBX0:
SUB    AL,BUF03
ADD    AH,BUF03
MOV    WORD PTR BUFHX1,AX
DIVALBX:
MOV    BH,BUFDEL
CMP    BH,66H
JB    DIVALB1
CMP    BH,6CH
JA    DIVALB2
JMP    SHORT MODF10
DIVALB2:
CMP    BH,0A4H
JNE    DIVAL12
DIVAL12:
MOV    BH,BUF02
MOV    BUF020,BH
SUB    BH,BH
MOV    BL,BLAG
CALL    DIVAX
MOV    WORD PTR BUFTEM,AX
POP    BP
MOV    CL,CH
MOV    AX,WORD PTR BUFY
CMP    BYTE PTR BUFMUT,1
JNE    DIVAL16
PUSH    DX
MOV    DX,AX
CALL    DY16U
CMP    BUFDEL,0A4H
JNE    DIVAL100
SUB    DH,AL
CALL    DY10D
DIVAL100:
MOV    AX,DX
POP    DX
DIVAL16:
MOV    BH,1
CALL    DIVAX
MOV    WORD PTR BUFTEM+2,AX
MOV    CX,BX
RET
MODF1E:
MOV    BP,OFFSET YDIV8
JMP    MODF2A0
DIVALL:
MOV    BL,BLAG
DEC    BX
DEC    BX
MOV    AX,WORD PTR XYTB[BX]
MOV    BYTE PTR INSTB[BX],BH
DIVLOP:
MOV    DI,WORD PTR INSTB-2[BX]
MOV    WORD PTR BUFDEL,DI
SHR    DI,1
MOV    CL,CS:DELTB[DI]
MOV    DI,CX
JMP    DVTB[DI]
DVTB0C:
DEC    AL
DVTB06:
INC    AH
DVTB02:
MOV    CH,BUFDEL
CMP    BLAG,6
JB    DVTB020
CMP    CH,06H
JE    DVTB020
CMP    CH,60H
JE    DVTB020
INC    BUFKMKR
DVTB020:
INC    BUF02
ADD    AL,BYTE PTR XYTB-2[BX]
CMP    BL,2
JE    DVTB023
CMP    AH,BYTE PTR XYTB-1[BX]
JNB    DVTB023
MOV    AH,BYTE PTR XYTB-1[BX]
DVTB023:
CMP    CH,46H
JNE    DVTB022
DEC    AL
DVTB022:
JMP    DVTB01
DVTB0E:
MOV    DI,4
INC    AH
JMP    SHORT DVTB04
DVTB0A:
DEC    AH
DVTB04:
INC    BUF080
ADD    AH,BYTE PTR XYTB-1[BX]
CMP    BUFDEL,70H
JE    DVTB70
CMP    BUFDEL,48H
JNE    DVTB040
INC    AL
DVTB040:
CMP    AL,BYTE PTR XYTB-2[BX]
JNB    DVTB041
MOV    AL,BYTE PTR XYTB-2[BX]
DVTB041:
JMP    DVTB01
DVTB70:
CMP    AH,5
JAE    DVTB700
INC    AH
JMP    DVTB040
DVTB700:
CMP    AH,0CH
JB    DVTB040
DEC    AH
JMP    DVTB040
DVTB08:
PUSH    AX
MOV    CL,BYTE PTR XYTB[BX]
ADD    CL,BYTE PTR XYTB-2[BX]
MOV    CH,BYTE PTR XYTB-6[BX]
JMP    SHORT DVTB0823
DVTB0821:
MOV    CH,BH        ;BH=0
JMP    SHORT DVTB081
DVTB082:
MOV    CH,BYTE PTR XYTB-4[BX]
DVTB0823:
ADD    CL,CH
DVTB081:
MOV    AX,WORD PTR BUFHX1
CALL    DIVAX
MOV    WORD PTR BUFTEM+4,AX
SUB    DL,DL
MOV    AL,BYTE PTR XYTB-1[BX]
MOV    AH,BYTE PTR XYTB+1[BX]
MOV    BUFF,AL
SUB    AL,AH
JBE    DVTB080
MOV    DL,AL
POP    AX
ADD    AH,DL
DVTB083:
OR    CH,CH
JZ    DVTB0830
SUB    CL,CH
MOV    CH,BH
DVTB0830:
CMP    AL,CL
JAE    DVTB0831
MOV    AL,CL
DVTB0831:
JMP    DVTB01
DVTB080:
MOV    BUFF,AH
POP    AX
JMP    DVTB083
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;    計算各字形之框值
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
FRAXB:
CALL    XYNO
CALL    HE02Y1Y2
MOV    DX,AX
FRAX:
ADD    CH,BYTE PTR XYTB[BX]    ;X VALUE
MOV    AX,WORD PTR BUFTEM    ;AL=YCBR AH=OIOMD
FRAXY:
SUB    CL,CL
FRAXY0:
ADD    CL,AL
DEC    CH
JNZ    FRAXY0
ADD    AH,CL
MOV    CL,AH        ;CL=TQM OJBM
MOV    AL,DL        ;AX=TBLN FQ
ADD    AH,AL
MOV    DL,AH        ;DX=HOVIE FQ
RET
FRAY:
MOV    CH,BYTE PTR XYTB+1[BX]
FRAY1:
MOV    AX,WORD PTR BUFTEM+2
JMP    FRAXY
XYNO:
MOV    AX,WORD PTR BUFHX1[BX]
MOV    WORD PTR BUFHX1+2[BX],AX
XYNO1:
MOV    DX,WORD PTR BUFHY1[BX]
XYNO2:
MOV    WORD PTR BUFHY1+2[BX],DX
RET
XYNO3:
MOV    BUFIN,7FH
JMP    SHORT XYNO2
FRA98:
MOV    SI,1
JMP    SHORT FRA02
FRA54:
SUB    SI,SI
JMP    SHORT FRA02
FRAA0:
CALL    FRAXB
CMP    BFADJX,BH
JE    FRAA01
CMP    BUF02,1
JA    FRAA00
FRAA01:
MOV    BH,BUFTEM
SHR    BH,1
SUB    AH,BH
SUB    DL,BH
SUB    BH,BH
FRAA00:
MOV    SI,2
JMP    SHORT FRA020
FRA028:
CMP    SI,4EH
JE    FRA029
CMP    BUFDEL,8
JNE    FRA029
TEST    BYTE PTR BFADJB[BX+1],20H
JNZ    FRA029
TEST    BYTE PTR BFADJB[BX+3],20H
JZ    FRA029
PUSH    DX
INC    BX
INC    BX
CALL    XYNO1
DEC    BX
DEC    BX
CALL    CHKUP
CALL    XYNO2
POP    DX
FRA029:
RET
FRAA6:
MOV    BUFS1+3,1
FRA00:
CALL    FRAXB
FRA020:
CMP    CL,2
JA    FRA0220
INC    AH
INC    DX
FRA0220:
MOV    BUFS1+4,42H
SHR    CL,1
SHR    CL,1
SHR    CL,1
CALL    ADDCL1
CMP    BYTE PTR INSTB[BX+2],4EH
JE    FRA024
CALL    FRA028
CMP    BUF02,2
JB    FRA025
OR    BL,BL
JNZ    FRA026
CMP    BYTE PTR BUFMUT+1,12
JB    FRA026
SUB    CL,CL
FRA026:
SHR    CL,1
FRA025:
SUB    DL,CL
SUB    AH,CL
CMP    BUFS1+1,5    ;"IAIU"
JNE    FRA024
SUB    DL,CL
SUB    AH,CL
MOV    BUFS1+1,BH
FRA024:
CMP    BYTE PTR INSTB[BX+2],6
JE    FRA021
CMP    BYTE PTR INSTB[BX+2],96H
JE    FRA021
TEST    BYTE PTR BFADJB[BX+3],40H
JNZ    FRA027
FRA021:
OR    SI,SI
JZ    FRA02M3
CALL    SHFCL
SUB    DL,CL
CMP    SI,1        ;FRA98,9A,9C,9E
JNE    FRA02M0
SUB    DL,CL
JMP    SHORT FRA02M0
FRA02M3:
ADD    AH,BUF24
ADD    DL,BUF24
FRA02M:
CMP    AH,DL        ;"KHNBQ,EJJL
JNE    FRA02M0
ADD    DL,BFJB16
OR    SI,SI
JNZ    FRA02M0
DEC    AH
FRA02M0:
CMP    SI,90H
JE    FRA02M2
MOV    CH,BYTE PTR BFADJB[BX+1]
CALL    CHKODJ
FRA02M2:
CMP    SI,4EH
JE    FRA022
CALL    CHKDOWN
CALL    CHKALAH
FRA022:
MOV    WORD PTR BUFHX1[BX],AX
FRA023:
CMP    DL,DH
JBE    FRA0270
XCHG    DL,DH
FRA0270:
XCHG    AX,DX
CALL    CHKALAH
XCHG    AX,DX
MOV    WORD PTR BUFHX1+2[BX],DX
RET
FRA027:
OR    SI,SI
JNZ    FRA02M
CALL    SHFCL
ADD    DL,CL
JMP    FRA02M
FRA01:
SUB    CH,CH
CALL    FRAXB
CALL    FRA02M
JMP    CHKODJB
FRA9E:
MOV    SI,1
JMP    SHORT FRA04
FRA56:
SUB    SI,SI
MOV    BUFF,56H
FRA04:
CALL    MOVDXHY1
CALL    DY8U
FRA042:
CMP    BUFOJ1[BX+2],BH
JE    FRA043
CALL    DY32U
FRA043:
MOV    WORD PTR BUFHY1[BX],DX
RET
FRAAA:
MOV    BUFS1+3,1
JMP    SHORT FRA5A
FRA9C:
MOV    SI,1
JMP    SHORT FRA5A
FRA58:
SUB    SI,SI
FRA5A:
CALL    MOVDXHY1
CALL    DY16U
JMP    FRA042
FRAA8:
MOV    BUFS1+3,1
JMP    SHORT FRA92
FRA9A:
MOV    SI,1
JMP    SHORT FRA92
FRA94:
SUB    SI,SI
FRA92:
CALL    MOVDXHY1
SUB    DH,BFJB24
JMP    FRA042
FRA06:
MOV    BUF06,1
INC    BFANH
CALL    FRAXB
XCHG    DX,AX
MOV    AL,AH
SUB    AL,CL
JNS    FRA600
MOV    AL,1
FRA600:
MOV    DH,AL
SHR    CL,1
SHR    CL,1
SHR    CL,1
SHR    CL,1
CMP    SI,96H
JE    FRA960
FRA060:
CMP    SI,50H
JE    FRA500
OR    BX,BX
JZ    FRA062
CMP    BUF02,2        ;"QRSN
JAE    FRA063
FRA062:
ADD    DH,CL
ADD    AL,CL
FRA063:
TEST    BYTE PTR BFADJB[BX+1],40H
JZ    FRA501
CALL    ADDCL1
ADD    AL,CL
FRA501:
CALL    CHKODJA
CMP    BUF02,2
JB    FRA061
OR    BL,BL
JZ    FRA061
CALL    CHKODJ
FRA061:
CALL    FRA022
JMP    CHKDOWN
FRA500:
SUB    AL,CL
FRA5000:
JMP    FRA501
FRA960:
SUB    DH,CL
JMP    FRA5000
FRAB0:
MOV    SI,72H
FRA5E:                ;DIFFERENT WITH FRA08 IN CHKUP
MOV    BUFS1+1,3
FRA08:
MOV    BUFDEL,8
FRA0800:
CALL    XYNO
CALL    FRAY
PUSH    BX
CALL    CHKANT
CALL    CHKUP
POP    BX
JMP    SHORT FRA0822
FRA8E:
CALL    FRA86
MOV    CH,BUFTEM+2
SHR    CH,1
SUB    AH,CH
FRA8E0:
SUB    DL,CH
JMP    FRA0824
MOVHH086:
CALL    MOVHH
JMP    SHORT FRA086
FRA5C:
MOV    BUFS1+1,1
FRA86:
MOV    BUFDEL,8
FRA086:
CALL    XYNO
FRA081:
CALL    FRAY
FRA0822:
CALL    MOVCLTEM
CMP    SI,70H
JE    FRA0827
CMP    BUFS1+3,2    ;FOR 0.5 Y
JNE    FRA0823
SUB    AH,CL
SUB    DL,CL
FRA0823:
MOV    CH,BUFS1+1
OR    BX,BX
JNZ    FRA0827
CMP    BUF080,1
JBE    FRA0827
ADD    AH,CL
ADD    DL,CL
FRA0827:
OR    CH,CH
JZ    FRA082
CMP    CH,3
JE    FRA085E
ADD    DL,CL
CMP    CH,1
JE    FRA082
TEST    BYTE PTR BFADJB[BX+3],20H
JNZ    FRA082
ADD    DL,CL
FRA082:
MOV    CH,BYTE PTR INSTB[BX+2]        ;CHECK NEXT INS.
CMP    CH,0CH
JE    FRA083
CMP    CH,0EH
JE    FRA083
MOV    CH,BFADJB[BX+1]
OR    CH,CH
JNS    FRA0821
TEST    CH,10H
JZ    FRA0821
SUB    AH,BFDY32
FRA0821:
MOV    CH,BL        ;LAST ONE OF BODY PART
ADD    CH,4
CMP    CH,BFLAGAL
JNE    FRA0820
CMP    BUFKMKR,1    ;FIRST HEAD BELONGS TO KMKR DELETION
JNE    FRA0820
PUSH    SI
PUSH    AX
MOV    SI,WORD PTR INSTB[BX-2]
CMP    BUF080,2
JB    FRA08A
MOV    AX,WORD PTR BUFHX1[BX-2]    ;LTWI
FRA08A:
CALL    CHKODJ
POP    AX
POP    SI
FRA0820:
CALL    HE08Y1Y2
FRA0824:
MOV    WORD PTR BUFHY1[BX],AX
SUB    CH,CH
MOV    BUFS1+1,CH
JMP    XYNO2
FRA083:
CMP    BFLAGAL,6        ;CONFIRM THERE IS NEXT INS.
JB    FRA0821
SUB    CL,BFDY32
ADD    DL,CL
ADD    AH,CL
JMP    FRA0821
FRA085E:
CALL    ADDCL1
MOV    CH,CL
SHR    CH,1
CMP    SI,78H
JE    FRA0878
CMP    SI,72H
JNE    FRA085E2
FRA0878:
SUB    AH,CH
CALL    TEST151
JNZ    FRA0879
SUB    AH,BUFAW    ;"HXWKS
FRA0879:
OR    CH,CH
JNZ    FRA085E4
MOV    CH,CL
FRA085E4:
SUB    DL,CH
FRA085E2:
CMP    SI,44H
JNE    FRA085E3
OR    CH,CH
JNZ    FRA0844
INC    CH
FRA0844:
ADD    AH,CH
ADD    DL,CL
FRA085E3:
CMP    BUF080,2
JAE    FRA085E8
MOV    CH,CL
JMP    SHORT FRA085E6
FRA085E7:
TEST    BFSTYLE,10H
JNZ    FRA085E0
CMP    CH,BUFDBM
JAE    FRA085E0
MOV    CH,BUFDBM
FRA085E0:
CMP    CH,BFDY8
JBE    FRA085E9
MOV    CH,BFDY8
FRA085E9:
RET
FRA085E8:
CALL    FRA085E7
FRA085E1:
CMP    SI,44H
JE    FRA085E6
ADD    CH,BUFAW
FRA085E6:
ADD    DL,CH
CMP    AH,DL
JB    FRA085EA
JE    FRA085E5
MOV    DL,AH
FRA085E5:
CALL    TEST151
JZ    FRA085EA
DEC    AH
FRA085EA:
CALL    ADDDLWGF
SUB    DL,BUFWRB
MOV    BYTE PTR BUF5E[BX],5EH
FRA701:
RET
FRA70:                ;FOR "T"
CALL    FRA08
SUB    AH,BUFWGF
MOV    CH,BUFTEM+2
INC    CH        ;NEW
SHR    CH,1
SHR    CH,1
CMP    CH,BUFWG2
JBE    FRA701
SUB    AH,CH
CALL    CMP020
JNE    FRA702
JMP    FRA8E0
FRA702:
JMP    FRA0824
FRA8A:
CALL    FRA86
CALL    CHKUPDL
SUB    AH,CH
CMP    BYTE PTR INSTB[BX+2],46H
JNE    FRA8A0
SHR    CL,1
SUB    DL,CL
SUB    AH,CL
FRA8A0:
CALL    FRA0824
JMP    SHORT FRA0A1
FRA0A:
CALL    FRA08
FRA0A1:
MOV    DX,WORD PTR BUFHX1[BX]
CALL    YDIV16
MOV    WORD PTR BUFHX1[BX],DX
RET
FRA40:
MOV    BUFS1+3,2
FRA80:
MOV    BUFAE,2
MOV    SI,0EH
JMP    SHORT FRA0CA
FRA8C:
SUB    SI,SI
FRA0C:
OR    BL,BL
JNZ    FRA0CA
MOV    BUFS1+6,1
FRA0CA:
CALL    FRA86
MOV    AL,BYTE PTR BUFTEM+2
MOV    CH,BYTE PTR BFADJB[BX+3]
CMP    SI,0EH
JE    FRA0E0
TEST    CH,20H
JNZ    FRA0C0
SUB    DL,BFJB24
JMP    SHORT FRA0C2
FRA0C0:
MOV    AH,AL
SHR    AH,1
SHR    AH,1
ADD    DL,AH
FRA0C1:
OR    BX,BX    ;"JVME
JNZ    FRA0C10
CALL    CMP020
JE    FRA0C10
TEST    CH,20H
JZ    FRA0C10
SUB    AL,BUFDB1
JMP    SHORT FRA0C11
FRA0E1:
OR    BX,BX
JNZ    FRA0E2
CALL    CMP020
JNE    FRA0C10
FRA0E2:
CMP    BUF080,1
JA    FRA0C10        ;"TJCN"
OR    AH,AH
JNZ    FRA0E4
ADD    AH,BFJB16
FRA0E4:
ADD    AL,AH
SUB    DL,AH        ;"EJCN","JCLB"
FRA0C10:
CALL    TEST151
JZ    FRA0C11
DEC    DX
JNS    FRA0C11
SUB    DL,DL
FRA0C11:
CALL    YDIVAL
SUB    DL,AL
JNS    FRA0C2
MOV    DL,1
FRA0C2:
CALL    XYNO2
CMP    BYTE PTR INSTB[BX+2],02H
JE    FRA0C3
MOV    BUF0E,0EH        ;FOR FRA0C,0E,74
OR    SI,SI            ;FRA8C
JZ    FRA0CRT
FRA0C3:
MOV    DX,WORD PTR BUFHX1+2[BX]
CALL    YDIV32
JMP    FRA023
FRA0CRT:
RET
FRA0E0:
MOV    AH,AL
SHR    AH,1
CMP    BUFAE,2        ;FRA80
JE    FRA800
SHR    AH,1
TEST    CH,20H
JNZ    FRA0E1
FRA0E3:
SUB    AL,AH
CMP    BUFS1+3,2
JNE    FRA0E5
SUB    AL,AH
FRA0E5:
JMP    FRA0C1
FRA88:
CALL    FRA08
JMP    FRA0C3
FRA800:
ADD    AL,AH
SHR    AH,1
TEST    CH,20H
JZ    FRA0E3
ADD    AL,AH
ADD    AL,AH
JMP    FRA0E5
FRA74:
MOV    BUFLAG,2
CALL    FRA08
ADD    DL,BFDY32
MOV    AL,BUFTEM+2
SHR    AL,1
JMP    FRA0E5
FRA76:
CALL    FRA5E
JMP    FRA0C3
FRAAE:
MOV    SI,0CH
CALL    FRA0C
JMP    FRA0C3
FRA66:
MOV    SI,72H
FRA44:
MOV    BUFS1+1,3
FRA68:            ;BODY PART WILL UP
CALL    MOVHH
CALL    FRA0800
JMP    SHORT FRA102
FRA42:
CALL    MOVHH
CALL    XYNO
CALL    FRA22Y
CALL    BO08Y1Y2
MOV    CH,BUFWGF
SHL    CH,1
ADD    DL,CH
CALL    TEST151
JZ    FRA420
INC    DX
INC    DX
FRA420:
JMP    SHORT FRA104
FRA6A2:
SUB    AH,BUFDBM
SUB    AH,BUFAW
CALL    SUBDLAW
CALL    FRA0824
JMP    SHORT FRA6A0
FRA6A:                ;DIFFERED IN DIVALL
CALL    LOD5E
FRA38:
CALL    MOVHH086
CMP    SI,6CH
JE    FRA104
CMP    SI,6AH
JNE    FRA6A0
CMP    BUFOH,BH
JNE    FRA6A2
FRA6A0:
CALL    ADDDLWGF
PUSH    BX
CALL    CHKANT
TEST    BYTE PTR BFADJB[BX+3],20H
JZ    FRA1041
CMP    CL,BFADJY
JAE    FRA1040
JMP    SHORT FRA1042
FRA1041:
ADD    DL,BFDY32
FRA1042:
ADD    DL,BUFMAD
FRA1040:
POP    BX
FRA104:
CALL    XYNO2
FRA102:
OR    BX,BX
JNZ    FRA1023
CALL    CMP020
JE    FRA1023
MOV    BUFS1+1,5
FRA1023:
MOV    BUF10,1
MOV    CH,BFADJX1
SUB    CH,BFJB24
MOV    DX,WORD PTR BUFHX1[BX]
CMP    SI,38H
JE    FRA101
CALL    DY6D
FRA1020:
ADD    DL,CH
CMP    SI,10H
JE    FRA1021
SHR    AL,1
SHR    AL,1
JNZ    FRA1022
MOV    AL,BFJB32
FRA1022:
ADD    DL,AL
FRA1021:
PUSH    BX
CALL    CHKANT
TEST    BYTE PTR BFADJB[BX+3],40H
POP    BX
JZ    FRA103
ADD    DL,BFJB16
OR    BX,BX
JNZ    FRA103
SUB    DH,CH
FRA103:
MOV    BUFS1+1,BH
MOV    BUF02,1
FRA105:
JMP    FRA023
FRA101:
CALL    DY5D
SHR    AL,1
JMP    FRA1020
FRA3A:
CALL    FRA02
CALL    MOVHH
DEC    DI
DEC    DI
MOV    AL,DH
STOSB
INC    DI
CALL    XYNO1
JMP    FRA081
FRA84:
MOV    SI,44H
CALL    FRA44
SUB    CH,CH
JMP    SHORT FRA820
FRA82:
CALL    MOVHH
CALL    FRA74
FRA820:
INC    BUF02
CALL    TRAS081
CALL    CHKBOND5
FRA821:
CALL    CHKODJ
JMP    FRA105
FRA12:
CALL    MOVHH
CALL    FRA0C
JMP    FRA820
FRA14:
MOV    SI,0EH
CALL    FRA180
MOV    BUF0E,0EH
JMP    FRA821
FRA16:
CALL    FRA38
MOV    AL,BUFTEM+2
SHL    AL,1
ADD    BYTE PTR BUFHY1+1[BX],AL
RET
FRA6E:
MOV    BUFS1+1,1
CALL    MOVHH
CALL    FRA08
CALL    CHKDOWN0
CALL    ADDDLWGF
CALL    XYNO2
CALL    TRAS081
JMP    SHORT FRA181
FRA180:
CALL    MOVHH
CALL    FRA0800
JMP    TRAS081
FRA18:
CALL    FRA180
MOV    BUFIN,7EH
INC    BUF02
FRA181:
MOV    BYTE PTR BUFOJ1+1[BX],CL
SUB    DH,CL
CMP    SI,1CH        ;FRA1C
JNE    FRA182
MOV    BUFIN,81H
CALL    TEST151
JNZ    FRA182
SUB    DH,CL
FRA182:
SUB    DL,CL
CMP    SI,36H        ;FRA36
JE    FRA360
CMP    SI,6EH
JNE    FRA184
TEST    BYTE PTR BFADJB[BX+3],40H
JNZ    FRA184
CALL    ADDDHDBM
FRA184:
JMP    FRA023
FRA1A:
INC    BUF1A
FRA3C:
MOV    BUF26,4
MOV    BUFS1+1,2
CALL    TRAS08H
CALL    DY10U
JMP    FRA181
FRA360:
CALL    YDIV10
MOV    CH,AL
JMP    FRA1021
FRA36:
MOV    BUFS1+1,1
FRA1C:
INC    BUF02
CALL    MOVHH086
CALL    TRAS081
CMP    SI,36H
JE    FRA1C2
CMP    BUF02,1
JE    FRA1C1-3
FRA1C2:
MOV    BUF26,4
CALL    DY10U
CALL    FRA1E3
FRA1C1:
MOV    AX,WORD PTR BUFHY1[BX]
CMP    BUFDEL,08H
JNE    FRA1C0
CALL    FRA522
MOV    DX,AX
CALL    FRA043
FRA1C0:
INC    BX
INC    BX
CALL    MOVDXHY0
CALL    FRA22Y
CALL    DY8U
JMP    FRA043
FRA1E3:
SHR    CL,1
MOV    AL,CL
SHR    AL,1
ADD    CL,AL        ;CL=3/4dX
JMP    FRA181
FRA24:
CALL    XYNO
CALL    FRA2E1
CALL    TRAS081
SHR    CL,1
JMP    FRA181
FRAA4:
CALL    MOVHH
CALL    XYNO
CALL    DY6D
CALL    DY10U
TEST    BYTE PTR BFADJB[BX+3],20H
JNZ    FRA2A1
SHR    AL,1
SHR    AL,1
ADD    DL,AL
JMP    SHORT FRA2A1
FRA2A:
CALL    MOVHH
CALL    FRAB0
MOV    BUFDEL,2AH
MOV    BYTE PTR BUF5E[BX],BH
CALL    DY16U
FRA2A1:
CALL    ADDDLIST
CALL    FRA2A0
CALL    XYNO3
MOV    DX,WORD PTR BUFHX1[BX]
CALL    YDIV5
CMP    BUFKMKR,1
JNE    FRA2A2
OR    BL,BL
JZ    FRA2A2
FRA2A3:
CALL    YDIV16
FRA2A2:
JMP    FRA023
FRA28:
MOV    SI,26H
CALL    FRA26
CALL    XYNO1
CALL    DY16U
JMP    XYNO2
FRA7E:
CALL    XYNO
MOV    CH,BUFTEM+2
SHR    CH,1
ADD    DL,CH
MOV    CH,BH
CALL    FRA62Y0
JMP    SHORT FRA62X1
FRA62:
CALL    XYNO
CALL    HE02Y1Y2
CALL    CHKDOWN
CALL    XYNO2
JMP    SHORT FRA62X
FRA7C:
CALL    FRA62Y
JMP    SHORT FRA62X
FRA20:
CALL    MOVHH086
CALL    CHKDOWN0
CALL    FRA62Y3
MOV    SI,26H
JMP    FRA62X1
FRA78:
CALL    MOVHH
CALL    FRA5E
CALL    ADDDLWGF
CALL    FRA62Y0
CMP    SI,64H
JE    FRA62X
JMP    SHORT FRA62X1
FRA62Y:
CALL    MOVHH086
FRA62Y3:
TEST    BFADJB [BX+3],20H
JNZ    FRA62Y0
ADD    DL,BFDY32
FRA62Y0:
CALL    DY16U
CMP    SI,7AH
JNE    FRA62Y2
SUB    DH,BFADJY
FRA62Y2:
JMP    XYNO2
FRA26:
CALL    XYNO
CALL    HE02Y1Y2
MOV    BUFS1+4,42H
FRA62X:
MOV    BUF26,1
FRA62X1:
DEC    BUF020
JNS    FRA62X2
MOV    BUF020,BH
FRA62X2:
CALL    TRAS081
SHR    CL,1
SUB    DL,CL
SUB    DH,CL
CMP    SI,78H
JE    FRA62X3
CMP    SI,26H
JE    FRA62X0
SHR    CL,1
SHR    CL,1
SUB    DH,CL
CMP    SI,7CH
JNE    FRA62X5
MOV    BUF0E,0EH
SHR    CL,1
SUB    DL,BFADJX
JMP    SHORT FRA62X6
FRA62X5:
CMP    SI,7EH
JNE    FRA62X0
SHR    CL,1
ADD    DL,CL
FRA62X6:
SUB    DH,CL
FRA62X0:
CALL    CHKODJ
FRA62X4:
JMP    FRA023
FRA62X3:
CALL    YDIV10
SUB    DH,BFADJX
CALL    CHKDOWN
JMP    SHORT FRA62X4
FRA22:
CALL    MOVHH
CALL    XYNO
PUSH    AX
TEST    BFSTYLE,10H
JNZ    FRA223
SUB    DH,BFADJX1
CALL    TEST151
JZ    FRA223
DEC    DH
FRA223:
CALL    DY10U
CALL    ADDDLAW
CALL    FRA22Y
PUSH    SI
CALL    FRA2A0
POP    SI
CALL    XYNO3
POP    DX
CALL    DIVDY6
CALL    XDIVDBM
ADD    DL,AL
SUB    DH,AL
CMP    SI,1EH
JNE    FRA220
SHR    AL,1
ADD    DH,AL
TEST    BYTE PTR BFADJB[BX+3],40H
JZ    FRA220
ADD    DL,AL
FRA220:
OR    BL,BL
JZ    FRA62X4
INC    BUF02
JMP    FRA62X4
FRA22Y:
CALL    MOVCLTEM
ADD    DL,CL
PUSH    BX
PUSH    AX
MOV    BX,AX
CALL    DTCDOT
CMP    SI,22H
JNE    FRA22Y1
MOV    AH,BFADJX1
FRA22Y1:
ADD    DL,AH
POP    AX
POP    BX
PUSH    SI
MOV    SI,22H
CALL    CHKUP
POP    SI
RET
FRAAC:
CALL    MOVHH
CALL    FRA98
MOV    SI,2CH
JMP    SHORT FRA2C0
FRAA2:
CALL    MOVHH
CALL    FRA98
MOV    SI,2EH
JMP    SHORT FRA2C0
FRAB4:
MOV    BUFA,40H
JMP    SHORT FRAB2+5
FRAB2:
MOV    BUFA,80H
MOV    SI,2EH
FRA2C:
CALL    MOVHH
DEC    BUF02
CALL    FRA02
INC    BUF02
FRA2C0:
CALL    DIVDY16
CMP    BUFA,0
JNE    FRAB20
CALL    XDIVDBM
FRAB20:
ADD    DL,AL
CMP    SI,2EH
JNE    FRA2E4
TEST    BUFA,40H
JNZ    FRA2E4
SUB    DH,AL
SUB    DH,AL
FRA2E4:
CMP    BUF02,2
JB    FRA2E40
OR    BL,BL
JNZ    FRA2E40
ADD    DL,AL
FRA2E40:
CALL    FRA023
FRA2E1:
PUSH    SI
MOV    SI,2EH
MOV    DH,BUFHY1+1[BX]
MOV    BUFHY2+1[BX],DH
CALL    CHKDOWN
MOV    DX,WORD PTR BUFHY2[BX]
CALL    DY10U
CMP    DH,BFDY2    ;NMLMI
JA    FRA2E5
SUB    DH,AL
FRA2E5:
POP    SI
CMP    SI,2CH
JE    FRA2E2
TEST    BUFA,80H
JNZ    FRA2E2
CALL    DY32U
CMP    SI,90H
JNE    FRA2E2
SHL    AL,1
SUB    DH,AL
FRA2E2:
MOV    BUFA,BH
OR    BL,BL
JZ    FRA2E3
CMP    BUF02,2
JAE    FRA2E30
FRA2E3:
CALL    SUBDHAW
FRA2E30:
MOV    BUFDEL,2EH
JMP    XYNO2
FRA320:
ADD    DL,CH
JMP    SHORT FRA3E0
FRA32:
CALL    XYNO
PUSH    AX
MOV    AL,BFADJB[BX+1]
OR    AL,AL
JS    FRA300
CALL    CMPY2
FRA300:
TEST    AL,20H
JZ    FRA301
CALL    CMPY1
FRA301:
CALL    FRAY
MOV    BUFHY6+1,DH
MOV    CH,BYTE PTR BUFTEM+2
MOV    CL,CH
CMP    SI,32H
JE    FRA320
JB    FRA3E0
SHR    CH,1
SUB    AH,CH
SUB    DL,CH
MOV    CH,CL
FRA3E0:
ADD    CH,CL
CMP    SI,3EH
JE    FRA3E1
ADD    CH,CL
CMP    SI,32H
JNE    FRA3E1
ADD    CH,CL
ADD    CH,CL
FRA3E1:
ADD    CH,BUFTEM+3
MOV    CL,CH
SUB    DX,CX
MOV    BUFHY6,DH
CALL    CHKDOWN0
CMP    SI,32H
JBE    FRA3E2
ADD    DL,BFADJY
FRA3E2:
CALL    CHKUP
CALL    FRA0824
POP    DX
CMP    SI,3EH
JE    FRA3E4
JMP    FRA2A3
FRA3E4:
JMP    FRA023
FRA48:
CALL    XYNO
CALL    FRA0A1
PUSH    BX
ADD    BL,12
CALL    XYFQ
POP    BX
RET
FRA46:
MOV    BUFS1+4,46H
CALL    XYNO
CALL    HE02Y1Y2
XYFQ:
MOV    AX,WORD PTR BUFHX1[BX]
MOV    DH,AH
SUB    AH,AL
SHR    AH,1
ADD    AH,AL
MOV    DL,AH
TEST    BYTE PTR BFADJB[BX+3],40H
JZ    XYFQ0
SUB    AH,BFADJX
ADD    DL,BFADJX
XYFQ0:
JMP    FRA02M
FRA4A:
MOV    BUF26,2
MOV    BUFS1+4,42H
PUSH    AX
PUSH    BX
MOV    DI,OFFSET XYTB
ADD    DI,BX
FRA4A2:
PUSH    WORD PTR BUF03
MOV    BUF03,BH
CALL    DIVAL1
POP    WORD PTR BUF03
POP    BX
POP    AX
PUSH    WORD PTR BUFHX1[BX]
CALL    FRA01
CALL    FRA01
CALL    FRA09
MOV    WORD PTR BUFHY1[BX-4],AX
CALL    FRA4E1
DEC    BX
DEC    BX
CALL    FRA4E1
POP    WORD PTR BUFHX1+4[BX]
FRA4A1:
MOV    BL,BLAG
SUB    BL,4
FRA4A4:
POP    AX
POP    AX
JMP    EXBACK
FRA4E:
MOV    BUF26,2            ;FOR "VEKS"
CALL    XYNO
MOV    DX,AX
MOV    CH,BYTE PTR XYTB[BX]
MOV    AX,WORD PTR BUFTEM+4
PUSH    WORD PTR BUFHX1[BX]
CALL    FRAXY
MOV    BUFS1+3,1
CALL    FRA020
INC    BX
INC    BX
CALL    FRA09
CALL    FRA4E1
POP    WORD PTR BUFHX1+2[BX]
INC    BUF02
JMP    FRA4A4
FRA4E1:
TEST    BFADJB[BX-1],20H
JZ    FRA4E2
CALL    CMPY1
FRA4E2:
MOV    BYTE PTR BUFHY1-2[BX],DL
RET
FRA4C:
CALL    XYFQ
ADD    BL,4
CALL    FRA022
ADD    BL,8
CALL    XYFQ
ADD    BL,4
MOV    WORD PTR BUFHX1-2[BX],AX
MOV    AX,DX
CALL    FRA022
JMP    FRA4A1
FRA52:
MOV    BUF1A,52H
CALL    XYNO
CALL    FRAY
INC    BX
INC    BX
CALL    HE08Y1Y2
CALL    BO08Y1Y2+5
DEC    BX
DEC    BX
XCHG    AX,DX
MOV    AL,AH
SUB    AL,CL
MOV    DH,AL
TEST    BFADJB[BX+3],80H
JZ    FRA521
CALL    CHKDOWN8
JMP    SHORT FRA520
FRA522:
TEST    BYTE PTR BFADJB[BX+1],20H
JZ    FRA52RT
CALL    MOVCLTEM
SUB    AL,CL
FRA52RT:
RET
FRA521:
CALL    FRA522
FRA520:
CMP    AL,DH
JNE    FRA524
INC    AX
FRA524:
JMP    FRA0824
FRA09:
CALL    XYNO
PUSH    DX
MOV    CH,BYTE PTR XYTB+1[BX]        ;BODY, BODY, NO. OF *Y
CMP    CH,BYTE PTR XYTB-1[BX]        ;BODY, HEAD, NO. OF *Y
JAE    FRA091
MOV    CH,BYTE PTR XYTB-1[BX]
FRA091:
CALL    FRAY1
CALL    CHKUPDL
CALL    FRA0821
MOV    WORD PTR BUFHY1[BX-2],AX
POP    DX
RET
CG1    ENDS
END

上一頁 目錄 下一頁