Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:25
                                                             Page     1-1


				;
				; blindingly fast assembly help for Z
				;
				
				.list
				
				sBegin  data
 0000                        2	_DATA segment 
				assumes ds,data
				
 0000  00000000			bufstart    dd     ?
				staticW bufsrc,?
 0004                        2	bufsrc label WORD 
 0004  0000                  3	_bufsrc DW ? 
				staticW buflen,?
 0006                        2	buflen label WORD 
 0006  0000                  3	_buflen DW ? 
				staticW buflength,?
 0008                        2	buflength label WORD 
 0008  0000                  3	_buflength DW ? 
				staticW buffh,?
 000A                        2	buffh label WORD 
 000A  0000                  3	_buffh DW ? 
				globalB fGetlCR,?
 000C                        2	fGetlCR label BYTE 
 000C  00                    3	_fGetlCR DB ? 
 000D  00000000			bufpos      dd      ?
				
				sEnd
 0011                        1		_DATA ends 
				sBegin code
 0000                        2	_TEXT segment 
				
				assumes cs,code
				
				;
				; getlpos returns current seek position in file
				;
				cProc   getlpos,<PUBLIC>
 0000                        2	getlpos label near 
				cBegin
 0000                        1		    _getlpos proc NEAR 
 0000  55                    1			push bp 
 0001  8B EC                 1			mov bp,sp 
 0003  8B 16 000F R		        mov     dx,word ptr bufpos+2
 0007  A1 000D R		        mov     ax,word ptr bufpos
				cEnd
 000A  8B E5                 1			mov sp,bp 
 000C  5D                    1			pop bp 
 000D  C3                    1			ret 
 000E                        1		_getlpos endp 
				
				;
				; getlinit (buf, len, fh) initializes the getl 
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:25
                                                             Page     1-2


				routine for buffer buf and fh fh
				;
				cProc   getlinit,<PUBLIC>
 000E                        2	getlinit label near 
				parmD   buf
				parmW   len
				parmW   fh
				cBegin
 000E                        1		    _getlinit proc NEAR 
 000E  55                    1			push bp 
 000F  8B EC                 1			mov bp,sp 
 0011  8B 46 04			        mov     ax,off_buf
 0014  A3 0000 R		        mov     word ptr bufstart,ax
 0017  8B 46 06			        mov     ax,seg_buf
 001A  A3 0002 R		        mov     word ptr bufstart+2,ax
 001D  8B 46 0A			        mov     ax,fh
 0020  A3 000A R		        mov     buffh,ax
 0023  8B 46 08			        mov     ax,len
 0026  A3 0008 R		        mov     buflength,ax
 0029  C7 06 0006 R 0000	        mov     buflen,0
 002F  C7 06 000D R 0000	        mov     word ptr bufpos,0
 0035  C7 06 000F R 0000	        mov     word ptr bufpos+2,0
 003B  C6 06 000C R 00		        mov     fGetlCR,0
				cEnd
 0040  8B E5                 1			mov sp,bp 
 0042  5D                    1			pop bp 
 0043  C3                    1			ret 
 0044                        1		_getlinit endp 
				
				;
				; getl (dst, len) returns TRUE if a line was re
				ad.
				;
				cProc   getl,<PUBLIC>,<DS,SI,DI>
 0044                        2	getl label near 
				parmW   dst
				parmW   dstlen
				cBegin
 0044                        1		    _getl proc NEAR 
 0044  55                    1			push bp 
 0045  8B EC                 1			mov bp,sp 
 0047  56                    3	push si 
 0048  57                    3	push di 
 0049  1E                    3	push ds 
				        assumes ss,data
 004A  FC			        cld
 004B  1E			        push    ds
 004C  07			        pop     es
 004D  8E 1E 0002 R		        mov     ds,word ptr bufstart+2
				        assumes ds,nothing
 0051  36: 8B 36 0004 R		        mov     si,bufsrc
 0056  8B 7E 04			        mov     di,dst
 0059  36: 8B 0E 0006 R		        mov     cx,buflen
 005E  8B 56 06			        mov     dx,dstlen
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:25
                                                             Page     1-3


 0061  4A			        dec     dx                  ; room for 
				NUL at end
 0062  E3 2D			        jcxz    fill
				
 0064  AC			movc:   lodsb                       ; get a byt
				e
 0065  3C 0D			        cmp     al,13               ; is it spe
				cial?
 0067  76 6A			        jbe     spec                ; yes, go h
				andle special case
 0069  AA			stoc:   stosb                       ; put chara
				cter in buffer
 006A  4A			        dec     dx                  ; one less 
				space in buffer
 006B  E0 F7			endl:   loopnz  movc                ; go back f
				or more characters
 006D  75 22			        jnz     fill                ; no more c
				haracters => go fill buffer
				                                    ; cx = 0, b
				uflen = length moved
 006F  49			fin:    dec     cx
 0070  33 C0			fin1:   xor     ax,ax
 0072  AA			        stosb
 0073  36: 89 36 0004 R		        mov     bufsrc,si           ; length mo
				ved = buflen - cx
 0078  36: 87 0E 0006 R		        xchg    buflen,cx
 007D  36: 2B 0E 0006 R		        sub     cx,buflen
 0082  36: 01 0E 000D R		        add     word ptr bufpos,cx
 0087  36: 83 16 000F R 00	        adc     word ptr bufpos+2,0
 008D  F7 D0			        not     ax
 008F  EB 6A			        jmp     short getldone
				
 0091				fill:
 0091  36: 8B 0E 0006 R		        mov     cx, buflen          ; add lengt
				h moved to bufpos
 0096  36: 01 0E 000D R		        add     word ptr bufpos,cx
 009B  36: 83 16 000F R 00	        adc     word ptr bufpos+2,0
 00A1  52			        push    dx
 00A2  36: 8B 16 0000 R		        mov     dx,word ptr bufstart
 00A7  36: 8B 0E 0008 R		        mov     cx,buflength
 00AC  36: 8B 1E 000A R		        mov     bx,buffh
 00B1  B4 3F			        mov     ah,3Fh
 00B3  CD 21			        int     21h
 00B5  8B C8			        mov     cx,ax
 00B7  36: A3 0006 R		        mov     buflen,ax
 00BB  8B F2			        mov     si,dx
 00BD  5A			        pop     dx
 00BE  0B C0			        or      ax,ax
 00C0  75 A2			        jnz     movc
				; if we've stored chars then terminate line els
				e return with 0
 00C2  3B 7E 04			        cmp     di,dst
 00C5  75 A9			        jnz     fin1
 00C7  EB 32			        jmp     short getldone
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:25
                                                             Page     1-4


				
 00C9  0C 01			setnz:  or      al,1
 00CB  36: C6 06 000C R FF	        mov     fGetlCR,-1              ; indic
				ate we've seen a CR
 00D1  EB 98			        jmp     endl
				
 00D3  74 F4			spec:   jz      setnz
 00D5  3C 0A			        cmp     al,10
 00D7  74 96			        jz      fin
 00D9  3C 09			        cmp     al,9
 00DB  75 8C			        jnz     stoc
 00DD  51			        push    cx
 00DE  8B C7			        mov     ax,di
 00E0  2B 46 04			        sub     ax,dst
 00E3  25 0007			        and     ax,7
 00E6  B9 0008			        mov     cx,8
 00E9  2B C8			        sub     cx,ax
 00EB  3B CA			        cmp     cx,dx
 00ED  76 02			        jbe     ok
 00EF  8B CA			        mov     cx,dx
 00F1  2B D1			ok:     sub     dx,cx
 00F3  B0 20			        mov     al," "
 00F5  F3/ AA			        rep     stosb
 00F7  59			        pop     cx
 00F8  E9 006B R		        jmp     endl
				
 00FB				getldone:
				cEnd
 00FB  1F                    3	pop ds 
 00FC  5F                    3	pop di 
 00FD  5E                    3	pop si 
 00FE  8B E5                 1			mov sp,bp 
 0100  5D                    1			pop bp 
 0101  C3                    1			ret 
 0102                        1		_getl endp 
				
				sEnd
 0102                        1		_TEXT ends 
				
				end

Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:25
                                                             Symbols-1


