M EQU Byte Ptr 0[BX] TITLE 'doattrmx - PHASE 2 SET ATTRIBUTE OPCODES ' DGROUP GROUP DATA ;----------------------------------------------------------------------------* ; Revision : Nov. 21, 1983 File : "DOATTRMX.A86" Version 1.0 * ; * ;***** MODE NOTES : ********************************************************* ; * ; 11/14 1. Character height CHRHT = NDTXSZ * 8 * ; 2. Character Width CHRSZ = NDTXSZ * 6 * ; May-04-83 rk * ; add writing mode support * ; Nov-21-83 rhk * ; Fix Writing mode for color 0 * ;***** MODE NOTES : ********************************************************* dseg EXTRN NDLNSZ:byte, NDTXSZ:byte, NDMKSZ:byte, NDTXRT:byte EXTRN WKID:byte, NDLNTY:byte, NDLNCO:byte, NDMKTY:byte EXTRN NDMKCO:byte, NDTXTY:byte, NDTXCO:byte EXTRN NDINTY:byte, NDFITY:byte, NDFICO:byte EXTRN LSTYLE:word, CHRSZ:byte, CHRHT:byte, ndrite:byte extrn dline:byte, dfill:byte, dtext:byte, dmark:byte, dcell:byte extrn nopflg:byte, ritflg:byte, bitmask:byte, rflg:byte extrn bmask:byte extrn rflgl:byte, rflgt:byte, rflgm:byte, rflgf:byte extrn bmaskt:byte, bmaskf:byte, bmaskl:byte, bmaskm:byte cseg PUBLIC SELNTY, SELNSZ, SELNCO, SEMKTY, SEMKSZ, SEMKCO PUBLIC SETXSZ, SETXRT, SETXTY, SETXCO PUBLIC SEFITY, SEFINX, SEFICO, serite EXTRN GETBYT:near, GETNXT:near ;----------------------------------------------------------------------------+ ; Set Char Height Opcode = 12 + ;----------------------------------------------------------------------------+ SETXSZ: ; Get Character size Indicator (1-16) from OBJLST CALL GETNXT ;Returns NDTXSZ in MOV Byte Ptr NDTXSZ,AL MOV CH,AL RCL AL,1 RCL AL,1 RCL AL,1 MOV Byte Ptr CHRHT,AL ;Character height : NDTXSZ * 8 SUB AL,CH SUB AL,CH ;Character width : NDTXSZ * 6 MOV Byte Ptr CHRSZ,AL RET ;----------------------------------------------------------------------------+ ; Set Char Up Vector Opcode = 13 + ;----------------------------------------------------------------------------+ SETXRT: ; Get Character rotation indicator (0-3) from OBJLST CALL GETNXT ;Returns NDTXRT in MOV Byte Ptr NDTXRT,AL RET ;----------------------------------------------------------------------------+ ; Set Color Rep Opcode = 14 ;----------------------------------------------------------------------------+ ;*** NOACT RET ;----------------------------------------------------------------------------+ ; Set Polyline Type Opcode = 15 ;----------------------------------------------------------------------------+ SELNTY: ; Get Line style bit pattern No. from OBJLST CALL GETNXT MOV Byte Ptr NDLNTY,AL ;Current Device Line Style requested ; Set up requested Line Style Pattern in LSTYLE SELN01: MOV BX,(Offset LNTBL) MOV DL,AL MOV DH,0 ; LAHF ADD BX,DX ; SAHF ; LAHF ADD BX,DX ; RCR SI,1 ; SAHF ; RCL SI,1 MOV DL,M ; LAHF INC BX ; SAHF MOV DH,M MOV Word Ptr LSTYLE,DX RET ;----------------------------------------------------------------------------+ ; Set Polyline Width Opcode = 16 ;----------------------------------------------------------------------------+ SELNSZ: ; Get Line Size Indicator from Objlst ;*** CALL GETNXT ;*** STA NDLNSZ RET ;----------------------------------------------------------------------------+ ; Set Polyline Color Opcode = 17 ;----------------------------------------------------------------------------+ SELNCO: ; Get the Color Index from OBJLST CALL GETNXT MOV Byte Ptr NDLNCO,AL cmp al, 0 ; check color jne sel1 cmp rflg, 0 ; Check writing mode js sel1 ; handle XOR mode, new bit = old bit XOR 1 ; If color = 0, and writing mode is Replace, Set, Clear mov rflgl, 1 ; the logical write operation is 'AND' mov bmaskl, 11111110b ; new bit = old bit AND 0 jmp sel9 ; if color = 1, then use the logical write flag and bit mask ; already set by the last set writing mode function sel1: mov al, rflg mov rflgl, al mov al, bmask mov bmaskl, al sel9: ret ;----------------------------------------------------------------------------+ ; Set Polymarker Typ Opcode = 18 ;----------------------------------------------------------------------------+ SEMKTY: ; Get ASCII MAKER SYMBOL from OBJLST CALL GETNXT MOV Byte Ptr NDMKTY,AL RET ;----------------------------------------------------------------------------+ ; Set Polymarker Scl Opcode = 19 ;----------------------------------------------------------------------------+ SEMKSZ: ; Get Maker Size factor from OBJLST CALL GETNXT MOV Byte Ptr NDMKSZ,AL RET ;----------------------------------------------------------------------------+ ; Set Polymarker Clr Opcode = 20 ;----------------------------------------------------------------------------+ SEMKCO: CALL GETNXT MOV Byte Ptr NDMKCO,AL cmp al, 0 ; check color jne sem1 cmp rflg, 0 ; Check writing mode js sem1 ; handle XOR mode, new bit = old bit XOR 1 ; If color = 0, and writing mode is Replace, Set, Clear mov rflgm, 1 ; the logical write operation is 'AND' mov bmaskm, 11111110b ; new bit = old bit AND 0 jmp sem9 ; if color = 1, then use the logical write flag and bit mask ; already set by the last set writing mode function sem1: mov al, rflg mov rflgm, al mov al, bmask mov bmaskm, al sem9: RET ;----------------------------------------------------------------------------+ ; Set Text Font Opcode = 21 ;----------------------------------------------------------------------------+ SETXTY: ;*** CALL GETNXT ;*** STA NDTXTP RET ;----------------------------------------------------------------------------+ ; Set Text Color Opcode = 22 ;----------------------------------------------------------------------------+ SETXCO: CALL GETNXT MOV Byte Ptr NDTXCO,AL cmp al, 0 ; check color jne set1 cmp rflg, 0 ; Check writing mode js set1 ; handle XOR mode, new bit = old bit XOR 1 ; If color = 0, and writing mode is Replace, Set, Clear mov rflgt, 1 ; the logical write operation is 'AND' mov bmaskt, 11111110b ; new bit = old bit AND 0 jmp set9 ; if color = 1, then use the logical write flag and bit mask ; already set by the last set writing mode function set1: mov al, rflg mov rflgt, al mov al, bmask mov bmaskt, al set9: RET ;----------------------------------------------------------------------------+ ; Set Fill Int Style Opcode = 23 ;----------------------------------------------------------------------------+ SEFITY: CALL GETNXT MOV Byte Ptr NDFITY,AL RET ;----------------------------------------------------------------------------+ ; Set Fill Sty Index Opcode = 24 ;----------------------------------------------------------------------------+ SEFINX: CALL GETNXT MOV Byte Ptr NDINTY,AL RET ;----------------------------------------------------------------------------+ ; Set Fill Color Opcode = 25 ;----------------------------------------------------------------------------+ SEFICO: CALL GETNXT MOV Byte Ptr NDFICO,AL cmp al, 0 ; check color jne sef1 cmp rflg, 0 ; Check writing mode js sef1 ; handle XOR mode, new bit = old bit XOR 1 ; If color = 0, and writing mode is Replace, Set, Clear mov rflgf, 1 ; the logical write operation is 'AND' mov bmaskf, 11111110b ; new bit = old bit AND 0 jmp sef9 ; if color = 1, then use the logical write flag and bit mask ; already set by the last set writing mode function sef1: mov al, rflg mov rflgf, al mov al, bmask mov bmaskf, al sef9: RET ;----------------------------------------------------------------------------+ ; Inq Color Rep Opcode = 26 ;----------------------------------------------------------------------------+ ; Inq Cell Array Opcode = 27 ;----------------------------------------------------------------------------+ ; Input Locator Opcode = 28 + ;----------------------------------------------------------------------------+ ; Input Valuator Opcode = 29 ;----------------------------------------------------------------------------+ ; Input Choice Opcode = 30 ;----------------------------------------------------------------------------+ ; Input String Opcode = 31 ;----------------------------------------------------------------------------+ ;----------------------------------------------------------------------------+ ; Set Writing Mode Opcode = 32 ;----------------------------------------------------------------------------+ serite: call getnxt ; get the writing mode mov ndrite, al cmp al, 0 ; check the writing mode jne ser0 mov nopflg, al ; for replace mode, nopflg = 0 jmp ser1 ; use the same writing flag as set mode ser0: mov nopflg, 1 ; for set/xor/clear mode, nopflg = 1 cmp al, 2 je ser2 ja ser3 ser1: ; for set mode and replace with color 1, rflg = 0 (OR) mov bmask, 00000001b mov rflg, 0 ; new bit = old bit OR 1 jmp ser99 ser2: ; for xor mode, rflg = -1 (XOR) mov bmask, 00000001b mov rflg, -1 ; new bit = old bit XOR 1 jmp ser99 ser3: ; for clear mode and replace with color 0, rflg = 1 (AND) mov bmask, 11111110b mov rflg, 1 ; new bit = old bit AND 0 ser99: ; Set logical op flags for line, marker, text, and fill ; each may be changed by a set color command later mov al, bmask mov bitmask, al ; Common mask mov bmaskl, al ; line mask mov bmaskm, al ; marker mov bmaskt, al ; text mov bmaskf, al ; fill mov al, rflg mov ritflg, al ; common flag mov rflgl, al ; line mov rflgm, al ; Marker mov rflgt, al ; text mov rflgf, al ; fill ret ;----------------------------------------------------------------------------+ ; Set Input Mode Opcode = 33 ;----------------------------------------------------------------------------+ RET DSEG ; 0 - SOLID, 1 - DASHED, 2 - DOTTE, 3 - DASHED-DOTTED, 4 - LONG DASH ; Bit patterns : 1-short dash = F0F0, 4-long dash = FF00, ; 2-dotted = 8888, 3-dash dotted = FC30, ; 5-dash dot dot = F088 LNTBL RS 0 DW 0FFFFH ;SOLID DW 0F0F0H ;SHORT DASH DW 8888H ;DOTTED DW 0FC30H ;DASH DOTTED DW 1111111111100000B ;LONG DASH DW 0F088H ;DASH DOT DOT CSEG END