home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1993 May / SIMTEL_0593.ISO / msdos / dirutl / older.asm < prev    next >
Assembly Source File  |  1984-02-28  |  3KB  |  131 lines

  1. ;
  2. ; Program to compare the ages of two files.
  3. ;     
  4. ; Dan Tappan, BBN, 2/22/84
  5. ;
  6. ; To build
  7. ; MASM OLDER;
  8. ; LINK OLDER;
  9. ; EXE2BIN OLDER.EXE OLDER.COM
  10. ;
  11. ; Usage
  12. ;    OLDER <file1> <file2>
  13. ; Return value is 1 if <file1> is older than <file2>,
  14. ; 0 if <file1> is newer (or if <file2> doesn't exist)
  15. ;
  16.     TITLE OLDER
  17.  
  18. SPACE    EQU    32            ; SPACE CHARACTER
  19.  
  20. CODE    SEGMENT PARA
  21. ASSUME    CS:CODE
  22.     ORG    80H            ; COMMAND LINE
  23. CMDLINE    LABEL    BYTE    
  24.  
  25.     ORG    100H
  26. OLDER    PROC    FAR
  27.  
  28.     MOV    AX,CS            ; MAKE SURE DS SETUP
  29.     MOV    DS,AX
  30.     ASSUME    DS:CODE
  31.  
  32.     MOV    SI,OFFSET CMDLINE+1    ; POINT TO START OF BUFFER
  33.     MOV    CX,0
  34.     MOV    CL,CMDLINE        ; GET THE STRING LENGTH
  35.     
  36.     CALL    GETWORD            ; GET A PARAMTER
  37.     PUSH    DI            ; SAVE IT
  38.     CALL    GETWORD            ; GET ANOTHER
  39.     CALL    GETDATE            ; GET THE FILE DATE
  40.     POP    DI            ; GET NEXT STRING
  41.     PUSH    CX            ; SAVE TIME
  42.     PUSH    DX            ; AND DATE
  43.     CALL    GETDATE            ; GET DATES FOR OTHER
  44.     POP    AX            ; DATE FROM SECOND FILE
  45.     POP    BX            ; TIME FROM SECOND
  46.     CMP    AX,DX            ; COMPARE TO FIRST
  47.     JB    OLD0            ; FIRST IS NEWER
  48.     JA    OLD1            ; FIRST IS OLDER
  49.     CMP    BX,CX            ; COMPARE TIMES
  50.     JB    OLD0            ; FIRST IS NEWER
  51. ; FIRST FILE IS OLDER, RETURN 1
  52. OLD1:    MOV    AL,1
  53.     JMP    OLDX            ; LEAVE
  54. ; FIRST FILE IS NEWER, RETURN 0
  55. OLD0:    MOV    AL,0            
  56. OLDX:    MOV    AH,4CH            ; RETURN WITH STATUS
  57.     INT    21H
  58. OLDER    ENDP
  59.  
  60. ;
  61. ; GETDATE - GET A FILES DATE
  62. ; CALLED
  63. ;    DI/    POINTER TO NAME STRING
  64. ; RETURNS
  65. ;    DX/    DATE
  66. ;    CX/    TIME
  67. ;
  68. GETDATE    PROC    NEAR
  69.     MOV    DX,DI            ; POINT TO STRING
  70.     MOV    AH,3DH            ; OPEN A FILE
  71.     MOV    AL,0            ; FOR READING
  72.     INT    21H            ; GET HANDLE
  73.     JC    NOFILE            ; ERROR RETURN
  74.     MOV    BX,AX            ; HANDLE
  75.     MOV    AL,0            ; GET DATE
  76.     MOV    AH,57H            ; FUNCTION CODE
  77.     INT    21H            ; DO IT
  78.     JMP    GOTDATE            ; RETURN THE VALUE
  79. ; HERE IF FILE DOES NOT EXIST
  80. NOFILE:    MOV    CX,0            ; RETURN VALUE OF 0
  81.     MOV    DX,CX            ; ..
  82. GOTDATE:
  83.     RET
  84. GETDATE    ENDP
  85.  
  86. ;
  87. ; GETWORD - GET A PARMETER FROM THE COMMAND LINE
  88. ; CALLED 
  89. ;    SI/    START OF LINE (MAY HAVE LEADING SPACES)
  90. ;    CX/    SIZE OF STRING
  91. ; RETURN
  92. ;    DI/    START OF WORD (NULL TERMINATED)
  93. ;    SI,CX/    UPDATED
  94. ;
  95. GETWORD    PROC    NEAR
  96.     CLD                ; DIRECTION IS FORWARD
  97.  
  98.     PUSH    SI            ; SAVE START OF STRING
  99.     PUSH    CX            ; AND INITIAL COUNT
  100.  
  101.     MOV    BX,CX            ; MAKE SURE PROPERLY TERMINATED
  102.     MOV    AL,SPACE        ; CODE TO SCAN FOR
  103.     MOV    BYTE PTR [BX+SI],AL    ; WITH A SPACE
  104.  
  105.     MOV    DI,SI            ; START OF STRING
  106.     CMP    CX,0            ; ANY STRING LEFT?
  107.     JLE    GETWX            ; RETURN NULL STRING
  108.  
  109.     REPE    SCASB            ; SKIP SPACES
  110.     CMP    CX,0            ; FOUND?
  111.     JLE    GETWX            ; AGAIN NULL STRING
  112.     NOT    CX            ; PREVENT STOPPING
  113.     DEC    DI            ; BACKUP TO START OF STRING
  114.     PUSH    DI            ; SAVE THE START
  115.     REPNE    SCASB            ; SCAN FOR END OF WORD
  116.     DEC    DI            ; POINT TO THE SPACE
  117.     MOV    SI,DI            ; UPDATE SI
  118.     POP    DI            ; REMEMBER START OF STRING
  119.  
  120. GETWX:    MOV    BYTE PTR [SI],0        ; NULL TERMINATE STRING
  121.     INC    SI            ; POINT TO NEXT
  122.     POP    CX            ; GET INITIAL COUNT
  123.     POP    BX            ; INITIAL SI
  124.     SUB    BX,SI            ; GET DIFFERENCE
  125.     ADD    CX,BX            ; UPDATE COUNT
  126.     RET
  127. GETWORD    ENDP
  128. CODE    ENDS
  129.     
  130.     END OLDER
  131.