Macros:

		N a m e			Lines

?UTPE  . . . . . . . . . . . . .  	   1
ADDSEG . . . . . . . . . . . . .  	  20
ADD_DGROUP . . . . . . . . . . .  	   1
ADD_IGROUP . . . . . . . . . . .  	   1
ARG  . . . . . . . . . . . . . .  	   4
ASSUMES  . . . . . . . . . . . .  	  20
BEGINCODE  . . . . . . . . . . .  	   2
BEGINDATA  . . . . . . . . . . .  	   2
CBEGIN . . . . . . . . . . . . .  	   0
CCALL  . . . . . . . . . . . . .  	  30
CEND . . . . . . . . . . . . . .  	   0
CPROC  . . . . . . . . . . . . .  	   1
CREATESEG  . . . . . . . . . . .  	  16
DEFB . . . . . . . . . . . . . .  	   1
DEFCP  . . . . . . . . . . . . .  	   1
DEFD . . . . . . . . . . . . . .  	   1
DEFDP  . . . . . . . . . . . . .  	   1
DEFGRP . . . . . . . . . . . . .  	   1
DEFQ . . . . . . . . . . . . . .  	   1
DEFT . . . . . . . . . . . . . .  	   1
DEFW . . . . . . . . . . . . . .  	   1
ERRN$  . . . . . . . . . . . . .  	   1
ERRNZ  . . . . . . . . . . . . .  	   5
ERRNZ1 . . . . . . . . . . . . .  	   1
ERROR  . . . . . . . . . . . . .  	   2
EXTERNB  . . . . . . . . . . . .  	   1
EXTERNCP . . . . . . . . . . . .  	   1
EXTERND  . . . . . . . . . . . .  	   1
EXTERNDP . . . . . . . . . . . .  	   1
EXTERNFP . . . . . . . . . . . .  	   1
EXTERNNP . . . . . . . . . . . .  	   1
EXTERNP  . . . . . . . . . . . .  	   1
EXTERNQ  . . . . . . . . . . . .  	   1
EXTERNT  . . . . . . . . . . . .  	   1
EXTERNW  . . . . . . . . . . . .  	   1
GLOBALB  . . . . . . . . . . . .  	   2
GLOBALCP . . . . . . . . . . . .  	   1
GLOBALD  . . . . . . . . . . . .  	   2
GLOBALDP . . . . . . . . . . . .  	   1
GLOBALQ  . . . . . . . . . . . .  	   2
GLOBALT  . . . . . . . . . . . .  	   2
GLOBALW  . . . . . . . . . . . .  	   2
IN_DGROUP  . . . . . . . . . . .  	   7
IN_IGROUP  . . . . . . . . . . .  	   7
LABELB . . . . . . . . . . . . .  	   1
LABELCP  . . . . . . . . . . . .  	   1
LABELD . . . . . . . . . . . . .  	   1
LABELDP  . . . . . . . . . . . .  	   1
LABELFP  . . . . . . . . . . . .  	   1
LABELNP  . . . . . . . . . . . .  	   1
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:25
                                                             Symbols-2


