	.TITLE	SORT
	.DSABL	GBL
	.GLOBL	ENTSIZ	DIR	PTRS	TSORT

$NA	=	2
$ME	=	4
$EXT	=	6
$SIZE	=	10
$DBLK	=	12
$DATE	=	14

DEFSEL::
	CLR	R2
	CLR	R4
	MOV	(R5),R0
	BEQ	3$
	MOV	PTRS(R5),R1
1$:	MOV	(R1)+,R3
	BIT	#1,(R3)
	BEQ	2$
	INC	R2
	ADD	$SIZE(R3),R4
2$:	SOB	R0,1$
3$:	RETURN

	.ENABL	LSB
SORT::
; 0..4
;	FOR I:=3 DOWNTO 1 DO
;	  FOR J:=0 TO I DO
;	    IF F(X[J])>F(X[J+1]) THEN
;	      SWAP;

	CMP	@R5,#1
	BLE	5$
	TST	TSORT(R5)
	BNE	6$
	MOV	@R5,R0
	MOV	DIR(R5),R1
	MOV	PTRS(R5),R2
7$:	MOV	R1,(R2)+
	ADD	#ENTSIZ,R1
	SOB	R0,7$
5$:	RETURN

6$:	MOV	(R5),R4
	DEC	R4
	MOV	PTRS(R5),R1

1$:	CLR	R0
2$:	MOV	R0,-(SP)

	ASL	R0
	ADD	R1,R0
;------
	MOV	R1,-(SP)
	MOV	R2,-(SP)
	MOV	(R0),R1
	MOV	2(R0),R2
	ADD	TSORT(R5),PC
	.WORD
	BR	BNAME
	BR	BEXT
	BR	BDATE
	BR	BSIZE

.MACRO	.CMP	$BY,NOB
		CMP	$BY(R1),$BY(R2)
.IIF B <NOB>	BNE	BEND
.ENDM

BDATE:	CALL	CMPDATE
	BNE	BEND
	BR	BNAME
BSIZE:	.CMP	$SIZE
BNAME:	.CMP	$NA
	.CMP	$ME
	.CMP	$EXT
4$:	.CMP	$SIZE
	CALL	CMPDATE
	.CMP	$DBLK	NOB
	BR	BEND

BEXT:	.CMP	$EXT
	.CMP	$NA
	.CMP	$ME
	BR	4$

BEND:	MOV	(SP)+,R2
	MOV	(SP)+,R1
;------
	BLOS	3$
	MOV	(R0),-(SP)
	MOV	2(R0),(R0)
	MOV	(SP)+,2(R0)

3$:	MOV	(SP)+,R0
	INC	R0
	CMP	R0,R4
	BNE	2$
	DEC	R4
	BNE	1$
	RETURN

CMPDATE::
	MOV	$DATE(R1),R3
	ASHC	#-5,R3
	MOV	R3,-(SP)
	MOV	$DATE(R2),R3
	ASHC	#-5,R3
	CMP	(SP)+,R3
	RETURN
	.END
                                                                                                                                