8#include "tpcclibConfig.h"
19static char *info[] = {
20 "Renames the specified key in Interfile-type file.",
21 "Only the first occurrence of key name is renamed.",
22 "If new key name is not given, then previous key name is deleted.",
23 "Empty string can be entered as current key name to add key name for",
24 "the first line that currently has no key name.",
26 "Usage: @P [Options] filename key [newkey]",
32 " @P parameters.ift p1 start_time",
34 "See also: iftlist, iftedit, iftadd, iftdel, iftisval, iftvalc, iftmatch",
36 "Keywords: header, IFT, tool",
55int main(
int argc,
char **argv)
57 int ai, help=0, version=0, verbose=1;
59 char iftfile[FILENAME_MAX], keyname1[FILENAME_MAX], keyname2[FILENAME_MAX];
65 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
66 iftfile[0]=keyname1[0]=keyname2[0]=(char)0;
68 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
71 fprintf(stderr,
"Error: invalid option '%s'.\n", argv[ai]);
76 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
85 if(ai<argc)
strlcpy(iftfile, argv[ai++], FILENAME_MAX);
86 if(ai<argc)
strlcpy(keyname1, argv[ai++], FILENAME_MAX);
87 if(ai<argc)
strlcpy(keyname2, argv[ai++], FILENAME_MAX);
88 if(ai<argc) {fprintf(stderr,
"Error: too many arguments.\n");
return(1);}
91 if(!keyname1[0] && !keyname2[0]) {
tpcPrintUsage(argv[0], info, stdout);
return(1);}
100 for(ai=0; ai<argc; ai++) printf(
"%s ", argv[ai]);
101 printf(
"\n"); fflush(stdout);
102 printf(
"iftfile := %s\n", iftfile);
103 printf(
"keyname1 := %s\n", keyname1);
104 printf(
"keyname2 := %s\n", keyname2);
113 if(verbose>1) printf(
"reading %s\n", iftfile);
114 FILE *fp=fopen(iftfile,
"r");
if(fp==NULL) {
115 fprintf(stderr,
"Error: cannot open file %s\n", iftfile);
118 ret=
iftRead(&ift, fp, 0, 1, &status); fclose(fp);
123 if(verbose>2) printf(
"list size: %d item(s)\n", ift.
keyNr);
129 if(strlen(keyname1)==0) {
132 for(
int i=0; i<ift.
keyNr; i++) {
133 if(ift.
item[i].
key==NULL || strlen(ift.
item[i].
key)==0) {li=i;
break;}
140 fprintf(stderr,
"Error: file contains no key '%s'\n", keyname1);
143 if(verbose>3) printf(
"key_index := %d\n", li);
148 if(verbose>1) printf(
"renaming key '%s' -> '%s'\n", ift.
item[li].
key, keyname2);
159 if(verbose>1) printf(
"writing modified IFT in %s\n", iftfile);
160 fp=fopen(iftfile,
"w");
if(fp==NULL) {
161 fprintf(stderr,
"Error: cannot open file %s\n", iftfile);
164 ret=
iftWrite(&ift, fp, &status); fclose(fp);
int iftReplaceKey(IFT *ift, int i, const char *key, TPCSTATUS *status)
int iftFindKey(IFT *ift, const char *key, int start_index)
int iftWrite(IFT *ift, FILE *fp, TPCSTATUS *status)
int iftRead(IFT *ift, FILE *fp, int is_key_required, int is_comment_accepted, TPCSTATUS *status)
int tpcProcessStdOptions(const char *s, int *print_usage, int *print_version, int *verbose_level)
int tpcHtmlUsage(const char *program, char *text[], const char *path)
void tpcPrintBuild(const char *program, FILE *fp)
void tpcPrintUsage(const char *program, char *text[], FILE *fp)
void statusInit(TPCSTATUS *s)
char * errorMsg(tpcerror e)
void statusSet(TPCSTATUS *s, const char *func, const char *srcfile, int srcline, tpcerror error)
size_t strlcpy(char *dst, const char *src, size_t dstsize)
int verbose
Verbose level, used by statusPrint() etc.
tpcerror error
Error code.
Header file for library libtpcextensions.
Header file for library libtpcift.