LABELP . . . . . . . . . . . . .  	   1
LABELQ . . . . . . . . . . . . .  	   1
LABELT . . . . . . . . . . . . .  	   1
LABELW . . . . . . . . . . . . .  	   1
LOCALB . . . . . . . . . . . . .  	   1
LOCALCP  . . . . . . . . . . . .  	   1
LOCALD . . . . . . . . . . . . .  	   5
LOCALDP  . . . . . . . . . . . .  	   1
LOCALQ . . . . . . . . . . . . .  	   1
LOCALT . . . . . . . . . . . . .  	   1
LOCALV . . . . . . . . . . . . .  	   1
LOCALW . . . . . . . . . . . . .  	   1
OUTIF  . . . . . . . . . . . . .  	  17
PARMB  . . . . . . . . . . . . .  	   1
PARMCP . . . . . . . . . . . . .  	   1
PARMD  . . . . . . . . . . . . .  	  13
PARMDP . . . . . . . . . . . . .  	   1
PARMQ  . . . . . . . . . . . . .  	   1
PARMT  . . . . . . . . . . . . .  	   1
PARMW  . . . . . . . . . . . . .  	   1
REGPTR . . . . . . . . . . . . .  	   8
SAVE . . . . . . . . . . . . . .  	   2
SBEGIN . . . . . . . . . . . . .  	   1
SEND . . . . . . . . . . . . . .  	   1
SMASHES  . . . . . . . . . . . .  	   5
STATICB  . . . . . . . . . . . .  	   2
STATICCP . . . . . . . . . . . .  	   1
STATICD  . . . . . . . . . . . .  	   2
STATICDP . . . . . . . . . . . .  	   1
STATICQ  . . . . . . . . . . . .  	   2
STATICT  . . . . . . . . . . . .  	   2
STATICW  . . . . . . . . . . . .  	   2

