Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.04 KB | None | 0 0
  1. * Noweb3 source code
  2.  
  3. Norman's first commit is the c/ directory, containing web files.
  4. Began my reading at
  5.  
  6. https://raw.githubusercontent.com/nrnrnr/noweb3/719d924b59ba3fa685af416c327dd897d5cb9d6e/c/readme.nw
  7.  
  8. The notangle program begins in c/main.nw. (Option -L writes #line
  9. information to C source code.) There is no noweave program on the
  10. initial revision.
  11.  
  12. --8<---------------cut here---------------start------------->8---
  13. Lol. ``This nuisance shows up because functions must be declared
  14. before use.'' I also find that so annoying.
  15. --8<---------------cut here---------------end--------------->8---
  16.  
  17. Files which receive source code are called ``modules.'' For instance,
  18. if we have ``<<pairs.c>>='', then pairs.c is a module.
  19.  
  20. --8<---------------cut here---------------start------------->8---
  21. What is the abstraction of a module? A module is a linked list (see
  22. modules.nw) of either lines to be printed or a reference to another
  23. ``module name''. How is a file generated? After all chunks are read
  24. into a module linked list, the linked list is written to disk in the
  25. following way: if the current linked list element is a string, it is
  26. printed; if it is a module, the module is expanded (right away).
  27. There are only these possibilities.
  28. --8<---------------cut here---------------end--------------->8---
  29.  
  30. Fast-foward to
  31.  
  32. https://github.com/nrnrnr/noweb3/commit/e6bd16cdc1d1c1f8efcb6431ac01d0ac4404aaa3
  33.  
  34. Back in 1993, stdio did not have getline, so let's rename Norman's getline.
  35.  
  36. --8<---------------cut here---------------start------------->8---
  37. @@ -29,6 +29,7 @@ static buf_size = START_SIZE; /* size of both buffers if non-NULL */
  38. char *getline_expand (FILE *fp);
  39. /* grab a line in buffer, return new buffer or NULL for eof
  40. tabs in line are expanded according to tabsize */
  41. +#define getline noweb3_getline
  42. char *getline (FILE *fp);
  43. /* grab a line in the buffer, return a new buffer or NULL for eof
  44. no expansion of tabs */
  45. --8<---------------cut here---------------end--------------->8---
  46.  
  47. The next problem is that now stdio has vfprint. Let's remove it.
  48.  
  49. --8<---------------cut here---------------start------------->8---
  50. %git diff errors.nw
  51. diff --git a/c/errors.nw b/c/errors.nw
  52. index f9dfc74..a2c9f3b 100644
  53. --- a/c/errors.nw
  54. +++ b/c/errors.nw
  55. @@ -38,11 +38,13 @@ void errormsg(enum errorlevel level, char *s, ...);
  56. #define impossible(s) errormsg(Impossible, "This can't happen: %s", s)
  57. #define checkptr(P) do { if (!(P)) overflow("memory"); } while (0)
  58. <<C functions>>=
  59. +/*
  60. extern int _doprnt(const char *format, va_list args, FILE *stream);
  61.  
  62. int vfprintf(FILE *stream, const char *format, va_list arg) {
  63. return _doprnt(format,arg,stream);
  64. }
  65. +*/
  66.  
  67. void errormsg(enum errorlevel level, char *s,...) {
  68. va_list args; /* see K&R, page 174 */
  69. %
  70. --8<---------------cut here---------------end--------------->8---
  71.  
  72. --8<---------------cut here---------------start------------->8---
  73. make: *** No rule to make target 'markmain.nw', needed by 'markmain.o'. Stop.
  74. --8<---------------cut here---------------end--------------->8---
  75.  
  76. Norman's lack of attention. Perhaps markmain.nw will show up in the
  77. next commits, but even by 1995, markup still can't be built because
  78. there is no main function for it. Let's move to 1997 where
  79. lua-2.5+-nw was added.
  80.  
  81. We're at
  82.  
  83. https://github.com/nrnrnr/noweb3/commit/3ecd8061d8824964d3bb9bd6895376b8cb188a9f
  84.  
  85. No sensible Makefile still. No Makefile for lua-2.5.
  86.  
  87. How to build luac?
  88.  
  89. --8<---------------cut here---------------start------------->8---
  90. %LDLIBS='../inout.o ../parser.o dump.o print.o ../table.o ../func.o
  91. ../fallback.o ../hash.o ../lex.o ../mem.o ../opcode.o ../tree.o
  92. ../undump.o' make luac
  93. %file luac
  94. luac: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),
  95. dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for
  96. GNU/Linux 3.2.0,
  97. BuildID[sha1]=5ed65240bbdb7aeafc1d0a20fb912791f4b6893a, not stripped
  98. %./luac
  99. usage: luac [-dlpv] [-o output] file ...
  100. --8<---------------cut here---------------end--------------->8---
  101.  
  102. How to compile the libs?
  103.  
  104. --8<---------------cut here---------------start------------->8---
  105. %pwd
  106. /home/dbastos/anyweb/noweb3/lua-2.5+nw/clients/lib
  107.  
  108. %gcc -c *.c -I../../include
  109.  
  110. %ls
  111. iolib.c iolib.o mathlib.c mathlib.o old strlib.c strlib.o
  112. %
  113. --8<---------------cut here---------------end--------------->8---
  114.  
  115. How to create lua.a?
  116.  
  117. --8<---------------cut here---------------start------------->8---
  118. %pwd
  119. /home/dbastos/anyweb/noweb3/lua-2.5+nw/src
  120. %ar r lua.a *.o
  121. --8<---------------cut here---------------end--------------->8---
  122.  
  123. How to compile the Lua interpreter?
  124.  
  125. --8<---------------cut here---------------start------------->8---
  126. %pwd
  127. /home/dbastos/anyweb/noweb3/lua-2.5+nw/clients/lua
  128.  
  129. %gcc -c lua.c
  130. %gcc -o lua lua.o ../lib/iolib.o ../lib/mathlib.o ../lib/strlib.o ../../src/lua.a -lm
  131.  
  132. %printf 'print("Hello world")' | ./lua
  133. Hello world
  134. %
  135. --8<---------------cut here---------------end--------------->8---
  136.  
  137. How to execute compiled lua code?
  138.  
  139. --8<---------------cut here---------------start------------->8---
  140. %pwd
  141. /home/dbastos/anyweb/noweb3/lua-2.5+nw/src/luac
  142. %
  143.  
  144. %cat hello.lua
  145. print("Hello compiler.")
  146.  
  147. %./luac hello.lua
  148. %
  149.  
  150. %pwd
  151. /home/dbastos/anyweb/noweb3/lua-2.5+nw/clients/lua
  152. %
  153.  
  154. %./lua ../../src/luac/hello.lua
  155. Hello compiler.
  156. %
  157. --8<---------------cut here---------------end--------------->8---
  158.  
  159. Fully functional Lua.
  160.  
  161. Does 1997-noweb3 uses this lua compiler at all? No. So Norman added
  162. lua-2.5 to 1997-noweb3, but doesn't use it. Lua comes into use
  163. in 1998. We're now at
  164.  
  165. https://github.com/nrnrnr/noweb3/commit/319cc82c549f6cc8c281cad158def70a820509f4
  166.  
  167. Norman's idea for noweb3 is, therefore, to write both notangle and
  168. noweave in Lua.
  169.  
  170. How to produce these Lua programs?
  171.  
  172. --8<---------------cut here---------------start------------->8---
  173. %pwd
  174. /home/dbastos/anyweb/noweb3/lua
  175. %notangle -Rnotangle.lua tangle.nw > notangle.lua
  176. %notangle -Rnoweave.lua weave.nw > noweave.lua
  177. --8<---------------cut here---------------end--------------->8---
  178.  
  179. We got a problem:
  180.  
  181. --8<---------------cut here---------------start------------->8---
  182. %../lua-2.5+nw/clients/lua/lua notangle.lua notangle.lua
  183. lua: syntax error;
  184. > last token read: "a" at line 10 in file notangle.lua
  185. Active Stack:
  186. `error' fallback
  187. %
  188.  
  189. %nl notangle.lua | head -11
  190. 1 markup = LIB .. "/markup" -- not portable to dos
  191. 2 -- should be changed to internal markup
  192. 3 opt = {}
  193. 4 arg = {}
  194. 5 markopt = {}
  195. 6 filters = {}
  196.  
  197. 7 while length(argv) > 0 do
  198. 8 a = get(argv)
  199. 9 globmatch a of
  200. 10 | "-ml", "-m3", "-awk", "-icn", "-icon", "-pascal",
  201. %
  202. --8<---------------cut here---------------end--------------->8---
  203.  
  204. Let's move on. This old code anyway.
  205.  
  206. We're now at
  207.  
  208. https://github.com/nrnrnr/noweb3/commit/df9c016f871b8f82dd8feb2d36cd9f2067d977db
  209.  
  210. Lua code in place as can be seen by env-lua.nw. That's the only one
  211. in c/. Fast-forward a few days, I see the following construction
  212.  
  213. <<*>>=
  214. <<nullsink.c>>
  215. <<header>>=
  216. <<nullsink.h>>
  217.  
  218. That's a way to give chunks multiple names. He defined nullsink.c.
  219. If you don't specify any root chunk to notangle, then nullsink.c will
  220. be output. (This is useful.)
  221.  
  222. %notangle nullsink.nw
  223. #include <stdio.h>
  224. #include "nwbuffer.h"
  225.  
  226. int null_sink(void* out, NowebBuffer in) {
  227. FILE* fp = out;
  228. fprintf(fp, "Executing nullsink...\n");
  229. return 0;
  230. }
  231.  
  232. If you specify nullsink.h, you get what you ask. You get the same if
  233. you say -Rheader. So he's giving them multiple names. Alright.
  234.  
  235. CII has appeared as early as
  236.  
  237. 736709ecb84cecf62ce7957a9ae38d74eb3f2e80.
  238.  
  239. Stages appeared as early as
  240.  
  241. 736709ecb84cecf62ce7957a9ae38d74eb3f2e80
  242.  
  243. We need to understand how that works. Take a look at toascii.c. It
  244. looks like an implementation of a backend. So a backend is internally
  245. called a Sink. The function toascii_sink() is producing the markup of
  246. some NW file. It gets a NowebReader and scans it pair by pair. In
  247. each pair, a token is found.
  248.  
  249. Each backend implementation is registered in c/stages.nw.
  250.  
  251. Lol. The file xpipe.nw is added empty. At
  252.  
  253. https://raw.githubusercontent.com/nrnrnr/noweb3/544fe0b18517633c2376851907afbecd569c3cc9/c/xpipe.nw
  254.  
  255. we have a decent explanation of the XPipe idea. XPipe_program()
  256. creates a pipeline. XPipe_connect() connects the stdout of LEFT to
  257. the stdin of RIGHT, where LEFT and RIGHT are external UNIX programs.
  258. Finally, XPipe_execute() puts it all in motion.
  259.  
  260. struct XPipe_Program {
  261. char* path;
  262. char** argv;
  263. char** envp;
  264. };
  265.  
  266. struct XPipe_Stage {
  267. enum { Prog, Fun } tag;
  268. union {
  269. struct XPipe_Program prog;
  270. struct XPipe_Function fun;
  271. } u;
  272. };
  273.  
  274. struct XPipe {
  275. List_T stages;
  276. };
  277.  
  278. So you can see that XPipe_Stage is either an external program or an
  279. internal function and XPipe is a list.
  280.  
  281. These interfaces --- so far --- are all platform-independent, but
  282. XPipe_execute() is of concern for Windows support.
  283.  
  284. Notice XPipe_print() is a cool function. It should display what the
  285. pipeline looks like.
  286.  
  287. Most of the rest of the code is platform-dependent and so far there's
  288. only UNIX support. So, no, no chance for Windows in this commit.
  289.  
  290. What is nocond all about? Nocond is a filter!
  291.  
  292. Looking at
  293.  
  294. https://raw.githubusercontent.com/nrnrnr/noweb3/90b456d638423af80c87983df1f26f89ec1efd28/c/util.nw
  295.  
  296. we can see that the environment variable NWPATH sets the directory
  297. where Lua scripts can be found. If NWPATH is not set, current
  298. directory seems to be a fallback.
  299.  
  300. Looking at
  301.  
  302. https://raw.githubusercontent.com/nrnrnr/noweb3/1c49db3384fb006de46806b079189a144d2ff2fe/c/ipipe-lua.nw
  303.  
  304. I get the idea that a C program will initiate the work on the Lua
  305. side. So notangle and noweave (most likely noweave usually), will be
  306. invoked from C but the work will be done by Lua scripts. So C will
  307. prepare things on the Lua side. Prepare things looks like a UNIX
  308. pipeline, composed of Lua scripts mostly. That's what I guess right
  309. now. Take a look at apply_filter. A function argument is pushed onto
  310. the stack, buffers in and out are set, a function f is called and a
  311. result of the function is extracted, returning to the C caller.
  312.  
  313. Looking at
  314.  
  315. https://raw.githubusercontent.com/nrnrnr/noweb3/6eeca2640976ec01ec29c5f842d2c92f642c0fe3/lua/config.nw
  316.  
  317. we see the important noweb.cfg file. That looks totally new relative
  318. to noweb2. It's a Lua script that loads pipes.cfg, sys.cfg, util.cfg,
  319. list.nws, totex.nws.
  320.  
  321. Every pipeline script must be a UNIX executable program.
  322.  
  323. function Unix.isExecutable(file)
  324. return XPipe.run(XPipe.stage("test", {"-x", file})) == 0
  325. end
  326.  
  327. That's a problem for Windows. Norman is aware of that and prepares
  328. some solution right away.
  329.  
  330. case PLATFORM of
  331. | "unix" => MD = Unix
  332. else => error("Unknown target platform ", PLATFORM)
  333. end
  334.  
  335. Except for UNIX, all others are unknown platforms. That's alright.
  336.  
  337. How does noweave work? Here's an early version of a Lua implementation.
  338.  
  339. https://raw.githubusercontent.com/nrnrnr/noweb3/78b8aa250d2c611fe9980f49e1ec3a8cd5ddc5b2/lua/weave.nw
  340.  
  341. What do we see? A [M]ixed pipeline is built and eventually run.
  342.  
  343. P = MPipe
  344. [...]
  345. pipeline = P.connect(P.connect(src, filters), backend)
  346. [...]
  347. exit(P.run(pipeline))
  348.  
  349. So, noweave is completely implemented in Lua. Why the C sources?
  350. Again, I think what Norman is doing is writing in C his ``own
  351. language''. Given the portability of C, he can always take his
  352. friendly Lua programming language with him everywhere he goes and
  353. doesn't have to keep on writing C to extend and fix problems in noweb.
  354. That's the way to go about it. Noweave's UNIX manual page is there.
  355.  
  356. Looking at
  357.  
  358. https://raw.githubusercontent.com/nrnrnr/noweb3/6cf04907ae4e3512dd87886a77e8b3686d0bd396/lua/test.lua
  359.  
  360. What is this? This is a test file for Lua infrastructure. He's
  361. seeing whether his Lua code works. A pipeline P is created. As its
  362. source, the markup program is defined to process the source totex.nw,
  363. which is a noweb file. A processor program totex will process
  364. totex.nw as a source. The pipeline is programmed by connecting the
  365. source (f) to the processor (b = totex). It is then run.
  366.  
  367. This is effectively what noweave will do, but taking orders from the
  368. user on the command line. But the effect is the same: that kind of
  369. Lua infrastructure will be invoked and executed.
  370.  
  371. Norman is UNIX minded. He has always been doing noweb{2,3} in the
  372. UNIX pipeline way. The difference in noweb3 relative to noweb2 is
  373. that he's focusing on Lua instead of so many sh, awk, icon programs.
  374.  
  375. We've gone up to the year 2000 and still no markmain.nw file! We
  376. don't have the main function of markup. Why do you do this to us,
  377. Norman? Lol.
  378.  
  379. Guess what? At
  380.  
  381. https://github.com/nrnrnr/noweb3/blob/811ec71e2d9b78163c97feb8e3b7f92d148b81b4/c/Makefile
  382.  
  383. he seems to have solved this problem, but surely introduced others.
  384. For instance, nwprocess.nw is not included in the commit. Why do you
  385. do this to us, Norman? Lol.
  386.  
  387. He gives us a new build system for liblua.a. Let's see.
  388.  
  389. https://github.com/nrnrnr/noweb3/commit/e9ff3f1038ec6c6028401e2602461799cd8cfa14
  390.  
  391. Not very useful at all.
  392.  
  393. Guess what? At
  394.  
  395. https://github.com/nrnrnr/noweb3/commit/07fe8e76a43b4193e27011f4e7652bbbfbd76758
  396.  
  397. he seems to have a real build system now.
  398.  
  399. It's still broken, but this looks like the first would-be-release.
  400. Notice nwprocess.nw was added, finally. Guess what? Markup's main
  401. function was added. Just a few years later. It's in markup-run.nw.
  402.  
  403. At
  404.  
  405. https://github.com/nrnrnr/noweb3/commit/5f7948927817fad02704742f2035e5ad779418f5
  406.  
  407. we can build the guide.dvi and convert it to guide.pdf to read. This
  408. is the hacker's guide for noweb3. Everything we said above will help
  409. in the reading of the guide. (It's interesting how, without the code,
  410. the guide seems close to useless. There's no royal road to code
  411. reading. Hardest path seems the best one. Only then reading
  412. documentation will help.)
  413.  
  414. I think we were right all along in these notes, even though we could
  415. only run the first versions --- as there is no working build until
  416. now.
  417.  
  418. What's next? Let's spend some time hacking noweb3. Notice ``no'' is
  419. a Lua interpreter.
  420.  
  421. %./no
  422. print("Hello world")
  423. Hello world
  424. %
  425.  
  426. It turns out, ``no'' can take at least two arguments, weave and
  427. tangle. Here's weave.
  428.  
  429. --8<---------------cut here---------------start------------->8---
  430. %./no weave
  431. hello
  432. hello
  433. <<*>>=
  434. def pythonf():
  435. return 1
  436. @ We are done.
  437. \documentclass{article}\usepackage{noweb}\pagestyle{noweb}\noweboptions{}[...]
  438. hello
  439. \nwenddocs{}\nwbegincode{1}\moddef{*}\endmoddef\nwstartdeflinemarkup[...]
  440. def pythonf():
  441. return 1
  442. \nwendcode{}\nwbegindocs{2}We are done.
  443. \nwenddocs{}\end{document}
  444.  
  445. %
  446. --8<---------------cut here---------------end--------------->8---
  447.  
  448. We can learn a few things here. The numbering of chunks and
  449. documentation and other obvious stuff. I'd like to see the markup.
  450.  
  451. We can probably write our own filter and invoke it with ``no'' because
  452. ``weave'' seems to be a filter too. Here's how to look at the effect
  453. of markup. With the following filter
  454.  
  455. --8<---------------cut here---------------start------------->8---
  456. %cat ../lib3/noweb3/test4
  457. P = MPipe
  458.  
  459. p = P.source(Stages.markup, {})
  460. p = p .. P.sink(Stages.toascii)
  461. exit(P.run(p))
  462. %
  463. --8<---------------cut here---------------end--------------->8---
  464.  
  465. we get the following behavior.
  466.  
  467. --8<---------------cut here---------------start------------->8---
  468. %./no test4
  469. intro...
  470. <<*>>=
  471. root chunk, as usual..
  472. @ back to doc
  473. @file
  474. @begin docs 0
  475. @text intro...
  476. @nl
  477. @end docs 0
  478. @begin code 1
  479. @defn *
  480. @nl
  481. @text root chunk, as usual..
  482. @nl
  483. @end code 1
  484. @begin docs 2
  485. @text back to doc
  486. @nl
  487. @end docs 2
  488. %
  489. --8<---------------cut here---------------end--------------->8---
  490.  
  491. From this, we can infer: what markup does is to say @file, @begin docs
  492. <integer>, @text ..., @nl, @end docs <integer>, @defn chunk, @nl,
  493. ... So markup is really the filter that does the hard job. All others
  494. will read this nicely formatted output and do something about it. For
  495. instance, weave might open verbatim mode when it finds @begin code
  496. <integer> and close it when it finds @end code <integer>. So the
  497. plain filter is really Stages.toascii because it seems to do no
  498. transformation to the input. Let's use it to see the behavior of
  499. other filters.
  500.  
  501. If you create a new filter, remember to load it in noweb.cfg. You
  502. need a ``do_nwfile("newfilter.nws")'' there.
  503.  
  504. So what is noweb3? It is a lua interpreter with scripts included that
  505. can implement literate programming Ramsey-style. What do we want from
  506. it? We want to run it on Windows. That is all, really. All features
  507. are already there for us. We just can't compile it on Windows. Even
  508. with Cygwin? Even with cygwin, which is very strange.
  509.  
  510. We couldn't compile on Cygwin because the compiler we were using was
  511. made for the MinGW. MinGW's GCC is really made for Windows, so it
  512. doesn't come with header files such as sys/wait.h. For true
  513. portability, we'll need to write a portable wait() function, along
  514. with WEXISTATUS. See
  515.  
  516. https://stackoverflow.com/questions/5487249/how-write-posix-waitpid-analog-for-windows
  517.  
  518. Cygwin's GCC, however, does come with such header files. We installed
  519. it and compiled noweb3. Notice noweb3 does not come with noweb.sty.
  520. (Thanks!) I copied it from my noweb2 installation and was able to
  521. produce documentation. The program ``no tangle'' also works.
  522.  
  523. I don't think the option ``-autodefs c'' works, though. So we cannot
  524. produce documentation for C programs. The problem seems to be the
  525. lack of files such as autodefs.c in the installation. We have a very
  526. broken source code package, after all. Maybe we can find such files
  527. in the noweb2 installation.
  528.  
  529. I found them. The problem, though, is that autodefs.c is a binary
  530. ICON program. How will we run it on Windows?
  531.  
  532. --8<---------------cut here---------------start------------->8---
  533. %strings autodefs.c | head -10
  534. #!/bin/sh
  535. IXBIN=/usr/bin/iconx
  536. IXLCL=`echo $0 | sed 's=[^/]*$=iconx='`
  537. [ -n "$ICONX" ] && exec "$ICONX" $0 ${1+"$@"}
  538. [ -x "$IXLCL" ] && exec "$IXLCL" $0 ${1+"$@"}
  539. [ -x "$IXBIN" ] && exec "$IXBIN" $0 ${1+"$@"}
  540. exec iconx $0 ${1+"$@"}
  541. [executable Icon binary follows]
  542.  
  543. I9.0.00/32
  544.  
  545. %./autodefs.c
  546. error in startup code
  547. insufficient memory, corrupted icode file, or wrong platform
  548. %
  549. --8<---------------cut here---------------end--------------->8---
  550.  
  551. So we will have to compile these ICON programs on Windows too.
  552. Compiling was not impossible, but running them successfully is the
  553. question. Check this out.
  554.  
  555. --8<---------------cut here---------------start------------->8---
  556. %/usr/local/noweb/bin/no weave -autodefs c < crush.nw
  557.  
  558. %
  559. --8<---------------cut here---------------end--------------->8---
  560.  
  561. No errors at all. Thanks! This behavior is due to the fact that
  562. autodefs.c is being search for in lib2/ and I placed it in lib3/.
  563. Putting autodefs.c in lib2/ produces now an error message.
  564.  
  565. %/usr/local/noweb/bin/no weave -autodefs c < crush.nw
  566. Could not execute /usr/local/noweb/lib2/autodefs.c
  567. %
  568.  
  569. %/usr/local/noweb/lib2/autodefs.c
  570. -bash: /usr/local/noweb/lib2/autodefs.c: impossível executar o arquivo binário: Exec format error
  571. %
  572.  
  573. Why does this happen? Because autodefs.c is not an executable. It is
  574. just ICON compiled code. (Not even ``file'' knows ICON. This
  575. language really didn't last very long.)
  576.  
  577. %file /usr/local/noweb/lib2/autodefs.c
  578. /usr/local/noweb/lib2/autodefs.c: data
  579. %
  580.  
  581. We will have to make it into an executable. The trick is to make it
  582. into a shell script that /execs/ ``iconx''. See the noweb2
  583. installation on UNIX to see how it is done. This wasn't built
  584. properly on Windows because, clearly, Windows' ICONT does not produce
  585. the shell script that's built on UNIX. It's a portability problem.
  586.  
  587. I turned it into an executable which calls iconx, but iconx doesn't
  588. like the compiled code.
  589.  
  590. --8<---------------cut here---------------start------------->8---
  591. %./autodefs.c
  592. error in startup code
  593. insufficient memory, corrupted icode file, or wrong platform
  594. %
  595. --8<---------------cut here---------------end--------------->8---
  596.  
  597. Yes, thanks for the or-like error message. Now I need only check 3
  598. causes and likely found neither one is correct. Hypothesis: my
  599. /iconx/ was built for native Windows and I'm running it on Cygwin.
  600. Each version does a different thing, so we're living a nightmare.
  601.  
  602. Conclusion: although we can run noweb3 on Cygwin, we cannot run
  603. autodefs.c, so we don't have a typesetting system for C programming,
  604. unless we do mark the definitions ourselves, which isn't the end of
  605. the world. At least we have ``dpp -tex'' working properly. We can
  606. actually work on Windows by using cygwin and noweb3.
  607.  
  608. Now installing noweb3 on Windows still is a work to be done. We can
  609. package it up now, excluding all icon work. This is in fact a
  610. motivation for someone to write autodefs in Lua. It should actually
  611. be easy to do that because Lua is such a nice language and autodefs is
  612. such an easy to write program. Perhaps even I will write it
  613. eventually. Chapter closed.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement