home *** CD-ROM | disk | FTP | other *** search
/ Phoenix CD 2.0 / Phoenix_CD.cdr / 11a / cover20.zip / COSORT.ASM < prev    next >
Assembly Source File  |  1991-01-21  |  2KB  |  69 lines

  1.     PAGE    ,132
  2.     TITLE    COSORT  -  Diskette contents list  -  Sort Entry Stack
  3.     COMMENT        * Version 1.0  -  June 1983
  4.             (PER Dr. Dobbs Journal, January, 1984, #87)
  5.             (Dan Daetwyler "Sorted Diskette Directory for
  6.                  the IBM PC")
  7.  
  8.         Version 2.0       Bruce F. Cameron
  9.                   Cincinnati  OH 
  10.  
  11.            February 25, 1985
  12.  
  13.     Counts hidden files
  14.     Grouped sort (i.e. all COM files first etc.)
  15.     Includes Volume Label and Directory (if not root)
  16.     Lists Subdirectory names
  17.     Free space up to 100M (hard disk)  *
  18. ;
  19. ;
  20.     PAGE    82
  21. ;
  22. CODE    SEGMENT    PARA PUBLIC 'CODE'
  23.     ASSUME    CS:CODE, DS:CODE
  24. ;
  25.     EXTRN    PNTR:WORD
  26.     PUBLIC    STKCNT
  27. STKCNT    DW    0            ; Count of entries in stack
  28. ;
  29.     PUBLIC    SORT
  30. SORT    PROC    NEAR
  31.     MOV    STKCNT,CX        ; Save entry count
  32.     CMP    CX,1
  33.     JLE    SHORT SKIP        ; No sort for zero or one entry
  34.     DEC    CX
  35.     MOV    SI,OFFSET PNTR        ; First stack entry pointer
  36. OUTER:    MOV    DI,SI
  37.     ADD    DI,2            ; Set to 'next' pointer
  38.     MOV    DX,CX
  39. INNER:    CALL    COMPAR            ; Compare stack entries
  40.     JBE    LEAVE            ; Ascending sequence, no change
  41.     MOV    AX,WORD PTR [SI]
  42.     XCHG    AX,WORD PTR [DI]
  43.     MOV    WORD PTR [SI],AX    ; Exchange pointers
  44. LEAVE:    ADD    DI,2
  45.     DEC    DL
  46.     JNZ    INNER            ; Bubble through inner loop
  47.     ADD    SI,2
  48.     LOOP OUTER            ; Bubble through outer loop
  49. SKIP:    RET
  50. SORT    ENDP
  51. ;
  52. COMPAR    PROC    NEAR            ; This compare always forces short
  53.     PUSH    SI            ;  strings low, since strings are
  54.     PUSH    DI            ;  terminated with a nul
  55.     PUSH    CX
  56.     MOV    CX,12            ; Max characters to compare
  57.     MOV    SI,WORD PTR [SI]
  58.     MOV    DI,WORD PTR [DI]
  59.     REP    CMPSB            ; Compare strings
  60.     POP    CX
  61.     POP    DI
  62.     POP    SI
  63.     RET
  64. COMPAR    ENDP
  65. ;
  66. CODE    ENDS
  67. ;
  68.     END
  69. M