ref: e11c7aa718df592bd69de53ce1d6498cc870f256
parent: 606901dc5da9cb09acb5593c5cf74ce1b52ca6e2
author: henesy <devnull@localhost>
date: Wed Mar 13 19:20:12 EDT 2019
add usage to acme ;; remove util arg/env redundant functionality ;; fix acme failing to start starting a trashed draw context
--- a/appl/acme/acme.b
+++ b/appl/acme/acme.b
@@ -4,6 +4,8 @@
sys : Sys;
bufio : Bufio;
+env : Env;
+arg : Arg;
workdir : Workdir;
drawm : Draw;
styx : Styx;
@@ -42,8 +44,8 @@
Xfid : import xfidm;
cmouse, ckeyboard, cwait, ccommand, ckill, cxfidalloc, cxfidfree, cerr, cplumb, cedit : import dat;
font, bflush, balloc, draw : import graph;
-Arg, PNPROC, PNGROUP : import utils;
-arginit, argopt, argf, error, warning, postnote : import utils;
+PNPROC, PNGROUP : import utils;
+error, warning, postnote : import utils;
yellow, green, red, blue, black, white, mainwin, display : import gui;
Disk : import diskm;
Row : import rowm;
@@ -57,120 +59,6 @@
tfd : ref Sys->FD;
lasttime : int;
-init(ctxt : ref Draw->Context, argl : list of string)
-{
- acmectxt = ctxt;
-
- sys = load Sys Sys->PATH;
- sys->pctl(Sys->NEWPGRP, nil);
-
- {
- # tfd = sys->create("./time", Sys->OWRITE, 8r600);
- # lasttime = sys->millisec();
- bufio = load Bufio Bufio->PATH;
- workdir = load Workdir Workdir->PATH;
- drawm = load Draw Draw->PATH;
-
- styx = load Styx Styx->PATH;
-
- acme = load Acme SELF;
-
- gui = load Gui path(Gui->PATH);
- graph = load Graph path(Graph->PATH);
- dat = load Dat path(Dat->PATH);
- framem = load Framem path(Framem->PATH);
- utils = load Utils path(Utils->PATH);
- regx = load Regx path(Regx->PATH);
- scrl = load Scroll path(Scroll->PATH);
- textm = load Textm path(Textm->PATH);
- filem = load Filem path(Filem->PATH);
- windowm = load Windowm path(Windowm->PATH);
- rowm = load Rowm path(Rowm->PATH);
- columnm = load Columnm path(Columnm->PATH);
- bufferm = load Bufferm path(Bufferm->PATH);
- diskm = load Diskm path(Diskm->PATH);
- exec = load Exec path(Exec->PATH);
- look = load Look path(Look->PATH);
- timerm = load Timerm path(Timerm->PATH);
- fsys = load Fsys path(Fsys->PATH);
- xfidm = load Xfidm path(Xfidm->PATH);
- plumbmsg = load Plumbmsg Plumbmsg->PATH;
- editm = load Edit path(Edit->PATH);
- editlog = load Editlog path(Editlog->PATH);
- editcmd = load Editcmd path(Editcmd->PATH);
- styxaux = load Styxaux path(Styxaux->PATH);
-
- mods := ref Dat->Mods(sys, bufio, drawm, styx, styxaux,
- acme, gui, graph, dat, framem,
- utils, regx, scrl,
- textm, filem, windowm, rowm, columnm,
- bufferm, diskm, exec, look, timerm,
- fsys, xfidm, plumbmsg, editm, editlog, editcmd);
-
- styx->init();
- styxaux->init();
-
- utils->init(mods);
- gui->init(mods);
- graph->init(mods);
- dat->init(mods);
- framem->init(mods);
- regx->init(mods);
- scrl->init(mods);
- textm->init(mods);
- filem->init(mods);
- windowm->init(mods);
- rowm->init(mods);
- columnm->init(mods);
- bufferm->init(mods);
- diskm->init(mods);
- exec->init(mods);
- look->init(mods);
- timerm->init(mods);
- fsys->init(mods);
- xfidm->init(mods);
- editm->init(mods);
- editlog->init(mods);
- editcmd->init(mods);
-
- utils->debuginit();
-
- if (plumbmsg->init(1, "edit", Dat->PLUMBSIZE) >= 0)
- plumbed = 1;
-
- main(argl);
-
- }
-# exception{
-# * =>
-# sys->fprint(sys->fildes(2), "acme: fatal: %s\n", utils->getexc());
-# sys->print("acme: fatal: %s\n", utils->getexc());
-# shutdown("error");
-# }
-}
-
-timing(s : string)
-{
- thistime := sys->millisec();
- sys->fprint(tfd, "%s %d\n", s, thistime-lasttime);
- lasttime = thistime;
-}
-
-path(p : string) : string
-{
- if (RELEASECOPY)
- return p;
- else {
- # inlined strrchr since not loaded yet
- for (n := len p - 1; n >= 0; n--)
- if (p[n] == '/')
- break;
- if (n >= 0)
- p = p[n+1:];
- return "/usr/jrf/acme/" + p;
- }
-}
-
waitpid0, waitpid1 : int;
mainpid : int;
@@ -189,15 +77,68 @@
NSnarf : con 32;
snarfrune : ref Dat->Astring;
-main(argl : list of string)
+init(ctxt : ref Draw->Context, argl : list of string)
{
i, ac : int;
loadfile : string;
p : int;
c : ref Column;
- arg : ref Arg;
ncol : int;
+ acmectxt = ctxt;
+ sys = load Sys Sys->PATH;
+ sys->pctl(Sys->NEWPGRP, nil);
+
+ # tfd = sys->create("./time", Sys->OWRITE, 8r600);
+ # lasttime = sys->millisec();
+ arg = load Arg Arg->PATH;
+ env = load Env Env->PATH;
+ bufio = load Bufio Bufio->PATH;
+ workdir = load Workdir Workdir->PATH;
+ drawm = load Draw Draw->PATH;
+
+ styx = load Styx Styx->PATH;
+
+ acme = load Acme SELF;
+
+ gui = load Gui path(Gui->PATH);
+ graph = load Graph path(Graph->PATH);
+ dat = load Dat path(Dat->PATH);
+ framem = load Framem path(Framem->PATH);
+ utils = load Utils path(Utils->PATH);
+ regx = load Regx path(Regx->PATH);
+ scrl = load Scroll path(Scroll->PATH);
+ textm = load Textm path(Textm->PATH);
+ filem = load Filem path(Filem->PATH);
+ windowm = load Windowm path(Windowm->PATH);
+ rowm = load Rowm path(Rowm->PATH);
+ columnm = load Columnm path(Columnm->PATH);
+ bufferm = load Bufferm path(Bufferm->PATH);
+ diskm = load Diskm path(Diskm->PATH);
+ exec = load Exec path(Exec->PATH);
+ look = load Look path(Look->PATH);
+ timerm = load Timerm path(Timerm->PATH);
+ fsys = load Fsys path(Fsys->PATH);
+ xfidm = load Xfidm path(Xfidm->PATH);
+ plumbmsg = load Plumbmsg Plumbmsg->PATH;
+ editm = load Edit path(Edit->PATH);
+ editlog = load Editlog path(Editlog->PATH);
+ editcmd = load Editcmd path(Editcmd->PATH);
+ styxaux = load Styxaux path(Styxaux->PATH);
+
+ mods := ref Dat->Mods(sys, bufio, env, arg,
+ drawm, styx, styxaux,
+ acme, gui, graph, dat, framem,
+ utils, regx, scrl,
+ textm, filem, windowm, rowm, columnm,
+ bufferm, diskm, exec, look, timerm,
+ fsys, xfidm, plumbmsg, editm, editlog, editcmd);
+
+ arg->init(argl);
+ styx->init();
+ styxaux->init();
+
+ # Commandline flag handling
ncol = -1;
mainpid = sys->pctl(0, nil);
@@ -204,40 +145,75 @@
loadfile = nil;
fontnames = array[2] of string;
fontnames[0:] = deffontnames[0:2];
- f := utils->getenv("acme-font");
+ f := env->getenv("acme-font");
if (f != nil)
fontnames[0] = f;
else {
- f = utils->getenv("font");
+ f = env->getenv("font");
if (f != nil)
fontnames[0] = f;
}
- f = utils->getenv("acme-Font");
+ f = env->getenv("acme-Font");
if (f != nil)
fontnames[1] = f;
else {
- f = utils->getenv("Font");
+ f = env->getenv("Font");
if (f != nil)
fontnames[0] = f;
}
- arg = arginit(argl);
- while(ac = argopt(arg)) case(ac){
- 'b' =>
- dat->bartflag = TRUE;
- 'c' =>
- ncol = int argf(arg);
- 'f' =>
- fontnames[0] = argf(arg);
- 'F' =>
- fontnames[1] = argf(arg);
- 'l' =>
- loadfile = argf(arg);
- }
- dat->home = utils->getenv("home");
+ arg->setusage("acme [-f varfont] [-F fixfont] [-c ncol] [-b] [-l file | file ...]");
+
+ while((ac = arg->opt()) != 0)
+ case(ac){
+ 'b' =>
+ dat->bartflag = TRUE;
+ 'c' =>
+ ncol = int arg->earg();
+ 'f' =>
+ fontnames[0] = arg->earg();
+ 'F' =>
+ fontnames[1] = arg->earg();
+ 'l' =>
+ loadfile = arg->earg();
+ * =>
+ arg->usage();
+ }
+ argl = arg->argv();
+
+ utils->init(mods);
+ gui->init(mods);
+ graph->init(mods);
+ dat->init(mods);
+ framem->init(mods);
+ regx->init(mods);
+ scrl->init(mods);
+ textm->init(mods);
+ filem->init(mods);
+ windowm->init(mods);
+ rowm->init(mods);
+ columnm->init(mods);
+ bufferm->init(mods);
+ diskm->init(mods);
+ exec->init(mods);
+ look->init(mods);
+ timerm->init(mods);
+ fsys->init(mods);
+ xfidm->init(mods);
+ editm->init(mods);
+ editlog->init(mods);
+ editcmd->init(mods);
+
+ utils->debuginit();
+
+ if (plumbmsg->init(1, "edit", Dat->PLUMBSIZE) >= 0)
+ plumbed = 1;
+
+ # Begin main logic
+ dat->home = env->getenv("home");
if (dat->home == nil)
dat->home = utils->gethome(utils->getuser());
- ts := utils->getenv("tabstop");
+ ts := env->getenv("tabstop");
if (ts != nil)
maxtab = int ts;
if (maxtab <= 0)
@@ -244,7 +220,7 @@
maxtab = 4;
snarfrune = utils->stralloc(NSnarf);
sys->pctl(Sys->FORKNS|Sys->FORKENV, nil);
- utils->setenv("font", fontnames[0]);
+ env->setenv("font", fontnames[0]);
sys->bind("/acme/dis", "/dis", Sys->MBEFORE);
wdir = workdir->init();
if (wdir == nil)
@@ -305,10 +281,10 @@
else{
row.init(mainwin.clipr);
if(ncol < 0){
- if(arg.av == nil)
+ if(arg->argv() == nil)
ncol = 2;
else{
- ncol = (len arg.av+(WPERCOL-1))/WPERCOL;
+ ncol = (len arg->argv()+(WPERCOL-1))/WPERCOL;
if(ncol < 2)
ncol = 2;
}
@@ -321,12 +297,12 @@
error("initializing columns");
}
c = row.col[row.ncol-1];
- if(arg.av == nil)
+ if(arg->argv() == nil)
readfile(c, wdir);
else
i = 0;
- for( ; arg.av != nil; arg.av = tl arg.av){
- filen := hd arg.av;
+ for( ; argl != nil; argl = tl argl){
+ filen := hd argl;
p = utils->strrchr(filen, '/');
if((p>=0 && filen[p:] == "/guide") || i/WPERCOL>=row.ncol)
readfile(c, filen);
@@ -349,6 +325,28 @@
exit;
}
+timing(s : string)
+{
+ thistime := sys->millisec();
+ sys->fprint(tfd, "%s %d\n", s, thistime-lasttime);
+ lasttime = thistime;
+}
+
+path(p : string) : string
+{
+ if (RELEASECOPY)
+ return p;
+ else {
+ # inlined strrchr since not loaded yet
+ for (n := len p - 1; n >= 0; n--)
+ if (p[n] == '/')
+ break;
+ if (n >= 0)
+ p = p[n+1:];
+ return "/usr/jrf/acme/" + p;
+ }
+}
+
readfile(c : ref Column, s : string)
{
w : ref Window;
@@ -1042,11 +1040,11 @@
cenv(s : string, t : string, but : int, i : ref Image) : ref Image
{
- c := utils->getenv("acme-" + s + "-" + t + "-" + string but);
+ c := env->getenv("acme-" + s + "-" + t + "-" + string but);
if (c == nil)
- c = utils->getenv("acme-" + s + "-" + string but);
+ c = env->getenv("acme-" + s + "-" + string but);
if (c == nil && but != 0)
- c = utils->getenv("acme-" + s);
+ c = env->getenv("acme-" + s);
if (c != nil) {
if (c[0] == '#' && len c >= 7) {
(r1, g1, b1) := rgb(c, 1);
--- a/appl/acme/common.m
+++ b/appl/acme/common.m
@@ -1,5 +1,7 @@
include "sys.m";
include "bufio.m";
+include "env.m";
+include "arg.m";
include "plumbmsg.m";
include "workdir.m";
include "draw.m";
--- a/appl/acme/dat.m
+++ b/appl/acme/dat.m
@@ -6,6 +6,8 @@
Mods : adt {
sys : Sys;
bufio : Bufio;
+ env : Env;
+ arg : Arg;
draw : Draw;
styx : Styx;
styxaux : Styxaux;
--- a/appl/acme/exec.b
+++ b/appl/acme/exec.b
@@ -3,6 +3,7 @@
include "common.m";
sys : Sys;
+env : Env;
dat : Dat;
acme : Acme;
utils : Utils;
@@ -39,6 +40,7 @@
init(mods : ref Dat->Mods)
{
sys = mods.sys;
+ env = mods.env;
dat = mods.dat;
acme = mods.acme;
utils = mods.utils;
@@ -1203,7 +1205,7 @@
dir = nil;
}
if(filename != nil)
- utils->setenv("%", filename);
+ env->setenv("%", filename);
c.md = fsys->fsysmount(rdir, ndir, incl, nincl);
if(c.md == nil){
# error("child: can't mount /mnt/acme");
@@ -1242,7 +1244,7 @@
else
sys->dup(1, 2);
tfd = nil;
- utils->setenv("acmewin", wids);
+ env->setenv("acmewin", wids);
}else{
if(win != nil)
win.close();
@@ -1271,7 +1273,7 @@
}
if(argaddr != nil)
- utils->setenv("acmeaddr", argaddr);
+ env->setenv("acmeaddr", argaddr);
hard := 0;
if(len s > 512-10) # may need to print into stack
hard = 1;
--- a/appl/acme/util.b
+++ b/appl/acme/util.b
@@ -2,7 +2,6 @@
include "common.m";
include "sh.m";
-include "env.m";
sys : Sys;
draw : Draw;
@@ -115,25 +114,6 @@
return 0;
}
-env : Env;
-
-getenv(s : string) : string
-{
- if (env == nil)
- env = load Env Env->PATH;
- e := env->getenv(s);
- if(e != nil && e[len e - 1] == '\n') # shell bug
- return e[0: len e -1];
- return e;
-}
-
-setenv(s, t : string)
-{
- if (env == nil)
- env = load Env Env->PATH;
- env->setenv(s, t);
-}
-
stob(s : string, n : int) : array of byte
{
b := array[2*n] of byte;
@@ -161,59 +141,6 @@
ol = tl ol;
}
return nl;
-}
-
-nextarg(p : ref Arg) : int
-{
- bp : string;
-
- if(p.av != nil){
- bp = hd p.av;
- if(bp != nil && bp[0] == '-'){
- p.p = bp[1:];
- p.av = tl p.av;
- return 1;
- }
- }
- p.p = nil;
- return 0;
-}
-
-arginit(av : list of string) : ref Arg
-{
- p : ref Arg;
-
- p = ref Arg;
- p.arg0 = hd av;
- p.av = tl av;
- nextarg(p);
- return p;
-}
-
-argopt(p : ref Arg) : int
-{
- r : int;
-
- if(p.p == nil && nextarg(p) == 0)
- return 0;
- r = p.p[0];
- p.p = p.p[1:];
- return r;
-}
-
-argf(p : ref Arg) : string
-{
- bp : string;
-
- if(p.p != nil){
- bp = p.p;
- p.p = nil;
- } else if(p.av != nil){
- bp = hd p.av;
- p.av = tl p.av;
- } else
- bp = nil;
- return bp;
}
exec(cmd : string, argl : list of string)
--- a/appl/acme/util.m
+++ b/appl/acme/util.m
@@ -3,18 +3,9 @@
stderr : ref Sys->FD;
- Arg : adt {
- arg0 : string;
- av : list of string;
- p : string;
- };
-
PNPROC, PNGROUP : con iota;
init : fn(mods : ref Dat->Mods);
- arginit : fn(av : list of string) : ref Arg;
- argopt : fn(p : ref Arg) : int;
- argf : fn(p : ref Arg) : string;
min : fn(a : int, b : int) : int;
max : fn(a : int, b : int) : int;
abs : fn(x : int) : int;
@@ -40,8 +31,6 @@
strchr : fn(s : string, c : int) : int;
strrchr: fn(s : string, c : int) : int;
strncmp : fn(s, t : string, n : int) : int;
- getenv : fn(s : string) : string;
- setenv : fn(s, t : string);
stob : fn(s : string, n : int) : array of byte;
btos : fn(b : array of byte, s : ref Dat->Astring);
findbl : fn(s : string, n : int) : (string, int);