Standardize more code on wide characters. - sam - An updated version of the sam text editor.
(HTM) git clone git://vernunftzentrum.de/sam.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
(DIR) commit 97562b07dcb8e2eca6523d2820f504275c6a9bb4
(DIR) parent ab21252fbf883e2f6fd0f8293ea109839f37728c
(HTM) Author: Rob King <jking@deadpixi.com>
Date: Thu, 20 Oct 2016 17:00:56 -0500
Standardize more code on wide characters.
Eventually I'd like to see sam use wide characters exclusively,
except for obvious exceptions (e.g. arguments to syscalls).
Diffstat:
sam/error.c | 19 ++++++++-----------
sam/io.c | 12 ++++++------
sam/mesg.c | 4 ++--
sam/regexp.c | 10 +++++-----
sam/sam.c | 18 +++++++++---------
sam/sam.h | 4 ++--
sam/shell.c | 6 +++---
sam/sys.c | 2 +-
sam/unix.c | 10 +++++-----
sam/xec.c | 7 ++-----
10 files changed, 43 insertions(+), 49 deletions(-)
---
(DIR) diff --git a/sam/error.c b/sam/error.c
@@ -95,7 +95,7 @@ error_c(Err s, int c)
void
warn(Warn s)
{
- dprint("?warning: %s\n", wmsg[s]);
+ dprint(L"?warning: %s\n", wmsg[s]);
}
void
@@ -113,24 +113,21 @@ warn_SS(Warn s, String *a, String *b)
void
warn_s(Warn s, char *a)
{
- dprint("?warning: %s `%s'\n", wmsg[s], a);
+ dprint(L"?warning: %s `%s'\n", wmsg[s], a);
}
void
-termwrite(char *s)
+termwrite(wchar_t *p)
{
- String *p;
+ size_t l = wcslen(p);
if(downloaded){
- p = tmpcstr(s);
if(cmd)
- Finsert(cmd, p, cmdpt);
+ Finsert(cmd, tmprstr(p, l), cmdpt);
else
- Strinsert(&cmdstr, p, cmdstr.n);
- cmdptadv += p->n;
- Strclose(p);
- free(p);
+ Strinsert(&cmdstr, tmprstr(p, l), cmdstr.n);
+ cmdptadv += wcslen(p);
}else
- Write(STDERR_FILENO, s, strlen(s));
+ fprintf(stderr, "%ls", p);
}
(DIR) diff --git a/sam/io.c b/sam/io.c
@@ -49,14 +49,14 @@ writef(File *f)
genc = Strtoc(&genstr);
if((io=creat(genc, 0666L)) < 0)
error_s(Ecreate, genc);
- dprint("%s: ", genc);
+ dprint(L"%s: ", genc);
if(statfd(io, 0, 0, 0, &length, &appendonly) > 0 && appendonly && length>0)
error(Eappend);
n = writeio(f);
if(f->name.s[0]==0 || samename)
state(f, addr.r.p1==0 && addr.r.p2==f->nrunes? Clean : Dirty);
if(newfile)
- dprint("(new file) ");
+ dprint(L"(new file) ");
if(addr.r.p2>0 && Fchars(f, &c, addr.r.p2-1, addr.r.p2) && c!='\n')
warn(Wnotnewline);
closeio(n);
@@ -148,7 +148,7 @@ closeio(Posn p)
close(io);
io = 0;
if(p >= 0)
- dprint("#%lu\n", p);
+ dprint(L"#%lu\n", p);
}
int remotefd0 = 0;
@@ -204,7 +204,7 @@ connectto(char *machine)
int p1[2], p2[2];
if(pipe(p1)<0 || pipe(p2)<0){
- dprint("can't pipe\n");
+ dprint(L"can't pipe\n");
exit(EXIT_FAILURE);
}
remotefd0 = p1[0];
@@ -218,11 +218,11 @@ connectto(char *machine)
close(p2[0]);
close(p2[1]);
execlp(getenv("RSH") ? getenv("RSH") : RXPATH, getenv("RSH") ? getenv("RSH") : RXPATH, machine, rsamname, "-R", (char*)0);
- dprint("can't exec %s\n", RXPATH);
+ dprint(L"can't exec %s\n", RXPATH);
exit(EXIT_FAILURE);
case -1:
- dprint("can't fork\n");
+ dprint(L"can't fork\n");
exit(EXIT_FAILURE);
}
close(p1[1]);
(DIR) diff --git a/sam/mesg.c b/sam/mesg.c
@@ -451,7 +451,7 @@ inmesg(Tmesg type)
m = snarfbuf->nrunes;
if(m > 32000) { /* tmprstr stores len in a int16_t */
m = 32000;
- dprint("?warning: snarf buffer truncated\n");
+ dprint(L"?warning: snarf buffer truncated\n");
}
rp = malloc(m*sizeof(wchar_t));
if(rp){
@@ -465,7 +465,7 @@ inmesg(Tmesg type)
Write(1, c, i);
free(c);
} else
- dprint("snarf buffer too long\n");
+ dprint(L"snarf buffer too long\n");
break;
case Tsetsnarf:
(DIR) diff --git a/sam/regexp.c b/sam/regexp.c
@@ -371,12 +371,12 @@ dumpstack(void){
Node *stk;
int *ip;
- dprint("operators\n");
+ dprint(L"operators\n");
for(ip = atorstack; ip<atorp; ip++)
- dprint("0%o\n", *ip);
- dprint("operands\n");
+ dprint(L"0%o\n", *ip);
+ dprint(L"operands\n");
for(stk = andstack; stk<andp; stk++)
- dprint("0%o\t0%o\n", stk->first->type, stk->last->type);
+ dprint(L"0%o\t0%o\n", stk->first->type, stk->last->type);
}
void
dump(void){
@@ -384,7 +384,7 @@ dump(void){
l = program;
do{
- dprint("%d:\t0%o\t%d\t%d\n", l-program, l->type,
+ dprint(L"%d:\t0%o\t%d\t%d\n", l-program, l->type,
l->left-program, l->right-program);
}while(l++->type);
}
(DIR) diff --git a/sam/sam.c b/sam/sam.c
@@ -232,7 +232,7 @@ panic(char *s)
if(!panicking++ && !setjmp(mainloop)){
wasd = downloaded;
downloaded = 0;
- dprint("sam: panic: %s\n", s);
+ dprint(L"sam: panic: %s\n", s);
if(wasd)
fprintf(stderr, "sam: panic: %s\n", s);
rescue();
@@ -247,7 +247,7 @@ hiccough(char *s)
exit(EXIT_FAILURE);
if(s)
- dprint("%s\n", s);
+ dprint(L"%s\n", s);
resetcmd();
resetxec();
@@ -467,7 +467,7 @@ filename(File *f)
if(genc)
free(genc);
genc = Strtoc(&f->name);
- dprint("%c%c%c %s\n", " '"[f->state==Dirty],
+ dprint(L"%c%c%c %s\n", " '"[f->state==Dirty],
"-+"[f->rasp!=0], " ."[f==curfile], genc);
}
@@ -739,15 +739,15 @@ printposn(File *f, int charsonly)
/* check if addr ends with '\n' */
if(addr.r.p2>0 && addr.r.p2>addr.r.p1 && (Fgetcset(f, addr.r.p2-1),Fgetc(f)=='\n'))
--l2;
- dprint("%lu", l1);
+ dprint(L"%lu", l1);
if(l2 != l1)
- dprint(",%lu", l2);
- dprint("; ");
+ dprint(L",%lu", l2);
+ dprint(L"; ");
}
- dprint("#%lu", addr.r.p1);
+ dprint(L"#%lu", addr.r.p1);
if(addr.r.p2 != addr.r.p1)
- dprint(",#%lu", addr.r.p2);
- dprint("\n");
+ dprint(L",#%lu", addr.r.p2);
+ dprint(L"\n");
}
void
(DIR) diff --git a/sam/sam.h b/sam/sam.h
@@ -197,7 +197,7 @@ void delete(File*);
void delfile(File*);
void dellist(List*, int);
void doubleclick(File*, Posn);
-void dprint(char*, ...);
+void dprint(wchar_t *, ...);
void edit(File*, int);
void *emalloc(uint64_t);
void *erealloc(void*, uint64_t);
@@ -268,7 +268,7 @@ String *tmpcstr(char*);
String *tmprstr(wchar_t*, int);
void freetmpstr(String*);
void termcommand(void);
-void termwrite(char*);
+void termwrite(wchar_t *);
File *tofile(String*);
void toterminal(File*, int);
void trytoclose(File*);
(DIR) diff --git a/sam/shell.c b/sam/shell.c
@@ -127,7 +127,7 @@ plan9(File *f, int type, String *s, int nest)
if(downloaded)
checkerrs();
if(!nest)
- dprint("!\n");
+ dprint(L"!\n");
return retcode;
}
@@ -146,9 +146,9 @@ checkerrs(void)
if(*p=='\n')
nl++;
*p = 0;
- dprint("%s", buf);
+ dprint(L"%s", buf);
if(p-buf < l-1)
- dprint("(sam: more in %s)\n", errfile);
+ dprint(L"(sam: more in %s)\n", errfile);
}
close(f);
}
(DIR) diff --git a/sam/sys.c b/sam/sys.c
@@ -27,7 +27,7 @@ syserror(char *a)
if(!inerror){
inerror = true;
strncpy(buf, strerror(errno), ERRLEN);
- dprint("%s: ", a);
+ dprint(L"%s: ", a);
error_s(Eio, buf);
}
}
(DIR) diff --git a/sam/unix.c b/sam/unix.c
@@ -37,7 +37,7 @@ print_ss(char *s, String *a, String *b)
for (cp = bp, rp = b->s; *rp; rp++)
cp += runetochar(cp, *rp);
*cp = 0;
- dprint("?warning: %s `%.*s' and `%.*s'\n", s, a->n, ap, b->n, bp);
+ dprint(L"?warning: %s `%.*s' and `%.*s'\n", s, a->n, ap, b->n, bp);
free(ap);
free(bp);
}
@@ -52,7 +52,7 @@ print_s(char *s, String *a)
for (cp = ap, rp = a->s; *rp; rp++)
cp += runetochar(cp, *rp);
*cp = 0;
- dprint("?warning: %s `%.*s'\n", s, a->n, ap);
+ dprint(L"?warning: %s `%.*s'\n", s, a->n, ap);
free(ap);
}
@@ -141,13 +141,13 @@ erealloc(void *p, uint64_t n)
}
void
-dprint(char *z, ...)
+dprint(wchar_t *z, ...)
{
va_list args;
- char buf[BLOCKSIZE + 1] = {0};
+ wchar_t buf[BLOCKSIZE + 1] = {0};
va_start(args, z);
- vsnprintf(buf, BLOCKSIZE, z, args);
+ vswprintf(buf, BLOCKSIZE, z, args);
termwrite(buf);
va_end(args);
}
(DIR) diff --git a/sam/xec.c b/sam/xec.c
@@ -362,7 +362,6 @@ display(File *f)
{
Posn p1, p2;
int np, n;
- char *c;
p1 = addr.r.p1;
p2 = addr.r.p2;
@@ -374,12 +373,10 @@ display(File *f)
if(n <= 0)
panic("display");
genbuf[n] = 0;
- c = Strtoc(tmprstr(genbuf, n+1));
if(downloaded)
- termwrite(c);
+ termwrite(genbuf);
else
- Write(1, c, strlen(c));
- free(c);
+ fprintf(stdout, "%ls", genbuf);
p1+=n;
}
f->dot = addr;