home *** CD-ROM | disk | FTP | other *** search
- 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