Implemented -h and -n
This commit is contained in:
parent
64c96d0722
commit
04059075af
21
src/pr.c
21
src/pr.c
|
@ -16,12 +16,14 @@
|
||||||
typedef struct _Prefs
|
typedef struct _Prefs
|
||||||
{
|
{
|
||||||
int flags;
|
int flags;
|
||||||
|
char * header;
|
||||||
int lines;
|
int lines;
|
||||||
int width;
|
int width;
|
||||||
int offset;
|
int offset;
|
||||||
} Prefs;
|
} Prefs;
|
||||||
#define PREFS_d 1
|
#define PREFS_d 1
|
||||||
#define PREFS_t 2
|
#define PREFS_n 2
|
||||||
|
#define PREFS_t 4
|
||||||
|
|
||||||
/* functions */
|
/* functions */
|
||||||
static int _pr_error(char const * message, int ret);
|
static int _pr_error(char const * message, int ret);
|
||||||
|
@ -74,6 +76,7 @@ static int _pr_do(Prefs * prefs, FILE * fp, char const * filename)
|
||||||
size_t len;
|
size_t len;
|
||||||
int nb = 0;
|
int nb = 0;
|
||||||
size_t page = 1;
|
size_t page = 1;
|
||||||
|
size_t line = 1;
|
||||||
|
|
||||||
if(fp == stdin)
|
if(fp == stdin)
|
||||||
st.st_mtime = time(NULL);
|
st.st_mtime = time(NULL);
|
||||||
|
@ -92,6 +95,8 @@ static int _pr_do(Prefs * prefs, FILE * fp, char const * filename)
|
||||||
nb = 10;
|
nb = 10;
|
||||||
}
|
}
|
||||||
_do_offset(prefs->offset); /* FIXME not if truncated line */
|
_do_offset(prefs->offset); /* FIXME not if truncated line */
|
||||||
|
if(prefs->flags & PREFS_n)
|
||||||
|
printf("%5u ", line++);
|
||||||
if((len = strlen(buf)) > 0 && buf[len - 1] == '\n'
|
if((len = strlen(buf)) > 0 && buf[len - 1] == '\n'
|
||||||
&& prefs->flags & PREFS_d)
|
&& prefs->flags & PREFS_d)
|
||||||
buf[len++] = '\n'; /* XXX with offset? */
|
buf[len++] = '\n'; /* XXX with offset? */
|
||||||
|
@ -135,7 +140,9 @@ static void _do_header(Prefs * prefs, time_t const mtime, char const * filename,
|
||||||
localtime_r(&mtime, &tm);
|
localtime_r(&mtime, &tm);
|
||||||
strftime(buf, sizeof(buf) - 1, "%b %e %H:%M %Y", &tm);
|
strftime(buf, sizeof(buf) - 1, "%b %e %H:%M %Y", &tm);
|
||||||
buf[sizeof(buf) - 1] = '\0';
|
buf[sizeof(buf) - 1] = '\0';
|
||||||
printf("%s %s%s%u", buf, filename, " Page ", page);
|
printf("%s %s%s%u", buf, prefs->header != NULL
|
||||||
|
? prefs->header : filename, " Page ",
|
||||||
|
page);
|
||||||
}
|
}
|
||||||
fputc('\n', stdout);
|
fputc('\n', stdout);
|
||||||
}
|
}
|
||||||
|
@ -173,20 +180,28 @@ int main(int argc, char * argv[])
|
||||||
char * p;
|
char * p;
|
||||||
|
|
||||||
memset(&prefs, 0, sizeof(prefs));
|
memset(&prefs, 0, sizeof(prefs));
|
||||||
|
prefs.header = NULL;
|
||||||
prefs.lines = 66;
|
prefs.lines = 66;
|
||||||
|
prefs.offset = 0;
|
||||||
prefs.width = 72;
|
prefs.width = 72;
|
||||||
while((o = getopt(argc, argv, "dl:o:tw:")) != -1)
|
while((o = getopt(argc, argv, "dh:l:no:tw:")) != -1)
|
||||||
switch(o)
|
switch(o)
|
||||||
{
|
{
|
||||||
case 'd':
|
case 'd':
|
||||||
prefs.flags |= PREFS_d;
|
prefs.flags |= PREFS_d;
|
||||||
break;
|
break;
|
||||||
|
case 'h':
|
||||||
|
prefs.header = optarg;
|
||||||
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
prefs.lines = strtol(optarg, &p, 10);
|
prefs.lines = strtol(optarg, &p, 10);
|
||||||
if(optarg[0] == '\0' || *p != '\0'
|
if(optarg[0] == '\0' || *p != '\0'
|
||||||
|| prefs.lines <= 0)
|
|| prefs.lines <= 0)
|
||||||
return _usage();
|
return _usage();
|
||||||
break;
|
break;
|
||||||
|
case 'n':
|
||||||
|
prefs.flags |= PREFS_n;
|
||||||
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
prefs.offset = strtol(optarg, &p, 10);
|
prefs.offset = strtol(optarg, &p, 10);
|
||||||
if(optarg[0] == '\0' || *p != '\0'
|
if(optarg[0] == '\0' || *p != '\0'
|
||||||
|
|
Loading…
Reference in New Issue
Block a user