Category : C Source Code
Archive   : CEXPRESS.ZIP
Filename : WRTENDB.ASM

 
Output of file : WRTENDB.ASM contained in archive : CEXPRESS.ZIP
;void write_end_b(strg,col,row,length,color);
; unsigned char *strg,col,row,length,color;

EXTRN _memory_model:byte
EXTRN _error_code:byte
EXTRN _video_page:byte

_TEXT SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:_TEXT
PUBLIC _write_end_b
_write_end_b proc near
push bp ;
mov bp,sp ;set up stack frame
push di ;
push si ;
cmp _memory_model,0 ;near or far?
jle begin ;jump if near
inc bp ;else add 2 to BP
inc bp ;
begin: mov bh,_video_page ;set video page
push ds ;save DS
cmp _memory_model,2 ;data near or far?
jb L0 ;jump if near
lds si,dword ptr[bp+4] ;DS:SI pts to Strg
inc bp ;add 2 to BP since dword ptr
inc bp ;
jmp short L00 ;
L0: mov si,[bp+4] ;near case
L00: mov byte ptr[bp+4],1 ;_error_code 1 = 0 Length
push si ;must find string length
sub cx,cx ;count in CX
L000: inc si ;forward strg ptr
inc cx ;inc counter
cmp byte ptr[si],0 ;end of string?
jne L000 ;loop if not
pop si ;SI back to start of string
sub dx,dx ;
mov dl,[bp+10] ;length of line
or dx,dx ;test for zero Length
jnz L1 ;jump if nonzero
mov byte ptr[bp+4],0 ;0 = no error
L1: sub ax,ax ;AX holds number trailing spaces
cmp cx,dx ;strg >= Length?
jae L2 ;jump ahead if so
sub dx,cx ;minus Strg length
mov ax,dx ;number trailing spaces
L2: mov di,cx ;DI holds Strg Length
mov dh,[bp+8] ;Row to DH
dec dh ;count from 0
mov dl,[bp+6] ;Col to DL
dec dl ;count from 0
mov bl,[bp+12] ;Attribute to BL
mov bp,ax ;number trailing chars
mov cx,1 ;chars to wrt each time
mov ah,2 ;func to set cursor
int 10h ;set initial cursor pos
or di,di ;test for zero strg len
jz L4 ;jump ahead if null
L3: mov al,[si] ;get a char
inc si ;forward string ptr for next time
mov ah,9 ;function to write char
int 10h ;write the char
inc dl ;forward column pos
mov ah,2 ;function to set cursor
int 10h ;reset cursor
dec di ;end of string?
jnz L3 ;loop till finished
L4: or bp,bp ;test for no chars clear
jz L6 ;jump ahead if none
L5: mov al,32 ;now write space char
mov ah,9 ;function to write char
int 10h ;write the char
inc dl ;forward column pos
mov ah,2 ;function to set cursor
int 10h ;reset cursor
dec bp ;end of line?
jnz L5 ;loop till end of line
L6: pop ds ;restore DS
mov al,[bp+4] ;fetch _error_code
mov _error_code,al ;set it
pop si ;
pop di ;
pop bp ;
cmp _memory_model,0 ;quit
jle quit ;
db 0CBh ;RET far
quit: ret ;RET near
_write_end_b endp
_TEXT ENDS
END


  3 Responses to “Category : C Source Code
Archive   : CEXPRESS.ZIP
Filename : WRTENDB.ASM

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/