Segments and Groups:

                N a m e         	Length	 Align	Combine Class

DGROUP . . . . . . . . . . . . .  	GROUP
  _DATA  . . . . . . . . . . . .  	0011	WORD	PUBLIC	'DATA'
IGROUP . . . . . . . . . . . . .  	GROUP
  _TEXT  . . . . . . . . . . . .  	0102	BYTE	PUBLIC	'CODE'

Symbols:            

                N a m e         	Type	 Value	 Attr

ALTVECT  . . . . . . . . . . . .  	ALIAS	 FALSE		
ASMPASS  . . . . . . . . . . . .  	NUMBER	0002	

BUF  . . . . . . . . . . . . . .  	TEXT  DWORD ptr [bp+4]		
BUFFERFLAG . . . . . . . . . . .  	NUMBER	FFFF	
BUFFH  . . . . . . . . . . . . .  	L WORD	000A	_DATA
Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:25
                                                             Symbols-3


BUFLEN . . . . . . . . . . . . .  	L WORD	0006	_DATA
BUFLENGTH  . . . . . . . . . . .  	L WORD	0008	_DATA
BUFPOS . . . . . . . . . . . . .  	L DWORD	000D	_DATA
BUFSRC . . . . . . . . . . . . .  	L WORD	0004	_DATA
BUFSTART . . . . . . . . . . . .  	L DWORD	0000	_DATA

CODEOFFSET . . . . . . . . . . .  	TEXT  OFFSET IGROUP:		

DATAOFFSET . . . . . . . . . . .  	TEXT  OFFSET DGROUP:		
DEF_DGROUP . . . . . . . . . . .  	NUMBER	0002	
DEF_IGROUP . . . . . . . . . . .  	NUMBER	0002	
DST  . . . . . . . . . . . . . .  	TEXT  word ptr [bp+4]		
DSTLEN . . . . . . . . . . . . .  	TEXT  word ptr [bp+6]		

ENDL . . . . . . . . . . . . . .  	L NEAR	006B	_TEXT

FALSE  . . . . . . . . . . . . .  	NUMBER	0000	
FGETLCR  . . . . . . . . . . . .  	L BYTE	000C	_DATA
FH . . . . . . . . . . . . . . .  	TEXT  word ptr [bp+10]		
FILL . . . . . . . . . . . . . .  	L NEAR	0091	_TEXT
FIN  . . . . . . . . . . . . . .  	L NEAR	006F	_TEXT
FIN1 . . . . . . . . . . . . . .  	L NEAR	0070	_TEXT

GETL . . . . . . . . . . . . . .  	L NEAR	0044	_TEXT
GETLDONE . . . . . . . . . . . .  	L NEAR	00FB	_TEXT
GETLINIT . . . . . . . . . . . .  	L NEAR	000E	_TEXT
GETLPOS  . . . . . . . . . . . .  	L NEAR	0000	_TEXT

