⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setver.c

📁 At can be given its arguments in a file. You can comment out lines by preceding them with either #
💻 C
字号:
/*
* SETVER.C - Change the last modification time of a file to the version number.
*
* PROGRAMMER:	    Martti Ylikoski
* CREATED:	    5.9.1992
*/
static char* VERSION="Version 1.1. Copyright (c) Martti Ylikoski. 1992." ;
/*
*/

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <param.h>
#include <paramstd.h>
#ifndef MSDOS
#define INCL_DOS
#include <os2.h>
#else
#include <dos.h>
#include <errno.h>
#include <fcntl.h>
#include <share.h> 
#endif

static char *progname, *fname	;

extern unsigned long pflags ;

ParamEntry pentry[12] = {
     "P", &ParamSetPause, 0,
     "F", &ParamSetFold, 0,
     "V", &ParamSetVerbose, 0,
     "R", &ParamSetReport, 0,
     "S", &ParamSetSubDirs, 0,
     "?", &ParamSetHelp, 1,
     "H", &ParamSetHelp, 1,
     "NOD", &ParamSetNoDefault, 0,
     "TEST", &ParamSetTest, 0,
     "Y", &ParamSetYes, 0,
     "N", &ParamSetTest, 0,
     "\0", NULL, 0
} ;

ParamBlock params = {
    "/-",   IGNORECASE | NOPRIORITY | NOTRIGGERSALLOWED ,
    pentry
} ;
/* local prototypes */
static int setver(char *fname, int maj, int min) ;

int main(int argc, char *argv[])
{
int i, maj, min ;
char *tmp ;

   progname = argv[0] ;

   ParamHandle(&params, &argc, argv) ;

   if (pflags & PA_HELP || argc == 1)
   {
      printf("%s - change the last modification time of a file to the version number.\n", progname) ;
      puts(VERSION) ;
      puts("Usage: touch version_number file(s) [/H | /?]") ;
      puts("Where,") ;
      puts("     /H,/? = Help") ;
      puts("version number is given in a format of ma:mi") ;
      puts("ma = major number, mi = minor number") ;
      return( 0 ) ;
   }

   tmp = strtok(argv[1], ".") ;
   maj = atoi(tmp) ;
   if ((tmp = strtok(NULL, ".")) == NULL)
   {
      puts("Version minor number missing from first parameter") ;
      printf("Run %s /H for help on program parameters", progname) ;
      return( 1 ) ;
   } 
   min = atoi(tmp) ;

   for (i = 2; i <argc; i++)
      setver(argv[i], maj, min) ;

   return( 0 ) ;
}

 static int setver(char *fname, int maj, int min)
{
#ifndef MSDOS
HFILE hf ;
int c ;
USHORT action, ret ;
FILESTATUS fstat ;
#else
int hf, ret ;
unsigned date, time ;
#endif

   /* open file */
#ifndef MSDOS
   if ((ret = DosOpen(fname, &hf, &action, 0L, FILE_NORMAL,
       FILE_OPEN|FILE_CREATE,OPEN_ACCESS_READWRITE|OPEN_SHARE_DENYREADWRITE, 0L)) != 0)
   {
      printf("%s error %d opening file %s\n", progname, ret, fname) ;
      DosClose(hf) ;
      return( (int) ret ) ;
    }

   if (( ret = DosQFileInfo(hf, 1, (PVOID) &fstat, sizeof(fstat)))	!= 0)
   {
      printf("%s error in DosQFileInfo\n", progname) ;
      DosClose(hf) ;
      return( (int) ret ) ;
    }


   fstat.ftimeLastAccess.minutes = min ;
   fstat.ftimeLastAccess.hours = maj ;
   fstat.ftimeLastWrite = fstat.ftimeLastAccess ;

   if ((ret = DosSetFileInfo(hf, 1, (PBYTE) &fstat, (USHORT) sizeof(fstat))) != 0)
   {
       /* In DOS-compatility mode DosSetFileInfo does not work in 1.21 */
       printf("%s unable to set time\n", progname) ;
       DosClose(hf) ;
       return( (int) ret ) ;
    }

   /* close file */
   DosClose(hf) ;

#else
   if ((ret = _dos_open(fname, O_RDWR, &hf)) != 0)
   {
      printf("%s error %d opening file %s\n", progname, ret, fname) ;
      _dos_close(hf) ;
      return( (int) ret ) ;
    }

   if (( ret = _dos_getftime (hf, &date, &time)) != 0)
   {
      printf("%s error in _dos_getftime\n", progname) ;
      _dos_close(hf) ;
      return( (int) ret ) ;
    }


   time = (maj << 11) + (min << 5) ;

   if (( ret = _dos_setftime (hf, date, time)) != 0)
   {
      printf("%s unable to set time\n", progname) ;
      _dos_close(hf) ;
      return( (int) ret ) ;
    }
   /* close file */
   _dos_close(hf) ;
#endif

   return( 0 ) ;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -