acid 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664
  1. sizeof_1_ = 8;
  2. aggr _1_
  3. {
  4. 'D' 0 llength;
  5. 'D' 4 hlength;
  6. };
  7. defn
  8. _1_(addr) {
  9. complex _1_ addr;
  10. print(" llength ", addr.llength, "\n");
  11. print(" hlength ", addr.hlength, "\n");
  12. };
  13. sizeof_2_ = 8;
  14. aggr _2_
  15. {
  16. 'V' 0 length;
  17. {
  18. 'D' 0 llength;
  19. 'D' 4 hlength;
  20. };
  21. };
  22. defn
  23. _2_(addr) {
  24. complex _2_ addr;
  25. print(" length ", addr.length, "\n");
  26. print("_1_ {\n");
  27. _1_(addr+0);
  28. print("}\n");
  29. };
  30. UTFmax = 3;
  31. Runesync = 128;
  32. Runeself = 128;
  33. Runeerror = 128;
  34. sizeofFconv = 24;
  35. aggr Fconv
  36. {
  37. 'X' 0 out;
  38. 'X' 4 eout;
  39. 'D' 8 f1;
  40. 'D' 12 f2;
  41. 'D' 16 f3;
  42. 'D' 20 chr;
  43. };
  44. defn
  45. Fconv(addr) {
  46. complex Fconv addr;
  47. print(" out ", addr.out\X, "\n");
  48. print(" eout ", addr.eout\X, "\n");
  49. print(" f1 ", addr.f1, "\n");
  50. print(" f2 ", addr.f2, "\n");
  51. print(" f3 ", addr.f3, "\n");
  52. print(" chr ", addr.chr, "\n");
  53. };
  54. sizeofTm = 40;
  55. aggr Tm
  56. {
  57. 'D' 0 sec;
  58. 'D' 4 min;
  59. 'D' 8 hour;
  60. 'D' 12 mday;
  61. 'D' 16 mon;
  62. 'D' 20 year;
  63. 'D' 24 wday;
  64. 'D' 28 yday;
  65. 'a' 32 zone;
  66. 'D' 36 tzoff;
  67. };
  68. defn
  69. Tm(addr) {
  70. complex Tm addr;
  71. print(" sec ", addr.sec, "\n");
  72. print(" min ", addr.min, "\n");
  73. print(" hour ", addr.hour, "\n");
  74. print(" mday ", addr.mday, "\n");
  75. print(" mon ", addr.mon, "\n");
  76. print(" year ", addr.year, "\n");
  77. print(" wday ", addr.wday, "\n");
  78. print(" yday ", addr.yday, "\n");
  79. print(" zone ", addr.zone, "\n");
  80. print(" tzoff ", addr.tzoff, "\n");
  81. };
  82. PNPROC = 1;
  83. PNGROUP = 2;
  84. sizeofLock = 4;
  85. aggr Lock
  86. {
  87. 'D' 0 val;
  88. };
  89. defn
  90. Lock(addr) {
  91. complex Lock addr;
  92. print(" val ", addr.val, "\n");
  93. };
  94. sizeofQLp = 12;
  95. aggr QLp
  96. {
  97. 'D' 0 inuse;
  98. 'A' QLp 4 next;
  99. 'C' 8 state;
  100. };
  101. defn
  102. QLp(addr) {
  103. complex QLp addr;
  104. print(" inuse ", addr.inuse, "\n");
  105. print(" next ", addr.next\X, "\n");
  106. print(" state ", addr.state, "\n");
  107. };
  108. sizeofQLock = 16;
  109. aggr QLock
  110. {
  111. Lock 0 lock;
  112. 'D' 4 locked;
  113. 'A' QLp 8 $head;
  114. 'A' QLp 12 $tail;
  115. };
  116. defn
  117. QLock(addr) {
  118. complex QLock addr;
  119. print("Lock lock {\n");
  120. Lock(addr.lock);
  121. print("}\n");
  122. print(" locked ", addr.locked, "\n");
  123. print(" $head ", addr.$head\X, "\n");
  124. print(" $tail ", addr.$tail\X, "\n");
  125. };
  126. sizeofRWLock = 20;
  127. aggr RWLock
  128. {
  129. Lock 0 lock;
  130. 'D' 4 readers;
  131. 'D' 8 writer;
  132. 'A' QLp 12 $head;
  133. 'A' QLp 16 $tail;
  134. };
  135. defn
  136. RWLock(addr) {
  137. complex RWLock addr;
  138. print("Lock lock {\n");
  139. Lock(addr.lock);
  140. print("}\n");
  141. print(" readers ", addr.readers, "\n");
  142. print(" writer ", addr.writer, "\n");
  143. print(" $head ", addr.$head\X, "\n");
  144. print(" $tail ", addr.$tail\X, "\n");
  145. };
  146. RFNAMEG = 1;
  147. RFENVG = 2;
  148. RFFDG = 4;
  149. RFNOTEG = 8;
  150. RFPROC = 16;
  151. RFMEM = 32;
  152. RFNOWAIT = 64;
  153. RFCNAMEG = 1024;
  154. RFCENVG = 2048;
  155. RFCFDG = 4096;
  156. RFREND = 8192;
  157. sizeofQid = 8;
  158. aggr Qid
  159. {
  160. 'U' 0 path;
  161. 'U' 4 vers;
  162. };
  163. defn
  164. Qid(addr) {
  165. complex Qid addr;
  166. print(" path ", addr.path, "\n");
  167. print(" vers ", addr.vers, "\n");
  168. };
  169. sizeofDir = 116;
  170. aggr Dir
  171. {
  172. 'a' 0 name;
  173. 'a' 28 uid;
  174. 'a' 56 gid;
  175. Qid 84 qid;
  176. 'U' 92 mode;
  177. 'D' 96 atime;
  178. 'D' 100 mtime;
  179. {
  180. 'V' 104 length;
  181. {
  182. 'D' 104 llength;
  183. 'D' 108 hlength;
  184. };
  185. };
  186. 'u' 112 type;
  187. 'u' 114 dev;
  188. };
  189. defn
  190. Dir(addr) {
  191. complex Dir addr;
  192. print(" name ", addr.name, "\n");
  193. print(" uid ", addr.uid, "\n");
  194. print(" gid ", addr.gid, "\n");
  195. print("Qid qid {\n");
  196. Qid(addr.qid);
  197. print("}\n");
  198. print(" mode ", addr.mode, "\n");
  199. print(" atime ", addr.atime, "\n");
  200. print(" mtime ", addr.mtime, "\n");
  201. print("_2_ {\n");
  202. _2_(addr+104);
  203. print("}\n");
  204. print(" type ", addr.type, "\n");
  205. print(" dev ", addr.dev, "\n");
  206. };
  207. sizeofWaitmsg = 112;
  208. aggr Waitmsg
  209. {
  210. 'a' 0 pid;
  211. 'a' 12 time;
  212. 'a' 48 msg;
  213. };
  214. defn
  215. Waitmsg(addr) {
  216. complex Waitmsg addr;
  217. print(" pid ", addr.pid, "\n");
  218. print(" time ", addr.time, "\n");
  219. print(" msg ", addr.msg, "\n");
  220. };
  221. Bsize = 8192;
  222. Bungetsize = 4;
  223. Bmagic = 3227993;
  224. Beof = -1;
  225. Bbad = -2;
  226. Binactive = 0;
  227. Bractive = 1;
  228. Bwactive = 2;
  229. Bracteof = 3;
  230. sizeofBiobufhdr = 52;
  231. aggr Biobufhdr
  232. {
  233. 'D' 0 icount;
  234. 'D' 4 ocount;
  235. 'D' 8 rdline;
  236. 'D' 12 runesize;
  237. 'D' 16 state;
  238. 'D' 20 fid;
  239. 'D' 24 flag;
  240. 'V' 28 offset;
  241. 'D' 36 bsize;
  242. 'X' 40 bbuf;
  243. 'X' 44 ebuf;
  244. 'X' 48 gbuf;
  245. };
  246. defn
  247. Biobufhdr(addr) {
  248. complex Biobufhdr addr;
  249. print(" icount ", addr.icount, "\n");
  250. print(" ocount ", addr.ocount, "\n");
  251. print(" rdline ", addr.rdline, "\n");
  252. print(" runesize ", addr.runesize, "\n");
  253. print(" state ", addr.state, "\n");
  254. print(" fid ", addr.fid, "\n");
  255. print(" flag ", addr.flag, "\n");
  256. print(" offset ", addr.offset, "\n");
  257. print(" bsize ", addr.bsize, "\n");
  258. print(" bbuf ", addr.bbuf\X, "\n");
  259. print(" ebuf ", addr.ebuf\X, "\n");
  260. print(" gbuf ", addr.gbuf\X, "\n");
  261. };
  262. sizeofBiobuf = 8248;
  263. aggr Biobuf
  264. {
  265. {
  266. 'D' 0 icount;
  267. 'D' 4 ocount;
  268. 'D' 8 rdline;
  269. 'D' 12 runesize;
  270. 'D' 16 state;
  271. 'D' 20 fid;
  272. 'D' 24 flag;
  273. 'V' 28 offset;
  274. 'D' 36 bsize;
  275. 'X' 40 bbuf;
  276. 'X' 44 ebuf;
  277. 'X' 48 gbuf;
  278. };
  279. 'a' 52 b;
  280. };
  281. defn
  282. Biobuf(addr) {
  283. complex Biobuf addr;
  284. print("Biobufhdr {\n");
  285. Biobufhdr(addr+0);
  286. print("}\n");
  287. print(" b ", addr.b, "\n");
  288. };
  289. sizeof_3_ = 4;
  290. aggr _3_
  291. {
  292. 'X' 0 sp;
  293. 'X' 0 rsp;
  294. };
  295. defn
  296. _3_(addr) {
  297. complex _3_ addr;
  298. print(" sp ", addr.sp\X, "\n");
  299. print(" rsp ", addr.rsp\X, "\n");
  300. };
  301. sizeof_4_ = 4;
  302. aggr _4_
  303. {
  304. 'X' 0 ep;
  305. 'X' 0 rep;
  306. };
  307. defn
  308. _4_(addr) {
  309. complex _4_ addr;
  310. print(" ep ", addr.ep\X, "\n");
  311. print(" rep ", addr.rep\X, "\n");
  312. };
  313. sizeofResub = 8;
  314. aggr Resub
  315. {
  316. {
  317. 'X' 0 sp;
  318. 'X' 0 rsp;
  319. };
  320. {
  321. 'X' 4 ep;
  322. 'X' 4 rep;
  323. };
  324. };
  325. defn
  326. Resub(addr) {
  327. complex Resub addr;
  328. print("_3_ {\n");
  329. _3_(addr+0);
  330. print("}\n");
  331. print("_4_ {\n");
  332. _4_(addr+4);
  333. print("}\n");
  334. };
  335. sizeofReclass = 132;
  336. aggr Reclass
  337. {
  338. 'X' 0 end;
  339. 'a' 4 spans;
  340. };
  341. defn
  342. Reclass(addr) {
  343. complex Reclass addr;
  344. print(" end ", addr.end\X, "\n");
  345. print(" spans ", addr.spans, "\n");
  346. };
  347. sizeof_5_ = 4;
  348. aggr _5_
  349. {
  350. 'A' Reclass 0 cp;
  351. 'u' 0 r;
  352. 'D' 0 subid;
  353. 'X' 0 right;
  354. };
  355. defn
  356. _5_(addr) {
  357. complex _5_ addr;
  358. print(" cp ", addr.cp\X, "\n");
  359. print(" r ", addr.r, "\n");
  360. print(" subid ", addr.subid, "\n");
  361. print(" right ", addr.right\X, "\n");
  362. };
  363. sizeof_6_ = 4;
  364. aggr _6_
  365. {
  366. 'X' 0 left;
  367. 'X' 0 next;
  368. };
  369. defn
  370. _6_(addr) {
  371. complex _6_ addr;
  372. print(" left ", addr.left\X, "\n");
  373. print(" next ", addr.next\X, "\n");
  374. };
  375. sizeofReinst = 12;
  376. aggr Reinst
  377. {
  378. 'D' 0 type;
  379. {
  380. 'A' Reclass 4 cp;
  381. 'u' 4 r;
  382. 'D' 4 subid;
  383. 'A' Reinst 4 right;
  384. };
  385. {
  386. 'A' Reinst 8 left;
  387. 'A' Reinst 8 next;
  388. };
  389. };
  390. defn
  391. Reinst(addr) {
  392. complex Reinst addr;
  393. print(" type ", addr.type, "\n");
  394. print("_5_ {\n");
  395. _5_(addr+4);
  396. print("}\n");
  397. print("_6_ {\n");
  398. _6_(addr+8);
  399. print("}\n");
  400. };
  401. sizeofReprog = 2176;
  402. aggr Reprog
  403. {
  404. 'A' Reinst 0 startinst;
  405. 'a' 4 class;
  406. 'a' 2116 firstinst;
  407. };
  408. defn
  409. Reprog(addr) {
  410. complex Reprog addr;
  411. print(" startinst ", addr.startinst\X, "\n");
  412. print(" class ", addr.class, "\n");
  413. print(" firstinst ", addr.firstinst, "\n");
  414. };
  415. complex Biobuf bout;
  416. sizeofBufblock = 16;
  417. aggr Bufblock
  418. {
  419. 'A' Bufblock 0 next;
  420. 'X' 4 start;
  421. 'X' 8 end;
  422. 'X' 12 current;
  423. };
  424. defn
  425. Bufblock(addr) {
  426. complex Bufblock addr;
  427. print(" next ", addr.next\X, "\n");
  428. print(" start ", addr.start\X, "\n");
  429. print(" end ", addr.end\X, "\n");
  430. print(" current ", addr.current\X, "\n");
  431. };
  432. sizeofWord = 8;
  433. aggr Word
  434. {
  435. 'X' 0 s;
  436. 'A' Word 4 next;
  437. };
  438. defn
  439. Word(addr) {
  440. complex Word addr;
  441. print(" s ", addr.s\X, "\n");
  442. print(" next ", addr.next\X, "\n");
  443. };
  444. sizeofEnvy = 8;
  445. aggr Envy
  446. {
  447. 'X' 0 name;
  448. 'A' Word 4 values;
  449. };
  450. defn
  451. Envy(addr) {
  452. complex Envy addr;
  453. print(" name ", addr.name\X, "\n");
  454. print(" values ", addr.values\X, "\n");
  455. };
  456. complex Envy envy;
  457. sizeofRule = 44;
  458. aggr Rule
  459. {
  460. 'X' 0 target;
  461. 'A' Word 4 $tail;
  462. 'X' 8 recipe;
  463. 'd' 12 attr;
  464. 'd' 14 line;
  465. 'X' 16 file;
  466. 'A' Word 20 alltargets;
  467. 'D' 24 rule;
  468. 'A' Reprog 28 pat;
  469. 'X' 32 prog;
  470. 'A' Rule 36 chain;
  471. 'A' Rule 40 next;
  472. };
  473. defn
  474. Rule(addr) {
  475. complex Rule addr;
  476. print(" target ", addr.target\X, "\n");
  477. print(" $tail ", addr.$tail\X, "\n");
  478. print(" recipe ", addr.recipe\X, "\n");
  479. print(" attr ", addr.attr, "\n");
  480. print(" line ", addr.line, "\n");
  481. print(" file ", addr.file\X, "\n");
  482. print(" alltargets ", addr.alltargets\X, "\n");
  483. print(" rule ", addr.rule, "\n");
  484. print(" pat ", addr.pat\X, "\n");
  485. print(" prog ", addr.prog\X, "\n");
  486. print(" chain ", addr.chain\X, "\n");
  487. print(" next ", addr.next\X, "\n");
  488. };
  489. complex Rule rules;
  490. complex Rule metarules;
  491. complex Rule patrule;
  492. sizeofArc = 64;
  493. aggr Arc
  494. {
  495. 'd' 0 flag;
  496. 'X' 4 n;
  497. 'A' Rule 8 r;
  498. 'X' 12 stem;
  499. 'X' 16 prog;
  500. 'a' 20 match;
  501. 'A' Arc 60 next;
  502. };
  503. defn
  504. Arc(addr) {
  505. complex Arc addr;
  506. print(" flag ", addr.flag, "\n");
  507. print(" n ", addr.n\X, "\n");
  508. print(" r ", addr.r\X, "\n");
  509. print(" stem ", addr.stem\X, "\n");
  510. print(" prog ", addr.prog\X, "\n");
  511. print(" match ", addr.match, "\n");
  512. print(" next ", addr.next\X, "\n");
  513. };
  514. sizeofNode = 20;
  515. aggr Node
  516. {
  517. 'X' 0 name;
  518. 'D' 4 time;
  519. 'u' 8 flags;
  520. 'A' Arc 12 prereqs;
  521. 'A' Node 16 next;
  522. };
  523. defn
  524. Node(addr) {
  525. complex Node addr;
  526. print(" name ", addr.name\X, "\n");
  527. print(" time ", addr.time, "\n");
  528. print(" flags ", addr.flags, "\n");
  529. print(" prereqs ", addr.prereqs\X, "\n");
  530. print(" next ", addr.next\X, "\n");
  531. };
  532. sizeofJob = 40;
  533. aggr Job
  534. {
  535. 'A' Rule 0 r;
  536. 'A' Node 4 n;
  537. 'X' 8 stem;
  538. 'X' 12 match;
  539. 'A' Word 16 p;
  540. 'A' Word 20 np;
  541. 'A' Word 24 t;
  542. 'A' Word 28 at;
  543. 'D' 32 nproc;
  544. 'A' Job 36 next;
  545. };
  546. defn
  547. Job(addr) {
  548. complex Job addr;
  549. print(" r ", addr.r\X, "\n");
  550. print(" n ", addr.n\X, "\n");
  551. print(" stem ", addr.stem\X, "\n");
  552. print(" match ", addr.match\X, "\n");
  553. print(" p ", addr.p\X, "\n");
  554. print(" np ", addr.np\X, "\n");
  555. print(" t ", addr.t\X, "\n");
  556. print(" at ", addr.at\X, "\n");
  557. print(" nproc ", addr.nproc, "\n");
  558. print(" next ", addr.next\X, "\n");
  559. };
  560. complex Job jobs;
  561. sizeofSymtab = 16;
  562. aggr Symtab
  563. {
  564. 'd' 0 space;
  565. 'X' 4 name;
  566. 'X' 8 value;
  567. 'A' Symtab 12 next;
  568. };
  569. defn
  570. Symtab(addr) {
  571. complex Symtab addr;
  572. print(" space ", addr.space, "\n");
  573. print(" name ", addr.name\X, "\n");
  574. print(" value ", addr.value\X, "\n");
  575. print(" next ", addr.next\X, "\n");
  576. };
  577. S_VAR = 0;
  578. S_TARGET = 1;
  579. S_TIME = 2;
  580. S_PID = 3;
  581. S_NODE = 4;
  582. S_AGG = 5;
  583. S_BITCH = 6;
  584. S_NOEXPORT = 7;
  585. S_OVERRIDE = 8;
  586. S_OUTOFDATE = 9;
  587. S_MAKEFILE = 10;
  588. S_MAKEVAR = 11;
  589. S_EXPORTED = 12;
  590. S_BULKED = 13;
  591. S_WESET = 14;
  592. S_INTERNAL = 15;
  593. complex Word readenv:w;
  594. complex Word encodenulls:w;
  595. complex Word encodenulls:$head;
  596. complex Envy exportenv:e;
  597. complex Word exportenv:w;
  598. complex Symtab exportenv:sy;
  599. complex Dir dirtime:d;
  600. complex Waitmsg waitfor:wm;
  601. complex Bufblock execsh:buf;
  602. complex Envy execsh:e;
  603. complex Envy pipecmd:e;
  604. complex Dir chgtime:sbuf;
  605. complex Resub rcopy:match;
  606. complex Dir mkdirstat:buf;