;********************************************* ; ; External command for DAVEX ; ; modchk -- compare the last-mod dates on ; two files (most useful with ; wildcards) ; ; by Dave Lyons, 13-Jun-87 ; ; Converted to Merlin 28-Jan-90 DAL ; still version 1.0, but requires Davex 1.0 now ; ;********************************************** ; ; modchk is typically used like this (to make ; sure all source (.s) files have been compiled ; since they were last changed): ; ; modchk =.s = -o ; ; modchk file1 file2 [-o] [-n] [-s] [-q] ; l e a u ; d w m i ; e e e ; r t ; ; Output: if no parameters are given, a report ; of the following form appears: ; ; ; ; Relation is "<" or "=" or ">" ; ; If one or more of -o, -n, or -s is given, ; file1 is printed only if the relationship ; holds. For example, modchk =.s = -n prints ; the names of all source files that are newer ; than their corresponding object files. ; ; If -q is given, modchk does not complain when ; file2 does not exist. ; ; If one of the files has no modification ; date/time, a warning is displayed. ; ;********************************************* ;********************************************* ; ; Converted to MPW IIgs 21-Sep-92 DAL ; ;********************************************* .include "Common/2/Globals2.asm" .include "Common/2/Apple.Globals2.asm" .include "Common/2/Mli.globals2.asm" .include "Common/Macros.asm" .segment "CODE_A000" orgadr = $A000 ; org orgadr MyVersion = $10 MinVersion = $10 ;********************************************* rts .byte $ee,$ee .byte MyVersion,MinVersion .byte %00000000 ;hardware req .addr descr .addr orgadr .addr start .byte 0,0,0,0 ; parameters here .byte 0,t_wildpath .byte 0,t_wildpath .byte $80+'o',t_nil .byte $80+'n',t_nil .byte $80+'s',t_nil .byte $80+'q',t_nil .byte 0,0 descr: pstr "compare last-mod dates of files" ;********************************************* ; dum xczpage ;32 locations path1 = xczpage ;ds 2 path2 = path1+2 ;ds 2 count = path2+2 ;ds 1 ; dend ; outa_here: jmp xProDOS_err ; start: nop ;disable wildcard-exp printing lda #0 jsr xgetparm_n sta path1+1 sty path1 sta info1_path+1 sty info1_path lda #1 jsr xgetparm_n sta path2+1 sty path2 sta info2_path+1 sty info2_path jsr mli .byte mli_gfinfo .addr info1_parms bcs outa_here jsr mli .byte mli_gfinfo .addr info2_parms bcc got_both cmp #err_filnotfnd bne outa_here lda #'q'+$80 jsr xgetparm_ch bcc quiet jsr printp2 jsr xmess cstr_cr " does not exist!" quiet: rts got_both: lda info1_mdate ora info1_mdate+1 ora info1_mtime ora info1_mtime+1 bne got1 jsr printp1 no_date: jsr xmess cstr_cr ": no mod date/time available" rts got1: lda info2_mdate ora info2_mdate+1 ora info2_mtime ora info2_mtime+1 bne got2 jsr printp2 jmp no_date got2: jsr compare php lda #0 sta count lda #'o'+$80 jsr xgetparm_ch bcs skip1 inc count skip1: lda #'n'+$80 jsr xgetparm_ch bcs skip2 inc count skip2: lda #'s'+$80 jsr xgetparm_ch bcs skip3 inc count skip3: lda count bne specific ; ; (file1) (file2) ; jsr printp1 lda #' '+$80 jsr cout plp jsr print_rel lda #' '+$80 jsr cout jsr printp2 jmp crout print_rel: beq print_eq bcs print_gr lda #'<'+$80 jmp cout print_gr: lda #'>'+$80 jmp cout print_eq: lda #'='+$80 jmp cout specific: plp beq cmp_equal bcs cmp_firstnew ; ; first is older ; lda #'o'+$80 jsr xgetparm_ch bcs fergit_it print_it: jsr printp1 jmp crout fergit_it: rts ; ; equal ; cmp_equal: lda #'s'+$80 jsr xgetparm_ch bcc print_it rts ; ; first is newer ; cmp_firstnew: lda #'n'+$80 jsr xgetparm_ch bcc print_it rts ;******************************************** compare: ; [TODO] Y2K ??? see 'update' logic lda info1_mdate+1 cmp info2_mdate+1 bne didcmp lda info1_mdate cmp info2_mdate bne didcmp lda info1_mtime+1 cmp info2_mtime+1 bne didcmp lda info1_mtime cmp info2_mtime didcmp: rts ;********************************************* info1_parms: .byte 10 info1_path: .res 2 info1_access: .res 1 info1_ftype: .res 1 info1_aux: .res 2 info1_stype: .res 1 info1_blocks: .res 2 info1_mdate: .res 2 info1_mtime: .res 2 info1_cdate: .res 2 info1_ctime: .res 2 ; info2_parms: .byte 10 info2_path: .res 2 info2_access: .res 1 info2_ftype: .res 1 info2_aux: .res 2 info2_stype: .res 1 info2_blocks: .res 2 info2_mdate: .res 2 info2_mtime: .res 2 info2_cdate: .res 2 info2_ctime: .res 2 ;********************************************* printp1: lda path1+1 ldy path1 jmp xprint_path printp2: lda path2+1 ldy path2 jmp xprint_path