IBM  . . . . . . . . . . . . . .  	ALIAS	 IBMVER		
IBMCOPYRIGHT . . . . . . . . . .  	ALIAS	 FALSE		
IBMJAPAN . . . . . . . . . . . .  	ALIAS	 FALSE		
IBMJAPVER  . . . . . . . . . . .  	ALIAS	 FALSE		
IBMVER . . . . . . . . . . . . .  	ALIAS	 TRUE		
INTERNAT . . . . . . . . . . . .  	ALIAS	 FALSE		

JAPAN  . . . . . . . . . . . . .  	ALIAS	 FALSE		

KANJI  . . . . . . . . . . . . .  	ALIAS	 FALSE		
KOREA  . . . . . . . . . . . . .  	ALIAS	 FALSE		

LEN  . . . . . . . . . . . . . .  	TEXT  word ptr [bp+8]		

MEMC . . . . . . . . . . . . . .  	NUMBER	0000	
MEMH . . . . . . . . . . . . . .  	NUMBER	0000	
MEML . . . . . . . . . . . . . .  	NUMBER	0000	
MEMM . . . . . . . . . . . . . .  	NUMBER	0000	
MEMMOD . . . . . . . . . . . . .  	NUMBER	0001	
MEMS . . . . . . . . . . . . . .  	NUMBER	0001	
MOVC . . . . . . . . . . . . . .  	L NEAR	0064	_TEXT
MSVER  . . . . . . . . . . . . .  	NUMBER	0000	

OFF_BUF  . . . . . . . . . . . .  	TEXT  WORD ptr [bp+4]		
OK . . . . . . . . . . . . . . .  	L NEAR	00F1	_TEXT

Microsoft (R) Macro Assembler Version 5.10                  2/14/25 23:44:25
                                                             Symbols-4


SEG_BUF  . . . . . . . . . . . .  	TEXT  WORD ptr [bp+6]		
SETNZ  . . . . . . . . . . . . .  	L NEAR	00C9	_TEXT
SIZEC  . . . . . . . . . . . . .  	NUMBER	0000	
SIZED  . . . . . . . . . . . . .  	NUMBER	0000	
SPEC . . . . . . . . . . . . . .  	L NEAR	00D3	_TEXT
STOC . . . . . . . . . . . . . .  	L NEAR	0069	_TEXT

TRUE . . . . . . . . . . . . . .  	NUMBER	FFFF	
TRUEBYTE . . . . . . . . . . . .  	NUMBER	00FF	

??0000 . . . . . . . . . . . . .  	NUMBER	0001	
??0001 . . . . . . . . . . . . .  	NUMBER	0001	
??0002 . . . . . . . . . . . . .  	NUMBER	0001	
??0003 . . . . . . . . . . . . .  	NUMBER	0000	
@CPU . . . . . . . . . . . . . .  	TEXT  0101h		
@FILENAME  . . . . . . . . . . .  	TEXT  getl		
@VERSION . . . . . . . . . . . .  	TEXT  510		
_BUFFH . . . . . . . . . . . . .  	L WORD	000A	_DATA
_BUFLEN  . . . . . . . . . . . .  	L WORD	0006	_DATA
_BUFLENGTH . . . . . . . . . . .  	L WORD	0008	_DATA
_BUFSRC  . . . . . . . . . . . .  	L WORD	0004	_DATA
_fGetlCR . . . . . . . . . . . .  	L BYTE	000C	_DATA	Global
_getl  . . . . . . . . . . . . .  	N PROC	0044	_TEXT	Global	Length = 00BE
_getlinit  . . . . . . . . . . .  	N PROC	000E	_TEXT	Global	Length = 0036
_getlpos . . . . . . . . . . . .  	N PROC	0000	_TEXT	Global	Length = 000E


   1184 Source  Lines
   2636 Total   Lines
    231 Symbols

  46974 + 234329 Bytes symbol space free

      0 Warning Errors
      0 Severe  Errors
