	TITLE	COSORT	- Diskette Contents List - Sort	Entry Stack
	SUBTTL	Version	1.0 - June 1983
	PAGE	81,132
;
CODE	SEGMENT	PARA PUBLIC 'CODE'
	ASSUME	CS:CODE,DS:CODE
;
	EXTRN	PNTR:WORD,SRCE:BYTE
	PUBLIC	STKCNT
STKCNT	DW	0			;Count of entries in stack
;
	PUBLIC	SORT
SORT	PROC	NEAR
	MOV	STKCNT,CX		;Save entry count
	DEC	CX
	MOV	SI,OFFSET PNTR		;Point to first	stack entry pntr
OUTER:	MOV	DI,SI
	ADD	DI,2			;Set to	"next" pntr
	MOV	DX,CX
INNER:	CALL	COMPAR			;Compare stack entries
	JBE	LEAVE			;Ascending sequence, so	no change
	MOV	AX,WORD	PTR [SI]
	XCHG	AX,WORD	PTR [DI]
	MOV	WORD PTR [SI],AX	;Exchange pointers
LEAVE:	ADD	DI,2
	DEC	DL
	JNZ	INNER			;Bubble	through	inner loop
	ADD	SI,2
	LOOP	OUTER			;Bubble	through	outer loop
	RET
SORT	ENDP
;
COMPAR	PROC	NEAR			;This compare always forces short
	PUSH	SI			;strings low, since strings are
	PUSH	DI			;terminated with nuls.
	PUSH	CX
	MOV	CX,12			;Max compare
	MOV	SI,WORD	PTR [SI]	;Point to entry
	MOV	DI,WORD	PTR [DI]	;Point to other	entry
	REP	CMPSB			;Compare strings
	POP	CX
	POP	DI
	POP	SI
	RET
COMPAR	ENDP
;
CODE	ENDS
;
	END
