1DOLLY 72PACKAGE vi3REQUIRES HOST runtime@045# Neatvi, a small vi and ex, from the files of upstream's tagged archive,6# unchanged, by the rules of its Makefile. It draws with escape sequences of7# its own and reads no terminal database. Its ! commands and language servers8# start by fork, which fails here, and it says so.9FROM /v0.1.4/Dollyfile-system-tools 7f6c86fcc73e544e7007646eba2718bbc4d43b7f0516d9558e2dc500b1a05a801011REQUIRES HEADER libc12REQUIRES TOOL   cc13REQUIRES TOOL   ln14REQUIRES TOOL   make15REQUIRES TOOL   mkdir16REQUIRES TOOL   printf17REQUIRES TOOL   sed18REQUIRES TOOL   tar19REQUIRES TOOL   test2021SOURCE /v0.1.4/dist/static/tools/neatvi.tar 46da6486814546d4b020784571bb1a750d279dc3a128fdd4d5e99a66454cfca3 /tmp/neatvi.tar22SLOP tar -xf /tmp/neatvi.tar -C /2324# Neatvi leaves it to the terminal to turn Enter, a carriage return, into a25# newline (ICRNL). Dolly's terminal maps no input, so term.c reads through this.26FILE /tmp/neatvi/enter.h27    #include <unistd.h>28    static ssize_t read_enter(int fd, void *bytes, size_t size) {29      ssize_t count = read(fd, bytes, size);30      for (ssize_t at = 0; at < count; at++) {31        if (((char *)bytes)[at] == '\r') ((char *)bytes)[at] = '\n';32      }33      return count;34    }35    #define read read_enter36FILE /tmp/vi.mk37    .RECIPEPREFIX := >38    S := /tmp/neatvi39    BIN := /usr/bin40    NAMES := vi ex lbuf mot sbuf ren dir syn reg led uc term rset rstr regex cmd tag conf lsp json41    $(BIN)/vi: $(addprefix $S/,$(addsuffix .o,$(NAMES)))42    >cc $^ -o $@43    $S/term.o: CFLAGS := -include $S/enter.h44    $S/%.o: $S/%.c $S/vi.h $S/conf.h $S/kmap.h45    >cc -O2 $(CFLAGS) -c $< -o $@46SLOP make -j4 -f /tmp/vi.mk47SLOP ln -s vi /usr/bin/ex48# Neatvi ships no licence file or manual page: its sources open with the49# licence, and its README is the manual.50SLOP mkdir -p /usr/share/licenses/vi51SLOP sed -n 2,16p /tmp/neatvi/vi.c > /usr/share/licenses/vi/LICENSE5253SLOP printf 'one\ntwo\n' > /tmp/vi-check && printf '%s\n' '%s/two/2/' 'w' 'q' | ex -s /tmp/vi-check > /dev/null && test "$(sed -n 2p /tmp/vi-check)" = 25455EXPORTS TOOL vi56EXPORTS TOOL ex57FILE /usr/share/licenses/vi/LICENSE58FILE /usr/share/doc/vi/README59FILE /usr/share/man/cat1/vi.160    vi, ex: Neatvi, a small vi with an ex mode, from upstream's files unchanged.61    62      vi FILE...        edits the files63      ex FILE...        edits them in ex mode64      :wq writes and leaves; :q! leaves without writing.65    66    It draws with escape sequences of its own and needs no terminal database.67    What starts another program (:!, a filter through a command, a language68    server) needs fork, which Dolly does not have: it fails and says so.69    Upstream's README lists the commands and options: /usr/share/doc/vi/README.70