From b48327d357e0818d1a6ae2a064cfa7d1567e1242 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Sun, 5 Dec 2021 15:17:44 -0800 Subject: feat(huge): huge refactor (in progress). Commented out libc includes to uncover all explicit dependencies. A large fraction has now been ported over (no testing). I did not port over the command line tools, such as the rc shell. These will be done independently - as of now I just want the library to stand independent. Compilation currently fails due to the lack of math functions. --- src/cmd/core/basename.c | 9 +++++---- src/cmd/core/cat.c | 14 ++++++++------ src/cmd/filter/filter.c | 32 ++++++++++++++++---------------- src/cmd/ic/ic.c | 16 ++++++++++++---- src/cmd/menu/menu.h | 12 ++++++++++++ src/cmd/rc/input.c | 47 ++++++++++++++++++++++++++++------------------- src/cmd/rc/rc.h | 4 ++++ src/cmd/rc/util.c | 4 ++-- src/cmd/rules.mk | 4 ++-- src/cmd/term/term.h | 14 ++++++++++++++ src/cmd/walk/walk.c | 14 +++++++------- 11 files changed, 110 insertions(+), 60 deletions(-) (limited to 'src/cmd') diff --git a/src/cmd/core/basename.c b/src/cmd/core/basename.c index 23d7b22..6b84812 100644 --- a/src/cmd/core/basename.c +++ b/src/cmd/core/basename.c @@ -13,6 +13,7 @@ main(int argc, char *argv[]) { int d; long n; + intptr x; char *p, *s; ARGBEGIN{ @@ -26,10 +27,10 @@ main(int argc, char *argv[]) p = d ? fs·dirname(argv[0]) : fs·basename(argv[0]); if(argc>1){ - n = strlen(p)-strlen(argv[1]); - if(n >= 0 && strcmp(p+n, argv[1])==0) + n = str·len(p)-str·len(argv[1]); + if(n >= 0 && str·compare(p+n, argv[1])==0) p[n] = 0; } - puts(p); - exits(nil); + sys·write(1,p,str·len(p),&x); + return 0; } diff --git a/src/cmd/core/cat.c b/src/cmd/core/cat.c index e9b770b..aeed1be 100644 --- a/src/cmd/core/cat.c +++ b/src/cmd/core/cat.c @@ -11,15 +11,15 @@ usage(void) static void cat(int fd, char *s) { - long n; + intptr nr, nw; char buf[8192]; - while((n=read(fd, buf, sizeof(buf)))>0){ - if(write(1, buf, n) != n) + while(!(sys·read(fd, buf, sizeof(buf), &nr))){ + if(sys·write(1, buf, nr, &nw) || nr != nw) fmt·panic("write error copying %s: %r", s); } - if(n<0) + if(nr<0) fmt·panic("error reading %s: %r", s); } @@ -40,12 +40,14 @@ main(int argc, char *argv[]) } while(argc-- > 0){ - if((fd = open(*argv, O_RDONLY))<0) + if(sys·open(*argv, sys·ORead, 0, &fd)) fmt·panic("can't open %s: %r", *argv); cat(fd, *argv); - close(fd); + sys·close(fd); argv++; } + + return 0; } diff --git a/src/cmd/filter/filter.c b/src/cmd/filter/filter.c index abc9a88..82fb364 100644 --- a/src/cmd/filter/filter.c +++ b/src/cmd/filter/filter.c @@ -2,42 +2,42 @@ #include #include +#include #include #include #define FLAG(x) (flag[(x)-'a']) -static void filter(const char *, const char *); +static void filter(char *, char *); static void usage(void); static int match = 0; static int flag[26]; static struct stat old, new; -static -void -filter(const char *path, const char *name) +static void +filter(char *path, char *name) { struct stat st, ln; if ((!stat(path, &st) && (FLAG('a') || name[0] != '.') /* hidden files */ - && (!FLAG('b') || S_ISBLK(st.st_mode)) /* block special */ - && (!FLAG('c') || S_ISCHR(st.st_mode)) /* character special */ - && (!FLAG('d') || S_ISDIR(st.st_mode)) /* directory */ - && (!FLAG('e') || access(path, F_OK) == 0) /* exists */ - && (!FLAG('f') || S_ISREG(st.st_mode)) /* regular file */ + && (!FLAG('b') || sys·InfoIsBlock(st.st_mode)) /* block special */ + && (!FLAG('c') || sys·InfoIsChar(st.st_mode)) /* character special */ + && (!FLAG('d') || sys·InfoIsDir(st.st_mode)) /* directory */ + && (!FLAG('e') || !sys·access(path,sys·FileExists)) /* exists */ + && (!FLAG('f') || sys·InfoIsFile(st.st_mode)) /* regular file */ && (!FLAG('g') || st.st_mode & S_ISGID) /* set-group-id flag */ && (!FLAG('h') || (!lstat(path, &ln) && S_ISLNK(ln.st_mode))) /* symbolic link */ && (!FLAG('n') || st.st_mtime > new.st_mtime) /* newer than file */ && (!FLAG('o') || st.st_mtime < old.st_mtime) /* older than file */ - && (!FLAG('p') || S_ISFIFO(st.st_mode)) /* named pipe */ - && (!FLAG('r') || access(path, R_OK) == 0) /* readable */ + && (!FLAG('p') || sys·InfoIsFifo(st.st_mode)) /* named pipe */ + && (!FLAG('r') || !sys·access(path, sys·FileCanRead)) /* readable */ && (!FLAG('s') || st.st_size > 0) /* not empty */ && (!FLAG('u') || st.st_mode & S_ISUID) /* set-user-id flag */ - && (!FLAG('w') || access(path, W_OK) == 0) /* writable */ - && (!FLAG('x') || access(path, X_OK) == 0)) != FLAG('v')) { /* executable */ + && (!FLAG('w') || !sys·access(path, sys·FileCanWrite)) /* writable */ + && (!FLAG('x') || !sys·access(path, sys·FileCanExec))) != FLAG('v')) { /* executable */ if (FLAG('q')) - exit(0); + rt·exit(0); match = 1; puts(name); } @@ -48,7 +48,7 @@ usage(void) { fprintf(stderr, "usage: %s [-abcdefghlpqrsuvwx] " "[-n file] [-o file] [file...]\n", argv0); - exit(2); /* like test(1) return > 1 on error */ + rt·exit(2); /* like test(1) return > 1 on error */ } int @@ -70,7 +70,7 @@ main(int argc, char *argv[]) break; default: /* miscellaneous operators */ - if (strchr("abcdefghlpqrsuvwx", ARGC())) + if(str·rfindc("abcdefghlpqrsuvwx", ARGC())) FLAG(ARGC()) = 1; else usage(); /* unknown flag */ diff --git a/src/cmd/ic/ic.c b/src/cmd/ic/ic.c index 7fc37d8..0d5daed 100644 --- a/src/cmd/ic/ic.c +++ b/src/cmd/ic/ic.c @@ -2,6 +2,15 @@ #include #include +#include +#include +#include +#include +#include +#include +#include +#include + #include #include #include @@ -71,14 +80,13 @@ static char nick[32], _nick[arrlen(nick)]; /* active nickname at runtime */ static char ircpath[PATH_MAX]; /* irc dir (-i) */ static char msg[IRC_MSG_MAX]; /* message buf used for communication */ -static -void +static void usage(void) { - fprintf(stderr, "usage: %s <-s host> [-i ] [-p ] " + fmt·fprint(sys·Stderr, "usage: %s <-s host> [-i ] [-p ] " "[-u ] [-n ] [-k ] " "[-f ]\n", argv0); - exit(1); + rt·exit(1); } static diff --git a/src/cmd/menu/menu.h b/src/cmd/menu/menu.h index de01607..8126d81 100644 --- a/src/cmd/menu/menu.h +++ b/src/cmd/menu/menu.h @@ -2,6 +2,18 @@ #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include #include diff --git a/src/cmd/rc/input.c b/src/cmd/rc/input.c index 9771174..f8bb2f9 100644 --- a/src/cmd/rc/input.c +++ b/src/cmd/rc/input.c @@ -119,7 +119,7 @@ enum KeyBackspace = 127 /* Backspace */ }; -static void doatexit(void); +static void doatexit(void*); /* vi operations */ typedef struct @@ -149,13 +149,15 @@ runetype(rune r) static void normalcursor(int fd) { - write(fd,"\e[2 q",5); + intptr x; + sys·write(fd,"\e[2 q",5,&x); } static void insertcursor(int fd) { - write(fd,"\e[6 q",5); + intptr x; + sys·write(fd,"\e[6 q",5,&x); } /* raw mode: 1960 magic shit. */ @@ -168,7 +170,7 @@ enterraw(int fd) goto fatal; if(!mode.defer){ - atexit(doatexit); + rt·atexit(doatexit,nil); mode.defer = 1; } if(tcgetattr(fd,&originalterm) == -1) @@ -198,7 +200,7 @@ enterraw(int fd) return 1; fatal: - errno = ENOTTY; + /* errno = ENOTTY; */ return 0; } @@ -216,17 +218,18 @@ exitraw(int fd) static int cursorposition(int ifd, int ofd) { - char buf[32]; + char *b,buf[32]; int cols, rows; + intptr n; unsigned int i = 0; /* Report cursor location */ - if(write(ofd, "\x1b[6n", 4) != 4) + if(sys·write(ofd, "\x1b[6n", 4, &n) || n != 4) return -1; /* Read the response: ESC [ rows ; cols R */ while(i < sizeof(buf)-1) { - if(read(ifd,buf+i,1) != 1) + if(sys·read(ifd,buf+i,1, &n) || n != 1) break; if(buf[i] == 'R') break; @@ -237,8 +240,12 @@ cursorposition(int ifd, int ofd) /* Parse it. */ if(buf[0] != KeyEsc || buf[1] != '[') return -1; - if(sscanf(buf+2,"%d;%d",&rows,&cols) != 2) - return -1; + b=buf+2; + while(*b != ';') + b++; + *b=0; + rows = str·atoi(buf+2); + cols = str·atoi(b+1); return cols; } @@ -247,6 +254,7 @@ cursorposition(int ifd, int ofd) static int columns(int ifd, int ofd) { + intptr n; struct winsize ws; if(ioctl(1, TIOCGWINSZ, &ws) == -1 || ws.ws_col == 0){ @@ -259,7 +267,7 @@ columns(int ifd, int ofd) goto failed; /* Go to right margin and get position. */ - if(write(ofd,"\x1b[999C",6) != 6) + if(sys·write(ofd,"\x1b[999C",6,&n) || n != 6) goto failed; cols = cursorposition(ifd,ofd); if(cols == -1) @@ -268,8 +276,8 @@ columns(int ifd, int ofd) /* Restore position. */ if(cols > start){ char esc[32]; - snprintf(esc,32,"\x1b[%dD",cols-start); - if(write(ofd,esc,strlen(esc)) == -1) + fmt·nsprint(esc,32,"\x1b[%dD",cols-start); + if(sys·write(ofd,esc,str·len(esc),&n)) ; } return cols; @@ -283,7 +291,8 @@ failed: static void clear(void) { - if(write(1,"\x1b[H\x1b[2J",7) <= 0) + intptr n; + if(sys·write(1,"\x1b[H\x1b[2J",7,&n)) ; } @@ -292,8 +301,8 @@ clear(void) static void beep(void) { - fprintf(stderr, "\x7"); - fflush(stderr); + fmt·fprint(sys·Stderr, "\x7"); + /* fmt·flush(stderr); */ } // ----------------------------------------------------------------------- @@ -1347,7 +1356,7 @@ interact(int ifd, int ofd, char *buf, intptr len, char *prompt) goto finish; case KeyCtrlC: - errno = EAGAIN; + /* errno = EAGAIN; */ return -1; case KeyBackspace: @@ -1569,7 +1578,7 @@ raw(char *buf, intptr len, char *prompt) int n; if(!len){ - errno = EINVAL; + /* errno = EINVAL; */ return -1; } @@ -1635,7 +1644,7 @@ readline(char *prompt) /* At exit we'll try to fix the terminal to the initial conditions. */ static void -doatexit(void) +doatexit(void *_) { exitraw(0); normalcursor(1); diff --git a/src/cmd/rc/rc.h b/src/cmd/rc/rc.h index 76a1b3d..67d10a4 100644 --- a/src/cmd/rc/rc.h +++ b/src/cmd/rc/rc.h @@ -4,6 +4,10 @@ #include #include +#include +#include +#include + // ----------------------------------------------------------------------- // types diff --git a/src/cmd/rc/util.c b/src/cmd/rc/util.c index b0be788..0949377 100644 --- a/src/cmd/rc/util.c +++ b/src/cmd/rc/util.c @@ -4,7 +4,7 @@ void fatal(char *msg, ...) { va_list args; - vfprintf(stderr, msg, args); + fmt·fprint(sys·Stderr, msg, args); va_end(args); abort(); @@ -17,7 +17,7 @@ emalloc(uintptr n) if(!(p = malloc(n))) fatal("out of memory: can't allocate %d bytes", n); - memset(p, 0, n); + mem·set(p, n, 0); return p; } diff --git a/src/cmd/rules.mk b/src/cmd/rules.mk index ea53737..dbb4eb0 100644 --- a/src/cmd/rules.mk +++ b/src/cmd/rules.mk @@ -5,8 +5,8 @@ include share/push.mk # DIR := $(d)/cc # include $(DIR)/rules.mk -DIR := $(d)/rc -include $(DIR)/rules.mk +# DIR := $(d)/rc +# include $(DIR)/rules.mk DIR := $(d)/core include $(DIR)/rules.mk diff --git a/src/cmd/term/term.h b/src/cmd/term/term.h index c370239..9501ae2 100644 --- a/src/cmd/term/term.h +++ b/src/cmd/term/term.h @@ -4,6 +4,20 @@ #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef wchar_t wchar; + #include #include #include diff --git a/src/cmd/walk/walk.c b/src/cmd/walk/walk.c index 29a8600..8239587 100644 --- a/src/cmd/walk/walk.c +++ b/src/cmd/walk/walk.c @@ -6,8 +6,9 @@ static char buf[4*1024], *c = buf; /* should be greater or equal to PATH_MAX */ static void flush(void) { + intptr n; *c = 0; - puts(buf); + sys·write(1, buf, str·len(buf), &n); c = buf; } @@ -27,12 +28,11 @@ copy: return 0; } -static -void +static void usage(void) { - fprintf(stderr, "usage: walk [-dlpv] file ...\n"); - exit(1); + fmt·fprint(sys·Stderr, "usage: walk [-dlpv] file ...\n"); + rt·exit(1); } int @@ -44,7 +44,7 @@ main(int argc, char *argv[]) ARGBEGIN{ case 'd': - max = atoi(ARGF()); + max = str·atoi(ARGF()); break; case 'l': f ^= fs·nolinks; @@ -78,5 +78,5 @@ main(int argc, char *argv[]) } fs·fini(&walker); flush(); - exit(err); + rt·exit(err); } -- cgit v1.2.1