/*      LATER.C         --      Exit with a 1 if any file has a higher create
                                       date than the last or if the last file does not exist.
                                       A 2 is returned if any other files do not exist.
                                       Later only works on MS-DOS V2.0.

                                       A>LATER FILE1.C FILE1.O
                                       Later will set completion code to 1 if FILE1.C was
                                       created after FILE1.O.

                                       A>LATER FILE1.C FILE1.H FILE1.O
                                       Later will set completion code to 1 if FILE1.C or
                                       FILE1.H was created after FILE1.O.      */



main(argc,argv)
       int  argc;
       char *argv[]; {

       unsigned ifile,ofile,i;
       long odate,dateof();

       puts("LATER V1.0      ");

       if (argc < 3 ) {
               puts("need two or more arguments");
               exit(0);
               }

       if ((ofile=open(argv[argc-1],0)) == -1)
               exit(1);        /* the last file does not exist */

       odate=dateof(ofile);
       close(ofile);

/*      for each file see if it is later than the last one      */

       for (i=1; i < argc-1; i++) {
               if ((ifile=open(argv[i],0)) == -1) {
                       puts(argv[i]);
                       puts(" does not exist");
                       exit(2);        /* an early file does not exist */
                       }
               if (dateof(ifile) > odate) exit(1);     /* found a later file */
               close(ifile);
               }

/*      none of the files are later. set completion code of zero        */

       exit(0);
       }


/*      return a long encoding the date and time of a file      */

long dateof(fil)
       int  fil; {
       static long ret_dt;

#asm
       mov             bx,[bp+4]                               ;file handle is here. only argument.
       and             bx,0ffh                                 ;low byte of file id is MS-DOS handle.
       mov             al,0                                    ;code to retrieve date and time.
       mov             ah,57h                                  ;dos code for get file date and time.
       int             21h                                             ;call dos.
       mov             word dateof_ret_dt_+2,dx;store date in high word of ret_dt.
       mov             word dateof_ret_dt_,cx  ;store time in low word of ret_dt.
                                                                       ;note: "dateof_" is added to name
                                                                       ;because ret_dt is static.
#
       return ret_dt;
       }