📄 setver.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(¶ms, &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 + -