Initial version of more
This commit is contained in:
parent
6587cbb26c
commit
c5c09d28e5
1
Makefile
1
Makefile
|
@ -46,6 +46,7 @@ dist:
|
||||||
$(PACKAGE)-$(VERSION)/src/ls.c \
|
$(PACKAGE)-$(VERSION)/src/ls.c \
|
||||||
$(PACKAGE)-$(VERSION)/src/mkdir.c \
|
$(PACKAGE)-$(VERSION)/src/mkdir.c \
|
||||||
$(PACKAGE)-$(VERSION)/src/mkfifo.c \
|
$(PACKAGE)-$(VERSION)/src/mkfifo.c \
|
||||||
|
$(PACKAGE)-$(VERSION)/src/more.c \
|
||||||
$(PACKAGE)-$(VERSION)/src/mv.c \
|
$(PACKAGE)-$(VERSION)/src/mv.c \
|
||||||
$(PACKAGE)-$(VERSION)/src/nice.c \
|
$(PACKAGE)-$(VERSION)/src/nice.c \
|
||||||
$(PACKAGE)-$(VERSION)/src/pr.c \
|
$(PACKAGE)-$(VERSION)/src/pr.c \
|
||||||
|
|
17
src/Makefile
17
src/Makefile
|
@ -1,4 +1,4 @@
|
||||||
TARGETS = basename cat chgrp chmod chown cksum cmp cp df dirname du echo false file find head id kill link ln locale logname ls mkdir mkfifo mv nice pr printf pwd renice rm rmdir sleep strings tail test time touch true tty uname uniq unlink wc who
|
TARGETS = basename cat chgrp chmod chown cksum cmp cp df dirname du echo false file find head id kill link ln locale logname ls mkdir mkfifo more mv nice pr printf pwd renice rm rmdir sleep strings tail test time touch true tty uname uniq unlink wc who
|
||||||
PREFIX = /usr/local
|
PREFIX = /usr/local
|
||||||
DESTDIR =
|
DESTDIR =
|
||||||
BINDIR = $(PREFIX)/bin
|
BINDIR = $(PREFIX)/bin
|
||||||
|
@ -190,6 +190,13 @@ mkfifo_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
||||||
mkfifo: $(mkfifo_OBJS)
|
mkfifo: $(mkfifo_OBJS)
|
||||||
$(CC) -o mkfifo $(mkfifo_OBJS) $(mkfifo_LDFLAGS)
|
$(CC) -o mkfifo $(mkfifo_OBJS) $(mkfifo_LDFLAGS)
|
||||||
|
|
||||||
|
more_OBJS = more.o
|
||||||
|
more_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
||||||
|
more_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
||||||
|
|
||||||
|
more: $(more_OBJS)
|
||||||
|
$(CC) -o more $(more_OBJS) $(more_LDFLAGS)
|
||||||
|
|
||||||
mv_OBJS = mv.o
|
mv_OBJS = mv.o
|
||||||
mv_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
mv_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
||||||
mv_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
mv_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
||||||
|
@ -412,6 +419,9 @@ mkdir.o: mkdir.c common.c
|
||||||
mkfifo.o: mkfifo.c common.c
|
mkfifo.o: mkfifo.c common.c
|
||||||
$(CC) $(mkfifo_CFLAGS) -c mkfifo.c
|
$(CC) $(mkfifo_CFLAGS) -c mkfifo.c
|
||||||
|
|
||||||
|
more.o: more.c
|
||||||
|
$(CC) $(more_CFLAGS) -c more.c
|
||||||
|
|
||||||
mv.o: mv.c
|
mv.o: mv.c
|
||||||
$(CC) $(mv_CFLAGS) -c mv.c
|
$(CC) $(mv_CFLAGS) -c mv.c
|
||||||
|
|
||||||
|
@ -476,7 +486,7 @@ who.o: who.c
|
||||||
$(CC) $(who_CFLAGS) -c who.c
|
$(CC) $(who_CFLAGS) -c who.c
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) -- $(basename_OBJS) $(cat_OBJS) $(chgrp_OBJS) $(chmod_OBJS) $(chown_OBJS) $(cksum_OBJS) $(cmp_OBJS) $(cp_OBJS) $(df_OBJS) $(dirname_OBJS) $(du_OBJS) $(echo_OBJS) $(false_OBJS) $(file_OBJS) $(find_OBJS) $(head_OBJS) $(id_OBJS) $(kill_OBJS) $(link_OBJS) $(ln_OBJS) $(locale_OBJS) $(logname_OBJS) $(ls_OBJS) $(mkdir_OBJS) $(mkfifo_OBJS) $(mv_OBJS) $(nice_OBJS) $(pr_OBJS) $(printf_OBJS) $(pwd_OBJS) $(renice_OBJS) $(rm_OBJS) $(rmdir_OBJS) $(sleep_OBJS) $(strings_OBJS) $(tail_OBJS) $(test_OBJS) $(time_OBJS) $(touch_OBJS) $(true_OBJS) $(tty_OBJS) $(uname_OBJS) $(uniq_OBJS) $(unlink_OBJS) $(wc_OBJS) $(who_OBJS)
|
$(RM) -- $(basename_OBJS) $(cat_OBJS) $(chgrp_OBJS) $(chmod_OBJS) $(chown_OBJS) $(cksum_OBJS) $(cmp_OBJS) $(cp_OBJS) $(df_OBJS) $(dirname_OBJS) $(du_OBJS) $(echo_OBJS) $(false_OBJS) $(file_OBJS) $(find_OBJS) $(head_OBJS) $(id_OBJS) $(kill_OBJS) $(link_OBJS) $(ln_OBJS) $(locale_OBJS) $(logname_OBJS) $(ls_OBJS) $(mkdir_OBJS) $(mkfifo_OBJS) $(more_OBJS) $(mv_OBJS) $(nice_OBJS) $(pr_OBJS) $(printf_OBJS) $(pwd_OBJS) $(renice_OBJS) $(rm_OBJS) $(rmdir_OBJS) $(sleep_OBJS) $(strings_OBJS) $(tail_OBJS) $(test_OBJS) $(time_OBJS) $(touch_OBJS) $(true_OBJS) $(tty_OBJS) $(uname_OBJS) $(uniq_OBJS) $(unlink_OBJS) $(wc_OBJS) $(who_OBJS)
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
$(RM) -- $(TARGETS)
|
$(RM) -- $(TARGETS)
|
||||||
|
@ -533,6 +543,8 @@ install: $(TARGETS)
|
||||||
$(MKDIR) $(DESTDIR)$(BINDIR)
|
$(MKDIR) $(DESTDIR)$(BINDIR)
|
||||||
$(INSTALL) -m 0755 -- mkfifo $(DESTDIR)$(BINDIR)/mkfifo
|
$(INSTALL) -m 0755 -- mkfifo $(DESTDIR)$(BINDIR)/mkfifo
|
||||||
$(MKDIR) $(DESTDIR)$(BINDIR)
|
$(MKDIR) $(DESTDIR)$(BINDIR)
|
||||||
|
$(INSTALL) -m 0755 -- more $(DESTDIR)$(BINDIR)/more
|
||||||
|
$(MKDIR) $(DESTDIR)$(BINDIR)
|
||||||
$(INSTALL) -m 0755 -- mv $(DESTDIR)$(BINDIR)/mv
|
$(INSTALL) -m 0755 -- mv $(DESTDIR)$(BINDIR)/mv
|
||||||
$(MKDIR) $(DESTDIR)$(BINDIR)
|
$(MKDIR) $(DESTDIR)$(BINDIR)
|
||||||
$(INSTALL) -m 0755 -- nice $(DESTDIR)$(BINDIR)/nice
|
$(INSTALL) -m 0755 -- nice $(DESTDIR)$(BINDIR)/nice
|
||||||
|
@ -601,6 +613,7 @@ uninstall:
|
||||||
$(RM) -- $(DESTDIR)$(BINDIR)/ls
|
$(RM) -- $(DESTDIR)$(BINDIR)/ls
|
||||||
$(RM) -- $(DESTDIR)$(BINDIR)/mkdir
|
$(RM) -- $(DESTDIR)$(BINDIR)/mkdir
|
||||||
$(RM) -- $(DESTDIR)$(BINDIR)/mkfifo
|
$(RM) -- $(DESTDIR)$(BINDIR)/mkfifo
|
||||||
|
$(RM) -- $(DESTDIR)$(BINDIR)/more
|
||||||
$(RM) -- $(DESTDIR)$(BINDIR)/mv
|
$(RM) -- $(DESTDIR)$(BINDIR)/mv
|
||||||
$(RM) -- $(DESTDIR)$(BINDIR)/nice
|
$(RM) -- $(DESTDIR)$(BINDIR)/nice
|
||||||
$(RM) -- $(DESTDIR)$(BINDIR)/pr
|
$(RM) -- $(DESTDIR)$(BINDIR)/pr
|
||||||
|
|
129
src/more.c
Normal file
129
src/more.c
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
/* $Id$ */
|
||||||
|
/* Copyright (c) 2011 Pierre Pronchery <khorben@defora.org> */
|
||||||
|
/* This file is part of DeforaOS Unix utils */
|
||||||
|
/* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* more */
|
||||||
|
/* private */
|
||||||
|
/* types */
|
||||||
|
typedef struct _Prefs
|
||||||
|
{
|
||||||
|
int lines;
|
||||||
|
} Prefs;
|
||||||
|
|
||||||
|
|
||||||
|
/* prototypes */
|
||||||
|
static int _error(char const * message, int ret);
|
||||||
|
|
||||||
|
|
||||||
|
/* functions */
|
||||||
|
/* more */
|
||||||
|
static int _more_do(Prefs * prefs, char const * filename);
|
||||||
|
|
||||||
|
static int _more(Prefs * prefs, int filec, char * filev[])
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if(filec == 0)
|
||||||
|
return _more_do(prefs, NULL);
|
||||||
|
for(i = 0; i < filec; i++)
|
||||||
|
ret |= _more_do(prefs, filev[i]);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int _more_do(Prefs * prefs, char const * filename)
|
||||||
|
{
|
||||||
|
FILE * fp = stdin;
|
||||||
|
char buf[1024];
|
||||||
|
size_t len;
|
||||||
|
int n = 1;
|
||||||
|
int c;
|
||||||
|
|
||||||
|
if(filename != NULL && (fp = fopen(filename, "r")) == NULL)
|
||||||
|
return _error(filename, 1);
|
||||||
|
while(fgets(buf, sizeof(buf), fp) != NULL)
|
||||||
|
{
|
||||||
|
len = strlen(buf);
|
||||||
|
if(fwrite(buf, 1, len, stdout) != len)
|
||||||
|
break; /* XXX report error */
|
||||||
|
if(prefs->lines <= 0)
|
||||||
|
continue;
|
||||||
|
if(len > 0 && buf[len - 1] != '\n')
|
||||||
|
continue;
|
||||||
|
if(++n % prefs->lines != 0)
|
||||||
|
continue;
|
||||||
|
n = 1;
|
||||||
|
fputs("--more--", stderr);
|
||||||
|
while((c = getchar()) != EOF && c != '\n');
|
||||||
|
}
|
||||||
|
if(filename != NULL)
|
||||||
|
fclose(fp);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* error */
|
||||||
|
static int _error(char const * message, int ret)
|
||||||
|
{
|
||||||
|
fputs("more: ", stderr);
|
||||||
|
perror(message);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* usage */
|
||||||
|
static int _usage(void)
|
||||||
|
{
|
||||||
|
fputs("Usage: more [file...]\n", stderr);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* public */
|
||||||
|
/* functions */
|
||||||
|
/* main */
|
||||||
|
int main(int argc, char * argv[])
|
||||||
|
{
|
||||||
|
Prefs prefs;
|
||||||
|
int o;
|
||||||
|
char * p;
|
||||||
|
|
||||||
|
memset(&prefs, 0, sizeof(prefs));
|
||||||
|
while((o = getopt(argc, argv, "n:")) != -1)
|
||||||
|
switch(o)
|
||||||
|
{
|
||||||
|
case 'n':
|
||||||
|
prefs.lines = strtol(optarg, &p, 10);
|
||||||
|
if(optarg[0] == '\0' || *p != '\0'
|
||||||
|
|| prefs.lines <= 0)
|
||||||
|
return _usage();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return _usage();
|
||||||
|
}
|
||||||
|
if(!isatty(0))
|
||||||
|
prefs.lines = 0;
|
||||||
|
else if(prefs.lines <= 0 && (p = getenv("LINES")) != NULL)
|
||||||
|
prefs.lines = strtol(p, NULL, 10);
|
||||||
|
return _more(&prefs, argc - optind, &argv[optind]);
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
targets=basename,cat,chgrp,chmod,chown,cksum,cmp,cp,df,dirname,du,echo,false,file,find,head,id,kill,link,ln,locale,logname,ls,mkdir,mkfifo,mv,nice,pr,printf,pwd,renice,rm,rmdir,sleep,strings,tail,test,time,touch,true,tty,uname,uniq,unlink,wc,who
|
targets=basename,cat,chgrp,chmod,chown,cksum,cmp,cp,df,dirname,du,echo,false,file,find,head,id,kill,link,ln,locale,logname,ls,mkdir,mkfifo,more,mv,nice,pr,printf,pwd,renice,rm,rmdir,sleep,strings,tail,test,time,touch,true,tty,uname,uniq,unlink,wc,who
|
||||||
cflags_force=-W
|
cflags_force=-W
|
||||||
cflags=-Wall -g -O2 -pedantic
|
cflags=-Wall -g -O2 -pedantic
|
||||||
dist=Makefile,common.c
|
dist=Makefile,common.c
|
||||||
|
@ -138,6 +138,11 @@ install=$(BINDIR)
|
||||||
[mkfifo.c]
|
[mkfifo.c]
|
||||||
depends=common.c
|
depends=common.c
|
||||||
|
|
||||||
|
[more]
|
||||||
|
type=binary
|
||||||
|
sources=more.c
|
||||||
|
install=$(BINDIR)
|
||||||
|
|
||||||
[mv]
|
[mv]
|
||||||
type=binary
|
type=binary
|
||||||
sources=mv.c
|
sources=mv.c
|
||||||
|
|
Loading…
Reference in New Issue
Block a user